##// END OF EJS Templates
Ensure that, with autocall off, attribute access will never be performed...
fperez -
Show More
@@ -1,2056 +1,2070 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 IPython -- An enhanced Interactive Python
3 IPython -- An enhanced Interactive Python
4
4
5 Requires Python 2.1 or newer.
5 Requires Python 2.1 or newer.
6
6
7 This file contains all the classes and helper functions specific to IPython.
7 This file contains all the classes and helper functions specific to IPython.
8
8
9 $Id: iplib.py 975 2005-12-29 23:50:22Z fperez $
9 $Id: iplib.py 976 2005-12-30 01:02:09Z fperez $
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-2005 Fernando Perez. <fperez@colorado.edu>
14 # Copyright (C) 2001-2005 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 traceback
58 import traceback
59 import types
59 import types
60
60
61 from pprint import pprint, pformat
61 from pprint import pprint, pformat
62
62
63 # IPython's own modules
63 # IPython's own modules
64 import IPython
64 import IPython
65 from IPython import OInspect,PyColorize,ultraTB
65 from IPython import OInspect,PyColorize,ultraTB
66 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
66 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
67 from IPython.FakeModule import FakeModule
67 from IPython.FakeModule import FakeModule
68 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
68 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
69 from IPython.Logger import Logger
69 from IPython.Logger import Logger
70 from IPython.Magic import Magic
70 from IPython.Magic import Magic
71 from IPython.Prompts import CachedOutput
71 from IPython.Prompts import CachedOutput
72 from IPython.Struct import Struct
72 from IPython.Struct import Struct
73 from IPython.background_jobs import BackgroundJobManager
73 from IPython.background_jobs import BackgroundJobManager
74 from IPython.usage import cmd_line_usage,interactive_usage
74 from IPython.usage import cmd_line_usage,interactive_usage
75 from IPython.genutils import *
75 from IPython.genutils import *
76
76
77 # store the builtin raw_input globally, and use this always, in case user code
77 # store the builtin raw_input globally, and use this always, in case user code
78 # overwrites it (like wx.py.PyShell does)
78 # overwrites it (like wx.py.PyShell does)
79 raw_input_original = raw_input
79 raw_input_original = raw_input
80
80
81 # compiled regexps for autoindent management
81 # compiled regexps for autoindent management
82 ini_spaces_re = re.compile(r'^(\s+)')
82 ini_spaces_re = re.compile(r'^(\s+)')
83 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
83 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
84
84
85 #****************************************************************************
85 #****************************************************************************
86 # Some utility function definitions
86 # Some utility function definitions
87
87
88 def softspace(file, newvalue):
88 def softspace(file, newvalue):
89 """Copied from code.py, to remove the dependency"""
89 """Copied from code.py, to remove the dependency"""
90 oldvalue = 0
90 oldvalue = 0
91 try:
91 try:
92 oldvalue = file.softspace
92 oldvalue = file.softspace
93 except AttributeError:
93 except AttributeError:
94 pass
94 pass
95 try:
95 try:
96 file.softspace = newvalue
96 file.softspace = newvalue
97 except (AttributeError, TypeError):
97 except (AttributeError, TypeError):
98 # "attribute-less object" or "read-only attributes"
98 # "attribute-less object" or "read-only attributes"
99 pass
99 pass
100 return oldvalue
100 return oldvalue
101
101
102 #****************************************************************************
102 #****************************************************************************
103 # These special functions get installed in the builtin namespace, to provide
103 # These special functions get installed in the builtin namespace, to provide
104 # programmatic (pure python) access to magics and aliases. This is important
104 # programmatic (pure python) access to magics and aliases. This is important
105 # for logging, user scripting, and more.
105 # for logging, user scripting, and more.
106
106
107 def ipmagic(arg_s):
107 def ipmagic(arg_s):
108 """Call a magic function by name.
108 """Call a magic function by name.
109
109
110 Input: a string containing the name of the magic function to call and any
110 Input: a string containing the name of the magic function to call and any
111 additional arguments to be passed to the magic.
111 additional arguments to be passed to the magic.
112
112
113 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
113 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
114 prompt:
114 prompt:
115
115
116 In[1]: %name -opt foo bar
116 In[1]: %name -opt foo bar
117
117
118 To call a magic without arguments, simply use ipmagic('name').
118 To call a magic without arguments, simply use ipmagic('name').
119
119
120 This provides a proper Python function to call IPython's magics in any
120 This provides a proper Python function to call IPython's magics in any
121 valid Python code you can type at the interpreter, including loops and
121 valid Python code you can type at the interpreter, including loops and
122 compound statements. It is added by IPython to the Python builtin
122 compound statements. It is added by IPython to the Python builtin
123 namespace upon initialization."""
123 namespace upon initialization."""
124
124
125 args = arg_s.split(' ',1)
125 args = arg_s.split(' ',1)
126 magic_name = args[0]
126 magic_name = args[0]
127 if magic_name.startswith(__IPYTHON__.ESC_MAGIC):
127 if magic_name.startswith(__IPYTHON__.ESC_MAGIC):
128 magic_name = magic_name[1:]
128 magic_name = magic_name[1:]
129 try:
129 try:
130 magic_args = args[1]
130 magic_args = args[1]
131 except IndexError:
131 except IndexError:
132 magic_args = ''
132 magic_args = ''
133 fn = getattr(__IPYTHON__,'magic_'+magic_name,None)
133 fn = getattr(__IPYTHON__,'magic_'+magic_name,None)
134 if fn is None:
134 if fn is None:
135 error("Magic function `%s` not found." % magic_name)
135 error("Magic function `%s` not found." % magic_name)
136 else:
136 else:
137 magic_args = __IPYTHON__.var_expand(magic_args)
137 magic_args = __IPYTHON__.var_expand(magic_args)
138 return fn(magic_args)
138 return fn(magic_args)
139
139
140 def ipalias(arg_s):
140 def ipalias(arg_s):
141 """Call an alias by name.
141 """Call an alias by name.
142
142
143 Input: a string containing the name of the alias to call and any
143 Input: a string containing the name of the alias to call and any
144 additional arguments to be passed to the magic.
144 additional arguments to be passed to the magic.
145
145
146 ipalias('name -opt foo bar') is equivalent to typing at the ipython
146 ipalias('name -opt foo bar') is equivalent to typing at the ipython
147 prompt:
147 prompt:
148
148
149 In[1]: name -opt foo bar
149 In[1]: name -opt foo bar
150
150
151 To call an alias without arguments, simply use ipalias('name').
151 To call an alias without arguments, simply use ipalias('name').
152
152
153 This provides a proper Python function to call IPython's aliases in any
153 This provides a proper Python function to call IPython's aliases in any
154 valid Python code you can type at the interpreter, including loops and
154 valid Python code you can type at the interpreter, including loops and
155 compound statements. It is added by IPython to the Python builtin
155 compound statements. It is added by IPython to the Python builtin
156 namespace upon initialization."""
156 namespace upon initialization."""
157
157
158 args = arg_s.split(' ',1)
158 args = arg_s.split(' ',1)
159 alias_name = args[0]
159 alias_name = args[0]
160 try:
160 try:
161 alias_args = args[1]
161 alias_args = args[1]
162 except IndexError:
162 except IndexError:
163 alias_args = ''
163 alias_args = ''
164 if alias_name in __IPYTHON__.alias_table:
164 if alias_name in __IPYTHON__.alias_table:
165 __IPYTHON__.call_alias(alias_name,alias_args)
165 __IPYTHON__.call_alias(alias_name,alias_args)
166 else:
166 else:
167 error("Alias `%s` not found." % alias_name)
167 error("Alias `%s` not found." % alias_name)
168
168
169 #****************************************************************************
169 #****************************************************************************
170 # Local use exceptions
170 # Local use exceptions
171 class SpaceInInput(exceptions.Exception): pass
171 class SpaceInInput(exceptions.Exception): pass
172
172
173 #****************************************************************************
173 #****************************************************************************
174 # Local use classes
174 # Local use classes
175 class Bunch: pass
175 class Bunch: pass
176
176
177 class InputList(list):
177 class InputList(list):
178 """Class to store user input.
178 """Class to store user input.
179
179
180 It's basically a list, but slices return a string instead of a list, thus
180 It's basically a list, but slices return a string instead of a list, thus
181 allowing things like (assuming 'In' is an instance):
181 allowing things like (assuming 'In' is an instance):
182
182
183 exec In[4:7]
183 exec In[4:7]
184
184
185 or
185 or
186
186
187 exec In[5:9] + In[14] + In[21:25]"""
187 exec In[5:9] + In[14] + In[21:25]"""
188
188
189 def __getslice__(self,i,j):
189 def __getslice__(self,i,j):
190 return ''.join(list.__getslice__(self,i,j))
190 return ''.join(list.__getslice__(self,i,j))
191
191
192 class SyntaxTB(ultraTB.ListTB):
192 class SyntaxTB(ultraTB.ListTB):
193 """Extension which holds some state: the last exception value"""
193 """Extension which holds some state: the last exception value"""
194
194
195 def __init__(self,color_scheme = 'NoColor'):
195 def __init__(self,color_scheme = 'NoColor'):
196 ultraTB.ListTB.__init__(self,color_scheme)
196 ultraTB.ListTB.__init__(self,color_scheme)
197 self.last_syntax_error = None
197 self.last_syntax_error = None
198
198
199 def __call__(self, etype, value, elist):
199 def __call__(self, etype, value, elist):
200 self.last_syntax_error = value
200 self.last_syntax_error = value
201 ultraTB.ListTB.__call__(self,etype,value,elist)
201 ultraTB.ListTB.__call__(self,etype,value,elist)
202
202
203 def clear_err_state(self):
203 def clear_err_state(self):
204 """Return the current error state and clear it"""
204 """Return the current error state and clear it"""
205 e = self.last_syntax_error
205 e = self.last_syntax_error
206 self.last_syntax_error = None
206 self.last_syntax_error = None
207 return e
207 return e
208
208
209 #****************************************************************************
209 #****************************************************************************
210 # Main IPython class
210 # Main IPython class
211
211
212 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
212 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
213 # until a full rewrite is made. I've cleaned all cross-class uses of
213 # until a full rewrite is made. I've cleaned all cross-class uses of
214 # attributes and methods, but too much user code out there relies on the
214 # attributes and methods, but too much user code out there relies on the
215 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
215 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
216 #
216 #
217 # But at least now, all the pieces have been separated and we could, in
217 # But at least now, all the pieces have been separated and we could, in
218 # principle, stop using the mixin. This will ease the transition to the
218 # principle, stop using the mixin. This will ease the transition to the
219 # chainsaw branch.
219 # chainsaw branch.
220
220
221 # For reference, the following is the list of 'self.foo' uses in the Magic
221 # For reference, the following is the list of 'self.foo' uses in the Magic
222 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
222 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
223 # class, to prevent clashes.
223 # class, to prevent clashes.
224
224
225 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
225 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
226 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
226 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
227 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
227 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
228 # 'self.value']
228 # 'self.value']
229
229
230 class InteractiveShell(Magic):
230 class InteractiveShell(Magic):
231 """An enhanced console for Python."""
231 """An enhanced console for Python."""
232
232
233 # class attribute to indicate whether the class supports threads or not.
233 # class attribute to indicate whether the class supports threads or not.
234 # Subclasses with thread support should override this as needed.
234 # Subclasses with thread support should override this as needed.
235 isthreaded = False
235 isthreaded = False
236
236
237 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
237 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
238 user_ns = None,user_global_ns=None,banner2='',
238 user_ns = None,user_global_ns=None,banner2='',
239 custom_exceptions=((),None),embedded=False):
239 custom_exceptions=((),None),embedded=False):
240
240
241 # some minimal strict typechecks. For some core data structures, I
241 # some minimal strict typechecks. For some core data structures, I
242 # want actual basic python types, not just anything that looks like
242 # want actual basic python types, not just anything that looks like
243 # one. This is especially true for namespaces.
243 # one. This is especially true for namespaces.
244 for ns in (user_ns,user_global_ns):
244 for ns in (user_ns,user_global_ns):
245 if ns is not None and type(ns) != types.DictType:
245 if ns is not None and type(ns) != types.DictType:
246 raise TypeError,'namespace must be a dictionary'
246 raise TypeError,'namespace must be a dictionary'
247
247
248 # Put a reference to self in builtins so that any form of embedded or
248 # Put a reference to self in builtins so that any form of embedded or
249 # imported code can test for being inside IPython.
249 # imported code can test for being inside IPython.
250 __builtin__.__IPYTHON__ = self
250 __builtin__.__IPYTHON__ = self
251
251
252 # And load into builtins ipmagic/ipalias as well
252 # And load into builtins ipmagic/ipalias as well
253 __builtin__.ipmagic = ipmagic
253 __builtin__.ipmagic = ipmagic
254 __builtin__.ipalias = ipalias
254 __builtin__.ipalias = ipalias
255
255
256 # Add to __builtin__ other parts of IPython's public API
256 # Add to __builtin__ other parts of IPython's public API
257 __builtin__.ip_set_hook = self.set_hook
257 __builtin__.ip_set_hook = self.set_hook
258
258
259 # Keep in the builtins a flag for when IPython is active. We set it
259 # Keep in the builtins a flag for when IPython is active. We set it
260 # with setdefault so that multiple nested IPythons don't clobber one
260 # with setdefault so that multiple nested IPythons don't clobber one
261 # another. Each will increase its value by one upon being activated,
261 # another. Each will increase its value by one upon being activated,
262 # which also gives us a way to determine the nesting level.
262 # which also gives us a way to determine the nesting level.
263 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
263 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
264
264
265 # Do the intuitively correct thing for quit/exit: we remove the
265 # Do the intuitively correct thing for quit/exit: we remove the
266 # builtins if they exist, and our own prefilter routine will handle
266 # builtins if they exist, and our own prefilter routine will handle
267 # these special cases
267 # these special cases
268 try:
268 try:
269 del __builtin__.exit, __builtin__.quit
269 del __builtin__.exit, __builtin__.quit
270 except AttributeError:
270 except AttributeError:
271 pass
271 pass
272
272
273 # Store the actual shell's name
273 # Store the actual shell's name
274 self.name = name
274 self.name = name
275
275
276 # We need to know whether the instance is meant for embedding, since
276 # We need to know whether the instance is meant for embedding, since
277 # global/local namespaces need to be handled differently in that case
277 # global/local namespaces need to be handled differently in that case
278 self.embedded = embedded
278 self.embedded = embedded
279
279
280 # command compiler
280 # command compiler
281 self.compile = codeop.CommandCompiler()
281 self.compile = codeop.CommandCompiler()
282
282
283 # User input buffer
283 # User input buffer
284 self.buffer = []
284 self.buffer = []
285
285
286 # Default name given in compilation of code
286 # Default name given in compilation of code
287 self.filename = '<ipython console>'
287 self.filename = '<ipython console>'
288
288
289 # Create the namespace where the user will operate. user_ns is
289 # Create the namespace where the user will operate. user_ns is
290 # normally the only one used, and it is passed to the exec calls as
290 # normally the only one used, and it is passed to the exec calls as
291 # the locals argument. But we do carry a user_global_ns namespace
291 # the locals argument. But we do carry a user_global_ns namespace
292 # given as the exec 'globals' argument, This is useful in embedding
292 # given as the exec 'globals' argument, This is useful in embedding
293 # situations where the ipython shell opens in a context where the
293 # situations where the ipython shell opens in a context where the
294 # distinction between locals and globals is meaningful.
294 # distinction between locals and globals is meaningful.
295
295
296 # FIXME. For some strange reason, __builtins__ is showing up at user
296 # FIXME. For some strange reason, __builtins__ is showing up at user
297 # level as a dict instead of a module. This is a manual fix, but I
297 # level as a dict instead of a module. This is a manual fix, but I
298 # should really track down where the problem is coming from. Alex
298 # should really track down where the problem is coming from. Alex
299 # Schmolck reported this problem first.
299 # Schmolck reported this problem first.
300
300
301 # A useful post by Alex Martelli on this topic:
301 # A useful post by Alex Martelli on this topic:
302 # Re: inconsistent value from __builtins__
302 # Re: inconsistent value from __builtins__
303 # Von: Alex Martelli <aleaxit@yahoo.com>
303 # Von: Alex Martelli <aleaxit@yahoo.com>
304 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
304 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
305 # Gruppen: comp.lang.python
305 # Gruppen: comp.lang.python
306
306
307 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
307 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
308 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
308 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
309 # > <type 'dict'>
309 # > <type 'dict'>
310 # > >>> print type(__builtins__)
310 # > >>> print type(__builtins__)
311 # > <type 'module'>
311 # > <type 'module'>
312 # > Is this difference in return value intentional?
312 # > Is this difference in return value intentional?
313
313
314 # Well, it's documented that '__builtins__' can be either a dictionary
314 # Well, it's documented that '__builtins__' can be either a dictionary
315 # or a module, and it's been that way for a long time. Whether it's
315 # or a module, and it's been that way for a long time. Whether it's
316 # intentional (or sensible), I don't know. In any case, the idea is
316 # intentional (or sensible), I don't know. In any case, the idea is
317 # that if you need to access the built-in namespace directly, you
317 # that if you need to access the built-in namespace directly, you
318 # should start with "import __builtin__" (note, no 's') which will
318 # should start with "import __builtin__" (note, no 's') which will
319 # definitely give you a module. Yeah, it's somewhatΒ confusing:-(.
319 # definitely give you a module. Yeah, it's somewhatΒ confusing:-(.
320
320
321 if user_ns is None:
321 if user_ns is None:
322 # Set __name__ to __main__ to better match the behavior of the
322 # Set __name__ to __main__ to better match the behavior of the
323 # normal interpreter.
323 # normal interpreter.
324 user_ns = {'__name__' :'__main__',
324 user_ns = {'__name__' :'__main__',
325 '__builtins__' : __builtin__,
325 '__builtins__' : __builtin__,
326 }
326 }
327
327
328 if user_global_ns is None:
328 if user_global_ns is None:
329 user_global_ns = {}
329 user_global_ns = {}
330
330
331 # Assign namespaces
331 # Assign namespaces
332 # This is the namespace where all normal user variables live
332 # This is the namespace where all normal user variables live
333 self.user_ns = user_ns
333 self.user_ns = user_ns
334 # Embedded instances require a separate namespace for globals.
334 # Embedded instances require a separate namespace for globals.
335 # Normally this one is unused by non-embedded instances.
335 # Normally this one is unused by non-embedded instances.
336 self.user_global_ns = user_global_ns
336 self.user_global_ns = user_global_ns
337 # A namespace to keep track of internal data structures to prevent
337 # A namespace to keep track of internal data structures to prevent
338 # them from cluttering user-visible stuff. Will be updated later
338 # them from cluttering user-visible stuff. Will be updated later
339 self.internal_ns = {}
339 self.internal_ns = {}
340
340
341 # Namespace of system aliases. Each entry in the alias
341 # Namespace of system aliases. Each entry in the alias
342 # table must be a 2-tuple of the form (N,name), where N is the number
342 # table must be a 2-tuple of the form (N,name), where N is the number
343 # of positional arguments of the alias.
343 # of positional arguments of the alias.
344 self.alias_table = {}
344 self.alias_table = {}
345
345
346 # A table holding all the namespaces IPython deals with, so that
346 # A table holding all the namespaces IPython deals with, so that
347 # introspection facilities can search easily.
347 # introspection facilities can search easily.
348 self.ns_table = {'user':user_ns,
348 self.ns_table = {'user':user_ns,
349 'user_global':user_global_ns,
349 'user_global':user_global_ns,
350 'alias':self.alias_table,
350 'alias':self.alias_table,
351 'internal':self.internal_ns,
351 'internal':self.internal_ns,
352 'builtin':__builtin__.__dict__
352 'builtin':__builtin__.__dict__
353 }
353 }
354
354
355 # The user namespace MUST have a pointer to the shell itself.
355 # The user namespace MUST have a pointer to the shell itself.
356 self.user_ns[name] = self
356 self.user_ns[name] = self
357
357
358 # We need to insert into sys.modules something that looks like a
358 # We need to insert into sys.modules something that looks like a
359 # module but which accesses the IPython namespace, for shelve and
359 # module but which accesses the IPython namespace, for shelve and
360 # pickle to work interactively. Normally they rely on getting
360 # pickle to work interactively. Normally they rely on getting
361 # everything out of __main__, but for embedding purposes each IPython
361 # everything out of __main__, but for embedding purposes each IPython
362 # instance has its own private namespace, so we can't go shoving
362 # instance has its own private namespace, so we can't go shoving
363 # everything into __main__.
363 # everything into __main__.
364
364
365 # note, however, that we should only do this for non-embedded
365 # note, however, that we should only do this for non-embedded
366 # ipythons, which really mimic the __main__.__dict__ with their own
366 # ipythons, which really mimic the __main__.__dict__ with their own
367 # namespace. Embedded instances, on the other hand, should not do
367 # namespace. Embedded instances, on the other hand, should not do
368 # this because they need to manage the user local/global namespaces
368 # this because they need to manage the user local/global namespaces
369 # only, but they live within a 'normal' __main__ (meaning, they
369 # only, but they live within a 'normal' __main__ (meaning, they
370 # shouldn't overtake the execution environment of the script they're
370 # shouldn't overtake the execution environment of the script they're
371 # embedded in).
371 # embedded in).
372
372
373 if not embedded:
373 if not embedded:
374 try:
374 try:
375 main_name = self.user_ns['__name__']
375 main_name = self.user_ns['__name__']
376 except KeyError:
376 except KeyError:
377 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
377 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
378 else:
378 else:
379 #print "pickle hack in place" # dbg
379 #print "pickle hack in place" # dbg
380 sys.modules[main_name] = FakeModule(self.user_ns)
380 sys.modules[main_name] = FakeModule(self.user_ns)
381
381
382 # List of input with multi-line handling.
382 # List of input with multi-line handling.
383 # Fill its zero entry, user counter starts at 1
383 # Fill its zero entry, user counter starts at 1
384 self.input_hist = InputList(['\n'])
384 self.input_hist = InputList(['\n'])
385
385
386 # list of visited directories
386 # list of visited directories
387 try:
387 try:
388 self.dir_hist = [os.getcwd()]
388 self.dir_hist = [os.getcwd()]
389 except IOError, e:
389 except IOError, e:
390 self.dir_hist = []
390 self.dir_hist = []
391
391
392 # dict of output history
392 # dict of output history
393 self.output_hist = {}
393 self.output_hist = {}
394
394
395 # dict of things NOT to alias (keywords, builtins and some magics)
395 # dict of things NOT to alias (keywords, builtins and some magics)
396 no_alias = {}
396 no_alias = {}
397 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
397 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
398 for key in keyword.kwlist + no_alias_magics:
398 for key in keyword.kwlist + no_alias_magics:
399 no_alias[key] = 1
399 no_alias[key] = 1
400 no_alias.update(__builtin__.__dict__)
400 no_alias.update(__builtin__.__dict__)
401 self.no_alias = no_alias
401 self.no_alias = no_alias
402
402
403 # make global variables for user access to these
403 # make global variables for user access to these
404 self.user_ns['_ih'] = self.input_hist
404 self.user_ns['_ih'] = self.input_hist
405 self.user_ns['_oh'] = self.output_hist
405 self.user_ns['_oh'] = self.output_hist
406 self.user_ns['_dh'] = self.dir_hist
406 self.user_ns['_dh'] = self.dir_hist
407
407
408 # user aliases to input and output histories
408 # user aliases to input and output histories
409 self.user_ns['In'] = self.input_hist
409 self.user_ns['In'] = self.input_hist
410 self.user_ns['Out'] = self.output_hist
410 self.user_ns['Out'] = self.output_hist
411
411
412 # Object variable to store code object waiting execution. This is
412 # Object variable to store code object waiting execution. This is
413 # used mainly by the multithreaded shells, but it can come in handy in
413 # used mainly by the multithreaded shells, but it can come in handy in
414 # other situations. No need to use a Queue here, since it's a single
414 # other situations. No need to use a Queue here, since it's a single
415 # item which gets cleared once run.
415 # item which gets cleared once run.
416 self.code_to_run = None
416 self.code_to_run = None
417
417
418 # Job manager (for jobs run as background threads)
418 # Job manager (for jobs run as background threads)
419 self.jobs = BackgroundJobManager()
419 self.jobs = BackgroundJobManager()
420 # Put the job manager into builtins so it's always there.
420 # Put the job manager into builtins so it's always there.
421 __builtin__.jobs = self.jobs
421 __builtin__.jobs = self.jobs
422
422
423 # escapes for automatic behavior on the command line
423 # escapes for automatic behavior on the command line
424 self.ESC_SHELL = '!'
424 self.ESC_SHELL = '!'
425 self.ESC_HELP = '?'
425 self.ESC_HELP = '?'
426 self.ESC_MAGIC = '%'
426 self.ESC_MAGIC = '%'
427 self.ESC_QUOTE = ','
427 self.ESC_QUOTE = ','
428 self.ESC_QUOTE2 = ';'
428 self.ESC_QUOTE2 = ';'
429 self.ESC_PAREN = '/'
429 self.ESC_PAREN = '/'
430
430
431 # And their associated handlers
431 # And their associated handlers
432 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
432 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
433 self.ESC_QUOTE : self.handle_auto,
433 self.ESC_QUOTE : self.handle_auto,
434 self.ESC_QUOTE2 : self.handle_auto,
434 self.ESC_QUOTE2 : self.handle_auto,
435 self.ESC_MAGIC : self.handle_magic,
435 self.ESC_MAGIC : self.handle_magic,
436 self.ESC_HELP : self.handle_help,
436 self.ESC_HELP : self.handle_help,
437 self.ESC_SHELL : self.handle_shell_escape,
437 self.ESC_SHELL : self.handle_shell_escape,
438 }
438 }
439
439
440 # class initializations
440 # class initializations
441 Magic.__init__(self,self)
441 Magic.__init__(self,self)
442
442
443 # Python source parser/formatter for syntax highlighting
443 # Python source parser/formatter for syntax highlighting
444 pyformat = PyColorize.Parser().format
444 pyformat = PyColorize.Parser().format
445 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
445 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
446
446
447 # hooks holds pointers used for user-side customizations
447 # hooks holds pointers used for user-side customizations
448 self.hooks = Struct()
448 self.hooks = Struct()
449
449
450 # Set all default hooks, defined in the IPython.hooks module.
450 # Set all default hooks, defined in the IPython.hooks module.
451 hooks = IPython.hooks
451 hooks = IPython.hooks
452 for hook_name in hooks.__all__:
452 for hook_name in hooks.__all__:
453 self.set_hook(hook_name,getattr(hooks,hook_name))
453 self.set_hook(hook_name,getattr(hooks,hook_name))
454
454
455 # Flag to mark unconditional exit
455 # Flag to mark unconditional exit
456 self.exit_now = False
456 self.exit_now = False
457
457
458 self.usage_min = """\
458 self.usage_min = """\
459 An enhanced console for Python.
459 An enhanced console for Python.
460 Some of its features are:
460 Some of its features are:
461 - Readline support if the readline library is present.
461 - Readline support if the readline library is present.
462 - Tab completion in the local namespace.
462 - Tab completion in the local namespace.
463 - Logging of input, see command-line options.
463 - Logging of input, see command-line options.
464 - System shell escape via ! , eg !ls.
464 - System shell escape via ! , eg !ls.
465 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
465 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
466 - Keeps track of locally defined variables via %who, %whos.
466 - Keeps track of locally defined variables via %who, %whos.
467 - Show object information with a ? eg ?x or x? (use ?? for more info).
467 - Show object information with a ? eg ?x or x? (use ?? for more info).
468 """
468 """
469 if usage: self.usage = usage
469 if usage: self.usage = usage
470 else: self.usage = self.usage_min
470 else: self.usage = self.usage_min
471
471
472 # Storage
472 # Storage
473 self.rc = rc # This will hold all configuration information
473 self.rc = rc # This will hold all configuration information
474 self.inputcache = []
474 self.inputcache = []
475 self._boundcache = []
475 self._boundcache = []
476 self.pager = 'less'
476 self.pager = 'less'
477 # temporary files used for various purposes. Deleted at exit.
477 # temporary files used for various purposes. Deleted at exit.
478 self.tempfiles = []
478 self.tempfiles = []
479
479
480 # Keep track of readline usage (later set by init_readline)
480 # Keep track of readline usage (later set by init_readline)
481 self.has_readline = False
481 self.has_readline = False
482
482
483 # template for logfile headers. It gets resolved at runtime by the
483 # template for logfile headers. It gets resolved at runtime by the
484 # logstart method.
484 # logstart method.
485 self.loghead_tpl = \
485 self.loghead_tpl = \
486 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
486 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
487 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
487 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
488 #log# opts = %s
488 #log# opts = %s
489 #log# args = %s
489 #log# args = %s
490 #log# It is safe to make manual edits below here.
490 #log# It is safe to make manual edits below here.
491 #log#-----------------------------------------------------------------------
491 #log#-----------------------------------------------------------------------
492 """
492 """
493 # for pushd/popd management
493 # for pushd/popd management
494 try:
494 try:
495 self.home_dir = get_home_dir()
495 self.home_dir = get_home_dir()
496 except HomeDirError,msg:
496 except HomeDirError,msg:
497 fatal(msg)
497 fatal(msg)
498
498
499 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
499 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
500
500
501 # Functions to call the underlying shell.
501 # Functions to call the underlying shell.
502
502
503 # utility to expand user variables via Itpl
503 # utility to expand user variables via Itpl
504 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
504 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
505 self.user_ns))
505 self.user_ns))
506 # The first is similar to os.system, but it doesn't return a value,
506 # The first is similar to os.system, but it doesn't return a value,
507 # and it allows interpolation of variables in the user's namespace.
507 # and it allows interpolation of variables in the user's namespace.
508 self.system = lambda cmd: shell(self.var_expand(cmd),
508 self.system = lambda cmd: shell(self.var_expand(cmd),
509 header='IPython system call: ',
509 header='IPython system call: ',
510 verbose=self.rc.system_verbose)
510 verbose=self.rc.system_verbose)
511 # These are for getoutput and getoutputerror:
511 # These are for getoutput and getoutputerror:
512 self.getoutput = lambda cmd: \
512 self.getoutput = lambda cmd: \
513 getoutput(self.var_expand(cmd),
513 getoutput(self.var_expand(cmd),
514 header='IPython system call: ',
514 header='IPython system call: ',
515 verbose=self.rc.system_verbose)
515 verbose=self.rc.system_verbose)
516 self.getoutputerror = lambda cmd: \
516 self.getoutputerror = lambda cmd: \
517 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
517 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
518 self.user_ns)),
518 self.user_ns)),
519 header='IPython system call: ',
519 header='IPython system call: ',
520 verbose=self.rc.system_verbose)
520 verbose=self.rc.system_verbose)
521
521
522 # RegExp for splitting line contents into pre-char//first
522 # RegExp for splitting line contents into pre-char//first
523 # word-method//rest. For clarity, each group in on one line.
523 # word-method//rest. For clarity, each group in on one line.
524
524
525 # WARNING: update the regexp if the above escapes are changed, as they
525 # WARNING: update the regexp if the above escapes are changed, as they
526 # are hardwired in.
526 # are hardwired in.
527
527
528 # Don't get carried away with trying to make the autocalling catch too
528 # Don't get carried away with trying to make the autocalling catch too
529 # much: it's better to be conservative rather than to trigger hidden
529 # much: it's better to be conservative rather than to trigger hidden
530 # evals() somewhere and end up causing side effects.
530 # evals() somewhere and end up causing side effects.
531
531
532 self.line_split = re.compile(r'^([\s*,;/])'
532 self.line_split = re.compile(r'^([\s*,;/])'
533 r'([\?\w\.]+\w*\s*)'
533 r'([\?\w\.]+\w*\s*)'
534 r'(\(?.*$)')
534 r'(\(?.*$)')
535
535
536 # Original re, keep around for a while in case changes break something
536 # Original re, keep around for a while in case changes break something
537 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
537 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
538 # r'(\s*[\?\w\.]+\w*\s*)'
538 # r'(\s*[\?\w\.]+\w*\s*)'
539 # r'(\(?.*$)')
539 # r'(\(?.*$)')
540
540
541 # RegExp to identify potential function names
541 # RegExp to identify potential function names
542 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
542 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
543 # RegExp to exclude strings with this start from autocalling
543 # RegExp to exclude strings with this start from autocalling
544 self.re_exclude_auto = re.compile('^[!=()<>,\*/\+-]|^is ')
544 self.re_exclude_auto = re.compile('^[!=()<>,\*/\+-]|^is ')
545
545
546 # try to catch also methods for stuff in lists/tuples/dicts: off
546 # try to catch also methods for stuff in lists/tuples/dicts: off
547 # (experimental). For this to work, the line_split regexp would need
547 # (experimental). For this to work, the line_split regexp would need
548 # to be modified so it wouldn't break things at '['. That line is
548 # to be modified so it wouldn't break things at '['. That line is
549 # nasty enough that I shouldn't change it until I can test it _well_.
549 # nasty enough that I shouldn't change it until I can test it _well_.
550 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
550 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
551
551
552 # keep track of where we started running (mainly for crash post-mortem)
552 # keep track of where we started running (mainly for crash post-mortem)
553 self.starting_dir = os.getcwd()
553 self.starting_dir = os.getcwd()
554
554
555 # Various switches which can be set
555 # Various switches which can be set
556 self.CACHELENGTH = 5000 # this is cheap, it's just text
556 self.CACHELENGTH = 5000 # this is cheap, it's just text
557 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
557 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
558 self.banner2 = banner2
558 self.banner2 = banner2
559
559
560 # TraceBack handlers:
560 # TraceBack handlers:
561
561
562 # Syntax error handler.
562 # Syntax error handler.
563 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
563 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
564
564
565 # The interactive one is initialized with an offset, meaning we always
565 # The interactive one is initialized with an offset, meaning we always
566 # want to remove the topmost item in the traceback, which is our own
566 # want to remove the topmost item in the traceback, which is our own
567 # internal code. Valid modes: ['Plain','Context','Verbose']
567 # internal code. Valid modes: ['Plain','Context','Verbose']
568 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
568 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
569 color_scheme='NoColor',
569 color_scheme='NoColor',
570 tb_offset = 1)
570 tb_offset = 1)
571
571
572 # IPython itself shouldn't crash. This will produce a detailed
572 # IPython itself shouldn't crash. This will produce a detailed
573 # post-mortem if it does. But we only install the crash handler for
573 # post-mortem if it does. But we only install the crash handler for
574 # non-threaded shells, the threaded ones use a normal verbose reporter
574 # non-threaded shells, the threaded ones use a normal verbose reporter
575 # and lose the crash handler. This is because exceptions in the main
575 # and lose the crash handler. This is because exceptions in the main
576 # thread (such as in GUI code) propagate directly to sys.excepthook,
576 # thread (such as in GUI code) propagate directly to sys.excepthook,
577 # and there's no point in printing crash dumps for every user exception.
577 # and there's no point in printing crash dumps for every user exception.
578 if self.isthreaded:
578 if self.isthreaded:
579 sys.excepthook = ultraTB.FormattedTB()
579 sys.excepthook = ultraTB.FormattedTB()
580 else:
580 else:
581 from IPython import CrashHandler
581 from IPython import CrashHandler
582 sys.excepthook = CrashHandler.CrashHandler(self)
582 sys.excepthook = CrashHandler.CrashHandler(self)
583
583
584 # The instance will store a pointer to this, so that runtime code
584 # The instance will store a pointer to this, so that runtime code
585 # (such as magics) can access it. This is because during the
585 # (such as magics) can access it. This is because during the
586 # read-eval loop, it gets temporarily overwritten (to deal with GUI
586 # read-eval loop, it gets temporarily overwritten (to deal with GUI
587 # frameworks).
587 # frameworks).
588 self.sys_excepthook = sys.excepthook
588 self.sys_excepthook = sys.excepthook
589
589
590 # and add any custom exception handlers the user may have specified
590 # and add any custom exception handlers the user may have specified
591 self.set_custom_exc(*custom_exceptions)
591 self.set_custom_exc(*custom_exceptions)
592
592
593 # Object inspector
593 # Object inspector
594 self.inspector = OInspect.Inspector(OInspect.InspectColors,
594 self.inspector = OInspect.Inspector(OInspect.InspectColors,
595 PyColorize.ANSICodeColors,
595 PyColorize.ANSICodeColors,
596 'NoColor')
596 'NoColor')
597 # indentation management
597 # indentation management
598 self.autoindent = False
598 self.autoindent = False
599 self.indent_current_nsp = 0
599 self.indent_current_nsp = 0
600 self.indent_current = '' # actual indent string
600 self.indent_current = '' # actual indent string
601
601
602 # Make some aliases automatically
602 # Make some aliases automatically
603 # Prepare list of shell aliases to auto-define
603 # Prepare list of shell aliases to auto-define
604 if os.name == 'posix':
604 if os.name == 'posix':
605 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
605 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
606 'mv mv -i','rm rm -i','cp cp -i',
606 'mv mv -i','rm rm -i','cp cp -i',
607 'cat cat','less less','clear clear',
607 'cat cat','less less','clear clear',
608 # a better ls
608 # a better ls
609 'ls ls -F',
609 'ls ls -F',
610 # long ls
610 # long ls
611 'll ls -lF',
611 'll ls -lF',
612 # color ls
612 # color ls
613 'lc ls -F -o --color',
613 'lc ls -F -o --color',
614 # ls normal files only
614 # ls normal files only
615 'lf ls -F -o --color %l | grep ^-',
615 'lf ls -F -o --color %l | grep ^-',
616 # ls symbolic links
616 # ls symbolic links
617 'lk ls -F -o --color %l | grep ^l',
617 'lk ls -F -o --color %l | grep ^l',
618 # directories or links to directories,
618 # directories or links to directories,
619 'ldir ls -F -o --color %l | grep /$',
619 'ldir ls -F -o --color %l | grep /$',
620 # things which are executable
620 # things which are executable
621 'lx ls -F -o --color %l | grep ^-..x',
621 'lx ls -F -o --color %l | grep ^-..x',
622 )
622 )
623 elif os.name in ['nt','dos']:
623 elif os.name in ['nt','dos']:
624 auto_alias = ('dir dir /on', 'ls dir /on',
624 auto_alias = ('dir dir /on', 'ls dir /on',
625 'ddir dir /ad /on', 'ldir dir /ad /on',
625 'ddir dir /ad /on', 'ldir dir /ad /on',
626 'mkdir mkdir','rmdir rmdir','echo echo',
626 'mkdir mkdir','rmdir rmdir','echo echo',
627 'ren ren','cls cls','copy copy')
627 'ren ren','cls cls','copy copy')
628 else:
628 else:
629 auto_alias = ()
629 auto_alias = ()
630 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
630 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
631 # Call the actual (public) initializer
631 # Call the actual (public) initializer
632 self.init_auto_alias()
632 self.init_auto_alias()
633 # end __init__
633 # end __init__
634
634
635 def post_config_initialization(self):
635 def post_config_initialization(self):
636 """Post configuration init method
636 """Post configuration init method
637
637
638 This is called after the configuration files have been processed to
638 This is called after the configuration files have been processed to
639 'finalize' the initialization."""
639 'finalize' the initialization."""
640
640
641 rc = self.rc
641 rc = self.rc
642
642
643 # Load readline proper
643 # Load readline proper
644 if rc.readline:
644 if rc.readline:
645 self.init_readline()
645 self.init_readline()
646
646
647 # log system
647 # log system
648 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
648 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
649 # local shortcut, this is used a LOT
649 # local shortcut, this is used a LOT
650 self.log = self.logger.log
650 self.log = self.logger.log
651
651
652 # Initialize cache, set in/out prompts and printing system
652 # Initialize cache, set in/out prompts and printing system
653 self.outputcache = CachedOutput(self,
653 self.outputcache = CachedOutput(self,
654 rc.cache_size,
654 rc.cache_size,
655 rc.pprint,
655 rc.pprint,
656 input_sep = rc.separate_in,
656 input_sep = rc.separate_in,
657 output_sep = rc.separate_out,
657 output_sep = rc.separate_out,
658 output_sep2 = rc.separate_out2,
658 output_sep2 = rc.separate_out2,
659 ps1 = rc.prompt_in1,
659 ps1 = rc.prompt_in1,
660 ps2 = rc.prompt_in2,
660 ps2 = rc.prompt_in2,
661 ps_out = rc.prompt_out,
661 ps_out = rc.prompt_out,
662 pad_left = rc.prompts_pad_left)
662 pad_left = rc.prompts_pad_left)
663
663
664 # user may have over-ridden the default print hook:
664 # user may have over-ridden the default print hook:
665 try:
665 try:
666 self.outputcache.__class__.display = self.hooks.display
666 self.outputcache.__class__.display = self.hooks.display
667 except AttributeError:
667 except AttributeError:
668 pass
668 pass
669
669
670 # I don't like assigning globally to sys, because it means when embedding
670 # I don't like assigning globally to sys, because it means when embedding
671 # instances, each embedded instance overrides the previous choice. But
671 # instances, each embedded instance overrides the previous choice. But
672 # sys.displayhook seems to be called internally by exec, so I don't see a
672 # sys.displayhook seems to be called internally by exec, so I don't see a
673 # way around it.
673 # way around it.
674 sys.displayhook = self.outputcache
674 sys.displayhook = self.outputcache
675
675
676 # Set user colors (don't do it in the constructor above so that it
676 # Set user colors (don't do it in the constructor above so that it
677 # doesn't crash if colors option is invalid)
677 # doesn't crash if colors option is invalid)
678 self.magic_colors(rc.colors)
678 self.magic_colors(rc.colors)
679
679
680 # Set calling of pdb on exceptions
680 # Set calling of pdb on exceptions
681 self.call_pdb = rc.pdb
681 self.call_pdb = rc.pdb
682
682
683 # Load user aliases
683 # Load user aliases
684 for alias in rc.alias:
684 for alias in rc.alias:
685 self.magic_alias(alias)
685 self.magic_alias(alias)
686
686
687 # dynamic data that survives through sessions
687 # dynamic data that survives through sessions
688 # XXX make the filename a config option?
688 # XXX make the filename a config option?
689 persist_base = 'persist'
689 persist_base = 'persist'
690 if rc.profile:
690 if rc.profile:
691 persist_base += '_%s' % rc.profile
691 persist_base += '_%s' % rc.profile
692 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
692 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
693
693
694 try:
694 try:
695 self.persist = pickle.load(file(self.persist_fname))
695 self.persist = pickle.load(file(self.persist_fname))
696 except:
696 except:
697 self.persist = {}
697 self.persist = {}
698
698
699
699
700 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
700 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
701 try:
701 try:
702 obj = pickle.loads(value)
702 obj = pickle.loads(value)
703 except:
703 except:
704
704
705 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
705 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
706 print "The error was:",sys.exc_info()[0]
706 print "The error was:",sys.exc_info()[0]
707 continue
707 continue
708
708
709
709
710 self.user_ns[key] = obj
710 self.user_ns[key] = obj
711
711
712
712
713
713
714
714
715 def set_hook(self,name,hook):
715 def set_hook(self,name,hook):
716 """set_hook(name,hook) -> sets an internal IPython hook.
716 """set_hook(name,hook) -> sets an internal IPython hook.
717
717
718 IPython exposes some of its internal API as user-modifiable hooks. By
718 IPython exposes some of its internal API as user-modifiable hooks. By
719 resetting one of these hooks, you can modify IPython's behavior to
719 resetting one of these hooks, you can modify IPython's behavior to
720 call at runtime your own routines."""
720 call at runtime your own routines."""
721
721
722 # At some point in the future, this should validate the hook before it
722 # At some point in the future, this should validate the hook before it
723 # accepts it. Probably at least check that the hook takes the number
723 # accepts it. Probably at least check that the hook takes the number
724 # of args it's supposed to.
724 # of args it's supposed to.
725 setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
725 setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
726
726
727 def set_custom_exc(self,exc_tuple,handler):
727 def set_custom_exc(self,exc_tuple,handler):
728 """set_custom_exc(exc_tuple,handler)
728 """set_custom_exc(exc_tuple,handler)
729
729
730 Set a custom exception handler, which will be called if any of the
730 Set a custom exception handler, which will be called if any of the
731 exceptions in exc_tuple occur in the mainloop (specifically, in the
731 exceptions in exc_tuple occur in the mainloop (specifically, in the
732 runcode() method.
732 runcode() method.
733
733
734 Inputs:
734 Inputs:
735
735
736 - exc_tuple: a *tuple* of valid exceptions to call the defined
736 - exc_tuple: a *tuple* of valid exceptions to call the defined
737 handler for. It is very important that you use a tuple, and NOT A
737 handler for. It is very important that you use a tuple, and NOT A
738 LIST here, because of the way Python's except statement works. If
738 LIST here, because of the way Python's except statement works. If
739 you only want to trap a single exception, use a singleton tuple:
739 you only want to trap a single exception, use a singleton tuple:
740
740
741 exc_tuple == (MyCustomException,)
741 exc_tuple == (MyCustomException,)
742
742
743 - handler: this must be defined as a function with the following
743 - handler: this must be defined as a function with the following
744 basic interface: def my_handler(self,etype,value,tb).
744 basic interface: def my_handler(self,etype,value,tb).
745
745
746 This will be made into an instance method (via new.instancemethod)
746 This will be made into an instance method (via new.instancemethod)
747 of IPython itself, and it will be called if any of the exceptions
747 of IPython itself, and it will be called if any of the exceptions
748 listed in the exc_tuple are caught. If the handler is None, an
748 listed in the exc_tuple are caught. If the handler is None, an
749 internal basic one is used, which just prints basic info.
749 internal basic one is used, which just prints basic info.
750
750
751 WARNING: by putting in your own exception handler into IPython's main
751 WARNING: by putting in your own exception handler into IPython's main
752 execution loop, you run a very good chance of nasty crashes. This
752 execution loop, you run a very good chance of nasty crashes. This
753 facility should only be used if you really know what you are doing."""
753 facility should only be used if you really know what you are doing."""
754
754
755 assert type(exc_tuple)==type(()) , \
755 assert type(exc_tuple)==type(()) , \
756 "The custom exceptions must be given AS A TUPLE."
756 "The custom exceptions must be given AS A TUPLE."
757
757
758 def dummy_handler(self,etype,value,tb):
758 def dummy_handler(self,etype,value,tb):
759 print '*** Simple custom exception handler ***'
759 print '*** Simple custom exception handler ***'
760 print 'Exception type :',etype
760 print 'Exception type :',etype
761 print 'Exception value:',value
761 print 'Exception value:',value
762 print 'Traceback :',tb
762 print 'Traceback :',tb
763 print 'Source code :','\n'.join(self.buffer)
763 print 'Source code :','\n'.join(self.buffer)
764
764
765 if handler is None: handler = dummy_handler
765 if handler is None: handler = dummy_handler
766
766
767 self.CustomTB = new.instancemethod(handler,self,self.__class__)
767 self.CustomTB = new.instancemethod(handler,self,self.__class__)
768 self.custom_exceptions = exc_tuple
768 self.custom_exceptions = exc_tuple
769
769
770 def set_custom_completer(self,completer,pos=0):
770 def set_custom_completer(self,completer,pos=0):
771 """set_custom_completer(completer,pos=0)
771 """set_custom_completer(completer,pos=0)
772
772
773 Adds a new custom completer function.
773 Adds a new custom completer function.
774
774
775 The position argument (defaults to 0) is the index in the completers
775 The position argument (defaults to 0) is the index in the completers
776 list where you want the completer to be inserted."""
776 list where you want the completer to be inserted."""
777
777
778 newcomp = new.instancemethod(completer,self.Completer,
778 newcomp = new.instancemethod(completer,self.Completer,
779 self.Completer.__class__)
779 self.Completer.__class__)
780 self.Completer.matchers.insert(pos,newcomp)
780 self.Completer.matchers.insert(pos,newcomp)
781
781
782 def _get_call_pdb(self):
782 def _get_call_pdb(self):
783 return self._call_pdb
783 return self._call_pdb
784
784
785 def _set_call_pdb(self,val):
785 def _set_call_pdb(self,val):
786
786
787 if val not in (0,1,False,True):
787 if val not in (0,1,False,True):
788 raise ValueError,'new call_pdb value must be boolean'
788 raise ValueError,'new call_pdb value must be boolean'
789
789
790 # store value in instance
790 # store value in instance
791 self._call_pdb = val
791 self._call_pdb = val
792
792
793 # notify the actual exception handlers
793 # notify the actual exception handlers
794 self.InteractiveTB.call_pdb = val
794 self.InteractiveTB.call_pdb = val
795 if self.isthreaded:
795 if self.isthreaded:
796 try:
796 try:
797 self.sys_excepthook.call_pdb = val
797 self.sys_excepthook.call_pdb = val
798 except:
798 except:
799 warn('Failed to activate pdb for threaded exception handler')
799 warn('Failed to activate pdb for threaded exception handler')
800
800
801 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
801 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
802 'Control auto-activation of pdb at exceptions')
802 'Control auto-activation of pdb at exceptions')
803
803
804 def complete(self,text):
804 def complete(self,text):
805 """Return a sorted list of all possible completions on text.
805 """Return a sorted list of all possible completions on text.
806
806
807 Inputs:
807 Inputs:
808
808
809 - text: a string of text to be completed on.
809 - text: a string of text to be completed on.
810
810
811 This is a wrapper around the completion mechanism, similar to what
811 This is a wrapper around the completion mechanism, similar to what
812 readline does at the command line when the TAB key is hit. By
812 readline does at the command line when the TAB key is hit. By
813 exposing it as a method, it can be used by other non-readline
813 exposing it as a method, it can be used by other non-readline
814 environments (such as GUIs) for text completion.
814 environments (such as GUIs) for text completion.
815
815
816 Simple usage example:
816 Simple usage example:
817
817
818 In [1]: x = 'hello'
818 In [1]: x = 'hello'
819
819
820 In [2]: __IP.complete('x.l')
820 In [2]: __IP.complete('x.l')
821 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
821 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
822
822
823 complete = self.Completer.complete
823 complete = self.Completer.complete
824 state = 0
824 state = 0
825 # use a dict so we get unique keys, since ipyhton's multiple
825 # use a dict so we get unique keys, since ipyhton's multiple
826 # completers can return duplicates.
826 # completers can return duplicates.
827 comps = {}
827 comps = {}
828 while True:
828 while True:
829 newcomp = complete(text,state)
829 newcomp = complete(text,state)
830 if newcomp is None:
830 if newcomp is None:
831 break
831 break
832 comps[newcomp] = 1
832 comps[newcomp] = 1
833 state += 1
833 state += 1
834 outcomps = comps.keys()
834 outcomps = comps.keys()
835 outcomps.sort()
835 outcomps.sort()
836 return outcomps
836 return outcomps
837
837
838 def set_completer_frame(self, frame):
838 def set_completer_frame(self, frame):
839 if frame:
839 if frame:
840 self.Completer.namespace = frame.f_locals
840 self.Completer.namespace = frame.f_locals
841 self.Completer.global_namespace = frame.f_globals
841 self.Completer.global_namespace = frame.f_globals
842 else:
842 else:
843 self.Completer.namespace = self.user_ns
843 self.Completer.namespace = self.user_ns
844 self.Completer.global_namespace = self.user_global_ns
844 self.Completer.global_namespace = self.user_global_ns
845
845
846 def init_auto_alias(self):
846 def init_auto_alias(self):
847 """Define some aliases automatically.
847 """Define some aliases automatically.
848
848
849 These are ALL parameter-less aliases"""
849 These are ALL parameter-less aliases"""
850 for alias,cmd in self.auto_alias:
850 for alias,cmd in self.auto_alias:
851 self.alias_table[alias] = (0,cmd)
851 self.alias_table[alias] = (0,cmd)
852
852
853 def alias_table_validate(self,verbose=0):
853 def alias_table_validate(self,verbose=0):
854 """Update information about the alias table.
854 """Update information about the alias table.
855
855
856 In particular, make sure no Python keywords/builtins are in it."""
856 In particular, make sure no Python keywords/builtins are in it."""
857
857
858 no_alias = self.no_alias
858 no_alias = self.no_alias
859 for k in self.alias_table.keys():
859 for k in self.alias_table.keys():
860 if k in no_alias:
860 if k in no_alias:
861 del self.alias_table[k]
861 del self.alias_table[k]
862 if verbose:
862 if verbose:
863 print ("Deleting alias <%s>, it's a Python "
863 print ("Deleting alias <%s>, it's a Python "
864 "keyword or builtin." % k)
864 "keyword or builtin." % k)
865
865
866 def set_autoindent(self,value=None):
866 def set_autoindent(self,value=None):
867 """Set the autoindent flag, checking for readline support.
867 """Set the autoindent flag, checking for readline support.
868
868
869 If called with no arguments, it acts as a toggle."""
869 If called with no arguments, it acts as a toggle."""
870
870
871 if not self.has_readline:
871 if not self.has_readline:
872 if os.name == 'posix':
872 if os.name == 'posix':
873 warn("The auto-indent feature requires the readline library")
873 warn("The auto-indent feature requires the readline library")
874 self.autoindent = 0
874 self.autoindent = 0
875 return
875 return
876 if value is None:
876 if value is None:
877 self.autoindent = not self.autoindent
877 self.autoindent = not self.autoindent
878 else:
878 else:
879 self.autoindent = value
879 self.autoindent = value
880
880
881 def rc_set_toggle(self,rc_field,value=None):
881 def rc_set_toggle(self,rc_field,value=None):
882 """Set or toggle a field in IPython's rc config. structure.
882 """Set or toggle a field in IPython's rc config. structure.
883
883
884 If called with no arguments, it acts as a toggle.
884 If called with no arguments, it acts as a toggle.
885
885
886 If called with a non-existent field, the resulting AttributeError
886 If called with a non-existent field, the resulting AttributeError
887 exception will propagate out."""
887 exception will propagate out."""
888
888
889 rc_val = getattr(self.rc,rc_field)
889 rc_val = getattr(self.rc,rc_field)
890 if value is None:
890 if value is None:
891 value = not rc_val
891 value = not rc_val
892 setattr(self.rc,rc_field,value)
892 setattr(self.rc,rc_field,value)
893
893
894 def user_setup(self,ipythondir,rc_suffix,mode='install'):
894 def user_setup(self,ipythondir,rc_suffix,mode='install'):
895 """Install the user configuration directory.
895 """Install the user configuration directory.
896
896
897 Can be called when running for the first time or to upgrade the user's
897 Can be called when running for the first time or to upgrade the user's
898 .ipython/ directory with the mode parameter. Valid modes are 'install'
898 .ipython/ directory with the mode parameter. Valid modes are 'install'
899 and 'upgrade'."""
899 and 'upgrade'."""
900
900
901 def wait():
901 def wait():
902 try:
902 try:
903 raw_input("Please press <RETURN> to start IPython.")
903 raw_input("Please press <RETURN> to start IPython.")
904 except EOFError:
904 except EOFError:
905 print >> Term.cout
905 print >> Term.cout
906 print '*'*70
906 print '*'*70
907
907
908 cwd = os.getcwd() # remember where we started
908 cwd = os.getcwd() # remember where we started
909 glb = glob.glob
909 glb = glob.glob
910 print '*'*70
910 print '*'*70
911 if mode == 'install':
911 if mode == 'install':
912 print \
912 print \
913 """Welcome to IPython. I will try to create a personal configuration directory
913 """Welcome to IPython. I will try to create a personal configuration directory
914 where you can customize many aspects of IPython's functionality in:\n"""
914 where you can customize many aspects of IPython's functionality in:\n"""
915 else:
915 else:
916 print 'I am going to upgrade your configuration in:'
916 print 'I am going to upgrade your configuration in:'
917
917
918 print ipythondir
918 print ipythondir
919
919
920 rcdirend = os.path.join('IPython','UserConfig')
920 rcdirend = os.path.join('IPython','UserConfig')
921 cfg = lambda d: os.path.join(d,rcdirend)
921 cfg = lambda d: os.path.join(d,rcdirend)
922 try:
922 try:
923 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
923 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
924 except IOError:
924 except IOError:
925 warning = """
925 warning = """
926 Installation error. IPython's directory was not found.
926 Installation error. IPython's directory was not found.
927
927
928 Check the following:
928 Check the following:
929
929
930 The ipython/IPython directory should be in a directory belonging to your
930 The ipython/IPython directory should be in a directory belonging to your
931 PYTHONPATH environment variable (that is, it should be in a directory
931 PYTHONPATH environment variable (that is, it should be in a directory
932 belonging to sys.path). You can copy it explicitly there or just link to it.
932 belonging to sys.path). You can copy it explicitly there or just link to it.
933
933
934 IPython will proceed with builtin defaults.
934 IPython will proceed with builtin defaults.
935 """
935 """
936 warn(warning)
936 warn(warning)
937 wait()
937 wait()
938 return
938 return
939
939
940 if mode == 'install':
940 if mode == 'install':
941 try:
941 try:
942 shutil.copytree(rcdir,ipythondir)
942 shutil.copytree(rcdir,ipythondir)
943 os.chdir(ipythondir)
943 os.chdir(ipythondir)
944 rc_files = glb("ipythonrc*")
944 rc_files = glb("ipythonrc*")
945 for rc_file in rc_files:
945 for rc_file in rc_files:
946 os.rename(rc_file,rc_file+rc_suffix)
946 os.rename(rc_file,rc_file+rc_suffix)
947 except:
947 except:
948 warning = """
948 warning = """
949
949
950 There was a problem with the installation:
950 There was a problem with the installation:
951 %s
951 %s
952 Try to correct it or contact the developers if you think it's a bug.
952 Try to correct it or contact the developers if you think it's a bug.
953 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
953 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
954 warn(warning)
954 warn(warning)
955 wait()
955 wait()
956 return
956 return
957
957
958 elif mode == 'upgrade':
958 elif mode == 'upgrade':
959 try:
959 try:
960 os.chdir(ipythondir)
960 os.chdir(ipythondir)
961 except:
961 except:
962 print """
962 print """
963 Can not upgrade: changing to directory %s failed. Details:
963 Can not upgrade: changing to directory %s failed. Details:
964 %s
964 %s
965 """ % (ipythondir,sys.exc_info()[1])
965 """ % (ipythondir,sys.exc_info()[1])
966 wait()
966 wait()
967 return
967 return
968 else:
968 else:
969 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
969 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
970 for new_full_path in sources:
970 for new_full_path in sources:
971 new_filename = os.path.basename(new_full_path)
971 new_filename = os.path.basename(new_full_path)
972 if new_filename.startswith('ipythonrc'):
972 if new_filename.startswith('ipythonrc'):
973 new_filename = new_filename + rc_suffix
973 new_filename = new_filename + rc_suffix
974 # The config directory should only contain files, skip any
974 # The config directory should only contain files, skip any
975 # directories which may be there (like CVS)
975 # directories which may be there (like CVS)
976 if os.path.isdir(new_full_path):
976 if os.path.isdir(new_full_path):
977 continue
977 continue
978 if os.path.exists(new_filename):
978 if os.path.exists(new_filename):
979 old_file = new_filename+'.old'
979 old_file = new_filename+'.old'
980 if os.path.exists(old_file):
980 if os.path.exists(old_file):
981 os.remove(old_file)
981 os.remove(old_file)
982 os.rename(new_filename,old_file)
982 os.rename(new_filename,old_file)
983 shutil.copy(new_full_path,new_filename)
983 shutil.copy(new_full_path,new_filename)
984 else:
984 else:
985 raise ValueError,'unrecognized mode for install:',`mode`
985 raise ValueError,'unrecognized mode for install:',`mode`
986
986
987 # Fix line-endings to those native to each platform in the config
987 # Fix line-endings to those native to each platform in the config
988 # directory.
988 # directory.
989 try:
989 try:
990 os.chdir(ipythondir)
990 os.chdir(ipythondir)
991 except:
991 except:
992 print """
992 print """
993 Problem: changing to directory %s failed.
993 Problem: changing to directory %s failed.
994 Details:
994 Details:
995 %s
995 %s
996
996
997 Some configuration files may have incorrect line endings. This should not
997 Some configuration files may have incorrect line endings. This should not
998 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
998 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
999 wait()
999 wait()
1000 else:
1000 else:
1001 for fname in glb('ipythonrc*'):
1001 for fname in glb('ipythonrc*'):
1002 try:
1002 try:
1003 native_line_ends(fname,backup=0)
1003 native_line_ends(fname,backup=0)
1004 except IOError:
1004 except IOError:
1005 pass
1005 pass
1006
1006
1007 if mode == 'install':
1007 if mode == 'install':
1008 print """
1008 print """
1009 Successful installation!
1009 Successful installation!
1010
1010
1011 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1011 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1012 IPython manual (there are both HTML and PDF versions supplied with the
1012 IPython manual (there are both HTML and PDF versions supplied with the
1013 distribution) to make sure that your system environment is properly configured
1013 distribution) to make sure that your system environment is properly configured
1014 to take advantage of IPython's features."""
1014 to take advantage of IPython's features."""
1015 else:
1015 else:
1016 print """
1016 print """
1017 Successful upgrade!
1017 Successful upgrade!
1018
1018
1019 All files in your directory:
1019 All files in your directory:
1020 %(ipythondir)s
1020 %(ipythondir)s
1021 which would have been overwritten by the upgrade were backed up with a .old
1021 which would have been overwritten by the upgrade were backed up with a .old
1022 extension. If you had made particular customizations in those files you may
1022 extension. If you had made particular customizations in those files you may
1023 want to merge them back into the new files.""" % locals()
1023 want to merge them back into the new files.""" % locals()
1024 wait()
1024 wait()
1025 os.chdir(cwd)
1025 os.chdir(cwd)
1026 # end user_setup()
1026 # end user_setup()
1027
1027
1028 def atexit_operations(self):
1028 def atexit_operations(self):
1029 """This will be executed at the time of exit.
1029 """This will be executed at the time of exit.
1030
1030
1031 Saving of persistent data should be performed here. """
1031 Saving of persistent data should be performed here. """
1032
1032
1033 # input history
1033 # input history
1034 self.savehist()
1034 self.savehist()
1035
1035
1036 # Cleanup all tempfiles left around
1036 # Cleanup all tempfiles left around
1037 for tfile in self.tempfiles:
1037 for tfile in self.tempfiles:
1038 try:
1038 try:
1039 os.unlink(tfile)
1039 os.unlink(tfile)
1040 except OSError:
1040 except OSError:
1041 pass
1041 pass
1042
1042
1043 # save the "persistent data" catch-all dictionary
1043 # save the "persistent data" catch-all dictionary
1044 try:
1044 try:
1045 pickle.dump(self.persist, open(self.persist_fname,"w"))
1045 pickle.dump(self.persist, open(self.persist_fname,"w"))
1046 except:
1046 except:
1047 print "*** ERROR *** persistent data saving failed."
1047 print "*** ERROR *** persistent data saving failed."
1048
1048
1049 def savehist(self):
1049 def savehist(self):
1050 """Save input history to a file (via readline library)."""
1050 """Save input history to a file (via readline library)."""
1051 try:
1051 try:
1052 self.readline.write_history_file(self.histfile)
1052 self.readline.write_history_file(self.histfile)
1053 except:
1053 except:
1054 print 'Unable to save IPython command history to file: ' + \
1054 print 'Unable to save IPython command history to file: ' + \
1055 `self.histfile`
1055 `self.histfile`
1056
1056
1057 def pre_readline(self):
1057 def pre_readline(self):
1058 """readline hook to be used at the start of each line.
1058 """readline hook to be used at the start of each line.
1059
1059
1060 Currently it handles auto-indent only."""
1060 Currently it handles auto-indent only."""
1061
1061
1062 self.readline.insert_text(self.indent_current)
1062 self.readline.insert_text(self.indent_current)
1063
1063
1064 def init_readline(self):
1064 def init_readline(self):
1065 """Command history completion/saving/reloading."""
1065 """Command history completion/saving/reloading."""
1066 try:
1066 try:
1067 import readline
1067 import readline
1068 except ImportError:
1068 except ImportError:
1069 self.has_readline = 0
1069 self.has_readline = 0
1070 self.readline = None
1070 self.readline = None
1071 # no point in bugging windows users with this every time:
1071 # no point in bugging windows users with this every time:
1072 if os.name == 'posix':
1072 if os.name == 'posix':
1073 warn('Readline services not available on this platform.')
1073 warn('Readline services not available on this platform.')
1074 else:
1074 else:
1075 import atexit
1075 import atexit
1076 from IPython.completer import IPCompleter
1076 from IPython.completer import IPCompleter
1077 self.Completer = IPCompleter(self,
1077 self.Completer = IPCompleter(self,
1078 self.user_ns,
1078 self.user_ns,
1079 self.user_global_ns,
1079 self.user_global_ns,
1080 self.rc.readline_omit__names,
1080 self.rc.readline_omit__names,
1081 self.alias_table)
1081 self.alias_table)
1082
1082
1083 # Platform-specific configuration
1083 # Platform-specific configuration
1084 if os.name == 'nt':
1084 if os.name == 'nt':
1085 self.readline_startup_hook = readline.set_pre_input_hook
1085 self.readline_startup_hook = readline.set_pre_input_hook
1086 else:
1086 else:
1087 self.readline_startup_hook = readline.set_startup_hook
1087 self.readline_startup_hook = readline.set_startup_hook
1088
1088
1089 # Load user's initrc file (readline config)
1089 # Load user's initrc file (readline config)
1090 inputrc_name = os.environ.get('INPUTRC')
1090 inputrc_name = os.environ.get('INPUTRC')
1091 if inputrc_name is None:
1091 if inputrc_name is None:
1092 home_dir = get_home_dir()
1092 home_dir = get_home_dir()
1093 if home_dir is not None:
1093 if home_dir is not None:
1094 inputrc_name = os.path.join(home_dir,'.inputrc')
1094 inputrc_name = os.path.join(home_dir,'.inputrc')
1095 if os.path.isfile(inputrc_name):
1095 if os.path.isfile(inputrc_name):
1096 try:
1096 try:
1097 readline.read_init_file(inputrc_name)
1097 readline.read_init_file(inputrc_name)
1098 except:
1098 except:
1099 warn('Problems reading readline initialization file <%s>'
1099 warn('Problems reading readline initialization file <%s>'
1100 % inputrc_name)
1100 % inputrc_name)
1101
1101
1102 self.has_readline = 1
1102 self.has_readline = 1
1103 self.readline = readline
1103 self.readline = readline
1104 # save this in sys so embedded copies can restore it properly
1104 # save this in sys so embedded copies can restore it properly
1105 sys.ipcompleter = self.Completer.complete
1105 sys.ipcompleter = self.Completer.complete
1106 readline.set_completer(self.Completer.complete)
1106 readline.set_completer(self.Completer.complete)
1107
1107
1108 # Configure readline according to user's prefs
1108 # Configure readline according to user's prefs
1109 for rlcommand in self.rc.readline_parse_and_bind:
1109 for rlcommand in self.rc.readline_parse_and_bind:
1110 readline.parse_and_bind(rlcommand)
1110 readline.parse_and_bind(rlcommand)
1111
1111
1112 # remove some chars from the delimiters list
1112 # remove some chars from the delimiters list
1113 delims = readline.get_completer_delims()
1113 delims = readline.get_completer_delims()
1114 delims = delims.translate(string._idmap,
1114 delims = delims.translate(string._idmap,
1115 self.rc.readline_remove_delims)
1115 self.rc.readline_remove_delims)
1116 readline.set_completer_delims(delims)
1116 readline.set_completer_delims(delims)
1117 # otherwise we end up with a monster history after a while:
1117 # otherwise we end up with a monster history after a while:
1118 readline.set_history_length(1000)
1118 readline.set_history_length(1000)
1119 try:
1119 try:
1120 #print '*** Reading readline history' # dbg
1120 #print '*** Reading readline history' # dbg
1121 readline.read_history_file(self.histfile)
1121 readline.read_history_file(self.histfile)
1122 except IOError:
1122 except IOError:
1123 pass # It doesn't exist yet.
1123 pass # It doesn't exist yet.
1124
1124
1125 atexit.register(self.atexit_operations)
1125 atexit.register(self.atexit_operations)
1126 del atexit
1126 del atexit
1127
1127
1128 # Configure auto-indent for all platforms
1128 # Configure auto-indent for all platforms
1129 self.set_autoindent(self.rc.autoindent)
1129 self.set_autoindent(self.rc.autoindent)
1130
1130
1131 def _should_recompile(self,e):
1131 def _should_recompile(self,e):
1132 """Utility routine for edit_syntax_error"""
1132 """Utility routine for edit_syntax_error"""
1133
1133
1134 if e.filename in ('<ipython console>','<input>','<string>',
1134 if e.filename in ('<ipython console>','<input>','<string>',
1135 '<console>'):
1135 '<console>'):
1136 return False
1136 return False
1137 try:
1137 try:
1138 if not ask_yes_no('Return to editor to correct syntax error? '
1138 if not ask_yes_no('Return to editor to correct syntax error? '
1139 '[Y/n] ','y'):
1139 '[Y/n] ','y'):
1140 return False
1140 return False
1141 except EOFError:
1141 except EOFError:
1142 return False
1142 return False
1143 self.hooks.fix_error_editor(e.filename,e.lineno,e.offset,e.msg)
1143 self.hooks.fix_error_editor(e.filename,e.lineno,e.offset,e.msg)
1144 return True
1144 return True
1145
1145
1146 def edit_syntax_error(self):
1146 def edit_syntax_error(self):
1147 """The bottom half of the syntax error handler called in the main loop.
1147 """The bottom half of the syntax error handler called in the main loop.
1148
1148
1149 Loop until syntax error is fixed or user cancels.
1149 Loop until syntax error is fixed or user cancels.
1150 """
1150 """
1151
1151
1152 while self.SyntaxTB.last_syntax_error:
1152 while self.SyntaxTB.last_syntax_error:
1153 # copy and clear last_syntax_error
1153 # copy and clear last_syntax_error
1154 err = self.SyntaxTB.clear_err_state()
1154 err = self.SyntaxTB.clear_err_state()
1155 if not self._should_recompile(err):
1155 if not self._should_recompile(err):
1156 return
1156 return
1157 try:
1157 try:
1158 # may set last_syntax_error again if a SyntaxError is raised
1158 # may set last_syntax_error again if a SyntaxError is raised
1159 self.safe_execfile(err.filename,self.shell.user_ns)
1159 self.safe_execfile(err.filename,self.shell.user_ns)
1160 except:
1160 except:
1161 self.showtraceback()
1161 self.showtraceback()
1162 else:
1162 else:
1163 f = file(err.filename)
1163 f = file(err.filename)
1164 try:
1164 try:
1165 sys.displayhook(f.read())
1165 sys.displayhook(f.read())
1166 finally:
1166 finally:
1167 f.close()
1167 f.close()
1168
1168
1169 def showsyntaxerror(self, filename=None):
1169 def showsyntaxerror(self, filename=None):
1170 """Display the syntax error that just occurred.
1170 """Display the syntax error that just occurred.
1171
1171
1172 This doesn't display a stack trace because there isn't one.
1172 This doesn't display a stack trace because there isn't one.
1173
1173
1174 If a filename is given, it is stuffed in the exception instead
1174 If a filename is given, it is stuffed in the exception instead
1175 of what was there before (because Python's parser always uses
1175 of what was there before (because Python's parser always uses
1176 "<string>" when reading from a string).
1176 "<string>" when reading from a string).
1177 """
1177 """
1178 etype, value, last_traceback = sys.exc_info()
1178 etype, value, last_traceback = sys.exc_info()
1179 if filename and etype is SyntaxError:
1179 if filename and etype is SyntaxError:
1180 # Work hard to stuff the correct filename in the exception
1180 # Work hard to stuff the correct filename in the exception
1181 try:
1181 try:
1182 msg, (dummy_filename, lineno, offset, line) = value
1182 msg, (dummy_filename, lineno, offset, line) = value
1183 except:
1183 except:
1184 # Not the format we expect; leave it alone
1184 # Not the format we expect; leave it alone
1185 pass
1185 pass
1186 else:
1186 else:
1187 # Stuff in the right filename
1187 # Stuff in the right filename
1188 try:
1188 try:
1189 # Assume SyntaxError is a class exception
1189 # Assume SyntaxError is a class exception
1190 value = SyntaxError(msg, (filename, lineno, offset, line))
1190 value = SyntaxError(msg, (filename, lineno, offset, line))
1191 except:
1191 except:
1192 # If that failed, assume SyntaxError is a string
1192 # If that failed, assume SyntaxError is a string
1193 value = msg, (filename, lineno, offset, line)
1193 value = msg, (filename, lineno, offset, line)
1194 self.SyntaxTB(etype,value,[])
1194 self.SyntaxTB(etype,value,[])
1195
1195
1196 def debugger(self):
1196 def debugger(self):
1197 """Call the pdb debugger."""
1197 """Call the pdb debugger."""
1198
1198
1199 if not self.rc.pdb:
1199 if not self.rc.pdb:
1200 return
1200 return
1201 pdb.pm()
1201 pdb.pm()
1202
1202
1203 def showtraceback(self,exc_tuple = None,filename=None):
1203 def showtraceback(self,exc_tuple = None,filename=None):
1204 """Display the exception that just occurred."""
1204 """Display the exception that just occurred."""
1205
1205
1206 # Though this won't be called by syntax errors in the input line,
1206 # Though this won't be called by syntax errors in the input line,
1207 # there may be SyntaxError cases whith imported code.
1207 # there may be SyntaxError cases whith imported code.
1208 if exc_tuple is None:
1208 if exc_tuple is None:
1209 type, value, tb = sys.exc_info()
1209 type, value, tb = sys.exc_info()
1210 else:
1210 else:
1211 type, value, tb = exc_tuple
1211 type, value, tb = exc_tuple
1212 if type is SyntaxError:
1212 if type is SyntaxError:
1213 self.showsyntaxerror(filename)
1213 self.showsyntaxerror(filename)
1214 else:
1214 else:
1215 self.InteractiveTB()
1215 self.InteractiveTB()
1216 if self.InteractiveTB.call_pdb and self.has_readline:
1216 if self.InteractiveTB.call_pdb and self.has_readline:
1217 # pdb mucks up readline, fix it back
1217 # pdb mucks up readline, fix it back
1218 self.readline.set_completer(self.Completer.complete)
1218 self.readline.set_completer(self.Completer.complete)
1219
1219
1220 def update_cache(self, line):
1220 def update_cache(self, line):
1221 """puts line into cache"""
1221 """puts line into cache"""
1222 return # dbg
1222 return # dbg
1223
1223
1224 # This copies the cache every time ... :-(
1224 # This copies the cache every time ... :-(
1225 self.inputcache.insert(0, line)
1225 self.inputcache.insert(0, line)
1226 if len(self.inputcache) >= self.CACHELENGTH:
1226 if len(self.inputcache) >= self.CACHELENGTH:
1227 self.inputcache.pop() # This doesn't :-)
1227 self.inputcache.pop() # This doesn't :-)
1228
1228
1229 def mainloop(self,banner=None):
1229 def mainloop(self,banner=None):
1230 """Creates the local namespace and starts the mainloop.
1230 """Creates the local namespace and starts the mainloop.
1231
1231
1232 If an optional banner argument is given, it will override the
1232 If an optional banner argument is given, it will override the
1233 internally created default banner."""
1233 internally created default banner."""
1234
1234
1235 if self.rc.c: # Emulate Python's -c option
1235 if self.rc.c: # Emulate Python's -c option
1236 self.exec_init_cmd()
1236 self.exec_init_cmd()
1237 if banner is None:
1237 if banner is None:
1238 if self.rc.banner:
1238 if self.rc.banner:
1239 banner = self.BANNER+self.banner2
1239 banner = self.BANNER+self.banner2
1240 else:
1240 else:
1241 banner = ''
1241 banner = ''
1242 self.interact(banner)
1242 self.interact(banner)
1243
1243
1244 def exec_init_cmd(self):
1244 def exec_init_cmd(self):
1245 """Execute a command given at the command line.
1245 """Execute a command given at the command line.
1246
1246
1247 This emulates Python's -c option."""
1247 This emulates Python's -c option."""
1248
1248
1249 sys.argv = ['-c']
1249 sys.argv = ['-c']
1250 self.push(self.rc.c)
1250 self.push(self.rc.c)
1251
1251
1252 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1252 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1253 """Embeds IPython into a running python program.
1253 """Embeds IPython into a running python program.
1254
1254
1255 Input:
1255 Input:
1256
1256
1257 - header: An optional header message can be specified.
1257 - header: An optional header message can be specified.
1258
1258
1259 - local_ns, global_ns: working namespaces. If given as None, the
1259 - local_ns, global_ns: working namespaces. If given as None, the
1260 IPython-initialized one is updated with __main__.__dict__, so that
1260 IPython-initialized one is updated with __main__.__dict__, so that
1261 program variables become visible but user-specific configuration
1261 program variables become visible but user-specific configuration
1262 remains possible.
1262 remains possible.
1263
1263
1264 - stack_depth: specifies how many levels in the stack to go to
1264 - stack_depth: specifies how many levels in the stack to go to
1265 looking for namespaces (when local_ns and global_ns are None). This
1265 looking for namespaces (when local_ns and global_ns are None). This
1266 allows an intermediate caller to make sure that this function gets
1266 allows an intermediate caller to make sure that this function gets
1267 the namespace from the intended level in the stack. By default (0)
1267 the namespace from the intended level in the stack. By default (0)
1268 it will get its locals and globals from the immediate caller.
1268 it will get its locals and globals from the immediate caller.
1269
1269
1270 Warning: it's possible to use this in a program which is being run by
1270 Warning: it's possible to use this in a program which is being run by
1271 IPython itself (via %run), but some funny things will happen (a few
1271 IPython itself (via %run), but some funny things will happen (a few
1272 globals get overwritten). In the future this will be cleaned up, as
1272 globals get overwritten). In the future this will be cleaned up, as
1273 there is no fundamental reason why it can't work perfectly."""
1273 there is no fundamental reason why it can't work perfectly."""
1274
1274
1275 # Get locals and globals from caller
1275 # Get locals and globals from caller
1276 if local_ns is None or global_ns is None:
1276 if local_ns is None or global_ns is None:
1277 call_frame = sys._getframe(stack_depth).f_back
1277 call_frame = sys._getframe(stack_depth).f_back
1278
1278
1279 if local_ns is None:
1279 if local_ns is None:
1280 local_ns = call_frame.f_locals
1280 local_ns = call_frame.f_locals
1281 if global_ns is None:
1281 if global_ns is None:
1282 global_ns = call_frame.f_globals
1282 global_ns = call_frame.f_globals
1283
1283
1284 # Update namespaces and fire up interpreter
1284 # Update namespaces and fire up interpreter
1285 self.user_ns = local_ns
1285 self.user_ns = local_ns
1286 self.user_global_ns = global_ns
1286 self.user_global_ns = global_ns
1287
1287
1288 # Patch for global embedding to make sure that things don't overwrite
1288 # Patch for global embedding to make sure that things don't overwrite
1289 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1289 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1290 # FIXME. Test this a bit more carefully (the if.. is new)
1290 # FIXME. Test this a bit more carefully (the if.. is new)
1291 if local_ns is None and global_ns is None:
1291 if local_ns is None and global_ns is None:
1292 self.user_global_ns.update(__main__.__dict__)
1292 self.user_global_ns.update(__main__.__dict__)
1293
1293
1294 # make sure the tab-completer has the correct frame information, so it
1294 # make sure the tab-completer has the correct frame information, so it
1295 # actually completes using the frame's locals/globals
1295 # actually completes using the frame's locals/globals
1296 self.set_completer_frame(call_frame)
1296 self.set_completer_frame(call_frame)
1297
1297
1298 self.interact(header)
1298 self.interact(header)
1299
1299
1300 def interact(self, banner=None):
1300 def interact(self, banner=None):
1301 """Closely emulate the interactive Python console.
1301 """Closely emulate the interactive Python console.
1302
1302
1303 The optional banner argument specify the banner to print
1303 The optional banner argument specify the banner to print
1304 before the first interaction; by default it prints a banner
1304 before the first interaction; by default it prints a banner
1305 similar to the one printed by the real Python interpreter,
1305 similar to the one printed by the real Python interpreter,
1306 followed by the current class name in parentheses (so as not
1306 followed by the current class name in parentheses (so as not
1307 to confuse this with the real interpreter -- since it's so
1307 to confuse this with the real interpreter -- since it's so
1308 close!).
1308 close!).
1309
1309
1310 """
1310 """
1311 cprt = 'Type "copyright", "credits" or "license" for more information.'
1311 cprt = 'Type "copyright", "credits" or "license" for more information.'
1312 if banner is None:
1312 if banner is None:
1313 self.write("Python %s on %s\n%s\n(%s)\n" %
1313 self.write("Python %s on %s\n%s\n(%s)\n" %
1314 (sys.version, sys.platform, cprt,
1314 (sys.version, sys.platform, cprt,
1315 self.__class__.__name__))
1315 self.__class__.__name__))
1316 else:
1316 else:
1317 self.write(banner)
1317 self.write(banner)
1318
1318
1319 more = 0
1319 more = 0
1320
1320
1321 # Mark activity in the builtins
1321 # Mark activity in the builtins
1322 __builtin__.__dict__['__IPYTHON__active'] += 1
1322 __builtin__.__dict__['__IPYTHON__active'] += 1
1323
1323
1324 # exit_now is set by a call to %Exit or %Quit
1324 # exit_now is set by a call to %Exit or %Quit
1325 while not self.exit_now:
1325 while not self.exit_now:
1326 try:
1326 try:
1327 if more:
1327 if more:
1328 prompt = self.outputcache.prompt2
1328 prompt = self.outputcache.prompt2
1329 if self.autoindent:
1329 if self.autoindent:
1330 self.readline_startup_hook(self.pre_readline)
1330 self.readline_startup_hook(self.pre_readline)
1331 else:
1331 else:
1332 prompt = self.outputcache.prompt1
1332 prompt = self.outputcache.prompt1
1333 try:
1333 try:
1334 line = self.raw_input(prompt,more)
1334 line = self.raw_input(prompt,more)
1335 if self.autoindent:
1335 if self.autoindent:
1336 self.readline_startup_hook(None)
1336 self.readline_startup_hook(None)
1337 except EOFError:
1337 except EOFError:
1338 if self.autoindent:
1338 if self.autoindent:
1339 self.readline_startup_hook(None)
1339 self.readline_startup_hook(None)
1340 self.write("\n")
1340 self.write("\n")
1341 self.exit()
1341 self.exit()
1342 else:
1342 else:
1343 more = self.push(line)
1343 more = self.push(line)
1344
1344
1345 if (self.SyntaxTB.last_syntax_error and
1345 if (self.SyntaxTB.last_syntax_error and
1346 self.rc.autoedit_syntax):
1346 self.rc.autoedit_syntax):
1347 self.edit_syntax_error()
1347 self.edit_syntax_error()
1348
1348
1349 except KeyboardInterrupt:
1349 except KeyboardInterrupt:
1350 self.write("\nKeyboardInterrupt\n")
1350 self.write("\nKeyboardInterrupt\n")
1351 self.resetbuffer()
1351 self.resetbuffer()
1352 more = 0
1352 more = 0
1353 # keep cache in sync with the prompt counter:
1353 # keep cache in sync with the prompt counter:
1354 self.outputcache.prompt_count -= 1
1354 self.outputcache.prompt_count -= 1
1355
1355
1356 if self.autoindent:
1356 if self.autoindent:
1357 self.indent_current_nsp = 0
1357 self.indent_current_nsp = 0
1358 self.indent_current = ' '* self.indent_current_nsp
1358 self.indent_current = ' '* self.indent_current_nsp
1359
1359
1360 except bdb.BdbQuit:
1360 except bdb.BdbQuit:
1361 warn("The Python debugger has exited with a BdbQuit exception.\n"
1361 warn("The Python debugger has exited with a BdbQuit exception.\n"
1362 "Because of how pdb handles the stack, it is impossible\n"
1362 "Because of how pdb handles the stack, it is impossible\n"
1363 "for IPython to properly format this particular exception.\n"
1363 "for IPython to properly format this particular exception.\n"
1364 "IPython will resume normal operation.")
1364 "IPython will resume normal operation.")
1365
1365
1366 # We are off again...
1366 # We are off again...
1367 __builtin__.__dict__['__IPYTHON__active'] -= 1
1367 __builtin__.__dict__['__IPYTHON__active'] -= 1
1368
1368
1369 def excepthook(self, type, value, tb):
1369 def excepthook(self, type, value, tb):
1370 """One more defense for GUI apps that call sys.excepthook.
1370 """One more defense for GUI apps that call sys.excepthook.
1371
1371
1372 GUI frameworks like wxPython trap exceptions and call
1372 GUI frameworks like wxPython trap exceptions and call
1373 sys.excepthook themselves. I guess this is a feature that
1373 sys.excepthook themselves. I guess this is a feature that
1374 enables them to keep running after exceptions that would
1374 enables them to keep running after exceptions that would
1375 otherwise kill their mainloop. This is a bother for IPython
1375 otherwise kill their mainloop. This is a bother for IPython
1376 which excepts to catch all of the program exceptions with a try:
1376 which excepts to catch all of the program exceptions with a try:
1377 except: statement.
1377 except: statement.
1378
1378
1379 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1379 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1380 any app directly invokes sys.excepthook, it will look to the user like
1380 any app directly invokes sys.excepthook, it will look to the user like
1381 IPython crashed. In order to work around this, we can disable the
1381 IPython crashed. In order to work around this, we can disable the
1382 CrashHandler and replace it with this excepthook instead, which prints a
1382 CrashHandler and replace it with this excepthook instead, which prints a
1383 regular traceback using our InteractiveTB. In this fashion, apps which
1383 regular traceback using our InteractiveTB. In this fashion, apps which
1384 call sys.excepthook will generate a regular-looking exception from
1384 call sys.excepthook will generate a regular-looking exception from
1385 IPython, and the CrashHandler will only be triggered by real IPython
1385 IPython, and the CrashHandler will only be triggered by real IPython
1386 crashes.
1386 crashes.
1387
1387
1388 This hook should be used sparingly, only in places which are not likely
1388 This hook should be used sparingly, only in places which are not likely
1389 to be true IPython errors.
1389 to be true IPython errors.
1390 """
1390 """
1391
1391
1392 self.InteractiveTB(type, value, tb, tb_offset=0)
1392 self.InteractiveTB(type, value, tb, tb_offset=0)
1393 if self.InteractiveTB.call_pdb and self.has_readline:
1393 if self.InteractiveTB.call_pdb and self.has_readline:
1394 self.readline.set_completer(self.Completer.complete)
1394 self.readline.set_completer(self.Completer.complete)
1395
1395
1396 def call_alias(self,alias,rest=''):
1396 def call_alias(self,alias,rest=''):
1397 """Call an alias given its name and the rest of the line.
1397 """Call an alias given its name and the rest of the line.
1398
1398
1399 This function MUST be given a proper alias, because it doesn't make
1399 This function MUST be given a proper alias, because it doesn't make
1400 any checks when looking up into the alias table. The caller is
1400 any checks when looking up into the alias table. The caller is
1401 responsible for invoking it only with a valid alias."""
1401 responsible for invoking it only with a valid alias."""
1402
1402
1403 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1403 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1404 nargs,cmd = self.alias_table[alias]
1404 nargs,cmd = self.alias_table[alias]
1405 # Expand the %l special to be the user's input line
1405 # Expand the %l special to be the user's input line
1406 if cmd.find('%l') >= 0:
1406 if cmd.find('%l') >= 0:
1407 cmd = cmd.replace('%l',rest)
1407 cmd = cmd.replace('%l',rest)
1408 rest = ''
1408 rest = ''
1409 if nargs==0:
1409 if nargs==0:
1410 # Simple, argument-less aliases
1410 # Simple, argument-less aliases
1411 cmd = '%s %s' % (cmd,rest)
1411 cmd = '%s %s' % (cmd,rest)
1412 else:
1412 else:
1413 # Handle aliases with positional arguments
1413 # Handle aliases with positional arguments
1414 args = rest.split(None,nargs)
1414 args = rest.split(None,nargs)
1415 if len(args)< nargs:
1415 if len(args)< nargs:
1416 error('Alias <%s> requires %s arguments, %s given.' %
1416 error('Alias <%s> requires %s arguments, %s given.' %
1417 (alias,nargs,len(args)))
1417 (alias,nargs,len(args)))
1418 return
1418 return
1419 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1419 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1420 # Now call the macro, evaluating in the user's namespace
1420 # Now call the macro, evaluating in the user's namespace
1421 try:
1421 try:
1422 self.system(cmd)
1422 self.system(cmd)
1423 except:
1423 except:
1424 self.showtraceback()
1424 self.showtraceback()
1425
1425
1426 def autoindent_update(self,line):
1426 def autoindent_update(self,line):
1427 """Keep track of the indent level."""
1427 """Keep track of the indent level."""
1428 if self.autoindent:
1428 if self.autoindent:
1429 if line:
1429 if line:
1430 ini_spaces = ini_spaces_re.match(line)
1430 ini_spaces = ini_spaces_re.match(line)
1431 if ini_spaces:
1431 if ini_spaces:
1432 nspaces = ini_spaces.end()
1432 nspaces = ini_spaces.end()
1433 else:
1433 else:
1434 nspaces = 0
1434 nspaces = 0
1435 self.indent_current_nsp = nspaces
1435 self.indent_current_nsp = nspaces
1436
1436
1437 if line[-1] == ':':
1437 if line[-1] == ':':
1438 self.indent_current_nsp += 4
1438 self.indent_current_nsp += 4
1439 elif dedent_re.match(line):
1439 elif dedent_re.match(line):
1440 self.indent_current_nsp -= 4
1440 self.indent_current_nsp -= 4
1441 else:
1441 else:
1442 self.indent_current_nsp = 0
1442 self.indent_current_nsp = 0
1443
1443
1444 # indent_current is the actual string to be inserted
1444 # indent_current is the actual string to be inserted
1445 # by the readline hooks for indentation
1445 # by the readline hooks for indentation
1446 self.indent_current = ' '* self.indent_current_nsp
1446 self.indent_current = ' '* self.indent_current_nsp
1447
1447
1448 def runlines(self,lines):
1448 def runlines(self,lines):
1449 """Run a string of one or more lines of source.
1449 """Run a string of one or more lines of source.
1450
1450
1451 This method is capable of running a string containing multiple source
1451 This method is capable of running a string containing multiple source
1452 lines, as if they had been entered at the IPython prompt. Since it
1452 lines, as if they had been entered at the IPython prompt. Since it
1453 exposes IPython's processing machinery, the given strings can contain
1453 exposes IPython's processing machinery, the given strings can contain
1454 magic calls (%magic), special shell access (!cmd), etc."""
1454 magic calls (%magic), special shell access (!cmd), etc."""
1455
1455
1456 # We must start with a clean buffer, in case this is run from an
1456 # We must start with a clean buffer, in case this is run from an
1457 # interactive IPython session (via a magic, for example).
1457 # interactive IPython session (via a magic, for example).
1458 self.resetbuffer()
1458 self.resetbuffer()
1459 lines = lines.split('\n')
1459 lines = lines.split('\n')
1460 more = 0
1460 more = 0
1461 for line in lines:
1461 for line in lines:
1462 # skip blank lines so we don't mess up the prompt counter, but do
1462 # skip blank lines so we don't mess up the prompt counter, but do
1463 # NOT skip even a blank line if we are in a code block (more is
1463 # NOT skip even a blank line if we are in a code block (more is
1464 # true)
1464 # true)
1465 #print 'rl line:<%s>' % line # dbg
1465 #print 'rl line:<%s>' % line # dbg
1466 if line or more:
1466 if line or more:
1467 #print 'doit' # dbg
1467 #print 'doit' # dbg
1468 newline = self.prefilter(line,more)
1468 newline = self.prefilter(line,more)
1469 more = self.push(newline)
1469 more = self.push(newline)
1470 # IPython's runsource returns None if there was an error
1470 # IPython's runsource returns None if there was an error
1471 # compiling the code. This allows us to stop processing right
1471 # compiling the code. This allows us to stop processing right
1472 # away, so the user gets the error message at the right place.
1472 # away, so the user gets the error message at the right place.
1473 if more is None:
1473 if more is None:
1474 break
1474 break
1475 # final newline in case the input didn't have it, so that the code
1475 # final newline in case the input didn't have it, so that the code
1476 # actually does get executed
1476 # actually does get executed
1477 if more:
1477 if more:
1478 self.push('\n')
1478 self.push('\n')
1479
1479
1480 def runsource(self, source, filename='<input>', symbol='single'):
1480 def runsource(self, source, filename='<input>', symbol='single'):
1481 """Compile and run some source in the interpreter.
1481 """Compile and run some source in the interpreter.
1482
1482
1483 Arguments are as for compile_command().
1483 Arguments are as for compile_command().
1484
1484
1485 One several things can happen:
1485 One several things can happen:
1486
1486
1487 1) The input is incorrect; compile_command() raised an
1487 1) The input is incorrect; compile_command() raised an
1488 exception (SyntaxError or OverflowError). A syntax traceback
1488 exception (SyntaxError or OverflowError). A syntax traceback
1489 will be printed by calling the showsyntaxerror() method.
1489 will be printed by calling the showsyntaxerror() method.
1490
1490
1491 2) The input is incomplete, and more input is required;
1491 2) The input is incomplete, and more input is required;
1492 compile_command() returned None. Nothing happens.
1492 compile_command() returned None. Nothing happens.
1493
1493
1494 3) The input is complete; compile_command() returned a code
1494 3) The input is complete; compile_command() returned a code
1495 object. The code is executed by calling self.runcode() (which
1495 object. The code is executed by calling self.runcode() (which
1496 also handles run-time exceptions, except for SystemExit).
1496 also handles run-time exceptions, except for SystemExit).
1497
1497
1498 The return value is:
1498 The return value is:
1499
1499
1500 - True in case 2
1500 - True in case 2
1501
1501
1502 - False in the other cases, unless an exception is raised, where
1502 - False in the other cases, unless an exception is raised, where
1503 None is returned instead. This can be used by external callers to
1503 None is returned instead. This can be used by external callers to
1504 know whether to continue feeding input or not.
1504 know whether to continue feeding input or not.
1505
1505
1506 The return value can be used to decide whether to use sys.ps1 or
1506 The return value can be used to decide whether to use sys.ps1 or
1507 sys.ps2 to prompt the next line."""
1507 sys.ps2 to prompt the next line."""
1508
1508
1509 try:
1509 try:
1510 code = self.compile(source,filename,symbol)
1510 code = self.compile(source,filename,symbol)
1511 except (OverflowError, SyntaxError, ValueError):
1511 except (OverflowError, SyntaxError, ValueError):
1512 # Case 1
1512 # Case 1
1513 self.showsyntaxerror(filename)
1513 self.showsyntaxerror(filename)
1514 return None
1514 return None
1515
1515
1516 if code is None:
1516 if code is None:
1517 # Case 2
1517 # Case 2
1518 return True
1518 return True
1519
1519
1520 # Case 3
1520 # Case 3
1521 # We store the code object so that threaded shells and
1521 # We store the code object so that threaded shells and
1522 # custom exception handlers can access all this info if needed.
1522 # custom exception handlers can access all this info if needed.
1523 # The source corresponding to this can be obtained from the
1523 # The source corresponding to this can be obtained from the
1524 # buffer attribute as '\n'.join(self.buffer).
1524 # buffer attribute as '\n'.join(self.buffer).
1525 self.code_to_run = code
1525 self.code_to_run = code
1526 # now actually execute the code object
1526 # now actually execute the code object
1527 if self.runcode(code) == 0:
1527 if self.runcode(code) == 0:
1528 return False
1528 return False
1529 else:
1529 else:
1530 return None
1530 return None
1531
1531
1532 def runcode(self,code_obj):
1532 def runcode(self,code_obj):
1533 """Execute a code object.
1533 """Execute a code object.
1534
1534
1535 When an exception occurs, self.showtraceback() is called to display a
1535 When an exception occurs, self.showtraceback() is called to display a
1536 traceback.
1536 traceback.
1537
1537
1538 Return value: a flag indicating whether the code to be run completed
1538 Return value: a flag indicating whether the code to be run completed
1539 successfully:
1539 successfully:
1540
1540
1541 - 0: successful execution.
1541 - 0: successful execution.
1542 - 1: an error occurred.
1542 - 1: an error occurred.
1543 """
1543 """
1544
1544
1545 # Set our own excepthook in case the user code tries to call it
1545 # Set our own excepthook in case the user code tries to call it
1546 # directly, so that the IPython crash handler doesn't get triggered
1546 # directly, so that the IPython crash handler doesn't get triggered
1547 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1547 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1548
1548
1549 # we save the original sys.excepthook in the instance, in case config
1549 # we save the original sys.excepthook in the instance, in case config
1550 # code (such as magics) needs access to it.
1550 # code (such as magics) needs access to it.
1551 self.sys_excepthook = old_excepthook
1551 self.sys_excepthook = old_excepthook
1552 outflag = 1 # happens in more places, so it's easier as default
1552 outflag = 1 # happens in more places, so it's easier as default
1553 try:
1553 try:
1554 try:
1554 try:
1555 # Embedded instances require separate global/local namespaces
1555 # Embedded instances require separate global/local namespaces
1556 # so they can see both the surrounding (local) namespace and
1556 # so they can see both the surrounding (local) namespace and
1557 # the module-level globals when called inside another function.
1557 # the module-level globals when called inside another function.
1558 if self.embedded:
1558 if self.embedded:
1559 exec code_obj in self.user_global_ns, self.user_ns
1559 exec code_obj in self.user_global_ns, self.user_ns
1560 # Normal (non-embedded) instances should only have a single
1560 # Normal (non-embedded) instances should only have a single
1561 # namespace for user code execution, otherwise functions won't
1561 # namespace for user code execution, otherwise functions won't
1562 # see interactive top-level globals.
1562 # see interactive top-level globals.
1563 else:
1563 else:
1564 exec code_obj in self.user_ns
1564 exec code_obj in self.user_ns
1565 finally:
1565 finally:
1566 # Reset our crash handler in place
1566 # Reset our crash handler in place
1567 sys.excepthook = old_excepthook
1567 sys.excepthook = old_excepthook
1568 except SystemExit:
1568 except SystemExit:
1569 self.resetbuffer()
1569 self.resetbuffer()
1570 self.showtraceback()
1570 self.showtraceback()
1571 warn("Type exit or quit to exit IPython "
1571 warn("Type exit or quit to exit IPython "
1572 "(%Exit or %Quit do so unconditionally).",level=1)
1572 "(%Exit or %Quit do so unconditionally).",level=1)
1573 except self.custom_exceptions:
1573 except self.custom_exceptions:
1574 etype,value,tb = sys.exc_info()
1574 etype,value,tb = sys.exc_info()
1575 self.CustomTB(etype,value,tb)
1575 self.CustomTB(etype,value,tb)
1576 except:
1576 except:
1577 self.showtraceback()
1577 self.showtraceback()
1578 else:
1578 else:
1579 outflag = 0
1579 outflag = 0
1580 if softspace(sys.stdout, 0):
1580 if softspace(sys.stdout, 0):
1581 print
1581 print
1582 # Flush out code object which has been run (and source)
1582 # Flush out code object which has been run (and source)
1583 self.code_to_run = None
1583 self.code_to_run = None
1584 return outflag
1584 return outflag
1585
1585
1586 def push(self, line):
1586 def push(self, line):
1587 """Push a line to the interpreter.
1587 """Push a line to the interpreter.
1588
1588
1589 The line should not have a trailing newline; it may have
1589 The line should not have a trailing newline; it may have
1590 internal newlines. The line is appended to a buffer and the
1590 internal newlines. The line is appended to a buffer and the
1591 interpreter's runsource() method is called with the
1591 interpreter's runsource() method is called with the
1592 concatenated contents of the buffer as source. If this
1592 concatenated contents of the buffer as source. If this
1593 indicates that the command was executed or invalid, the buffer
1593 indicates that the command was executed or invalid, the buffer
1594 is reset; otherwise, the command is incomplete, and the buffer
1594 is reset; otherwise, the command is incomplete, and the buffer
1595 is left as it was after the line was appended. The return
1595 is left as it was after the line was appended. The return
1596 value is 1 if more input is required, 0 if the line was dealt
1596 value is 1 if more input is required, 0 if the line was dealt
1597 with in some way (this is the same as runsource()).
1597 with in some way (this is the same as runsource()).
1598
1598
1599 """
1599 """
1600 self.buffer.append(line)
1600 self.buffer.append(line)
1601 more = self.runsource('\n'.join(self.buffer), self.filename)
1601 more = self.runsource('\n'.join(self.buffer), self.filename)
1602 if not more:
1602 if not more:
1603 self.resetbuffer()
1603 self.resetbuffer()
1604 return more
1604 return more
1605
1605
1606 def resetbuffer(self):
1606 def resetbuffer(self):
1607 """Reset the input buffer."""
1607 """Reset the input buffer."""
1608 self.buffer[:] = []
1608 self.buffer[:] = []
1609
1609
1610 def raw_input(self,prompt='',continue_prompt=False):
1610 def raw_input(self,prompt='',continue_prompt=False):
1611 """Write a prompt and read a line.
1611 """Write a prompt and read a line.
1612
1612
1613 The returned line does not include the trailing newline.
1613 The returned line does not include the trailing newline.
1614 When the user enters the EOF key sequence, EOFError is raised.
1614 When the user enters the EOF key sequence, EOFError is raised.
1615
1615
1616 Optional inputs:
1616 Optional inputs:
1617
1617
1618 - prompt(''): a string to be printed to prompt the user.
1618 - prompt(''): a string to be printed to prompt the user.
1619
1619
1620 - continue_prompt(False): whether this line is the first one or a
1620 - continue_prompt(False): whether this line is the first one or a
1621 continuation in a sequence of inputs.
1621 continuation in a sequence of inputs.
1622 """
1622 """
1623
1623
1624 line = raw_input_original(prompt)
1624 line = raw_input_original(prompt)
1625 # Try to be reasonably smart about not re-indenting pasted input more
1625 # Try to be reasonably smart about not re-indenting pasted input more
1626 # than necessary. We do this by trimming out the auto-indent initial
1626 # than necessary. We do this by trimming out the auto-indent initial
1627 # spaces, if the user's actual input started itself with whitespace.
1627 # spaces, if the user's actual input started itself with whitespace.
1628 if self.autoindent:
1628 if self.autoindent:
1629 line2 = line[self.indent_current_nsp:]
1629 line2 = line[self.indent_current_nsp:]
1630 if line2[0:1] in (' ','\t'):
1630 if line2[0:1] in (' ','\t'):
1631 line = line2
1631 line = line2
1632 return self.prefilter(line,continue_prompt)
1632 return self.prefilter(line,continue_prompt)
1633
1633
1634 def split_user_input(self,line):
1634 def split_user_input(self,line):
1635 """Split user input into pre-char, function part and rest."""
1635 """Split user input into pre-char, function part and rest."""
1636
1636
1637 lsplit = self.line_split.match(line)
1637 lsplit = self.line_split.match(line)
1638 if lsplit is None: # no regexp match returns None
1638 if lsplit is None: # no regexp match returns None
1639 try:
1639 try:
1640 iFun,theRest = line.split(None,1)
1640 iFun,theRest = line.split(None,1)
1641 except ValueError:
1641 except ValueError:
1642 iFun,theRest = line,''
1642 iFun,theRest = line,''
1643 pre = re.match('^(\s*)(.*)',line).groups()[0]
1643 pre = re.match('^(\s*)(.*)',line).groups()[0]
1644 else:
1644 else:
1645 pre,iFun,theRest = lsplit.groups()
1645 pre,iFun,theRest = lsplit.groups()
1646
1646
1647 #print 'line:<%s>' % line # dbg
1647 #print 'line:<%s>' % line # dbg
1648 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1648 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1649 return pre,iFun.strip(),theRest
1649 return pre,iFun.strip(),theRest
1650
1650
1651 def _prefilter(self, line, continue_prompt):
1651 def _prefilter(self, line, continue_prompt):
1652 """Calls different preprocessors, depending on the form of line."""
1652 """Calls different preprocessors, depending on the form of line."""
1653
1653
1654 # All handlers *must* return a value, even if it's blank ('').
1654 # All handlers *must* return a value, even if it's blank ('').
1655
1655
1656 # Lines are NOT logged here. Handlers should process the line as
1656 # Lines are NOT logged here. Handlers should process the line as
1657 # needed, update the cache AND log it (so that the input cache array
1657 # needed, update the cache AND log it (so that the input cache array
1658 # stays synced).
1658 # stays synced).
1659
1659
1660 # This function is _very_ delicate, and since it's also the one which
1660 # This function is _very_ delicate, and since it's also the one which
1661 # determines IPython's response to user input, it must be as efficient
1661 # determines IPython's response to user input, it must be as efficient
1662 # as possible. For this reason it has _many_ returns in it, trying
1662 # as possible. For this reason it has _many_ returns in it, trying
1663 # always to exit as quickly as it can figure out what it needs to do.
1663 # always to exit as quickly as it can figure out what it needs to do.
1664
1664
1665 # This function is the main responsible for maintaining IPython's
1665 # This function is the main responsible for maintaining IPython's
1666 # behavior respectful of Python's semantics. So be _very_ careful if
1666 # behavior respectful of Python's semantics. So be _very_ careful if
1667 # making changes to anything here.
1667 # making changes to anything here.
1668
1668
1669 #.....................................................................
1669 #.....................................................................
1670 # Code begins
1670 # Code begins
1671
1671
1672 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1672 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1673
1673
1674 # save the line away in case we crash, so the post-mortem handler can
1674 # save the line away in case we crash, so the post-mortem handler can
1675 # record it
1675 # record it
1676 self._last_input_line = line
1676 self._last_input_line = line
1677
1677
1678 #print '***line: <%s>' % line # dbg
1678 #print '***line: <%s>' % line # dbg
1679
1679
1680 # the input history needs to track even empty lines
1680 # the input history needs to track even empty lines
1681 if not line.strip():
1681 if not line.strip():
1682 if not continue_prompt:
1682 if not continue_prompt:
1683 self.outputcache.prompt_count -= 1
1683 self.outputcache.prompt_count -= 1
1684 return self.handle_normal(line,continue_prompt)
1684 return self.handle_normal(line,continue_prompt)
1685 #return self.handle_normal('',continue_prompt)
1685 #return self.handle_normal('',continue_prompt)
1686
1686
1687 # print '***cont',continue_prompt # dbg
1687 # print '***cont',continue_prompt # dbg
1688 # special handlers are only allowed for single line statements
1688 # special handlers are only allowed for single line statements
1689 if continue_prompt and not self.rc.multi_line_specials:
1689 if continue_prompt and not self.rc.multi_line_specials:
1690 return self.handle_normal(line,continue_prompt)
1690 return self.handle_normal(line,continue_prompt)
1691
1691
1692 # For the rest, we need the structure of the input
1692 # For the rest, we need the structure of the input
1693 pre,iFun,theRest = self.split_user_input(line)
1693 pre,iFun,theRest = self.split_user_input(line)
1694 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1694 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1695
1695
1696 # First check for explicit escapes in the last/first character
1696 # First check for explicit escapes in the last/first character
1697 handler = None
1697 handler = None
1698 if line[-1] == self.ESC_HELP:
1698 if line[-1] == self.ESC_HELP:
1699 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1699 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1700 if handler is None:
1700 if handler is None:
1701 # look at the first character of iFun, NOT of line, so we skip
1701 # look at the first character of iFun, NOT of line, so we skip
1702 # leading whitespace in multiline input
1702 # leading whitespace in multiline input
1703 handler = self.esc_handlers.get(iFun[0:1])
1703 handler = self.esc_handlers.get(iFun[0:1])
1704 if handler is not None:
1704 if handler is not None:
1705 return handler(line,continue_prompt,pre,iFun,theRest)
1705 return handler(line,continue_prompt,pre,iFun,theRest)
1706 # Emacs ipython-mode tags certain input lines
1706 # Emacs ipython-mode tags certain input lines
1707 if line.endswith('# PYTHON-MODE'):
1707 if line.endswith('# PYTHON-MODE'):
1708 return self.handle_emacs(line,continue_prompt)
1708 return self.handle_emacs(line,continue_prompt)
1709
1709
1710 # Next, check if we can automatically execute this thing
1710 # Next, check if we can automatically execute this thing
1711
1711
1712 # Allow ! in multi-line statements if multi_line_specials is on:
1712 # Allow ! in multi-line statements if multi_line_specials is on:
1713 if continue_prompt and self.rc.multi_line_specials and \
1713 if continue_prompt and self.rc.multi_line_specials and \
1714 iFun.startswith(self.ESC_SHELL):
1714 iFun.startswith(self.ESC_SHELL):
1715 return self.handle_shell_escape(line,continue_prompt,
1715 return self.handle_shell_escape(line,continue_prompt,
1716 pre=pre,iFun=iFun,
1716 pre=pre,iFun=iFun,
1717 theRest=theRest)
1717 theRest=theRest)
1718
1718
1719 # Let's try to find if the input line is a magic fn
1719 # Let's try to find if the input line is a magic fn
1720 oinfo = None
1720 oinfo = None
1721 if hasattr(self,'magic_'+iFun):
1721 if hasattr(self,'magic_'+iFun):
1722 # WARNING: _ofind uses getattr(), so it can consume generators and
1722 # WARNING: _ofind uses getattr(), so it can consume generators and
1723 # cause other side effects.
1723 # cause other side effects.
1724 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1724 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1725 if oinfo['ismagic']:
1725 if oinfo['ismagic']:
1726 # Be careful not to call magics when a variable assignment is
1726 # Be careful not to call magics when a variable assignment is
1727 # being made (ls='hi', for example)
1727 # being made (ls='hi', for example)
1728 if self.rc.automagic and \
1728 if self.rc.automagic and \
1729 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1729 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1730 (self.rc.multi_line_specials or not continue_prompt):
1730 (self.rc.multi_line_specials or not continue_prompt):
1731 return self.handle_magic(line,continue_prompt,
1731 return self.handle_magic(line,continue_prompt,
1732 pre,iFun,theRest)
1732 pre,iFun,theRest)
1733 else:
1733 else:
1734 return self.handle_normal(line,continue_prompt)
1734 return self.handle_normal(line,continue_prompt)
1735
1735
1736 # If the rest of the line begins with an (in)equality, assginment or
1736 # If the rest of the line begins with an (in)equality, assginment or
1737 # function call, we should not call _ofind but simply execute it.
1737 # function call, we should not call _ofind but simply execute it.
1738 # This avoids spurious geattr() accesses on objects upon assignment.
1738 # This avoids spurious geattr() accesses on objects upon assignment.
1739 #
1739 #
1740 # It also allows users to assign to either alias or magic names true
1740 # It also allows users to assign to either alias or magic names true
1741 # python variables (the magic/alias systems always take second seat to
1741 # python variables (the magic/alias systems always take second seat to
1742 # true python code).
1742 # true python code).
1743 if theRest and theRest[0] in '!=()':
1743 if theRest and theRest[0] in '!=()':
1744 return self.handle_normal(line,continue_prompt)
1744 return self.handle_normal(line,continue_prompt)
1745
1745
1746 if oinfo is None:
1746 if oinfo is None:
1747 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1747 # let's try to ensure that _oinfo is ONLY called when autocall is
1748 # on. Since it has inevitable potential side effects, at least
1749 # having autocall off should be a guarantee to the user that no
1750 # weird things will happen.
1751
1752 if self.rc.autocall:
1753 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1754 else:
1755 # in this case, all that's left is either an alias or
1756 # processing the line normally.
1757 if iFun in self.alias_table:
1758 return self.handle_alias(line,continue_prompt,
1759 pre,iFun,theRest)
1760 else:
1761 return self.handle_normal(line,continue_prompt)
1748
1762
1749 if not oinfo['found']:
1763 if not oinfo['found']:
1750 return self.handle_normal(line,continue_prompt)
1764 return self.handle_normal(line,continue_prompt)
1751 else:
1765 else:
1752 #print 'iFun <%s> rest <%s>' % (iFun,theRest) # dbg
1766 #print 'iFun <%s> rest <%s>' % (iFun,theRest) # dbg
1753 if oinfo['isalias']:
1767 if oinfo['isalias']:
1754 return self.handle_alias(line,continue_prompt,
1768 return self.handle_alias(line,continue_prompt,
1755 pre,iFun,theRest)
1769 pre,iFun,theRest)
1756
1770
1757 if self.rc.autocall and \
1771 if self.rc.autocall and \
1758 not self.re_exclude_auto.match(theRest) and \
1772 not self.re_exclude_auto.match(theRest) and \
1759 self.re_fun_name.match(iFun) and \
1773 self.re_fun_name.match(iFun) and \
1760 callable(oinfo['obj']) :
1774 callable(oinfo['obj']) :
1761 #print 'going auto' # dbg
1775 #print 'going auto' # dbg
1762 return self.handle_auto(line,continue_prompt,pre,iFun,theRest)
1776 return self.handle_auto(line,continue_prompt,pre,iFun,theRest)
1763 else:
1777 else:
1764 #print 'was callable?', callable(oinfo['obj']) # dbg
1778 #print 'was callable?', callable(oinfo['obj']) # dbg
1765 return self.handle_normal(line,continue_prompt)
1779 return self.handle_normal(line,continue_prompt)
1766
1780
1767 # If we get here, we have a normal Python line. Log and return.
1781 # If we get here, we have a normal Python line. Log and return.
1768 return self.handle_normal(line,continue_prompt)
1782 return self.handle_normal(line,continue_prompt)
1769
1783
1770 def _prefilter_dumb(self, line, continue_prompt):
1784 def _prefilter_dumb(self, line, continue_prompt):
1771 """simple prefilter function, for debugging"""
1785 """simple prefilter function, for debugging"""
1772 return self.handle_normal(line,continue_prompt)
1786 return self.handle_normal(line,continue_prompt)
1773
1787
1774 # Set the default prefilter() function (this can be user-overridden)
1788 # Set the default prefilter() function (this can be user-overridden)
1775 prefilter = _prefilter
1789 prefilter = _prefilter
1776
1790
1777 def handle_normal(self,line,continue_prompt=None,
1791 def handle_normal(self,line,continue_prompt=None,
1778 pre=None,iFun=None,theRest=None):
1792 pre=None,iFun=None,theRest=None):
1779 """Handle normal input lines. Use as a template for handlers."""
1793 """Handle normal input lines. Use as a template for handlers."""
1780
1794
1781 # With autoindent on, we need some way to exit the input loop, and I
1795 # With autoindent on, we need some way to exit the input loop, and I
1782 # don't want to force the user to have to backspace all the way to
1796 # don't want to force the user to have to backspace all the way to
1783 # clear the line. The rule will be in this case, that either two
1797 # clear the line. The rule will be in this case, that either two
1784 # lines of pure whitespace in a row, or a line of pure whitespace but
1798 # lines of pure whitespace in a row, or a line of pure whitespace but
1785 # of a size different to the indent level, will exit the input loop.
1799 # of a size different to the indent level, will exit the input loop.
1786 if (continue_prompt and self.autoindent and isspace(line) and
1800 if (continue_prompt and self.autoindent and isspace(line) and
1787 (line != self.indent_current or isspace(self.buffer[-1]))):
1801 (line != self.indent_current or isspace(self.buffer[-1]))):
1788 line = ''
1802 line = ''
1789
1803
1790 self.log(line,continue_prompt)
1804 self.log(line,continue_prompt)
1791 self.update_cache(line)
1805 self.update_cache(line)
1792 return line
1806 return line
1793
1807
1794 def handle_alias(self,line,continue_prompt=None,
1808 def handle_alias(self,line,continue_prompt=None,
1795 pre=None,iFun=None,theRest=None):
1809 pre=None,iFun=None,theRest=None):
1796 """Handle alias input lines. """
1810 """Handle alias input lines. """
1797
1811
1798 theRest = esc_quotes(theRest)
1812 theRest = esc_quotes(theRest)
1799 # log the ipalias form, which doesn't depend on the instance name
1813 # log the ipalias form, which doesn't depend on the instance name
1800 line_log = 'ipalias("%s %s")' % (iFun,theRest)
1814 line_log = 'ipalias("%s %s")' % (iFun,theRest)
1801 self.log(line_log,continue_prompt)
1815 self.log(line_log,continue_prompt)
1802 self.update_cache(line_log)
1816 self.update_cache(line_log)
1803 # this is what actually gets executed
1817 # this is what actually gets executed
1804 return "%s%s.call_alias('%s','%s')" % (pre,self.name,iFun,theRest)
1818 return "%s%s.call_alias('%s','%s')" % (pre,self.name,iFun,theRest)
1805
1819
1806 def handle_shell_escape(self, line, continue_prompt=None,
1820 def handle_shell_escape(self, line, continue_prompt=None,
1807 pre=None,iFun=None,theRest=None):
1821 pre=None,iFun=None,theRest=None):
1808 """Execute the line in a shell, empty return value"""
1822 """Execute the line in a shell, empty return value"""
1809
1823
1810 #print 'line in :', `line` # dbg
1824 #print 'line in :', `line` # dbg
1811 # Example of a special handler. Others follow a similar pattern.
1825 # Example of a special handler. Others follow a similar pattern.
1812 if continue_prompt: # multi-line statements
1826 if continue_prompt: # multi-line statements
1813 if iFun.startswith('!!'):
1827 if iFun.startswith('!!'):
1814 print 'SyntaxError: !! is not allowed in multiline statements'
1828 print 'SyntaxError: !! is not allowed in multiline statements'
1815 return pre
1829 return pre
1816 else:
1830 else:
1817 cmd = ("%s %s" % (iFun[1:],theRest)) #.replace('"','\\"')
1831 cmd = ("%s %s" % (iFun[1:],theRest)) #.replace('"','\\"')
1818 #line_out = '%s%s.system("%s")' % (pre,self.name,cmd)
1832 #line_out = '%s%s.system("%s")' % (pre,self.name,cmd)
1819 line_out = '%s%s.system(r"""%s"""[:-1])' % (pre,self.name,cmd + "_")
1833 line_out = '%s%s.system(r"""%s"""[:-1])' % (pre,self.name,cmd + "_")
1820 #line_out = ('%s%s.system(' % (pre,self.name)) + repr(cmd) + ')'
1834 #line_out = ('%s%s.system(' % (pre,self.name)) + repr(cmd) + ')'
1821 else: # single-line input
1835 else: # single-line input
1822 if line.startswith('!!'):
1836 if line.startswith('!!'):
1823 # rewrite iFun/theRest to properly hold the call to %sx and
1837 # rewrite iFun/theRest to properly hold the call to %sx and
1824 # the actual command to be executed, so handle_magic can work
1838 # the actual command to be executed, so handle_magic can work
1825 # correctly
1839 # correctly
1826 theRest = '%s %s' % (iFun[2:],theRest)
1840 theRest = '%s %s' % (iFun[2:],theRest)
1827 iFun = 'sx'
1841 iFun = 'sx'
1828 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,line[2:]),
1842 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,line[2:]),
1829 continue_prompt,pre,iFun,theRest)
1843 continue_prompt,pre,iFun,theRest)
1830 else:
1844 else:
1831 #cmd = esc_quotes(line[1:])
1845 #cmd = esc_quotes(line[1:])
1832 cmd=line[1:]
1846 cmd=line[1:]
1833 #line_out = '%s.system("%s")' % (self.name,cmd)
1847 #line_out = '%s.system("%s")' % (self.name,cmd)
1834 line_out = '%s.system(r"""%s"""[:-1])' % (self.name,cmd +"_")
1848 line_out = '%s.system(r"""%s"""[:-1])' % (self.name,cmd +"_")
1835 #line_out = ('%s.system(' % self.name) + repr(cmd)+ ')'
1849 #line_out = ('%s.system(' % self.name) + repr(cmd)+ ')'
1836 # update cache/log and return
1850 # update cache/log and return
1837 self.log(line_out,continue_prompt)
1851 self.log(line_out,continue_prompt)
1838 self.update_cache(line_out) # readline cache gets normal line
1852 self.update_cache(line_out) # readline cache gets normal line
1839 #print 'line out r:', `line_out` # dbg
1853 #print 'line out r:', `line_out` # dbg
1840 #print 'line out s:', line_out # dbg
1854 #print 'line out s:', line_out # dbg
1841 return line_out
1855 return line_out
1842
1856
1843 def handle_magic(self, line, continue_prompt=None,
1857 def handle_magic(self, line, continue_prompt=None,
1844 pre=None,iFun=None,theRest=None):
1858 pre=None,iFun=None,theRest=None):
1845 """Execute magic functions.
1859 """Execute magic functions.
1846
1860
1847 Also log them with a prepended # so the log is clean Python."""
1861 Also log them with a prepended # so the log is clean Python."""
1848
1862
1849 cmd = '%sipmagic("%s")' % (pre,esc_quotes('%s %s' % (iFun,theRest)))
1863 cmd = '%sipmagic("%s")' % (pre,esc_quotes('%s %s' % (iFun,theRest)))
1850 self.log(cmd,continue_prompt)
1864 self.log(cmd,continue_prompt)
1851 self.update_cache(line)
1865 self.update_cache(line)
1852 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1866 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1853 return cmd
1867 return cmd
1854
1868
1855 def handle_auto(self, line, continue_prompt=None,
1869 def handle_auto(self, line, continue_prompt=None,
1856 pre=None,iFun=None,theRest=None):
1870 pre=None,iFun=None,theRest=None):
1857 """Hande lines which can be auto-executed, quoting if requested."""
1871 """Hande lines which can be auto-executed, quoting if requested."""
1858
1872
1859 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1873 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1860
1874
1861 # This should only be active for single-line input!
1875 # This should only be active for single-line input!
1862 if continue_prompt:
1876 if continue_prompt:
1863 return line
1877 return line
1864
1878
1865 if pre == self.ESC_QUOTE:
1879 if pre == self.ESC_QUOTE:
1866 # Auto-quote splitting on whitespace
1880 # Auto-quote splitting on whitespace
1867 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
1881 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
1868 elif pre == self.ESC_QUOTE2:
1882 elif pre == self.ESC_QUOTE2:
1869 # Auto-quote whole string
1883 # Auto-quote whole string
1870 newcmd = '%s("%s")' % (iFun,theRest)
1884 newcmd = '%s("%s")' % (iFun,theRest)
1871 else:
1885 else:
1872 # Auto-paren
1886 # Auto-paren
1873 if theRest[0:1] in ('=','['):
1887 if theRest[0:1] in ('=','['):
1874 # Don't autocall in these cases. They can be either
1888 # Don't autocall in these cases. They can be either
1875 # rebindings of an existing callable's name, or item access
1889 # rebindings of an existing callable's name, or item access
1876 # for an object which is BOTH callable and implements
1890 # for an object which is BOTH callable and implements
1877 # __getitem__.
1891 # __getitem__.
1878 return '%s %s' % (iFun,theRest)
1892 return '%s %s' % (iFun,theRest)
1879 if theRest.endswith(';'):
1893 if theRest.endswith(';'):
1880 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
1894 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
1881 else:
1895 else:
1882 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
1896 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
1883
1897
1884 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
1898 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
1885 # log what is now valid Python, not the actual user input (without the
1899 # log what is now valid Python, not the actual user input (without the
1886 # final newline)
1900 # final newline)
1887 self.log(newcmd,continue_prompt)
1901 self.log(newcmd,continue_prompt)
1888 return newcmd
1902 return newcmd
1889
1903
1890 def handle_help(self, line, continue_prompt=None,
1904 def handle_help(self, line, continue_prompt=None,
1891 pre=None,iFun=None,theRest=None):
1905 pre=None,iFun=None,theRest=None):
1892 """Try to get some help for the object.
1906 """Try to get some help for the object.
1893
1907
1894 obj? or ?obj -> basic information.
1908 obj? or ?obj -> basic information.
1895 obj?? or ??obj -> more details.
1909 obj?? or ??obj -> more details.
1896 """
1910 """
1897
1911
1898 # We need to make sure that we don't process lines which would be
1912 # We need to make sure that we don't process lines which would be
1899 # otherwise valid python, such as "x=1 # what?"
1913 # otherwise valid python, such as "x=1 # what?"
1900 try:
1914 try:
1901 codeop.compile_command(line)
1915 codeop.compile_command(line)
1902 except SyntaxError:
1916 except SyntaxError:
1903 # We should only handle as help stuff which is NOT valid syntax
1917 # We should only handle as help stuff which is NOT valid syntax
1904 if line[0]==self.ESC_HELP:
1918 if line[0]==self.ESC_HELP:
1905 line = line[1:]
1919 line = line[1:]
1906 elif line[-1]==self.ESC_HELP:
1920 elif line[-1]==self.ESC_HELP:
1907 line = line[:-1]
1921 line = line[:-1]
1908 self.log('#?'+line)
1922 self.log('#?'+line)
1909 self.update_cache(line)
1923 self.update_cache(line)
1910 if line:
1924 if line:
1911 self.magic_pinfo(line)
1925 self.magic_pinfo(line)
1912 else:
1926 else:
1913 page(self.usage,screen_lines=self.rc.screen_length)
1927 page(self.usage,screen_lines=self.rc.screen_length)
1914 return '' # Empty string is needed here!
1928 return '' # Empty string is needed here!
1915 except:
1929 except:
1916 # Pass any other exceptions through to the normal handler
1930 # Pass any other exceptions through to the normal handler
1917 return self.handle_normal(line,continue_prompt)
1931 return self.handle_normal(line,continue_prompt)
1918 else:
1932 else:
1919 # If the code compiles ok, we should handle it normally
1933 # If the code compiles ok, we should handle it normally
1920 return self.handle_normal(line,continue_prompt)
1934 return self.handle_normal(line,continue_prompt)
1921
1935
1922 def handle_emacs(self,line,continue_prompt=None,
1936 def handle_emacs(self,line,continue_prompt=None,
1923 pre=None,iFun=None,theRest=None):
1937 pre=None,iFun=None,theRest=None):
1924 """Handle input lines marked by python-mode."""
1938 """Handle input lines marked by python-mode."""
1925
1939
1926 # Currently, nothing is done. Later more functionality can be added
1940 # Currently, nothing is done. Later more functionality can be added
1927 # here if needed.
1941 # here if needed.
1928
1942
1929 # The input cache shouldn't be updated
1943 # The input cache shouldn't be updated
1930
1944
1931 return line
1945 return line
1932
1946
1933 def write(self,data):
1947 def write(self,data):
1934 """Write a string to the default output"""
1948 """Write a string to the default output"""
1935 Term.cout.write(data)
1949 Term.cout.write(data)
1936
1950
1937 def write_err(self,data):
1951 def write_err(self,data):
1938 """Write a string to the default error output"""
1952 """Write a string to the default error output"""
1939 Term.cerr.write(data)
1953 Term.cerr.write(data)
1940
1954
1941 def exit(self):
1955 def exit(self):
1942 """Handle interactive exit.
1956 """Handle interactive exit.
1943
1957
1944 This method sets the exit_now attribute."""
1958 This method sets the exit_now attribute."""
1945
1959
1946 if self.rc.confirm_exit:
1960 if self.rc.confirm_exit:
1947 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
1961 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
1948 self.exit_now = True
1962 self.exit_now = True
1949 else:
1963 else:
1950 self.exit_now = True
1964 self.exit_now = True
1951 return self.exit_now
1965 return self.exit_now
1952
1966
1953 def safe_execfile(self,fname,*where,**kw):
1967 def safe_execfile(self,fname,*where,**kw):
1954 fname = os.path.expanduser(fname)
1968 fname = os.path.expanduser(fname)
1955
1969
1956 # find things also in current directory
1970 # find things also in current directory
1957 dname = os.path.dirname(fname)
1971 dname = os.path.dirname(fname)
1958 if not sys.path.count(dname):
1972 if not sys.path.count(dname):
1959 sys.path.append(dname)
1973 sys.path.append(dname)
1960
1974
1961 try:
1975 try:
1962 xfile = open(fname)
1976 xfile = open(fname)
1963 except:
1977 except:
1964 print >> Term.cerr, \
1978 print >> Term.cerr, \
1965 'Could not open file <%s> for safe execution.' % fname
1979 'Could not open file <%s> for safe execution.' % fname
1966 return None
1980 return None
1967
1981
1968 kw.setdefault('islog',0)
1982 kw.setdefault('islog',0)
1969 kw.setdefault('quiet',1)
1983 kw.setdefault('quiet',1)
1970 kw.setdefault('exit_ignore',0)
1984 kw.setdefault('exit_ignore',0)
1971 first = xfile.readline()
1985 first = xfile.readline()
1972 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
1986 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
1973 xfile.close()
1987 xfile.close()
1974 # line by line execution
1988 # line by line execution
1975 if first.startswith(loghead) or kw['islog']:
1989 if first.startswith(loghead) or kw['islog']:
1976 print 'Loading log file <%s> one line at a time...' % fname
1990 print 'Loading log file <%s> one line at a time...' % fname
1977 if kw['quiet']:
1991 if kw['quiet']:
1978 stdout_save = sys.stdout
1992 stdout_save = sys.stdout
1979 sys.stdout = StringIO.StringIO()
1993 sys.stdout = StringIO.StringIO()
1980 try:
1994 try:
1981 globs,locs = where[0:2]
1995 globs,locs = where[0:2]
1982 except:
1996 except:
1983 try:
1997 try:
1984 globs = locs = where[0]
1998 globs = locs = where[0]
1985 except:
1999 except:
1986 globs = locs = globals()
2000 globs = locs = globals()
1987 badblocks = []
2001 badblocks = []
1988
2002
1989 # we also need to identify indented blocks of code when replaying
2003 # we also need to identify indented blocks of code when replaying
1990 # logs and put them together before passing them to an exec
2004 # logs and put them together before passing them to an exec
1991 # statement. This takes a bit of regexp and look-ahead work in the
2005 # statement. This takes a bit of regexp and look-ahead work in the
1992 # file. It's easiest if we swallow the whole thing in memory
2006 # file. It's easiest if we swallow the whole thing in memory
1993 # first, and manually walk through the lines list moving the
2007 # first, and manually walk through the lines list moving the
1994 # counter ourselves.
2008 # counter ourselves.
1995 indent_re = re.compile('\s+\S')
2009 indent_re = re.compile('\s+\S')
1996 xfile = open(fname)
2010 xfile = open(fname)
1997 filelines = xfile.readlines()
2011 filelines = xfile.readlines()
1998 xfile.close()
2012 xfile.close()
1999 nlines = len(filelines)
2013 nlines = len(filelines)
2000 lnum = 0
2014 lnum = 0
2001 while lnum < nlines:
2015 while lnum < nlines:
2002 line = filelines[lnum]
2016 line = filelines[lnum]
2003 lnum += 1
2017 lnum += 1
2004 # don't re-insert logger status info into cache
2018 # don't re-insert logger status info into cache
2005 if line.startswith('#log#'):
2019 if line.startswith('#log#'):
2006 continue
2020 continue
2007 elif line.startswith('#!'):
2021 elif line.startswith('#!'):
2008 self.update_cache(line[1:])
2022 self.update_cache(line[1:])
2009 else:
2023 else:
2010 # build a block of code (maybe a single line) for execution
2024 # build a block of code (maybe a single line) for execution
2011 block = line
2025 block = line
2012 try:
2026 try:
2013 next = filelines[lnum] # lnum has already incremented
2027 next = filelines[lnum] # lnum has already incremented
2014 except:
2028 except:
2015 next = None
2029 next = None
2016 while next and indent_re.match(next):
2030 while next and indent_re.match(next):
2017 block += next
2031 block += next
2018 lnum += 1
2032 lnum += 1
2019 try:
2033 try:
2020 next = filelines[lnum]
2034 next = filelines[lnum]
2021 except:
2035 except:
2022 next = None
2036 next = None
2023 # now execute the block of one or more lines
2037 # now execute the block of one or more lines
2024 try:
2038 try:
2025 exec block in globs,locs
2039 exec block in globs,locs
2026 self.update_cache(block.rstrip())
2040 self.update_cache(block.rstrip())
2027 except SystemExit:
2041 except SystemExit:
2028 pass
2042 pass
2029 except:
2043 except:
2030 badblocks.append(block.rstrip())
2044 badblocks.append(block.rstrip())
2031 if kw['quiet']: # restore stdout
2045 if kw['quiet']: # restore stdout
2032 sys.stdout.close()
2046 sys.stdout.close()
2033 sys.stdout = stdout_save
2047 sys.stdout = stdout_save
2034 print 'Finished replaying log file <%s>' % fname
2048 print 'Finished replaying log file <%s>' % fname
2035 if badblocks:
2049 if badblocks:
2036 print >> sys.stderr, ('\nThe following lines/blocks in file '
2050 print >> sys.stderr, ('\nThe following lines/blocks in file '
2037 '<%s> reported errors:' % fname)
2051 '<%s> reported errors:' % fname)
2038
2052
2039 for badline in badblocks:
2053 for badline in badblocks:
2040 print >> sys.stderr, badline
2054 print >> sys.stderr, badline
2041 else: # regular file execution
2055 else: # regular file execution
2042 try:
2056 try:
2043 execfile(fname,*where)
2057 execfile(fname,*where)
2044 except SyntaxError:
2058 except SyntaxError:
2045 etype,evalue = sys.exc_info()[:2]
2059 etype,evalue = sys.exc_info()[:2]
2046 self.SyntaxTB(etype,evalue,[])
2060 self.SyntaxTB(etype,evalue,[])
2047 warn('Failure executing file: <%s>' % fname)
2061 warn('Failure executing file: <%s>' % fname)
2048 except SystemExit,status:
2062 except SystemExit,status:
2049 if not kw['exit_ignore']:
2063 if not kw['exit_ignore']:
2050 self.InteractiveTB()
2064 self.InteractiveTB()
2051 warn('Failure executing file: <%s>' % fname)
2065 warn('Failure executing file: <%s>' % fname)
2052 except:
2066 except:
2053 self.InteractiveTB()
2067 self.InteractiveTB()
2054 warn('Failure executing file: <%s>' % fname)
2068 warn('Failure executing file: <%s>' % fname)
2055
2069
2056 #************************* end of file <iplib.py> *****************************
2070 #************************* end of file <iplib.py> *****************************
@@ -1,4660 +1,4666 b''
1 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
1 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
2
2
3 * IPython/iplib.py (showtraceback): remove use of the
3 * IPython/iplib.py (showtraceback): remove use of the
4 sys.last_{type/value/traceback} structures, which are non
4 sys.last_{type/value/traceback} structures, which are non
5 thread-safe.
5 thread-safe.
6 (_prefilter): change control flow to ensure that we NEVER
7 introspect objects when autocall is off. This will guarantee that
8 having an input line of the form 'x.y', where access to attribute
9 'y' has side effects, doesn't trigger the side effect TWICE. It
10 is important to note that, with autocall on, these side effects
11 can still happen.
6
12
7 * IPython/macro.py (Macro.__init__): moved macros to a standalone
13 * IPython/macro.py (Macro.__init__): moved macros to a standalone
8 file. Now that they'll be more likely to be used with the
14 file. Now that they'll be more likely to be used with the
9 persistance system (%store), I want to make sure their module path
15 persistance system (%store), I want to make sure their module path
10 doesn't change in the future, so that we don't break things for
16 doesn't change in the future, so that we don't break things for
11 users' persisted data.
17 users' persisted data.
12
18
13 * IPython/iplib.py (autoindent_update): move indentation
19 * IPython/iplib.py (autoindent_update): move indentation
14 management into the _text_ processing loop, not the keyboard
20 management into the _text_ processing loop, not the keyboard
15 interactive one. This is necessary to correctly process non-typed
21 interactive one. This is necessary to correctly process non-typed
16 multiline input (such as macros).
22 multiline input (such as macros).
17
23
18 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
24 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
19 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
25 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
20 which was producing problems in the resulting manual.
26 which was producing problems in the resulting manual.
21 (magic_whos): improve reporting of instances (show their class,
27 (magic_whos): improve reporting of instances (show their class,
22 instead of simply printing 'instance' which isn't terribly
28 instead of simply printing 'instance' which isn't terribly
23 informative).
29 informative).
24
30
25 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
31 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
26 (minor mods) to support network shares under win32.
32 (minor mods) to support network shares under win32.
27
33
28 * IPython/winconsole.py (get_console_size): add new winconsole
34 * IPython/winconsole.py (get_console_size): add new winconsole
29 module and fixes to page_dumb() to improve its behavior under
35 module and fixes to page_dumb() to improve its behavior under
30 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
36 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
31
37
32 * IPython/Magic.py (Macro): simplified Macro class to just
38 * IPython/Magic.py (Macro): simplified Macro class to just
33 subclass list. We've had only 2.2 compatibility for a very long
39 subclass list. We've had only 2.2 compatibility for a very long
34 time, yet I was still avoiding subclassing the builtin types. No
40 time, yet I was still avoiding subclassing the builtin types. No
35 more (I'm also starting to use properties, though I won't shift to
41 more (I'm also starting to use properties, though I won't shift to
36 2.3-specific features quite yet).
42 2.3-specific features quite yet).
37 (magic_store): added Ville's patch for lightweight variable
43 (magic_store): added Ville's patch for lightweight variable
38 persistence, after a request on the user list by Matt Wilkie
44 persistence, after a request on the user list by Matt Wilkie
39 <maphew-AT-gmail.com>. The new %store magic's docstring has full
45 <maphew-AT-gmail.com>. The new %store magic's docstring has full
40 details.
46 details.
41
47
42 * IPython/iplib.py (InteractiveShell.post_config_initialization):
48 * IPython/iplib.py (InteractiveShell.post_config_initialization):
43 changed the default logfile name from 'ipython.log' to
49 changed the default logfile name from 'ipython.log' to
44 'ipython_log.py'. These logs are real python files, and now that
50 'ipython_log.py'. These logs are real python files, and now that
45 we have much better multiline support, people are more likely to
51 we have much better multiline support, people are more likely to
46 want to use them as such. Might as well name them correctly.
52 want to use them as such. Might as well name them correctly.
47
53
48 * IPython/Magic.py: substantial cleanup. While we can't stop
54 * IPython/Magic.py: substantial cleanup. While we can't stop
49 using magics as mixins, due to the existing customizations 'out
55 using magics as mixins, due to the existing customizations 'out
50 there' which rely on the mixin naming conventions, at least I
56 there' which rely on the mixin naming conventions, at least I
51 cleaned out all cross-class name usage. So once we are OK with
57 cleaned out all cross-class name usage. So once we are OK with
52 breaking compatibility, the two systems can be separated.
58 breaking compatibility, the two systems can be separated.
53
59
54 * IPython/Logger.py: major cleanup. This one is NOT a mixin
60 * IPython/Logger.py: major cleanup. This one is NOT a mixin
55 anymore, and the class is a fair bit less hideous as well. New
61 anymore, and the class is a fair bit less hideous as well. New
56 features were also introduced: timestamping of input, and logging
62 features were also introduced: timestamping of input, and logging
57 of output results. These are user-visible with the -t and -o
63 of output results. These are user-visible with the -t and -o
58 options to %logstart. Closes
64 options to %logstart. Closes
59 http://www.scipy.net/roundup/ipython/issue11 and a request by
65 http://www.scipy.net/roundup/ipython/issue11 and a request by
60 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
66 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
61
67
62 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
68 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
63
69
64 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
70 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
65 better hadnle backslashes in paths. See the thread 'More Windows
71 better hadnle backslashes in paths. See the thread 'More Windows
66 questions part 2 - \/ characters revisited' on the iypthon user
72 questions part 2 - \/ characters revisited' on the iypthon user
67 list:
73 list:
68 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
74 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
69
75
70 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
76 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
71
77
72 (InteractiveShell.__init__): change threaded shells to not use the
78 (InteractiveShell.__init__): change threaded shells to not use the
73 ipython crash handler. This was causing more problems than not,
79 ipython crash handler. This was causing more problems than not,
74 as exceptions in the main thread (GUI code, typically) would
80 as exceptions in the main thread (GUI code, typically) would
75 always show up as a 'crash', when they really weren't.
81 always show up as a 'crash', when they really weren't.
76
82
77 The colors and exception mode commands (%colors/%xmode) have been
83 The colors and exception mode commands (%colors/%xmode) have been
78 synchronized to also take this into account, so users can get
84 synchronized to also take this into account, so users can get
79 verbose exceptions for their threaded code as well. I also added
85 verbose exceptions for their threaded code as well. I also added
80 support for activating pdb inside this exception handler as well,
86 support for activating pdb inside this exception handler as well,
81 so now GUI authors can use IPython's enhanced pdb at runtime.
87 so now GUI authors can use IPython's enhanced pdb at runtime.
82
88
83 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
89 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
84 true by default, and add it to the shipped ipythonrc file. Since
90 true by default, and add it to the shipped ipythonrc file. Since
85 this asks the user before proceeding, I think it's OK to make it
91 this asks the user before proceeding, I think it's OK to make it
86 true by default.
92 true by default.
87
93
88 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
94 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
89 of the previous special-casing of input in the eval loop. I think
95 of the previous special-casing of input in the eval loop. I think
90 this is cleaner, as they really are commands and shouldn't have
96 this is cleaner, as they really are commands and shouldn't have
91 a special role in the middle of the core code.
97 a special role in the middle of the core code.
92
98
93 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
99 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
94
100
95 * IPython/iplib.py (edit_syntax_error): added support for
101 * IPython/iplib.py (edit_syntax_error): added support for
96 automatically reopening the editor if the file had a syntax error
102 automatically reopening the editor if the file had a syntax error
97 in it. Thanks to scottt who provided the patch at:
103 in it. Thanks to scottt who provided the patch at:
98 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
104 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
99 version committed).
105 version committed).
100
106
101 * IPython/iplib.py (handle_normal): add suport for multi-line
107 * IPython/iplib.py (handle_normal): add suport for multi-line
102 input with emtpy lines. This fixes
108 input with emtpy lines. This fixes
103 http://www.scipy.net/roundup/ipython/issue43 and a similar
109 http://www.scipy.net/roundup/ipython/issue43 and a similar
104 discussion on the user list.
110 discussion on the user list.
105
111
106 WARNING: a behavior change is necessarily introduced to support
112 WARNING: a behavior change is necessarily introduced to support
107 blank lines: now a single blank line with whitespace does NOT
113 blank lines: now a single blank line with whitespace does NOT
108 break the input loop, which means that when autoindent is on, by
114 break the input loop, which means that when autoindent is on, by
109 default hitting return on the next (indented) line does NOT exit.
115 default hitting return on the next (indented) line does NOT exit.
110
116
111 Instead, to exit a multiline input you can either have:
117 Instead, to exit a multiline input you can either have:
112
118
113 - TWO whitespace lines (just hit return again), or
119 - TWO whitespace lines (just hit return again), or
114 - a single whitespace line of a different length than provided
120 - a single whitespace line of a different length than provided
115 by the autoindent (add or remove a space).
121 by the autoindent (add or remove a space).
116
122
117 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
123 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
118 module to better organize all readline-related functionality.
124 module to better organize all readline-related functionality.
119 I've deleted FlexCompleter and put all completion clases here.
125 I've deleted FlexCompleter and put all completion clases here.
120
126
121 * IPython/iplib.py (raw_input): improve indentation management.
127 * IPython/iplib.py (raw_input): improve indentation management.
122 It is now possible to paste indented code with autoindent on, and
128 It is now possible to paste indented code with autoindent on, and
123 the code is interpreted correctly (though it still looks bad on
129 the code is interpreted correctly (though it still looks bad on
124 screen, due to the line-oriented nature of ipython).
130 screen, due to the line-oriented nature of ipython).
125 (MagicCompleter.complete): change behavior so that a TAB key on an
131 (MagicCompleter.complete): change behavior so that a TAB key on an
126 otherwise empty line actually inserts a tab, instead of completing
132 otherwise empty line actually inserts a tab, instead of completing
127 on the entire global namespace. This makes it easier to use the
133 on the entire global namespace. This makes it easier to use the
128 TAB key for indentation. After a request by Hans Meine
134 TAB key for indentation. After a request by Hans Meine
129 <hans_meine-AT-gmx.net>
135 <hans_meine-AT-gmx.net>
130 (_prefilter): add support so that typing plain 'exit' or 'quit'
136 (_prefilter): add support so that typing plain 'exit' or 'quit'
131 does a sensible thing. Originally I tried to deviate as little as
137 does a sensible thing. Originally I tried to deviate as little as
132 possible from the default python behavior, but even that one may
138 possible from the default python behavior, but even that one may
133 change in this direction (thread on python-dev to that effect).
139 change in this direction (thread on python-dev to that effect).
134 Regardless, ipython should do the right thing even if CPython's
140 Regardless, ipython should do the right thing even if CPython's
135 '>>>' prompt doesn't.
141 '>>>' prompt doesn't.
136 (InteractiveShell): removed subclassing code.InteractiveConsole
142 (InteractiveShell): removed subclassing code.InteractiveConsole
137 class. By now we'd overridden just about all of its methods: I've
143 class. By now we'd overridden just about all of its methods: I've
138 copied the remaining two over, and now ipython is a standalone
144 copied the remaining two over, and now ipython is a standalone
139 class. This will provide a clearer picture for the chainsaw
145 class. This will provide a clearer picture for the chainsaw
140 branch refactoring.
146 branch refactoring.
141
147
142 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
148 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
143
149
144 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
150 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
145 failures for objects which break when dir() is called on them.
151 failures for objects which break when dir() is called on them.
146
152
147 * IPython/FlexCompleter.py (Completer.__init__): Added support for
153 * IPython/FlexCompleter.py (Completer.__init__): Added support for
148 distinct local and global namespaces in the completer API. This
154 distinct local and global namespaces in the completer API. This
149 change allows us top properly handle completion with distinct
155 change allows us top properly handle completion with distinct
150 scopes, including in embedded instances (this had never really
156 scopes, including in embedded instances (this had never really
151 worked correctly).
157 worked correctly).
152
158
153 Note: this introduces a change in the constructor for
159 Note: this introduces a change in the constructor for
154 MagicCompleter, as a new global_namespace parameter is now the
160 MagicCompleter, as a new global_namespace parameter is now the
155 second argument (the others were bumped one position).
161 second argument (the others were bumped one position).
156
162
157 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
163 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
158
164
159 * IPython/iplib.py (embed_mainloop): fix tab-completion in
165 * IPython/iplib.py (embed_mainloop): fix tab-completion in
160 embedded instances (which can be done now thanks to Vivian's
166 embedded instances (which can be done now thanks to Vivian's
161 frame-handling fixes for pdb).
167 frame-handling fixes for pdb).
162 (InteractiveShell.__init__): Fix namespace handling problem in
168 (InteractiveShell.__init__): Fix namespace handling problem in
163 embedded instances. We were overwriting __main__ unconditionally,
169 embedded instances. We were overwriting __main__ unconditionally,
164 and this should only be done for 'full' (non-embedded) IPython;
170 and this should only be done for 'full' (non-embedded) IPython;
165 embedded instances must respect the caller's __main__. Thanks to
171 embedded instances must respect the caller's __main__. Thanks to
166 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
172 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
167
173
168 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
174 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
169
175
170 * setup.py: added download_url to setup(). This registers the
176 * setup.py: added download_url to setup(). This registers the
171 download address at PyPI, which is not only useful to humans
177 download address at PyPI, which is not only useful to humans
172 browsing the site, but is also picked up by setuptools (the Eggs
178 browsing the site, but is also picked up by setuptools (the Eggs
173 machinery). Thanks to Ville and R. Kern for the info/discussion
179 machinery). Thanks to Ville and R. Kern for the info/discussion
174 on this.
180 on this.
175
181
176 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
182 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
177
183
178 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
184 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
179 This brings a lot of nice functionality to the pdb mode, which now
185 This brings a lot of nice functionality to the pdb mode, which now
180 has tab-completion, syntax highlighting, and better stack handling
186 has tab-completion, syntax highlighting, and better stack handling
181 than before. Many thanks to Vivian De Smedt
187 than before. Many thanks to Vivian De Smedt
182 <vivian-AT-vdesmedt.com> for the original patches.
188 <vivian-AT-vdesmedt.com> for the original patches.
183
189
184 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
190 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
185
191
186 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
192 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
187 sequence to consistently accept the banner argument. The
193 sequence to consistently accept the banner argument. The
188 inconsistency was tripping SAGE, thanks to Gary Zablackis
194 inconsistency was tripping SAGE, thanks to Gary Zablackis
189 <gzabl-AT-yahoo.com> for the report.
195 <gzabl-AT-yahoo.com> for the report.
190
196
191 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
197 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
192
198
193 * IPython/iplib.py (InteractiveShell.post_config_initialization):
199 * IPython/iplib.py (InteractiveShell.post_config_initialization):
194 Fix bug where a naked 'alias' call in the ipythonrc file would
200 Fix bug where a naked 'alias' call in the ipythonrc file would
195 cause a crash. Bug reported by Jorgen Stenarson.
201 cause a crash. Bug reported by Jorgen Stenarson.
196
202
197 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
203 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
198
204
199 * IPython/ipmaker.py (make_IPython): cleanups which should improve
205 * IPython/ipmaker.py (make_IPython): cleanups which should improve
200 startup time.
206 startup time.
201
207
202 * IPython/iplib.py (runcode): my globals 'fix' for embedded
208 * IPython/iplib.py (runcode): my globals 'fix' for embedded
203 instances had introduced a bug with globals in normal code. Now
209 instances had introduced a bug with globals in normal code. Now
204 it's working in all cases.
210 it's working in all cases.
205
211
206 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
212 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
207 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
213 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
208 has been introduced to set the default case sensitivity of the
214 has been introduced to set the default case sensitivity of the
209 searches. Users can still select either mode at runtime on a
215 searches. Users can still select either mode at runtime on a
210 per-search basis.
216 per-search basis.
211
217
212 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
218 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
213
219
214 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
220 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
215 attributes in wildcard searches for subclasses. Modified version
221 attributes in wildcard searches for subclasses. Modified version
216 of a patch by Jorgen.
222 of a patch by Jorgen.
217
223
218 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
224 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
219
225
220 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
226 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
221 embedded instances. I added a user_global_ns attribute to the
227 embedded instances. I added a user_global_ns attribute to the
222 InteractiveShell class to handle this.
228 InteractiveShell class to handle this.
223
229
224 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
230 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
225
231
226 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
232 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
227 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
233 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
228 (reported under win32, but may happen also in other platforms).
234 (reported under win32, but may happen also in other platforms).
229 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
235 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
230
236
231 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
237 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
232
238
233 * IPython/Magic.py (magic_psearch): new support for wildcard
239 * IPython/Magic.py (magic_psearch): new support for wildcard
234 patterns. Now, typing ?a*b will list all names which begin with a
240 patterns. Now, typing ?a*b will list all names which begin with a
235 and end in b, for example. The %psearch magic has full
241 and end in b, for example. The %psearch magic has full
236 docstrings. Many thanks to JΓΆrgen Stenarson
242 docstrings. Many thanks to JΓΆrgen Stenarson
237 <jorgen.stenarson-AT-bostream.nu>, author of the patches
243 <jorgen.stenarson-AT-bostream.nu>, author of the patches
238 implementing this functionality.
244 implementing this functionality.
239
245
240 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
246 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
241
247
242 * Manual: fixed long-standing annoyance of double-dashes (as in
248 * Manual: fixed long-standing annoyance of double-dashes (as in
243 --prefix=~, for example) being stripped in the HTML version. This
249 --prefix=~, for example) being stripped in the HTML version. This
244 is a latex2html bug, but a workaround was provided. Many thanks
250 is a latex2html bug, but a workaround was provided. Many thanks
245 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
251 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
246 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
252 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
247 rolling. This seemingly small issue had tripped a number of users
253 rolling. This seemingly small issue had tripped a number of users
248 when first installing, so I'm glad to see it gone.
254 when first installing, so I'm glad to see it gone.
249
255
250 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
256 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
251
257
252 * IPython/Extensions/numeric_formats.py: fix missing import,
258 * IPython/Extensions/numeric_formats.py: fix missing import,
253 reported by Stephen Walton.
259 reported by Stephen Walton.
254
260
255 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
261 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
256
262
257 * IPython/demo.py: finish demo module, fully documented now.
263 * IPython/demo.py: finish demo module, fully documented now.
258
264
259 * IPython/genutils.py (file_read): simple little utility to read a
265 * IPython/genutils.py (file_read): simple little utility to read a
260 file and ensure it's closed afterwards.
266 file and ensure it's closed afterwards.
261
267
262 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
268 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
263
269
264 * IPython/demo.py (Demo.__init__): added support for individually
270 * IPython/demo.py (Demo.__init__): added support for individually
265 tagging blocks for automatic execution.
271 tagging blocks for automatic execution.
266
272
267 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
273 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
268 syntax-highlighted python sources, requested by John.
274 syntax-highlighted python sources, requested by John.
269
275
270 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
276 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
271
277
272 * IPython/demo.py (Demo.again): fix bug where again() blocks after
278 * IPython/demo.py (Demo.again): fix bug where again() blocks after
273 finishing.
279 finishing.
274
280
275 * IPython/genutils.py (shlex_split): moved from Magic to here,
281 * IPython/genutils.py (shlex_split): moved from Magic to here,
276 where all 2.2 compatibility stuff lives. I needed it for demo.py.
282 where all 2.2 compatibility stuff lives. I needed it for demo.py.
277
283
278 * IPython/demo.py (Demo.__init__): added support for silent
284 * IPython/demo.py (Demo.__init__): added support for silent
279 blocks, improved marks as regexps, docstrings written.
285 blocks, improved marks as regexps, docstrings written.
280 (Demo.__init__): better docstring, added support for sys.argv.
286 (Demo.__init__): better docstring, added support for sys.argv.
281
287
282 * IPython/genutils.py (marquee): little utility used by the demo
288 * IPython/genutils.py (marquee): little utility used by the demo
283 code, handy in general.
289 code, handy in general.
284
290
285 * IPython/demo.py (Demo.__init__): new class for interactive
291 * IPython/demo.py (Demo.__init__): new class for interactive
286 demos. Not documented yet, I just wrote it in a hurry for
292 demos. Not documented yet, I just wrote it in a hurry for
287 scipy'05. Will docstring later.
293 scipy'05. Will docstring later.
288
294
289 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
295 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
290
296
291 * IPython/Shell.py (sigint_handler): Drastic simplification which
297 * IPython/Shell.py (sigint_handler): Drastic simplification which
292 also seems to make Ctrl-C work correctly across threads! This is
298 also seems to make Ctrl-C work correctly across threads! This is
293 so simple, that I can't beleive I'd missed it before. Needs more
299 so simple, that I can't beleive I'd missed it before. Needs more
294 testing, though.
300 testing, though.
295 (KBINT): Never mind, revert changes. I'm sure I'd tried something
301 (KBINT): Never mind, revert changes. I'm sure I'd tried something
296 like this before...
302 like this before...
297
303
298 * IPython/genutils.py (get_home_dir): add protection against
304 * IPython/genutils.py (get_home_dir): add protection against
299 non-dirs in win32 registry.
305 non-dirs in win32 registry.
300
306
301 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
307 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
302 bug where dict was mutated while iterating (pysh crash).
308 bug where dict was mutated while iterating (pysh crash).
303
309
304 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
310 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
305
311
306 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
312 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
307 spurious newlines added by this routine. After a report by
313 spurious newlines added by this routine. After a report by
308 F. Mantegazza.
314 F. Mantegazza.
309
315
310 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
316 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
311
317
312 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
318 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
313 calls. These were a leftover from the GTK 1.x days, and can cause
319 calls. These were a leftover from the GTK 1.x days, and can cause
314 problems in certain cases (after a report by John Hunter).
320 problems in certain cases (after a report by John Hunter).
315
321
316 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
322 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
317 os.getcwd() fails at init time. Thanks to patch from David Remahl
323 os.getcwd() fails at init time. Thanks to patch from David Remahl
318 <chmod007-AT-mac.com>.
324 <chmod007-AT-mac.com>.
319 (InteractiveShell.__init__): prevent certain special magics from
325 (InteractiveShell.__init__): prevent certain special magics from
320 being shadowed by aliases. Closes
326 being shadowed by aliases. Closes
321 http://www.scipy.net/roundup/ipython/issue41.
327 http://www.scipy.net/roundup/ipython/issue41.
322
328
323 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
329 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
324
330
325 * IPython/iplib.py (InteractiveShell.complete): Added new
331 * IPython/iplib.py (InteractiveShell.complete): Added new
326 top-level completion method to expose the completion mechanism
332 top-level completion method to expose the completion mechanism
327 beyond readline-based environments.
333 beyond readline-based environments.
328
334
329 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
335 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
330
336
331 * tools/ipsvnc (svnversion): fix svnversion capture.
337 * tools/ipsvnc (svnversion): fix svnversion capture.
332
338
333 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
339 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
334 attribute to self, which was missing. Before, it was set by a
340 attribute to self, which was missing. Before, it was set by a
335 routine which in certain cases wasn't being called, so the
341 routine which in certain cases wasn't being called, so the
336 instance could end up missing the attribute. This caused a crash.
342 instance could end up missing the attribute. This caused a crash.
337 Closes http://www.scipy.net/roundup/ipython/issue40.
343 Closes http://www.scipy.net/roundup/ipython/issue40.
338
344
339 2005-08-16 Fernando Perez <fperez@colorado.edu>
345 2005-08-16 Fernando Perez <fperez@colorado.edu>
340
346
341 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
347 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
342 contains non-string attribute. Closes
348 contains non-string attribute. Closes
343 http://www.scipy.net/roundup/ipython/issue38.
349 http://www.scipy.net/roundup/ipython/issue38.
344
350
345 2005-08-14 Fernando Perez <fperez@colorado.edu>
351 2005-08-14 Fernando Perez <fperez@colorado.edu>
346
352
347 * tools/ipsvnc: Minor improvements, to add changeset info.
353 * tools/ipsvnc: Minor improvements, to add changeset info.
348
354
349 2005-08-12 Fernando Perez <fperez@colorado.edu>
355 2005-08-12 Fernando Perez <fperez@colorado.edu>
350
356
351 * IPython/iplib.py (runsource): remove self.code_to_run_src
357 * IPython/iplib.py (runsource): remove self.code_to_run_src
352 attribute. I realized this is nothing more than
358 attribute. I realized this is nothing more than
353 '\n'.join(self.buffer), and having the same data in two different
359 '\n'.join(self.buffer), and having the same data in two different
354 places is just asking for synchronization bugs. This may impact
360 places is just asking for synchronization bugs. This may impact
355 people who have custom exception handlers, so I need to warn
361 people who have custom exception handlers, so I need to warn
356 ipython-dev about it (F. Mantegazza may use them).
362 ipython-dev about it (F. Mantegazza may use them).
357
363
358 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
364 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
359
365
360 * IPython/genutils.py: fix 2.2 compatibility (generators)
366 * IPython/genutils.py: fix 2.2 compatibility (generators)
361
367
362 2005-07-18 Fernando Perez <fperez@colorado.edu>
368 2005-07-18 Fernando Perez <fperez@colorado.edu>
363
369
364 * IPython/genutils.py (get_home_dir): fix to help users with
370 * IPython/genutils.py (get_home_dir): fix to help users with
365 invalid $HOME under win32.
371 invalid $HOME under win32.
366
372
367 2005-07-17 Fernando Perez <fperez@colorado.edu>
373 2005-07-17 Fernando Perez <fperez@colorado.edu>
368
374
369 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
375 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
370 some old hacks and clean up a bit other routines; code should be
376 some old hacks and clean up a bit other routines; code should be
371 simpler and a bit faster.
377 simpler and a bit faster.
372
378
373 * IPython/iplib.py (interact): removed some last-resort attempts
379 * IPython/iplib.py (interact): removed some last-resort attempts
374 to survive broken stdout/stderr. That code was only making it
380 to survive broken stdout/stderr. That code was only making it
375 harder to abstract out the i/o (necessary for gui integration),
381 harder to abstract out the i/o (necessary for gui integration),
376 and the crashes it could prevent were extremely rare in practice
382 and the crashes it could prevent were extremely rare in practice
377 (besides being fully user-induced in a pretty violent manner).
383 (besides being fully user-induced in a pretty violent manner).
378
384
379 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
385 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
380 Nothing major yet, but the code is simpler to read; this should
386 Nothing major yet, but the code is simpler to read; this should
381 make it easier to do more serious modifications in the future.
387 make it easier to do more serious modifications in the future.
382
388
383 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
389 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
384 which broke in .15 (thanks to a report by Ville).
390 which broke in .15 (thanks to a report by Ville).
385
391
386 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
392 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
387 be quite correct, I know next to nothing about unicode). This
393 be quite correct, I know next to nothing about unicode). This
388 will allow unicode strings to be used in prompts, amongst other
394 will allow unicode strings to be used in prompts, amongst other
389 cases. It also will prevent ipython from crashing when unicode
395 cases. It also will prevent ipython from crashing when unicode
390 shows up unexpectedly in many places. If ascii encoding fails, we
396 shows up unexpectedly in many places. If ascii encoding fails, we
391 assume utf_8. Currently the encoding is not a user-visible
397 assume utf_8. Currently the encoding is not a user-visible
392 setting, though it could be made so if there is demand for it.
398 setting, though it could be made so if there is demand for it.
393
399
394 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
400 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
395
401
396 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
402 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
397
403
398 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
404 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
399
405
400 * IPython/genutils.py: Add 2.2 compatibility here, so all other
406 * IPython/genutils.py: Add 2.2 compatibility here, so all other
401 code can work transparently for 2.2/2.3.
407 code can work transparently for 2.2/2.3.
402
408
403 2005-07-16 Fernando Perez <fperez@colorado.edu>
409 2005-07-16 Fernando Perez <fperez@colorado.edu>
404
410
405 * IPython/ultraTB.py (ExceptionColors): Make a global variable
411 * IPython/ultraTB.py (ExceptionColors): Make a global variable
406 out of the color scheme table used for coloring exception
412 out of the color scheme table used for coloring exception
407 tracebacks. This allows user code to add new schemes at runtime.
413 tracebacks. This allows user code to add new schemes at runtime.
408 This is a minimally modified version of the patch at
414 This is a minimally modified version of the patch at
409 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
415 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
410 for the contribution.
416 for the contribution.
411
417
412 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
418 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
413 slightly modified version of the patch in
419 slightly modified version of the patch in
414 http://www.scipy.net/roundup/ipython/issue34, which also allows me
420 http://www.scipy.net/roundup/ipython/issue34, which also allows me
415 to remove the previous try/except solution (which was costlier).
421 to remove the previous try/except solution (which was costlier).
416 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
422 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
417
423
418 2005-06-08 Fernando Perez <fperez@colorado.edu>
424 2005-06-08 Fernando Perez <fperez@colorado.edu>
419
425
420 * IPython/iplib.py (write/write_err): Add methods to abstract all
426 * IPython/iplib.py (write/write_err): Add methods to abstract all
421 I/O a bit more.
427 I/O a bit more.
422
428
423 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
429 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
424 warning, reported by Aric Hagberg, fix by JD Hunter.
430 warning, reported by Aric Hagberg, fix by JD Hunter.
425
431
426 2005-06-02 *** Released version 0.6.15
432 2005-06-02 *** Released version 0.6.15
427
433
428 2005-06-01 Fernando Perez <fperez@colorado.edu>
434 2005-06-01 Fernando Perez <fperez@colorado.edu>
429
435
430 * IPython/iplib.py (MagicCompleter.file_matches): Fix
436 * IPython/iplib.py (MagicCompleter.file_matches): Fix
431 tab-completion of filenames within open-quoted strings. Note that
437 tab-completion of filenames within open-quoted strings. Note that
432 this requires that in ~/.ipython/ipythonrc, users change the
438 this requires that in ~/.ipython/ipythonrc, users change the
433 readline delimiters configuration to read:
439 readline delimiters configuration to read:
434
440
435 readline_remove_delims -/~
441 readline_remove_delims -/~
436
442
437
443
438 2005-05-31 *** Released version 0.6.14
444 2005-05-31 *** Released version 0.6.14
439
445
440 2005-05-29 Fernando Perez <fperez@colorado.edu>
446 2005-05-29 Fernando Perez <fperez@colorado.edu>
441
447
442 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
448 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
443 with files not on the filesystem. Reported by Eliyahu Sandler
449 with files not on the filesystem. Reported by Eliyahu Sandler
444 <eli@gondolin.net>
450 <eli@gondolin.net>
445
451
446 2005-05-22 Fernando Perez <fperez@colorado.edu>
452 2005-05-22 Fernando Perez <fperez@colorado.edu>
447
453
448 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
454 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
449 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
455 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
450
456
451 2005-05-19 Fernando Perez <fperez@colorado.edu>
457 2005-05-19 Fernando Perez <fperez@colorado.edu>
452
458
453 * IPython/iplib.py (safe_execfile): close a file which could be
459 * IPython/iplib.py (safe_execfile): close a file which could be
454 left open (causing problems in win32, which locks open files).
460 left open (causing problems in win32, which locks open files).
455 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
461 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
456
462
457 2005-05-18 Fernando Perez <fperez@colorado.edu>
463 2005-05-18 Fernando Perez <fperez@colorado.edu>
458
464
459 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
465 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
460 keyword arguments correctly to safe_execfile().
466 keyword arguments correctly to safe_execfile().
461
467
462 2005-05-13 Fernando Perez <fperez@colorado.edu>
468 2005-05-13 Fernando Perez <fperez@colorado.edu>
463
469
464 * ipython.1: Added info about Qt to manpage, and threads warning
470 * ipython.1: Added info about Qt to manpage, and threads warning
465 to usage page (invoked with --help).
471 to usage page (invoked with --help).
466
472
467 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
473 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
468 new matcher (it goes at the end of the priority list) to do
474 new matcher (it goes at the end of the priority list) to do
469 tab-completion on named function arguments. Submitted by George
475 tab-completion on named function arguments. Submitted by George
470 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
476 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
471 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
477 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
472 for more details.
478 for more details.
473
479
474 * IPython/Magic.py (magic_run): Added new -e flag to ignore
480 * IPython/Magic.py (magic_run): Added new -e flag to ignore
475 SystemExit exceptions in the script being run. Thanks to a report
481 SystemExit exceptions in the script being run. Thanks to a report
476 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
482 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
477 producing very annoying behavior when running unit tests.
483 producing very annoying behavior when running unit tests.
478
484
479 2005-05-12 Fernando Perez <fperez@colorado.edu>
485 2005-05-12 Fernando Perez <fperez@colorado.edu>
480
486
481 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
487 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
482 which I'd broken (again) due to a changed regexp. In the process,
488 which I'd broken (again) due to a changed regexp. In the process,
483 added ';' as an escape to auto-quote the whole line without
489 added ';' as an escape to auto-quote the whole line without
484 splitting its arguments. Thanks to a report by Jerry McRae
490 splitting its arguments. Thanks to a report by Jerry McRae
485 <qrs0xyc02-AT-sneakemail.com>.
491 <qrs0xyc02-AT-sneakemail.com>.
486
492
487 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
493 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
488 possible crashes caused by a TokenError. Reported by Ed Schofield
494 possible crashes caused by a TokenError. Reported by Ed Schofield
489 <schofield-AT-ftw.at>.
495 <schofield-AT-ftw.at>.
490
496
491 2005-05-06 Fernando Perez <fperez@colorado.edu>
497 2005-05-06 Fernando Perez <fperez@colorado.edu>
492
498
493 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
499 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
494
500
495 2005-04-29 Fernando Perez <fperez@colorado.edu>
501 2005-04-29 Fernando Perez <fperez@colorado.edu>
496
502
497 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
503 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
498 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
504 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
499 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
505 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
500 which provides support for Qt interactive usage (similar to the
506 which provides support for Qt interactive usage (similar to the
501 existing one for WX and GTK). This had been often requested.
507 existing one for WX and GTK). This had been often requested.
502
508
503 2005-04-14 *** Released version 0.6.13
509 2005-04-14 *** Released version 0.6.13
504
510
505 2005-04-08 Fernando Perez <fperez@colorado.edu>
511 2005-04-08 Fernando Perez <fperez@colorado.edu>
506
512
507 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
513 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
508 from _ofind, which gets called on almost every input line. Now,
514 from _ofind, which gets called on almost every input line. Now,
509 we only try to get docstrings if they are actually going to be
515 we only try to get docstrings if they are actually going to be
510 used (the overhead of fetching unnecessary docstrings can be
516 used (the overhead of fetching unnecessary docstrings can be
511 noticeable for certain objects, such as Pyro proxies).
517 noticeable for certain objects, such as Pyro proxies).
512
518
513 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
519 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
514 for completers. For some reason I had been passing them the state
520 for completers. For some reason I had been passing them the state
515 variable, which completers never actually need, and was in
521 variable, which completers never actually need, and was in
516 conflict with the rlcompleter API. Custom completers ONLY need to
522 conflict with the rlcompleter API. Custom completers ONLY need to
517 take the text parameter.
523 take the text parameter.
518
524
519 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
525 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
520 work correctly in pysh. I've also moved all the logic which used
526 work correctly in pysh. I've also moved all the logic which used
521 to be in pysh.py here, which will prevent problems with future
527 to be in pysh.py here, which will prevent problems with future
522 upgrades. However, this time I must warn users to update their
528 upgrades. However, this time I must warn users to update their
523 pysh profile to include the line
529 pysh profile to include the line
524
530
525 import_all IPython.Extensions.InterpreterExec
531 import_all IPython.Extensions.InterpreterExec
526
532
527 because otherwise things won't work for them. They MUST also
533 because otherwise things won't work for them. They MUST also
528 delete pysh.py and the line
534 delete pysh.py and the line
529
535
530 execfile pysh.py
536 execfile pysh.py
531
537
532 from their ipythonrc-pysh.
538 from their ipythonrc-pysh.
533
539
534 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
540 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
535 robust in the face of objects whose dir() returns non-strings
541 robust in the face of objects whose dir() returns non-strings
536 (which it shouldn't, but some broken libs like ITK do). Thanks to
542 (which it shouldn't, but some broken libs like ITK do). Thanks to
537 a patch by John Hunter (implemented differently, though). Also
543 a patch by John Hunter (implemented differently, though). Also
538 minor improvements by using .extend instead of + on lists.
544 minor improvements by using .extend instead of + on lists.
539
545
540 * pysh.py:
546 * pysh.py:
541
547
542 2005-04-06 Fernando Perez <fperez@colorado.edu>
548 2005-04-06 Fernando Perez <fperez@colorado.edu>
543
549
544 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
550 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
545 by default, so that all users benefit from it. Those who don't
551 by default, so that all users benefit from it. Those who don't
546 want it can still turn it off.
552 want it can still turn it off.
547
553
548 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
554 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
549 config file, I'd forgotten about this, so users were getting it
555 config file, I'd forgotten about this, so users were getting it
550 off by default.
556 off by default.
551
557
552 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
558 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
553 consistency. Now magics can be called in multiline statements,
559 consistency. Now magics can be called in multiline statements,
554 and python variables can be expanded in magic calls via $var.
560 and python variables can be expanded in magic calls via $var.
555 This makes the magic system behave just like aliases or !system
561 This makes the magic system behave just like aliases or !system
556 calls.
562 calls.
557
563
558 2005-03-28 Fernando Perez <fperez@colorado.edu>
564 2005-03-28 Fernando Perez <fperez@colorado.edu>
559
565
560 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
566 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
561 expensive string additions for building command. Add support for
567 expensive string additions for building command. Add support for
562 trailing ';' when autocall is used.
568 trailing ';' when autocall is used.
563
569
564 2005-03-26 Fernando Perez <fperez@colorado.edu>
570 2005-03-26 Fernando Perez <fperez@colorado.edu>
565
571
566 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
572 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
567 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
573 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
568 ipython.el robust against prompts with any number of spaces
574 ipython.el robust against prompts with any number of spaces
569 (including 0) after the ':' character.
575 (including 0) after the ':' character.
570
576
571 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
577 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
572 continuation prompt, which misled users to think the line was
578 continuation prompt, which misled users to think the line was
573 already indented. Closes debian Bug#300847, reported to me by
579 already indented. Closes debian Bug#300847, reported to me by
574 Norbert Tretkowski <tretkowski-AT-inittab.de>.
580 Norbert Tretkowski <tretkowski-AT-inittab.de>.
575
581
576 2005-03-23 Fernando Perez <fperez@colorado.edu>
582 2005-03-23 Fernando Perez <fperez@colorado.edu>
577
583
578 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
584 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
579 properly aligned if they have embedded newlines.
585 properly aligned if they have embedded newlines.
580
586
581 * IPython/iplib.py (runlines): Add a public method to expose
587 * IPython/iplib.py (runlines): Add a public method to expose
582 IPython's code execution machinery, so that users can run strings
588 IPython's code execution machinery, so that users can run strings
583 as if they had been typed at the prompt interactively.
589 as if they had been typed at the prompt interactively.
584 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
590 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
585 methods which can call the system shell, but with python variable
591 methods which can call the system shell, but with python variable
586 expansion. The three such methods are: __IPYTHON__.system,
592 expansion. The three such methods are: __IPYTHON__.system,
587 .getoutput and .getoutputerror. These need to be documented in a
593 .getoutput and .getoutputerror. These need to be documented in a
588 'public API' section (to be written) of the manual.
594 'public API' section (to be written) of the manual.
589
595
590 2005-03-20 Fernando Perez <fperez@colorado.edu>
596 2005-03-20 Fernando Perez <fperez@colorado.edu>
591
597
592 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
598 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
593 for custom exception handling. This is quite powerful, and it
599 for custom exception handling. This is quite powerful, and it
594 allows for user-installable exception handlers which can trap
600 allows for user-installable exception handlers which can trap
595 custom exceptions at runtime and treat them separately from
601 custom exceptions at runtime and treat them separately from
596 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
602 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
597 Mantegazza <mantegazza-AT-ill.fr>.
603 Mantegazza <mantegazza-AT-ill.fr>.
598 (InteractiveShell.set_custom_completer): public API function to
604 (InteractiveShell.set_custom_completer): public API function to
599 add new completers at runtime.
605 add new completers at runtime.
600
606
601 2005-03-19 Fernando Perez <fperez@colorado.edu>
607 2005-03-19 Fernando Perez <fperez@colorado.edu>
602
608
603 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
609 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
604 allow objects which provide their docstrings via non-standard
610 allow objects which provide their docstrings via non-standard
605 mechanisms (like Pyro proxies) to still be inspected by ipython's
611 mechanisms (like Pyro proxies) to still be inspected by ipython's
606 ? system.
612 ? system.
607
613
608 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
614 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
609 automatic capture system. I tried quite hard to make it work
615 automatic capture system. I tried quite hard to make it work
610 reliably, and simply failed. I tried many combinations with the
616 reliably, and simply failed. I tried many combinations with the
611 subprocess module, but eventually nothing worked in all needed
617 subprocess module, but eventually nothing worked in all needed
612 cases (not blocking stdin for the child, duplicating stdout
618 cases (not blocking stdin for the child, duplicating stdout
613 without blocking, etc). The new %sc/%sx still do capture to these
619 without blocking, etc). The new %sc/%sx still do capture to these
614 magical list/string objects which make shell use much more
620 magical list/string objects which make shell use much more
615 conveninent, so not all is lost.
621 conveninent, so not all is lost.
616
622
617 XXX - FIX MANUAL for the change above!
623 XXX - FIX MANUAL for the change above!
618
624
619 (runsource): I copied code.py's runsource() into ipython to modify
625 (runsource): I copied code.py's runsource() into ipython to modify
620 it a bit. Now the code object and source to be executed are
626 it a bit. Now the code object and source to be executed are
621 stored in ipython. This makes this info accessible to third-party
627 stored in ipython. This makes this info accessible to third-party
622 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
628 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
623 Mantegazza <mantegazza-AT-ill.fr>.
629 Mantegazza <mantegazza-AT-ill.fr>.
624
630
625 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
631 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
626 history-search via readline (like C-p/C-n). I'd wanted this for a
632 history-search via readline (like C-p/C-n). I'd wanted this for a
627 long time, but only recently found out how to do it. For users
633 long time, but only recently found out how to do it. For users
628 who already have their ipythonrc files made and want this, just
634 who already have their ipythonrc files made and want this, just
629 add:
635 add:
630
636
631 readline_parse_and_bind "\e[A": history-search-backward
637 readline_parse_and_bind "\e[A": history-search-backward
632 readline_parse_and_bind "\e[B": history-search-forward
638 readline_parse_and_bind "\e[B": history-search-forward
633
639
634 2005-03-18 Fernando Perez <fperez@colorado.edu>
640 2005-03-18 Fernando Perez <fperez@colorado.edu>
635
641
636 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
642 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
637 LSString and SList classes which allow transparent conversions
643 LSString and SList classes which allow transparent conversions
638 between list mode and whitespace-separated string.
644 between list mode and whitespace-separated string.
639 (magic_r): Fix recursion problem in %r.
645 (magic_r): Fix recursion problem in %r.
640
646
641 * IPython/genutils.py (LSString): New class to be used for
647 * IPython/genutils.py (LSString): New class to be used for
642 automatic storage of the results of all alias/system calls in _o
648 automatic storage of the results of all alias/system calls in _o
643 and _e (stdout/err). These provide a .l/.list attribute which
649 and _e (stdout/err). These provide a .l/.list attribute which
644 does automatic splitting on newlines. This means that for most
650 does automatic splitting on newlines. This means that for most
645 uses, you'll never need to do capturing of output with %sc/%sx
651 uses, you'll never need to do capturing of output with %sc/%sx
646 anymore, since ipython keeps this always done for you. Note that
652 anymore, since ipython keeps this always done for you. Note that
647 only the LAST results are stored, the _o/e variables are
653 only the LAST results are stored, the _o/e variables are
648 overwritten on each call. If you need to save their contents
654 overwritten on each call. If you need to save their contents
649 further, simply bind them to any other name.
655 further, simply bind them to any other name.
650
656
651 2005-03-17 Fernando Perez <fperez@colorado.edu>
657 2005-03-17 Fernando Perez <fperez@colorado.edu>
652
658
653 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
659 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
654 prompt namespace handling.
660 prompt namespace handling.
655
661
656 2005-03-16 Fernando Perez <fperez@colorado.edu>
662 2005-03-16 Fernando Perez <fperez@colorado.edu>
657
663
658 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
664 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
659 classic prompts to be '>>> ' (final space was missing, and it
665 classic prompts to be '>>> ' (final space was missing, and it
660 trips the emacs python mode).
666 trips the emacs python mode).
661 (BasePrompt.__str__): Added safe support for dynamic prompt
667 (BasePrompt.__str__): Added safe support for dynamic prompt
662 strings. Now you can set your prompt string to be '$x', and the
668 strings. Now you can set your prompt string to be '$x', and the
663 value of x will be printed from your interactive namespace. The
669 value of x will be printed from your interactive namespace. The
664 interpolation syntax includes the full Itpl support, so
670 interpolation syntax includes the full Itpl support, so
665 ${foo()+x+bar()} is a valid prompt string now, and the function
671 ${foo()+x+bar()} is a valid prompt string now, and the function
666 calls will be made at runtime.
672 calls will be made at runtime.
667
673
668 2005-03-15 Fernando Perez <fperez@colorado.edu>
674 2005-03-15 Fernando Perez <fperez@colorado.edu>
669
675
670 * IPython/Magic.py (magic_history): renamed %hist to %history, to
676 * IPython/Magic.py (magic_history): renamed %hist to %history, to
671 avoid name clashes in pylab. %hist still works, it just forwards
677 avoid name clashes in pylab. %hist still works, it just forwards
672 the call to %history.
678 the call to %history.
673
679
674 2005-03-02 *** Released version 0.6.12
680 2005-03-02 *** Released version 0.6.12
675
681
676 2005-03-02 Fernando Perez <fperez@colorado.edu>
682 2005-03-02 Fernando Perez <fperez@colorado.edu>
677
683
678 * IPython/iplib.py (handle_magic): log magic calls properly as
684 * IPython/iplib.py (handle_magic): log magic calls properly as
679 ipmagic() function calls.
685 ipmagic() function calls.
680
686
681 * IPython/Magic.py (magic_time): Improved %time to support
687 * IPython/Magic.py (magic_time): Improved %time to support
682 statements and provide wall-clock as well as CPU time.
688 statements and provide wall-clock as well as CPU time.
683
689
684 2005-02-27 Fernando Perez <fperez@colorado.edu>
690 2005-02-27 Fernando Perez <fperez@colorado.edu>
685
691
686 * IPython/hooks.py: New hooks module, to expose user-modifiable
692 * IPython/hooks.py: New hooks module, to expose user-modifiable
687 IPython functionality in a clean manner. For now only the editor
693 IPython functionality in a clean manner. For now only the editor
688 hook is actually written, and other thigns which I intend to turn
694 hook is actually written, and other thigns which I intend to turn
689 into proper hooks aren't yet there. The display and prefilter
695 into proper hooks aren't yet there. The display and prefilter
690 stuff, for example, should be hooks. But at least now the
696 stuff, for example, should be hooks. But at least now the
691 framework is in place, and the rest can be moved here with more
697 framework is in place, and the rest can be moved here with more
692 time later. IPython had had a .hooks variable for a long time for
698 time later. IPython had had a .hooks variable for a long time for
693 this purpose, but I'd never actually used it for anything.
699 this purpose, but I'd never actually used it for anything.
694
700
695 2005-02-26 Fernando Perez <fperez@colorado.edu>
701 2005-02-26 Fernando Perez <fperez@colorado.edu>
696
702
697 * IPython/ipmaker.py (make_IPython): make the default ipython
703 * IPython/ipmaker.py (make_IPython): make the default ipython
698 directory be called _ipython under win32, to follow more the
704 directory be called _ipython under win32, to follow more the
699 naming peculiarities of that platform (where buggy software like
705 naming peculiarities of that platform (where buggy software like
700 Visual Sourcesafe breaks with .named directories). Reported by
706 Visual Sourcesafe breaks with .named directories). Reported by
701 Ville Vainio.
707 Ville Vainio.
702
708
703 2005-02-23 Fernando Perez <fperez@colorado.edu>
709 2005-02-23 Fernando Perez <fperez@colorado.edu>
704
710
705 * IPython/iplib.py (InteractiveShell.__init__): removed a few
711 * IPython/iplib.py (InteractiveShell.__init__): removed a few
706 auto_aliases for win32 which were causing problems. Users can
712 auto_aliases for win32 which were causing problems. Users can
707 define the ones they personally like.
713 define the ones they personally like.
708
714
709 2005-02-21 Fernando Perez <fperez@colorado.edu>
715 2005-02-21 Fernando Perez <fperez@colorado.edu>
710
716
711 * IPython/Magic.py (magic_time): new magic to time execution of
717 * IPython/Magic.py (magic_time): new magic to time execution of
712 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
718 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
713
719
714 2005-02-19 Fernando Perez <fperez@colorado.edu>
720 2005-02-19 Fernando Perez <fperez@colorado.edu>
715
721
716 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
722 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
717 into keys (for prompts, for example).
723 into keys (for prompts, for example).
718
724
719 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
725 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
720 prompts in case users want them. This introduces a small behavior
726 prompts in case users want them. This introduces a small behavior
721 change: ipython does not automatically add a space to all prompts
727 change: ipython does not automatically add a space to all prompts
722 anymore. To get the old prompts with a space, users should add it
728 anymore. To get the old prompts with a space, users should add it
723 manually to their ipythonrc file, so for example prompt_in1 should
729 manually to their ipythonrc file, so for example prompt_in1 should
724 now read 'In [\#]: ' instead of 'In [\#]:'.
730 now read 'In [\#]: ' instead of 'In [\#]:'.
725 (BasePrompt.__init__): New option prompts_pad_left (only in rc
731 (BasePrompt.__init__): New option prompts_pad_left (only in rc
726 file) to control left-padding of secondary prompts.
732 file) to control left-padding of secondary prompts.
727
733
728 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
734 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
729 the profiler can't be imported. Fix for Debian, which removed
735 the profiler can't be imported. Fix for Debian, which removed
730 profile.py because of License issues. I applied a slightly
736 profile.py because of License issues. I applied a slightly
731 modified version of the original Debian patch at
737 modified version of the original Debian patch at
732 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
738 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
733
739
734 2005-02-17 Fernando Perez <fperez@colorado.edu>
740 2005-02-17 Fernando Perez <fperez@colorado.edu>
735
741
736 * IPython/genutils.py (native_line_ends): Fix bug which would
742 * IPython/genutils.py (native_line_ends): Fix bug which would
737 cause improper line-ends under win32 b/c I was not opening files
743 cause improper line-ends under win32 b/c I was not opening files
738 in binary mode. Bug report and fix thanks to Ville.
744 in binary mode. Bug report and fix thanks to Ville.
739
745
740 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
746 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
741 trying to catch spurious foo[1] autocalls. My fix actually broke
747 trying to catch spurious foo[1] autocalls. My fix actually broke
742 ',/' autoquote/call with explicit escape (bad regexp).
748 ',/' autoquote/call with explicit escape (bad regexp).
743
749
744 2005-02-15 *** Released version 0.6.11
750 2005-02-15 *** Released version 0.6.11
745
751
746 2005-02-14 Fernando Perez <fperez@colorado.edu>
752 2005-02-14 Fernando Perez <fperez@colorado.edu>
747
753
748 * IPython/background_jobs.py: New background job management
754 * IPython/background_jobs.py: New background job management
749 subsystem. This is implemented via a new set of classes, and
755 subsystem. This is implemented via a new set of classes, and
750 IPython now provides a builtin 'jobs' object for background job
756 IPython now provides a builtin 'jobs' object for background job
751 execution. A convenience %bg magic serves as a lightweight
757 execution. A convenience %bg magic serves as a lightweight
752 frontend for starting the more common type of calls. This was
758 frontend for starting the more common type of calls. This was
753 inspired by discussions with B. Granger and the BackgroundCommand
759 inspired by discussions with B. Granger and the BackgroundCommand
754 class described in the book Python Scripting for Computational
760 class described in the book Python Scripting for Computational
755 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
761 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
756 (although ultimately no code from this text was used, as IPython's
762 (although ultimately no code from this text was used, as IPython's
757 system is a separate implementation).
763 system is a separate implementation).
758
764
759 * IPython/iplib.py (MagicCompleter.python_matches): add new option
765 * IPython/iplib.py (MagicCompleter.python_matches): add new option
760 to control the completion of single/double underscore names
766 to control the completion of single/double underscore names
761 separately. As documented in the example ipytonrc file, the
767 separately. As documented in the example ipytonrc file, the
762 readline_omit__names variable can now be set to 2, to omit even
768 readline_omit__names variable can now be set to 2, to omit even
763 single underscore names. Thanks to a patch by Brian Wong
769 single underscore names. Thanks to a patch by Brian Wong
764 <BrianWong-AT-AirgoNetworks.Com>.
770 <BrianWong-AT-AirgoNetworks.Com>.
765 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
771 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
766 be autocalled as foo([1]) if foo were callable. A problem for
772 be autocalled as foo([1]) if foo were callable. A problem for
767 things which are both callable and implement __getitem__.
773 things which are both callable and implement __getitem__.
768 (init_readline): Fix autoindentation for win32. Thanks to a patch
774 (init_readline): Fix autoindentation for win32. Thanks to a patch
769 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
775 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
770
776
771 2005-02-12 Fernando Perez <fperez@colorado.edu>
777 2005-02-12 Fernando Perez <fperez@colorado.edu>
772
778
773 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
779 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
774 which I had written long ago to sort out user error messages which
780 which I had written long ago to sort out user error messages which
775 may occur during startup. This seemed like a good idea initially,
781 may occur during startup. This seemed like a good idea initially,
776 but it has proven a disaster in retrospect. I don't want to
782 but it has proven a disaster in retrospect. I don't want to
777 change much code for now, so my fix is to set the internal 'debug'
783 change much code for now, so my fix is to set the internal 'debug'
778 flag to true everywhere, whose only job was precisely to control
784 flag to true everywhere, whose only job was precisely to control
779 this subsystem. This closes issue 28 (as well as avoiding all
785 this subsystem. This closes issue 28 (as well as avoiding all
780 sorts of strange hangups which occur from time to time).
786 sorts of strange hangups which occur from time to time).
781
787
782 2005-02-07 Fernando Perez <fperez@colorado.edu>
788 2005-02-07 Fernando Perez <fperez@colorado.edu>
783
789
784 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
790 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
785 previous call produced a syntax error.
791 previous call produced a syntax error.
786
792
787 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
793 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
788 classes without constructor.
794 classes without constructor.
789
795
790 2005-02-06 Fernando Perez <fperez@colorado.edu>
796 2005-02-06 Fernando Perez <fperez@colorado.edu>
791
797
792 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
798 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
793 completions with the results of each matcher, so we return results
799 completions with the results of each matcher, so we return results
794 to the user from all namespaces. This breaks with ipython
800 to the user from all namespaces. This breaks with ipython
795 tradition, but I think it's a nicer behavior. Now you get all
801 tradition, but I think it's a nicer behavior. Now you get all
796 possible completions listed, from all possible namespaces (python,
802 possible completions listed, from all possible namespaces (python,
797 filesystem, magics...) After a request by John Hunter
803 filesystem, magics...) After a request by John Hunter
798 <jdhunter-AT-nitace.bsd.uchicago.edu>.
804 <jdhunter-AT-nitace.bsd.uchicago.edu>.
799
805
800 2005-02-05 Fernando Perez <fperez@colorado.edu>
806 2005-02-05 Fernando Perez <fperez@colorado.edu>
801
807
802 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
808 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
803 the call had quote characters in it (the quotes were stripped).
809 the call had quote characters in it (the quotes were stripped).
804
810
805 2005-01-31 Fernando Perez <fperez@colorado.edu>
811 2005-01-31 Fernando Perez <fperez@colorado.edu>
806
812
807 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
813 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
808 Itpl.itpl() to make the code more robust against psyco
814 Itpl.itpl() to make the code more robust against psyco
809 optimizations.
815 optimizations.
810
816
811 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
817 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
812 of causing an exception. Quicker, cleaner.
818 of causing an exception. Quicker, cleaner.
813
819
814 2005-01-28 Fernando Perez <fperez@colorado.edu>
820 2005-01-28 Fernando Perez <fperez@colorado.edu>
815
821
816 * scripts/ipython_win_post_install.py (install): hardcode
822 * scripts/ipython_win_post_install.py (install): hardcode
817 sys.prefix+'python.exe' as the executable path. It turns out that
823 sys.prefix+'python.exe' as the executable path. It turns out that
818 during the post-installation run, sys.executable resolves to the
824 during the post-installation run, sys.executable resolves to the
819 name of the binary installer! I should report this as a distutils
825 name of the binary installer! I should report this as a distutils
820 bug, I think. I updated the .10 release with this tiny fix, to
826 bug, I think. I updated the .10 release with this tiny fix, to
821 avoid annoying the lists further.
827 avoid annoying the lists further.
822
828
823 2005-01-27 *** Released version 0.6.10
829 2005-01-27 *** Released version 0.6.10
824
830
825 2005-01-27 Fernando Perez <fperez@colorado.edu>
831 2005-01-27 Fernando Perez <fperez@colorado.edu>
826
832
827 * IPython/numutils.py (norm): Added 'inf' as optional name for
833 * IPython/numutils.py (norm): Added 'inf' as optional name for
828 L-infinity norm, included references to mathworld.com for vector
834 L-infinity norm, included references to mathworld.com for vector
829 norm definitions.
835 norm definitions.
830 (amin/amax): added amin/amax for array min/max. Similar to what
836 (amin/amax): added amin/amax for array min/max. Similar to what
831 pylab ships with after the recent reorganization of names.
837 pylab ships with after the recent reorganization of names.
832 (spike/spike_odd): removed deprecated spike/spike_odd functions.
838 (spike/spike_odd): removed deprecated spike/spike_odd functions.
833
839
834 * ipython.el: committed Alex's recent fixes and improvements.
840 * ipython.el: committed Alex's recent fixes and improvements.
835 Tested with python-mode from CVS, and it looks excellent. Since
841 Tested with python-mode from CVS, and it looks excellent. Since
836 python-mode hasn't released anything in a while, I'm temporarily
842 python-mode hasn't released anything in a while, I'm temporarily
837 putting a copy of today's CVS (v 4.70) of python-mode in:
843 putting a copy of today's CVS (v 4.70) of python-mode in:
838 http://ipython.scipy.org/tmp/python-mode.el
844 http://ipython.scipy.org/tmp/python-mode.el
839
845
840 * scripts/ipython_win_post_install.py (install): Win32 fix to use
846 * scripts/ipython_win_post_install.py (install): Win32 fix to use
841 sys.executable for the executable name, instead of assuming it's
847 sys.executable for the executable name, instead of assuming it's
842 called 'python.exe' (the post-installer would have produced broken
848 called 'python.exe' (the post-installer would have produced broken
843 setups on systems with a differently named python binary).
849 setups on systems with a differently named python binary).
844
850
845 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
851 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
846 references to os.linesep, to make the code more
852 references to os.linesep, to make the code more
847 platform-independent. This is also part of the win32 coloring
853 platform-independent. This is also part of the win32 coloring
848 fixes.
854 fixes.
849
855
850 * IPython/genutils.py (page_dumb): Remove attempts to chop long
856 * IPython/genutils.py (page_dumb): Remove attempts to chop long
851 lines, which actually cause coloring bugs because the length of
857 lines, which actually cause coloring bugs because the length of
852 the line is very difficult to correctly compute with embedded
858 the line is very difficult to correctly compute with embedded
853 escapes. This was the source of all the coloring problems under
859 escapes. This was the source of all the coloring problems under
854 Win32. I think that _finally_, Win32 users have a properly
860 Win32. I think that _finally_, Win32 users have a properly
855 working ipython in all respects. This would never have happened
861 working ipython in all respects. This would never have happened
856 if not for Gary Bishop and Viktor Ransmayr's great help and work.
862 if not for Gary Bishop and Viktor Ransmayr's great help and work.
857
863
858 2005-01-26 *** Released version 0.6.9
864 2005-01-26 *** Released version 0.6.9
859
865
860 2005-01-25 Fernando Perez <fperez@colorado.edu>
866 2005-01-25 Fernando Perez <fperez@colorado.edu>
861
867
862 * setup.py: finally, we have a true Windows installer, thanks to
868 * setup.py: finally, we have a true Windows installer, thanks to
863 the excellent work of Viktor Ransmayr
869 the excellent work of Viktor Ransmayr
864 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
870 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
865 Windows users. The setup routine is quite a bit cleaner thanks to
871 Windows users. The setup routine is quite a bit cleaner thanks to
866 this, and the post-install script uses the proper functions to
872 this, and the post-install script uses the proper functions to
867 allow a clean de-installation using the standard Windows Control
873 allow a clean de-installation using the standard Windows Control
868 Panel.
874 Panel.
869
875
870 * IPython/genutils.py (get_home_dir): changed to use the $HOME
876 * IPython/genutils.py (get_home_dir): changed to use the $HOME
871 environment variable under all OSes (including win32) if
877 environment variable under all OSes (including win32) if
872 available. This will give consistency to win32 users who have set
878 available. This will give consistency to win32 users who have set
873 this variable for any reason. If os.environ['HOME'] fails, the
879 this variable for any reason. If os.environ['HOME'] fails, the
874 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
880 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
875
881
876 2005-01-24 Fernando Perez <fperez@colorado.edu>
882 2005-01-24 Fernando Perez <fperez@colorado.edu>
877
883
878 * IPython/numutils.py (empty_like): add empty_like(), similar to
884 * IPython/numutils.py (empty_like): add empty_like(), similar to
879 zeros_like() but taking advantage of the new empty() Numeric routine.
885 zeros_like() but taking advantage of the new empty() Numeric routine.
880
886
881 2005-01-23 *** Released version 0.6.8
887 2005-01-23 *** Released version 0.6.8
882
888
883 2005-01-22 Fernando Perez <fperez@colorado.edu>
889 2005-01-22 Fernando Perez <fperez@colorado.edu>
884
890
885 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
891 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
886 automatic show() calls. After discussing things with JDH, it
892 automatic show() calls. After discussing things with JDH, it
887 turns out there are too many corner cases where this can go wrong.
893 turns out there are too many corner cases where this can go wrong.
888 It's best not to try to be 'too smart', and simply have ipython
894 It's best not to try to be 'too smart', and simply have ipython
889 reproduce as much as possible the default behavior of a normal
895 reproduce as much as possible the default behavior of a normal
890 python shell.
896 python shell.
891
897
892 * IPython/iplib.py (InteractiveShell.__init__): Modified the
898 * IPython/iplib.py (InteractiveShell.__init__): Modified the
893 line-splitting regexp and _prefilter() to avoid calling getattr()
899 line-splitting regexp and _prefilter() to avoid calling getattr()
894 on assignments. This closes
900 on assignments. This closes
895 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
901 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
896 readline uses getattr(), so a simple <TAB> keypress is still
902 readline uses getattr(), so a simple <TAB> keypress is still
897 enough to trigger getattr() calls on an object.
903 enough to trigger getattr() calls on an object.
898
904
899 2005-01-21 Fernando Perez <fperez@colorado.edu>
905 2005-01-21 Fernando Perez <fperez@colorado.edu>
900
906
901 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
907 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
902 docstring under pylab so it doesn't mask the original.
908 docstring under pylab so it doesn't mask the original.
903
909
904 2005-01-21 *** Released version 0.6.7
910 2005-01-21 *** Released version 0.6.7
905
911
906 2005-01-21 Fernando Perez <fperez@colorado.edu>
912 2005-01-21 Fernando Perez <fperez@colorado.edu>
907
913
908 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
914 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
909 signal handling for win32 users in multithreaded mode.
915 signal handling for win32 users in multithreaded mode.
910
916
911 2005-01-17 Fernando Perez <fperez@colorado.edu>
917 2005-01-17 Fernando Perez <fperez@colorado.edu>
912
918
913 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
919 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
914 instances with no __init__. After a crash report by Norbert Nemec
920 instances with no __init__. After a crash report by Norbert Nemec
915 <Norbert-AT-nemec-online.de>.
921 <Norbert-AT-nemec-online.de>.
916
922
917 2005-01-14 Fernando Perez <fperez@colorado.edu>
923 2005-01-14 Fernando Perez <fperez@colorado.edu>
918
924
919 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
925 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
920 names for verbose exceptions, when multiple dotted names and the
926 names for verbose exceptions, when multiple dotted names and the
921 'parent' object were present on the same line.
927 'parent' object were present on the same line.
922
928
923 2005-01-11 Fernando Perez <fperez@colorado.edu>
929 2005-01-11 Fernando Perez <fperez@colorado.edu>
924
930
925 * IPython/genutils.py (flag_calls): new utility to trap and flag
931 * IPython/genutils.py (flag_calls): new utility to trap and flag
926 calls in functions. I need it to clean up matplotlib support.
932 calls in functions. I need it to clean up matplotlib support.
927 Also removed some deprecated code in genutils.
933 Also removed some deprecated code in genutils.
928
934
929 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
935 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
930 that matplotlib scripts called with %run, which don't call show()
936 that matplotlib scripts called with %run, which don't call show()
931 themselves, still have their plotting windows open.
937 themselves, still have their plotting windows open.
932
938
933 2005-01-05 Fernando Perez <fperez@colorado.edu>
939 2005-01-05 Fernando Perez <fperez@colorado.edu>
934
940
935 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
941 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
936 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
942 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
937
943
938 2004-12-19 Fernando Perez <fperez@colorado.edu>
944 2004-12-19 Fernando Perez <fperez@colorado.edu>
939
945
940 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
946 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
941 parent_runcode, which was an eyesore. The same result can be
947 parent_runcode, which was an eyesore. The same result can be
942 obtained with Python's regular superclass mechanisms.
948 obtained with Python's regular superclass mechanisms.
943
949
944 2004-12-17 Fernando Perez <fperez@colorado.edu>
950 2004-12-17 Fernando Perez <fperez@colorado.edu>
945
951
946 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
952 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
947 reported by Prabhu.
953 reported by Prabhu.
948 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
954 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
949 sys.stderr) instead of explicitly calling sys.stderr. This helps
955 sys.stderr) instead of explicitly calling sys.stderr. This helps
950 maintain our I/O abstractions clean, for future GUI embeddings.
956 maintain our I/O abstractions clean, for future GUI embeddings.
951
957
952 * IPython/genutils.py (info): added new utility for sys.stderr
958 * IPython/genutils.py (info): added new utility for sys.stderr
953 unified info message handling (thin wrapper around warn()).
959 unified info message handling (thin wrapper around warn()).
954
960
955 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
961 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
956 composite (dotted) names on verbose exceptions.
962 composite (dotted) names on verbose exceptions.
957 (VerboseTB.nullrepr): harden against another kind of errors which
963 (VerboseTB.nullrepr): harden against another kind of errors which
958 Python's inspect module can trigger, and which were crashing
964 Python's inspect module can trigger, and which were crashing
959 IPython. Thanks to a report by Marco Lombardi
965 IPython. Thanks to a report by Marco Lombardi
960 <mlombard-AT-ma010192.hq.eso.org>.
966 <mlombard-AT-ma010192.hq.eso.org>.
961
967
962 2004-12-13 *** Released version 0.6.6
968 2004-12-13 *** Released version 0.6.6
963
969
964 2004-12-12 Fernando Perez <fperez@colorado.edu>
970 2004-12-12 Fernando Perez <fperez@colorado.edu>
965
971
966 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
972 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
967 generated by pygtk upon initialization if it was built without
973 generated by pygtk upon initialization if it was built without
968 threads (for matplotlib users). After a crash reported by
974 threads (for matplotlib users). After a crash reported by
969 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
975 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
970
976
971 * IPython/ipmaker.py (make_IPython): fix small bug in the
977 * IPython/ipmaker.py (make_IPython): fix small bug in the
972 import_some parameter for multiple imports.
978 import_some parameter for multiple imports.
973
979
974 * IPython/iplib.py (ipmagic): simplified the interface of
980 * IPython/iplib.py (ipmagic): simplified the interface of
975 ipmagic() to take a single string argument, just as it would be
981 ipmagic() to take a single string argument, just as it would be
976 typed at the IPython cmd line.
982 typed at the IPython cmd line.
977 (ipalias): Added new ipalias() with an interface identical to
983 (ipalias): Added new ipalias() with an interface identical to
978 ipmagic(). This completes exposing a pure python interface to the
984 ipmagic(). This completes exposing a pure python interface to the
979 alias and magic system, which can be used in loops or more complex
985 alias and magic system, which can be used in loops or more complex
980 code where IPython's automatic line mangling is not active.
986 code where IPython's automatic line mangling is not active.
981
987
982 * IPython/genutils.py (timing): changed interface of timing to
988 * IPython/genutils.py (timing): changed interface of timing to
983 simply run code once, which is the most common case. timings()
989 simply run code once, which is the most common case. timings()
984 remains unchanged, for the cases where you want multiple runs.
990 remains unchanged, for the cases where you want multiple runs.
985
991
986 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
992 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
987 bug where Python2.2 crashes with exec'ing code which does not end
993 bug where Python2.2 crashes with exec'ing code which does not end
988 in a single newline. Python 2.3 is OK, so I hadn't noticed this
994 in a single newline. Python 2.3 is OK, so I hadn't noticed this
989 before.
995 before.
990
996
991 2004-12-10 Fernando Perez <fperez@colorado.edu>
997 2004-12-10 Fernando Perez <fperez@colorado.edu>
992
998
993 * IPython/Magic.py (Magic.magic_prun): changed name of option from
999 * IPython/Magic.py (Magic.magic_prun): changed name of option from
994 -t to -T, to accomodate the new -t flag in %run (the %run and
1000 -t to -T, to accomodate the new -t flag in %run (the %run and
995 %prun options are kind of intermixed, and it's not easy to change
1001 %prun options are kind of intermixed, and it's not easy to change
996 this with the limitations of python's getopt).
1002 this with the limitations of python's getopt).
997
1003
998 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1004 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
999 the execution of scripts. It's not as fine-tuned as timeit.py,
1005 the execution of scripts. It's not as fine-tuned as timeit.py,
1000 but it works from inside ipython (and under 2.2, which lacks
1006 but it works from inside ipython (and under 2.2, which lacks
1001 timeit.py). Optionally a number of runs > 1 can be given for
1007 timeit.py). Optionally a number of runs > 1 can be given for
1002 timing very short-running code.
1008 timing very short-running code.
1003
1009
1004 * IPython/genutils.py (uniq_stable): new routine which returns a
1010 * IPython/genutils.py (uniq_stable): new routine which returns a
1005 list of unique elements in any iterable, but in stable order of
1011 list of unique elements in any iterable, but in stable order of
1006 appearance. I needed this for the ultraTB fixes, and it's a handy
1012 appearance. I needed this for the ultraTB fixes, and it's a handy
1007 utility.
1013 utility.
1008
1014
1009 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1015 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1010 dotted names in Verbose exceptions. This had been broken since
1016 dotted names in Verbose exceptions. This had been broken since
1011 the very start, now x.y will properly be printed in a Verbose
1017 the very start, now x.y will properly be printed in a Verbose
1012 traceback, instead of x being shown and y appearing always as an
1018 traceback, instead of x being shown and y appearing always as an
1013 'undefined global'. Getting this to work was a bit tricky,
1019 'undefined global'. Getting this to work was a bit tricky,
1014 because by default python tokenizers are stateless. Saved by
1020 because by default python tokenizers are stateless. Saved by
1015 python's ability to easily add a bit of state to an arbitrary
1021 python's ability to easily add a bit of state to an arbitrary
1016 function (without needing to build a full-blown callable object).
1022 function (without needing to build a full-blown callable object).
1017
1023
1018 Also big cleanup of this code, which had horrendous runtime
1024 Also big cleanup of this code, which had horrendous runtime
1019 lookups of zillions of attributes for colorization. Moved all
1025 lookups of zillions of attributes for colorization. Moved all
1020 this code into a few templates, which make it cleaner and quicker.
1026 this code into a few templates, which make it cleaner and quicker.
1021
1027
1022 Printout quality was also improved for Verbose exceptions: one
1028 Printout quality was also improved for Verbose exceptions: one
1023 variable per line, and memory addresses are printed (this can be
1029 variable per line, and memory addresses are printed (this can be
1024 quite handy in nasty debugging situations, which is what Verbose
1030 quite handy in nasty debugging situations, which is what Verbose
1025 is for).
1031 is for).
1026
1032
1027 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1033 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1028 the command line as scripts to be loaded by embedded instances.
1034 the command line as scripts to be loaded by embedded instances.
1029 Doing so has the potential for an infinite recursion if there are
1035 Doing so has the potential for an infinite recursion if there are
1030 exceptions thrown in the process. This fixes a strange crash
1036 exceptions thrown in the process. This fixes a strange crash
1031 reported by Philippe MULLER <muller-AT-irit.fr>.
1037 reported by Philippe MULLER <muller-AT-irit.fr>.
1032
1038
1033 2004-12-09 Fernando Perez <fperez@colorado.edu>
1039 2004-12-09 Fernando Perez <fperez@colorado.edu>
1034
1040
1035 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1041 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1036 to reflect new names in matplotlib, which now expose the
1042 to reflect new names in matplotlib, which now expose the
1037 matlab-compatible interface via a pylab module instead of the
1043 matlab-compatible interface via a pylab module instead of the
1038 'matlab' name. The new code is backwards compatible, so users of
1044 'matlab' name. The new code is backwards compatible, so users of
1039 all matplotlib versions are OK. Patch by J. Hunter.
1045 all matplotlib versions are OK. Patch by J. Hunter.
1040
1046
1041 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1047 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1042 of __init__ docstrings for instances (class docstrings are already
1048 of __init__ docstrings for instances (class docstrings are already
1043 automatically printed). Instances with customized docstrings
1049 automatically printed). Instances with customized docstrings
1044 (indep. of the class) are also recognized and all 3 separate
1050 (indep. of the class) are also recognized and all 3 separate
1045 docstrings are printed (instance, class, constructor). After some
1051 docstrings are printed (instance, class, constructor). After some
1046 comments/suggestions by J. Hunter.
1052 comments/suggestions by J. Hunter.
1047
1053
1048 2004-12-05 Fernando Perez <fperez@colorado.edu>
1054 2004-12-05 Fernando Perez <fperez@colorado.edu>
1049
1055
1050 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1056 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1051 warnings when tab-completion fails and triggers an exception.
1057 warnings when tab-completion fails and triggers an exception.
1052
1058
1053 2004-12-03 Fernando Perez <fperez@colorado.edu>
1059 2004-12-03 Fernando Perez <fperez@colorado.edu>
1054
1060
1055 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1061 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1056 be triggered when using 'run -p'. An incorrect option flag was
1062 be triggered when using 'run -p'. An incorrect option flag was
1057 being set ('d' instead of 'D').
1063 being set ('d' instead of 'D').
1058 (manpage): fix missing escaped \- sign.
1064 (manpage): fix missing escaped \- sign.
1059
1065
1060 2004-11-30 *** Released version 0.6.5
1066 2004-11-30 *** Released version 0.6.5
1061
1067
1062 2004-11-30 Fernando Perez <fperez@colorado.edu>
1068 2004-11-30 Fernando Perez <fperez@colorado.edu>
1063
1069
1064 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1070 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1065 setting with -d option.
1071 setting with -d option.
1066
1072
1067 * setup.py (docfiles): Fix problem where the doc glob I was using
1073 * setup.py (docfiles): Fix problem where the doc glob I was using
1068 was COMPLETELY BROKEN. It was giving the right files by pure
1074 was COMPLETELY BROKEN. It was giving the right files by pure
1069 accident, but failed once I tried to include ipython.el. Note:
1075 accident, but failed once I tried to include ipython.el. Note:
1070 glob() does NOT allow you to do exclusion on multiple endings!
1076 glob() does NOT allow you to do exclusion on multiple endings!
1071
1077
1072 2004-11-29 Fernando Perez <fperez@colorado.edu>
1078 2004-11-29 Fernando Perez <fperez@colorado.edu>
1073
1079
1074 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1080 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1075 the manpage as the source. Better formatting & consistency.
1081 the manpage as the source. Better formatting & consistency.
1076
1082
1077 * IPython/Magic.py (magic_run): Added new -d option, to run
1083 * IPython/Magic.py (magic_run): Added new -d option, to run
1078 scripts under the control of the python pdb debugger. Note that
1084 scripts under the control of the python pdb debugger. Note that
1079 this required changing the %prun option -d to -D, to avoid a clash
1085 this required changing the %prun option -d to -D, to avoid a clash
1080 (since %run must pass options to %prun, and getopt is too dumb to
1086 (since %run must pass options to %prun, and getopt is too dumb to
1081 handle options with string values with embedded spaces). Thanks
1087 handle options with string values with embedded spaces). Thanks
1082 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1088 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1083 (magic_who_ls): added type matching to %who and %whos, so that one
1089 (magic_who_ls): added type matching to %who and %whos, so that one
1084 can filter their output to only include variables of certain
1090 can filter their output to only include variables of certain
1085 types. Another suggestion by Matthew.
1091 types. Another suggestion by Matthew.
1086 (magic_whos): Added memory summaries in kb and Mb for arrays.
1092 (magic_whos): Added memory summaries in kb and Mb for arrays.
1087 (magic_who): Improve formatting (break lines every 9 vars).
1093 (magic_who): Improve formatting (break lines every 9 vars).
1088
1094
1089 2004-11-28 Fernando Perez <fperez@colorado.edu>
1095 2004-11-28 Fernando Perez <fperez@colorado.edu>
1090
1096
1091 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1097 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1092 cache when empty lines were present.
1098 cache when empty lines were present.
1093
1099
1094 2004-11-24 Fernando Perez <fperez@colorado.edu>
1100 2004-11-24 Fernando Perez <fperez@colorado.edu>
1095
1101
1096 * IPython/usage.py (__doc__): document the re-activated threading
1102 * IPython/usage.py (__doc__): document the re-activated threading
1097 options for WX and GTK.
1103 options for WX and GTK.
1098
1104
1099 2004-11-23 Fernando Perez <fperez@colorado.edu>
1105 2004-11-23 Fernando Perez <fperez@colorado.edu>
1100
1106
1101 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1107 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1102 the -wthread and -gthread options, along with a new -tk one to try
1108 the -wthread and -gthread options, along with a new -tk one to try
1103 and coordinate Tk threading with wx/gtk. The tk support is very
1109 and coordinate Tk threading with wx/gtk. The tk support is very
1104 platform dependent, since it seems to require Tcl and Tk to be
1110 platform dependent, since it seems to require Tcl and Tk to be
1105 built with threads (Fedora1/2 appears NOT to have it, but in
1111 built with threads (Fedora1/2 appears NOT to have it, but in
1106 Prabhu's Debian boxes it works OK). But even with some Tk
1112 Prabhu's Debian boxes it works OK). But even with some Tk
1107 limitations, this is a great improvement.
1113 limitations, this is a great improvement.
1108
1114
1109 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1115 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1110 info in user prompts. Patch by Prabhu.
1116 info in user prompts. Patch by Prabhu.
1111
1117
1112 2004-11-18 Fernando Perez <fperez@colorado.edu>
1118 2004-11-18 Fernando Perez <fperez@colorado.edu>
1113
1119
1114 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1120 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1115 EOFErrors and bail, to avoid infinite loops if a non-terminating
1121 EOFErrors and bail, to avoid infinite loops if a non-terminating
1116 file is fed into ipython. Patch submitted in issue 19 by user,
1122 file is fed into ipython. Patch submitted in issue 19 by user,
1117 many thanks.
1123 many thanks.
1118
1124
1119 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1125 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1120 autoquote/parens in continuation prompts, which can cause lots of
1126 autoquote/parens in continuation prompts, which can cause lots of
1121 problems. Closes roundup issue 20.
1127 problems. Closes roundup issue 20.
1122
1128
1123 2004-11-17 Fernando Perez <fperez@colorado.edu>
1129 2004-11-17 Fernando Perez <fperez@colorado.edu>
1124
1130
1125 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1131 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1126 reported as debian bug #280505. I'm not sure my local changelog
1132 reported as debian bug #280505. I'm not sure my local changelog
1127 entry has the proper debian format (Jack?).
1133 entry has the proper debian format (Jack?).
1128
1134
1129 2004-11-08 *** Released version 0.6.4
1135 2004-11-08 *** Released version 0.6.4
1130
1136
1131 2004-11-08 Fernando Perez <fperez@colorado.edu>
1137 2004-11-08 Fernando Perez <fperez@colorado.edu>
1132
1138
1133 * IPython/iplib.py (init_readline): Fix exit message for Windows
1139 * IPython/iplib.py (init_readline): Fix exit message for Windows
1134 when readline is active. Thanks to a report by Eric Jones
1140 when readline is active. Thanks to a report by Eric Jones
1135 <eric-AT-enthought.com>.
1141 <eric-AT-enthought.com>.
1136
1142
1137 2004-11-07 Fernando Perez <fperez@colorado.edu>
1143 2004-11-07 Fernando Perez <fperez@colorado.edu>
1138
1144
1139 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1145 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1140 sometimes seen by win2k/cygwin users.
1146 sometimes seen by win2k/cygwin users.
1141
1147
1142 2004-11-06 Fernando Perez <fperez@colorado.edu>
1148 2004-11-06 Fernando Perez <fperez@colorado.edu>
1143
1149
1144 * IPython/iplib.py (interact): Change the handling of %Exit from
1150 * IPython/iplib.py (interact): Change the handling of %Exit from
1145 trying to propagate a SystemExit to an internal ipython flag.
1151 trying to propagate a SystemExit to an internal ipython flag.
1146 This is less elegant than using Python's exception mechanism, but
1152 This is less elegant than using Python's exception mechanism, but
1147 I can't get that to work reliably with threads, so under -pylab
1153 I can't get that to work reliably with threads, so under -pylab
1148 %Exit was hanging IPython. Cross-thread exception handling is
1154 %Exit was hanging IPython. Cross-thread exception handling is
1149 really a bitch. Thaks to a bug report by Stephen Walton
1155 really a bitch. Thaks to a bug report by Stephen Walton
1150 <stephen.walton-AT-csun.edu>.
1156 <stephen.walton-AT-csun.edu>.
1151
1157
1152 2004-11-04 Fernando Perez <fperez@colorado.edu>
1158 2004-11-04 Fernando Perez <fperez@colorado.edu>
1153
1159
1154 * IPython/iplib.py (raw_input_original): store a pointer to the
1160 * IPython/iplib.py (raw_input_original): store a pointer to the
1155 true raw_input to harden against code which can modify it
1161 true raw_input to harden against code which can modify it
1156 (wx.py.PyShell does this and would otherwise crash ipython).
1162 (wx.py.PyShell does this and would otherwise crash ipython).
1157 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1163 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1158
1164
1159 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1165 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1160 Ctrl-C problem, which does not mess up the input line.
1166 Ctrl-C problem, which does not mess up the input line.
1161
1167
1162 2004-11-03 Fernando Perez <fperez@colorado.edu>
1168 2004-11-03 Fernando Perez <fperez@colorado.edu>
1163
1169
1164 * IPython/Release.py: Changed licensing to BSD, in all files.
1170 * IPython/Release.py: Changed licensing to BSD, in all files.
1165 (name): lowercase name for tarball/RPM release.
1171 (name): lowercase name for tarball/RPM release.
1166
1172
1167 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1173 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1168 use throughout ipython.
1174 use throughout ipython.
1169
1175
1170 * IPython/Magic.py (Magic._ofind): Switch to using the new
1176 * IPython/Magic.py (Magic._ofind): Switch to using the new
1171 OInspect.getdoc() function.
1177 OInspect.getdoc() function.
1172
1178
1173 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1179 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1174 of the line currently being canceled via Ctrl-C. It's extremely
1180 of the line currently being canceled via Ctrl-C. It's extremely
1175 ugly, but I don't know how to do it better (the problem is one of
1181 ugly, but I don't know how to do it better (the problem is one of
1176 handling cross-thread exceptions).
1182 handling cross-thread exceptions).
1177
1183
1178 2004-10-28 Fernando Perez <fperez@colorado.edu>
1184 2004-10-28 Fernando Perez <fperez@colorado.edu>
1179
1185
1180 * IPython/Shell.py (signal_handler): add signal handlers to trap
1186 * IPython/Shell.py (signal_handler): add signal handlers to trap
1181 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1187 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1182 report by Francesc Alted.
1188 report by Francesc Alted.
1183
1189
1184 2004-10-21 Fernando Perez <fperez@colorado.edu>
1190 2004-10-21 Fernando Perez <fperez@colorado.edu>
1185
1191
1186 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1192 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1187 to % for pysh syntax extensions.
1193 to % for pysh syntax extensions.
1188
1194
1189 2004-10-09 Fernando Perez <fperez@colorado.edu>
1195 2004-10-09 Fernando Perez <fperez@colorado.edu>
1190
1196
1191 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1197 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1192 arrays to print a more useful summary, without calling str(arr).
1198 arrays to print a more useful summary, without calling str(arr).
1193 This avoids the problem of extremely lengthy computations which
1199 This avoids the problem of extremely lengthy computations which
1194 occur if arr is large, and appear to the user as a system lockup
1200 occur if arr is large, and appear to the user as a system lockup
1195 with 100% cpu activity. After a suggestion by Kristian Sandberg
1201 with 100% cpu activity. After a suggestion by Kristian Sandberg
1196 <Kristian.Sandberg@colorado.edu>.
1202 <Kristian.Sandberg@colorado.edu>.
1197 (Magic.__init__): fix bug in global magic escapes not being
1203 (Magic.__init__): fix bug in global magic escapes not being
1198 correctly set.
1204 correctly set.
1199
1205
1200 2004-10-08 Fernando Perez <fperez@colorado.edu>
1206 2004-10-08 Fernando Perez <fperez@colorado.edu>
1201
1207
1202 * IPython/Magic.py (__license__): change to absolute imports of
1208 * IPython/Magic.py (__license__): change to absolute imports of
1203 ipython's own internal packages, to start adapting to the absolute
1209 ipython's own internal packages, to start adapting to the absolute
1204 import requirement of PEP-328.
1210 import requirement of PEP-328.
1205
1211
1206 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1212 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1207 files, and standardize author/license marks through the Release
1213 files, and standardize author/license marks through the Release
1208 module instead of having per/file stuff (except for files with
1214 module instead of having per/file stuff (except for files with
1209 particular licenses, like the MIT/PSF-licensed codes).
1215 particular licenses, like the MIT/PSF-licensed codes).
1210
1216
1211 * IPython/Debugger.py: remove dead code for python 2.1
1217 * IPython/Debugger.py: remove dead code for python 2.1
1212
1218
1213 2004-10-04 Fernando Perez <fperez@colorado.edu>
1219 2004-10-04 Fernando Perez <fperez@colorado.edu>
1214
1220
1215 * IPython/iplib.py (ipmagic): New function for accessing magics
1221 * IPython/iplib.py (ipmagic): New function for accessing magics
1216 via a normal python function call.
1222 via a normal python function call.
1217
1223
1218 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1224 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1219 from '@' to '%', to accomodate the new @decorator syntax of python
1225 from '@' to '%', to accomodate the new @decorator syntax of python
1220 2.4.
1226 2.4.
1221
1227
1222 2004-09-29 Fernando Perez <fperez@colorado.edu>
1228 2004-09-29 Fernando Perez <fperez@colorado.edu>
1223
1229
1224 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1230 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1225 matplotlib.use to prevent running scripts which try to switch
1231 matplotlib.use to prevent running scripts which try to switch
1226 interactive backends from within ipython. This will just crash
1232 interactive backends from within ipython. This will just crash
1227 the python interpreter, so we can't allow it (but a detailed error
1233 the python interpreter, so we can't allow it (but a detailed error
1228 is given to the user).
1234 is given to the user).
1229
1235
1230 2004-09-28 Fernando Perez <fperez@colorado.edu>
1236 2004-09-28 Fernando Perez <fperez@colorado.edu>
1231
1237
1232 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1238 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1233 matplotlib-related fixes so that using @run with non-matplotlib
1239 matplotlib-related fixes so that using @run with non-matplotlib
1234 scripts doesn't pop up spurious plot windows. This requires
1240 scripts doesn't pop up spurious plot windows. This requires
1235 matplotlib >= 0.63, where I had to make some changes as well.
1241 matplotlib >= 0.63, where I had to make some changes as well.
1236
1242
1237 * IPython/ipmaker.py (make_IPython): update version requirement to
1243 * IPython/ipmaker.py (make_IPython): update version requirement to
1238 python 2.2.
1244 python 2.2.
1239
1245
1240 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1246 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1241 banner arg for embedded customization.
1247 banner arg for embedded customization.
1242
1248
1243 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1249 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1244 explicit uses of __IP as the IPython's instance name. Now things
1250 explicit uses of __IP as the IPython's instance name. Now things
1245 are properly handled via the shell.name value. The actual code
1251 are properly handled via the shell.name value. The actual code
1246 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1252 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1247 is much better than before. I'll clean things completely when the
1253 is much better than before. I'll clean things completely when the
1248 magic stuff gets a real overhaul.
1254 magic stuff gets a real overhaul.
1249
1255
1250 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1256 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1251 minor changes to debian dir.
1257 minor changes to debian dir.
1252
1258
1253 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1259 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1254 pointer to the shell itself in the interactive namespace even when
1260 pointer to the shell itself in the interactive namespace even when
1255 a user-supplied dict is provided. This is needed for embedding
1261 a user-supplied dict is provided. This is needed for embedding
1256 purposes (found by tests with Michel Sanner).
1262 purposes (found by tests with Michel Sanner).
1257
1263
1258 2004-09-27 Fernando Perez <fperez@colorado.edu>
1264 2004-09-27 Fernando Perez <fperez@colorado.edu>
1259
1265
1260 * IPython/UserConfig/ipythonrc: remove []{} from
1266 * IPython/UserConfig/ipythonrc: remove []{} from
1261 readline_remove_delims, so that things like [modname.<TAB> do
1267 readline_remove_delims, so that things like [modname.<TAB> do
1262 proper completion. This disables [].TAB, but that's a less common
1268 proper completion. This disables [].TAB, but that's a less common
1263 case than module names in list comprehensions, for example.
1269 case than module names in list comprehensions, for example.
1264 Thanks to a report by Andrea Riciputi.
1270 Thanks to a report by Andrea Riciputi.
1265
1271
1266 2004-09-09 Fernando Perez <fperez@colorado.edu>
1272 2004-09-09 Fernando Perez <fperez@colorado.edu>
1267
1273
1268 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1274 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1269 blocking problems in win32 and osx. Fix by John.
1275 blocking problems in win32 and osx. Fix by John.
1270
1276
1271 2004-09-08 Fernando Perez <fperez@colorado.edu>
1277 2004-09-08 Fernando Perez <fperez@colorado.edu>
1272
1278
1273 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1279 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1274 for Win32 and OSX. Fix by John Hunter.
1280 for Win32 and OSX. Fix by John Hunter.
1275
1281
1276 2004-08-30 *** Released version 0.6.3
1282 2004-08-30 *** Released version 0.6.3
1277
1283
1278 2004-08-30 Fernando Perez <fperez@colorado.edu>
1284 2004-08-30 Fernando Perez <fperez@colorado.edu>
1279
1285
1280 * setup.py (isfile): Add manpages to list of dependent files to be
1286 * setup.py (isfile): Add manpages to list of dependent files to be
1281 updated.
1287 updated.
1282
1288
1283 2004-08-27 Fernando Perez <fperez@colorado.edu>
1289 2004-08-27 Fernando Perez <fperez@colorado.edu>
1284
1290
1285 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1291 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1286 for now. They don't really work with standalone WX/GTK code
1292 for now. They don't really work with standalone WX/GTK code
1287 (though matplotlib IS working fine with both of those backends).
1293 (though matplotlib IS working fine with both of those backends).
1288 This will neeed much more testing. I disabled most things with
1294 This will neeed much more testing. I disabled most things with
1289 comments, so turning it back on later should be pretty easy.
1295 comments, so turning it back on later should be pretty easy.
1290
1296
1291 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1297 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1292 autocalling of expressions like r'foo', by modifying the line
1298 autocalling of expressions like r'foo', by modifying the line
1293 split regexp. Closes
1299 split regexp. Closes
1294 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1300 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1295 Riley <ipythonbugs-AT-sabi.net>.
1301 Riley <ipythonbugs-AT-sabi.net>.
1296 (InteractiveShell.mainloop): honor --nobanner with banner
1302 (InteractiveShell.mainloop): honor --nobanner with banner
1297 extensions.
1303 extensions.
1298
1304
1299 * IPython/Shell.py: Significant refactoring of all classes, so
1305 * IPython/Shell.py: Significant refactoring of all classes, so
1300 that we can really support ALL matplotlib backends and threading
1306 that we can really support ALL matplotlib backends and threading
1301 models (John spotted a bug with Tk which required this). Now we
1307 models (John spotted a bug with Tk which required this). Now we
1302 should support single-threaded, WX-threads and GTK-threads, both
1308 should support single-threaded, WX-threads and GTK-threads, both
1303 for generic code and for matplotlib.
1309 for generic code and for matplotlib.
1304
1310
1305 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1311 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1306 -pylab, to simplify things for users. Will also remove the pylab
1312 -pylab, to simplify things for users. Will also remove the pylab
1307 profile, since now all of matplotlib configuration is directly
1313 profile, since now all of matplotlib configuration is directly
1308 handled here. This also reduces startup time.
1314 handled here. This also reduces startup time.
1309
1315
1310 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1316 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1311 shell wasn't being correctly called. Also in IPShellWX.
1317 shell wasn't being correctly called. Also in IPShellWX.
1312
1318
1313 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1319 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1314 fine-tune banner.
1320 fine-tune banner.
1315
1321
1316 * IPython/numutils.py (spike): Deprecate these spike functions,
1322 * IPython/numutils.py (spike): Deprecate these spike functions,
1317 delete (long deprecated) gnuplot_exec handler.
1323 delete (long deprecated) gnuplot_exec handler.
1318
1324
1319 2004-08-26 Fernando Perez <fperez@colorado.edu>
1325 2004-08-26 Fernando Perez <fperez@colorado.edu>
1320
1326
1321 * ipython.1: Update for threading options, plus some others which
1327 * ipython.1: Update for threading options, plus some others which
1322 were missing.
1328 were missing.
1323
1329
1324 * IPython/ipmaker.py (__call__): Added -wthread option for
1330 * IPython/ipmaker.py (__call__): Added -wthread option for
1325 wxpython thread handling. Make sure threading options are only
1331 wxpython thread handling. Make sure threading options are only
1326 valid at the command line.
1332 valid at the command line.
1327
1333
1328 * scripts/ipython: moved shell selection into a factory function
1334 * scripts/ipython: moved shell selection into a factory function
1329 in Shell.py, to keep the starter script to a minimum.
1335 in Shell.py, to keep the starter script to a minimum.
1330
1336
1331 2004-08-25 Fernando Perez <fperez@colorado.edu>
1337 2004-08-25 Fernando Perez <fperez@colorado.edu>
1332
1338
1333 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1339 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1334 John. Along with some recent changes he made to matplotlib, the
1340 John. Along with some recent changes he made to matplotlib, the
1335 next versions of both systems should work very well together.
1341 next versions of both systems should work very well together.
1336
1342
1337 2004-08-24 Fernando Perez <fperez@colorado.edu>
1343 2004-08-24 Fernando Perez <fperez@colorado.edu>
1338
1344
1339 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1345 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1340 tried to switch the profiling to using hotshot, but I'm getting
1346 tried to switch the profiling to using hotshot, but I'm getting
1341 strange errors from prof.runctx() there. I may be misreading the
1347 strange errors from prof.runctx() there. I may be misreading the
1342 docs, but it looks weird. For now the profiling code will
1348 docs, but it looks weird. For now the profiling code will
1343 continue to use the standard profiler.
1349 continue to use the standard profiler.
1344
1350
1345 2004-08-23 Fernando Perez <fperez@colorado.edu>
1351 2004-08-23 Fernando Perez <fperez@colorado.edu>
1346
1352
1347 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1353 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1348 threaded shell, by John Hunter. It's not quite ready yet, but
1354 threaded shell, by John Hunter. It's not quite ready yet, but
1349 close.
1355 close.
1350
1356
1351 2004-08-22 Fernando Perez <fperez@colorado.edu>
1357 2004-08-22 Fernando Perez <fperez@colorado.edu>
1352
1358
1353 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1359 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1354 in Magic and ultraTB.
1360 in Magic and ultraTB.
1355
1361
1356 * ipython.1: document threading options in manpage.
1362 * ipython.1: document threading options in manpage.
1357
1363
1358 * scripts/ipython: Changed name of -thread option to -gthread,
1364 * scripts/ipython: Changed name of -thread option to -gthread,
1359 since this is GTK specific. I want to leave the door open for a
1365 since this is GTK specific. I want to leave the door open for a
1360 -wthread option for WX, which will most likely be necessary. This
1366 -wthread option for WX, which will most likely be necessary. This
1361 change affects usage and ipmaker as well.
1367 change affects usage and ipmaker as well.
1362
1368
1363 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1369 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1364 handle the matplotlib shell issues. Code by John Hunter
1370 handle the matplotlib shell issues. Code by John Hunter
1365 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1371 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1366 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1372 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1367 broken (and disabled for end users) for now, but it puts the
1373 broken (and disabled for end users) for now, but it puts the
1368 infrastructure in place.
1374 infrastructure in place.
1369
1375
1370 2004-08-21 Fernando Perez <fperez@colorado.edu>
1376 2004-08-21 Fernando Perez <fperez@colorado.edu>
1371
1377
1372 * ipythonrc-pylab: Add matplotlib support.
1378 * ipythonrc-pylab: Add matplotlib support.
1373
1379
1374 * matplotlib_config.py: new files for matplotlib support, part of
1380 * matplotlib_config.py: new files for matplotlib support, part of
1375 the pylab profile.
1381 the pylab profile.
1376
1382
1377 * IPython/usage.py (__doc__): documented the threading options.
1383 * IPython/usage.py (__doc__): documented the threading options.
1378
1384
1379 2004-08-20 Fernando Perez <fperez@colorado.edu>
1385 2004-08-20 Fernando Perez <fperez@colorado.edu>
1380
1386
1381 * ipython: Modified the main calling routine to handle the -thread
1387 * ipython: Modified the main calling routine to handle the -thread
1382 and -mpthread options. This needs to be done as a top-level hack,
1388 and -mpthread options. This needs to be done as a top-level hack,
1383 because it determines which class to instantiate for IPython
1389 because it determines which class to instantiate for IPython
1384 itself.
1390 itself.
1385
1391
1386 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1392 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1387 classes to support multithreaded GTK operation without blocking,
1393 classes to support multithreaded GTK operation without blocking,
1388 and matplotlib with all backends. This is a lot of still very
1394 and matplotlib with all backends. This is a lot of still very
1389 experimental code, and threads are tricky. So it may still have a
1395 experimental code, and threads are tricky. So it may still have a
1390 few rough edges... This code owes a lot to
1396 few rough edges... This code owes a lot to
1391 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1397 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1392 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1398 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1393 to John Hunter for all the matplotlib work.
1399 to John Hunter for all the matplotlib work.
1394
1400
1395 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1401 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1396 options for gtk thread and matplotlib support.
1402 options for gtk thread and matplotlib support.
1397
1403
1398 2004-08-16 Fernando Perez <fperez@colorado.edu>
1404 2004-08-16 Fernando Perez <fperez@colorado.edu>
1399
1405
1400 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1406 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1401 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1407 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1402 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1408 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1403
1409
1404 2004-08-11 Fernando Perez <fperez@colorado.edu>
1410 2004-08-11 Fernando Perez <fperez@colorado.edu>
1405
1411
1406 * setup.py (isfile): Fix build so documentation gets updated for
1412 * setup.py (isfile): Fix build so documentation gets updated for
1407 rpms (it was only done for .tgz builds).
1413 rpms (it was only done for .tgz builds).
1408
1414
1409 2004-08-10 Fernando Perez <fperez@colorado.edu>
1415 2004-08-10 Fernando Perez <fperez@colorado.edu>
1410
1416
1411 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1417 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1412
1418
1413 * iplib.py : Silence syntax error exceptions in tab-completion.
1419 * iplib.py : Silence syntax error exceptions in tab-completion.
1414
1420
1415 2004-08-05 Fernando Perez <fperez@colorado.edu>
1421 2004-08-05 Fernando Perez <fperez@colorado.edu>
1416
1422
1417 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1423 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1418 'color off' mark for continuation prompts. This was causing long
1424 'color off' mark for continuation prompts. This was causing long
1419 continuation lines to mis-wrap.
1425 continuation lines to mis-wrap.
1420
1426
1421 2004-08-01 Fernando Perez <fperez@colorado.edu>
1427 2004-08-01 Fernando Perez <fperez@colorado.edu>
1422
1428
1423 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1429 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1424 for building ipython to be a parameter. All this is necessary
1430 for building ipython to be a parameter. All this is necessary
1425 right now to have a multithreaded version, but this insane
1431 right now to have a multithreaded version, but this insane
1426 non-design will be cleaned up soon. For now, it's a hack that
1432 non-design will be cleaned up soon. For now, it's a hack that
1427 works.
1433 works.
1428
1434
1429 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1435 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1430 args in various places. No bugs so far, but it's a dangerous
1436 args in various places. No bugs so far, but it's a dangerous
1431 practice.
1437 practice.
1432
1438
1433 2004-07-31 Fernando Perez <fperez@colorado.edu>
1439 2004-07-31 Fernando Perez <fperez@colorado.edu>
1434
1440
1435 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1441 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1436 fix completion of files with dots in their names under most
1442 fix completion of files with dots in their names under most
1437 profiles (pysh was OK because the completion order is different).
1443 profiles (pysh was OK because the completion order is different).
1438
1444
1439 2004-07-27 Fernando Perez <fperez@colorado.edu>
1445 2004-07-27 Fernando Perez <fperez@colorado.edu>
1440
1446
1441 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1447 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1442 keywords manually, b/c the one in keyword.py was removed in python
1448 keywords manually, b/c the one in keyword.py was removed in python
1443 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1449 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1444 This is NOT a bug under python 2.3 and earlier.
1450 This is NOT a bug under python 2.3 and earlier.
1445
1451
1446 2004-07-26 Fernando Perez <fperez@colorado.edu>
1452 2004-07-26 Fernando Perez <fperez@colorado.edu>
1447
1453
1448 * IPython/ultraTB.py (VerboseTB.text): Add another
1454 * IPython/ultraTB.py (VerboseTB.text): Add another
1449 linecache.checkcache() call to try to prevent inspect.py from
1455 linecache.checkcache() call to try to prevent inspect.py from
1450 crashing under python 2.3. I think this fixes
1456 crashing under python 2.3. I think this fixes
1451 http://www.scipy.net/roundup/ipython/issue17.
1457 http://www.scipy.net/roundup/ipython/issue17.
1452
1458
1453 2004-07-26 *** Released version 0.6.2
1459 2004-07-26 *** Released version 0.6.2
1454
1460
1455 2004-07-26 Fernando Perez <fperez@colorado.edu>
1461 2004-07-26 Fernando Perez <fperez@colorado.edu>
1456
1462
1457 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1463 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1458 fail for any number.
1464 fail for any number.
1459 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1465 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1460 empty bookmarks.
1466 empty bookmarks.
1461
1467
1462 2004-07-26 *** Released version 0.6.1
1468 2004-07-26 *** Released version 0.6.1
1463
1469
1464 2004-07-26 Fernando Perez <fperez@colorado.edu>
1470 2004-07-26 Fernando Perez <fperez@colorado.edu>
1465
1471
1466 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1472 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1467
1473
1468 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1474 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1469 escaping '()[]{}' in filenames.
1475 escaping '()[]{}' in filenames.
1470
1476
1471 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1477 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1472 Python 2.2 users who lack a proper shlex.split.
1478 Python 2.2 users who lack a proper shlex.split.
1473
1479
1474 2004-07-19 Fernando Perez <fperez@colorado.edu>
1480 2004-07-19 Fernando Perez <fperez@colorado.edu>
1475
1481
1476 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1482 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1477 for reading readline's init file. I follow the normal chain:
1483 for reading readline's init file. I follow the normal chain:
1478 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1484 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1479 report by Mike Heeter. This closes
1485 report by Mike Heeter. This closes
1480 http://www.scipy.net/roundup/ipython/issue16.
1486 http://www.scipy.net/roundup/ipython/issue16.
1481
1487
1482 2004-07-18 Fernando Perez <fperez@colorado.edu>
1488 2004-07-18 Fernando Perez <fperez@colorado.edu>
1483
1489
1484 * IPython/iplib.py (__init__): Add better handling of '\' under
1490 * IPython/iplib.py (__init__): Add better handling of '\' under
1485 Win32 for filenames. After a patch by Ville.
1491 Win32 for filenames. After a patch by Ville.
1486
1492
1487 2004-07-17 Fernando Perez <fperez@colorado.edu>
1493 2004-07-17 Fernando Perez <fperez@colorado.edu>
1488
1494
1489 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1495 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1490 autocalling would be triggered for 'foo is bar' if foo is
1496 autocalling would be triggered for 'foo is bar' if foo is
1491 callable. I also cleaned up the autocall detection code to use a
1497 callable. I also cleaned up the autocall detection code to use a
1492 regexp, which is faster. Bug reported by Alexander Schmolck.
1498 regexp, which is faster. Bug reported by Alexander Schmolck.
1493
1499
1494 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1500 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1495 '?' in them would confuse the help system. Reported by Alex
1501 '?' in them would confuse the help system. Reported by Alex
1496 Schmolck.
1502 Schmolck.
1497
1503
1498 2004-07-16 Fernando Perez <fperez@colorado.edu>
1504 2004-07-16 Fernando Perez <fperez@colorado.edu>
1499
1505
1500 * IPython/GnuplotInteractive.py (__all__): added plot2.
1506 * IPython/GnuplotInteractive.py (__all__): added plot2.
1501
1507
1502 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1508 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1503 plotting dictionaries, lists or tuples of 1d arrays.
1509 plotting dictionaries, lists or tuples of 1d arrays.
1504
1510
1505 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1511 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1506 optimizations.
1512 optimizations.
1507
1513
1508 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1514 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1509 the information which was there from Janko's original IPP code:
1515 the information which was there from Janko's original IPP code:
1510
1516
1511 03.05.99 20:53 porto.ifm.uni-kiel.de
1517 03.05.99 20:53 porto.ifm.uni-kiel.de
1512 --Started changelog.
1518 --Started changelog.
1513 --make clear do what it say it does
1519 --make clear do what it say it does
1514 --added pretty output of lines from inputcache
1520 --added pretty output of lines from inputcache
1515 --Made Logger a mixin class, simplifies handling of switches
1521 --Made Logger a mixin class, simplifies handling of switches
1516 --Added own completer class. .string<TAB> expands to last history
1522 --Added own completer class. .string<TAB> expands to last history
1517 line which starts with string. The new expansion is also present
1523 line which starts with string. The new expansion is also present
1518 with Ctrl-r from the readline library. But this shows, who this
1524 with Ctrl-r from the readline library. But this shows, who this
1519 can be done for other cases.
1525 can be done for other cases.
1520 --Added convention that all shell functions should accept a
1526 --Added convention that all shell functions should accept a
1521 parameter_string This opens the door for different behaviour for
1527 parameter_string This opens the door for different behaviour for
1522 each function. @cd is a good example of this.
1528 each function. @cd is a good example of this.
1523
1529
1524 04.05.99 12:12 porto.ifm.uni-kiel.de
1530 04.05.99 12:12 porto.ifm.uni-kiel.de
1525 --added logfile rotation
1531 --added logfile rotation
1526 --added new mainloop method which freezes first the namespace
1532 --added new mainloop method which freezes first the namespace
1527
1533
1528 07.05.99 21:24 porto.ifm.uni-kiel.de
1534 07.05.99 21:24 porto.ifm.uni-kiel.de
1529 --added the docreader classes. Now there is a help system.
1535 --added the docreader classes. Now there is a help system.
1530 -This is only a first try. Currently it's not easy to put new
1536 -This is only a first try. Currently it's not easy to put new
1531 stuff in the indices. But this is the way to go. Info would be
1537 stuff in the indices. But this is the way to go. Info would be
1532 better, but HTML is every where and not everybody has an info
1538 better, but HTML is every where and not everybody has an info
1533 system installed and it's not so easy to change html-docs to info.
1539 system installed and it's not so easy to change html-docs to info.
1534 --added global logfile option
1540 --added global logfile option
1535 --there is now a hook for object inspection method pinfo needs to
1541 --there is now a hook for object inspection method pinfo needs to
1536 be provided for this. Can be reached by two '??'.
1542 be provided for this. Can be reached by two '??'.
1537
1543
1538 08.05.99 20:51 porto.ifm.uni-kiel.de
1544 08.05.99 20:51 porto.ifm.uni-kiel.de
1539 --added a README
1545 --added a README
1540 --bug in rc file. Something has changed so functions in the rc
1546 --bug in rc file. Something has changed so functions in the rc
1541 file need to reference the shell and not self. Not clear if it's a
1547 file need to reference the shell and not self. Not clear if it's a
1542 bug or feature.
1548 bug or feature.
1543 --changed rc file for new behavior
1549 --changed rc file for new behavior
1544
1550
1545 2004-07-15 Fernando Perez <fperez@colorado.edu>
1551 2004-07-15 Fernando Perez <fperez@colorado.edu>
1546
1552
1547 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1553 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1548 cache was falling out of sync in bizarre manners when multi-line
1554 cache was falling out of sync in bizarre manners when multi-line
1549 input was present. Minor optimizations and cleanup.
1555 input was present. Minor optimizations and cleanup.
1550
1556
1551 (Logger): Remove old Changelog info for cleanup. This is the
1557 (Logger): Remove old Changelog info for cleanup. This is the
1552 information which was there from Janko's original code:
1558 information which was there from Janko's original code:
1553
1559
1554 Changes to Logger: - made the default log filename a parameter
1560 Changes to Logger: - made the default log filename a parameter
1555
1561
1556 - put a check for lines beginning with !@? in log(). Needed
1562 - put a check for lines beginning with !@? in log(). Needed
1557 (even if the handlers properly log their lines) for mid-session
1563 (even if the handlers properly log their lines) for mid-session
1558 logging activation to work properly. Without this, lines logged
1564 logging activation to work properly. Without this, lines logged
1559 in mid session, which get read from the cache, would end up
1565 in mid session, which get read from the cache, would end up
1560 'bare' (with !@? in the open) in the log. Now they are caught
1566 'bare' (with !@? in the open) in the log. Now they are caught
1561 and prepended with a #.
1567 and prepended with a #.
1562
1568
1563 * IPython/iplib.py (InteractiveShell.init_readline): added check
1569 * IPython/iplib.py (InteractiveShell.init_readline): added check
1564 in case MagicCompleter fails to be defined, so we don't crash.
1570 in case MagicCompleter fails to be defined, so we don't crash.
1565
1571
1566 2004-07-13 Fernando Perez <fperez@colorado.edu>
1572 2004-07-13 Fernando Perez <fperez@colorado.edu>
1567
1573
1568 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1574 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1569 of EPS if the requested filename ends in '.eps'.
1575 of EPS if the requested filename ends in '.eps'.
1570
1576
1571 2004-07-04 Fernando Perez <fperez@colorado.edu>
1577 2004-07-04 Fernando Perez <fperez@colorado.edu>
1572
1578
1573 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1579 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1574 escaping of quotes when calling the shell.
1580 escaping of quotes when calling the shell.
1575
1581
1576 2004-07-02 Fernando Perez <fperez@colorado.edu>
1582 2004-07-02 Fernando Perez <fperez@colorado.edu>
1577
1583
1578 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1584 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1579 gettext not working because we were clobbering '_'. Fixes
1585 gettext not working because we were clobbering '_'. Fixes
1580 http://www.scipy.net/roundup/ipython/issue6.
1586 http://www.scipy.net/roundup/ipython/issue6.
1581
1587
1582 2004-07-01 Fernando Perez <fperez@colorado.edu>
1588 2004-07-01 Fernando Perez <fperez@colorado.edu>
1583
1589
1584 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1590 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1585 into @cd. Patch by Ville.
1591 into @cd. Patch by Ville.
1586
1592
1587 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1593 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1588 new function to store things after ipmaker runs. Patch by Ville.
1594 new function to store things after ipmaker runs. Patch by Ville.
1589 Eventually this will go away once ipmaker is removed and the class
1595 Eventually this will go away once ipmaker is removed and the class
1590 gets cleaned up, but for now it's ok. Key functionality here is
1596 gets cleaned up, but for now it's ok. Key functionality here is
1591 the addition of the persistent storage mechanism, a dict for
1597 the addition of the persistent storage mechanism, a dict for
1592 keeping data across sessions (for now just bookmarks, but more can
1598 keeping data across sessions (for now just bookmarks, but more can
1593 be implemented later).
1599 be implemented later).
1594
1600
1595 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1601 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1596 persistent across sections. Patch by Ville, I modified it
1602 persistent across sections. Patch by Ville, I modified it
1597 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1603 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1598 added a '-l' option to list all bookmarks.
1604 added a '-l' option to list all bookmarks.
1599
1605
1600 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1606 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1601 center for cleanup. Registered with atexit.register(). I moved
1607 center for cleanup. Registered with atexit.register(). I moved
1602 here the old exit_cleanup(). After a patch by Ville.
1608 here the old exit_cleanup(). After a patch by Ville.
1603
1609
1604 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1610 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1605 characters in the hacked shlex_split for python 2.2.
1611 characters in the hacked shlex_split for python 2.2.
1606
1612
1607 * IPython/iplib.py (file_matches): more fixes to filenames with
1613 * IPython/iplib.py (file_matches): more fixes to filenames with
1608 whitespace in them. It's not perfect, but limitations in python's
1614 whitespace in them. It's not perfect, but limitations in python's
1609 readline make it impossible to go further.
1615 readline make it impossible to go further.
1610
1616
1611 2004-06-29 Fernando Perez <fperez@colorado.edu>
1617 2004-06-29 Fernando Perez <fperez@colorado.edu>
1612
1618
1613 * IPython/iplib.py (file_matches): escape whitespace correctly in
1619 * IPython/iplib.py (file_matches): escape whitespace correctly in
1614 filename completions. Bug reported by Ville.
1620 filename completions. Bug reported by Ville.
1615
1621
1616 2004-06-28 Fernando Perez <fperez@colorado.edu>
1622 2004-06-28 Fernando Perez <fperez@colorado.edu>
1617
1623
1618 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1624 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1619 the history file will be called 'history-PROFNAME' (or just
1625 the history file will be called 'history-PROFNAME' (or just
1620 'history' if no profile is loaded). I was getting annoyed at
1626 'history' if no profile is loaded). I was getting annoyed at
1621 getting my Numerical work history clobbered by pysh sessions.
1627 getting my Numerical work history clobbered by pysh sessions.
1622
1628
1623 * IPython/iplib.py (InteractiveShell.__init__): Internal
1629 * IPython/iplib.py (InteractiveShell.__init__): Internal
1624 getoutputerror() function so that we can honor the system_verbose
1630 getoutputerror() function so that we can honor the system_verbose
1625 flag for _all_ system calls. I also added escaping of #
1631 flag for _all_ system calls. I also added escaping of #
1626 characters here to avoid confusing Itpl.
1632 characters here to avoid confusing Itpl.
1627
1633
1628 * IPython/Magic.py (shlex_split): removed call to shell in
1634 * IPython/Magic.py (shlex_split): removed call to shell in
1629 parse_options and replaced it with shlex.split(). The annoying
1635 parse_options and replaced it with shlex.split(). The annoying
1630 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1636 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1631 to backport it from 2.3, with several frail hacks (the shlex
1637 to backport it from 2.3, with several frail hacks (the shlex
1632 module is rather limited in 2.2). Thanks to a suggestion by Ville
1638 module is rather limited in 2.2). Thanks to a suggestion by Ville
1633 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1639 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1634 problem.
1640 problem.
1635
1641
1636 (Magic.magic_system_verbose): new toggle to print the actual
1642 (Magic.magic_system_verbose): new toggle to print the actual
1637 system calls made by ipython. Mainly for debugging purposes.
1643 system calls made by ipython. Mainly for debugging purposes.
1638
1644
1639 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1645 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1640 doesn't support persistence. Reported (and fix suggested) by
1646 doesn't support persistence. Reported (and fix suggested) by
1641 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1647 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1642
1648
1643 2004-06-26 Fernando Perez <fperez@colorado.edu>
1649 2004-06-26 Fernando Perez <fperez@colorado.edu>
1644
1650
1645 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1651 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1646 continue prompts.
1652 continue prompts.
1647
1653
1648 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1654 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1649 function (basically a big docstring) and a few more things here to
1655 function (basically a big docstring) and a few more things here to
1650 speedup startup. pysh.py is now very lightweight. We want because
1656 speedup startup. pysh.py is now very lightweight. We want because
1651 it gets execfile'd, while InterpreterExec gets imported, so
1657 it gets execfile'd, while InterpreterExec gets imported, so
1652 byte-compilation saves time.
1658 byte-compilation saves time.
1653
1659
1654 2004-06-25 Fernando Perez <fperez@colorado.edu>
1660 2004-06-25 Fernando Perez <fperez@colorado.edu>
1655
1661
1656 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1662 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1657 -NUM', which was recently broken.
1663 -NUM', which was recently broken.
1658
1664
1659 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1665 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1660 in multi-line input (but not !!, which doesn't make sense there).
1666 in multi-line input (but not !!, which doesn't make sense there).
1661
1667
1662 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1668 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1663 It's just too useful, and people can turn it off in the less
1669 It's just too useful, and people can turn it off in the less
1664 common cases where it's a problem.
1670 common cases where it's a problem.
1665
1671
1666 2004-06-24 Fernando Perez <fperez@colorado.edu>
1672 2004-06-24 Fernando Perez <fperez@colorado.edu>
1667
1673
1668 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1674 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1669 special syntaxes (like alias calling) is now allied in multi-line
1675 special syntaxes (like alias calling) is now allied in multi-line
1670 input. This is still _very_ experimental, but it's necessary for
1676 input. This is still _very_ experimental, but it's necessary for
1671 efficient shell usage combining python looping syntax with system
1677 efficient shell usage combining python looping syntax with system
1672 calls. For now it's restricted to aliases, I don't think it
1678 calls. For now it's restricted to aliases, I don't think it
1673 really even makes sense to have this for magics.
1679 really even makes sense to have this for magics.
1674
1680
1675 2004-06-23 Fernando Perez <fperez@colorado.edu>
1681 2004-06-23 Fernando Perez <fperez@colorado.edu>
1676
1682
1677 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1683 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1678 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1684 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1679
1685
1680 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1686 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1681 extensions under Windows (after code sent by Gary Bishop). The
1687 extensions under Windows (after code sent by Gary Bishop). The
1682 extensions considered 'executable' are stored in IPython's rc
1688 extensions considered 'executable' are stored in IPython's rc
1683 structure as win_exec_ext.
1689 structure as win_exec_ext.
1684
1690
1685 * IPython/genutils.py (shell): new function, like system() but
1691 * IPython/genutils.py (shell): new function, like system() but
1686 without return value. Very useful for interactive shell work.
1692 without return value. Very useful for interactive shell work.
1687
1693
1688 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1694 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1689 delete aliases.
1695 delete aliases.
1690
1696
1691 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1697 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1692 sure that the alias table doesn't contain python keywords.
1698 sure that the alias table doesn't contain python keywords.
1693
1699
1694 2004-06-21 Fernando Perez <fperez@colorado.edu>
1700 2004-06-21 Fernando Perez <fperez@colorado.edu>
1695
1701
1696 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1702 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1697 non-existent items are found in $PATH. Reported by Thorsten.
1703 non-existent items are found in $PATH. Reported by Thorsten.
1698
1704
1699 2004-06-20 Fernando Perez <fperez@colorado.edu>
1705 2004-06-20 Fernando Perez <fperez@colorado.edu>
1700
1706
1701 * IPython/iplib.py (complete): modified the completer so that the
1707 * IPython/iplib.py (complete): modified the completer so that the
1702 order of priorities can be easily changed at runtime.
1708 order of priorities can be easily changed at runtime.
1703
1709
1704 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1710 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1705 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1711 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1706
1712
1707 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1713 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1708 expand Python variables prepended with $ in all system calls. The
1714 expand Python variables prepended with $ in all system calls. The
1709 same was done to InteractiveShell.handle_shell_escape. Now all
1715 same was done to InteractiveShell.handle_shell_escape. Now all
1710 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1716 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1711 expansion of python variables and expressions according to the
1717 expansion of python variables and expressions according to the
1712 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1718 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1713
1719
1714 Though PEP-215 has been rejected, a similar (but simpler) one
1720 Though PEP-215 has been rejected, a similar (but simpler) one
1715 seems like it will go into Python 2.4, PEP-292 -
1721 seems like it will go into Python 2.4, PEP-292 -
1716 http://www.python.org/peps/pep-0292.html.
1722 http://www.python.org/peps/pep-0292.html.
1717
1723
1718 I'll keep the full syntax of PEP-215, since IPython has since the
1724 I'll keep the full syntax of PEP-215, since IPython has since the
1719 start used Ka-Ping Yee's reference implementation discussed there
1725 start used Ka-Ping Yee's reference implementation discussed there
1720 (Itpl), and I actually like the powerful semantics it offers.
1726 (Itpl), and I actually like the powerful semantics it offers.
1721
1727
1722 In order to access normal shell variables, the $ has to be escaped
1728 In order to access normal shell variables, the $ has to be escaped
1723 via an extra $. For example:
1729 via an extra $. For example:
1724
1730
1725 In [7]: PATH='a python variable'
1731 In [7]: PATH='a python variable'
1726
1732
1727 In [8]: !echo $PATH
1733 In [8]: !echo $PATH
1728 a python variable
1734 a python variable
1729
1735
1730 In [9]: !echo $$PATH
1736 In [9]: !echo $$PATH
1731 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
1737 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
1732
1738
1733 (Magic.parse_options): escape $ so the shell doesn't evaluate
1739 (Magic.parse_options): escape $ so the shell doesn't evaluate
1734 things prematurely.
1740 things prematurely.
1735
1741
1736 * IPython/iplib.py (InteractiveShell.call_alias): added the
1742 * IPython/iplib.py (InteractiveShell.call_alias): added the
1737 ability for aliases to expand python variables via $.
1743 ability for aliases to expand python variables via $.
1738
1744
1739 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
1745 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
1740 system, now there's a @rehash/@rehashx pair of magics. These work
1746 system, now there's a @rehash/@rehashx pair of magics. These work
1741 like the csh rehash command, and can be invoked at any time. They
1747 like the csh rehash command, and can be invoked at any time. They
1742 build a table of aliases to everything in the user's $PATH
1748 build a table of aliases to everything in the user's $PATH
1743 (@rehash uses everything, @rehashx is slower but only adds
1749 (@rehash uses everything, @rehashx is slower but only adds
1744 executable files). With this, the pysh.py-based shell profile can
1750 executable files). With this, the pysh.py-based shell profile can
1745 now simply call rehash upon startup, and full access to all
1751 now simply call rehash upon startup, and full access to all
1746 programs in the user's path is obtained.
1752 programs in the user's path is obtained.
1747
1753
1748 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
1754 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
1749 functionality is now fully in place. I removed the old dynamic
1755 functionality is now fully in place. I removed the old dynamic
1750 code generation based approach, in favor of a much lighter one
1756 code generation based approach, in favor of a much lighter one
1751 based on a simple dict. The advantage is that this allows me to
1757 based on a simple dict. The advantage is that this allows me to
1752 now have thousands of aliases with negligible cost (unthinkable
1758 now have thousands of aliases with negligible cost (unthinkable
1753 with the old system).
1759 with the old system).
1754
1760
1755 2004-06-19 Fernando Perez <fperez@colorado.edu>
1761 2004-06-19 Fernando Perez <fperez@colorado.edu>
1756
1762
1757 * IPython/iplib.py (__init__): extended MagicCompleter class to
1763 * IPython/iplib.py (__init__): extended MagicCompleter class to
1758 also complete (last in priority) on user aliases.
1764 also complete (last in priority) on user aliases.
1759
1765
1760 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
1766 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
1761 call to eval.
1767 call to eval.
1762 (ItplNS.__init__): Added a new class which functions like Itpl,
1768 (ItplNS.__init__): Added a new class which functions like Itpl,
1763 but allows configuring the namespace for the evaluation to occur
1769 but allows configuring the namespace for the evaluation to occur
1764 in.
1770 in.
1765
1771
1766 2004-06-18 Fernando Perez <fperez@colorado.edu>
1772 2004-06-18 Fernando Perez <fperez@colorado.edu>
1767
1773
1768 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
1774 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
1769 better message when 'exit' or 'quit' are typed (a common newbie
1775 better message when 'exit' or 'quit' are typed (a common newbie
1770 confusion).
1776 confusion).
1771
1777
1772 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
1778 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
1773 check for Windows users.
1779 check for Windows users.
1774
1780
1775 * IPython/iplib.py (InteractiveShell.user_setup): removed
1781 * IPython/iplib.py (InteractiveShell.user_setup): removed
1776 disabling of colors for Windows. I'll test at runtime and issue a
1782 disabling of colors for Windows. I'll test at runtime and issue a
1777 warning if Gary's readline isn't found, as to nudge users to
1783 warning if Gary's readline isn't found, as to nudge users to
1778 download it.
1784 download it.
1779
1785
1780 2004-06-16 Fernando Perez <fperez@colorado.edu>
1786 2004-06-16 Fernando Perez <fperez@colorado.edu>
1781
1787
1782 * IPython/genutils.py (Stream.__init__): changed to print errors
1788 * IPython/genutils.py (Stream.__init__): changed to print errors
1783 to sys.stderr. I had a circular dependency here. Now it's
1789 to sys.stderr. I had a circular dependency here. Now it's
1784 possible to run ipython as IDLE's shell (consider this pre-alpha,
1790 possible to run ipython as IDLE's shell (consider this pre-alpha,
1785 since true stdout things end up in the starting terminal instead
1791 since true stdout things end up in the starting terminal instead
1786 of IDLE's out).
1792 of IDLE's out).
1787
1793
1788 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
1794 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
1789 users who haven't # updated their prompt_in2 definitions. Remove
1795 users who haven't # updated their prompt_in2 definitions. Remove
1790 eventually.
1796 eventually.
1791 (multiple_replace): added credit to original ASPN recipe.
1797 (multiple_replace): added credit to original ASPN recipe.
1792
1798
1793 2004-06-15 Fernando Perez <fperez@colorado.edu>
1799 2004-06-15 Fernando Perez <fperez@colorado.edu>
1794
1800
1795 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
1801 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
1796 list of auto-defined aliases.
1802 list of auto-defined aliases.
1797
1803
1798 2004-06-13 Fernando Perez <fperez@colorado.edu>
1804 2004-06-13 Fernando Perez <fperez@colorado.edu>
1799
1805
1800 * setup.py (scriptfiles): Don't trigger win_post_install unless an
1806 * setup.py (scriptfiles): Don't trigger win_post_install unless an
1801 install was really requested (so setup.py can be used for other
1807 install was really requested (so setup.py can be used for other
1802 things under Windows).
1808 things under Windows).
1803
1809
1804 2004-06-10 Fernando Perez <fperez@colorado.edu>
1810 2004-06-10 Fernando Perez <fperez@colorado.edu>
1805
1811
1806 * IPython/Logger.py (Logger.create_log): Manually remove any old
1812 * IPython/Logger.py (Logger.create_log): Manually remove any old
1807 backup, since os.remove may fail under Windows. Fixes bug
1813 backup, since os.remove may fail under Windows. Fixes bug
1808 reported by Thorsten.
1814 reported by Thorsten.
1809
1815
1810 2004-06-09 Fernando Perez <fperez@colorado.edu>
1816 2004-06-09 Fernando Perez <fperez@colorado.edu>
1811
1817
1812 * examples/example-embed.py: fixed all references to %n (replaced
1818 * examples/example-embed.py: fixed all references to %n (replaced
1813 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
1819 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
1814 for all examples and the manual as well.
1820 for all examples and the manual as well.
1815
1821
1816 2004-06-08 Fernando Perez <fperez@colorado.edu>
1822 2004-06-08 Fernando Perez <fperez@colorado.edu>
1817
1823
1818 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
1824 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
1819 alignment and color management. All 3 prompt subsystems now
1825 alignment and color management. All 3 prompt subsystems now
1820 inherit from BasePrompt.
1826 inherit from BasePrompt.
1821
1827
1822 * tools/release: updates for windows installer build and tag rpms
1828 * tools/release: updates for windows installer build and tag rpms
1823 with python version (since paths are fixed).
1829 with python version (since paths are fixed).
1824
1830
1825 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
1831 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
1826 which will become eventually obsolete. Also fixed the default
1832 which will become eventually obsolete. Also fixed the default
1827 prompt_in2 to use \D, so at least new users start with the correct
1833 prompt_in2 to use \D, so at least new users start with the correct
1828 defaults.
1834 defaults.
1829 WARNING: Users with existing ipythonrc files will need to apply
1835 WARNING: Users with existing ipythonrc files will need to apply
1830 this fix manually!
1836 this fix manually!
1831
1837
1832 * setup.py: make windows installer (.exe). This is finally the
1838 * setup.py: make windows installer (.exe). This is finally the
1833 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
1839 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
1834 which I hadn't included because it required Python 2.3 (or recent
1840 which I hadn't included because it required Python 2.3 (or recent
1835 distutils).
1841 distutils).
1836
1842
1837 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
1843 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
1838 usage of new '\D' escape.
1844 usage of new '\D' escape.
1839
1845
1840 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
1846 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
1841 lacks os.getuid())
1847 lacks os.getuid())
1842 (CachedOutput.set_colors): Added the ability to turn coloring
1848 (CachedOutput.set_colors): Added the ability to turn coloring
1843 on/off with @colors even for manually defined prompt colors. It
1849 on/off with @colors even for manually defined prompt colors. It
1844 uses a nasty global, but it works safely and via the generic color
1850 uses a nasty global, but it works safely and via the generic color
1845 handling mechanism.
1851 handling mechanism.
1846 (Prompt2.__init__): Introduced new escape '\D' for continuation
1852 (Prompt2.__init__): Introduced new escape '\D' for continuation
1847 prompts. It represents the counter ('\#') as dots.
1853 prompts. It represents the counter ('\#') as dots.
1848 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
1854 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
1849 need to update their ipythonrc files and replace '%n' with '\D' in
1855 need to update their ipythonrc files and replace '%n' with '\D' in
1850 their prompt_in2 settings everywhere. Sorry, but there's
1856 their prompt_in2 settings everywhere. Sorry, but there's
1851 otherwise no clean way to get all prompts to properly align. The
1857 otherwise no clean way to get all prompts to properly align. The
1852 ipythonrc shipped with IPython has been updated.
1858 ipythonrc shipped with IPython has been updated.
1853
1859
1854 2004-06-07 Fernando Perez <fperez@colorado.edu>
1860 2004-06-07 Fernando Perez <fperez@colorado.edu>
1855
1861
1856 * setup.py (isfile): Pass local_icons option to latex2html, so the
1862 * setup.py (isfile): Pass local_icons option to latex2html, so the
1857 resulting HTML file is self-contained. Thanks to
1863 resulting HTML file is self-contained. Thanks to
1858 dryice-AT-liu.com.cn for the tip.
1864 dryice-AT-liu.com.cn for the tip.
1859
1865
1860 * pysh.py: I created a new profile 'shell', which implements a
1866 * pysh.py: I created a new profile 'shell', which implements a
1861 _rudimentary_ IPython-based shell. This is in NO WAY a realy
1867 _rudimentary_ IPython-based shell. This is in NO WAY a realy
1862 system shell, nor will it become one anytime soon. It's mainly
1868 system shell, nor will it become one anytime soon. It's mainly
1863 meant to illustrate the use of the new flexible bash-like prompts.
1869 meant to illustrate the use of the new flexible bash-like prompts.
1864 I guess it could be used by hardy souls for true shell management,
1870 I guess it could be used by hardy souls for true shell management,
1865 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
1871 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
1866 profile. This uses the InterpreterExec extension provided by
1872 profile. This uses the InterpreterExec extension provided by
1867 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
1873 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
1868
1874
1869 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
1875 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
1870 auto-align itself with the length of the previous input prompt
1876 auto-align itself with the length of the previous input prompt
1871 (taking into account the invisible color escapes).
1877 (taking into account the invisible color escapes).
1872 (CachedOutput.__init__): Large restructuring of this class. Now
1878 (CachedOutput.__init__): Large restructuring of this class. Now
1873 all three prompts (primary1, primary2, output) are proper objects,
1879 all three prompts (primary1, primary2, output) are proper objects,
1874 managed by the 'parent' CachedOutput class. The code is still a
1880 managed by the 'parent' CachedOutput class. The code is still a
1875 bit hackish (all prompts share state via a pointer to the cache),
1881 bit hackish (all prompts share state via a pointer to the cache),
1876 but it's overall far cleaner than before.
1882 but it's overall far cleaner than before.
1877
1883
1878 * IPython/genutils.py (getoutputerror): modified to add verbose,
1884 * IPython/genutils.py (getoutputerror): modified to add verbose,
1879 debug and header options. This makes the interface of all getout*
1885 debug and header options. This makes the interface of all getout*
1880 functions uniform.
1886 functions uniform.
1881 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
1887 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
1882
1888
1883 * IPython/Magic.py (Magic.default_option): added a function to
1889 * IPython/Magic.py (Magic.default_option): added a function to
1884 allow registering default options for any magic command. This
1890 allow registering default options for any magic command. This
1885 makes it easy to have profiles which customize the magics globally
1891 makes it easy to have profiles which customize the magics globally
1886 for a certain use. The values set through this function are
1892 for a certain use. The values set through this function are
1887 picked up by the parse_options() method, which all magics should
1893 picked up by the parse_options() method, which all magics should
1888 use to parse their options.
1894 use to parse their options.
1889
1895
1890 * IPython/genutils.py (warn): modified the warnings framework to
1896 * IPython/genutils.py (warn): modified the warnings framework to
1891 use the Term I/O class. I'm trying to slowly unify all of
1897 use the Term I/O class. I'm trying to slowly unify all of
1892 IPython's I/O operations to pass through Term.
1898 IPython's I/O operations to pass through Term.
1893
1899
1894 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
1900 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
1895 the secondary prompt to correctly match the length of the primary
1901 the secondary prompt to correctly match the length of the primary
1896 one for any prompt. Now multi-line code will properly line up
1902 one for any prompt. Now multi-line code will properly line up
1897 even for path dependent prompts, such as the new ones available
1903 even for path dependent prompts, such as the new ones available
1898 via the prompt_specials.
1904 via the prompt_specials.
1899
1905
1900 2004-06-06 Fernando Perez <fperez@colorado.edu>
1906 2004-06-06 Fernando Perez <fperez@colorado.edu>
1901
1907
1902 * IPython/Prompts.py (prompt_specials): Added the ability to have
1908 * IPython/Prompts.py (prompt_specials): Added the ability to have
1903 bash-like special sequences in the prompts, which get
1909 bash-like special sequences in the prompts, which get
1904 automatically expanded. Things like hostname, current working
1910 automatically expanded. Things like hostname, current working
1905 directory and username are implemented already, but it's easy to
1911 directory and username are implemented already, but it's easy to
1906 add more in the future. Thanks to a patch by W.J. van der Laan
1912 add more in the future. Thanks to a patch by W.J. van der Laan
1907 <gnufnork-AT-hetdigitalegat.nl>
1913 <gnufnork-AT-hetdigitalegat.nl>
1908 (prompt_specials): Added color support for prompt strings, so
1914 (prompt_specials): Added color support for prompt strings, so
1909 users can define arbitrary color setups for their prompts.
1915 users can define arbitrary color setups for their prompts.
1910
1916
1911 2004-06-05 Fernando Perez <fperez@colorado.edu>
1917 2004-06-05 Fernando Perez <fperez@colorado.edu>
1912
1918
1913 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
1919 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
1914 code to load Gary Bishop's readline and configure it
1920 code to load Gary Bishop's readline and configure it
1915 automatically. Thanks to Gary for help on this.
1921 automatically. Thanks to Gary for help on this.
1916
1922
1917 2004-06-01 Fernando Perez <fperez@colorado.edu>
1923 2004-06-01 Fernando Perez <fperez@colorado.edu>
1918
1924
1919 * IPython/Logger.py (Logger.create_log): fix bug for logging
1925 * IPython/Logger.py (Logger.create_log): fix bug for logging
1920 with no filename (previous fix was incomplete).
1926 with no filename (previous fix was incomplete).
1921
1927
1922 2004-05-25 Fernando Perez <fperez@colorado.edu>
1928 2004-05-25 Fernando Perez <fperez@colorado.edu>
1923
1929
1924 * IPython/Magic.py (Magic.parse_options): fix bug where naked
1930 * IPython/Magic.py (Magic.parse_options): fix bug where naked
1925 parens would get passed to the shell.
1931 parens would get passed to the shell.
1926
1932
1927 2004-05-20 Fernando Perez <fperez@colorado.edu>
1933 2004-05-20 Fernando Perez <fperez@colorado.edu>
1928
1934
1929 * IPython/Magic.py (Magic.magic_prun): changed default profile
1935 * IPython/Magic.py (Magic.magic_prun): changed default profile
1930 sort order to 'time' (the more common profiling need).
1936 sort order to 'time' (the more common profiling need).
1931
1937
1932 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
1938 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
1933 so that source code shown is guaranteed in sync with the file on
1939 so that source code shown is guaranteed in sync with the file on
1934 disk (also changed in psource). Similar fix to the one for
1940 disk (also changed in psource). Similar fix to the one for
1935 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
1941 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
1936 <yann.ledu-AT-noos.fr>.
1942 <yann.ledu-AT-noos.fr>.
1937
1943
1938 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
1944 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
1939 with a single option would not be correctly parsed. Closes
1945 with a single option would not be correctly parsed. Closes
1940 http://www.scipy.net/roundup/ipython/issue14. This bug had been
1946 http://www.scipy.net/roundup/ipython/issue14. This bug had been
1941 introduced in 0.6.0 (on 2004-05-06).
1947 introduced in 0.6.0 (on 2004-05-06).
1942
1948
1943 2004-05-13 *** Released version 0.6.0
1949 2004-05-13 *** Released version 0.6.0
1944
1950
1945 2004-05-13 Fernando Perez <fperez@colorado.edu>
1951 2004-05-13 Fernando Perez <fperez@colorado.edu>
1946
1952
1947 * debian/: Added debian/ directory to CVS, so that debian support
1953 * debian/: Added debian/ directory to CVS, so that debian support
1948 is publicly accessible. The debian package is maintained by Jack
1954 is publicly accessible. The debian package is maintained by Jack
1949 Moffit <jack-AT-xiph.org>.
1955 Moffit <jack-AT-xiph.org>.
1950
1956
1951 * Documentation: included the notes about an ipython-based system
1957 * Documentation: included the notes about an ipython-based system
1952 shell (the hypothetical 'pysh') into the new_design.pdf document,
1958 shell (the hypothetical 'pysh') into the new_design.pdf document,
1953 so that these ideas get distributed to users along with the
1959 so that these ideas get distributed to users along with the
1954 official documentation.
1960 official documentation.
1955
1961
1956 2004-05-10 Fernando Perez <fperez@colorado.edu>
1962 2004-05-10 Fernando Perez <fperez@colorado.edu>
1957
1963
1958 * IPython/Logger.py (Logger.create_log): fix recently introduced
1964 * IPython/Logger.py (Logger.create_log): fix recently introduced
1959 bug (misindented line) where logstart would fail when not given an
1965 bug (misindented line) where logstart would fail when not given an
1960 explicit filename.
1966 explicit filename.
1961
1967
1962 2004-05-09 Fernando Perez <fperez@colorado.edu>
1968 2004-05-09 Fernando Perez <fperez@colorado.edu>
1963
1969
1964 * IPython/Magic.py (Magic.parse_options): skip system call when
1970 * IPython/Magic.py (Magic.parse_options): skip system call when
1965 there are no options to look for. Faster, cleaner for the common
1971 there are no options to look for. Faster, cleaner for the common
1966 case.
1972 case.
1967
1973
1968 * Documentation: many updates to the manual: describing Windows
1974 * Documentation: many updates to the manual: describing Windows
1969 support better, Gnuplot updates, credits, misc small stuff. Also
1975 support better, Gnuplot updates, credits, misc small stuff. Also
1970 updated the new_design doc a bit.
1976 updated the new_design doc a bit.
1971
1977
1972 2004-05-06 *** Released version 0.6.0.rc1
1978 2004-05-06 *** Released version 0.6.0.rc1
1973
1979
1974 2004-05-06 Fernando Perez <fperez@colorado.edu>
1980 2004-05-06 Fernando Perez <fperez@colorado.edu>
1975
1981
1976 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
1982 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
1977 operations to use the vastly more efficient list/''.join() method.
1983 operations to use the vastly more efficient list/''.join() method.
1978 (FormattedTB.text): Fix
1984 (FormattedTB.text): Fix
1979 http://www.scipy.net/roundup/ipython/issue12 - exception source
1985 http://www.scipy.net/roundup/ipython/issue12 - exception source
1980 extract not updated after reload. Thanks to Mike Salib
1986 extract not updated after reload. Thanks to Mike Salib
1981 <msalib-AT-mit.edu> for pinning the source of the problem.
1987 <msalib-AT-mit.edu> for pinning the source of the problem.
1982 Fortunately, the solution works inside ipython and doesn't require
1988 Fortunately, the solution works inside ipython and doesn't require
1983 any changes to python proper.
1989 any changes to python proper.
1984
1990
1985 * IPython/Magic.py (Magic.parse_options): Improved to process the
1991 * IPython/Magic.py (Magic.parse_options): Improved to process the
1986 argument list as a true shell would (by actually using the
1992 argument list as a true shell would (by actually using the
1987 underlying system shell). This way, all @magics automatically get
1993 underlying system shell). This way, all @magics automatically get
1988 shell expansion for variables. Thanks to a comment by Alex
1994 shell expansion for variables. Thanks to a comment by Alex
1989 Schmolck.
1995 Schmolck.
1990
1996
1991 2004-04-04 Fernando Perez <fperez@colorado.edu>
1997 2004-04-04 Fernando Perez <fperez@colorado.edu>
1992
1998
1993 * IPython/iplib.py (InteractiveShell.interact): Added a special
1999 * IPython/iplib.py (InteractiveShell.interact): Added a special
1994 trap for a debugger quit exception, which is basically impossible
2000 trap for a debugger quit exception, which is basically impossible
1995 to handle by normal mechanisms, given what pdb does to the stack.
2001 to handle by normal mechanisms, given what pdb does to the stack.
1996 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2002 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
1997
2003
1998 2004-04-03 Fernando Perez <fperez@colorado.edu>
2004 2004-04-03 Fernando Perez <fperez@colorado.edu>
1999
2005
2000 * IPython/genutils.py (Term): Standardized the names of the Term
2006 * IPython/genutils.py (Term): Standardized the names of the Term
2001 class streams to cin/cout/cerr, following C++ naming conventions
2007 class streams to cin/cout/cerr, following C++ naming conventions
2002 (I can't use in/out/err because 'in' is not a valid attribute
2008 (I can't use in/out/err because 'in' is not a valid attribute
2003 name).
2009 name).
2004
2010
2005 * IPython/iplib.py (InteractiveShell.interact): don't increment
2011 * IPython/iplib.py (InteractiveShell.interact): don't increment
2006 the prompt if there's no user input. By Daniel 'Dang' Griffith
2012 the prompt if there's no user input. By Daniel 'Dang' Griffith
2007 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2013 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2008 Francois Pinard.
2014 Francois Pinard.
2009
2015
2010 2004-04-02 Fernando Perez <fperez@colorado.edu>
2016 2004-04-02 Fernando Perez <fperez@colorado.edu>
2011
2017
2012 * IPython/genutils.py (Stream.__init__): Modified to survive at
2018 * IPython/genutils.py (Stream.__init__): Modified to survive at
2013 least importing in contexts where stdin/out/err aren't true file
2019 least importing in contexts where stdin/out/err aren't true file
2014 objects, such as PyCrust (they lack fileno() and mode). However,
2020 objects, such as PyCrust (they lack fileno() and mode). However,
2015 the recovery facilities which rely on these things existing will
2021 the recovery facilities which rely on these things existing will
2016 not work.
2022 not work.
2017
2023
2018 2004-04-01 Fernando Perez <fperez@colorado.edu>
2024 2004-04-01 Fernando Perez <fperez@colorado.edu>
2019
2025
2020 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2026 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2021 use the new getoutputerror() function, so it properly
2027 use the new getoutputerror() function, so it properly
2022 distinguishes stdout/err.
2028 distinguishes stdout/err.
2023
2029
2024 * IPython/genutils.py (getoutputerror): added a function to
2030 * IPython/genutils.py (getoutputerror): added a function to
2025 capture separately the standard output and error of a command.
2031 capture separately the standard output and error of a command.
2026 After a comment from dang on the mailing lists. This code is
2032 After a comment from dang on the mailing lists. This code is
2027 basically a modified version of commands.getstatusoutput(), from
2033 basically a modified version of commands.getstatusoutput(), from
2028 the standard library.
2034 the standard library.
2029
2035
2030 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2036 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2031 '!!' as a special syntax (shorthand) to access @sx.
2037 '!!' as a special syntax (shorthand) to access @sx.
2032
2038
2033 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2039 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2034 command and return its output as a list split on '\n'.
2040 command and return its output as a list split on '\n'.
2035
2041
2036 2004-03-31 Fernando Perez <fperez@colorado.edu>
2042 2004-03-31 Fernando Perez <fperez@colorado.edu>
2037
2043
2038 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2044 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2039 method to dictionaries used as FakeModule instances if they lack
2045 method to dictionaries used as FakeModule instances if they lack
2040 it. At least pydoc in python2.3 breaks for runtime-defined
2046 it. At least pydoc in python2.3 breaks for runtime-defined
2041 functions without this hack. At some point I need to _really_
2047 functions without this hack. At some point I need to _really_
2042 understand what FakeModule is doing, because it's a gross hack.
2048 understand what FakeModule is doing, because it's a gross hack.
2043 But it solves Arnd's problem for now...
2049 But it solves Arnd's problem for now...
2044
2050
2045 2004-02-27 Fernando Perez <fperez@colorado.edu>
2051 2004-02-27 Fernando Perez <fperez@colorado.edu>
2046
2052
2047 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2053 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2048 mode would behave erratically. Also increased the number of
2054 mode would behave erratically. Also increased the number of
2049 possible logs in rotate mod to 999. Thanks to Rod Holland
2055 possible logs in rotate mod to 999. Thanks to Rod Holland
2050 <rhh@StructureLABS.com> for the report and fixes.
2056 <rhh@StructureLABS.com> for the report and fixes.
2051
2057
2052 2004-02-26 Fernando Perez <fperez@colorado.edu>
2058 2004-02-26 Fernando Perez <fperez@colorado.edu>
2053
2059
2054 * IPython/genutils.py (page): Check that the curses module really
2060 * IPython/genutils.py (page): Check that the curses module really
2055 has the initscr attribute before trying to use it. For some
2061 has the initscr attribute before trying to use it. For some
2056 reason, the Solaris curses module is missing this. I think this
2062 reason, the Solaris curses module is missing this. I think this
2057 should be considered a Solaris python bug, but I'm not sure.
2063 should be considered a Solaris python bug, but I'm not sure.
2058
2064
2059 2004-01-17 Fernando Perez <fperez@colorado.edu>
2065 2004-01-17 Fernando Perez <fperez@colorado.edu>
2060
2066
2061 * IPython/genutils.py (Stream.__init__): Changes to try to make
2067 * IPython/genutils.py (Stream.__init__): Changes to try to make
2062 ipython robust against stdin/out/err being closed by the user.
2068 ipython robust against stdin/out/err being closed by the user.
2063 This is 'user error' (and blocks a normal python session, at least
2069 This is 'user error' (and blocks a normal python session, at least
2064 the stdout case). However, Ipython should be able to survive such
2070 the stdout case). However, Ipython should be able to survive such
2065 instances of abuse as gracefully as possible. To simplify the
2071 instances of abuse as gracefully as possible. To simplify the
2066 coding and maintain compatibility with Gary Bishop's Term
2072 coding and maintain compatibility with Gary Bishop's Term
2067 contributions, I've made use of classmethods for this. I think
2073 contributions, I've made use of classmethods for this. I think
2068 this introduces a dependency on python 2.2.
2074 this introduces a dependency on python 2.2.
2069
2075
2070 2004-01-13 Fernando Perez <fperez@colorado.edu>
2076 2004-01-13 Fernando Perez <fperez@colorado.edu>
2071
2077
2072 * IPython/numutils.py (exp_safe): simplified the code a bit and
2078 * IPython/numutils.py (exp_safe): simplified the code a bit and
2073 removed the need for importing the kinds module altogether.
2079 removed the need for importing the kinds module altogether.
2074
2080
2075 2004-01-06 Fernando Perez <fperez@colorado.edu>
2081 2004-01-06 Fernando Perez <fperez@colorado.edu>
2076
2082
2077 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2083 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2078 a magic function instead, after some community feedback. No
2084 a magic function instead, after some community feedback. No
2079 special syntax will exist for it, but its name is deliberately
2085 special syntax will exist for it, but its name is deliberately
2080 very short.
2086 very short.
2081
2087
2082 2003-12-20 Fernando Perez <fperez@colorado.edu>
2088 2003-12-20 Fernando Perez <fperez@colorado.edu>
2083
2089
2084 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2090 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2085 new functionality, to automagically assign the result of a shell
2091 new functionality, to automagically assign the result of a shell
2086 command to a variable. I'll solicit some community feedback on
2092 command to a variable. I'll solicit some community feedback on
2087 this before making it permanent.
2093 this before making it permanent.
2088
2094
2089 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2095 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2090 requested about callables for which inspect couldn't obtain a
2096 requested about callables for which inspect couldn't obtain a
2091 proper argspec. Thanks to a crash report sent by Etienne
2097 proper argspec. Thanks to a crash report sent by Etienne
2092 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2098 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2093
2099
2094 2003-12-09 Fernando Perez <fperez@colorado.edu>
2100 2003-12-09 Fernando Perez <fperez@colorado.edu>
2095
2101
2096 * IPython/genutils.py (page): patch for the pager to work across
2102 * IPython/genutils.py (page): patch for the pager to work across
2097 various versions of Windows. By Gary Bishop.
2103 various versions of Windows. By Gary Bishop.
2098
2104
2099 2003-12-04 Fernando Perez <fperez@colorado.edu>
2105 2003-12-04 Fernando Perez <fperez@colorado.edu>
2100
2106
2101 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2107 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2102 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2108 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2103 While I tested this and it looks ok, there may still be corner
2109 While I tested this and it looks ok, there may still be corner
2104 cases I've missed.
2110 cases I've missed.
2105
2111
2106 2003-12-01 Fernando Perez <fperez@colorado.edu>
2112 2003-12-01 Fernando Perez <fperez@colorado.edu>
2107
2113
2108 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2114 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2109 where a line like 'p,q=1,2' would fail because the automagic
2115 where a line like 'p,q=1,2' would fail because the automagic
2110 system would be triggered for @p.
2116 system would be triggered for @p.
2111
2117
2112 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2118 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2113 cleanups, code unmodified.
2119 cleanups, code unmodified.
2114
2120
2115 * IPython/genutils.py (Term): added a class for IPython to handle
2121 * IPython/genutils.py (Term): added a class for IPython to handle
2116 output. In most cases it will just be a proxy for stdout/err, but
2122 output. In most cases it will just be a proxy for stdout/err, but
2117 having this allows modifications to be made for some platforms,
2123 having this allows modifications to be made for some platforms,
2118 such as handling color escapes under Windows. All of this code
2124 such as handling color escapes under Windows. All of this code
2119 was contributed by Gary Bishop, with minor modifications by me.
2125 was contributed by Gary Bishop, with minor modifications by me.
2120 The actual changes affect many files.
2126 The actual changes affect many files.
2121
2127
2122 2003-11-30 Fernando Perez <fperez@colorado.edu>
2128 2003-11-30 Fernando Perez <fperez@colorado.edu>
2123
2129
2124 * IPython/iplib.py (file_matches): new completion code, courtesy
2130 * IPython/iplib.py (file_matches): new completion code, courtesy
2125 of Jeff Collins. This enables filename completion again under
2131 of Jeff Collins. This enables filename completion again under
2126 python 2.3, which disabled it at the C level.
2132 python 2.3, which disabled it at the C level.
2127
2133
2128 2003-11-11 Fernando Perez <fperez@colorado.edu>
2134 2003-11-11 Fernando Perez <fperez@colorado.edu>
2129
2135
2130 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2136 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2131 for Numeric.array(map(...)), but often convenient.
2137 for Numeric.array(map(...)), but often convenient.
2132
2138
2133 2003-11-05 Fernando Perez <fperez@colorado.edu>
2139 2003-11-05 Fernando Perez <fperez@colorado.edu>
2134
2140
2135 * IPython/numutils.py (frange): Changed a call from int() to
2141 * IPython/numutils.py (frange): Changed a call from int() to
2136 int(round()) to prevent a problem reported with arange() in the
2142 int(round()) to prevent a problem reported with arange() in the
2137 numpy list.
2143 numpy list.
2138
2144
2139 2003-10-06 Fernando Perez <fperez@colorado.edu>
2145 2003-10-06 Fernando Perez <fperez@colorado.edu>
2140
2146
2141 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2147 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2142 prevent crashes if sys lacks an argv attribute (it happens with
2148 prevent crashes if sys lacks an argv attribute (it happens with
2143 embedded interpreters which build a bare-bones sys module).
2149 embedded interpreters which build a bare-bones sys module).
2144 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2150 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2145
2151
2146 2003-09-24 Fernando Perez <fperez@colorado.edu>
2152 2003-09-24 Fernando Perez <fperez@colorado.edu>
2147
2153
2148 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2154 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2149 to protect against poorly written user objects where __getattr__
2155 to protect against poorly written user objects where __getattr__
2150 raises exceptions other than AttributeError. Thanks to a bug
2156 raises exceptions other than AttributeError. Thanks to a bug
2151 report by Oliver Sander <osander-AT-gmx.de>.
2157 report by Oliver Sander <osander-AT-gmx.de>.
2152
2158
2153 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2159 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2154 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2160 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2155
2161
2156 2003-09-09 Fernando Perez <fperez@colorado.edu>
2162 2003-09-09 Fernando Perez <fperez@colorado.edu>
2157
2163
2158 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2164 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2159 unpacking a list whith a callable as first element would
2165 unpacking a list whith a callable as first element would
2160 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2166 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2161 Collins.
2167 Collins.
2162
2168
2163 2003-08-25 *** Released version 0.5.0
2169 2003-08-25 *** Released version 0.5.0
2164
2170
2165 2003-08-22 Fernando Perez <fperez@colorado.edu>
2171 2003-08-22 Fernando Perez <fperez@colorado.edu>
2166
2172
2167 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2173 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2168 improperly defined user exceptions. Thanks to feedback from Mark
2174 improperly defined user exceptions. Thanks to feedback from Mark
2169 Russell <mrussell-AT-verio.net>.
2175 Russell <mrussell-AT-verio.net>.
2170
2176
2171 2003-08-20 Fernando Perez <fperez@colorado.edu>
2177 2003-08-20 Fernando Perez <fperez@colorado.edu>
2172
2178
2173 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2179 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2174 printing so that it would print multi-line string forms starting
2180 printing so that it would print multi-line string forms starting
2175 with a new line. This way the formatting is better respected for
2181 with a new line. This way the formatting is better respected for
2176 objects which work hard to make nice string forms.
2182 objects which work hard to make nice string forms.
2177
2183
2178 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2184 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2179 autocall would overtake data access for objects with both
2185 autocall would overtake data access for objects with both
2180 __getitem__ and __call__.
2186 __getitem__ and __call__.
2181
2187
2182 2003-08-19 *** Released version 0.5.0-rc1
2188 2003-08-19 *** Released version 0.5.0-rc1
2183
2189
2184 2003-08-19 Fernando Perez <fperez@colorado.edu>
2190 2003-08-19 Fernando Perez <fperez@colorado.edu>
2185
2191
2186 * IPython/deep_reload.py (load_tail): single tiny change here
2192 * IPython/deep_reload.py (load_tail): single tiny change here
2187 seems to fix the long-standing bug of dreload() failing to work
2193 seems to fix the long-standing bug of dreload() failing to work
2188 for dotted names. But this module is pretty tricky, so I may have
2194 for dotted names. But this module is pretty tricky, so I may have
2189 missed some subtlety. Needs more testing!.
2195 missed some subtlety. Needs more testing!.
2190
2196
2191 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2197 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2192 exceptions which have badly implemented __str__ methods.
2198 exceptions which have badly implemented __str__ methods.
2193 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2199 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2194 which I've been getting reports about from Python 2.3 users. I
2200 which I've been getting reports about from Python 2.3 users. I
2195 wish I had a simple test case to reproduce the problem, so I could
2201 wish I had a simple test case to reproduce the problem, so I could
2196 either write a cleaner workaround or file a bug report if
2202 either write a cleaner workaround or file a bug report if
2197 necessary.
2203 necessary.
2198
2204
2199 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2205 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2200 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2206 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2201 a bug report by Tjabo Kloppenburg.
2207 a bug report by Tjabo Kloppenburg.
2202
2208
2203 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2209 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2204 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2210 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2205 seems rather unstable. Thanks to a bug report by Tjabo
2211 seems rather unstable. Thanks to a bug report by Tjabo
2206 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2212 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2207
2213
2208 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2214 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2209 this out soon because of the critical fixes in the inner loop for
2215 this out soon because of the critical fixes in the inner loop for
2210 generators.
2216 generators.
2211
2217
2212 * IPython/Magic.py (Magic.getargspec): removed. This (and
2218 * IPython/Magic.py (Magic.getargspec): removed. This (and
2213 _get_def) have been obsoleted by OInspect for a long time, I
2219 _get_def) have been obsoleted by OInspect for a long time, I
2214 hadn't noticed that they were dead code.
2220 hadn't noticed that they were dead code.
2215 (Magic._ofind): restored _ofind functionality for a few literals
2221 (Magic._ofind): restored _ofind functionality for a few literals
2216 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2222 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2217 for things like "hello".capitalize?, since that would require a
2223 for things like "hello".capitalize?, since that would require a
2218 potentially dangerous eval() again.
2224 potentially dangerous eval() again.
2219
2225
2220 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2226 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2221 logic a bit more to clean up the escapes handling and minimize the
2227 logic a bit more to clean up the escapes handling and minimize the
2222 use of _ofind to only necessary cases. The interactive 'feel' of
2228 use of _ofind to only necessary cases. The interactive 'feel' of
2223 IPython should have improved quite a bit with the changes in
2229 IPython should have improved quite a bit with the changes in
2224 _prefilter and _ofind (besides being far safer than before).
2230 _prefilter and _ofind (besides being far safer than before).
2225
2231
2226 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2232 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2227 obscure, never reported). Edit would fail to find the object to
2233 obscure, never reported). Edit would fail to find the object to
2228 edit under some circumstances.
2234 edit under some circumstances.
2229 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2235 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2230 which were causing double-calling of generators. Those eval calls
2236 which were causing double-calling of generators. Those eval calls
2231 were _very_ dangerous, since code with side effects could be
2237 were _very_ dangerous, since code with side effects could be
2232 triggered. As they say, 'eval is evil'... These were the
2238 triggered. As they say, 'eval is evil'... These were the
2233 nastiest evals in IPython. Besides, _ofind is now far simpler,
2239 nastiest evals in IPython. Besides, _ofind is now far simpler,
2234 and it should also be quite a bit faster. Its use of inspect is
2240 and it should also be quite a bit faster. Its use of inspect is
2235 also safer, so perhaps some of the inspect-related crashes I've
2241 also safer, so perhaps some of the inspect-related crashes I've
2236 seen lately with Python 2.3 might be taken care of. That will
2242 seen lately with Python 2.3 might be taken care of. That will
2237 need more testing.
2243 need more testing.
2238
2244
2239 2003-08-17 Fernando Perez <fperez@colorado.edu>
2245 2003-08-17 Fernando Perez <fperez@colorado.edu>
2240
2246
2241 * IPython/iplib.py (InteractiveShell._prefilter): significant
2247 * IPython/iplib.py (InteractiveShell._prefilter): significant
2242 simplifications to the logic for handling user escapes. Faster
2248 simplifications to the logic for handling user escapes. Faster
2243 and simpler code.
2249 and simpler code.
2244
2250
2245 2003-08-14 Fernando Perez <fperez@colorado.edu>
2251 2003-08-14 Fernando Perez <fperez@colorado.edu>
2246
2252
2247 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2253 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2248 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2254 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2249 but it should be quite a bit faster. And the recursive version
2255 but it should be quite a bit faster. And the recursive version
2250 generated O(log N) intermediate storage for all rank>1 arrays,
2256 generated O(log N) intermediate storage for all rank>1 arrays,
2251 even if they were contiguous.
2257 even if they were contiguous.
2252 (l1norm): Added this function.
2258 (l1norm): Added this function.
2253 (norm): Added this function for arbitrary norms (including
2259 (norm): Added this function for arbitrary norms (including
2254 l-infinity). l1 and l2 are still special cases for convenience
2260 l-infinity). l1 and l2 are still special cases for convenience
2255 and speed.
2261 and speed.
2256
2262
2257 2003-08-03 Fernando Perez <fperez@colorado.edu>
2263 2003-08-03 Fernando Perez <fperez@colorado.edu>
2258
2264
2259 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2265 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2260 exceptions, which now raise PendingDeprecationWarnings in Python
2266 exceptions, which now raise PendingDeprecationWarnings in Python
2261 2.3. There were some in Magic and some in Gnuplot2.
2267 2.3. There were some in Magic and some in Gnuplot2.
2262
2268
2263 2003-06-30 Fernando Perez <fperez@colorado.edu>
2269 2003-06-30 Fernando Perez <fperez@colorado.edu>
2264
2270
2265 * IPython/genutils.py (page): modified to call curses only for
2271 * IPython/genutils.py (page): modified to call curses only for
2266 terminals where TERM=='xterm'. After problems under many other
2272 terminals where TERM=='xterm'. After problems under many other
2267 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2273 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2268
2274
2269 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2275 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2270 would be triggered when readline was absent. This was just an old
2276 would be triggered when readline was absent. This was just an old
2271 debugging statement I'd forgotten to take out.
2277 debugging statement I'd forgotten to take out.
2272
2278
2273 2003-06-20 Fernando Perez <fperez@colorado.edu>
2279 2003-06-20 Fernando Perez <fperez@colorado.edu>
2274
2280
2275 * IPython/genutils.py (clock): modified to return only user time
2281 * IPython/genutils.py (clock): modified to return only user time
2276 (not counting system time), after a discussion on scipy. While
2282 (not counting system time), after a discussion on scipy. While
2277 system time may be a useful quantity occasionally, it may much
2283 system time may be a useful quantity occasionally, it may much
2278 more easily be skewed by occasional swapping or other similar
2284 more easily be skewed by occasional swapping or other similar
2279 activity.
2285 activity.
2280
2286
2281 2003-06-05 Fernando Perez <fperez@colorado.edu>
2287 2003-06-05 Fernando Perez <fperez@colorado.edu>
2282
2288
2283 * IPython/numutils.py (identity): new function, for building
2289 * IPython/numutils.py (identity): new function, for building
2284 arbitrary rank Kronecker deltas (mostly backwards compatible with
2290 arbitrary rank Kronecker deltas (mostly backwards compatible with
2285 Numeric.identity)
2291 Numeric.identity)
2286
2292
2287 2003-06-03 Fernando Perez <fperez@colorado.edu>
2293 2003-06-03 Fernando Perez <fperez@colorado.edu>
2288
2294
2289 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2295 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2290 arguments passed to magics with spaces, to allow trailing '\' to
2296 arguments passed to magics with spaces, to allow trailing '\' to
2291 work normally (mainly for Windows users).
2297 work normally (mainly for Windows users).
2292
2298
2293 2003-05-29 Fernando Perez <fperez@colorado.edu>
2299 2003-05-29 Fernando Perez <fperez@colorado.edu>
2294
2300
2295 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2301 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2296 instead of pydoc.help. This fixes a bizarre behavior where
2302 instead of pydoc.help. This fixes a bizarre behavior where
2297 printing '%s' % locals() would trigger the help system. Now
2303 printing '%s' % locals() would trigger the help system. Now
2298 ipython behaves like normal python does.
2304 ipython behaves like normal python does.
2299
2305
2300 Note that if one does 'from pydoc import help', the bizarre
2306 Note that if one does 'from pydoc import help', the bizarre
2301 behavior returns, but this will also happen in normal python, so
2307 behavior returns, but this will also happen in normal python, so
2302 it's not an ipython bug anymore (it has to do with how pydoc.help
2308 it's not an ipython bug anymore (it has to do with how pydoc.help
2303 is implemented).
2309 is implemented).
2304
2310
2305 2003-05-22 Fernando Perez <fperez@colorado.edu>
2311 2003-05-22 Fernando Perez <fperez@colorado.edu>
2306
2312
2307 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2313 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2308 return [] instead of None when nothing matches, also match to end
2314 return [] instead of None when nothing matches, also match to end
2309 of line. Patch by Gary Bishop.
2315 of line. Patch by Gary Bishop.
2310
2316
2311 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2317 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2312 protection as before, for files passed on the command line. This
2318 protection as before, for files passed on the command line. This
2313 prevents the CrashHandler from kicking in if user files call into
2319 prevents the CrashHandler from kicking in if user files call into
2314 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2320 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2315 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2321 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2316
2322
2317 2003-05-20 *** Released version 0.4.0
2323 2003-05-20 *** Released version 0.4.0
2318
2324
2319 2003-05-20 Fernando Perez <fperez@colorado.edu>
2325 2003-05-20 Fernando Perez <fperez@colorado.edu>
2320
2326
2321 * setup.py: added support for manpages. It's a bit hackish b/c of
2327 * setup.py: added support for manpages. It's a bit hackish b/c of
2322 a bug in the way the bdist_rpm distutils target handles gzipped
2328 a bug in the way the bdist_rpm distutils target handles gzipped
2323 manpages, but it works. After a patch by Jack.
2329 manpages, but it works. After a patch by Jack.
2324
2330
2325 2003-05-19 Fernando Perez <fperez@colorado.edu>
2331 2003-05-19 Fernando Perez <fperez@colorado.edu>
2326
2332
2327 * IPython/numutils.py: added a mockup of the kinds module, since
2333 * IPython/numutils.py: added a mockup of the kinds module, since
2328 it was recently removed from Numeric. This way, numutils will
2334 it was recently removed from Numeric. This way, numutils will
2329 work for all users even if they are missing kinds.
2335 work for all users even if they are missing kinds.
2330
2336
2331 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2337 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2332 failure, which can occur with SWIG-wrapped extensions. After a
2338 failure, which can occur with SWIG-wrapped extensions. After a
2333 crash report from Prabhu.
2339 crash report from Prabhu.
2334
2340
2335 2003-05-16 Fernando Perez <fperez@colorado.edu>
2341 2003-05-16 Fernando Perez <fperez@colorado.edu>
2336
2342
2337 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2343 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2338 protect ipython from user code which may call directly
2344 protect ipython from user code which may call directly
2339 sys.excepthook (this looks like an ipython crash to the user, even
2345 sys.excepthook (this looks like an ipython crash to the user, even
2340 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2346 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2341 This is especially important to help users of WxWindows, but may
2347 This is especially important to help users of WxWindows, but may
2342 also be useful in other cases.
2348 also be useful in other cases.
2343
2349
2344 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2350 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2345 an optional tb_offset to be specified, and to preserve exception
2351 an optional tb_offset to be specified, and to preserve exception
2346 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2352 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2347
2353
2348 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2354 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2349
2355
2350 2003-05-15 Fernando Perez <fperez@colorado.edu>
2356 2003-05-15 Fernando Perez <fperez@colorado.edu>
2351
2357
2352 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2358 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2353 installing for a new user under Windows.
2359 installing for a new user under Windows.
2354
2360
2355 2003-05-12 Fernando Perez <fperez@colorado.edu>
2361 2003-05-12 Fernando Perez <fperez@colorado.edu>
2356
2362
2357 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2363 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2358 handler for Emacs comint-based lines. Currently it doesn't do
2364 handler for Emacs comint-based lines. Currently it doesn't do
2359 much (but importantly, it doesn't update the history cache). In
2365 much (but importantly, it doesn't update the history cache). In
2360 the future it may be expanded if Alex needs more functionality
2366 the future it may be expanded if Alex needs more functionality
2361 there.
2367 there.
2362
2368
2363 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2369 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2364 info to crash reports.
2370 info to crash reports.
2365
2371
2366 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2372 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2367 just like Python's -c. Also fixed crash with invalid -color
2373 just like Python's -c. Also fixed crash with invalid -color
2368 option value at startup. Thanks to Will French
2374 option value at startup. Thanks to Will French
2369 <wfrench-AT-bestweb.net> for the bug report.
2375 <wfrench-AT-bestweb.net> for the bug report.
2370
2376
2371 2003-05-09 Fernando Perez <fperez@colorado.edu>
2377 2003-05-09 Fernando Perez <fperez@colorado.edu>
2372
2378
2373 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2379 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2374 to EvalDict (it's a mapping, after all) and simplified its code
2380 to EvalDict (it's a mapping, after all) and simplified its code
2375 quite a bit, after a nice discussion on c.l.py where Gustavo
2381 quite a bit, after a nice discussion on c.l.py where Gustavo
2376 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2382 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2377
2383
2378 2003-04-30 Fernando Perez <fperez@colorado.edu>
2384 2003-04-30 Fernando Perez <fperez@colorado.edu>
2379
2385
2380 * IPython/genutils.py (timings_out): modified it to reduce its
2386 * IPython/genutils.py (timings_out): modified it to reduce its
2381 overhead in the common reps==1 case.
2387 overhead in the common reps==1 case.
2382
2388
2383 2003-04-29 Fernando Perez <fperez@colorado.edu>
2389 2003-04-29 Fernando Perez <fperez@colorado.edu>
2384
2390
2385 * IPython/genutils.py (timings_out): Modified to use the resource
2391 * IPython/genutils.py (timings_out): Modified to use the resource
2386 module, which avoids the wraparound problems of time.clock().
2392 module, which avoids the wraparound problems of time.clock().
2387
2393
2388 2003-04-17 *** Released version 0.2.15pre4
2394 2003-04-17 *** Released version 0.2.15pre4
2389
2395
2390 2003-04-17 Fernando Perez <fperez@colorado.edu>
2396 2003-04-17 Fernando Perez <fperez@colorado.edu>
2391
2397
2392 * setup.py (scriptfiles): Split windows-specific stuff over to a
2398 * setup.py (scriptfiles): Split windows-specific stuff over to a
2393 separate file, in an attempt to have a Windows GUI installer.
2399 separate file, in an attempt to have a Windows GUI installer.
2394 That didn't work, but part of the groundwork is done.
2400 That didn't work, but part of the groundwork is done.
2395
2401
2396 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2402 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2397 indent/unindent with 4 spaces. Particularly useful in combination
2403 indent/unindent with 4 spaces. Particularly useful in combination
2398 with the new auto-indent option.
2404 with the new auto-indent option.
2399
2405
2400 2003-04-16 Fernando Perez <fperez@colorado.edu>
2406 2003-04-16 Fernando Perez <fperez@colorado.edu>
2401
2407
2402 * IPython/Magic.py: various replacements of self.rc for
2408 * IPython/Magic.py: various replacements of self.rc for
2403 self.shell.rc. A lot more remains to be done to fully disentangle
2409 self.shell.rc. A lot more remains to be done to fully disentangle
2404 this class from the main Shell class.
2410 this class from the main Shell class.
2405
2411
2406 * IPython/GnuplotRuntime.py: added checks for mouse support so
2412 * IPython/GnuplotRuntime.py: added checks for mouse support so
2407 that we don't try to enable it if the current gnuplot doesn't
2413 that we don't try to enable it if the current gnuplot doesn't
2408 really support it. Also added checks so that we don't try to
2414 really support it. Also added checks so that we don't try to
2409 enable persist under Windows (where Gnuplot doesn't recognize the
2415 enable persist under Windows (where Gnuplot doesn't recognize the
2410 option).
2416 option).
2411
2417
2412 * IPython/iplib.py (InteractiveShell.interact): Added optional
2418 * IPython/iplib.py (InteractiveShell.interact): Added optional
2413 auto-indenting code, after a patch by King C. Shu
2419 auto-indenting code, after a patch by King C. Shu
2414 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2420 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2415 get along well with pasting indented code. If I ever figure out
2421 get along well with pasting indented code. If I ever figure out
2416 how to make that part go well, it will become on by default.
2422 how to make that part go well, it will become on by default.
2417
2423
2418 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2424 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2419 crash ipython if there was an unmatched '%' in the user's prompt
2425 crash ipython if there was an unmatched '%' in the user's prompt
2420 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2426 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2421
2427
2422 * IPython/iplib.py (InteractiveShell.interact): removed the
2428 * IPython/iplib.py (InteractiveShell.interact): removed the
2423 ability to ask the user whether he wants to crash or not at the
2429 ability to ask the user whether he wants to crash or not at the
2424 'last line' exception handler. Calling functions at that point
2430 'last line' exception handler. Calling functions at that point
2425 changes the stack, and the error reports would have incorrect
2431 changes the stack, and the error reports would have incorrect
2426 tracebacks.
2432 tracebacks.
2427
2433
2428 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2434 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2429 pass through a peger a pretty-printed form of any object. After a
2435 pass through a peger a pretty-printed form of any object. After a
2430 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2436 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2431
2437
2432 2003-04-14 Fernando Perez <fperez@colorado.edu>
2438 2003-04-14 Fernando Perez <fperez@colorado.edu>
2433
2439
2434 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2440 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2435 all files in ~ would be modified at first install (instead of
2441 all files in ~ would be modified at first install (instead of
2436 ~/.ipython). This could be potentially disastrous, as the
2442 ~/.ipython). This could be potentially disastrous, as the
2437 modification (make line-endings native) could damage binary files.
2443 modification (make line-endings native) could damage binary files.
2438
2444
2439 2003-04-10 Fernando Perez <fperez@colorado.edu>
2445 2003-04-10 Fernando Perez <fperez@colorado.edu>
2440
2446
2441 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2447 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2442 handle only lines which are invalid python. This now means that
2448 handle only lines which are invalid python. This now means that
2443 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2449 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2444 for the bug report.
2450 for the bug report.
2445
2451
2446 2003-04-01 Fernando Perez <fperez@colorado.edu>
2452 2003-04-01 Fernando Perez <fperez@colorado.edu>
2447
2453
2448 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2454 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2449 where failing to set sys.last_traceback would crash pdb.pm().
2455 where failing to set sys.last_traceback would crash pdb.pm().
2450 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2456 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2451 report.
2457 report.
2452
2458
2453 2003-03-25 Fernando Perez <fperez@colorado.edu>
2459 2003-03-25 Fernando Perez <fperez@colorado.edu>
2454
2460
2455 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2461 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2456 before printing it (it had a lot of spurious blank lines at the
2462 before printing it (it had a lot of spurious blank lines at the
2457 end).
2463 end).
2458
2464
2459 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2465 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2460 output would be sent 21 times! Obviously people don't use this
2466 output would be sent 21 times! Obviously people don't use this
2461 too often, or I would have heard about it.
2467 too often, or I would have heard about it.
2462
2468
2463 2003-03-24 Fernando Perez <fperez@colorado.edu>
2469 2003-03-24 Fernando Perez <fperez@colorado.edu>
2464
2470
2465 * setup.py (scriptfiles): renamed the data_files parameter from
2471 * setup.py (scriptfiles): renamed the data_files parameter from
2466 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2472 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2467 for the patch.
2473 for the patch.
2468
2474
2469 2003-03-20 Fernando Perez <fperez@colorado.edu>
2475 2003-03-20 Fernando Perez <fperez@colorado.edu>
2470
2476
2471 * IPython/genutils.py (error): added error() and fatal()
2477 * IPython/genutils.py (error): added error() and fatal()
2472 functions.
2478 functions.
2473
2479
2474 2003-03-18 *** Released version 0.2.15pre3
2480 2003-03-18 *** Released version 0.2.15pre3
2475
2481
2476 2003-03-18 Fernando Perez <fperez@colorado.edu>
2482 2003-03-18 Fernando Perez <fperez@colorado.edu>
2477
2483
2478 * setupext/install_data_ext.py
2484 * setupext/install_data_ext.py
2479 (install_data_ext.initialize_options): Class contributed by Jack
2485 (install_data_ext.initialize_options): Class contributed by Jack
2480 Moffit for fixing the old distutils hack. He is sending this to
2486 Moffit for fixing the old distutils hack. He is sending this to
2481 the distutils folks so in the future we may not need it as a
2487 the distutils folks so in the future we may not need it as a
2482 private fix.
2488 private fix.
2483
2489
2484 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2490 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2485 changes for Debian packaging. See his patch for full details.
2491 changes for Debian packaging. See his patch for full details.
2486 The old distutils hack of making the ipythonrc* files carry a
2492 The old distutils hack of making the ipythonrc* files carry a
2487 bogus .py extension is gone, at last. Examples were moved to a
2493 bogus .py extension is gone, at last. Examples were moved to a
2488 separate subdir under doc/, and the separate executable scripts
2494 separate subdir under doc/, and the separate executable scripts
2489 now live in their own directory. Overall a great cleanup. The
2495 now live in their own directory. Overall a great cleanup. The
2490 manual was updated to use the new files, and setup.py has been
2496 manual was updated to use the new files, and setup.py has been
2491 fixed for this setup.
2497 fixed for this setup.
2492
2498
2493 * IPython/PyColorize.py (Parser.usage): made non-executable and
2499 * IPython/PyColorize.py (Parser.usage): made non-executable and
2494 created a pycolor wrapper around it to be included as a script.
2500 created a pycolor wrapper around it to be included as a script.
2495
2501
2496 2003-03-12 *** Released version 0.2.15pre2
2502 2003-03-12 *** Released version 0.2.15pre2
2497
2503
2498 2003-03-12 Fernando Perez <fperez@colorado.edu>
2504 2003-03-12 Fernando Perez <fperez@colorado.edu>
2499
2505
2500 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2506 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2501 long-standing problem with garbage characters in some terminals.
2507 long-standing problem with garbage characters in some terminals.
2502 The issue was really that the \001 and \002 escapes must _only_ be
2508 The issue was really that the \001 and \002 escapes must _only_ be
2503 passed to input prompts (which call readline), but _never_ to
2509 passed to input prompts (which call readline), but _never_ to
2504 normal text to be printed on screen. I changed ColorANSI to have
2510 normal text to be printed on screen. I changed ColorANSI to have
2505 two classes: TermColors and InputTermColors, each with the
2511 two classes: TermColors and InputTermColors, each with the
2506 appropriate escapes for input prompts or normal text. The code in
2512 appropriate escapes for input prompts or normal text. The code in
2507 Prompts.py got slightly more complicated, but this very old and
2513 Prompts.py got slightly more complicated, but this very old and
2508 annoying bug is finally fixed.
2514 annoying bug is finally fixed.
2509
2515
2510 All the credit for nailing down the real origin of this problem
2516 All the credit for nailing down the real origin of this problem
2511 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2517 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2512 *Many* thanks to him for spending quite a bit of effort on this.
2518 *Many* thanks to him for spending quite a bit of effort on this.
2513
2519
2514 2003-03-05 *** Released version 0.2.15pre1
2520 2003-03-05 *** Released version 0.2.15pre1
2515
2521
2516 2003-03-03 Fernando Perez <fperez@colorado.edu>
2522 2003-03-03 Fernando Perez <fperez@colorado.edu>
2517
2523
2518 * IPython/FakeModule.py: Moved the former _FakeModule to a
2524 * IPython/FakeModule.py: Moved the former _FakeModule to a
2519 separate file, because it's also needed by Magic (to fix a similar
2525 separate file, because it's also needed by Magic (to fix a similar
2520 pickle-related issue in @run).
2526 pickle-related issue in @run).
2521
2527
2522 2003-03-02 Fernando Perez <fperez@colorado.edu>
2528 2003-03-02 Fernando Perez <fperez@colorado.edu>
2523
2529
2524 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2530 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2525 the autocall option at runtime.
2531 the autocall option at runtime.
2526 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2532 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2527 across Magic.py to start separating Magic from InteractiveShell.
2533 across Magic.py to start separating Magic from InteractiveShell.
2528 (Magic._ofind): Fixed to return proper namespace for dotted
2534 (Magic._ofind): Fixed to return proper namespace for dotted
2529 names. Before, a dotted name would always return 'not currently
2535 names. Before, a dotted name would always return 'not currently
2530 defined', because it would find the 'parent'. s.x would be found,
2536 defined', because it would find the 'parent'. s.x would be found,
2531 but since 'x' isn't defined by itself, it would get confused.
2537 but since 'x' isn't defined by itself, it would get confused.
2532 (Magic.magic_run): Fixed pickling problems reported by Ralf
2538 (Magic.magic_run): Fixed pickling problems reported by Ralf
2533 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2539 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2534 that I'd used when Mike Heeter reported similar issues at the
2540 that I'd used when Mike Heeter reported similar issues at the
2535 top-level, but now for @run. It boils down to injecting the
2541 top-level, but now for @run. It boils down to injecting the
2536 namespace where code is being executed with something that looks
2542 namespace where code is being executed with something that looks
2537 enough like a module to fool pickle.dump(). Since a pickle stores
2543 enough like a module to fool pickle.dump(). Since a pickle stores
2538 a named reference to the importing module, we need this for
2544 a named reference to the importing module, we need this for
2539 pickles to save something sensible.
2545 pickles to save something sensible.
2540
2546
2541 * IPython/ipmaker.py (make_IPython): added an autocall option.
2547 * IPython/ipmaker.py (make_IPython): added an autocall option.
2542
2548
2543 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2549 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2544 the auto-eval code. Now autocalling is an option, and the code is
2550 the auto-eval code. Now autocalling is an option, and the code is
2545 also vastly safer. There is no more eval() involved at all.
2551 also vastly safer. There is no more eval() involved at all.
2546
2552
2547 2003-03-01 Fernando Perez <fperez@colorado.edu>
2553 2003-03-01 Fernando Perez <fperez@colorado.edu>
2548
2554
2549 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2555 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2550 dict with named keys instead of a tuple.
2556 dict with named keys instead of a tuple.
2551
2557
2552 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2558 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2553
2559
2554 * setup.py (make_shortcut): Fixed message about directories
2560 * setup.py (make_shortcut): Fixed message about directories
2555 created during Windows installation (the directories were ok, just
2561 created during Windows installation (the directories were ok, just
2556 the printed message was misleading). Thanks to Chris Liechti
2562 the printed message was misleading). Thanks to Chris Liechti
2557 <cliechti-AT-gmx.net> for the heads up.
2563 <cliechti-AT-gmx.net> for the heads up.
2558
2564
2559 2003-02-21 Fernando Perez <fperez@colorado.edu>
2565 2003-02-21 Fernando Perez <fperez@colorado.edu>
2560
2566
2561 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2567 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2562 of ValueError exception when checking for auto-execution. This
2568 of ValueError exception when checking for auto-execution. This
2563 one is raised by things like Numeric arrays arr.flat when the
2569 one is raised by things like Numeric arrays arr.flat when the
2564 array is non-contiguous.
2570 array is non-contiguous.
2565
2571
2566 2003-01-31 Fernando Perez <fperez@colorado.edu>
2572 2003-01-31 Fernando Perez <fperez@colorado.edu>
2567
2573
2568 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2574 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2569 not return any value at all (even though the command would get
2575 not return any value at all (even though the command would get
2570 executed).
2576 executed).
2571 (xsys): Flush stdout right after printing the command to ensure
2577 (xsys): Flush stdout right after printing the command to ensure
2572 proper ordering of commands and command output in the total
2578 proper ordering of commands and command output in the total
2573 output.
2579 output.
2574 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2580 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2575 system/getoutput as defaults. The old ones are kept for
2581 system/getoutput as defaults. The old ones are kept for
2576 compatibility reasons, so no code which uses this library needs
2582 compatibility reasons, so no code which uses this library needs
2577 changing.
2583 changing.
2578
2584
2579 2003-01-27 *** Released version 0.2.14
2585 2003-01-27 *** Released version 0.2.14
2580
2586
2581 2003-01-25 Fernando Perez <fperez@colorado.edu>
2587 2003-01-25 Fernando Perez <fperez@colorado.edu>
2582
2588
2583 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2589 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2584 functions defined in previous edit sessions could not be re-edited
2590 functions defined in previous edit sessions could not be re-edited
2585 (because the temp files were immediately removed). Now temp files
2591 (because the temp files were immediately removed). Now temp files
2586 are removed only at IPython's exit.
2592 are removed only at IPython's exit.
2587 (Magic.magic_run): Improved @run to perform shell-like expansions
2593 (Magic.magic_run): Improved @run to perform shell-like expansions
2588 on its arguments (~users and $VARS). With this, @run becomes more
2594 on its arguments (~users and $VARS). With this, @run becomes more
2589 like a normal command-line.
2595 like a normal command-line.
2590
2596
2591 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2597 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2592 bugs related to embedding and cleaned up that code. A fairly
2598 bugs related to embedding and cleaned up that code. A fairly
2593 important one was the impossibility to access the global namespace
2599 important one was the impossibility to access the global namespace
2594 through the embedded IPython (only local variables were visible).
2600 through the embedded IPython (only local variables were visible).
2595
2601
2596 2003-01-14 Fernando Perez <fperez@colorado.edu>
2602 2003-01-14 Fernando Perez <fperez@colorado.edu>
2597
2603
2598 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2604 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2599 auto-calling to be a bit more conservative. Now it doesn't get
2605 auto-calling to be a bit more conservative. Now it doesn't get
2600 triggered if any of '!=()<>' are in the rest of the input line, to
2606 triggered if any of '!=()<>' are in the rest of the input line, to
2601 allow comparing callables. Thanks to Alex for the heads up.
2607 allow comparing callables. Thanks to Alex for the heads up.
2602
2608
2603 2003-01-07 Fernando Perez <fperez@colorado.edu>
2609 2003-01-07 Fernando Perez <fperez@colorado.edu>
2604
2610
2605 * IPython/genutils.py (page): fixed estimation of the number of
2611 * IPython/genutils.py (page): fixed estimation of the number of
2606 lines in a string to be paged to simply count newlines. This
2612 lines in a string to be paged to simply count newlines. This
2607 prevents over-guessing due to embedded escape sequences. A better
2613 prevents over-guessing due to embedded escape sequences. A better
2608 long-term solution would involve stripping out the control chars
2614 long-term solution would involve stripping out the control chars
2609 for the count, but it's potentially so expensive I just don't
2615 for the count, but it's potentially so expensive I just don't
2610 think it's worth doing.
2616 think it's worth doing.
2611
2617
2612 2002-12-19 *** Released version 0.2.14pre50
2618 2002-12-19 *** Released version 0.2.14pre50
2613
2619
2614 2002-12-19 Fernando Perez <fperez@colorado.edu>
2620 2002-12-19 Fernando Perez <fperez@colorado.edu>
2615
2621
2616 * tools/release (version): Changed release scripts to inform
2622 * tools/release (version): Changed release scripts to inform
2617 Andrea and build a NEWS file with a list of recent changes.
2623 Andrea and build a NEWS file with a list of recent changes.
2618
2624
2619 * IPython/ColorANSI.py (__all__): changed terminal detection
2625 * IPython/ColorANSI.py (__all__): changed terminal detection
2620 code. Seems to work better for xterms without breaking
2626 code. Seems to work better for xterms without breaking
2621 konsole. Will need more testing to determine if WinXP and Mac OSX
2627 konsole. Will need more testing to determine if WinXP and Mac OSX
2622 also work ok.
2628 also work ok.
2623
2629
2624 2002-12-18 *** Released version 0.2.14pre49
2630 2002-12-18 *** Released version 0.2.14pre49
2625
2631
2626 2002-12-18 Fernando Perez <fperez@colorado.edu>
2632 2002-12-18 Fernando Perez <fperez@colorado.edu>
2627
2633
2628 * Docs: added new info about Mac OSX, from Andrea.
2634 * Docs: added new info about Mac OSX, from Andrea.
2629
2635
2630 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2636 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2631 allow direct plotting of python strings whose format is the same
2637 allow direct plotting of python strings whose format is the same
2632 of gnuplot data files.
2638 of gnuplot data files.
2633
2639
2634 2002-12-16 Fernando Perez <fperez@colorado.edu>
2640 2002-12-16 Fernando Perez <fperez@colorado.edu>
2635
2641
2636 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2642 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2637 value of exit question to be acknowledged.
2643 value of exit question to be acknowledged.
2638
2644
2639 2002-12-03 Fernando Perez <fperez@colorado.edu>
2645 2002-12-03 Fernando Perez <fperez@colorado.edu>
2640
2646
2641 * IPython/ipmaker.py: removed generators, which had been added
2647 * IPython/ipmaker.py: removed generators, which had been added
2642 by mistake in an earlier debugging run. This was causing trouble
2648 by mistake in an earlier debugging run. This was causing trouble
2643 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2649 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2644 for pointing this out.
2650 for pointing this out.
2645
2651
2646 2002-11-17 Fernando Perez <fperez@colorado.edu>
2652 2002-11-17 Fernando Perez <fperez@colorado.edu>
2647
2653
2648 * Manual: updated the Gnuplot section.
2654 * Manual: updated the Gnuplot section.
2649
2655
2650 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2656 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2651 a much better split of what goes in Runtime and what goes in
2657 a much better split of what goes in Runtime and what goes in
2652 Interactive.
2658 Interactive.
2653
2659
2654 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2660 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2655 being imported from iplib.
2661 being imported from iplib.
2656
2662
2657 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2663 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2658 for command-passing. Now the global Gnuplot instance is called
2664 for command-passing. Now the global Gnuplot instance is called
2659 'gp' instead of 'g', which was really a far too fragile and
2665 'gp' instead of 'g', which was really a far too fragile and
2660 common name.
2666 common name.
2661
2667
2662 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2668 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2663 bounding boxes generated by Gnuplot for square plots.
2669 bounding boxes generated by Gnuplot for square plots.
2664
2670
2665 * IPython/genutils.py (popkey): new function added. I should
2671 * IPython/genutils.py (popkey): new function added. I should
2666 suggest this on c.l.py as a dict method, it seems useful.
2672 suggest this on c.l.py as a dict method, it seems useful.
2667
2673
2668 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2674 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2669 to transparently handle PostScript generation. MUCH better than
2675 to transparently handle PostScript generation. MUCH better than
2670 the previous plot_eps/replot_eps (which I removed now). The code
2676 the previous plot_eps/replot_eps (which I removed now). The code
2671 is also fairly clean and well documented now (including
2677 is also fairly clean and well documented now (including
2672 docstrings).
2678 docstrings).
2673
2679
2674 2002-11-13 Fernando Perez <fperez@colorado.edu>
2680 2002-11-13 Fernando Perez <fperez@colorado.edu>
2675
2681
2676 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2682 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2677 (inconsistent with options).
2683 (inconsistent with options).
2678
2684
2679 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2685 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2680 manually disabled, I don't know why. Fixed it.
2686 manually disabled, I don't know why. Fixed it.
2681 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2687 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2682 eps output.
2688 eps output.
2683
2689
2684 2002-11-12 Fernando Perez <fperez@colorado.edu>
2690 2002-11-12 Fernando Perez <fperez@colorado.edu>
2685
2691
2686 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2692 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2687 don't propagate up to caller. Fixes crash reported by François
2693 don't propagate up to caller. Fixes crash reported by François
2688 Pinard.
2694 Pinard.
2689
2695
2690 2002-11-09 Fernando Perez <fperez@colorado.edu>
2696 2002-11-09 Fernando Perez <fperez@colorado.edu>
2691
2697
2692 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2698 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2693 history file for new users.
2699 history file for new users.
2694 (make_IPython): fixed bug where initial install would leave the
2700 (make_IPython): fixed bug where initial install would leave the
2695 user running in the .ipython dir.
2701 user running in the .ipython dir.
2696 (make_IPython): fixed bug where config dir .ipython would be
2702 (make_IPython): fixed bug where config dir .ipython would be
2697 created regardless of the given -ipythondir option. Thanks to Cory
2703 created regardless of the given -ipythondir option. Thanks to Cory
2698 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2704 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2699
2705
2700 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2706 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2701 type confirmations. Will need to use it in all of IPython's code
2707 type confirmations. Will need to use it in all of IPython's code
2702 consistently.
2708 consistently.
2703
2709
2704 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2710 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2705 context to print 31 lines instead of the default 5. This will make
2711 context to print 31 lines instead of the default 5. This will make
2706 the crash reports extremely detailed in case the problem is in
2712 the crash reports extremely detailed in case the problem is in
2707 libraries I don't have access to.
2713 libraries I don't have access to.
2708
2714
2709 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2715 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2710 line of defense' code to still crash, but giving users fair
2716 line of defense' code to still crash, but giving users fair
2711 warning. I don't want internal errors to go unreported: if there's
2717 warning. I don't want internal errors to go unreported: if there's
2712 an internal problem, IPython should crash and generate a full
2718 an internal problem, IPython should crash and generate a full
2713 report.
2719 report.
2714
2720
2715 2002-11-08 Fernando Perez <fperez@colorado.edu>
2721 2002-11-08 Fernando Perez <fperez@colorado.edu>
2716
2722
2717 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2723 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2718 otherwise uncaught exceptions which can appear if people set
2724 otherwise uncaught exceptions which can appear if people set
2719 sys.stdout to something badly broken. Thanks to a crash report
2725 sys.stdout to something badly broken. Thanks to a crash report
2720 from henni-AT-mail.brainbot.com.
2726 from henni-AT-mail.brainbot.com.
2721
2727
2722 2002-11-04 Fernando Perez <fperez@colorado.edu>
2728 2002-11-04 Fernando Perez <fperez@colorado.edu>
2723
2729
2724 * IPython/iplib.py (InteractiveShell.interact): added
2730 * IPython/iplib.py (InteractiveShell.interact): added
2725 __IPYTHON__active to the builtins. It's a flag which goes on when
2731 __IPYTHON__active to the builtins. It's a flag which goes on when
2726 the interaction starts and goes off again when it stops. This
2732 the interaction starts and goes off again when it stops. This
2727 allows embedding code to detect being inside IPython. Before this
2733 allows embedding code to detect being inside IPython. Before this
2728 was done via __IPYTHON__, but that only shows that an IPython
2734 was done via __IPYTHON__, but that only shows that an IPython
2729 instance has been created.
2735 instance has been created.
2730
2736
2731 * IPython/Magic.py (Magic.magic_env): I realized that in a
2737 * IPython/Magic.py (Magic.magic_env): I realized that in a
2732 UserDict, instance.data holds the data as a normal dict. So I
2738 UserDict, instance.data holds the data as a normal dict. So I
2733 modified @env to return os.environ.data instead of rebuilding a
2739 modified @env to return os.environ.data instead of rebuilding a
2734 dict by hand.
2740 dict by hand.
2735
2741
2736 2002-11-02 Fernando Perez <fperez@colorado.edu>
2742 2002-11-02 Fernando Perez <fperez@colorado.edu>
2737
2743
2738 * IPython/genutils.py (warn): changed so that level 1 prints no
2744 * IPython/genutils.py (warn): changed so that level 1 prints no
2739 header. Level 2 is now the default (with 'WARNING' header, as
2745 header. Level 2 is now the default (with 'WARNING' header, as
2740 before). I think I tracked all places where changes were needed in
2746 before). I think I tracked all places where changes were needed in
2741 IPython, but outside code using the old level numbering may have
2747 IPython, but outside code using the old level numbering may have
2742 broken.
2748 broken.
2743
2749
2744 * IPython/iplib.py (InteractiveShell.runcode): added this to
2750 * IPython/iplib.py (InteractiveShell.runcode): added this to
2745 handle the tracebacks in SystemExit traps correctly. The previous
2751 handle the tracebacks in SystemExit traps correctly. The previous
2746 code (through interact) was printing more of the stack than
2752 code (through interact) was printing more of the stack than
2747 necessary, showing IPython internal code to the user.
2753 necessary, showing IPython internal code to the user.
2748
2754
2749 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
2755 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
2750 default. Now that the default at the confirmation prompt is yes,
2756 default. Now that the default at the confirmation prompt is yes,
2751 it's not so intrusive. François' argument that ipython sessions
2757 it's not so intrusive. François' argument that ipython sessions
2752 tend to be complex enough not to lose them from an accidental C-d,
2758 tend to be complex enough not to lose them from an accidental C-d,
2753 is a valid one.
2759 is a valid one.
2754
2760
2755 * IPython/iplib.py (InteractiveShell.interact): added a
2761 * IPython/iplib.py (InteractiveShell.interact): added a
2756 showtraceback() call to the SystemExit trap, and modified the exit
2762 showtraceback() call to the SystemExit trap, and modified the exit
2757 confirmation to have yes as the default.
2763 confirmation to have yes as the default.
2758
2764
2759 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
2765 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
2760 this file. It's been gone from the code for a long time, this was
2766 this file. It's been gone from the code for a long time, this was
2761 simply leftover junk.
2767 simply leftover junk.
2762
2768
2763 2002-11-01 Fernando Perez <fperez@colorado.edu>
2769 2002-11-01 Fernando Perez <fperez@colorado.edu>
2764
2770
2765 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
2771 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
2766 added. If set, IPython now traps EOF and asks for
2772 added. If set, IPython now traps EOF and asks for
2767 confirmation. After a request by François Pinard.
2773 confirmation. After a request by François Pinard.
2768
2774
2769 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
2775 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
2770 of @abort, and with a new (better) mechanism for handling the
2776 of @abort, and with a new (better) mechanism for handling the
2771 exceptions.
2777 exceptions.
2772
2778
2773 2002-10-27 Fernando Perez <fperez@colorado.edu>
2779 2002-10-27 Fernando Perez <fperez@colorado.edu>
2774
2780
2775 * IPython/usage.py (__doc__): updated the --help information and
2781 * IPython/usage.py (__doc__): updated the --help information and
2776 the ipythonrc file to indicate that -log generates
2782 the ipythonrc file to indicate that -log generates
2777 ./ipython.log. Also fixed the corresponding info in @logstart.
2783 ./ipython.log. Also fixed the corresponding info in @logstart.
2778 This and several other fixes in the manuals thanks to reports by
2784 This and several other fixes in the manuals thanks to reports by
2779 François Pinard <pinard-AT-iro.umontreal.ca>.
2785 François Pinard <pinard-AT-iro.umontreal.ca>.
2780
2786
2781 * IPython/Logger.py (Logger.switch_log): Fixed error message to
2787 * IPython/Logger.py (Logger.switch_log): Fixed error message to
2782 refer to @logstart (instead of @log, which doesn't exist).
2788 refer to @logstart (instead of @log, which doesn't exist).
2783
2789
2784 * IPython/iplib.py (InteractiveShell._prefilter): fixed
2790 * IPython/iplib.py (InteractiveShell._prefilter): fixed
2785 AttributeError crash. Thanks to Christopher Armstrong
2791 AttributeError crash. Thanks to Christopher Armstrong
2786 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
2792 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
2787 introduced recently (in 0.2.14pre37) with the fix to the eval
2793 introduced recently (in 0.2.14pre37) with the fix to the eval
2788 problem mentioned below.
2794 problem mentioned below.
2789
2795
2790 2002-10-17 Fernando Perez <fperez@colorado.edu>
2796 2002-10-17 Fernando Perez <fperez@colorado.edu>
2791
2797
2792 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
2798 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
2793 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
2799 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
2794
2800
2795 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
2801 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
2796 this function to fix a problem reported by Alex Schmolck. He saw
2802 this function to fix a problem reported by Alex Schmolck. He saw
2797 it with list comprehensions and generators, which were getting
2803 it with list comprehensions and generators, which were getting
2798 called twice. The real problem was an 'eval' call in testing for
2804 called twice. The real problem was an 'eval' call in testing for
2799 automagic which was evaluating the input line silently.
2805 automagic which was evaluating the input line silently.
2800
2806
2801 This is a potentially very nasty bug, if the input has side
2807 This is a potentially very nasty bug, if the input has side
2802 effects which must not be repeated. The code is much cleaner now,
2808 effects which must not be repeated. The code is much cleaner now,
2803 without any blanket 'except' left and with a regexp test for
2809 without any blanket 'except' left and with a regexp test for
2804 actual function names.
2810 actual function names.
2805
2811
2806 But an eval remains, which I'm not fully comfortable with. I just
2812 But an eval remains, which I'm not fully comfortable with. I just
2807 don't know how to find out if an expression could be a callable in
2813 don't know how to find out if an expression could be a callable in
2808 the user's namespace without doing an eval on the string. However
2814 the user's namespace without doing an eval on the string. However
2809 that string is now much more strictly checked so that no code
2815 that string is now much more strictly checked so that no code
2810 slips by, so the eval should only happen for things that can
2816 slips by, so the eval should only happen for things that can
2811 really be only function/method names.
2817 really be only function/method names.
2812
2818
2813 2002-10-15 Fernando Perez <fperez@colorado.edu>
2819 2002-10-15 Fernando Perez <fperez@colorado.edu>
2814
2820
2815 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
2821 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
2816 OSX information to main manual, removed README_Mac_OSX file from
2822 OSX information to main manual, removed README_Mac_OSX file from
2817 distribution. Also updated credits for recent additions.
2823 distribution. Also updated credits for recent additions.
2818
2824
2819 2002-10-10 Fernando Perez <fperez@colorado.edu>
2825 2002-10-10 Fernando Perez <fperez@colorado.edu>
2820
2826
2821 * README_Mac_OSX: Added a README for Mac OSX users for fixing
2827 * README_Mac_OSX: Added a README for Mac OSX users for fixing
2822 terminal-related issues. Many thanks to Andrea Riciputi
2828 terminal-related issues. Many thanks to Andrea Riciputi
2823 <andrea.riciputi-AT-libero.it> for writing it.
2829 <andrea.riciputi-AT-libero.it> for writing it.
2824
2830
2825 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
2831 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
2826 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2832 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2827
2833
2828 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
2834 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
2829 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
2835 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
2830 <syver-en-AT-online.no> who both submitted patches for this problem.
2836 <syver-en-AT-online.no> who both submitted patches for this problem.
2831
2837
2832 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
2838 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
2833 global embedding to make sure that things don't overwrite user
2839 global embedding to make sure that things don't overwrite user
2834 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
2840 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
2835
2841
2836 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
2842 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
2837 compatibility. Thanks to Hayden Callow
2843 compatibility. Thanks to Hayden Callow
2838 <h.callow-AT-elec.canterbury.ac.nz>
2844 <h.callow-AT-elec.canterbury.ac.nz>
2839
2845
2840 2002-10-04 Fernando Perez <fperez@colorado.edu>
2846 2002-10-04 Fernando Perez <fperez@colorado.edu>
2841
2847
2842 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
2848 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
2843 Gnuplot.File objects.
2849 Gnuplot.File objects.
2844
2850
2845 2002-07-23 Fernando Perez <fperez@colorado.edu>
2851 2002-07-23 Fernando Perez <fperez@colorado.edu>
2846
2852
2847 * IPython/genutils.py (timing): Added timings() and timing() for
2853 * IPython/genutils.py (timing): Added timings() and timing() for
2848 quick access to the most commonly needed data, the execution
2854 quick access to the most commonly needed data, the execution
2849 times. Old timing() renamed to timings_out().
2855 times. Old timing() renamed to timings_out().
2850
2856
2851 2002-07-18 Fernando Perez <fperez@colorado.edu>
2857 2002-07-18 Fernando Perez <fperez@colorado.edu>
2852
2858
2853 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
2859 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
2854 bug with nested instances disrupting the parent's tab completion.
2860 bug with nested instances disrupting the parent's tab completion.
2855
2861
2856 * IPython/iplib.py (all_completions): Added Alex Schmolck's
2862 * IPython/iplib.py (all_completions): Added Alex Schmolck's
2857 all_completions code to begin the emacs integration.
2863 all_completions code to begin the emacs integration.
2858
2864
2859 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
2865 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
2860 argument to allow titling individual arrays when plotting.
2866 argument to allow titling individual arrays when plotting.
2861
2867
2862 2002-07-15 Fernando Perez <fperez@colorado.edu>
2868 2002-07-15 Fernando Perez <fperez@colorado.edu>
2863
2869
2864 * setup.py (make_shortcut): changed to retrieve the value of
2870 * setup.py (make_shortcut): changed to retrieve the value of
2865 'Program Files' directory from the registry (this value changes in
2871 'Program Files' directory from the registry (this value changes in
2866 non-english versions of Windows). Thanks to Thomas Fanslau
2872 non-english versions of Windows). Thanks to Thomas Fanslau
2867 <tfanslau-AT-gmx.de> for the report.
2873 <tfanslau-AT-gmx.de> for the report.
2868
2874
2869 2002-07-10 Fernando Perez <fperez@colorado.edu>
2875 2002-07-10 Fernando Perez <fperez@colorado.edu>
2870
2876
2871 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
2877 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
2872 a bug in pdb, which crashes if a line with only whitespace is
2878 a bug in pdb, which crashes if a line with only whitespace is
2873 entered. Bug report submitted to sourceforge.
2879 entered. Bug report submitted to sourceforge.
2874
2880
2875 2002-07-09 Fernando Perez <fperez@colorado.edu>
2881 2002-07-09 Fernando Perez <fperez@colorado.edu>
2876
2882
2877 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
2883 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
2878 reporting exceptions (it's a bug in inspect.py, I just set a
2884 reporting exceptions (it's a bug in inspect.py, I just set a
2879 workaround).
2885 workaround).
2880
2886
2881 2002-07-08 Fernando Perez <fperez@colorado.edu>
2887 2002-07-08 Fernando Perez <fperez@colorado.edu>
2882
2888
2883 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
2889 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
2884 __IPYTHON__ in __builtins__ to show up in user_ns.
2890 __IPYTHON__ in __builtins__ to show up in user_ns.
2885
2891
2886 2002-07-03 Fernando Perez <fperez@colorado.edu>
2892 2002-07-03 Fernando Perez <fperez@colorado.edu>
2887
2893
2888 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
2894 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
2889 name from @gp_set_instance to @gp_set_default.
2895 name from @gp_set_instance to @gp_set_default.
2890
2896
2891 * IPython/ipmaker.py (make_IPython): default editor value set to
2897 * IPython/ipmaker.py (make_IPython): default editor value set to
2892 '0' (a string), to match the rc file. Otherwise will crash when
2898 '0' (a string), to match the rc file. Otherwise will crash when
2893 .strip() is called on it.
2899 .strip() is called on it.
2894
2900
2895
2901
2896 2002-06-28 Fernando Perez <fperez@colorado.edu>
2902 2002-06-28 Fernando Perez <fperez@colorado.edu>
2897
2903
2898 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
2904 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
2899 of files in current directory when a file is executed via
2905 of files in current directory when a file is executed via
2900 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
2906 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
2901
2907
2902 * setup.py (manfiles): fix for rpm builds, submitted by RA
2908 * setup.py (manfiles): fix for rpm builds, submitted by RA
2903 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
2909 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
2904
2910
2905 * IPython/ipmaker.py (make_IPython): fixed lookup of default
2911 * IPython/ipmaker.py (make_IPython): fixed lookup of default
2906 editor when set to '0'. Problem was, '0' evaluates to True (it's a
2912 editor when set to '0'. Problem was, '0' evaluates to True (it's a
2907 string!). A. Schmolck caught this one.
2913 string!). A. Schmolck caught this one.
2908
2914
2909 2002-06-27 Fernando Perez <fperez@colorado.edu>
2915 2002-06-27 Fernando Perez <fperez@colorado.edu>
2910
2916
2911 * IPython/ipmaker.py (make_IPython): fixed bug when running user
2917 * IPython/ipmaker.py (make_IPython): fixed bug when running user
2912 defined files at the cmd line. __name__ wasn't being set to
2918 defined files at the cmd line. __name__ wasn't being set to
2913 __main__.
2919 __main__.
2914
2920
2915 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
2921 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
2916 regular lists and tuples besides Numeric arrays.
2922 regular lists and tuples besides Numeric arrays.
2917
2923
2918 * IPython/Prompts.py (CachedOutput.__call__): Added output
2924 * IPython/Prompts.py (CachedOutput.__call__): Added output
2919 supression for input ending with ';'. Similar to Mathematica and
2925 supression for input ending with ';'. Similar to Mathematica and
2920 Matlab. The _* vars and Out[] list are still updated, just like
2926 Matlab. The _* vars and Out[] list are still updated, just like
2921 Mathematica behaves.
2927 Mathematica behaves.
2922
2928
2923 2002-06-25 Fernando Perez <fperez@colorado.edu>
2929 2002-06-25 Fernando Perez <fperez@colorado.edu>
2924
2930
2925 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
2931 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
2926 .ini extensions for profiels under Windows.
2932 .ini extensions for profiels under Windows.
2927
2933
2928 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
2934 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
2929 string form. Fix contributed by Alexander Schmolck
2935 string form. Fix contributed by Alexander Schmolck
2930 <a.schmolck-AT-gmx.net>
2936 <a.schmolck-AT-gmx.net>
2931
2937
2932 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
2938 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
2933 pre-configured Gnuplot instance.
2939 pre-configured Gnuplot instance.
2934
2940
2935 2002-06-21 Fernando Perez <fperez@colorado.edu>
2941 2002-06-21 Fernando Perez <fperez@colorado.edu>
2936
2942
2937 * IPython/numutils.py (exp_safe): new function, works around the
2943 * IPython/numutils.py (exp_safe): new function, works around the
2938 underflow problems in Numeric.
2944 underflow problems in Numeric.
2939 (log2): New fn. Safe log in base 2: returns exact integer answer
2945 (log2): New fn. Safe log in base 2: returns exact integer answer
2940 for exact integer powers of 2.
2946 for exact integer powers of 2.
2941
2947
2942 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
2948 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
2943 properly.
2949 properly.
2944
2950
2945 2002-06-20 Fernando Perez <fperez@colorado.edu>
2951 2002-06-20 Fernando Perez <fperez@colorado.edu>
2946
2952
2947 * IPython/genutils.py (timing): new function like
2953 * IPython/genutils.py (timing): new function like
2948 Mathematica's. Similar to time_test, but returns more info.
2954 Mathematica's. Similar to time_test, but returns more info.
2949
2955
2950 2002-06-18 Fernando Perez <fperez@colorado.edu>
2956 2002-06-18 Fernando Perez <fperez@colorado.edu>
2951
2957
2952 * IPython/Magic.py (Magic.magic_save): modified @save and @r
2958 * IPython/Magic.py (Magic.magic_save): modified @save and @r
2953 according to Mike Heeter's suggestions.
2959 according to Mike Heeter's suggestions.
2954
2960
2955 2002-06-16 Fernando Perez <fperez@colorado.edu>
2961 2002-06-16 Fernando Perez <fperez@colorado.edu>
2956
2962
2957 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
2963 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
2958 system. GnuplotMagic is gone as a user-directory option. New files
2964 system. GnuplotMagic is gone as a user-directory option. New files
2959 make it easier to use all the gnuplot stuff both from external
2965 make it easier to use all the gnuplot stuff both from external
2960 programs as well as from IPython. Had to rewrite part of
2966 programs as well as from IPython. Had to rewrite part of
2961 hardcopy() b/c of a strange bug: often the ps files simply don't
2967 hardcopy() b/c of a strange bug: often the ps files simply don't
2962 get created, and require a repeat of the command (often several
2968 get created, and require a repeat of the command (often several
2963 times).
2969 times).
2964
2970
2965 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
2971 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
2966 resolve output channel at call time, so that if sys.stderr has
2972 resolve output channel at call time, so that if sys.stderr has
2967 been redirected by user this gets honored.
2973 been redirected by user this gets honored.
2968
2974
2969 2002-06-13 Fernando Perez <fperez@colorado.edu>
2975 2002-06-13 Fernando Perez <fperez@colorado.edu>
2970
2976
2971 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
2977 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
2972 IPShell. Kept a copy with the old names to avoid breaking people's
2978 IPShell. Kept a copy with the old names to avoid breaking people's
2973 embedded code.
2979 embedded code.
2974
2980
2975 * IPython/ipython: simplified it to the bare minimum after
2981 * IPython/ipython: simplified it to the bare minimum after
2976 Holger's suggestions. Added info about how to use it in
2982 Holger's suggestions. Added info about how to use it in
2977 PYTHONSTARTUP.
2983 PYTHONSTARTUP.
2978
2984
2979 * IPython/Shell.py (IPythonShell): changed the options passing
2985 * IPython/Shell.py (IPythonShell): changed the options passing
2980 from a string with funky %s replacements to a straight list. Maybe
2986 from a string with funky %s replacements to a straight list. Maybe
2981 a bit more typing, but it follows sys.argv conventions, so there's
2987 a bit more typing, but it follows sys.argv conventions, so there's
2982 less special-casing to remember.
2988 less special-casing to remember.
2983
2989
2984 2002-06-12 Fernando Perez <fperez@colorado.edu>
2990 2002-06-12 Fernando Perez <fperez@colorado.edu>
2985
2991
2986 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
2992 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
2987 command. Thanks to a suggestion by Mike Heeter.
2993 command. Thanks to a suggestion by Mike Heeter.
2988 (Magic.magic_pfile): added behavior to look at filenames if given
2994 (Magic.magic_pfile): added behavior to look at filenames if given
2989 arg is not a defined object.
2995 arg is not a defined object.
2990 (Magic.magic_save): New @save function to save code snippets. Also
2996 (Magic.magic_save): New @save function to save code snippets. Also
2991 a Mike Heeter idea.
2997 a Mike Heeter idea.
2992
2998
2993 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
2999 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
2994 plot() and replot(). Much more convenient now, especially for
3000 plot() and replot(). Much more convenient now, especially for
2995 interactive use.
3001 interactive use.
2996
3002
2997 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3003 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
2998 filenames.
3004 filenames.
2999
3005
3000 2002-06-02 Fernando Perez <fperez@colorado.edu>
3006 2002-06-02 Fernando Perez <fperez@colorado.edu>
3001
3007
3002 * IPython/Struct.py (Struct.__init__): modified to admit
3008 * IPython/Struct.py (Struct.__init__): modified to admit
3003 initialization via another struct.
3009 initialization via another struct.
3004
3010
3005 * IPython/genutils.py (SystemExec.__init__): New stateful
3011 * IPython/genutils.py (SystemExec.__init__): New stateful
3006 interface to xsys and bq. Useful for writing system scripts.
3012 interface to xsys and bq. Useful for writing system scripts.
3007
3013
3008 2002-05-30 Fernando Perez <fperez@colorado.edu>
3014 2002-05-30 Fernando Perez <fperez@colorado.edu>
3009
3015
3010 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3016 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3011 documents. This will make the user download smaller (it's getting
3017 documents. This will make the user download smaller (it's getting
3012 too big).
3018 too big).
3013
3019
3014 2002-05-29 Fernando Perez <fperez@colorado.edu>
3020 2002-05-29 Fernando Perez <fperez@colorado.edu>
3015
3021
3016 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3022 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3017 fix problems with shelve and pickle. Seems to work, but I don't
3023 fix problems with shelve and pickle. Seems to work, but I don't
3018 know if corner cases break it. Thanks to Mike Heeter
3024 know if corner cases break it. Thanks to Mike Heeter
3019 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3025 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3020
3026
3021 2002-05-24 Fernando Perez <fperez@colorado.edu>
3027 2002-05-24 Fernando Perez <fperez@colorado.edu>
3022
3028
3023 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3029 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3024 macros having broken.
3030 macros having broken.
3025
3031
3026 2002-05-21 Fernando Perez <fperez@colorado.edu>
3032 2002-05-21 Fernando Perez <fperez@colorado.edu>
3027
3033
3028 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3034 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3029 introduced logging bug: all history before logging started was
3035 introduced logging bug: all history before logging started was
3030 being written one character per line! This came from the redesign
3036 being written one character per line! This came from the redesign
3031 of the input history as a special list which slices to strings,
3037 of the input history as a special list which slices to strings,
3032 not to lists.
3038 not to lists.
3033
3039
3034 2002-05-20 Fernando Perez <fperez@colorado.edu>
3040 2002-05-20 Fernando Perez <fperez@colorado.edu>
3035
3041
3036 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3042 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3037 be an attribute of all classes in this module. The design of these
3043 be an attribute of all classes in this module. The design of these
3038 classes needs some serious overhauling.
3044 classes needs some serious overhauling.
3039
3045
3040 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3046 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3041 which was ignoring '_' in option names.
3047 which was ignoring '_' in option names.
3042
3048
3043 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3049 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3044 'Verbose_novars' to 'Context' and made it the new default. It's a
3050 'Verbose_novars' to 'Context' and made it the new default. It's a
3045 bit more readable and also safer than verbose.
3051 bit more readable and also safer than verbose.
3046
3052
3047 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3053 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3048 triple-quoted strings.
3054 triple-quoted strings.
3049
3055
3050 * IPython/OInspect.py (__all__): new module exposing the object
3056 * IPython/OInspect.py (__all__): new module exposing the object
3051 introspection facilities. Now the corresponding magics are dummy
3057 introspection facilities. Now the corresponding magics are dummy
3052 wrappers around this. Having this module will make it much easier
3058 wrappers around this. Having this module will make it much easier
3053 to put these functions into our modified pdb.
3059 to put these functions into our modified pdb.
3054 This new object inspector system uses the new colorizing module,
3060 This new object inspector system uses the new colorizing module,
3055 so source code and other things are nicely syntax highlighted.
3061 so source code and other things are nicely syntax highlighted.
3056
3062
3057 2002-05-18 Fernando Perez <fperez@colorado.edu>
3063 2002-05-18 Fernando Perez <fperez@colorado.edu>
3058
3064
3059 * IPython/ColorANSI.py: Split the coloring tools into a separate
3065 * IPython/ColorANSI.py: Split the coloring tools into a separate
3060 module so I can use them in other code easier (they were part of
3066 module so I can use them in other code easier (they were part of
3061 ultraTB).
3067 ultraTB).
3062
3068
3063 2002-05-17 Fernando Perez <fperez@colorado.edu>
3069 2002-05-17 Fernando Perez <fperez@colorado.edu>
3064
3070
3065 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3071 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3066 fixed it to set the global 'g' also to the called instance, as
3072 fixed it to set the global 'g' also to the called instance, as
3067 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3073 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3068 user's 'g' variables).
3074 user's 'g' variables).
3069
3075
3070 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3076 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3071 global variables (aliases to _ih,_oh) so that users which expect
3077 global variables (aliases to _ih,_oh) so that users which expect
3072 In[5] or Out[7] to work aren't unpleasantly surprised.
3078 In[5] or Out[7] to work aren't unpleasantly surprised.
3073 (InputList.__getslice__): new class to allow executing slices of
3079 (InputList.__getslice__): new class to allow executing slices of
3074 input history directly. Very simple class, complements the use of
3080 input history directly. Very simple class, complements the use of
3075 macros.
3081 macros.
3076
3082
3077 2002-05-16 Fernando Perez <fperez@colorado.edu>
3083 2002-05-16 Fernando Perez <fperez@colorado.edu>
3078
3084
3079 * setup.py (docdirbase): make doc directory be just doc/IPython
3085 * setup.py (docdirbase): make doc directory be just doc/IPython
3080 without version numbers, it will reduce clutter for users.
3086 without version numbers, it will reduce clutter for users.
3081
3087
3082 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3088 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3083 execfile call to prevent possible memory leak. See for details:
3089 execfile call to prevent possible memory leak. See for details:
3084 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3090 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3085
3091
3086 2002-05-15 Fernando Perez <fperez@colorado.edu>
3092 2002-05-15 Fernando Perez <fperez@colorado.edu>
3087
3093
3088 * IPython/Magic.py (Magic.magic_psource): made the object
3094 * IPython/Magic.py (Magic.magic_psource): made the object
3089 introspection names be more standard: pdoc, pdef, pfile and
3095 introspection names be more standard: pdoc, pdef, pfile and
3090 psource. They all print/page their output, and it makes
3096 psource. They all print/page their output, and it makes
3091 remembering them easier. Kept old names for compatibility as
3097 remembering them easier. Kept old names for compatibility as
3092 aliases.
3098 aliases.
3093
3099
3094 2002-05-14 Fernando Perez <fperez@colorado.edu>
3100 2002-05-14 Fernando Perez <fperez@colorado.edu>
3095
3101
3096 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3102 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3097 what the mouse problem was. The trick is to use gnuplot with temp
3103 what the mouse problem was. The trick is to use gnuplot with temp
3098 files and NOT with pipes (for data communication), because having
3104 files and NOT with pipes (for data communication), because having
3099 both pipes and the mouse on is bad news.
3105 both pipes and the mouse on is bad news.
3100
3106
3101 2002-05-13 Fernando Perez <fperez@colorado.edu>
3107 2002-05-13 Fernando Perez <fperez@colorado.edu>
3102
3108
3103 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3109 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3104 bug. Information would be reported about builtins even when
3110 bug. Information would be reported about builtins even when
3105 user-defined functions overrode them.
3111 user-defined functions overrode them.
3106
3112
3107 2002-05-11 Fernando Perez <fperez@colorado.edu>
3113 2002-05-11 Fernando Perez <fperez@colorado.edu>
3108
3114
3109 * IPython/__init__.py (__all__): removed FlexCompleter from
3115 * IPython/__init__.py (__all__): removed FlexCompleter from
3110 __all__ so that things don't fail in platforms without readline.
3116 __all__ so that things don't fail in platforms without readline.
3111
3117
3112 2002-05-10 Fernando Perez <fperez@colorado.edu>
3118 2002-05-10 Fernando Perez <fperez@colorado.edu>
3113
3119
3114 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3120 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3115 it requires Numeric, effectively making Numeric a dependency for
3121 it requires Numeric, effectively making Numeric a dependency for
3116 IPython.
3122 IPython.
3117
3123
3118 * Released 0.2.13
3124 * Released 0.2.13
3119
3125
3120 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3126 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3121 profiler interface. Now all the major options from the profiler
3127 profiler interface. Now all the major options from the profiler
3122 module are directly supported in IPython, both for single
3128 module are directly supported in IPython, both for single
3123 expressions (@prun) and for full programs (@run -p).
3129 expressions (@prun) and for full programs (@run -p).
3124
3130
3125 2002-05-09 Fernando Perez <fperez@colorado.edu>
3131 2002-05-09 Fernando Perez <fperez@colorado.edu>
3126
3132
3127 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3133 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3128 magic properly formatted for screen.
3134 magic properly formatted for screen.
3129
3135
3130 * setup.py (make_shortcut): Changed things to put pdf version in
3136 * setup.py (make_shortcut): Changed things to put pdf version in
3131 doc/ instead of doc/manual (had to change lyxport a bit).
3137 doc/ instead of doc/manual (had to change lyxport a bit).
3132
3138
3133 * IPython/Magic.py (Profile.string_stats): made profile runs go
3139 * IPython/Magic.py (Profile.string_stats): made profile runs go
3134 through pager (they are long and a pager allows searching, saving,
3140 through pager (they are long and a pager allows searching, saving,
3135 etc.)
3141 etc.)
3136
3142
3137 2002-05-08 Fernando Perez <fperez@colorado.edu>
3143 2002-05-08 Fernando Perez <fperez@colorado.edu>
3138
3144
3139 * Released 0.2.12
3145 * Released 0.2.12
3140
3146
3141 2002-05-06 Fernando Perez <fperez@colorado.edu>
3147 2002-05-06 Fernando Perez <fperez@colorado.edu>
3142
3148
3143 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3149 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3144 introduced); 'hist n1 n2' was broken.
3150 introduced); 'hist n1 n2' was broken.
3145 (Magic.magic_pdb): added optional on/off arguments to @pdb
3151 (Magic.magic_pdb): added optional on/off arguments to @pdb
3146 (Magic.magic_run): added option -i to @run, which executes code in
3152 (Magic.magic_run): added option -i to @run, which executes code in
3147 the IPython namespace instead of a clean one. Also added @irun as
3153 the IPython namespace instead of a clean one. Also added @irun as
3148 an alias to @run -i.
3154 an alias to @run -i.
3149
3155
3150 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3156 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3151 fixed (it didn't really do anything, the namespaces were wrong).
3157 fixed (it didn't really do anything, the namespaces were wrong).
3152
3158
3153 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3159 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3154
3160
3155 * IPython/__init__.py (__all__): Fixed package namespace, now
3161 * IPython/__init__.py (__all__): Fixed package namespace, now
3156 'import IPython' does give access to IPython.<all> as
3162 'import IPython' does give access to IPython.<all> as
3157 expected. Also renamed __release__ to Release.
3163 expected. Also renamed __release__ to Release.
3158
3164
3159 * IPython/Debugger.py (__license__): created new Pdb class which
3165 * IPython/Debugger.py (__license__): created new Pdb class which
3160 functions like a drop-in for the normal pdb.Pdb but does NOT
3166 functions like a drop-in for the normal pdb.Pdb but does NOT
3161 import readline by default. This way it doesn't muck up IPython's
3167 import readline by default. This way it doesn't muck up IPython's
3162 readline handling, and now tab-completion finally works in the
3168 readline handling, and now tab-completion finally works in the
3163 debugger -- sort of. It completes things globally visible, but the
3169 debugger -- sort of. It completes things globally visible, but the
3164 completer doesn't track the stack as pdb walks it. That's a bit
3170 completer doesn't track the stack as pdb walks it. That's a bit
3165 tricky, and I'll have to implement it later.
3171 tricky, and I'll have to implement it later.
3166
3172
3167 2002-05-05 Fernando Perez <fperez@colorado.edu>
3173 2002-05-05 Fernando Perez <fperez@colorado.edu>
3168
3174
3169 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3175 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3170 magic docstrings when printed via ? (explicit \'s were being
3176 magic docstrings when printed via ? (explicit \'s were being
3171 printed).
3177 printed).
3172
3178
3173 * IPython/ipmaker.py (make_IPython): fixed namespace
3179 * IPython/ipmaker.py (make_IPython): fixed namespace
3174 identification bug. Now variables loaded via logs or command-line
3180 identification bug. Now variables loaded via logs or command-line
3175 files are recognized in the interactive namespace by @who.
3181 files are recognized in the interactive namespace by @who.
3176
3182
3177 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3183 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3178 log replay system stemming from the string form of Structs.
3184 log replay system stemming from the string form of Structs.
3179
3185
3180 * IPython/Magic.py (Macro.__init__): improved macros to properly
3186 * IPython/Magic.py (Macro.__init__): improved macros to properly
3181 handle magic commands in them.
3187 handle magic commands in them.
3182 (Magic.magic_logstart): usernames are now expanded so 'logstart
3188 (Magic.magic_logstart): usernames are now expanded so 'logstart
3183 ~/mylog' now works.
3189 ~/mylog' now works.
3184
3190
3185 * IPython/iplib.py (complete): fixed bug where paths starting with
3191 * IPython/iplib.py (complete): fixed bug where paths starting with
3186 '/' would be completed as magic names.
3192 '/' would be completed as magic names.
3187
3193
3188 2002-05-04 Fernando Perez <fperez@colorado.edu>
3194 2002-05-04 Fernando Perez <fperez@colorado.edu>
3189
3195
3190 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3196 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3191 allow running full programs under the profiler's control.
3197 allow running full programs under the profiler's control.
3192
3198
3193 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3199 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3194 mode to report exceptions verbosely but without formatting
3200 mode to report exceptions verbosely but without formatting
3195 variables. This addresses the issue of ipython 'freezing' (it's
3201 variables. This addresses the issue of ipython 'freezing' (it's
3196 not frozen, but caught in an expensive formatting loop) when huge
3202 not frozen, but caught in an expensive formatting loop) when huge
3197 variables are in the context of an exception.
3203 variables are in the context of an exception.
3198 (VerboseTB.text): Added '--->' markers at line where exception was
3204 (VerboseTB.text): Added '--->' markers at line where exception was
3199 triggered. Much clearer to read, especially in NoColor modes.
3205 triggered. Much clearer to read, especially in NoColor modes.
3200
3206
3201 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3207 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3202 implemented in reverse when changing to the new parse_options().
3208 implemented in reverse when changing to the new parse_options().
3203
3209
3204 2002-05-03 Fernando Perez <fperez@colorado.edu>
3210 2002-05-03 Fernando Perez <fperez@colorado.edu>
3205
3211
3206 * IPython/Magic.py (Magic.parse_options): new function so that
3212 * IPython/Magic.py (Magic.parse_options): new function so that
3207 magics can parse options easier.
3213 magics can parse options easier.
3208 (Magic.magic_prun): new function similar to profile.run(),
3214 (Magic.magic_prun): new function similar to profile.run(),
3209 suggested by Chris Hart.
3215 suggested by Chris Hart.
3210 (Magic.magic_cd): fixed behavior so that it only changes if
3216 (Magic.magic_cd): fixed behavior so that it only changes if
3211 directory actually is in history.
3217 directory actually is in history.
3212
3218
3213 * IPython/usage.py (__doc__): added information about potential
3219 * IPython/usage.py (__doc__): added information about potential
3214 slowness of Verbose exception mode when there are huge data
3220 slowness of Verbose exception mode when there are huge data
3215 structures to be formatted (thanks to Archie Paulson).
3221 structures to be formatted (thanks to Archie Paulson).
3216
3222
3217 * IPython/ipmaker.py (make_IPython): Changed default logging
3223 * IPython/ipmaker.py (make_IPython): Changed default logging
3218 (when simply called with -log) to use curr_dir/ipython.log in
3224 (when simply called with -log) to use curr_dir/ipython.log in
3219 rotate mode. Fixed crash which was occuring with -log before
3225 rotate mode. Fixed crash which was occuring with -log before
3220 (thanks to Jim Boyle).
3226 (thanks to Jim Boyle).
3221
3227
3222 2002-05-01 Fernando Perez <fperez@colorado.edu>
3228 2002-05-01 Fernando Perez <fperez@colorado.edu>
3223
3229
3224 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3230 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3225 was nasty -- though somewhat of a corner case).
3231 was nasty -- though somewhat of a corner case).
3226
3232
3227 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3233 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3228 text (was a bug).
3234 text (was a bug).
3229
3235
3230 2002-04-30 Fernando Perez <fperez@colorado.edu>
3236 2002-04-30 Fernando Perez <fperez@colorado.edu>
3231
3237
3232 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3238 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3233 a print after ^D or ^C from the user so that the In[] prompt
3239 a print after ^D or ^C from the user so that the In[] prompt
3234 doesn't over-run the gnuplot one.
3240 doesn't over-run the gnuplot one.
3235
3241
3236 2002-04-29 Fernando Perez <fperez@colorado.edu>
3242 2002-04-29 Fernando Perez <fperez@colorado.edu>
3237
3243
3238 * Released 0.2.10
3244 * Released 0.2.10
3239
3245
3240 * IPython/__release__.py (version): get date dynamically.
3246 * IPython/__release__.py (version): get date dynamically.
3241
3247
3242 * Misc. documentation updates thanks to Arnd's comments. Also ran
3248 * Misc. documentation updates thanks to Arnd's comments. Also ran
3243 a full spellcheck on the manual (hadn't been done in a while).
3249 a full spellcheck on the manual (hadn't been done in a while).
3244
3250
3245 2002-04-27 Fernando Perez <fperez@colorado.edu>
3251 2002-04-27 Fernando Perez <fperez@colorado.edu>
3246
3252
3247 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3253 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3248 starting a log in mid-session would reset the input history list.
3254 starting a log in mid-session would reset the input history list.
3249
3255
3250 2002-04-26 Fernando Perez <fperez@colorado.edu>
3256 2002-04-26 Fernando Perez <fperez@colorado.edu>
3251
3257
3252 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3258 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3253 all files were being included in an update. Now anything in
3259 all files were being included in an update. Now anything in
3254 UserConfig that matches [A-Za-z]*.py will go (this excludes
3260 UserConfig that matches [A-Za-z]*.py will go (this excludes
3255 __init__.py)
3261 __init__.py)
3256
3262
3257 2002-04-25 Fernando Perez <fperez@colorado.edu>
3263 2002-04-25 Fernando Perez <fperez@colorado.edu>
3258
3264
3259 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3265 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3260 to __builtins__ so that any form of embedded or imported code can
3266 to __builtins__ so that any form of embedded or imported code can
3261 test for being inside IPython.
3267 test for being inside IPython.
3262
3268
3263 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3269 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3264 changed to GnuplotMagic because it's now an importable module,
3270 changed to GnuplotMagic because it's now an importable module,
3265 this makes the name follow that of the standard Gnuplot module.
3271 this makes the name follow that of the standard Gnuplot module.
3266 GnuplotMagic can now be loaded at any time in mid-session.
3272 GnuplotMagic can now be loaded at any time in mid-session.
3267
3273
3268 2002-04-24 Fernando Perez <fperez@colorado.edu>
3274 2002-04-24 Fernando Perez <fperez@colorado.edu>
3269
3275
3270 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3276 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3271 the globals (IPython has its own namespace) and the
3277 the globals (IPython has its own namespace) and the
3272 PhysicalQuantity stuff is much better anyway.
3278 PhysicalQuantity stuff is much better anyway.
3273
3279
3274 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3280 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3275 embedding example to standard user directory for
3281 embedding example to standard user directory for
3276 distribution. Also put it in the manual.
3282 distribution. Also put it in the manual.
3277
3283
3278 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3284 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3279 instance as first argument (so it doesn't rely on some obscure
3285 instance as first argument (so it doesn't rely on some obscure
3280 hidden global).
3286 hidden global).
3281
3287
3282 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3288 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3283 delimiters. While it prevents ().TAB from working, it allows
3289 delimiters. While it prevents ().TAB from working, it allows
3284 completions in open (... expressions. This is by far a more common
3290 completions in open (... expressions. This is by far a more common
3285 case.
3291 case.
3286
3292
3287 2002-04-23 Fernando Perez <fperez@colorado.edu>
3293 2002-04-23 Fernando Perez <fperez@colorado.edu>
3288
3294
3289 * IPython/Extensions/InterpreterPasteInput.py: new
3295 * IPython/Extensions/InterpreterPasteInput.py: new
3290 syntax-processing module for pasting lines with >>> or ... at the
3296 syntax-processing module for pasting lines with >>> or ... at the
3291 start.
3297 start.
3292
3298
3293 * IPython/Extensions/PhysicalQ_Interactive.py
3299 * IPython/Extensions/PhysicalQ_Interactive.py
3294 (PhysicalQuantityInteractive.__int__): fixed to work with either
3300 (PhysicalQuantityInteractive.__int__): fixed to work with either
3295 Numeric or math.
3301 Numeric or math.
3296
3302
3297 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3303 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3298 provided profiles. Now we have:
3304 provided profiles. Now we have:
3299 -math -> math module as * and cmath with its own namespace.
3305 -math -> math module as * and cmath with its own namespace.
3300 -numeric -> Numeric as *, plus gnuplot & grace
3306 -numeric -> Numeric as *, plus gnuplot & grace
3301 -physics -> same as before
3307 -physics -> same as before
3302
3308
3303 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3309 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3304 user-defined magics wouldn't be found by @magic if they were
3310 user-defined magics wouldn't be found by @magic if they were
3305 defined as class methods. Also cleaned up the namespace search
3311 defined as class methods. Also cleaned up the namespace search
3306 logic and the string building (to use %s instead of many repeated
3312 logic and the string building (to use %s instead of many repeated
3307 string adds).
3313 string adds).
3308
3314
3309 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3315 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3310 of user-defined magics to operate with class methods (cleaner, in
3316 of user-defined magics to operate with class methods (cleaner, in
3311 line with the gnuplot code).
3317 line with the gnuplot code).
3312
3318
3313 2002-04-22 Fernando Perez <fperez@colorado.edu>
3319 2002-04-22 Fernando Perez <fperez@colorado.edu>
3314
3320
3315 * setup.py: updated dependency list so that manual is updated when
3321 * setup.py: updated dependency list so that manual is updated when
3316 all included files change.
3322 all included files change.
3317
3323
3318 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3324 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3319 the delimiter removal option (the fix is ugly right now).
3325 the delimiter removal option (the fix is ugly right now).
3320
3326
3321 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3327 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3322 all of the math profile (quicker loading, no conflict between
3328 all of the math profile (quicker loading, no conflict between
3323 g-9.8 and g-gnuplot).
3329 g-9.8 and g-gnuplot).
3324
3330
3325 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3331 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3326 name of post-mortem files to IPython_crash_report.txt.
3332 name of post-mortem files to IPython_crash_report.txt.
3327
3333
3328 * Cleanup/update of the docs. Added all the new readline info and
3334 * Cleanup/update of the docs. Added all the new readline info and
3329 formatted all lists as 'real lists'.
3335 formatted all lists as 'real lists'.
3330
3336
3331 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3337 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3332 tab-completion options, since the full readline parse_and_bind is
3338 tab-completion options, since the full readline parse_and_bind is
3333 now accessible.
3339 now accessible.
3334
3340
3335 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3341 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3336 handling of readline options. Now users can specify any string to
3342 handling of readline options. Now users can specify any string to
3337 be passed to parse_and_bind(), as well as the delimiters to be
3343 be passed to parse_and_bind(), as well as the delimiters to be
3338 removed.
3344 removed.
3339 (InteractiveShell.__init__): Added __name__ to the global
3345 (InteractiveShell.__init__): Added __name__ to the global
3340 namespace so that things like Itpl which rely on its existence
3346 namespace so that things like Itpl which rely on its existence
3341 don't crash.
3347 don't crash.
3342 (InteractiveShell._prefilter): Defined the default with a _ so
3348 (InteractiveShell._prefilter): Defined the default with a _ so
3343 that prefilter() is easier to override, while the default one
3349 that prefilter() is easier to override, while the default one
3344 remains available.
3350 remains available.
3345
3351
3346 2002-04-18 Fernando Perez <fperez@colorado.edu>
3352 2002-04-18 Fernando Perez <fperez@colorado.edu>
3347
3353
3348 * Added information about pdb in the docs.
3354 * Added information about pdb in the docs.
3349
3355
3350 2002-04-17 Fernando Perez <fperez@colorado.edu>
3356 2002-04-17 Fernando Perez <fperez@colorado.edu>
3351
3357
3352 * IPython/ipmaker.py (make_IPython): added rc_override option to
3358 * IPython/ipmaker.py (make_IPython): added rc_override option to
3353 allow passing config options at creation time which may override
3359 allow passing config options at creation time which may override
3354 anything set in the config files or command line. This is
3360 anything set in the config files or command line. This is
3355 particularly useful for configuring embedded instances.
3361 particularly useful for configuring embedded instances.
3356
3362
3357 2002-04-15 Fernando Perez <fperez@colorado.edu>
3363 2002-04-15 Fernando Perez <fperez@colorado.edu>
3358
3364
3359 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3365 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3360 crash embedded instances because of the input cache falling out of
3366 crash embedded instances because of the input cache falling out of
3361 sync with the output counter.
3367 sync with the output counter.
3362
3368
3363 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3369 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3364 mode which calls pdb after an uncaught exception in IPython itself.
3370 mode which calls pdb after an uncaught exception in IPython itself.
3365
3371
3366 2002-04-14 Fernando Perez <fperez@colorado.edu>
3372 2002-04-14 Fernando Perez <fperez@colorado.edu>
3367
3373
3368 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3374 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3369 readline, fix it back after each call.
3375 readline, fix it back after each call.
3370
3376
3371 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3377 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3372 method to force all access via __call__(), which guarantees that
3378 method to force all access via __call__(), which guarantees that
3373 traceback references are properly deleted.
3379 traceback references are properly deleted.
3374
3380
3375 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3381 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3376 improve printing when pprint is in use.
3382 improve printing when pprint is in use.
3377
3383
3378 2002-04-13 Fernando Perez <fperez@colorado.edu>
3384 2002-04-13 Fernando Perez <fperez@colorado.edu>
3379
3385
3380 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3386 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3381 exceptions aren't caught anymore. If the user triggers one, he
3387 exceptions aren't caught anymore. If the user triggers one, he
3382 should know why he's doing it and it should go all the way up,
3388 should know why he's doing it and it should go all the way up,
3383 just like any other exception. So now @abort will fully kill the
3389 just like any other exception. So now @abort will fully kill the
3384 embedded interpreter and the embedding code (unless that happens
3390 embedded interpreter and the embedding code (unless that happens
3385 to catch SystemExit).
3391 to catch SystemExit).
3386
3392
3387 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3393 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3388 and a debugger() method to invoke the interactive pdb debugger
3394 and a debugger() method to invoke the interactive pdb debugger
3389 after printing exception information. Also added the corresponding
3395 after printing exception information. Also added the corresponding
3390 -pdb option and @pdb magic to control this feature, and updated
3396 -pdb option and @pdb magic to control this feature, and updated
3391 the docs. After a suggestion from Christopher Hart
3397 the docs. After a suggestion from Christopher Hart
3392 (hart-AT-caltech.edu).
3398 (hart-AT-caltech.edu).
3393
3399
3394 2002-04-12 Fernando Perez <fperez@colorado.edu>
3400 2002-04-12 Fernando Perez <fperez@colorado.edu>
3395
3401
3396 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3402 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3397 the exception handlers defined by the user (not the CrashHandler)
3403 the exception handlers defined by the user (not the CrashHandler)
3398 so that user exceptions don't trigger an ipython bug report.
3404 so that user exceptions don't trigger an ipython bug report.
3399
3405
3400 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3406 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3401 configurable (it should have always been so).
3407 configurable (it should have always been so).
3402
3408
3403 2002-03-26 Fernando Perez <fperez@colorado.edu>
3409 2002-03-26 Fernando Perez <fperez@colorado.edu>
3404
3410
3405 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3411 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3406 and there to fix embedding namespace issues. This should all be
3412 and there to fix embedding namespace issues. This should all be
3407 done in a more elegant way.
3413 done in a more elegant way.
3408
3414
3409 2002-03-25 Fernando Perez <fperez@colorado.edu>
3415 2002-03-25 Fernando Perez <fperez@colorado.edu>
3410
3416
3411 * IPython/genutils.py (get_home_dir): Try to make it work under
3417 * IPython/genutils.py (get_home_dir): Try to make it work under
3412 win9x also.
3418 win9x also.
3413
3419
3414 2002-03-20 Fernando Perez <fperez@colorado.edu>
3420 2002-03-20 Fernando Perez <fperez@colorado.edu>
3415
3421
3416 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3422 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3417 sys.displayhook untouched upon __init__.
3423 sys.displayhook untouched upon __init__.
3418
3424
3419 2002-03-19 Fernando Perez <fperez@colorado.edu>
3425 2002-03-19 Fernando Perez <fperez@colorado.edu>
3420
3426
3421 * Released 0.2.9 (for embedding bug, basically).
3427 * Released 0.2.9 (for embedding bug, basically).
3422
3428
3423 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3429 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3424 exceptions so that enclosing shell's state can be restored.
3430 exceptions so that enclosing shell's state can be restored.
3425
3431
3426 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3432 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3427 naming conventions in the .ipython/ dir.
3433 naming conventions in the .ipython/ dir.
3428
3434
3429 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3435 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3430 from delimiters list so filenames with - in them get expanded.
3436 from delimiters list so filenames with - in them get expanded.
3431
3437
3432 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3438 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3433 sys.displayhook not being properly restored after an embedded call.
3439 sys.displayhook not being properly restored after an embedded call.
3434
3440
3435 2002-03-18 Fernando Perez <fperez@colorado.edu>
3441 2002-03-18 Fernando Perez <fperez@colorado.edu>
3436
3442
3437 * Released 0.2.8
3443 * Released 0.2.8
3438
3444
3439 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3445 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3440 some files weren't being included in a -upgrade.
3446 some files weren't being included in a -upgrade.
3441 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3447 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3442 on' so that the first tab completes.
3448 on' so that the first tab completes.
3443 (InteractiveShell.handle_magic): fixed bug with spaces around
3449 (InteractiveShell.handle_magic): fixed bug with spaces around
3444 quotes breaking many magic commands.
3450 quotes breaking many magic commands.
3445
3451
3446 * setup.py: added note about ignoring the syntax error messages at
3452 * setup.py: added note about ignoring the syntax error messages at
3447 installation.
3453 installation.
3448
3454
3449 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3455 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3450 streamlining the gnuplot interface, now there's only one magic @gp.
3456 streamlining the gnuplot interface, now there's only one magic @gp.
3451
3457
3452 2002-03-17 Fernando Perez <fperez@colorado.edu>
3458 2002-03-17 Fernando Perez <fperez@colorado.edu>
3453
3459
3454 * IPython/UserConfig/magic_gnuplot.py: new name for the
3460 * IPython/UserConfig/magic_gnuplot.py: new name for the
3455 example-magic_pm.py file. Much enhanced system, now with a shell
3461 example-magic_pm.py file. Much enhanced system, now with a shell
3456 for communicating directly with gnuplot, one command at a time.
3462 for communicating directly with gnuplot, one command at a time.
3457
3463
3458 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3464 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3459 setting __name__=='__main__'.
3465 setting __name__=='__main__'.
3460
3466
3461 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3467 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3462 mini-shell for accessing gnuplot from inside ipython. Should
3468 mini-shell for accessing gnuplot from inside ipython. Should
3463 extend it later for grace access too. Inspired by Arnd's
3469 extend it later for grace access too. Inspired by Arnd's
3464 suggestion.
3470 suggestion.
3465
3471
3466 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3472 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3467 calling magic functions with () in their arguments. Thanks to Arnd
3473 calling magic functions with () in their arguments. Thanks to Arnd
3468 Baecker for pointing this to me.
3474 Baecker for pointing this to me.
3469
3475
3470 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3476 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3471 infinitely for integer or complex arrays (only worked with floats).
3477 infinitely for integer or complex arrays (only worked with floats).
3472
3478
3473 2002-03-16 Fernando Perez <fperez@colorado.edu>
3479 2002-03-16 Fernando Perez <fperez@colorado.edu>
3474
3480
3475 * setup.py: Merged setup and setup_windows into a single script
3481 * setup.py: Merged setup and setup_windows into a single script
3476 which properly handles things for windows users.
3482 which properly handles things for windows users.
3477
3483
3478 2002-03-15 Fernando Perez <fperez@colorado.edu>
3484 2002-03-15 Fernando Perez <fperez@colorado.edu>
3479
3485
3480 * Big change to the manual: now the magics are all automatically
3486 * Big change to the manual: now the magics are all automatically
3481 documented. This information is generated from their docstrings
3487 documented. This information is generated from their docstrings
3482 and put in a latex file included by the manual lyx file. This way
3488 and put in a latex file included by the manual lyx file. This way
3483 we get always up to date information for the magics. The manual
3489 we get always up to date information for the magics. The manual
3484 now also has proper version information, also auto-synced.
3490 now also has proper version information, also auto-synced.
3485
3491
3486 For this to work, an undocumented --magic_docstrings option was added.
3492 For this to work, an undocumented --magic_docstrings option was added.
3487
3493
3488 2002-03-13 Fernando Perez <fperez@colorado.edu>
3494 2002-03-13 Fernando Perez <fperez@colorado.edu>
3489
3495
3490 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3496 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3491 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3497 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3492
3498
3493 2002-03-12 Fernando Perez <fperez@colorado.edu>
3499 2002-03-12 Fernando Perez <fperez@colorado.edu>
3494
3500
3495 * IPython/ultraTB.py (TermColors): changed color escapes again to
3501 * IPython/ultraTB.py (TermColors): changed color escapes again to
3496 fix the (old, reintroduced) line-wrapping bug. Basically, if
3502 fix the (old, reintroduced) line-wrapping bug. Basically, if
3497 \001..\002 aren't given in the color escapes, lines get wrapped
3503 \001..\002 aren't given in the color escapes, lines get wrapped
3498 weirdly. But giving those screws up old xterms and emacs terms. So
3504 weirdly. But giving those screws up old xterms and emacs terms. So
3499 I added some logic for emacs terms to be ok, but I can't identify old
3505 I added some logic for emacs terms to be ok, but I can't identify old
3500 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3506 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3501
3507
3502 2002-03-10 Fernando Perez <fperez@colorado.edu>
3508 2002-03-10 Fernando Perez <fperez@colorado.edu>
3503
3509
3504 * IPython/usage.py (__doc__): Various documentation cleanups and
3510 * IPython/usage.py (__doc__): Various documentation cleanups and
3505 updates, both in usage docstrings and in the manual.
3511 updates, both in usage docstrings and in the manual.
3506
3512
3507 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3513 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3508 handling of caching. Set minimum acceptabe value for having a
3514 handling of caching. Set minimum acceptabe value for having a
3509 cache at 20 values.
3515 cache at 20 values.
3510
3516
3511 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3517 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3512 install_first_time function to a method, renamed it and added an
3518 install_first_time function to a method, renamed it and added an
3513 'upgrade' mode. Now people can update their config directory with
3519 'upgrade' mode. Now people can update their config directory with
3514 a simple command line switch (-upgrade, also new).
3520 a simple command line switch (-upgrade, also new).
3515
3521
3516 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3522 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3517 @file (convenient for automagic users under Python >= 2.2).
3523 @file (convenient for automagic users under Python >= 2.2).
3518 Removed @files (it seemed more like a plural than an abbrev. of
3524 Removed @files (it seemed more like a plural than an abbrev. of
3519 'file show').
3525 'file show').
3520
3526
3521 * IPython/iplib.py (install_first_time): Fixed crash if there were
3527 * IPython/iplib.py (install_first_time): Fixed crash if there were
3522 backup files ('~') in .ipython/ install directory.
3528 backup files ('~') in .ipython/ install directory.
3523
3529
3524 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3530 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3525 system. Things look fine, but these changes are fairly
3531 system. Things look fine, but these changes are fairly
3526 intrusive. Test them for a few days.
3532 intrusive. Test them for a few days.
3527
3533
3528 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3534 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3529 the prompts system. Now all in/out prompt strings are user
3535 the prompts system. Now all in/out prompt strings are user
3530 controllable. This is particularly useful for embedding, as one
3536 controllable. This is particularly useful for embedding, as one
3531 can tag embedded instances with particular prompts.
3537 can tag embedded instances with particular prompts.
3532
3538
3533 Also removed global use of sys.ps1/2, which now allows nested
3539 Also removed global use of sys.ps1/2, which now allows nested
3534 embeddings without any problems. Added command-line options for
3540 embeddings without any problems. Added command-line options for
3535 the prompt strings.
3541 the prompt strings.
3536
3542
3537 2002-03-08 Fernando Perez <fperez@colorado.edu>
3543 2002-03-08 Fernando Perez <fperez@colorado.edu>
3538
3544
3539 * IPython/UserConfig/example-embed-short.py (ipshell): added
3545 * IPython/UserConfig/example-embed-short.py (ipshell): added
3540 example file with the bare minimum code for embedding.
3546 example file with the bare minimum code for embedding.
3541
3547
3542 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3548 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3543 functionality for the embeddable shell to be activated/deactivated
3549 functionality for the embeddable shell to be activated/deactivated
3544 either globally or at each call.
3550 either globally or at each call.
3545
3551
3546 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3552 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3547 rewriting the prompt with '--->' for auto-inputs with proper
3553 rewriting the prompt with '--->' for auto-inputs with proper
3548 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3554 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3549 this is handled by the prompts class itself, as it should.
3555 this is handled by the prompts class itself, as it should.
3550
3556
3551 2002-03-05 Fernando Perez <fperez@colorado.edu>
3557 2002-03-05 Fernando Perez <fperez@colorado.edu>
3552
3558
3553 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3559 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3554 @logstart to avoid name clashes with the math log function.
3560 @logstart to avoid name clashes with the math log function.
3555
3561
3556 * Big updates to X/Emacs section of the manual.
3562 * Big updates to X/Emacs section of the manual.
3557
3563
3558 * Removed ipython_emacs. Milan explained to me how to pass
3564 * Removed ipython_emacs. Milan explained to me how to pass
3559 arguments to ipython through Emacs. Some day I'm going to end up
3565 arguments to ipython through Emacs. Some day I'm going to end up
3560 learning some lisp...
3566 learning some lisp...
3561
3567
3562 2002-03-04 Fernando Perez <fperez@colorado.edu>
3568 2002-03-04 Fernando Perez <fperez@colorado.edu>
3563
3569
3564 * IPython/ipython_emacs: Created script to be used as the
3570 * IPython/ipython_emacs: Created script to be used as the
3565 py-python-command Emacs variable so we can pass IPython
3571 py-python-command Emacs variable so we can pass IPython
3566 parameters. I can't figure out how to tell Emacs directly to pass
3572 parameters. I can't figure out how to tell Emacs directly to pass
3567 parameters to IPython, so a dummy shell script will do it.
3573 parameters to IPython, so a dummy shell script will do it.
3568
3574
3569 Other enhancements made for things to work better under Emacs'
3575 Other enhancements made for things to work better under Emacs'
3570 various types of terminals. Many thanks to Milan Zamazal
3576 various types of terminals. Many thanks to Milan Zamazal
3571 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3577 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3572
3578
3573 2002-03-01 Fernando Perez <fperez@colorado.edu>
3579 2002-03-01 Fernando Perez <fperez@colorado.edu>
3574
3580
3575 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3581 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3576 that loading of readline is now optional. This gives better
3582 that loading of readline is now optional. This gives better
3577 control to emacs users.
3583 control to emacs users.
3578
3584
3579 * IPython/ultraTB.py (__date__): Modified color escape sequences
3585 * IPython/ultraTB.py (__date__): Modified color escape sequences
3580 and now things work fine under xterm and in Emacs' term buffers
3586 and now things work fine under xterm and in Emacs' term buffers
3581 (though not shell ones). Well, in emacs you get colors, but all
3587 (though not shell ones). Well, in emacs you get colors, but all
3582 seem to be 'light' colors (no difference between dark and light
3588 seem to be 'light' colors (no difference between dark and light
3583 ones). But the garbage chars are gone, and also in xterms. It
3589 ones). But the garbage chars are gone, and also in xterms. It
3584 seems that now I'm using 'cleaner' ansi sequences.
3590 seems that now I'm using 'cleaner' ansi sequences.
3585
3591
3586 2002-02-21 Fernando Perez <fperez@colorado.edu>
3592 2002-02-21 Fernando Perez <fperez@colorado.edu>
3587
3593
3588 * Released 0.2.7 (mainly to publish the scoping fix).
3594 * Released 0.2.7 (mainly to publish the scoping fix).
3589
3595
3590 * IPython/Logger.py (Logger.logstate): added. A corresponding
3596 * IPython/Logger.py (Logger.logstate): added. A corresponding
3591 @logstate magic was created.
3597 @logstate magic was created.
3592
3598
3593 * IPython/Magic.py: fixed nested scoping problem under Python
3599 * IPython/Magic.py: fixed nested scoping problem under Python
3594 2.1.x (automagic wasn't working).
3600 2.1.x (automagic wasn't working).
3595
3601
3596 2002-02-20 Fernando Perez <fperez@colorado.edu>
3602 2002-02-20 Fernando Perez <fperez@colorado.edu>
3597
3603
3598 * Released 0.2.6.
3604 * Released 0.2.6.
3599
3605
3600 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3606 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3601 option so that logs can come out without any headers at all.
3607 option so that logs can come out without any headers at all.
3602
3608
3603 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3609 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3604 SciPy.
3610 SciPy.
3605
3611
3606 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3612 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3607 that embedded IPython calls don't require vars() to be explicitly
3613 that embedded IPython calls don't require vars() to be explicitly
3608 passed. Now they are extracted from the caller's frame (code
3614 passed. Now they are extracted from the caller's frame (code
3609 snatched from Eric Jones' weave). Added better documentation to
3615 snatched from Eric Jones' weave). Added better documentation to
3610 the section on embedding and the example file.
3616 the section on embedding and the example file.
3611
3617
3612 * IPython/genutils.py (page): Changed so that under emacs, it just
3618 * IPython/genutils.py (page): Changed so that under emacs, it just
3613 prints the string. You can then page up and down in the emacs
3619 prints the string. You can then page up and down in the emacs
3614 buffer itself. This is how the builtin help() works.
3620 buffer itself. This is how the builtin help() works.
3615
3621
3616 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3622 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3617 macro scoping: macros need to be executed in the user's namespace
3623 macro scoping: macros need to be executed in the user's namespace
3618 to work as if they had been typed by the user.
3624 to work as if they had been typed by the user.
3619
3625
3620 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3626 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3621 execute automatically (no need to type 'exec...'). They then
3627 execute automatically (no need to type 'exec...'). They then
3622 behave like 'true macros'. The printing system was also modified
3628 behave like 'true macros'. The printing system was also modified
3623 for this to work.
3629 for this to work.
3624
3630
3625 2002-02-19 Fernando Perez <fperez@colorado.edu>
3631 2002-02-19 Fernando Perez <fperez@colorado.edu>
3626
3632
3627 * IPython/genutils.py (page_file): new function for paging files
3633 * IPython/genutils.py (page_file): new function for paging files
3628 in an OS-independent way. Also necessary for file viewing to work
3634 in an OS-independent way. Also necessary for file viewing to work
3629 well inside Emacs buffers.
3635 well inside Emacs buffers.
3630 (page): Added checks for being in an emacs buffer.
3636 (page): Added checks for being in an emacs buffer.
3631 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3637 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3632 same bug in iplib.
3638 same bug in iplib.
3633
3639
3634 2002-02-18 Fernando Perez <fperez@colorado.edu>
3640 2002-02-18 Fernando Perez <fperez@colorado.edu>
3635
3641
3636 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3642 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3637 of readline so that IPython can work inside an Emacs buffer.
3643 of readline so that IPython can work inside an Emacs buffer.
3638
3644
3639 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3645 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3640 method signatures (they weren't really bugs, but it looks cleaner
3646 method signatures (they weren't really bugs, but it looks cleaner
3641 and keeps PyChecker happy).
3647 and keeps PyChecker happy).
3642
3648
3643 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3649 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3644 for implementing various user-defined hooks. Currently only
3650 for implementing various user-defined hooks. Currently only
3645 display is done.
3651 display is done.
3646
3652
3647 * IPython/Prompts.py (CachedOutput._display): changed display
3653 * IPython/Prompts.py (CachedOutput._display): changed display
3648 functions so that they can be dynamically changed by users easily.
3654 functions so that they can be dynamically changed by users easily.
3649
3655
3650 * IPython/Extensions/numeric_formats.py (num_display): added an
3656 * IPython/Extensions/numeric_formats.py (num_display): added an
3651 extension for printing NumPy arrays in flexible manners. It
3657 extension for printing NumPy arrays in flexible manners. It
3652 doesn't do anything yet, but all the structure is in
3658 doesn't do anything yet, but all the structure is in
3653 place. Ultimately the plan is to implement output format control
3659 place. Ultimately the plan is to implement output format control
3654 like in Octave.
3660 like in Octave.
3655
3661
3656 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3662 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3657 methods are found at run-time by all the automatic machinery.
3663 methods are found at run-time by all the automatic machinery.
3658
3664
3659 2002-02-17 Fernando Perez <fperez@colorado.edu>
3665 2002-02-17 Fernando Perez <fperez@colorado.edu>
3660
3666
3661 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3667 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3662 whole file a little.
3668 whole file a little.
3663
3669
3664 * ToDo: closed this document. Now there's a new_design.lyx
3670 * ToDo: closed this document. Now there's a new_design.lyx
3665 document for all new ideas. Added making a pdf of it for the
3671 document for all new ideas. Added making a pdf of it for the
3666 end-user distro.
3672 end-user distro.
3667
3673
3668 * IPython/Logger.py (Logger.switch_log): Created this to replace
3674 * IPython/Logger.py (Logger.switch_log): Created this to replace
3669 logon() and logoff(). It also fixes a nasty crash reported by
3675 logon() and logoff(). It also fixes a nasty crash reported by
3670 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3676 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3671
3677
3672 * IPython/iplib.py (complete): got auto-completion to work with
3678 * IPython/iplib.py (complete): got auto-completion to work with
3673 automagic (I had wanted this for a long time).
3679 automagic (I had wanted this for a long time).
3674
3680
3675 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3681 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3676 to @file, since file() is now a builtin and clashes with automagic
3682 to @file, since file() is now a builtin and clashes with automagic
3677 for @file.
3683 for @file.
3678
3684
3679 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3685 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3680 of this was previously in iplib, which had grown to more than 2000
3686 of this was previously in iplib, which had grown to more than 2000
3681 lines, way too long. No new functionality, but it makes managing
3687 lines, way too long. No new functionality, but it makes managing
3682 the code a bit easier.
3688 the code a bit easier.
3683
3689
3684 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3690 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3685 information to crash reports.
3691 information to crash reports.
3686
3692
3687 2002-02-12 Fernando Perez <fperez@colorado.edu>
3693 2002-02-12 Fernando Perez <fperez@colorado.edu>
3688
3694
3689 * Released 0.2.5.
3695 * Released 0.2.5.
3690
3696
3691 2002-02-11 Fernando Perez <fperez@colorado.edu>
3697 2002-02-11 Fernando Perez <fperez@colorado.edu>
3692
3698
3693 * Wrote a relatively complete Windows installer. It puts
3699 * Wrote a relatively complete Windows installer. It puts
3694 everything in place, creates Start Menu entries and fixes the
3700 everything in place, creates Start Menu entries and fixes the
3695 color issues. Nothing fancy, but it works.
3701 color issues. Nothing fancy, but it works.
3696
3702
3697 2002-02-10 Fernando Perez <fperez@colorado.edu>
3703 2002-02-10 Fernando Perez <fperez@colorado.edu>
3698
3704
3699 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3705 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3700 os.path.expanduser() call so that we can type @run ~/myfile.py and
3706 os.path.expanduser() call so that we can type @run ~/myfile.py and
3701 have thigs work as expected.
3707 have thigs work as expected.
3702
3708
3703 * IPython/genutils.py (page): fixed exception handling so things
3709 * IPython/genutils.py (page): fixed exception handling so things
3704 work both in Unix and Windows correctly. Quitting a pager triggers
3710 work both in Unix and Windows correctly. Quitting a pager triggers
3705 an IOError/broken pipe in Unix, and in windows not finding a pager
3711 an IOError/broken pipe in Unix, and in windows not finding a pager
3706 is also an IOError, so I had to actually look at the return value
3712 is also an IOError, so I had to actually look at the return value
3707 of the exception, not just the exception itself. Should be ok now.
3713 of the exception, not just the exception itself. Should be ok now.
3708
3714
3709 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3715 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3710 modified to allow case-insensitive color scheme changes.
3716 modified to allow case-insensitive color scheme changes.
3711
3717
3712 2002-02-09 Fernando Perez <fperez@colorado.edu>
3718 2002-02-09 Fernando Perez <fperez@colorado.edu>
3713
3719
3714 * IPython/genutils.py (native_line_ends): new function to leave
3720 * IPython/genutils.py (native_line_ends): new function to leave
3715 user config files with os-native line-endings.
3721 user config files with os-native line-endings.
3716
3722
3717 * README and manual updates.
3723 * README and manual updates.
3718
3724
3719 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3725 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3720 instead of StringType to catch Unicode strings.
3726 instead of StringType to catch Unicode strings.
3721
3727
3722 * IPython/genutils.py (filefind): fixed bug for paths with
3728 * IPython/genutils.py (filefind): fixed bug for paths with
3723 embedded spaces (very common in Windows).
3729 embedded spaces (very common in Windows).
3724
3730
3725 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3731 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3726 files under Windows, so that they get automatically associated
3732 files under Windows, so that they get automatically associated
3727 with a text editor. Windows makes it a pain to handle
3733 with a text editor. Windows makes it a pain to handle
3728 extension-less files.
3734 extension-less files.
3729
3735
3730 * IPython/iplib.py (InteractiveShell.init_readline): Made the
3736 * IPython/iplib.py (InteractiveShell.init_readline): Made the
3731 warning about readline only occur for Posix. In Windows there's no
3737 warning about readline only occur for Posix. In Windows there's no
3732 way to get readline, so why bother with the warning.
3738 way to get readline, so why bother with the warning.
3733
3739
3734 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
3740 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
3735 for __str__ instead of dir(self), since dir() changed in 2.2.
3741 for __str__ instead of dir(self), since dir() changed in 2.2.
3736
3742
3737 * Ported to Windows! Tested on XP, I suspect it should work fine
3743 * Ported to Windows! Tested on XP, I suspect it should work fine
3738 on NT/2000, but I don't think it will work on 98 et al. That
3744 on NT/2000, but I don't think it will work on 98 et al. That
3739 series of Windows is such a piece of junk anyway that I won't try
3745 series of Windows is such a piece of junk anyway that I won't try
3740 porting it there. The XP port was straightforward, showed a few
3746 porting it there. The XP port was straightforward, showed a few
3741 bugs here and there (fixed all), in particular some string
3747 bugs here and there (fixed all), in particular some string
3742 handling stuff which required considering Unicode strings (which
3748 handling stuff which required considering Unicode strings (which
3743 Windows uses). This is good, but hasn't been too tested :) No
3749 Windows uses). This is good, but hasn't been too tested :) No
3744 fancy installer yet, I'll put a note in the manual so people at
3750 fancy installer yet, I'll put a note in the manual so people at
3745 least make manually a shortcut.
3751 least make manually a shortcut.
3746
3752
3747 * IPython/iplib.py (Magic.magic_colors): Unified the color options
3753 * IPython/iplib.py (Magic.magic_colors): Unified the color options
3748 into a single one, "colors". This now controls both prompt and
3754 into a single one, "colors". This now controls both prompt and
3749 exception color schemes, and can be changed both at startup
3755 exception color schemes, and can be changed both at startup
3750 (either via command-line switches or via ipythonrc files) and at
3756 (either via command-line switches or via ipythonrc files) and at
3751 runtime, with @colors.
3757 runtime, with @colors.
3752 (Magic.magic_run): renamed @prun to @run and removed the old
3758 (Magic.magic_run): renamed @prun to @run and removed the old
3753 @run. The two were too similar to warrant keeping both.
3759 @run. The two were too similar to warrant keeping both.
3754
3760
3755 2002-02-03 Fernando Perez <fperez@colorado.edu>
3761 2002-02-03 Fernando Perez <fperez@colorado.edu>
3756
3762
3757 * IPython/iplib.py (install_first_time): Added comment on how to
3763 * IPython/iplib.py (install_first_time): Added comment on how to
3758 configure the color options for first-time users. Put a <return>
3764 configure the color options for first-time users. Put a <return>
3759 request at the end so that small-terminal users get a chance to
3765 request at the end so that small-terminal users get a chance to
3760 read the startup info.
3766 read the startup info.
3761
3767
3762 2002-01-23 Fernando Perez <fperez@colorado.edu>
3768 2002-01-23 Fernando Perez <fperez@colorado.edu>
3763
3769
3764 * IPython/iplib.py (CachedOutput.update): Changed output memory
3770 * IPython/iplib.py (CachedOutput.update): Changed output memory
3765 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
3771 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
3766 input history we still use _i. Did this b/c these variable are
3772 input history we still use _i. Did this b/c these variable are
3767 very commonly used in interactive work, so the less we need to
3773 very commonly used in interactive work, so the less we need to
3768 type the better off we are.
3774 type the better off we are.
3769 (Magic.magic_prun): updated @prun to better handle the namespaces
3775 (Magic.magic_prun): updated @prun to better handle the namespaces
3770 the file will run in, including a fix for __name__ not being set
3776 the file will run in, including a fix for __name__ not being set
3771 before.
3777 before.
3772
3778
3773 2002-01-20 Fernando Perez <fperez@colorado.edu>
3779 2002-01-20 Fernando Perez <fperez@colorado.edu>
3774
3780
3775 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
3781 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
3776 extra garbage for Python 2.2. Need to look more carefully into
3782 extra garbage for Python 2.2. Need to look more carefully into
3777 this later.
3783 this later.
3778
3784
3779 2002-01-19 Fernando Perez <fperez@colorado.edu>
3785 2002-01-19 Fernando Perez <fperez@colorado.edu>
3780
3786
3781 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
3787 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
3782 display SyntaxError exceptions properly formatted when they occur
3788 display SyntaxError exceptions properly formatted when they occur
3783 (they can be triggered by imported code).
3789 (they can be triggered by imported code).
3784
3790
3785 2002-01-18 Fernando Perez <fperez@colorado.edu>
3791 2002-01-18 Fernando Perez <fperez@colorado.edu>
3786
3792
3787 * IPython/iplib.py (InteractiveShell.safe_execfile): now
3793 * IPython/iplib.py (InteractiveShell.safe_execfile): now
3788 SyntaxError exceptions are reported nicely formatted, instead of
3794 SyntaxError exceptions are reported nicely formatted, instead of
3789 spitting out only offset information as before.
3795 spitting out only offset information as before.
3790 (Magic.magic_prun): Added the @prun function for executing
3796 (Magic.magic_prun): Added the @prun function for executing
3791 programs with command line args inside IPython.
3797 programs with command line args inside IPython.
3792
3798
3793 2002-01-16 Fernando Perez <fperez@colorado.edu>
3799 2002-01-16 Fernando Perez <fperez@colorado.edu>
3794
3800
3795 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
3801 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
3796 to *not* include the last item given in a range. This brings their
3802 to *not* include the last item given in a range. This brings their
3797 behavior in line with Python's slicing:
3803 behavior in line with Python's slicing:
3798 a[n1:n2] -> a[n1]...a[n2-1]
3804 a[n1:n2] -> a[n1]...a[n2-1]
3799 It may be a bit less convenient, but I prefer to stick to Python's
3805 It may be a bit less convenient, but I prefer to stick to Python's
3800 conventions *everywhere*, so users never have to wonder.
3806 conventions *everywhere*, so users never have to wonder.
3801 (Magic.magic_macro): Added @macro function to ease the creation of
3807 (Magic.magic_macro): Added @macro function to ease the creation of
3802 macros.
3808 macros.
3803
3809
3804 2002-01-05 Fernando Perez <fperez@colorado.edu>
3810 2002-01-05 Fernando Perez <fperez@colorado.edu>
3805
3811
3806 * Released 0.2.4.
3812 * Released 0.2.4.
3807
3813
3808 * IPython/iplib.py (Magic.magic_pdef):
3814 * IPython/iplib.py (Magic.magic_pdef):
3809 (InteractiveShell.safe_execfile): report magic lines and error
3815 (InteractiveShell.safe_execfile): report magic lines and error
3810 lines without line numbers so one can easily copy/paste them for
3816 lines without line numbers so one can easily copy/paste them for
3811 re-execution.
3817 re-execution.
3812
3818
3813 * Updated manual with recent changes.
3819 * Updated manual with recent changes.
3814
3820
3815 * IPython/iplib.py (Magic.magic_oinfo): added constructor
3821 * IPython/iplib.py (Magic.magic_oinfo): added constructor
3816 docstring printing when class? is called. Very handy for knowing
3822 docstring printing when class? is called. Very handy for knowing
3817 how to create class instances (as long as __init__ is well
3823 how to create class instances (as long as __init__ is well
3818 documented, of course :)
3824 documented, of course :)
3819 (Magic.magic_doc): print both class and constructor docstrings.
3825 (Magic.magic_doc): print both class and constructor docstrings.
3820 (Magic.magic_pdef): give constructor info if passed a class and
3826 (Magic.magic_pdef): give constructor info if passed a class and
3821 __call__ info for callable object instances.
3827 __call__ info for callable object instances.
3822
3828
3823 2002-01-04 Fernando Perez <fperez@colorado.edu>
3829 2002-01-04 Fernando Perez <fperez@colorado.edu>
3824
3830
3825 * Made deep_reload() off by default. It doesn't always work
3831 * Made deep_reload() off by default. It doesn't always work
3826 exactly as intended, so it's probably safer to have it off. It's
3832 exactly as intended, so it's probably safer to have it off. It's
3827 still available as dreload() anyway, so nothing is lost.
3833 still available as dreload() anyway, so nothing is lost.
3828
3834
3829 2002-01-02 Fernando Perez <fperez@colorado.edu>
3835 2002-01-02 Fernando Perez <fperez@colorado.edu>
3830
3836
3831 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
3837 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
3832 so I wanted an updated release).
3838 so I wanted an updated release).
3833
3839
3834 2001-12-27 Fernando Perez <fperez@colorado.edu>
3840 2001-12-27 Fernando Perez <fperez@colorado.edu>
3835
3841
3836 * IPython/iplib.py (InteractiveShell.interact): Added the original
3842 * IPython/iplib.py (InteractiveShell.interact): Added the original
3837 code from 'code.py' for this module in order to change the
3843 code from 'code.py' for this module in order to change the
3838 handling of a KeyboardInterrupt. This was necessary b/c otherwise
3844 handling of a KeyboardInterrupt. This was necessary b/c otherwise
3839 the history cache would break when the user hit Ctrl-C, and
3845 the history cache would break when the user hit Ctrl-C, and
3840 interact() offers no way to add any hooks to it.
3846 interact() offers no way to add any hooks to it.
3841
3847
3842 2001-12-23 Fernando Perez <fperez@colorado.edu>
3848 2001-12-23 Fernando Perez <fperez@colorado.edu>
3843
3849
3844 * setup.py: added check for 'MANIFEST' before trying to remove
3850 * setup.py: added check for 'MANIFEST' before trying to remove
3845 it. Thanks to Sean Reifschneider.
3851 it. Thanks to Sean Reifschneider.
3846
3852
3847 2001-12-22 Fernando Perez <fperez@colorado.edu>
3853 2001-12-22 Fernando Perez <fperez@colorado.edu>
3848
3854
3849 * Released 0.2.2.
3855 * Released 0.2.2.
3850
3856
3851 * Finished (reasonably) writing the manual. Later will add the
3857 * Finished (reasonably) writing the manual. Later will add the
3852 python-standard navigation stylesheets, but for the time being
3858 python-standard navigation stylesheets, but for the time being
3853 it's fairly complete. Distribution will include html and pdf
3859 it's fairly complete. Distribution will include html and pdf
3854 versions.
3860 versions.
3855
3861
3856 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
3862 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
3857 (MayaVi author).
3863 (MayaVi author).
3858
3864
3859 2001-12-21 Fernando Perez <fperez@colorado.edu>
3865 2001-12-21 Fernando Perez <fperez@colorado.edu>
3860
3866
3861 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
3867 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
3862 good public release, I think (with the manual and the distutils
3868 good public release, I think (with the manual and the distutils
3863 installer). The manual can use some work, but that can go
3869 installer). The manual can use some work, but that can go
3864 slowly. Otherwise I think it's quite nice for end users. Next
3870 slowly. Otherwise I think it's quite nice for end users. Next
3865 summer, rewrite the guts of it...
3871 summer, rewrite the guts of it...
3866
3872
3867 * Changed format of ipythonrc files to use whitespace as the
3873 * Changed format of ipythonrc files to use whitespace as the
3868 separator instead of an explicit '='. Cleaner.
3874 separator instead of an explicit '='. Cleaner.
3869
3875
3870 2001-12-20 Fernando Perez <fperez@colorado.edu>
3876 2001-12-20 Fernando Perez <fperez@colorado.edu>
3871
3877
3872 * Started a manual in LyX. For now it's just a quick merge of the
3878 * Started a manual in LyX. For now it's just a quick merge of the
3873 various internal docstrings and READMEs. Later it may grow into a
3879 various internal docstrings and READMEs. Later it may grow into a
3874 nice, full-blown manual.
3880 nice, full-blown manual.
3875
3881
3876 * Set up a distutils based installer. Installation should now be
3882 * Set up a distutils based installer. Installation should now be
3877 trivially simple for end-users.
3883 trivially simple for end-users.
3878
3884
3879 2001-12-11 Fernando Perez <fperez@colorado.edu>
3885 2001-12-11 Fernando Perez <fperez@colorado.edu>
3880
3886
3881 * Released 0.2.0. First public release, announced it at
3887 * Released 0.2.0. First public release, announced it at
3882 comp.lang.python. From now on, just bugfixes...
3888 comp.lang.python. From now on, just bugfixes...
3883
3889
3884 * Went through all the files, set copyright/license notices and
3890 * Went through all the files, set copyright/license notices and
3885 cleaned up things. Ready for release.
3891 cleaned up things. Ready for release.
3886
3892
3887 2001-12-10 Fernando Perez <fperez@colorado.edu>
3893 2001-12-10 Fernando Perez <fperez@colorado.edu>
3888
3894
3889 * Changed the first-time installer not to use tarfiles. It's more
3895 * Changed the first-time installer not to use tarfiles. It's more
3890 robust now and less unix-dependent. Also makes it easier for
3896 robust now and less unix-dependent. Also makes it easier for
3891 people to later upgrade versions.
3897 people to later upgrade versions.
3892
3898
3893 * Changed @exit to @abort to reflect the fact that it's pretty
3899 * Changed @exit to @abort to reflect the fact that it's pretty
3894 brutal (a sys.exit()). The difference between @abort and Ctrl-D
3900 brutal (a sys.exit()). The difference between @abort and Ctrl-D
3895 becomes significant only when IPyhton is embedded: in that case,
3901 becomes significant only when IPyhton is embedded: in that case,
3896 C-D closes IPython only, but @abort kills the enclosing program
3902 C-D closes IPython only, but @abort kills the enclosing program
3897 too (unless it had called IPython inside a try catching
3903 too (unless it had called IPython inside a try catching
3898 SystemExit).
3904 SystemExit).
3899
3905
3900 * Created Shell module which exposes the actuall IPython Shell
3906 * Created Shell module which exposes the actuall IPython Shell
3901 classes, currently the normal and the embeddable one. This at
3907 classes, currently the normal and the embeddable one. This at
3902 least offers a stable interface we won't need to change when
3908 least offers a stable interface we won't need to change when
3903 (later) the internals are rewritten. That rewrite will be confined
3909 (later) the internals are rewritten. That rewrite will be confined
3904 to iplib and ipmaker, but the Shell interface should remain as is.
3910 to iplib and ipmaker, but the Shell interface should remain as is.
3905
3911
3906 * Added embed module which offers an embeddable IPShell object,
3912 * Added embed module which offers an embeddable IPShell object,
3907 useful to fire up IPython *inside* a running program. Great for
3913 useful to fire up IPython *inside* a running program. Great for
3908 debugging or dynamical data analysis.
3914 debugging or dynamical data analysis.
3909
3915
3910 2001-12-08 Fernando Perez <fperez@colorado.edu>
3916 2001-12-08 Fernando Perez <fperez@colorado.edu>
3911
3917
3912 * Fixed small bug preventing seeing info from methods of defined
3918 * Fixed small bug preventing seeing info from methods of defined
3913 objects (incorrect namespace in _ofind()).
3919 objects (incorrect namespace in _ofind()).
3914
3920
3915 * Documentation cleanup. Moved the main usage docstrings to a
3921 * Documentation cleanup. Moved the main usage docstrings to a
3916 separate file, usage.py (cleaner to maintain, and hopefully in the
3922 separate file, usage.py (cleaner to maintain, and hopefully in the
3917 future some perlpod-like way of producing interactive, man and
3923 future some perlpod-like way of producing interactive, man and
3918 html docs out of it will be found).
3924 html docs out of it will be found).
3919
3925
3920 * Added @profile to see your profile at any time.
3926 * Added @profile to see your profile at any time.
3921
3927
3922 * Added @p as an alias for 'print'. It's especially convenient if
3928 * Added @p as an alias for 'print'. It's especially convenient if
3923 using automagic ('p x' prints x).
3929 using automagic ('p x' prints x).
3924
3930
3925 * Small cleanups and fixes after a pychecker run.
3931 * Small cleanups and fixes after a pychecker run.
3926
3932
3927 * Changed the @cd command to handle @cd - and @cd -<n> for
3933 * Changed the @cd command to handle @cd - and @cd -<n> for
3928 visiting any directory in _dh.
3934 visiting any directory in _dh.
3929
3935
3930 * Introduced _dh, a history of visited directories. @dhist prints
3936 * Introduced _dh, a history of visited directories. @dhist prints
3931 it out with numbers.
3937 it out with numbers.
3932
3938
3933 2001-12-07 Fernando Perez <fperez@colorado.edu>
3939 2001-12-07 Fernando Perez <fperez@colorado.edu>
3934
3940
3935 * Released 0.1.22
3941 * Released 0.1.22
3936
3942
3937 * Made initialization a bit more robust against invalid color
3943 * Made initialization a bit more robust against invalid color
3938 options in user input (exit, not traceback-crash).
3944 options in user input (exit, not traceback-crash).
3939
3945
3940 * Changed the bug crash reporter to write the report only in the
3946 * Changed the bug crash reporter to write the report only in the
3941 user's .ipython directory. That way IPython won't litter people's
3947 user's .ipython directory. That way IPython won't litter people's
3942 hard disks with crash files all over the place. Also print on
3948 hard disks with crash files all over the place. Also print on
3943 screen the necessary mail command.
3949 screen the necessary mail command.
3944
3950
3945 * With the new ultraTB, implemented LightBG color scheme for light
3951 * With the new ultraTB, implemented LightBG color scheme for light
3946 background terminals. A lot of people like white backgrounds, so I
3952 background terminals. A lot of people like white backgrounds, so I
3947 guess we should at least give them something readable.
3953 guess we should at least give them something readable.
3948
3954
3949 2001-12-06 Fernando Perez <fperez@colorado.edu>
3955 2001-12-06 Fernando Perez <fperez@colorado.edu>
3950
3956
3951 * Modified the structure of ultraTB. Now there's a proper class
3957 * Modified the structure of ultraTB. Now there's a proper class
3952 for tables of color schemes which allow adding schemes easily and
3958 for tables of color schemes which allow adding schemes easily and
3953 switching the active scheme without creating a new instance every
3959 switching the active scheme without creating a new instance every
3954 time (which was ridiculous). The syntax for creating new schemes
3960 time (which was ridiculous). The syntax for creating new schemes
3955 is also cleaner. I think ultraTB is finally done, with a clean
3961 is also cleaner. I think ultraTB is finally done, with a clean
3956 class structure. Names are also much cleaner (now there's proper
3962 class structure. Names are also much cleaner (now there's proper
3957 color tables, no need for every variable to also have 'color' in
3963 color tables, no need for every variable to also have 'color' in
3958 its name).
3964 its name).
3959
3965
3960 * Broke down genutils into separate files. Now genutils only
3966 * Broke down genutils into separate files. Now genutils only
3961 contains utility functions, and classes have been moved to their
3967 contains utility functions, and classes have been moved to their
3962 own files (they had enough independent functionality to warrant
3968 own files (they had enough independent functionality to warrant
3963 it): ConfigLoader, OutputTrap, Struct.
3969 it): ConfigLoader, OutputTrap, Struct.
3964
3970
3965 2001-12-05 Fernando Perez <fperez@colorado.edu>
3971 2001-12-05 Fernando Perez <fperez@colorado.edu>
3966
3972
3967 * IPython turns 21! Released version 0.1.21, as a candidate for
3973 * IPython turns 21! Released version 0.1.21, as a candidate for
3968 public consumption. If all goes well, release in a few days.
3974 public consumption. If all goes well, release in a few days.
3969
3975
3970 * Fixed path bug (files in Extensions/ directory wouldn't be found
3976 * Fixed path bug (files in Extensions/ directory wouldn't be found
3971 unless IPython/ was explicitly in sys.path).
3977 unless IPython/ was explicitly in sys.path).
3972
3978
3973 * Extended the FlexCompleter class as MagicCompleter to allow
3979 * Extended the FlexCompleter class as MagicCompleter to allow
3974 completion of @-starting lines.
3980 completion of @-starting lines.
3975
3981
3976 * Created __release__.py file as a central repository for release
3982 * Created __release__.py file as a central repository for release
3977 info that other files can read from.
3983 info that other files can read from.
3978
3984
3979 * Fixed small bug in logging: when logging was turned on in
3985 * Fixed small bug in logging: when logging was turned on in
3980 mid-session, old lines with special meanings (!@?) were being
3986 mid-session, old lines with special meanings (!@?) were being
3981 logged without the prepended comment, which is necessary since
3987 logged without the prepended comment, which is necessary since
3982 they are not truly valid python syntax. This should make session
3988 they are not truly valid python syntax. This should make session
3983 restores produce less errors.
3989 restores produce less errors.
3984
3990
3985 * The namespace cleanup forced me to make a FlexCompleter class
3991 * The namespace cleanup forced me to make a FlexCompleter class
3986 which is nothing but a ripoff of rlcompleter, but with selectable
3992 which is nothing but a ripoff of rlcompleter, but with selectable
3987 namespace (rlcompleter only works in __main__.__dict__). I'll try
3993 namespace (rlcompleter only works in __main__.__dict__). I'll try
3988 to submit a note to the authors to see if this change can be
3994 to submit a note to the authors to see if this change can be
3989 incorporated in future rlcompleter releases (Dec.6: done)
3995 incorporated in future rlcompleter releases (Dec.6: done)
3990
3996
3991 * More fixes to namespace handling. It was a mess! Now all
3997 * More fixes to namespace handling. It was a mess! Now all
3992 explicit references to __main__.__dict__ are gone (except when
3998 explicit references to __main__.__dict__ are gone (except when
3993 really needed) and everything is handled through the namespace
3999 really needed) and everything is handled through the namespace
3994 dicts in the IPython instance. We seem to be getting somewhere
4000 dicts in the IPython instance. We seem to be getting somewhere
3995 with this, finally...
4001 with this, finally...
3996
4002
3997 * Small documentation updates.
4003 * Small documentation updates.
3998
4004
3999 * Created the Extensions directory under IPython (with an
4005 * Created the Extensions directory under IPython (with an
4000 __init__.py). Put the PhysicalQ stuff there. This directory should
4006 __init__.py). Put the PhysicalQ stuff there. This directory should
4001 be used for all special-purpose extensions.
4007 be used for all special-purpose extensions.
4002
4008
4003 * File renaming:
4009 * File renaming:
4004 ipythonlib --> ipmaker
4010 ipythonlib --> ipmaker
4005 ipplib --> iplib
4011 ipplib --> iplib
4006 This makes a bit more sense in terms of what these files actually do.
4012 This makes a bit more sense in terms of what these files actually do.
4007
4013
4008 * Moved all the classes and functions in ipythonlib to ipplib, so
4014 * Moved all the classes and functions in ipythonlib to ipplib, so
4009 now ipythonlib only has make_IPython(). This will ease up its
4015 now ipythonlib only has make_IPython(). This will ease up its
4010 splitting in smaller functional chunks later.
4016 splitting in smaller functional chunks later.
4011
4017
4012 * Cleaned up (done, I think) output of @whos. Better column
4018 * Cleaned up (done, I think) output of @whos. Better column
4013 formatting, and now shows str(var) for as much as it can, which is
4019 formatting, and now shows str(var) for as much as it can, which is
4014 typically what one gets with a 'print var'.
4020 typically what one gets with a 'print var'.
4015
4021
4016 2001-12-04 Fernando Perez <fperez@colorado.edu>
4022 2001-12-04 Fernando Perez <fperez@colorado.edu>
4017
4023
4018 * Fixed namespace problems. Now builtin/IPyhton/user names get
4024 * Fixed namespace problems. Now builtin/IPyhton/user names get
4019 properly reported in their namespace. Internal namespace handling
4025 properly reported in their namespace. Internal namespace handling
4020 is finally getting decent (not perfect yet, but much better than
4026 is finally getting decent (not perfect yet, but much better than
4021 the ad-hoc mess we had).
4027 the ad-hoc mess we had).
4022
4028
4023 * Removed -exit option. If people just want to run a python
4029 * Removed -exit option. If people just want to run a python
4024 script, that's what the normal interpreter is for. Less
4030 script, that's what the normal interpreter is for. Less
4025 unnecessary options, less chances for bugs.
4031 unnecessary options, less chances for bugs.
4026
4032
4027 * Added a crash handler which generates a complete post-mortem if
4033 * Added a crash handler which generates a complete post-mortem if
4028 IPython crashes. This will help a lot in tracking bugs down the
4034 IPython crashes. This will help a lot in tracking bugs down the
4029 road.
4035 road.
4030
4036
4031 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4037 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4032 which were boud to functions being reassigned would bypass the
4038 which were boud to functions being reassigned would bypass the
4033 logger, breaking the sync of _il with the prompt counter. This
4039 logger, breaking the sync of _il with the prompt counter. This
4034 would then crash IPython later when a new line was logged.
4040 would then crash IPython later when a new line was logged.
4035
4041
4036 2001-12-02 Fernando Perez <fperez@colorado.edu>
4042 2001-12-02 Fernando Perez <fperez@colorado.edu>
4037
4043
4038 * Made IPython a package. This means people don't have to clutter
4044 * Made IPython a package. This means people don't have to clutter
4039 their sys.path with yet another directory. Changed the INSTALL
4045 their sys.path with yet another directory. Changed the INSTALL
4040 file accordingly.
4046 file accordingly.
4041
4047
4042 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4048 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4043 sorts its output (so @who shows it sorted) and @whos formats the
4049 sorts its output (so @who shows it sorted) and @whos formats the
4044 table according to the width of the first column. Nicer, easier to
4050 table according to the width of the first column. Nicer, easier to
4045 read. Todo: write a generic table_format() which takes a list of
4051 read. Todo: write a generic table_format() which takes a list of
4046 lists and prints it nicely formatted, with optional row/column
4052 lists and prints it nicely formatted, with optional row/column
4047 separators and proper padding and justification.
4053 separators and proper padding and justification.
4048
4054
4049 * Released 0.1.20
4055 * Released 0.1.20
4050
4056
4051 * Fixed bug in @log which would reverse the inputcache list (a
4057 * Fixed bug in @log which would reverse the inputcache list (a
4052 copy operation was missing).
4058 copy operation was missing).
4053
4059
4054 * Code cleanup. @config was changed to use page(). Better, since
4060 * Code cleanup. @config was changed to use page(). Better, since
4055 its output is always quite long.
4061 its output is always quite long.
4056
4062
4057 * Itpl is back as a dependency. I was having too many problems
4063 * Itpl is back as a dependency. I was having too many problems
4058 getting the parametric aliases to work reliably, and it's just
4064 getting the parametric aliases to work reliably, and it's just
4059 easier to code weird string operations with it than playing %()s
4065 easier to code weird string operations with it than playing %()s
4060 games. It's only ~6k, so I don't think it's too big a deal.
4066 games. It's only ~6k, so I don't think it's too big a deal.
4061
4067
4062 * Found (and fixed) a very nasty bug with history. !lines weren't
4068 * Found (and fixed) a very nasty bug with history. !lines weren't
4063 getting cached, and the out of sync caches would crash
4069 getting cached, and the out of sync caches would crash
4064 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4070 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4065 division of labor a bit better. Bug fixed, cleaner structure.
4071 division of labor a bit better. Bug fixed, cleaner structure.
4066
4072
4067 2001-12-01 Fernando Perez <fperez@colorado.edu>
4073 2001-12-01 Fernando Perez <fperez@colorado.edu>
4068
4074
4069 * Released 0.1.19
4075 * Released 0.1.19
4070
4076
4071 * Added option -n to @hist to prevent line number printing. Much
4077 * Added option -n to @hist to prevent line number printing. Much
4072 easier to copy/paste code this way.
4078 easier to copy/paste code this way.
4073
4079
4074 * Created global _il to hold the input list. Allows easy
4080 * Created global _il to hold the input list. Allows easy
4075 re-execution of blocks of code by slicing it (inspired by Janko's
4081 re-execution of blocks of code by slicing it (inspired by Janko's
4076 comment on 'macros').
4082 comment on 'macros').
4077
4083
4078 * Small fixes and doc updates.
4084 * Small fixes and doc updates.
4079
4085
4080 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4086 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4081 much too fragile with automagic. Handles properly multi-line
4087 much too fragile with automagic. Handles properly multi-line
4082 statements and takes parameters.
4088 statements and takes parameters.
4083
4089
4084 2001-11-30 Fernando Perez <fperez@colorado.edu>
4090 2001-11-30 Fernando Perez <fperez@colorado.edu>
4085
4091
4086 * Version 0.1.18 released.
4092 * Version 0.1.18 released.
4087
4093
4088 * Fixed nasty namespace bug in initial module imports.
4094 * Fixed nasty namespace bug in initial module imports.
4089
4095
4090 * Added copyright/license notes to all code files (except
4096 * Added copyright/license notes to all code files (except
4091 DPyGetOpt). For the time being, LGPL. That could change.
4097 DPyGetOpt). For the time being, LGPL. That could change.
4092
4098
4093 * Rewrote a much nicer README, updated INSTALL, cleaned up
4099 * Rewrote a much nicer README, updated INSTALL, cleaned up
4094 ipythonrc-* samples.
4100 ipythonrc-* samples.
4095
4101
4096 * Overall code/documentation cleanup. Basically ready for
4102 * Overall code/documentation cleanup. Basically ready for
4097 release. Only remaining thing: licence decision (LGPL?).
4103 release. Only remaining thing: licence decision (LGPL?).
4098
4104
4099 * Converted load_config to a class, ConfigLoader. Now recursion
4105 * Converted load_config to a class, ConfigLoader. Now recursion
4100 control is better organized. Doesn't include the same file twice.
4106 control is better organized. Doesn't include the same file twice.
4101
4107
4102 2001-11-29 Fernando Perez <fperez@colorado.edu>
4108 2001-11-29 Fernando Perez <fperez@colorado.edu>
4103
4109
4104 * Got input history working. Changed output history variables from
4110 * Got input history working. Changed output history variables from
4105 _p to _o so that _i is for input and _o for output. Just cleaner
4111 _p to _o so that _i is for input and _o for output. Just cleaner
4106 convention.
4112 convention.
4107
4113
4108 * Implemented parametric aliases. This pretty much allows the
4114 * Implemented parametric aliases. This pretty much allows the
4109 alias system to offer full-blown shell convenience, I think.
4115 alias system to offer full-blown shell convenience, I think.
4110
4116
4111 * Version 0.1.17 released, 0.1.18 opened.
4117 * Version 0.1.17 released, 0.1.18 opened.
4112
4118
4113 * dot_ipython/ipythonrc (alias): added documentation.
4119 * dot_ipython/ipythonrc (alias): added documentation.
4114 (xcolor): Fixed small bug (xcolors -> xcolor)
4120 (xcolor): Fixed small bug (xcolors -> xcolor)
4115
4121
4116 * Changed the alias system. Now alias is a magic command to define
4122 * Changed the alias system. Now alias is a magic command to define
4117 aliases just like the shell. Rationale: the builtin magics should
4123 aliases just like the shell. Rationale: the builtin magics should
4118 be there for things deeply connected to IPython's
4124 be there for things deeply connected to IPython's
4119 architecture. And this is a much lighter system for what I think
4125 architecture. And this is a much lighter system for what I think
4120 is the really important feature: allowing users to define quickly
4126 is the really important feature: allowing users to define quickly
4121 magics that will do shell things for them, so they can customize
4127 magics that will do shell things for them, so they can customize
4122 IPython easily to match their work habits. If someone is really
4128 IPython easily to match their work habits. If someone is really
4123 desperate to have another name for a builtin alias, they can
4129 desperate to have another name for a builtin alias, they can
4124 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4130 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4125 works.
4131 works.
4126
4132
4127 2001-11-28 Fernando Perez <fperez@colorado.edu>
4133 2001-11-28 Fernando Perez <fperez@colorado.edu>
4128
4134
4129 * Changed @file so that it opens the source file at the proper
4135 * Changed @file so that it opens the source file at the proper
4130 line. Since it uses less, if your EDITOR environment is
4136 line. Since it uses less, if your EDITOR environment is
4131 configured, typing v will immediately open your editor of choice
4137 configured, typing v will immediately open your editor of choice
4132 right at the line where the object is defined. Not as quick as
4138 right at the line where the object is defined. Not as quick as
4133 having a direct @edit command, but for all intents and purposes it
4139 having a direct @edit command, but for all intents and purposes it
4134 works. And I don't have to worry about writing @edit to deal with
4140 works. And I don't have to worry about writing @edit to deal with
4135 all the editors, less does that.
4141 all the editors, less does that.
4136
4142
4137 * Version 0.1.16 released, 0.1.17 opened.
4143 * Version 0.1.16 released, 0.1.17 opened.
4138
4144
4139 * Fixed some nasty bugs in the page/page_dumb combo that could
4145 * Fixed some nasty bugs in the page/page_dumb combo that could
4140 crash IPython.
4146 crash IPython.
4141
4147
4142 2001-11-27 Fernando Perez <fperez@colorado.edu>
4148 2001-11-27 Fernando Perez <fperez@colorado.edu>
4143
4149
4144 * Version 0.1.15 released, 0.1.16 opened.
4150 * Version 0.1.15 released, 0.1.16 opened.
4145
4151
4146 * Finally got ? and ?? to work for undefined things: now it's
4152 * Finally got ? and ?? to work for undefined things: now it's
4147 possible to type {}.get? and get information about the get method
4153 possible to type {}.get? and get information about the get method
4148 of dicts, or os.path? even if only os is defined (so technically
4154 of dicts, or os.path? even if only os is defined (so technically
4149 os.path isn't). Works at any level. For example, after import os,
4155 os.path isn't). Works at any level. For example, after import os,
4150 os?, os.path?, os.path.abspath? all work. This is great, took some
4156 os?, os.path?, os.path.abspath? all work. This is great, took some
4151 work in _ofind.
4157 work in _ofind.
4152
4158
4153 * Fixed more bugs with logging. The sanest way to do it was to add
4159 * Fixed more bugs with logging. The sanest way to do it was to add
4154 to @log a 'mode' parameter. Killed two in one shot (this mode
4160 to @log a 'mode' parameter. Killed two in one shot (this mode
4155 option was a request of Janko's). I think it's finally clean
4161 option was a request of Janko's). I think it's finally clean
4156 (famous last words).
4162 (famous last words).
4157
4163
4158 * Added a page_dumb() pager which does a decent job of paging on
4164 * Added a page_dumb() pager which does a decent job of paging on
4159 screen, if better things (like less) aren't available. One less
4165 screen, if better things (like less) aren't available. One less
4160 unix dependency (someday maybe somebody will port this to
4166 unix dependency (someday maybe somebody will port this to
4161 windows).
4167 windows).
4162
4168
4163 * Fixed problem in magic_log: would lock of logging out if log
4169 * Fixed problem in magic_log: would lock of logging out if log
4164 creation failed (because it would still think it had succeeded).
4170 creation failed (because it would still think it had succeeded).
4165
4171
4166 * Improved the page() function using curses to auto-detect screen
4172 * Improved the page() function using curses to auto-detect screen
4167 size. Now it can make a much better decision on whether to print
4173 size. Now it can make a much better decision on whether to print
4168 or page a string. Option screen_length was modified: a value 0
4174 or page a string. Option screen_length was modified: a value 0
4169 means auto-detect, and that's the default now.
4175 means auto-detect, and that's the default now.
4170
4176
4171 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4177 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4172 go out. I'll test it for a few days, then talk to Janko about
4178 go out. I'll test it for a few days, then talk to Janko about
4173 licences and announce it.
4179 licences and announce it.
4174
4180
4175 * Fixed the length of the auto-generated ---> prompt which appears
4181 * Fixed the length of the auto-generated ---> prompt which appears
4176 for auto-parens and auto-quotes. Getting this right isn't trivial,
4182 for auto-parens and auto-quotes. Getting this right isn't trivial,
4177 with all the color escapes, different prompt types and optional
4183 with all the color escapes, different prompt types and optional
4178 separators. But it seems to be working in all the combinations.
4184 separators. But it seems to be working in all the combinations.
4179
4185
4180 2001-11-26 Fernando Perez <fperez@colorado.edu>
4186 2001-11-26 Fernando Perez <fperez@colorado.edu>
4181
4187
4182 * Wrote a regexp filter to get option types from the option names
4188 * Wrote a regexp filter to get option types from the option names
4183 string. This eliminates the need to manually keep two duplicate
4189 string. This eliminates the need to manually keep two duplicate
4184 lists.
4190 lists.
4185
4191
4186 * Removed the unneeded check_option_names. Now options are handled
4192 * Removed the unneeded check_option_names. Now options are handled
4187 in a much saner manner and it's easy to visually check that things
4193 in a much saner manner and it's easy to visually check that things
4188 are ok.
4194 are ok.
4189
4195
4190 * Updated version numbers on all files I modified to carry a
4196 * Updated version numbers on all files I modified to carry a
4191 notice so Janko and Nathan have clear version markers.
4197 notice so Janko and Nathan have clear version markers.
4192
4198
4193 * Updated docstring for ultraTB with my changes. I should send
4199 * Updated docstring for ultraTB with my changes. I should send
4194 this to Nathan.
4200 this to Nathan.
4195
4201
4196 * Lots of small fixes. Ran everything through pychecker again.
4202 * Lots of small fixes. Ran everything through pychecker again.
4197
4203
4198 * Made loading of deep_reload an cmd line option. If it's not too
4204 * Made loading of deep_reload an cmd line option. If it's not too
4199 kosher, now people can just disable it. With -nodeep_reload it's
4205 kosher, now people can just disable it. With -nodeep_reload it's
4200 still available as dreload(), it just won't overwrite reload().
4206 still available as dreload(), it just won't overwrite reload().
4201
4207
4202 * Moved many options to the no| form (-opt and -noopt
4208 * Moved many options to the no| form (-opt and -noopt
4203 accepted). Cleaner.
4209 accepted). Cleaner.
4204
4210
4205 * Changed magic_log so that if called with no parameters, it uses
4211 * Changed magic_log so that if called with no parameters, it uses
4206 'rotate' mode. That way auto-generated logs aren't automatically
4212 'rotate' mode. That way auto-generated logs aren't automatically
4207 over-written. For normal logs, now a backup is made if it exists
4213 over-written. For normal logs, now a backup is made if it exists
4208 (only 1 level of backups). A new 'backup' mode was added to the
4214 (only 1 level of backups). A new 'backup' mode was added to the
4209 Logger class to support this. This was a request by Janko.
4215 Logger class to support this. This was a request by Janko.
4210
4216
4211 * Added @logoff/@logon to stop/restart an active log.
4217 * Added @logoff/@logon to stop/restart an active log.
4212
4218
4213 * Fixed a lot of bugs in log saving/replay. It was pretty
4219 * Fixed a lot of bugs in log saving/replay. It was pretty
4214 broken. Now special lines (!@,/) appear properly in the command
4220 broken. Now special lines (!@,/) appear properly in the command
4215 history after a log replay.
4221 history after a log replay.
4216
4222
4217 * Tried and failed to implement full session saving via pickle. My
4223 * Tried and failed to implement full session saving via pickle. My
4218 idea was to pickle __main__.__dict__, but modules can't be
4224 idea was to pickle __main__.__dict__, but modules can't be
4219 pickled. This would be a better alternative to replaying logs, but
4225 pickled. This would be a better alternative to replaying logs, but
4220 seems quite tricky to get to work. Changed -session to be called
4226 seems quite tricky to get to work. Changed -session to be called
4221 -logplay, which more accurately reflects what it does. And if we
4227 -logplay, which more accurately reflects what it does. And if we
4222 ever get real session saving working, -session is now available.
4228 ever get real session saving working, -session is now available.
4223
4229
4224 * Implemented color schemes for prompts also. As for tracebacks,
4230 * Implemented color schemes for prompts also. As for tracebacks,
4225 currently only NoColor and Linux are supported. But now the
4231 currently only NoColor and Linux are supported. But now the
4226 infrastructure is in place, based on a generic ColorScheme
4232 infrastructure is in place, based on a generic ColorScheme
4227 class. So writing and activating new schemes both for the prompts
4233 class. So writing and activating new schemes both for the prompts
4228 and the tracebacks should be straightforward.
4234 and the tracebacks should be straightforward.
4229
4235
4230 * Version 0.1.13 released, 0.1.14 opened.
4236 * Version 0.1.13 released, 0.1.14 opened.
4231
4237
4232 * Changed handling of options for output cache. Now counter is
4238 * Changed handling of options for output cache. Now counter is
4233 hardwired starting at 1 and one specifies the maximum number of
4239 hardwired starting at 1 and one specifies the maximum number of
4234 entries *in the outcache* (not the max prompt counter). This is
4240 entries *in the outcache* (not the max prompt counter). This is
4235 much better, since many statements won't increase the cache
4241 much better, since many statements won't increase the cache
4236 count. It also eliminated some confusing options, now there's only
4242 count. It also eliminated some confusing options, now there's only
4237 one: cache_size.
4243 one: cache_size.
4238
4244
4239 * Added 'alias' magic function and magic_alias option in the
4245 * Added 'alias' magic function and magic_alias option in the
4240 ipythonrc file. Now the user can easily define whatever names he
4246 ipythonrc file. Now the user can easily define whatever names he
4241 wants for the magic functions without having to play weird
4247 wants for the magic functions without having to play weird
4242 namespace games. This gives IPython a real shell-like feel.
4248 namespace games. This gives IPython a real shell-like feel.
4243
4249
4244 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4250 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4245 @ or not).
4251 @ or not).
4246
4252
4247 This was one of the last remaining 'visible' bugs (that I know
4253 This was one of the last remaining 'visible' bugs (that I know
4248 of). I think if I can clean up the session loading so it works
4254 of). I think if I can clean up the session loading so it works
4249 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4255 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4250 about licensing).
4256 about licensing).
4251
4257
4252 2001-11-25 Fernando Perez <fperez@colorado.edu>
4258 2001-11-25 Fernando Perez <fperez@colorado.edu>
4253
4259
4254 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4260 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4255 there's a cleaner distinction between what ? and ?? show.
4261 there's a cleaner distinction between what ? and ?? show.
4256
4262
4257 * Added screen_length option. Now the user can define his own
4263 * Added screen_length option. Now the user can define his own
4258 screen size for page() operations.
4264 screen size for page() operations.
4259
4265
4260 * Implemented magic shell-like functions with automatic code
4266 * Implemented magic shell-like functions with automatic code
4261 generation. Now adding another function is just a matter of adding
4267 generation. Now adding another function is just a matter of adding
4262 an entry to a dict, and the function is dynamically generated at
4268 an entry to a dict, and the function is dynamically generated at
4263 run-time. Python has some really cool features!
4269 run-time. Python has some really cool features!
4264
4270
4265 * Renamed many options to cleanup conventions a little. Now all
4271 * Renamed many options to cleanup conventions a little. Now all
4266 are lowercase, and only underscores where needed. Also in the code
4272 are lowercase, and only underscores where needed. Also in the code
4267 option name tables are clearer.
4273 option name tables are clearer.
4268
4274
4269 * Changed prompts a little. Now input is 'In [n]:' instead of
4275 * Changed prompts a little. Now input is 'In [n]:' instead of
4270 'In[n]:='. This allows it the numbers to be aligned with the
4276 'In[n]:='. This allows it the numbers to be aligned with the
4271 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4277 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4272 Python (it was a Mathematica thing). The '...' continuation prompt
4278 Python (it was a Mathematica thing). The '...' continuation prompt
4273 was also changed a little to align better.
4279 was also changed a little to align better.
4274
4280
4275 * Fixed bug when flushing output cache. Not all _p<n> variables
4281 * Fixed bug when flushing output cache. Not all _p<n> variables
4276 exist, so their deletion needs to be wrapped in a try:
4282 exist, so their deletion needs to be wrapped in a try:
4277
4283
4278 * Figured out how to properly use inspect.formatargspec() (it
4284 * Figured out how to properly use inspect.formatargspec() (it
4279 requires the args preceded by *). So I removed all the code from
4285 requires the args preceded by *). So I removed all the code from
4280 _get_pdef in Magic, which was just replicating that.
4286 _get_pdef in Magic, which was just replicating that.
4281
4287
4282 * Added test to prefilter to allow redefining magic function names
4288 * Added test to prefilter to allow redefining magic function names
4283 as variables. This is ok, since the @ form is always available,
4289 as variables. This is ok, since the @ form is always available,
4284 but whe should allow the user to define a variable called 'ls' if
4290 but whe should allow the user to define a variable called 'ls' if
4285 he needs it.
4291 he needs it.
4286
4292
4287 * Moved the ToDo information from README into a separate ToDo.
4293 * Moved the ToDo information from README into a separate ToDo.
4288
4294
4289 * General code cleanup and small bugfixes. I think it's close to a
4295 * General code cleanup and small bugfixes. I think it's close to a
4290 state where it can be released, obviously with a big 'beta'
4296 state where it can be released, obviously with a big 'beta'
4291 warning on it.
4297 warning on it.
4292
4298
4293 * Got the magic function split to work. Now all magics are defined
4299 * Got the magic function split to work. Now all magics are defined
4294 in a separate class. It just organizes things a bit, and now
4300 in a separate class. It just organizes things a bit, and now
4295 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4301 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4296 was too long).
4302 was too long).
4297
4303
4298 * Changed @clear to @reset to avoid potential confusions with
4304 * Changed @clear to @reset to avoid potential confusions with
4299 the shell command clear. Also renamed @cl to @clear, which does
4305 the shell command clear. Also renamed @cl to @clear, which does
4300 exactly what people expect it to from their shell experience.
4306 exactly what people expect it to from their shell experience.
4301
4307
4302 Added a check to the @reset command (since it's so
4308 Added a check to the @reset command (since it's so
4303 destructive, it's probably a good idea to ask for confirmation).
4309 destructive, it's probably a good idea to ask for confirmation).
4304 But now reset only works for full namespace resetting. Since the
4310 But now reset only works for full namespace resetting. Since the
4305 del keyword is already there for deleting a few specific
4311 del keyword is already there for deleting a few specific
4306 variables, I don't see the point of having a redundant magic
4312 variables, I don't see the point of having a redundant magic
4307 function for the same task.
4313 function for the same task.
4308
4314
4309 2001-11-24 Fernando Perez <fperez@colorado.edu>
4315 2001-11-24 Fernando Perez <fperez@colorado.edu>
4310
4316
4311 * Updated the builtin docs (esp. the ? ones).
4317 * Updated the builtin docs (esp. the ? ones).
4312
4318
4313 * Ran all the code through pychecker. Not terribly impressed with
4319 * Ran all the code through pychecker. Not terribly impressed with
4314 it: lots of spurious warnings and didn't really find anything of
4320 it: lots of spurious warnings and didn't really find anything of
4315 substance (just a few modules being imported and not used).
4321 substance (just a few modules being imported and not used).
4316
4322
4317 * Implemented the new ultraTB functionality into IPython. New
4323 * Implemented the new ultraTB functionality into IPython. New
4318 option: xcolors. This chooses color scheme. xmode now only selects
4324 option: xcolors. This chooses color scheme. xmode now only selects
4319 between Plain and Verbose. Better orthogonality.
4325 between Plain and Verbose. Better orthogonality.
4320
4326
4321 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4327 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4322 mode and color scheme for the exception handlers. Now it's
4328 mode and color scheme for the exception handlers. Now it's
4323 possible to have the verbose traceback with no coloring.
4329 possible to have the verbose traceback with no coloring.
4324
4330
4325 2001-11-23 Fernando Perez <fperez@colorado.edu>
4331 2001-11-23 Fernando Perez <fperez@colorado.edu>
4326
4332
4327 * Version 0.1.12 released, 0.1.13 opened.
4333 * Version 0.1.12 released, 0.1.13 opened.
4328
4334
4329 * Removed option to set auto-quote and auto-paren escapes by
4335 * Removed option to set auto-quote and auto-paren escapes by
4330 user. The chances of breaking valid syntax are just too high. If
4336 user. The chances of breaking valid syntax are just too high. If
4331 someone *really* wants, they can always dig into the code.
4337 someone *really* wants, they can always dig into the code.
4332
4338
4333 * Made prompt separators configurable.
4339 * Made prompt separators configurable.
4334
4340
4335 2001-11-22 Fernando Perez <fperez@colorado.edu>
4341 2001-11-22 Fernando Perez <fperez@colorado.edu>
4336
4342
4337 * Small bugfixes in many places.
4343 * Small bugfixes in many places.
4338
4344
4339 * Removed the MyCompleter class from ipplib. It seemed redundant
4345 * Removed the MyCompleter class from ipplib. It seemed redundant
4340 with the C-p,C-n history search functionality. Less code to
4346 with the C-p,C-n history search functionality. Less code to
4341 maintain.
4347 maintain.
4342
4348
4343 * Moved all the original ipython.py code into ipythonlib.py. Right
4349 * Moved all the original ipython.py code into ipythonlib.py. Right
4344 now it's just one big dump into a function called make_IPython, so
4350 now it's just one big dump into a function called make_IPython, so
4345 no real modularity has been gained. But at least it makes the
4351 no real modularity has been gained. But at least it makes the
4346 wrapper script tiny, and since ipythonlib is a module, it gets
4352 wrapper script tiny, and since ipythonlib is a module, it gets
4347 compiled and startup is much faster.
4353 compiled and startup is much faster.
4348
4354
4349 This is a reasobably 'deep' change, so we should test it for a
4355 This is a reasobably 'deep' change, so we should test it for a
4350 while without messing too much more with the code.
4356 while without messing too much more with the code.
4351
4357
4352 2001-11-21 Fernando Perez <fperez@colorado.edu>
4358 2001-11-21 Fernando Perez <fperez@colorado.edu>
4353
4359
4354 * Version 0.1.11 released, 0.1.12 opened for further work.
4360 * Version 0.1.11 released, 0.1.12 opened for further work.
4355
4361
4356 * Removed dependency on Itpl. It was only needed in one place. It
4362 * Removed dependency on Itpl. It was only needed in one place. It
4357 would be nice if this became part of python, though. It makes life
4363 would be nice if this became part of python, though. It makes life
4358 *a lot* easier in some cases.
4364 *a lot* easier in some cases.
4359
4365
4360 * Simplified the prefilter code a bit. Now all handlers are
4366 * Simplified the prefilter code a bit. Now all handlers are
4361 expected to explicitly return a value (at least a blank string).
4367 expected to explicitly return a value (at least a blank string).
4362
4368
4363 * Heavy edits in ipplib. Removed the help system altogether. Now
4369 * Heavy edits in ipplib. Removed the help system altogether. Now
4364 obj?/?? is used for inspecting objects, a magic @doc prints
4370 obj?/?? is used for inspecting objects, a magic @doc prints
4365 docstrings, and full-blown Python help is accessed via the 'help'
4371 docstrings, and full-blown Python help is accessed via the 'help'
4366 keyword. This cleans up a lot of code (less to maintain) and does
4372 keyword. This cleans up a lot of code (less to maintain) and does
4367 the job. Since 'help' is now a standard Python component, might as
4373 the job. Since 'help' is now a standard Python component, might as
4368 well use it and remove duplicate functionality.
4374 well use it and remove duplicate functionality.
4369
4375
4370 Also removed the option to use ipplib as a standalone program. By
4376 Also removed the option to use ipplib as a standalone program. By
4371 now it's too dependent on other parts of IPython to function alone.
4377 now it's too dependent on other parts of IPython to function alone.
4372
4378
4373 * Fixed bug in genutils.pager. It would crash if the pager was
4379 * Fixed bug in genutils.pager. It would crash if the pager was
4374 exited immediately after opening (broken pipe).
4380 exited immediately after opening (broken pipe).
4375
4381
4376 * Trimmed down the VerboseTB reporting a little. The header is
4382 * Trimmed down the VerboseTB reporting a little. The header is
4377 much shorter now and the repeated exception arguments at the end
4383 much shorter now and the repeated exception arguments at the end
4378 have been removed. For interactive use the old header seemed a bit
4384 have been removed. For interactive use the old header seemed a bit
4379 excessive.
4385 excessive.
4380
4386
4381 * Fixed small bug in output of @whos for variables with multi-word
4387 * Fixed small bug in output of @whos for variables with multi-word
4382 types (only first word was displayed).
4388 types (only first word was displayed).
4383
4389
4384 2001-11-17 Fernando Perez <fperez@colorado.edu>
4390 2001-11-17 Fernando Perez <fperez@colorado.edu>
4385
4391
4386 * Version 0.1.10 released, 0.1.11 opened for further work.
4392 * Version 0.1.10 released, 0.1.11 opened for further work.
4387
4393
4388 * Modified dirs and friends. dirs now *returns* the stack (not
4394 * Modified dirs and friends. dirs now *returns* the stack (not
4389 prints), so one can manipulate it as a variable. Convenient to
4395 prints), so one can manipulate it as a variable. Convenient to
4390 travel along many directories.
4396 travel along many directories.
4391
4397
4392 * Fixed bug in magic_pdef: would only work with functions with
4398 * Fixed bug in magic_pdef: would only work with functions with
4393 arguments with default values.
4399 arguments with default values.
4394
4400
4395 2001-11-14 Fernando Perez <fperez@colorado.edu>
4401 2001-11-14 Fernando Perez <fperez@colorado.edu>
4396
4402
4397 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4403 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4398 example with IPython. Various other minor fixes and cleanups.
4404 example with IPython. Various other minor fixes and cleanups.
4399
4405
4400 * Version 0.1.9 released, 0.1.10 opened for further work.
4406 * Version 0.1.9 released, 0.1.10 opened for further work.
4401
4407
4402 * Added sys.path to the list of directories searched in the
4408 * Added sys.path to the list of directories searched in the
4403 execfile= option. It used to be the current directory and the
4409 execfile= option. It used to be the current directory and the
4404 user's IPYTHONDIR only.
4410 user's IPYTHONDIR only.
4405
4411
4406 2001-11-13 Fernando Perez <fperez@colorado.edu>
4412 2001-11-13 Fernando Perez <fperez@colorado.edu>
4407
4413
4408 * Reinstated the raw_input/prefilter separation that Janko had
4414 * Reinstated the raw_input/prefilter separation that Janko had
4409 initially. This gives a more convenient setup for extending the
4415 initially. This gives a more convenient setup for extending the
4410 pre-processor from the outside: raw_input always gets a string,
4416 pre-processor from the outside: raw_input always gets a string,
4411 and prefilter has to process it. We can then redefine prefilter
4417 and prefilter has to process it. We can then redefine prefilter
4412 from the outside and implement extensions for special
4418 from the outside and implement extensions for special
4413 purposes.
4419 purposes.
4414
4420
4415 Today I got one for inputting PhysicalQuantity objects
4421 Today I got one for inputting PhysicalQuantity objects
4416 (from Scientific) without needing any function calls at
4422 (from Scientific) without needing any function calls at
4417 all. Extremely convenient, and it's all done as a user-level
4423 all. Extremely convenient, and it's all done as a user-level
4418 extension (no IPython code was touched). Now instead of:
4424 extension (no IPython code was touched). Now instead of:
4419 a = PhysicalQuantity(4.2,'m/s**2')
4425 a = PhysicalQuantity(4.2,'m/s**2')
4420 one can simply say
4426 one can simply say
4421 a = 4.2 m/s**2
4427 a = 4.2 m/s**2
4422 or even
4428 or even
4423 a = 4.2 m/s^2
4429 a = 4.2 m/s^2
4424
4430
4425 I use this, but it's also a proof of concept: IPython really is
4431 I use this, but it's also a proof of concept: IPython really is
4426 fully user-extensible, even at the level of the parsing of the
4432 fully user-extensible, even at the level of the parsing of the
4427 command line. It's not trivial, but it's perfectly doable.
4433 command line. It's not trivial, but it's perfectly doable.
4428
4434
4429 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4435 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4430 the problem of modules being loaded in the inverse order in which
4436 the problem of modules being loaded in the inverse order in which
4431 they were defined in
4437 they were defined in
4432
4438
4433 * Version 0.1.8 released, 0.1.9 opened for further work.
4439 * Version 0.1.8 released, 0.1.9 opened for further work.
4434
4440
4435 * Added magics pdef, source and file. They respectively show the
4441 * Added magics pdef, source and file. They respectively show the
4436 definition line ('prototype' in C), source code and full python
4442 definition line ('prototype' in C), source code and full python
4437 file for any callable object. The object inspector oinfo uses
4443 file for any callable object. The object inspector oinfo uses
4438 these to show the same information.
4444 these to show the same information.
4439
4445
4440 * Version 0.1.7 released, 0.1.8 opened for further work.
4446 * Version 0.1.7 released, 0.1.8 opened for further work.
4441
4447
4442 * Separated all the magic functions into a class called Magic. The
4448 * Separated all the magic functions into a class called Magic. The
4443 InteractiveShell class was becoming too big for Xemacs to handle
4449 InteractiveShell class was becoming too big for Xemacs to handle
4444 (de-indenting a line would lock it up for 10 seconds while it
4450 (de-indenting a line would lock it up for 10 seconds while it
4445 backtracked on the whole class!)
4451 backtracked on the whole class!)
4446
4452
4447 FIXME: didn't work. It can be done, but right now namespaces are
4453 FIXME: didn't work. It can be done, but right now namespaces are
4448 all messed up. Do it later (reverted it for now, so at least
4454 all messed up. Do it later (reverted it for now, so at least
4449 everything works as before).
4455 everything works as before).
4450
4456
4451 * Got the object introspection system (magic_oinfo) working! I
4457 * Got the object introspection system (magic_oinfo) working! I
4452 think this is pretty much ready for release to Janko, so he can
4458 think this is pretty much ready for release to Janko, so he can
4453 test it for a while and then announce it. Pretty much 100% of what
4459 test it for a while and then announce it. Pretty much 100% of what
4454 I wanted for the 'phase 1' release is ready. Happy, tired.
4460 I wanted for the 'phase 1' release is ready. Happy, tired.
4455
4461
4456 2001-11-12 Fernando Perez <fperez@colorado.edu>
4462 2001-11-12 Fernando Perez <fperez@colorado.edu>
4457
4463
4458 * Version 0.1.6 released, 0.1.7 opened for further work.
4464 * Version 0.1.6 released, 0.1.7 opened for further work.
4459
4465
4460 * Fixed bug in printing: it used to test for truth before
4466 * Fixed bug in printing: it used to test for truth before
4461 printing, so 0 wouldn't print. Now checks for None.
4467 printing, so 0 wouldn't print. Now checks for None.
4462
4468
4463 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4469 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4464 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4470 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4465 reaches by hand into the outputcache. Think of a better way to do
4471 reaches by hand into the outputcache. Think of a better way to do
4466 this later.
4472 this later.
4467
4473
4468 * Various small fixes thanks to Nathan's comments.
4474 * Various small fixes thanks to Nathan's comments.
4469
4475
4470 * Changed magic_pprint to magic_Pprint. This way it doesn't
4476 * Changed magic_pprint to magic_Pprint. This way it doesn't
4471 collide with pprint() and the name is consistent with the command
4477 collide with pprint() and the name is consistent with the command
4472 line option.
4478 line option.
4473
4479
4474 * Changed prompt counter behavior to be fully like
4480 * Changed prompt counter behavior to be fully like
4475 Mathematica's. That is, even input that doesn't return a result
4481 Mathematica's. That is, even input that doesn't return a result
4476 raises the prompt counter. The old behavior was kind of confusing
4482 raises the prompt counter. The old behavior was kind of confusing
4477 (getting the same prompt number several times if the operation
4483 (getting the same prompt number several times if the operation
4478 didn't return a result).
4484 didn't return a result).
4479
4485
4480 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4486 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4481
4487
4482 * Fixed -Classic mode (wasn't working anymore).
4488 * Fixed -Classic mode (wasn't working anymore).
4483
4489
4484 * Added colored prompts using Nathan's new code. Colors are
4490 * Added colored prompts using Nathan's new code. Colors are
4485 currently hardwired, they can be user-configurable. For
4491 currently hardwired, they can be user-configurable. For
4486 developers, they can be chosen in file ipythonlib.py, at the
4492 developers, they can be chosen in file ipythonlib.py, at the
4487 beginning of the CachedOutput class def.
4493 beginning of the CachedOutput class def.
4488
4494
4489 2001-11-11 Fernando Perez <fperez@colorado.edu>
4495 2001-11-11 Fernando Perez <fperez@colorado.edu>
4490
4496
4491 * Version 0.1.5 released, 0.1.6 opened for further work.
4497 * Version 0.1.5 released, 0.1.6 opened for further work.
4492
4498
4493 * Changed magic_env to *return* the environment as a dict (not to
4499 * Changed magic_env to *return* the environment as a dict (not to
4494 print it). This way it prints, but it can also be processed.
4500 print it). This way it prints, but it can also be processed.
4495
4501
4496 * Added Verbose exception reporting to interactive
4502 * Added Verbose exception reporting to interactive
4497 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4503 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4498 traceback. Had to make some changes to the ultraTB file. This is
4504 traceback. Had to make some changes to the ultraTB file. This is
4499 probably the last 'big' thing in my mental todo list. This ties
4505 probably the last 'big' thing in my mental todo list. This ties
4500 in with the next entry:
4506 in with the next entry:
4501
4507
4502 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4508 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4503 has to specify is Plain, Color or Verbose for all exception
4509 has to specify is Plain, Color or Verbose for all exception
4504 handling.
4510 handling.
4505
4511
4506 * Removed ShellServices option. All this can really be done via
4512 * Removed ShellServices option. All this can really be done via
4507 the magic system. It's easier to extend, cleaner and has automatic
4513 the magic system. It's easier to extend, cleaner and has automatic
4508 namespace protection and documentation.
4514 namespace protection and documentation.
4509
4515
4510 2001-11-09 Fernando Perez <fperez@colorado.edu>
4516 2001-11-09 Fernando Perez <fperez@colorado.edu>
4511
4517
4512 * Fixed bug in output cache flushing (missing parameter to
4518 * Fixed bug in output cache flushing (missing parameter to
4513 __init__). Other small bugs fixed (found using pychecker).
4519 __init__). Other small bugs fixed (found using pychecker).
4514
4520
4515 * Version 0.1.4 opened for bugfixing.
4521 * Version 0.1.4 opened for bugfixing.
4516
4522
4517 2001-11-07 Fernando Perez <fperez@colorado.edu>
4523 2001-11-07 Fernando Perez <fperez@colorado.edu>
4518
4524
4519 * Version 0.1.3 released, mainly because of the raw_input bug.
4525 * Version 0.1.3 released, mainly because of the raw_input bug.
4520
4526
4521 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4527 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4522 and when testing for whether things were callable, a call could
4528 and when testing for whether things were callable, a call could
4523 actually be made to certain functions. They would get called again
4529 actually be made to certain functions. They would get called again
4524 once 'really' executed, with a resulting double call. A disaster
4530 once 'really' executed, with a resulting double call. A disaster
4525 in many cases (list.reverse() would never work!).
4531 in many cases (list.reverse() would never work!).
4526
4532
4527 * Removed prefilter() function, moved its code to raw_input (which
4533 * Removed prefilter() function, moved its code to raw_input (which
4528 after all was just a near-empty caller for prefilter). This saves
4534 after all was just a near-empty caller for prefilter). This saves
4529 a function call on every prompt, and simplifies the class a tiny bit.
4535 a function call on every prompt, and simplifies the class a tiny bit.
4530
4536
4531 * Fix _ip to __ip name in magic example file.
4537 * Fix _ip to __ip name in magic example file.
4532
4538
4533 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4539 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4534 work with non-gnu versions of tar.
4540 work with non-gnu versions of tar.
4535
4541
4536 2001-11-06 Fernando Perez <fperez@colorado.edu>
4542 2001-11-06 Fernando Perez <fperez@colorado.edu>
4537
4543
4538 * Version 0.1.2. Just to keep track of the recent changes.
4544 * Version 0.1.2. Just to keep track of the recent changes.
4539
4545
4540 * Fixed nasty bug in output prompt routine. It used to check 'if
4546 * Fixed nasty bug in output prompt routine. It used to check 'if
4541 arg != None...'. Problem is, this fails if arg implements a
4547 arg != None...'. Problem is, this fails if arg implements a
4542 special comparison (__cmp__) which disallows comparing to
4548 special comparison (__cmp__) which disallows comparing to
4543 None. Found it when trying to use the PhysicalQuantity module from
4549 None. Found it when trying to use the PhysicalQuantity module from
4544 ScientificPython.
4550 ScientificPython.
4545
4551
4546 2001-11-05 Fernando Perez <fperez@colorado.edu>
4552 2001-11-05 Fernando Perez <fperez@colorado.edu>
4547
4553
4548 * Also added dirs. Now the pushd/popd/dirs family functions
4554 * Also added dirs. Now the pushd/popd/dirs family functions
4549 basically like the shell, with the added convenience of going home
4555 basically like the shell, with the added convenience of going home
4550 when called with no args.
4556 when called with no args.
4551
4557
4552 * pushd/popd slightly modified to mimic shell behavior more
4558 * pushd/popd slightly modified to mimic shell behavior more
4553 closely.
4559 closely.
4554
4560
4555 * Added env,pushd,popd from ShellServices as magic functions. I
4561 * Added env,pushd,popd from ShellServices as magic functions. I
4556 think the cleanest will be to port all desired functions from
4562 think the cleanest will be to port all desired functions from
4557 ShellServices as magics and remove ShellServices altogether. This
4563 ShellServices as magics and remove ShellServices altogether. This
4558 will provide a single, clean way of adding functionality
4564 will provide a single, clean way of adding functionality
4559 (shell-type or otherwise) to IP.
4565 (shell-type or otherwise) to IP.
4560
4566
4561 2001-11-04 Fernando Perez <fperez@colorado.edu>
4567 2001-11-04 Fernando Perez <fperez@colorado.edu>
4562
4568
4563 * Added .ipython/ directory to sys.path. This way users can keep
4569 * Added .ipython/ directory to sys.path. This way users can keep
4564 customizations there and access them via import.
4570 customizations there and access them via import.
4565
4571
4566 2001-11-03 Fernando Perez <fperez@colorado.edu>
4572 2001-11-03 Fernando Perez <fperez@colorado.edu>
4567
4573
4568 * Opened version 0.1.1 for new changes.
4574 * Opened version 0.1.1 for new changes.
4569
4575
4570 * Changed version number to 0.1.0: first 'public' release, sent to
4576 * Changed version number to 0.1.0: first 'public' release, sent to
4571 Nathan and Janko.
4577 Nathan and Janko.
4572
4578
4573 * Lots of small fixes and tweaks.
4579 * Lots of small fixes and tweaks.
4574
4580
4575 * Minor changes to whos format. Now strings are shown, snipped if
4581 * Minor changes to whos format. Now strings are shown, snipped if
4576 too long.
4582 too long.
4577
4583
4578 * Changed ShellServices to work on __main__ so they show up in @who
4584 * Changed ShellServices to work on __main__ so they show up in @who
4579
4585
4580 * Help also works with ? at the end of a line:
4586 * Help also works with ? at the end of a line:
4581 ?sin and sin?
4587 ?sin and sin?
4582 both produce the same effect. This is nice, as often I use the
4588 both produce the same effect. This is nice, as often I use the
4583 tab-complete to find the name of a method, but I used to then have
4589 tab-complete to find the name of a method, but I used to then have
4584 to go to the beginning of the line to put a ? if I wanted more
4590 to go to the beginning of the line to put a ? if I wanted more
4585 info. Now I can just add the ? and hit return. Convenient.
4591 info. Now I can just add the ? and hit return. Convenient.
4586
4592
4587 2001-11-02 Fernando Perez <fperez@colorado.edu>
4593 2001-11-02 Fernando Perez <fperez@colorado.edu>
4588
4594
4589 * Python version check (>=2.1) added.
4595 * Python version check (>=2.1) added.
4590
4596
4591 * Added LazyPython documentation. At this point the docs are quite
4597 * Added LazyPython documentation. At this point the docs are quite
4592 a mess. A cleanup is in order.
4598 a mess. A cleanup is in order.
4593
4599
4594 * Auto-installer created. For some bizarre reason, the zipfiles
4600 * Auto-installer created. For some bizarre reason, the zipfiles
4595 module isn't working on my system. So I made a tar version
4601 module isn't working on my system. So I made a tar version
4596 (hopefully the command line options in various systems won't kill
4602 (hopefully the command line options in various systems won't kill
4597 me).
4603 me).
4598
4604
4599 * Fixes to Struct in genutils. Now all dictionary-like methods are
4605 * Fixes to Struct in genutils. Now all dictionary-like methods are
4600 protected (reasonably).
4606 protected (reasonably).
4601
4607
4602 * Added pager function to genutils and changed ? to print usage
4608 * Added pager function to genutils and changed ? to print usage
4603 note through it (it was too long).
4609 note through it (it was too long).
4604
4610
4605 * Added the LazyPython functionality. Works great! I changed the
4611 * Added the LazyPython functionality. Works great! I changed the
4606 auto-quote escape to ';', it's on home row and next to '. But
4612 auto-quote escape to ';', it's on home row and next to '. But
4607 both auto-quote and auto-paren (still /) escapes are command-line
4613 both auto-quote and auto-paren (still /) escapes are command-line
4608 parameters.
4614 parameters.
4609
4615
4610
4616
4611 2001-11-01 Fernando Perez <fperez@colorado.edu>
4617 2001-11-01 Fernando Perez <fperez@colorado.edu>
4612
4618
4613 * Version changed to 0.0.7. Fairly large change: configuration now
4619 * Version changed to 0.0.7. Fairly large change: configuration now
4614 is all stored in a directory, by default .ipython. There, all
4620 is all stored in a directory, by default .ipython. There, all
4615 config files have normal looking names (not .names)
4621 config files have normal looking names (not .names)
4616
4622
4617 * Version 0.0.6 Released first to Lucas and Archie as a test
4623 * Version 0.0.6 Released first to Lucas and Archie as a test
4618 run. Since it's the first 'semi-public' release, change version to
4624 run. Since it's the first 'semi-public' release, change version to
4619 > 0.0.6 for any changes now.
4625 > 0.0.6 for any changes now.
4620
4626
4621 * Stuff I had put in the ipplib.py changelog:
4627 * Stuff I had put in the ipplib.py changelog:
4622
4628
4623 Changes to InteractiveShell:
4629 Changes to InteractiveShell:
4624
4630
4625 - Made the usage message a parameter.
4631 - Made the usage message a parameter.
4626
4632
4627 - Require the name of the shell variable to be given. It's a bit
4633 - Require the name of the shell variable to be given. It's a bit
4628 of a hack, but allows the name 'shell' not to be hardwire in the
4634 of a hack, but allows the name 'shell' not to be hardwire in the
4629 magic (@) handler, which is problematic b/c it requires
4635 magic (@) handler, which is problematic b/c it requires
4630 polluting the global namespace with 'shell'. This in turn is
4636 polluting the global namespace with 'shell'. This in turn is
4631 fragile: if a user redefines a variable called shell, things
4637 fragile: if a user redefines a variable called shell, things
4632 break.
4638 break.
4633
4639
4634 - magic @: all functions available through @ need to be defined
4640 - magic @: all functions available through @ need to be defined
4635 as magic_<name>, even though they can be called simply as
4641 as magic_<name>, even though they can be called simply as
4636 @<name>. This allows the special command @magic to gather
4642 @<name>. This allows the special command @magic to gather
4637 information automatically about all existing magic functions,
4643 information automatically about all existing magic functions,
4638 even if they are run-time user extensions, by parsing the shell
4644 even if they are run-time user extensions, by parsing the shell
4639 instance __dict__ looking for special magic_ names.
4645 instance __dict__ looking for special magic_ names.
4640
4646
4641 - mainloop: added *two* local namespace parameters. This allows
4647 - mainloop: added *two* local namespace parameters. This allows
4642 the class to differentiate between parameters which were there
4648 the class to differentiate between parameters which were there
4643 before and after command line initialization was processed. This
4649 before and after command line initialization was processed. This
4644 way, later @who can show things loaded at startup by the
4650 way, later @who can show things loaded at startup by the
4645 user. This trick was necessary to make session saving/reloading
4651 user. This trick was necessary to make session saving/reloading
4646 really work: ideally after saving/exiting/reloading a session,
4652 really work: ideally after saving/exiting/reloading a session,
4647 *everythin* should look the same, including the output of @who. I
4653 *everythin* should look the same, including the output of @who. I
4648 was only able to make this work with this double namespace
4654 was only able to make this work with this double namespace
4649 trick.
4655 trick.
4650
4656
4651 - added a header to the logfile which allows (almost) full
4657 - added a header to the logfile which allows (almost) full
4652 session restoring.
4658 session restoring.
4653
4659
4654 - prepend lines beginning with @ or !, with a and log
4660 - prepend lines beginning with @ or !, with a and log
4655 them. Why? !lines: may be useful to know what you did @lines:
4661 them. Why? !lines: may be useful to know what you did @lines:
4656 they may affect session state. So when restoring a session, at
4662 they may affect session state. So when restoring a session, at
4657 least inform the user of their presence. I couldn't quite get
4663 least inform the user of their presence. I couldn't quite get
4658 them to properly re-execute, but at least the user is warned.
4664 them to properly re-execute, but at least the user is warned.
4659
4665
4660 * Started ChangeLog.
4666 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now