##// END OF EJS Templates
- Fix autoindent which I had broken......
fperez -
Show More
@@ -1,2071 +1,2056 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 977 2005-12-30 01:23:52Z fperez $
9 $Id: iplib.py 978 2005-12-30 02:37:15Z 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, aliases and system calls. This
105 # for logging, user scripting, and more.
105 # is important for logging, user scripting, and more.
106
107 # We are basically exposing, via normal python functions, the three mechanisms
108 # in which ipython offers special call modes (magics for internal control,
109 # aliases for direct system access via pre-selected names, and !cmd for
110 # calling arbitrary system commands).
106
111
107 def ipmagic(arg_s):
112 def ipmagic(arg_s):
108 """Call a magic function by name.
113 """Call a magic function by name.
109
114
110 Input: a string containing the name of the magic function to call and any
115 Input: a string containing the name of the magic function to call and any
111 additional arguments to be passed to the magic.
116 additional arguments to be passed to the magic.
112
117
113 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
118 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
114 prompt:
119 prompt:
115
120
116 In[1]: %name -opt foo bar
121 In[1]: %name -opt foo bar
117
122
118 To call a magic without arguments, simply use ipmagic('name').
123 To call a magic without arguments, simply use ipmagic('name').
119
124
120 This provides a proper Python function to call IPython's magics in any
125 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
126 valid Python code you can type at the interpreter, including loops and
122 compound statements. It is added by IPython to the Python builtin
127 compound statements. It is added by IPython to the Python builtin
123 namespace upon initialization."""
128 namespace upon initialization."""
124
129
125 args = arg_s.split(' ',1)
130 args = arg_s.split(' ',1)
126 magic_name = args[0]
131 magic_name = args[0]
127 if magic_name.startswith(__IPYTHON__.ESC_MAGIC):
132 if magic_name.startswith(__IPYTHON__.ESC_MAGIC):
128 magic_name = magic_name[1:]
133 magic_name = magic_name[1:]
129 try:
134 try:
130 magic_args = args[1]
135 magic_args = args[1]
131 except IndexError:
136 except IndexError:
132 magic_args = ''
137 magic_args = ''
133 fn = getattr(__IPYTHON__,'magic_'+magic_name,None)
138 fn = getattr(__IPYTHON__,'magic_'+magic_name,None)
134 if fn is None:
139 if fn is None:
135 error("Magic function `%s` not found." % magic_name)
140 error("Magic function `%s` not found." % magic_name)
136 else:
141 else:
137 magic_args = __IPYTHON__.var_expand(magic_args)
142 magic_args = __IPYTHON__.var_expand(magic_args)
138 return fn(magic_args)
143 return fn(magic_args)
139
144
140 def ipalias(arg_s):
145 def ipalias(arg_s):
141 """Call an alias by name.
146 """Call an alias by name.
142
147
143 Input: a string containing the name of the alias to call and any
148 Input: a string containing the name of the alias to call and any
144 additional arguments to be passed to the magic.
149 additional arguments to be passed to the magic.
145
150
146 ipalias('name -opt foo bar') is equivalent to typing at the ipython
151 ipalias('name -opt foo bar') is equivalent to typing at the ipython
147 prompt:
152 prompt:
148
153
149 In[1]: name -opt foo bar
154 In[1]: name -opt foo bar
150
155
151 To call an alias without arguments, simply use ipalias('name').
156 To call an alias without arguments, simply use ipalias('name').
152
157
153 This provides a proper Python function to call IPython's aliases in any
158 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
159 valid Python code you can type at the interpreter, including loops and
155 compound statements. It is added by IPython to the Python builtin
160 compound statements. It is added by IPython to the Python builtin
156 namespace upon initialization."""
161 namespace upon initialization."""
157
162
158 args = arg_s.split(' ',1)
163 args = arg_s.split(' ',1)
159 alias_name = args[0]
164 alias_name = args[0]
160 try:
165 try:
161 alias_args = args[1]
166 alias_args = args[1]
162 except IndexError:
167 except IndexError:
163 alias_args = ''
168 alias_args = ''
164 if alias_name in __IPYTHON__.alias_table:
169 if alias_name in __IPYTHON__.alias_table:
165 __IPYTHON__.call_alias(alias_name,alias_args)
170 __IPYTHON__.call_alias(alias_name,alias_args)
166 else:
171 else:
167 error("Alias `%s` not found." % alias_name)
172 error("Alias `%s` not found." % alias_name)
168
173
174 def ipsystem(arg_s):
175 """Make a system call, using IPython."""
176 __IPYTHON__.system(arg_s)
177
178
169 #****************************************************************************
179 #****************************************************************************
170 # Local use exceptions
180 # Local use exceptions
171 class SpaceInInput(exceptions.Exception): pass
181 class SpaceInInput(exceptions.Exception): pass
172
182
173 #****************************************************************************
183 #****************************************************************************
174 # Local use classes
184 # Local use classes
175 class Bunch: pass
185 class Bunch: pass
176
186
177 class InputList(list):
187 class InputList(list):
178 """Class to store user input.
188 """Class to store user input.
179
189
180 It's basically a list, but slices return a string instead of a list, thus
190 It's basically a list, but slices return a string instead of a list, thus
181 allowing things like (assuming 'In' is an instance):
191 allowing things like (assuming 'In' is an instance):
182
192
183 exec In[4:7]
193 exec In[4:7]
184
194
185 or
195 or
186
196
187 exec In[5:9] + In[14] + In[21:25]"""
197 exec In[5:9] + In[14] + In[21:25]"""
188
198
189 def __getslice__(self,i,j):
199 def __getslice__(self,i,j):
190 return ''.join(list.__getslice__(self,i,j))
200 return ''.join(list.__getslice__(self,i,j))
191
201
192 class SyntaxTB(ultraTB.ListTB):
202 class SyntaxTB(ultraTB.ListTB):
193 """Extension which holds some state: the last exception value"""
203 """Extension which holds some state: the last exception value"""
194
204
195 def __init__(self,color_scheme = 'NoColor'):
205 def __init__(self,color_scheme = 'NoColor'):
196 ultraTB.ListTB.__init__(self,color_scheme)
206 ultraTB.ListTB.__init__(self,color_scheme)
197 self.last_syntax_error = None
207 self.last_syntax_error = None
198
208
199 def __call__(self, etype, value, elist):
209 def __call__(self, etype, value, elist):
200 self.last_syntax_error = value
210 self.last_syntax_error = value
201 ultraTB.ListTB.__call__(self,etype,value,elist)
211 ultraTB.ListTB.__call__(self,etype,value,elist)
202
212
203 def clear_err_state(self):
213 def clear_err_state(self):
204 """Return the current error state and clear it"""
214 """Return the current error state and clear it"""
205 e = self.last_syntax_error
215 e = self.last_syntax_error
206 self.last_syntax_error = None
216 self.last_syntax_error = None
207 return e
217 return e
208
218
209 #****************************************************************************
219 #****************************************************************************
210 # Main IPython class
220 # Main IPython class
211
221
212 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
222 # 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
223 # 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
224 # 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.
225 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
216 #
226 #
217 # But at least now, all the pieces have been separated and we could, in
227 # 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
228 # principle, stop using the mixin. This will ease the transition to the
219 # chainsaw branch.
229 # chainsaw branch.
220
230
221 # For reference, the following is the list of 'self.foo' uses in the Magic
231 # 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
232 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
223 # class, to prevent clashes.
233 # class, to prevent clashes.
224
234
225 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
235 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
226 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
236 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
227 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
237 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
228 # 'self.value']
238 # 'self.value']
229
239
230 class InteractiveShell(Magic):
240 class InteractiveShell(Magic):
231 """An enhanced console for Python."""
241 """An enhanced console for Python."""
232
242
233 # class attribute to indicate whether the class supports threads or not.
243 # class attribute to indicate whether the class supports threads or not.
234 # Subclasses with thread support should override this as needed.
244 # Subclasses with thread support should override this as needed.
235 isthreaded = False
245 isthreaded = False
236
246
237 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
247 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
238 user_ns = None,user_global_ns=None,banner2='',
248 user_ns = None,user_global_ns=None,banner2='',
239 custom_exceptions=((),None),embedded=False):
249 custom_exceptions=((),None),embedded=False):
240
250
241 # some minimal strict typechecks. For some core data structures, I
251 # some minimal strict typechecks. For some core data structures, I
242 # want actual basic python types, not just anything that looks like
252 # want actual basic python types, not just anything that looks like
243 # one. This is especially true for namespaces.
253 # one. This is especially true for namespaces.
244 for ns in (user_ns,user_global_ns):
254 for ns in (user_ns,user_global_ns):
245 if ns is not None and type(ns) != types.DictType:
255 if ns is not None and type(ns) != types.DictType:
246 raise TypeError,'namespace must be a dictionary'
256 raise TypeError,'namespace must be a dictionary'
247
257
248 # Put a reference to self in builtins so that any form of embedded or
258 # Put a reference to self in builtins so that any form of embedded or
249 # imported code can test for being inside IPython.
259 # imported code can test for being inside IPython.
250 __builtin__.__IPYTHON__ = self
260 __builtin__.__IPYTHON__ = self
251
261
252 # And load into builtins ipmagic/ipalias as well
262 # And load into builtins ipmagic/ipalias/ipsystem as well
253 __builtin__.ipmagic = ipmagic
263 __builtin__.ipmagic = ipmagic
254 __builtin__.ipalias = ipalias
264 __builtin__.ipalias = ipalias
265 __builtin__.ipsystem = ipsystem
255
266
256 # Add to __builtin__ other parts of IPython's public API
267 # Add to __builtin__ other parts of IPython's public API
257 __builtin__.ip_set_hook = self.set_hook
268 __builtin__.ip_set_hook = self.set_hook
258
269
259 # Keep in the builtins a flag for when IPython is active. We set it
270 # 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
271 # with setdefault so that multiple nested IPythons don't clobber one
261 # another. Each will increase its value by one upon being activated,
272 # another. Each will increase its value by one upon being activated,
262 # which also gives us a way to determine the nesting level.
273 # which also gives us a way to determine the nesting level.
263 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
274 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
264
275
265 # Do the intuitively correct thing for quit/exit: we remove the
276 # Do the intuitively correct thing for quit/exit: we remove the
266 # builtins if they exist, and our own prefilter routine will handle
277 # builtins if they exist, and our own prefilter routine will handle
267 # these special cases
278 # these special cases
268 try:
279 try:
269 del __builtin__.exit, __builtin__.quit
280 del __builtin__.exit, __builtin__.quit
270 except AttributeError:
281 except AttributeError:
271 pass
282 pass
272
283
273 # Store the actual shell's name
284 # Store the actual shell's name
274 self.name = name
285 self.name = name
275
286
276 # We need to know whether the instance is meant for embedding, since
287 # We need to know whether the instance is meant for embedding, since
277 # global/local namespaces need to be handled differently in that case
288 # global/local namespaces need to be handled differently in that case
278 self.embedded = embedded
289 self.embedded = embedded
279
290
280 # command compiler
291 # command compiler
281 self.compile = codeop.CommandCompiler()
292 self.compile = codeop.CommandCompiler()
282
293
283 # User input buffer
294 # User input buffer
284 self.buffer = []
295 self.buffer = []
285
296
286 # Default name given in compilation of code
297 # Default name given in compilation of code
287 self.filename = '<ipython console>'
298 self.filename = '<ipython console>'
288
299
289 # Create the namespace where the user will operate. user_ns is
300 # 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
301 # 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
302 # the locals argument. But we do carry a user_global_ns namespace
292 # given as the exec 'globals' argument, This is useful in embedding
303 # given as the exec 'globals' argument, This is useful in embedding
293 # situations where the ipython shell opens in a context where the
304 # situations where the ipython shell opens in a context where the
294 # distinction between locals and globals is meaningful.
305 # distinction between locals and globals is meaningful.
295
306
296 # FIXME. For some strange reason, __builtins__ is showing up at user
307 # 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
308 # 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
309 # should really track down where the problem is coming from. Alex
299 # Schmolck reported this problem first.
310 # Schmolck reported this problem first.
300
311
301 # A useful post by Alex Martelli on this topic:
312 # A useful post by Alex Martelli on this topic:
302 # Re: inconsistent value from __builtins__
313 # Re: inconsistent value from __builtins__
303 # Von: Alex Martelli <aleaxit@yahoo.com>
314 # Von: Alex Martelli <aleaxit@yahoo.com>
304 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
315 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
305 # Gruppen: comp.lang.python
316 # Gruppen: comp.lang.python
306
317
307 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
318 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
308 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
319 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
309 # > <type 'dict'>
320 # > <type 'dict'>
310 # > >>> print type(__builtins__)
321 # > >>> print type(__builtins__)
311 # > <type 'module'>
322 # > <type 'module'>
312 # > Is this difference in return value intentional?
323 # > Is this difference in return value intentional?
313
324
314 # Well, it's documented that '__builtins__' can be either a dictionary
325 # 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
326 # 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
327 # 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
328 # that if you need to access the built-in namespace directly, you
318 # should start with "import __builtin__" (note, no 's') which will
329 # should start with "import __builtin__" (note, no 's') which will
319 # definitely give you a module. Yeah, it's somewhatΒ confusing:-(.
330 # definitely give you a module. Yeah, it's somewhatΒ confusing:-(.
320
331
321 if user_ns is None:
332 if user_ns is None:
322 # Set __name__ to __main__ to better match the behavior of the
333 # Set __name__ to __main__ to better match the behavior of the
323 # normal interpreter.
334 # normal interpreter.
324 user_ns = {'__name__' :'__main__',
335 user_ns = {'__name__' :'__main__',
325 '__builtins__' : __builtin__,
336 '__builtins__' : __builtin__,
326 }
337 }
327
338
328 if user_global_ns is None:
339 if user_global_ns is None:
329 user_global_ns = {}
340 user_global_ns = {}
330
341
331 # Assign namespaces
342 # Assign namespaces
332 # This is the namespace where all normal user variables live
343 # This is the namespace where all normal user variables live
333 self.user_ns = user_ns
344 self.user_ns = user_ns
334 # Embedded instances require a separate namespace for globals.
345 # Embedded instances require a separate namespace for globals.
335 # Normally this one is unused by non-embedded instances.
346 # Normally this one is unused by non-embedded instances.
336 self.user_global_ns = user_global_ns
347 self.user_global_ns = user_global_ns
337 # A namespace to keep track of internal data structures to prevent
348 # A namespace to keep track of internal data structures to prevent
338 # them from cluttering user-visible stuff. Will be updated later
349 # them from cluttering user-visible stuff. Will be updated later
339 self.internal_ns = {}
350 self.internal_ns = {}
340
351
341 # Namespace of system aliases. Each entry in the alias
352 # 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
353 # table must be a 2-tuple of the form (N,name), where N is the number
343 # of positional arguments of the alias.
354 # of positional arguments of the alias.
344 self.alias_table = {}
355 self.alias_table = {}
345
356
346 # A table holding all the namespaces IPython deals with, so that
357 # A table holding all the namespaces IPython deals with, so that
347 # introspection facilities can search easily.
358 # introspection facilities can search easily.
348 self.ns_table = {'user':user_ns,
359 self.ns_table = {'user':user_ns,
349 'user_global':user_global_ns,
360 'user_global':user_global_ns,
350 'alias':self.alias_table,
361 'alias':self.alias_table,
351 'internal':self.internal_ns,
362 'internal':self.internal_ns,
352 'builtin':__builtin__.__dict__
363 'builtin':__builtin__.__dict__
353 }
364 }
354
365
355 # The user namespace MUST have a pointer to the shell itself.
366 # The user namespace MUST have a pointer to the shell itself.
356 self.user_ns[name] = self
367 self.user_ns[name] = self
357
368
358 # We need to insert into sys.modules something that looks like a
369 # We need to insert into sys.modules something that looks like a
359 # module but which accesses the IPython namespace, for shelve and
370 # module but which accesses the IPython namespace, for shelve and
360 # pickle to work interactively. Normally they rely on getting
371 # pickle to work interactively. Normally they rely on getting
361 # everything out of __main__, but for embedding purposes each IPython
372 # everything out of __main__, but for embedding purposes each IPython
362 # instance has its own private namespace, so we can't go shoving
373 # instance has its own private namespace, so we can't go shoving
363 # everything into __main__.
374 # everything into __main__.
364
375
365 # note, however, that we should only do this for non-embedded
376 # note, however, that we should only do this for non-embedded
366 # ipythons, which really mimic the __main__.__dict__ with their own
377 # ipythons, which really mimic the __main__.__dict__ with their own
367 # namespace. Embedded instances, on the other hand, should not do
378 # namespace. Embedded instances, on the other hand, should not do
368 # this because they need to manage the user local/global namespaces
379 # this because they need to manage the user local/global namespaces
369 # only, but they live within a 'normal' __main__ (meaning, they
380 # only, but they live within a 'normal' __main__ (meaning, they
370 # shouldn't overtake the execution environment of the script they're
381 # shouldn't overtake the execution environment of the script they're
371 # embedded in).
382 # embedded in).
372
383
373 if not embedded:
384 if not embedded:
374 try:
385 try:
375 main_name = self.user_ns['__name__']
386 main_name = self.user_ns['__name__']
376 except KeyError:
387 except KeyError:
377 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
388 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
378 else:
389 else:
379 #print "pickle hack in place" # dbg
390 #print "pickle hack in place" # dbg
380 sys.modules[main_name] = FakeModule(self.user_ns)
391 sys.modules[main_name] = FakeModule(self.user_ns)
381
392
382 # List of input with multi-line handling.
393 # List of input with multi-line handling.
383 # Fill its zero entry, user counter starts at 1
394 # Fill its zero entry, user counter starts at 1
384 self.input_hist = InputList(['\n'])
395 self.input_hist = InputList(['\n'])
385
396
386 # list of visited directories
397 # list of visited directories
387 try:
398 try:
388 self.dir_hist = [os.getcwd()]
399 self.dir_hist = [os.getcwd()]
389 except IOError, e:
400 except IOError, e:
390 self.dir_hist = []
401 self.dir_hist = []
391
402
392 # dict of output history
403 # dict of output history
393 self.output_hist = {}
404 self.output_hist = {}
394
405
395 # dict of things NOT to alias (keywords, builtins and some magics)
406 # dict of things NOT to alias (keywords, builtins and some magics)
396 no_alias = {}
407 no_alias = {}
397 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
408 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
398 for key in keyword.kwlist + no_alias_magics:
409 for key in keyword.kwlist + no_alias_magics:
399 no_alias[key] = 1
410 no_alias[key] = 1
400 no_alias.update(__builtin__.__dict__)
411 no_alias.update(__builtin__.__dict__)
401 self.no_alias = no_alias
412 self.no_alias = no_alias
402
413
403 # make global variables for user access to these
414 # make global variables for user access to these
404 self.user_ns['_ih'] = self.input_hist
415 self.user_ns['_ih'] = self.input_hist
405 self.user_ns['_oh'] = self.output_hist
416 self.user_ns['_oh'] = self.output_hist
406 self.user_ns['_dh'] = self.dir_hist
417 self.user_ns['_dh'] = self.dir_hist
407
418
408 # user aliases to input and output histories
419 # user aliases to input and output histories
409 self.user_ns['In'] = self.input_hist
420 self.user_ns['In'] = self.input_hist
410 self.user_ns['Out'] = self.output_hist
421 self.user_ns['Out'] = self.output_hist
411
422
412 # Object variable to store code object waiting execution. This is
423 # Object variable to store code object waiting execution. This is
413 # used mainly by the multithreaded shells, but it can come in handy in
424 # 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
425 # other situations. No need to use a Queue here, since it's a single
415 # item which gets cleared once run.
426 # item which gets cleared once run.
416 self.code_to_run = None
427 self.code_to_run = None
417
428
418 # Job manager (for jobs run as background threads)
429 # Job manager (for jobs run as background threads)
419 self.jobs = BackgroundJobManager()
430 self.jobs = BackgroundJobManager()
420 # Put the job manager into builtins so it's always there.
431 # Put the job manager into builtins so it's always there.
421 __builtin__.jobs = self.jobs
432 __builtin__.jobs = self.jobs
422
433
423 # escapes for automatic behavior on the command line
434 # escapes for automatic behavior on the command line
424 self.ESC_SHELL = '!'
435 self.ESC_SHELL = '!'
425 self.ESC_HELP = '?'
436 self.ESC_HELP = '?'
426 self.ESC_MAGIC = '%'
437 self.ESC_MAGIC = '%'
427 self.ESC_QUOTE = ','
438 self.ESC_QUOTE = ','
428 self.ESC_QUOTE2 = ';'
439 self.ESC_QUOTE2 = ';'
429 self.ESC_PAREN = '/'
440 self.ESC_PAREN = '/'
430
441
431 # And their associated handlers
442 # And their associated handlers
432 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
443 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
433 self.ESC_QUOTE : self.handle_auto,
444 self.ESC_QUOTE : self.handle_auto,
434 self.ESC_QUOTE2 : self.handle_auto,
445 self.ESC_QUOTE2 : self.handle_auto,
435 self.ESC_MAGIC : self.handle_magic,
446 self.ESC_MAGIC : self.handle_magic,
436 self.ESC_HELP : self.handle_help,
447 self.ESC_HELP : self.handle_help,
437 self.ESC_SHELL : self.handle_shell_escape,
448 self.ESC_SHELL : self.handle_shell_escape,
438 }
449 }
439
450
440 # class initializations
451 # class initializations
441 Magic.__init__(self,self)
452 Magic.__init__(self,self)
442
453
443 # Python source parser/formatter for syntax highlighting
454 # Python source parser/formatter for syntax highlighting
444 pyformat = PyColorize.Parser().format
455 pyformat = PyColorize.Parser().format
445 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
456 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
446
457
447 # hooks holds pointers used for user-side customizations
458 # hooks holds pointers used for user-side customizations
448 self.hooks = Struct()
459 self.hooks = Struct()
449
460
450 # Set all default hooks, defined in the IPython.hooks module.
461 # Set all default hooks, defined in the IPython.hooks module.
451 hooks = IPython.hooks
462 hooks = IPython.hooks
452 for hook_name in hooks.__all__:
463 for hook_name in hooks.__all__:
453 self.set_hook(hook_name,getattr(hooks,hook_name))
464 self.set_hook(hook_name,getattr(hooks,hook_name))
454
465
455 # Flag to mark unconditional exit
466 # Flag to mark unconditional exit
456 self.exit_now = False
467 self.exit_now = False
457
468
458 self.usage_min = """\
469 self.usage_min = """\
459 An enhanced console for Python.
470 An enhanced console for Python.
460 Some of its features are:
471 Some of its features are:
461 - Readline support if the readline library is present.
472 - Readline support if the readline library is present.
462 - Tab completion in the local namespace.
473 - Tab completion in the local namespace.
463 - Logging of input, see command-line options.
474 - Logging of input, see command-line options.
464 - System shell escape via ! , eg !ls.
475 - System shell escape via ! , eg !ls.
465 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
476 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
466 - Keeps track of locally defined variables via %who, %whos.
477 - Keeps track of locally defined variables via %who, %whos.
467 - Show object information with a ? eg ?x or x? (use ?? for more info).
478 - Show object information with a ? eg ?x or x? (use ?? for more info).
468 """
479 """
469 if usage: self.usage = usage
480 if usage: self.usage = usage
470 else: self.usage = self.usage_min
481 else: self.usage = self.usage_min
471
482
472 # Storage
483 # Storage
473 self.rc = rc # This will hold all configuration information
484 self.rc = rc # This will hold all configuration information
474 self.inputcache = []
475 self._boundcache = []
476 self.pager = 'less'
485 self.pager = 'less'
477 # temporary files used for various purposes. Deleted at exit.
486 # temporary files used for various purposes. Deleted at exit.
478 self.tempfiles = []
487 self.tempfiles = []
479
488
480 # Keep track of readline usage (later set by init_readline)
489 # Keep track of readline usage (later set by init_readline)
481 self.has_readline = False
490 self.has_readline = False
482
491
483 # template for logfile headers. It gets resolved at runtime by the
492 # template for logfile headers. It gets resolved at runtime by the
484 # logstart method.
493 # logstart method.
485 self.loghead_tpl = \
494 self.loghead_tpl = \
486 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
495 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
487 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
496 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
488 #log# opts = %s
497 #log# opts = %s
489 #log# args = %s
498 #log# args = %s
490 #log# It is safe to make manual edits below here.
499 #log# It is safe to make manual edits below here.
491 #log#-----------------------------------------------------------------------
500 #log#-----------------------------------------------------------------------
492 """
501 """
493 # for pushd/popd management
502 # for pushd/popd management
494 try:
503 try:
495 self.home_dir = get_home_dir()
504 self.home_dir = get_home_dir()
496 except HomeDirError,msg:
505 except HomeDirError,msg:
497 fatal(msg)
506 fatal(msg)
498
507
499 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
508 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
500
509
501 # Functions to call the underlying shell.
510 # Functions to call the underlying shell.
502
511
503 # utility to expand user variables via Itpl
512 # utility to expand user variables via Itpl
504 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
513 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
505 self.user_ns))
514 self.user_ns))
506 # The first is similar to os.system, but it doesn't return a value,
515 # 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.
516 # and it allows interpolation of variables in the user's namespace.
508 self.system = lambda cmd: shell(self.var_expand(cmd),
517 self.system = lambda cmd: shell(self.var_expand(cmd),
509 header='IPython system call: ',
518 header='IPython system call: ',
510 verbose=self.rc.system_verbose)
519 verbose=self.rc.system_verbose)
511 # These are for getoutput and getoutputerror:
520 # These are for getoutput and getoutputerror:
512 self.getoutput = lambda cmd: \
521 self.getoutput = lambda cmd: \
513 getoutput(self.var_expand(cmd),
522 getoutput(self.var_expand(cmd),
514 header='IPython system call: ',
523 header='IPython system call: ',
515 verbose=self.rc.system_verbose)
524 verbose=self.rc.system_verbose)
516 self.getoutputerror = lambda cmd: \
525 self.getoutputerror = lambda cmd: \
517 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
526 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
518 self.user_ns)),
527 self.user_ns)),
519 header='IPython system call: ',
528 header='IPython system call: ',
520 verbose=self.rc.system_verbose)
529 verbose=self.rc.system_verbose)
521
530
522 # RegExp for splitting line contents into pre-char//first
531 # RegExp for splitting line contents into pre-char//first
523 # word-method//rest. For clarity, each group in on one line.
532 # word-method//rest. For clarity, each group in on one line.
524
533
525 # WARNING: update the regexp if the above escapes are changed, as they
534 # WARNING: update the regexp if the above escapes are changed, as they
526 # are hardwired in.
535 # are hardwired in.
527
536
528 # Don't get carried away with trying to make the autocalling catch too
537 # 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
538 # much: it's better to be conservative rather than to trigger hidden
530 # evals() somewhere and end up causing side effects.
539 # evals() somewhere and end up causing side effects.
531
540
532 self.line_split = re.compile(r'^([\s*,;/])'
541 self.line_split = re.compile(r'^([\s*,;/])'
533 r'([\?\w\.]+\w*\s*)'
542 r'([\?\w\.]+\w*\s*)'
534 r'(\(?.*$)')
543 r'(\(?.*$)')
535
544
536 # Original re, keep around for a while in case changes break something
545 # Original re, keep around for a while in case changes break something
537 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
546 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
538 # r'(\s*[\?\w\.]+\w*\s*)'
547 # r'(\s*[\?\w\.]+\w*\s*)'
539 # r'(\(?.*$)')
548 # r'(\(?.*$)')
540
549
541 # RegExp to identify potential function names
550 # RegExp to identify potential function names
542 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
551 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
543 # RegExp to exclude strings with this start from autocalling
552 # RegExp to exclude strings with this start from autocalling
544 self.re_exclude_auto = re.compile('^[!=()<>,\*/\+-]|^is ')
553 self.re_exclude_auto = re.compile('^[!=()<>,\*/\+-]|^is ')
545
554
546 # try to catch also methods for stuff in lists/tuples/dicts: off
555 # try to catch also methods for stuff in lists/tuples/dicts: off
547 # (experimental). For this to work, the line_split regexp would need
556 # (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
557 # 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_.
558 # 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_.\[\]]*) ?$')
559 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
551
560
552 # keep track of where we started running (mainly for crash post-mortem)
561 # keep track of where we started running (mainly for crash post-mortem)
553 self.starting_dir = os.getcwd()
562 self.starting_dir = os.getcwd()
554
563
555 # Various switches which can be set
564 # Various switches which can be set
556 self.CACHELENGTH = 5000 # this is cheap, it's just text
565 self.CACHELENGTH = 5000 # this is cheap, it's just text
557 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
566 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
558 self.banner2 = banner2
567 self.banner2 = banner2
559
568
560 # TraceBack handlers:
569 # TraceBack handlers:
561
570
562 # Syntax error handler.
571 # Syntax error handler.
563 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
572 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
564
573
565 # The interactive one is initialized with an offset, meaning we always
574 # 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
575 # want to remove the topmost item in the traceback, which is our own
567 # internal code. Valid modes: ['Plain','Context','Verbose']
576 # internal code. Valid modes: ['Plain','Context','Verbose']
568 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
577 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
569 color_scheme='NoColor',
578 color_scheme='NoColor',
570 tb_offset = 1)
579 tb_offset = 1)
571
580
572 # IPython itself shouldn't crash. This will produce a detailed
581 # IPython itself shouldn't crash. This will produce a detailed
573 # post-mortem if it does. But we only install the crash handler for
582 # 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
583 # non-threaded shells, the threaded ones use a normal verbose reporter
575 # and lose the crash handler. This is because exceptions in the main
584 # and lose the crash handler. This is because exceptions in the main
576 # thread (such as in GUI code) propagate directly to sys.excepthook,
585 # 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.
586 # and there's no point in printing crash dumps for every user exception.
578 if self.isthreaded:
587 if self.isthreaded:
579 sys.excepthook = ultraTB.FormattedTB()
588 sys.excepthook = ultraTB.FormattedTB()
580 else:
589 else:
581 from IPython import CrashHandler
590 from IPython import CrashHandler
582 sys.excepthook = CrashHandler.CrashHandler(self)
591 sys.excepthook = CrashHandler.CrashHandler(self)
583
592
584 # The instance will store a pointer to this, so that runtime code
593 # The instance will store a pointer to this, so that runtime code
585 # (such as magics) can access it. This is because during the
594 # (such as magics) can access it. This is because during the
586 # read-eval loop, it gets temporarily overwritten (to deal with GUI
595 # read-eval loop, it gets temporarily overwritten (to deal with GUI
587 # frameworks).
596 # frameworks).
588 self.sys_excepthook = sys.excepthook
597 self.sys_excepthook = sys.excepthook
589
598
590 # and add any custom exception handlers the user may have specified
599 # and add any custom exception handlers the user may have specified
591 self.set_custom_exc(*custom_exceptions)
600 self.set_custom_exc(*custom_exceptions)
592
601
593 # Object inspector
602 # Object inspector
594 self.inspector = OInspect.Inspector(OInspect.InspectColors,
603 self.inspector = OInspect.Inspector(OInspect.InspectColors,
595 PyColorize.ANSICodeColors,
604 PyColorize.ANSICodeColors,
596 'NoColor')
605 'NoColor')
597 # indentation management
606 # indentation management
598 self.autoindent = False
607 self.autoindent = False
599 self.indent_current_nsp = 0
608 self.indent_current_nsp = 0
600 self.indent_current = '' # actual indent string
609 self.indent_current = '' # actual indent string
601
610
602 # Make some aliases automatically
611 # Make some aliases automatically
603 # Prepare list of shell aliases to auto-define
612 # Prepare list of shell aliases to auto-define
604 if os.name == 'posix':
613 if os.name == 'posix':
605 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
614 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
606 'mv mv -i','rm rm -i','cp cp -i',
615 'mv mv -i','rm rm -i','cp cp -i',
607 'cat cat','less less','clear clear',
616 'cat cat','less less','clear clear',
608 # a better ls
617 # a better ls
609 'ls ls -F',
618 'ls ls -F',
610 # long ls
619 # long ls
611 'll ls -lF',
620 'll ls -lF',
612 # color ls
621 # color ls
613 'lc ls -F -o --color',
622 'lc ls -F -o --color',
614 # ls normal files only
623 # ls normal files only
615 'lf ls -F -o --color %l | grep ^-',
624 'lf ls -F -o --color %l | grep ^-',
616 # ls symbolic links
625 # ls symbolic links
617 'lk ls -F -o --color %l | grep ^l',
626 'lk ls -F -o --color %l | grep ^l',
618 # directories or links to directories,
627 # directories or links to directories,
619 'ldir ls -F -o --color %l | grep /$',
628 'ldir ls -F -o --color %l | grep /$',
620 # things which are executable
629 # things which are executable
621 'lx ls -F -o --color %l | grep ^-..x',
630 'lx ls -F -o --color %l | grep ^-..x',
622 )
631 )
623 elif os.name in ['nt','dos']:
632 elif os.name in ['nt','dos']:
624 auto_alias = ('dir dir /on', 'ls dir /on',
633 auto_alias = ('dir dir /on', 'ls dir /on',
625 'ddir dir /ad /on', 'ldir dir /ad /on',
634 'ddir dir /ad /on', 'ldir dir /ad /on',
626 'mkdir mkdir','rmdir rmdir','echo echo',
635 'mkdir mkdir','rmdir rmdir','echo echo',
627 'ren ren','cls cls','copy copy')
636 'ren ren','cls cls','copy copy')
628 else:
637 else:
629 auto_alias = ()
638 auto_alias = ()
630 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
639 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
631 # Call the actual (public) initializer
640 # Call the actual (public) initializer
632 self.init_auto_alias()
641 self.init_auto_alias()
633 # end __init__
642 # end __init__
634
643
635 def post_config_initialization(self):
644 def post_config_initialization(self):
636 """Post configuration init method
645 """Post configuration init method
637
646
638 This is called after the configuration files have been processed to
647 This is called after the configuration files have been processed to
639 'finalize' the initialization."""
648 'finalize' the initialization."""
640
649
641 rc = self.rc
650 rc = self.rc
642
651
643 # Load readline proper
652 # Load readline proper
644 if rc.readline:
653 if rc.readline:
645 self.init_readline()
654 self.init_readline()
646
655
647 # log system
656 # log system
648 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
657 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
649 # local shortcut, this is used a LOT
658 # local shortcut, this is used a LOT
650 self.log = self.logger.log
659 self.log = self.logger.log
651
660
652 # Initialize cache, set in/out prompts and printing system
661 # Initialize cache, set in/out prompts and printing system
653 self.outputcache = CachedOutput(self,
662 self.outputcache = CachedOutput(self,
654 rc.cache_size,
663 rc.cache_size,
655 rc.pprint,
664 rc.pprint,
656 input_sep = rc.separate_in,
665 input_sep = rc.separate_in,
657 output_sep = rc.separate_out,
666 output_sep = rc.separate_out,
658 output_sep2 = rc.separate_out2,
667 output_sep2 = rc.separate_out2,
659 ps1 = rc.prompt_in1,
668 ps1 = rc.prompt_in1,
660 ps2 = rc.prompt_in2,
669 ps2 = rc.prompt_in2,
661 ps_out = rc.prompt_out,
670 ps_out = rc.prompt_out,
662 pad_left = rc.prompts_pad_left)
671 pad_left = rc.prompts_pad_left)
663
672
664 # user may have over-ridden the default print hook:
673 # user may have over-ridden the default print hook:
665 try:
674 try:
666 self.outputcache.__class__.display = self.hooks.display
675 self.outputcache.__class__.display = self.hooks.display
667 except AttributeError:
676 except AttributeError:
668 pass
677 pass
669
678
670 # I don't like assigning globally to sys, because it means when embedding
679 # I don't like assigning globally to sys, because it means when embedding
671 # instances, each embedded instance overrides the previous choice. But
680 # 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
681 # sys.displayhook seems to be called internally by exec, so I don't see a
673 # way around it.
682 # way around it.
674 sys.displayhook = self.outputcache
683 sys.displayhook = self.outputcache
675
684
676 # Set user colors (don't do it in the constructor above so that it
685 # Set user colors (don't do it in the constructor above so that it
677 # doesn't crash if colors option is invalid)
686 # doesn't crash if colors option is invalid)
678 self.magic_colors(rc.colors)
687 self.magic_colors(rc.colors)
679
688
680 # Set calling of pdb on exceptions
689 # Set calling of pdb on exceptions
681 self.call_pdb = rc.pdb
690 self.call_pdb = rc.pdb
682
691
683 # Load user aliases
692 # Load user aliases
684 for alias in rc.alias:
693 for alias in rc.alias:
685 self.magic_alias(alias)
694 self.magic_alias(alias)
686
695
687 # dynamic data that survives through sessions
696 # dynamic data that survives through sessions
688 # XXX make the filename a config option?
697 # XXX make the filename a config option?
689 persist_base = 'persist'
698 persist_base = 'persist'
690 if rc.profile:
699 if rc.profile:
691 persist_base += '_%s' % rc.profile
700 persist_base += '_%s' % rc.profile
692 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
701 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
693
702
694 try:
703 try:
695 self.persist = pickle.load(file(self.persist_fname))
704 self.persist = pickle.load(file(self.persist_fname))
696 except:
705 except:
697 self.persist = {}
706 self.persist = {}
698
707
699
708
700 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
709 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
701 try:
710 try:
702 obj = pickle.loads(value)
711 obj = pickle.loads(value)
703 except:
712 except:
704
713
705 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
714 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
706 print "The error was:",sys.exc_info()[0]
715 print "The error was:",sys.exc_info()[0]
707 continue
716 continue
708
717
709
718
710 self.user_ns[key] = obj
719 self.user_ns[key] = obj
711
720
712
721
713
722
714
723
715 def set_hook(self,name,hook):
724 def set_hook(self,name,hook):
716 """set_hook(name,hook) -> sets an internal IPython hook.
725 """set_hook(name,hook) -> sets an internal IPython hook.
717
726
718 IPython exposes some of its internal API as user-modifiable hooks. By
727 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
728 resetting one of these hooks, you can modify IPython's behavior to
720 call at runtime your own routines."""
729 call at runtime your own routines."""
721
730
722 # At some point in the future, this should validate the hook before it
731 # 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
732 # accepts it. Probably at least check that the hook takes the number
724 # of args it's supposed to.
733 # of args it's supposed to.
725 setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
734 setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
726
735
727 def set_custom_exc(self,exc_tuple,handler):
736 def set_custom_exc(self,exc_tuple,handler):
728 """set_custom_exc(exc_tuple,handler)
737 """set_custom_exc(exc_tuple,handler)
729
738
730 Set a custom exception handler, which will be called if any of the
739 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
740 exceptions in exc_tuple occur in the mainloop (specifically, in the
732 runcode() method.
741 runcode() method.
733
742
734 Inputs:
743 Inputs:
735
744
736 - exc_tuple: a *tuple* of valid exceptions to call the defined
745 - 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
746 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
747 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:
748 you only want to trap a single exception, use a singleton tuple:
740
749
741 exc_tuple == (MyCustomException,)
750 exc_tuple == (MyCustomException,)
742
751
743 - handler: this must be defined as a function with the following
752 - handler: this must be defined as a function with the following
744 basic interface: def my_handler(self,etype,value,tb).
753 basic interface: def my_handler(self,etype,value,tb).
745
754
746 This will be made into an instance method (via new.instancemethod)
755 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
756 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
757 listed in the exc_tuple are caught. If the handler is None, an
749 internal basic one is used, which just prints basic info.
758 internal basic one is used, which just prints basic info.
750
759
751 WARNING: by putting in your own exception handler into IPython's main
760 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
761 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."""
762 facility should only be used if you really know what you are doing."""
754
763
755 assert type(exc_tuple)==type(()) , \
764 assert type(exc_tuple)==type(()) , \
756 "The custom exceptions must be given AS A TUPLE."
765 "The custom exceptions must be given AS A TUPLE."
757
766
758 def dummy_handler(self,etype,value,tb):
767 def dummy_handler(self,etype,value,tb):
759 print '*** Simple custom exception handler ***'
768 print '*** Simple custom exception handler ***'
760 print 'Exception type :',etype
769 print 'Exception type :',etype
761 print 'Exception value:',value
770 print 'Exception value:',value
762 print 'Traceback :',tb
771 print 'Traceback :',tb
763 print 'Source code :','\n'.join(self.buffer)
772 print 'Source code :','\n'.join(self.buffer)
764
773
765 if handler is None: handler = dummy_handler
774 if handler is None: handler = dummy_handler
766
775
767 self.CustomTB = new.instancemethod(handler,self,self.__class__)
776 self.CustomTB = new.instancemethod(handler,self,self.__class__)
768 self.custom_exceptions = exc_tuple
777 self.custom_exceptions = exc_tuple
769
778
770 def set_custom_completer(self,completer,pos=0):
779 def set_custom_completer(self,completer,pos=0):
771 """set_custom_completer(completer,pos=0)
780 """set_custom_completer(completer,pos=0)
772
781
773 Adds a new custom completer function.
782 Adds a new custom completer function.
774
783
775 The position argument (defaults to 0) is the index in the completers
784 The position argument (defaults to 0) is the index in the completers
776 list where you want the completer to be inserted."""
785 list where you want the completer to be inserted."""
777
786
778 newcomp = new.instancemethod(completer,self.Completer,
787 newcomp = new.instancemethod(completer,self.Completer,
779 self.Completer.__class__)
788 self.Completer.__class__)
780 self.Completer.matchers.insert(pos,newcomp)
789 self.Completer.matchers.insert(pos,newcomp)
781
790
782 def _get_call_pdb(self):
791 def _get_call_pdb(self):
783 return self._call_pdb
792 return self._call_pdb
784
793
785 def _set_call_pdb(self,val):
794 def _set_call_pdb(self,val):
786
795
787 if val not in (0,1,False,True):
796 if val not in (0,1,False,True):
788 raise ValueError,'new call_pdb value must be boolean'
797 raise ValueError,'new call_pdb value must be boolean'
789
798
790 # store value in instance
799 # store value in instance
791 self._call_pdb = val
800 self._call_pdb = val
792
801
793 # notify the actual exception handlers
802 # notify the actual exception handlers
794 self.InteractiveTB.call_pdb = val
803 self.InteractiveTB.call_pdb = val
795 if self.isthreaded:
804 if self.isthreaded:
796 try:
805 try:
797 self.sys_excepthook.call_pdb = val
806 self.sys_excepthook.call_pdb = val
798 except:
807 except:
799 warn('Failed to activate pdb for threaded exception handler')
808 warn('Failed to activate pdb for threaded exception handler')
800
809
801 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
810 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
802 'Control auto-activation of pdb at exceptions')
811 'Control auto-activation of pdb at exceptions')
803
812
804 def complete(self,text):
813 def complete(self,text):
805 """Return a sorted list of all possible completions on text.
814 """Return a sorted list of all possible completions on text.
806
815
807 Inputs:
816 Inputs:
808
817
809 - text: a string of text to be completed on.
818 - text: a string of text to be completed on.
810
819
811 This is a wrapper around the completion mechanism, similar to what
820 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
821 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
822 exposing it as a method, it can be used by other non-readline
814 environments (such as GUIs) for text completion.
823 environments (such as GUIs) for text completion.
815
824
816 Simple usage example:
825 Simple usage example:
817
826
818 In [1]: x = 'hello'
827 In [1]: x = 'hello'
819
828
820 In [2]: __IP.complete('x.l')
829 In [2]: __IP.complete('x.l')
821 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
830 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
822
831
823 complete = self.Completer.complete
832 complete = self.Completer.complete
824 state = 0
833 state = 0
825 # use a dict so we get unique keys, since ipyhton's multiple
834 # use a dict so we get unique keys, since ipyhton's multiple
826 # completers can return duplicates.
835 # completers can return duplicates.
827 comps = {}
836 comps = {}
828 while True:
837 while True:
829 newcomp = complete(text,state)
838 newcomp = complete(text,state)
830 if newcomp is None:
839 if newcomp is None:
831 break
840 break
832 comps[newcomp] = 1
841 comps[newcomp] = 1
833 state += 1
842 state += 1
834 outcomps = comps.keys()
843 outcomps = comps.keys()
835 outcomps.sort()
844 outcomps.sort()
836 return outcomps
845 return outcomps
837
846
838 def set_completer_frame(self, frame):
847 def set_completer_frame(self, frame):
839 if frame:
848 if frame:
840 self.Completer.namespace = frame.f_locals
849 self.Completer.namespace = frame.f_locals
841 self.Completer.global_namespace = frame.f_globals
850 self.Completer.global_namespace = frame.f_globals
842 else:
851 else:
843 self.Completer.namespace = self.user_ns
852 self.Completer.namespace = self.user_ns
844 self.Completer.global_namespace = self.user_global_ns
853 self.Completer.global_namespace = self.user_global_ns
845
854
846 def init_auto_alias(self):
855 def init_auto_alias(self):
847 """Define some aliases automatically.
856 """Define some aliases automatically.
848
857
849 These are ALL parameter-less aliases"""
858 These are ALL parameter-less aliases"""
850 for alias,cmd in self.auto_alias:
859 for alias,cmd in self.auto_alias:
851 self.alias_table[alias] = (0,cmd)
860 self.alias_table[alias] = (0,cmd)
852
861
853 def alias_table_validate(self,verbose=0):
862 def alias_table_validate(self,verbose=0):
854 """Update information about the alias table.
863 """Update information about the alias table.
855
864
856 In particular, make sure no Python keywords/builtins are in it."""
865 In particular, make sure no Python keywords/builtins are in it."""
857
866
858 no_alias = self.no_alias
867 no_alias = self.no_alias
859 for k in self.alias_table.keys():
868 for k in self.alias_table.keys():
860 if k in no_alias:
869 if k in no_alias:
861 del self.alias_table[k]
870 del self.alias_table[k]
862 if verbose:
871 if verbose:
863 print ("Deleting alias <%s>, it's a Python "
872 print ("Deleting alias <%s>, it's a Python "
864 "keyword or builtin." % k)
873 "keyword or builtin." % k)
865
874
866 def set_autoindent(self,value=None):
875 def set_autoindent(self,value=None):
867 """Set the autoindent flag, checking for readline support.
876 """Set the autoindent flag, checking for readline support.
868
877
869 If called with no arguments, it acts as a toggle."""
878 If called with no arguments, it acts as a toggle."""
870
879
871 if not self.has_readline:
880 if not self.has_readline:
872 if os.name == 'posix':
881 if os.name == 'posix':
873 warn("The auto-indent feature requires the readline library")
882 warn("The auto-indent feature requires the readline library")
874 self.autoindent = 0
883 self.autoindent = 0
875 return
884 return
876 if value is None:
885 if value is None:
877 self.autoindent = not self.autoindent
886 self.autoindent = not self.autoindent
878 else:
887 else:
879 self.autoindent = value
888 self.autoindent = value
880
889
881 def rc_set_toggle(self,rc_field,value=None):
890 def rc_set_toggle(self,rc_field,value=None):
882 """Set or toggle a field in IPython's rc config. structure.
891 """Set or toggle a field in IPython's rc config. structure.
883
892
884 If called with no arguments, it acts as a toggle.
893 If called with no arguments, it acts as a toggle.
885
894
886 If called with a non-existent field, the resulting AttributeError
895 If called with a non-existent field, the resulting AttributeError
887 exception will propagate out."""
896 exception will propagate out."""
888
897
889 rc_val = getattr(self.rc,rc_field)
898 rc_val = getattr(self.rc,rc_field)
890 if value is None:
899 if value is None:
891 value = not rc_val
900 value = not rc_val
892 setattr(self.rc,rc_field,value)
901 setattr(self.rc,rc_field,value)
893
902
894 def user_setup(self,ipythondir,rc_suffix,mode='install'):
903 def user_setup(self,ipythondir,rc_suffix,mode='install'):
895 """Install the user configuration directory.
904 """Install the user configuration directory.
896
905
897 Can be called when running for the first time or to upgrade the user's
906 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'
907 .ipython/ directory with the mode parameter. Valid modes are 'install'
899 and 'upgrade'."""
908 and 'upgrade'."""
900
909
901 def wait():
910 def wait():
902 try:
911 try:
903 raw_input("Please press <RETURN> to start IPython.")
912 raw_input("Please press <RETURN> to start IPython.")
904 except EOFError:
913 except EOFError:
905 print >> Term.cout
914 print >> Term.cout
906 print '*'*70
915 print '*'*70
907
916
908 cwd = os.getcwd() # remember where we started
917 cwd = os.getcwd() # remember where we started
909 glb = glob.glob
918 glb = glob.glob
910 print '*'*70
919 print '*'*70
911 if mode == 'install':
920 if mode == 'install':
912 print \
921 print \
913 """Welcome to IPython. I will try to create a personal configuration directory
922 """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"""
923 where you can customize many aspects of IPython's functionality in:\n"""
915 else:
924 else:
916 print 'I am going to upgrade your configuration in:'
925 print 'I am going to upgrade your configuration in:'
917
926
918 print ipythondir
927 print ipythondir
919
928
920 rcdirend = os.path.join('IPython','UserConfig')
929 rcdirend = os.path.join('IPython','UserConfig')
921 cfg = lambda d: os.path.join(d,rcdirend)
930 cfg = lambda d: os.path.join(d,rcdirend)
922 try:
931 try:
923 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
932 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
924 except IOError:
933 except IOError:
925 warning = """
934 warning = """
926 Installation error. IPython's directory was not found.
935 Installation error. IPython's directory was not found.
927
936
928 Check the following:
937 Check the following:
929
938
930 The ipython/IPython directory should be in a directory belonging to your
939 The ipython/IPython directory should be in a directory belonging to your
931 PYTHONPATH environment variable (that is, it should be in a directory
940 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.
941 belonging to sys.path). You can copy it explicitly there or just link to it.
933
942
934 IPython will proceed with builtin defaults.
943 IPython will proceed with builtin defaults.
935 """
944 """
936 warn(warning)
945 warn(warning)
937 wait()
946 wait()
938 return
947 return
939
948
940 if mode == 'install':
949 if mode == 'install':
941 try:
950 try:
942 shutil.copytree(rcdir,ipythondir)
951 shutil.copytree(rcdir,ipythondir)
943 os.chdir(ipythondir)
952 os.chdir(ipythondir)
944 rc_files = glb("ipythonrc*")
953 rc_files = glb("ipythonrc*")
945 for rc_file in rc_files:
954 for rc_file in rc_files:
946 os.rename(rc_file,rc_file+rc_suffix)
955 os.rename(rc_file,rc_file+rc_suffix)
947 except:
956 except:
948 warning = """
957 warning = """
949
958
950 There was a problem with the installation:
959 There was a problem with the installation:
951 %s
960 %s
952 Try to correct it or contact the developers if you think it's a bug.
961 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]
962 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
954 warn(warning)
963 warn(warning)
955 wait()
964 wait()
956 return
965 return
957
966
958 elif mode == 'upgrade':
967 elif mode == 'upgrade':
959 try:
968 try:
960 os.chdir(ipythondir)
969 os.chdir(ipythondir)
961 except:
970 except:
962 print """
971 print """
963 Can not upgrade: changing to directory %s failed. Details:
972 Can not upgrade: changing to directory %s failed. Details:
964 %s
973 %s
965 """ % (ipythondir,sys.exc_info()[1])
974 """ % (ipythondir,sys.exc_info()[1])
966 wait()
975 wait()
967 return
976 return
968 else:
977 else:
969 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
978 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
970 for new_full_path in sources:
979 for new_full_path in sources:
971 new_filename = os.path.basename(new_full_path)
980 new_filename = os.path.basename(new_full_path)
972 if new_filename.startswith('ipythonrc'):
981 if new_filename.startswith('ipythonrc'):
973 new_filename = new_filename + rc_suffix
982 new_filename = new_filename + rc_suffix
974 # The config directory should only contain files, skip any
983 # The config directory should only contain files, skip any
975 # directories which may be there (like CVS)
984 # directories which may be there (like CVS)
976 if os.path.isdir(new_full_path):
985 if os.path.isdir(new_full_path):
977 continue
986 continue
978 if os.path.exists(new_filename):
987 if os.path.exists(new_filename):
979 old_file = new_filename+'.old'
988 old_file = new_filename+'.old'
980 if os.path.exists(old_file):
989 if os.path.exists(old_file):
981 os.remove(old_file)
990 os.remove(old_file)
982 os.rename(new_filename,old_file)
991 os.rename(new_filename,old_file)
983 shutil.copy(new_full_path,new_filename)
992 shutil.copy(new_full_path,new_filename)
984 else:
993 else:
985 raise ValueError,'unrecognized mode for install:',`mode`
994 raise ValueError,'unrecognized mode for install:',`mode`
986
995
987 # Fix line-endings to those native to each platform in the config
996 # Fix line-endings to those native to each platform in the config
988 # directory.
997 # directory.
989 try:
998 try:
990 os.chdir(ipythondir)
999 os.chdir(ipythondir)
991 except:
1000 except:
992 print """
1001 print """
993 Problem: changing to directory %s failed.
1002 Problem: changing to directory %s failed.
994 Details:
1003 Details:
995 %s
1004 %s
996
1005
997 Some configuration files may have incorrect line endings. This should not
1006 Some configuration files may have incorrect line endings. This should not
998 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1007 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
999 wait()
1008 wait()
1000 else:
1009 else:
1001 for fname in glb('ipythonrc*'):
1010 for fname in glb('ipythonrc*'):
1002 try:
1011 try:
1003 native_line_ends(fname,backup=0)
1012 native_line_ends(fname,backup=0)
1004 except IOError:
1013 except IOError:
1005 pass
1014 pass
1006
1015
1007 if mode == 'install':
1016 if mode == 'install':
1008 print """
1017 print """
1009 Successful installation!
1018 Successful installation!
1010
1019
1011 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1020 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1012 IPython manual (there are both HTML and PDF versions supplied with the
1021 IPython manual (there are both HTML and PDF versions supplied with the
1013 distribution) to make sure that your system environment is properly configured
1022 distribution) to make sure that your system environment is properly configured
1014 to take advantage of IPython's features."""
1023 to take advantage of IPython's features."""
1015 else:
1024 else:
1016 print """
1025 print """
1017 Successful upgrade!
1026 Successful upgrade!
1018
1027
1019 All files in your directory:
1028 All files in your directory:
1020 %(ipythondir)s
1029 %(ipythondir)s
1021 which would have been overwritten by the upgrade were backed up with a .old
1030 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
1031 extension. If you had made particular customizations in those files you may
1023 want to merge them back into the new files.""" % locals()
1032 want to merge them back into the new files.""" % locals()
1024 wait()
1033 wait()
1025 os.chdir(cwd)
1034 os.chdir(cwd)
1026 # end user_setup()
1035 # end user_setup()
1027
1036
1028 def atexit_operations(self):
1037 def atexit_operations(self):
1029 """This will be executed at the time of exit.
1038 """This will be executed at the time of exit.
1030
1039
1031 Saving of persistent data should be performed here. """
1040 Saving of persistent data should be performed here. """
1032
1041
1033 # input history
1042 # input history
1034 self.savehist()
1043 self.savehist()
1035
1044
1036 # Cleanup all tempfiles left around
1045 # Cleanup all tempfiles left around
1037 for tfile in self.tempfiles:
1046 for tfile in self.tempfiles:
1038 try:
1047 try:
1039 os.unlink(tfile)
1048 os.unlink(tfile)
1040 except OSError:
1049 except OSError:
1041 pass
1050 pass
1042
1051
1043 # save the "persistent data" catch-all dictionary
1052 # save the "persistent data" catch-all dictionary
1044 try:
1053 try:
1045 pickle.dump(self.persist, open(self.persist_fname,"w"))
1054 pickle.dump(self.persist, open(self.persist_fname,"w"))
1046 except:
1055 except:
1047 print "*** ERROR *** persistent data saving failed."
1056 print "*** ERROR *** persistent data saving failed."
1048
1057
1049 def savehist(self):
1058 def savehist(self):
1050 """Save input history to a file (via readline library)."""
1059 """Save input history to a file (via readline library)."""
1051 try:
1060 try:
1052 self.readline.write_history_file(self.histfile)
1061 self.readline.write_history_file(self.histfile)
1053 except:
1062 except:
1054 print 'Unable to save IPython command history to file: ' + \
1063 print 'Unable to save IPython command history to file: ' + \
1055 `self.histfile`
1064 `self.histfile`
1056
1065
1057 def pre_readline(self):
1066 def pre_readline(self):
1058 """readline hook to be used at the start of each line.
1067 """readline hook to be used at the start of each line.
1059
1068
1060 Currently it handles auto-indent only."""
1069 Currently it handles auto-indent only."""
1061
1070
1062 self.readline.insert_text(self.indent_current)
1071 self.readline.insert_text(self.indent_current)
1063
1072
1064 def init_readline(self):
1073 def init_readline(self):
1065 """Command history completion/saving/reloading."""
1074 """Command history completion/saving/reloading."""
1066 try:
1075 try:
1067 import readline
1076 import readline
1068 except ImportError:
1077 except ImportError:
1069 self.has_readline = 0
1078 self.has_readline = 0
1070 self.readline = None
1079 self.readline = None
1071 # no point in bugging windows users with this every time:
1080 # no point in bugging windows users with this every time:
1072 if os.name == 'posix':
1081 if os.name == 'posix':
1073 warn('Readline services not available on this platform.')
1082 warn('Readline services not available on this platform.')
1074 else:
1083 else:
1075 import atexit
1084 import atexit
1076 from IPython.completer import IPCompleter
1085 from IPython.completer import IPCompleter
1077 self.Completer = IPCompleter(self,
1086 self.Completer = IPCompleter(self,
1078 self.user_ns,
1087 self.user_ns,
1079 self.user_global_ns,
1088 self.user_global_ns,
1080 self.rc.readline_omit__names,
1089 self.rc.readline_omit__names,
1081 self.alias_table)
1090 self.alias_table)
1082
1091
1083 # Platform-specific configuration
1092 # Platform-specific configuration
1084 if os.name == 'nt':
1093 if os.name == 'nt':
1085 self.readline_startup_hook = readline.set_pre_input_hook
1094 self.readline_startup_hook = readline.set_pre_input_hook
1086 else:
1095 else:
1087 self.readline_startup_hook = readline.set_startup_hook
1096 self.readline_startup_hook = readline.set_startup_hook
1088
1097
1089 # Load user's initrc file (readline config)
1098 # Load user's initrc file (readline config)
1090 inputrc_name = os.environ.get('INPUTRC')
1099 inputrc_name = os.environ.get('INPUTRC')
1091 if inputrc_name is None:
1100 if inputrc_name is None:
1092 home_dir = get_home_dir()
1101 home_dir = get_home_dir()
1093 if home_dir is not None:
1102 if home_dir is not None:
1094 inputrc_name = os.path.join(home_dir,'.inputrc')
1103 inputrc_name = os.path.join(home_dir,'.inputrc')
1095 if os.path.isfile(inputrc_name):
1104 if os.path.isfile(inputrc_name):
1096 try:
1105 try:
1097 readline.read_init_file(inputrc_name)
1106 readline.read_init_file(inputrc_name)
1098 except:
1107 except:
1099 warn('Problems reading readline initialization file <%s>'
1108 warn('Problems reading readline initialization file <%s>'
1100 % inputrc_name)
1109 % inputrc_name)
1101
1110
1102 self.has_readline = 1
1111 self.has_readline = 1
1103 self.readline = readline
1112 self.readline = readline
1104 # save this in sys so embedded copies can restore it properly
1113 # save this in sys so embedded copies can restore it properly
1105 sys.ipcompleter = self.Completer.complete
1114 sys.ipcompleter = self.Completer.complete
1106 readline.set_completer(self.Completer.complete)
1115 readline.set_completer(self.Completer.complete)
1107
1116
1108 # Configure readline according to user's prefs
1117 # Configure readline according to user's prefs
1109 for rlcommand in self.rc.readline_parse_and_bind:
1118 for rlcommand in self.rc.readline_parse_and_bind:
1110 readline.parse_and_bind(rlcommand)
1119 readline.parse_and_bind(rlcommand)
1111
1120
1112 # remove some chars from the delimiters list
1121 # remove some chars from the delimiters list
1113 delims = readline.get_completer_delims()
1122 delims = readline.get_completer_delims()
1114 delims = delims.translate(string._idmap,
1123 delims = delims.translate(string._idmap,
1115 self.rc.readline_remove_delims)
1124 self.rc.readline_remove_delims)
1116 readline.set_completer_delims(delims)
1125 readline.set_completer_delims(delims)
1117 # otherwise we end up with a monster history after a while:
1126 # otherwise we end up with a monster history after a while:
1118 readline.set_history_length(1000)
1127 readline.set_history_length(1000)
1119 try:
1128 try:
1120 #print '*** Reading readline history' # dbg
1129 #print '*** Reading readline history' # dbg
1121 readline.read_history_file(self.histfile)
1130 readline.read_history_file(self.histfile)
1122 except IOError:
1131 except IOError:
1123 pass # It doesn't exist yet.
1132 pass # It doesn't exist yet.
1124
1133
1125 atexit.register(self.atexit_operations)
1134 atexit.register(self.atexit_operations)
1126 del atexit
1135 del atexit
1127
1136
1128 # Configure auto-indent for all platforms
1137 # Configure auto-indent for all platforms
1129 self.set_autoindent(self.rc.autoindent)
1138 self.set_autoindent(self.rc.autoindent)
1130
1139
1131 def _should_recompile(self,e):
1140 def _should_recompile(self,e):
1132 """Utility routine for edit_syntax_error"""
1141 """Utility routine for edit_syntax_error"""
1133
1142
1134 if e.filename in ('<ipython console>','<input>','<string>',
1143 if e.filename in ('<ipython console>','<input>','<string>',
1135 '<console>'):
1144 '<console>'):
1136 return False
1145 return False
1137 try:
1146 try:
1138 if not ask_yes_no('Return to editor to correct syntax error? '
1147 if not ask_yes_no('Return to editor to correct syntax error? '
1139 '[Y/n] ','y'):
1148 '[Y/n] ','y'):
1140 return False
1149 return False
1141 except EOFError:
1150 except EOFError:
1142 return False
1151 return False
1143 self.hooks.fix_error_editor(e.filename,e.lineno,e.offset,e.msg)
1152 self.hooks.fix_error_editor(e.filename,e.lineno,e.offset,e.msg)
1144 return True
1153 return True
1145
1154
1146 def edit_syntax_error(self):
1155 def edit_syntax_error(self):
1147 """The bottom half of the syntax error handler called in the main loop.
1156 """The bottom half of the syntax error handler called in the main loop.
1148
1157
1149 Loop until syntax error is fixed or user cancels.
1158 Loop until syntax error is fixed or user cancels.
1150 """
1159 """
1151
1160
1152 while self.SyntaxTB.last_syntax_error:
1161 while self.SyntaxTB.last_syntax_error:
1153 # copy and clear last_syntax_error
1162 # copy and clear last_syntax_error
1154 err = self.SyntaxTB.clear_err_state()
1163 err = self.SyntaxTB.clear_err_state()
1155 if not self._should_recompile(err):
1164 if not self._should_recompile(err):
1156 return
1165 return
1157 try:
1166 try:
1158 # may set last_syntax_error again if a SyntaxError is raised
1167 # may set last_syntax_error again if a SyntaxError is raised
1159 self.safe_execfile(err.filename,self.shell.user_ns)
1168 self.safe_execfile(err.filename,self.shell.user_ns)
1160 except:
1169 except:
1161 self.showtraceback()
1170 self.showtraceback()
1162 else:
1171 else:
1163 f = file(err.filename)
1172 f = file(err.filename)
1164 try:
1173 try:
1165 sys.displayhook(f.read())
1174 sys.displayhook(f.read())
1166 finally:
1175 finally:
1167 f.close()
1176 f.close()
1168
1177
1169 def showsyntaxerror(self, filename=None):
1178 def showsyntaxerror(self, filename=None):
1170 """Display the syntax error that just occurred.
1179 """Display the syntax error that just occurred.
1171
1180
1172 This doesn't display a stack trace because there isn't one.
1181 This doesn't display a stack trace because there isn't one.
1173
1182
1174 If a filename is given, it is stuffed in the exception instead
1183 If a filename is given, it is stuffed in the exception instead
1175 of what was there before (because Python's parser always uses
1184 of what was there before (because Python's parser always uses
1176 "<string>" when reading from a string).
1185 "<string>" when reading from a string).
1177 """
1186 """
1178 etype, value, last_traceback = sys.exc_info()
1187 etype, value, last_traceback = sys.exc_info()
1179 if filename and etype is SyntaxError:
1188 if filename and etype is SyntaxError:
1180 # Work hard to stuff the correct filename in the exception
1189 # Work hard to stuff the correct filename in the exception
1181 try:
1190 try:
1182 msg, (dummy_filename, lineno, offset, line) = value
1191 msg, (dummy_filename, lineno, offset, line) = value
1183 except:
1192 except:
1184 # Not the format we expect; leave it alone
1193 # Not the format we expect; leave it alone
1185 pass
1194 pass
1186 else:
1195 else:
1187 # Stuff in the right filename
1196 # Stuff in the right filename
1188 try:
1197 try:
1189 # Assume SyntaxError is a class exception
1198 # Assume SyntaxError is a class exception
1190 value = SyntaxError(msg, (filename, lineno, offset, line))
1199 value = SyntaxError(msg, (filename, lineno, offset, line))
1191 except:
1200 except:
1192 # If that failed, assume SyntaxError is a string
1201 # If that failed, assume SyntaxError is a string
1193 value = msg, (filename, lineno, offset, line)
1202 value = msg, (filename, lineno, offset, line)
1194 self.SyntaxTB(etype,value,[])
1203 self.SyntaxTB(etype,value,[])
1195
1204
1196 def debugger(self):
1205 def debugger(self):
1197 """Call the pdb debugger."""
1206 """Call the pdb debugger."""
1198
1207
1199 if not self.rc.pdb:
1208 if not self.rc.pdb:
1200 return
1209 return
1201 pdb.pm()
1210 pdb.pm()
1202
1211
1203 def showtraceback(self,exc_tuple = None,filename=None):
1212 def showtraceback(self,exc_tuple = None,filename=None):
1204 """Display the exception that just occurred."""
1213 """Display the exception that just occurred."""
1205
1214
1206 # Though this won't be called by syntax errors in the input line,
1215 # Though this won't be called by syntax errors in the input line,
1207 # there may be SyntaxError cases whith imported code.
1216 # there may be SyntaxError cases whith imported code.
1208 if exc_tuple is None:
1217 if exc_tuple is None:
1209 type, value, tb = sys.exc_info()
1218 type, value, tb = sys.exc_info()
1210 else:
1219 else:
1211 type, value, tb = exc_tuple
1220 type, value, tb = exc_tuple
1212 if type is SyntaxError:
1221 if type is SyntaxError:
1213 self.showsyntaxerror(filename)
1222 self.showsyntaxerror(filename)
1214 else:
1223 else:
1215 self.InteractiveTB()
1224 self.InteractiveTB()
1216 if self.InteractiveTB.call_pdb and self.has_readline:
1225 if self.InteractiveTB.call_pdb and self.has_readline:
1217 # pdb mucks up readline, fix it back
1226 # pdb mucks up readline, fix it back
1218 self.readline.set_completer(self.Completer.complete)
1227 self.readline.set_completer(self.Completer.complete)
1219
1228
1220 def update_cache(self, line):
1221 """puts line into cache"""
1222 return # dbg
1223
1224 # This copies the cache every time ... :-(
1225 self.inputcache.insert(0, line)
1226 if len(self.inputcache) >= self.CACHELENGTH:
1227 self.inputcache.pop() # This doesn't :-)
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
1466 if line or more:
1465 if line or more:
1467 #print 'doit' # dbg
1466 more = self.push(self.prefilter(line,more))
1468 newline = self.prefilter(line,more)
1469 more = self.push(newline)
1470 # IPython's runsource returns None if there was an error
1467 # IPython's runsource returns None if there was an error
1471 # compiling the code. This allows us to stop processing right
1468 # compiling the code. This allows us to stop processing right
1472 # away, so the user gets the error message at the right place.
1469 # away, so the user gets the error message at the right place.
1473 if more is None:
1470 if more is None:
1474 break
1471 break
1475 # final newline in case the input didn't have it, so that the code
1472 # final newline in case the input didn't have it, so that the code
1476 # actually does get executed
1473 # actually does get executed
1477 if more:
1474 if more:
1478 self.push('\n')
1475 self.push('\n')
1479
1476
1480 def runsource(self, source, filename='<input>', symbol='single'):
1477 def runsource(self, source, filename='<input>', symbol='single'):
1481 """Compile and run some source in the interpreter.
1478 """Compile and run some source in the interpreter.
1482
1479
1483 Arguments are as for compile_command().
1480 Arguments are as for compile_command().
1484
1481
1485 One several things can happen:
1482 One several things can happen:
1486
1483
1487 1) The input is incorrect; compile_command() raised an
1484 1) The input is incorrect; compile_command() raised an
1488 exception (SyntaxError or OverflowError). A syntax traceback
1485 exception (SyntaxError or OverflowError). A syntax traceback
1489 will be printed by calling the showsyntaxerror() method.
1486 will be printed by calling the showsyntaxerror() method.
1490
1487
1491 2) The input is incomplete, and more input is required;
1488 2) The input is incomplete, and more input is required;
1492 compile_command() returned None. Nothing happens.
1489 compile_command() returned None. Nothing happens.
1493
1490
1494 3) The input is complete; compile_command() returned a code
1491 3) The input is complete; compile_command() returned a code
1495 object. The code is executed by calling self.runcode() (which
1492 object. The code is executed by calling self.runcode() (which
1496 also handles run-time exceptions, except for SystemExit).
1493 also handles run-time exceptions, except for SystemExit).
1497
1494
1498 The return value is:
1495 The return value is:
1499
1496
1500 - True in case 2
1497 - True in case 2
1501
1498
1502 - False in the other cases, unless an exception is raised, where
1499 - False in the other cases, unless an exception is raised, where
1503 None is returned instead. This can be used by external callers to
1500 None is returned instead. This can be used by external callers to
1504 know whether to continue feeding input or not.
1501 know whether to continue feeding input or not.
1505
1502
1506 The return value can be used to decide whether to use sys.ps1 or
1503 The return value can be used to decide whether to use sys.ps1 or
1507 sys.ps2 to prompt the next line."""
1504 sys.ps2 to prompt the next line."""
1508
1505
1509 try:
1506 try:
1510 code = self.compile(source,filename,symbol)
1507 code = self.compile(source,filename,symbol)
1511 except (OverflowError, SyntaxError, ValueError):
1508 except (OverflowError, SyntaxError, ValueError):
1512 # Case 1
1509 # Case 1
1513 self.showsyntaxerror(filename)
1510 self.showsyntaxerror(filename)
1514 return None
1511 return None
1515
1512
1516 if code is None:
1513 if code is None:
1517 # Case 2
1514 # Case 2
1518 return True
1515 return True
1519
1516
1520 # Case 3
1517 # Case 3
1521 # We store the code object so that threaded shells and
1518 # We store the code object so that threaded shells and
1522 # custom exception handlers can access all this info if needed.
1519 # custom exception handlers can access all this info if needed.
1523 # The source corresponding to this can be obtained from the
1520 # The source corresponding to this can be obtained from the
1524 # buffer attribute as '\n'.join(self.buffer).
1521 # buffer attribute as '\n'.join(self.buffer).
1525 self.code_to_run = code
1522 self.code_to_run = code
1526 # now actually execute the code object
1523 # now actually execute the code object
1527 if self.runcode(code) == 0:
1524 if self.runcode(code) == 0:
1528 return False
1525 return False
1529 else:
1526 else:
1530 return None
1527 return None
1531
1528
1532 def runcode(self,code_obj):
1529 def runcode(self,code_obj):
1533 """Execute a code object.
1530 """Execute a code object.
1534
1531
1535 When an exception occurs, self.showtraceback() is called to display a
1532 When an exception occurs, self.showtraceback() is called to display a
1536 traceback.
1533 traceback.
1537
1534
1538 Return value: a flag indicating whether the code to be run completed
1535 Return value: a flag indicating whether the code to be run completed
1539 successfully:
1536 successfully:
1540
1537
1541 - 0: successful execution.
1538 - 0: successful execution.
1542 - 1: an error occurred.
1539 - 1: an error occurred.
1543 """
1540 """
1544
1541
1545 # Set our own excepthook in case the user code tries to call it
1542 # 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
1543 # directly, so that the IPython crash handler doesn't get triggered
1547 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1544 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1548
1545
1549 # we save the original sys.excepthook in the instance, in case config
1546 # we save the original sys.excepthook in the instance, in case config
1550 # code (such as magics) needs access to it.
1547 # code (such as magics) needs access to it.
1551 self.sys_excepthook = old_excepthook
1548 self.sys_excepthook = old_excepthook
1552 outflag = 1 # happens in more places, so it's easier as default
1549 outflag = 1 # happens in more places, so it's easier as default
1553 try:
1550 try:
1554 try:
1551 try:
1555 # Embedded instances require separate global/local namespaces
1552 # Embedded instances require separate global/local namespaces
1556 # so they can see both the surrounding (local) namespace and
1553 # so they can see both the surrounding (local) namespace and
1557 # the module-level globals when called inside another function.
1554 # the module-level globals when called inside another function.
1558 if self.embedded:
1555 if self.embedded:
1559 exec code_obj in self.user_global_ns, self.user_ns
1556 exec code_obj in self.user_global_ns, self.user_ns
1560 # Normal (non-embedded) instances should only have a single
1557 # Normal (non-embedded) instances should only have a single
1561 # namespace for user code execution, otherwise functions won't
1558 # namespace for user code execution, otherwise functions won't
1562 # see interactive top-level globals.
1559 # see interactive top-level globals.
1563 else:
1560 else:
1564 exec code_obj in self.user_ns
1561 exec code_obj in self.user_ns
1565 finally:
1562 finally:
1566 # Reset our crash handler in place
1563 # Reset our crash handler in place
1567 sys.excepthook = old_excepthook
1564 sys.excepthook = old_excepthook
1568 except SystemExit:
1565 except SystemExit:
1569 self.resetbuffer()
1566 self.resetbuffer()
1570 self.showtraceback()
1567 self.showtraceback()
1571 warn("Type exit or quit to exit IPython "
1568 warn("Type exit or quit to exit IPython "
1572 "(%Exit or %Quit do so unconditionally).",level=1)
1569 "(%Exit or %Quit do so unconditionally).",level=1)
1573 except self.custom_exceptions:
1570 except self.custom_exceptions:
1574 etype,value,tb = sys.exc_info()
1571 etype,value,tb = sys.exc_info()
1575 self.CustomTB(etype,value,tb)
1572 self.CustomTB(etype,value,tb)
1576 except:
1573 except:
1577 self.showtraceback()
1574 self.showtraceback()
1578 else:
1575 else:
1579 outflag = 0
1576 outflag = 0
1580 if softspace(sys.stdout, 0):
1577 if softspace(sys.stdout, 0):
1581 print
1578 print
1582 # Flush out code object which has been run (and source)
1579 # Flush out code object which has been run (and source)
1583 self.code_to_run = None
1580 self.code_to_run = None
1584 return outflag
1581 return outflag
1585
1582
1586 def push(self, line):
1583 def push(self, line):
1587 """Push a line to the interpreter.
1584 """Push a line to the interpreter.
1588
1585
1589 The line should not have a trailing newline; it may have
1586 The line should not have a trailing newline; it may have
1590 internal newlines. The line is appended to a buffer and the
1587 internal newlines. The line is appended to a buffer and the
1591 interpreter's runsource() method is called with the
1588 interpreter's runsource() method is called with the
1592 concatenated contents of the buffer as source. If this
1589 concatenated contents of the buffer as source. If this
1593 indicates that the command was executed or invalid, the buffer
1590 indicates that the command was executed or invalid, the buffer
1594 is reset; otherwise, the command is incomplete, and the buffer
1591 is reset; otherwise, the command is incomplete, and the buffer
1595 is left as it was after the line was appended. The return
1592 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
1593 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()).
1594 with in some way (this is the same as runsource()).
1598
1599 """
1595 """
1596
1597 # autoindent management should be done here, and not in the
1598 # interactive loop, since that one is only seen by keyboard input. We
1599 # need this done correctly even for code run via runlines (which uses
1600 # push).
1601 self.autoindent_update(line)
1602
1600 self.buffer.append(line)
1603 self.buffer.append(line)
1601 more = self.runsource('\n'.join(self.buffer), self.filename)
1604 more = self.runsource('\n'.join(self.buffer), self.filename)
1602 if not more:
1605 if not more:
1603 self.resetbuffer()
1606 self.resetbuffer()
1604 return more
1607 return more
1605
1608
1606 def resetbuffer(self):
1609 def resetbuffer(self):
1607 """Reset the input buffer."""
1610 """Reset the input buffer."""
1608 self.buffer[:] = []
1611 self.buffer[:] = []
1609
1612
1610 def raw_input(self,prompt='',continue_prompt=False):
1613 def raw_input(self,prompt='',continue_prompt=False):
1611 """Write a prompt and read a line.
1614 """Write a prompt and read a line.
1612
1615
1613 The returned line does not include the trailing newline.
1616 The returned line does not include the trailing newline.
1614 When the user enters the EOF key sequence, EOFError is raised.
1617 When the user enters the EOF key sequence, EOFError is raised.
1615
1618
1616 Optional inputs:
1619 Optional inputs:
1617
1620
1618 - prompt(''): a string to be printed to prompt the user.
1621 - prompt(''): a string to be printed to prompt the user.
1619
1622
1620 - continue_prompt(False): whether this line is the first one or a
1623 - continue_prompt(False): whether this line is the first one or a
1621 continuation in a sequence of inputs.
1624 continuation in a sequence of inputs.
1622 """
1625 """
1623
1626
1624 line = raw_input_original(prompt)
1627 line = raw_input_original(prompt)
1625 # Try to be reasonably smart about not re-indenting pasted input more
1628 # 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
1629 # than necessary. We do this by trimming out the auto-indent initial
1627 # spaces, if the user's actual input started itself with whitespace.
1630 # spaces, if the user's actual input started itself with whitespace.
1628 if self.autoindent:
1631 if self.autoindent:
1629 line2 = line[self.indent_current_nsp:]
1632 line2 = line[self.indent_current_nsp:]
1630 if line2[0:1] in (' ','\t'):
1633 if line2[0:1] in (' ','\t'):
1631 line = line2
1634 line = line2
1632 return self.prefilter(line,continue_prompt)
1635 return self.prefilter(line,continue_prompt)
1633
1636
1634 def split_user_input(self,line):
1637 def split_user_input(self,line):
1635 """Split user input into pre-char, function part and rest."""
1638 """Split user input into pre-char, function part and rest."""
1636
1639
1637 lsplit = self.line_split.match(line)
1640 lsplit = self.line_split.match(line)
1638 if lsplit is None: # no regexp match returns None
1641 if lsplit is None: # no regexp match returns None
1639 try:
1642 try:
1640 iFun,theRest = line.split(None,1)
1643 iFun,theRest = line.split(None,1)
1641 except ValueError:
1644 except ValueError:
1642 iFun,theRest = line,''
1645 iFun,theRest = line,''
1643 pre = re.match('^(\s*)(.*)',line).groups()[0]
1646 pre = re.match('^(\s*)(.*)',line).groups()[0]
1644 else:
1647 else:
1645 pre,iFun,theRest = lsplit.groups()
1648 pre,iFun,theRest = lsplit.groups()
1646
1649
1647 #print 'line:<%s>' % line # dbg
1650 #print 'line:<%s>' % line # dbg
1648 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1651 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1649 return pre,iFun.strip(),theRest
1652 return pre,iFun.strip(),theRest
1650
1653
1651 def _prefilter(self, line, continue_prompt):
1654 def _prefilter(self, line, continue_prompt):
1652 """Calls different preprocessors, depending on the form of line."""
1655 """Calls different preprocessors, depending on the form of line."""
1653
1656
1654 # All handlers *must* return a value, even if it's blank ('').
1657 # All handlers *must* return a value, even if it's blank ('').
1655
1658
1656 # Lines are NOT logged here. Handlers should process the line as
1659 # 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
1660 # needed, update the cache AND log it (so that the input cache array
1658 # stays synced).
1661 # stays synced).
1659
1662
1660 # This function is _very_ delicate, and since it's also the one which
1663 # 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
1664 # 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
1665 # 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.
1666 # always to exit as quickly as it can figure out what it needs to do.
1664
1667
1665 # This function is the main responsible for maintaining IPython's
1668 # This function is the main responsible for maintaining IPython's
1666 # behavior respectful of Python's semantics. So be _very_ careful if
1669 # behavior respectful of Python's semantics. So be _very_ careful if
1667 # making changes to anything here.
1670 # making changes to anything here.
1668
1671
1669 #.....................................................................
1672 #.....................................................................
1670 # Code begins
1673 # Code begins
1671
1674
1672 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1675 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1673
1676
1674 # save the line away in case we crash, so the post-mortem handler can
1677 # save the line away in case we crash, so the post-mortem handler can
1675 # record it
1678 # record it
1676 self._last_input_line = line
1679 self._last_input_line = line
1677
1680
1678 #print '***line: <%s>' % line # dbg
1681 #print '***line: <%s>' % line # dbg
1679 self.autoindent_update(line)
1680
1682
1681 # the input history needs to track even empty lines
1683 # the input history needs to track even empty lines
1682 if not line.strip():
1684 if not line.strip():
1683 if not continue_prompt:
1685 if not continue_prompt:
1684 self.outputcache.prompt_count -= 1
1686 self.outputcache.prompt_count -= 1
1685 return self.handle_normal(line,continue_prompt)
1687 return self.handle_normal(line,continue_prompt)
1686 #return self.handle_normal('',continue_prompt)
1688 #return self.handle_normal('',continue_prompt)
1687
1689
1688 # print '***cont',continue_prompt # dbg
1690 # print '***cont',continue_prompt # dbg
1689 # special handlers are only allowed for single line statements
1691 # special handlers are only allowed for single line statements
1690 if continue_prompt and not self.rc.multi_line_specials:
1692 if continue_prompt and not self.rc.multi_line_specials:
1691 return self.handle_normal(line,continue_prompt)
1693 return self.handle_normal(line,continue_prompt)
1692
1694
1693 # For the rest, we need the structure of the input
1695 # For the rest, we need the structure of the input
1694 pre,iFun,theRest = self.split_user_input(line)
1696 pre,iFun,theRest = self.split_user_input(line)
1695 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1697 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1696
1698
1697 # First check for explicit escapes in the last/first character
1699 # First check for explicit escapes in the last/first character
1698 handler = None
1700 handler = None
1699 if line[-1] == self.ESC_HELP:
1701 if line[-1] == self.ESC_HELP:
1700 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1702 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1701 if handler is None:
1703 if handler is None:
1702 # look at the first character of iFun, NOT of line, so we skip
1704 # look at the first character of iFun, NOT of line, so we skip
1703 # leading whitespace in multiline input
1705 # leading whitespace in multiline input
1704 handler = self.esc_handlers.get(iFun[0:1])
1706 handler = self.esc_handlers.get(iFun[0:1])
1705 if handler is not None:
1707 if handler is not None:
1706 return handler(line,continue_prompt,pre,iFun,theRest)
1708 return handler(line,continue_prompt,pre,iFun,theRest)
1707 # Emacs ipython-mode tags certain input lines
1709 # Emacs ipython-mode tags certain input lines
1708 if line.endswith('# PYTHON-MODE'):
1710 if line.endswith('# PYTHON-MODE'):
1709 return self.handle_emacs(line,continue_prompt)
1711 return self.handle_emacs(line,continue_prompt)
1710
1712
1711 # Next, check if we can automatically execute this thing
1713 # Next, check if we can automatically execute this thing
1712
1714
1713 # Allow ! in multi-line statements if multi_line_specials is on:
1715 # Allow ! in multi-line statements if multi_line_specials is on:
1714 if continue_prompt and self.rc.multi_line_specials and \
1716 if continue_prompt and self.rc.multi_line_specials and \
1715 iFun.startswith(self.ESC_SHELL):
1717 iFun.startswith(self.ESC_SHELL):
1716 return self.handle_shell_escape(line,continue_prompt,
1718 return self.handle_shell_escape(line,continue_prompt,
1717 pre=pre,iFun=iFun,
1719 pre=pre,iFun=iFun,
1718 theRest=theRest)
1720 theRest=theRest)
1719
1721
1720 # Let's try to find if the input line is a magic fn
1722 # Let's try to find if the input line is a magic fn
1721 oinfo = None
1723 oinfo = None
1722 if hasattr(self,'magic_'+iFun):
1724 if hasattr(self,'magic_'+iFun):
1723 # WARNING: _ofind uses getattr(), so it can consume generators and
1725 # WARNING: _ofind uses getattr(), so it can consume generators and
1724 # cause other side effects.
1726 # cause other side effects.
1725 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1727 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1726 if oinfo['ismagic']:
1728 if oinfo['ismagic']:
1727 # Be careful not to call magics when a variable assignment is
1729 # Be careful not to call magics when a variable assignment is
1728 # being made (ls='hi', for example)
1730 # being made (ls='hi', for example)
1729 if self.rc.automagic and \
1731 if self.rc.automagic and \
1730 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1732 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1731 (self.rc.multi_line_specials or not continue_prompt):
1733 (self.rc.multi_line_specials or not continue_prompt):
1732 return self.handle_magic(line,continue_prompt,
1734 return self.handle_magic(line,continue_prompt,
1733 pre,iFun,theRest)
1735 pre,iFun,theRest)
1734 else:
1736 else:
1735 return self.handle_normal(line,continue_prompt)
1737 return self.handle_normal(line,continue_prompt)
1736
1738
1737 # If the rest of the line begins with an (in)equality, assginment or
1739 # If the rest of the line begins with an (in)equality, assginment or
1738 # function call, we should not call _ofind but simply execute it.
1740 # function call, we should not call _ofind but simply execute it.
1739 # This avoids spurious geattr() accesses on objects upon assignment.
1741 # This avoids spurious geattr() accesses on objects upon assignment.
1740 #
1742 #
1741 # It also allows users to assign to either alias or magic names true
1743 # It also allows users to assign to either alias or magic names true
1742 # python variables (the magic/alias systems always take second seat to
1744 # python variables (the magic/alias systems always take second seat to
1743 # true python code).
1745 # true python code).
1744 if theRest and theRest[0] in '!=()':
1746 if theRest and theRest[0] in '!=()':
1745 return self.handle_normal(line,continue_prompt)
1747 return self.handle_normal(line,continue_prompt)
1746
1748
1747 if oinfo is None:
1749 if oinfo is None:
1748 # let's try to ensure that _oinfo is ONLY called when autocall is
1750 # let's try to ensure that _oinfo is ONLY called when autocall is
1749 # on. Since it has inevitable potential side effects, at least
1751 # on. Since it has inevitable potential side effects, at least
1750 # having autocall off should be a guarantee to the user that no
1752 # having autocall off should be a guarantee to the user that no
1751 # weird things will happen.
1753 # weird things will happen.
1752
1754
1753 if self.rc.autocall:
1755 if self.rc.autocall:
1754 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1756 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1755 else:
1757 else:
1756 # in this case, all that's left is either an alias or
1758 # in this case, all that's left is either an alias or
1757 # processing the line normally.
1759 # processing the line normally.
1758 if iFun in self.alias_table:
1760 if iFun in self.alias_table:
1759 return self.handle_alias(line,continue_prompt,
1761 return self.handle_alias(line,continue_prompt,
1760 pre,iFun,theRest)
1762 pre,iFun,theRest)
1761 else:
1763 else:
1762 return self.handle_normal(line,continue_prompt)
1764 return self.handle_normal(line,continue_prompt)
1763
1765
1764 if not oinfo['found']:
1766 if not oinfo['found']:
1765 return self.handle_normal(line,continue_prompt)
1767 return self.handle_normal(line,continue_prompt)
1766 else:
1768 else:
1767 #print 'iFun <%s> rest <%s>' % (iFun,theRest) # dbg
1769 #print 'iFun <%s> rest <%s>' % (iFun,theRest) # dbg
1768 if oinfo['isalias']:
1770 if oinfo['isalias']:
1769 return self.handle_alias(line,continue_prompt,
1771 return self.handle_alias(line,continue_prompt,
1770 pre,iFun,theRest)
1772 pre,iFun,theRest)
1771
1773
1772 if self.rc.autocall and \
1774 if self.rc.autocall and \
1773 not self.re_exclude_auto.match(theRest) and \
1775 not self.re_exclude_auto.match(theRest) and \
1774 self.re_fun_name.match(iFun) and \
1776 self.re_fun_name.match(iFun) and \
1775 callable(oinfo['obj']) :
1777 callable(oinfo['obj']) :
1776 #print 'going auto' # dbg
1778 #print 'going auto' # dbg
1777 return self.handle_auto(line,continue_prompt,pre,iFun,theRest)
1779 return self.handle_auto(line,continue_prompt,pre,iFun,theRest)
1778 else:
1780 else:
1779 #print 'was callable?', callable(oinfo['obj']) # dbg
1781 #print 'was callable?', callable(oinfo['obj']) # dbg
1780 return self.handle_normal(line,continue_prompt)
1782 return self.handle_normal(line,continue_prompt)
1781
1783
1782 # If we get here, we have a normal Python line. Log and return.
1784 # If we get here, we have a normal Python line. Log and return.
1783 return self.handle_normal(line,continue_prompt)
1785 return self.handle_normal(line,continue_prompt)
1784
1786
1785 def _prefilter_dumb(self, line, continue_prompt):
1787 def _prefilter_dumb(self, line, continue_prompt):
1786 """simple prefilter function, for debugging"""
1788 """simple prefilter function, for debugging"""
1787 return self.handle_normal(line,continue_prompt)
1789 return self.handle_normal(line,continue_prompt)
1788
1790
1789 # Set the default prefilter() function (this can be user-overridden)
1791 # Set the default prefilter() function (this can be user-overridden)
1790 prefilter = _prefilter
1792 prefilter = _prefilter
1791
1793
1792 def handle_normal(self,line,continue_prompt=None,
1794 def handle_normal(self,line,continue_prompt=None,
1793 pre=None,iFun=None,theRest=None):
1795 pre=None,iFun=None,theRest=None):
1794 """Handle normal input lines. Use as a template for handlers."""
1796 """Handle normal input lines. Use as a template for handlers."""
1795
1797
1796 # With autoindent on, we need some way to exit the input loop, and I
1798 # With autoindent on, we need some way to exit the input loop, and I
1797 # don't want to force the user to have to backspace all the way to
1799 # don't want to force the user to have to backspace all the way to
1798 # clear the line. The rule will be in this case, that either two
1800 # clear the line. The rule will be in this case, that either two
1799 # lines of pure whitespace in a row, or a line of pure whitespace but
1801 # lines of pure whitespace in a row, or a line of pure whitespace but
1800 # of a size different to the indent level, will exit the input loop.
1802 # of a size different to the indent level, will exit the input loop.
1803
1801 if (continue_prompt and self.autoindent and isspace(line) and
1804 if (continue_prompt and self.autoindent and isspace(line) and
1802 (line != self.indent_current or isspace(self.buffer[-1]))):
1805 (line != self.indent_current or isspace(self.buffer[-1]))):
1803 line = ''
1806 line = ''
1804
1807
1805 self.log(line,continue_prompt)
1808 self.log(line,continue_prompt)
1806 self.update_cache(line)
1807 return line
1809 return line
1808
1810
1809 def handle_alias(self,line,continue_prompt=None,
1811 def handle_alias(self,line,continue_prompt=None,
1810 pre=None,iFun=None,theRest=None):
1812 pre=None,iFun=None,theRest=None):
1811 """Handle alias input lines. """
1813 """Handle alias input lines. """
1812
1814
1813 theRest = esc_quotes(theRest)
1815 line_out = 'ipalias("%s %s")' % (iFun,esc_quotes(theRest))
1814 # log the ipalias form, which doesn't depend on the instance name
1816 self.log(line_out,continue_prompt)
1815 line_log = 'ipalias("%s %s")' % (iFun,theRest)
1817 return line_out
1816 self.log(line_log,continue_prompt)
1817 self.update_cache(line_log)
1818 # this is what actually gets executed
1819 return "%s%s.call_alias('%s','%s')" % (pre,self.name,iFun,theRest)
1820
1818
1821 def handle_shell_escape(self, line, continue_prompt=None,
1819 def handle_shell_escape(self, line, continue_prompt=None,
1822 pre=None,iFun=None,theRest=None):
1820 pre=None,iFun=None,theRest=None):
1823 """Execute the line in a shell, empty return value"""
1821 """Execute the line in a shell, empty return value"""
1824
1822
1825 #print 'line in :', `line` # dbg
1823 #print 'line in :', `line` # dbg
1826 # Example of a special handler. Others follow a similar pattern.
1824 # Example of a special handler. Others follow a similar pattern.
1827 if continue_prompt: # multi-line statements
1825 if continue_prompt: # multi-line statements
1828 if iFun.startswith('!!'):
1826 if iFun.startswith('!!'):
1829 print 'SyntaxError: !! is not allowed in multiline statements'
1827 print 'SyntaxError: !! is not allowed in multiline statements'
1830 return pre
1828 return pre
1831 else:
1829 else:
1832 cmd = ("%s %s" % (iFun[1:],theRest)) #.replace('"','\\"')
1830 cmd = ("%s %s" % (iFun[1:],theRest))
1833 #line_out = '%s%s.system("%s")' % (pre,self.name,cmd)
1831 line_out = 'ipsystem(r"""%s"""[:-1])' % (cmd + "_")
1834 line_out = '%s%s.system(r"""%s"""[:-1])' % (pre,self.name,cmd + "_")
1835 #line_out = ('%s%s.system(' % (pre,self.name)) + repr(cmd) + ')'
1836 else: # single-line input
1832 else: # single-line input
1837 if line.startswith('!!'):
1833 if line.startswith('!!'):
1838 # rewrite iFun/theRest to properly hold the call to %sx and
1834 # rewrite iFun/theRest to properly hold the call to %sx and
1839 # the actual command to be executed, so handle_magic can work
1835 # the actual command to be executed, so handle_magic can work
1840 # correctly
1836 # correctly
1841 theRest = '%s %s' % (iFun[2:],theRest)
1837 theRest = '%s %s' % (iFun[2:],theRest)
1842 iFun = 'sx'
1838 iFun = 'sx'
1843 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,line[2:]),
1839 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,line[2:]),
1844 continue_prompt,pre,iFun,theRest)
1840 continue_prompt,pre,iFun,theRest)
1845 else:
1841 else:
1846 #cmd = esc_quotes(line[1:])
1847 cmd=line[1:]
1842 cmd=line[1:]
1848 #line_out = '%s.system("%s")' % (self.name,cmd)
1843 line_out = 'ipsystem(r"""%s"""[:-1])' % (cmd +"_")
1849 line_out = '%s.system(r"""%s"""[:-1])' % (self.name,cmd +"_")
1850 #line_out = ('%s.system(' % self.name) + repr(cmd)+ ')'
1851 # update cache/log and return
1844 # update cache/log and return
1852 self.log(line_out,continue_prompt)
1845 self.log(line_out,continue_prompt)
1853 self.update_cache(line_out) # readline cache gets normal line
1854 #print 'line out r:', `line_out` # dbg
1855 #print 'line out s:', line_out # dbg
1856 return line_out
1846 return line_out
1857
1847
1858 def handle_magic(self, line, continue_prompt=None,
1848 def handle_magic(self, line, continue_prompt=None,
1859 pre=None,iFun=None,theRest=None):
1849 pre=None,iFun=None,theRest=None):
1860 """Execute magic functions.
1850 """Execute magic functions.
1861
1851
1862 Also log them with a prepended # so the log is clean Python."""
1852 Also log them with a prepended # so the log is clean Python."""
1863
1853
1864 cmd = '%sipmagic("%s")' % (pre,esc_quotes('%s %s' % (iFun,theRest)))
1854 cmd = '%sipmagic("%s")' % (pre,esc_quotes('%s %s' % (iFun,theRest)))
1865 self.log(cmd,continue_prompt)
1855 self.log(cmd,continue_prompt)
1866 self.update_cache(line)
1867 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1856 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1868 return cmd
1857 return cmd
1869
1858
1870 def handle_auto(self, line, continue_prompt=None,
1859 def handle_auto(self, line, continue_prompt=None,
1871 pre=None,iFun=None,theRest=None):
1860 pre=None,iFun=None,theRest=None):
1872 """Hande lines which can be auto-executed, quoting if requested."""
1861 """Hande lines which can be auto-executed, quoting if requested."""
1873
1862
1874 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1863 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1875
1864
1876 # This should only be active for single-line input!
1865 # This should only be active for single-line input!
1877 if continue_prompt:
1866 if continue_prompt:
1878 return line
1867 return line
1879
1868
1880 if pre == self.ESC_QUOTE:
1869 if pre == self.ESC_QUOTE:
1881 # Auto-quote splitting on whitespace
1870 # Auto-quote splitting on whitespace
1882 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
1871 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
1883 elif pre == self.ESC_QUOTE2:
1872 elif pre == self.ESC_QUOTE2:
1884 # Auto-quote whole string
1873 # Auto-quote whole string
1885 newcmd = '%s("%s")' % (iFun,theRest)
1874 newcmd = '%s("%s")' % (iFun,theRest)
1886 else:
1875 else:
1887 # Auto-paren
1876 # Auto-paren
1888 if theRest[0:1] in ('=','['):
1877 if theRest[0:1] in ('=','['):
1889 # Don't autocall in these cases. They can be either
1878 # Don't autocall in these cases. They can be either
1890 # rebindings of an existing callable's name, or item access
1879 # rebindings of an existing callable's name, or item access
1891 # for an object which is BOTH callable and implements
1880 # for an object which is BOTH callable and implements
1892 # __getitem__.
1881 # __getitem__.
1893 return '%s %s' % (iFun,theRest)
1882 return '%s %s' % (iFun,theRest)
1894 if theRest.endswith(';'):
1883 if theRest.endswith(';'):
1895 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
1884 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
1896 else:
1885 else:
1897 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
1886 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
1898
1887
1899 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
1888 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
1900 # log what is now valid Python, not the actual user input (without the
1889 # log what is now valid Python, not the actual user input (without the
1901 # final newline)
1890 # final newline)
1902 self.log(newcmd,continue_prompt)
1891 self.log(newcmd,continue_prompt)
1903 return newcmd
1892 return newcmd
1904
1893
1905 def handle_help(self, line, continue_prompt=None,
1894 def handle_help(self, line, continue_prompt=None,
1906 pre=None,iFun=None,theRest=None):
1895 pre=None,iFun=None,theRest=None):
1907 """Try to get some help for the object.
1896 """Try to get some help for the object.
1908
1897
1909 obj? or ?obj -> basic information.
1898 obj? or ?obj -> basic information.
1910 obj?? or ??obj -> more details.
1899 obj?? or ??obj -> more details.
1911 """
1900 """
1912
1901
1913 # We need to make sure that we don't process lines which would be
1902 # We need to make sure that we don't process lines which would be
1914 # otherwise valid python, such as "x=1 # what?"
1903 # otherwise valid python, such as "x=1 # what?"
1915 try:
1904 try:
1916 codeop.compile_command(line)
1905 codeop.compile_command(line)
1917 except SyntaxError:
1906 except SyntaxError:
1918 # We should only handle as help stuff which is NOT valid syntax
1907 # We should only handle as help stuff which is NOT valid syntax
1919 if line[0]==self.ESC_HELP:
1908 if line[0]==self.ESC_HELP:
1920 line = line[1:]
1909 line = line[1:]
1921 elif line[-1]==self.ESC_HELP:
1910 elif line[-1]==self.ESC_HELP:
1922 line = line[:-1]
1911 line = line[:-1]
1923 self.log('#?'+line)
1912 self.log('#?'+line)
1924 self.update_cache(line)
1925 if line:
1913 if line:
1926 self.magic_pinfo(line)
1914 self.magic_pinfo(line)
1927 else:
1915 else:
1928 page(self.usage,screen_lines=self.rc.screen_length)
1916 page(self.usage,screen_lines=self.rc.screen_length)
1929 return '' # Empty string is needed here!
1917 return '' # Empty string is needed here!
1930 except:
1918 except:
1931 # Pass any other exceptions through to the normal handler
1919 # Pass any other exceptions through to the normal handler
1932 return self.handle_normal(line,continue_prompt)
1920 return self.handle_normal(line,continue_prompt)
1933 else:
1921 else:
1934 # If the code compiles ok, we should handle it normally
1922 # If the code compiles ok, we should handle it normally
1935 return self.handle_normal(line,continue_prompt)
1923 return self.handle_normal(line,continue_prompt)
1936
1924
1937 def handle_emacs(self,line,continue_prompt=None,
1925 def handle_emacs(self,line,continue_prompt=None,
1938 pre=None,iFun=None,theRest=None):
1926 pre=None,iFun=None,theRest=None):
1939 """Handle input lines marked by python-mode."""
1927 """Handle input lines marked by python-mode."""
1940
1928
1941 # Currently, nothing is done. Later more functionality can be added
1929 # Currently, nothing is done. Later more functionality can be added
1942 # here if needed.
1930 # here if needed.
1943
1931
1944 # The input cache shouldn't be updated
1932 # The input cache shouldn't be updated
1945
1933
1946 return line
1934 return line
1947
1935
1948 def write(self,data):
1936 def write(self,data):
1949 """Write a string to the default output"""
1937 """Write a string to the default output"""
1950 Term.cout.write(data)
1938 Term.cout.write(data)
1951
1939
1952 def write_err(self,data):
1940 def write_err(self,data):
1953 """Write a string to the default error output"""
1941 """Write a string to the default error output"""
1954 Term.cerr.write(data)
1942 Term.cerr.write(data)
1955
1943
1956 def exit(self):
1944 def exit(self):
1957 """Handle interactive exit.
1945 """Handle interactive exit.
1958
1946
1959 This method sets the exit_now attribute."""
1947 This method sets the exit_now attribute."""
1960
1948
1961 if self.rc.confirm_exit:
1949 if self.rc.confirm_exit:
1962 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
1950 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
1963 self.exit_now = True
1951 self.exit_now = True
1964 else:
1952 else:
1965 self.exit_now = True
1953 self.exit_now = True
1966 return self.exit_now
1954 return self.exit_now
1967
1955
1968 def safe_execfile(self,fname,*where,**kw):
1956 def safe_execfile(self,fname,*where,**kw):
1969 fname = os.path.expanduser(fname)
1957 fname = os.path.expanduser(fname)
1970
1958
1971 # find things also in current directory
1959 # find things also in current directory
1972 dname = os.path.dirname(fname)
1960 dname = os.path.dirname(fname)
1973 if not sys.path.count(dname):
1961 if not sys.path.count(dname):
1974 sys.path.append(dname)
1962 sys.path.append(dname)
1975
1963
1976 try:
1964 try:
1977 xfile = open(fname)
1965 xfile = open(fname)
1978 except:
1966 except:
1979 print >> Term.cerr, \
1967 print >> Term.cerr, \
1980 'Could not open file <%s> for safe execution.' % fname
1968 'Could not open file <%s> for safe execution.' % fname
1981 return None
1969 return None
1982
1970
1983 kw.setdefault('islog',0)
1971 kw.setdefault('islog',0)
1984 kw.setdefault('quiet',1)
1972 kw.setdefault('quiet',1)
1985 kw.setdefault('exit_ignore',0)
1973 kw.setdefault('exit_ignore',0)
1986 first = xfile.readline()
1974 first = xfile.readline()
1987 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
1975 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
1988 xfile.close()
1976 xfile.close()
1989 # line by line execution
1977 # line by line execution
1990 if first.startswith(loghead) or kw['islog']:
1978 if first.startswith(loghead) or kw['islog']:
1991 print 'Loading log file <%s> one line at a time...' % fname
1979 print 'Loading log file <%s> one line at a time...' % fname
1992 if kw['quiet']:
1980 if kw['quiet']:
1993 stdout_save = sys.stdout
1981 stdout_save = sys.stdout
1994 sys.stdout = StringIO.StringIO()
1982 sys.stdout = StringIO.StringIO()
1995 try:
1983 try:
1996 globs,locs = where[0:2]
1984 globs,locs = where[0:2]
1997 except:
1985 except:
1998 try:
1986 try:
1999 globs = locs = where[0]
1987 globs = locs = where[0]
2000 except:
1988 except:
2001 globs = locs = globals()
1989 globs = locs = globals()
2002 badblocks = []
1990 badblocks = []
2003
1991
2004 # we also need to identify indented blocks of code when replaying
1992 # we also need to identify indented blocks of code when replaying
2005 # logs and put them together before passing them to an exec
1993 # logs and put them together before passing them to an exec
2006 # statement. This takes a bit of regexp and look-ahead work in the
1994 # statement. This takes a bit of regexp and look-ahead work in the
2007 # file. It's easiest if we swallow the whole thing in memory
1995 # file. It's easiest if we swallow the whole thing in memory
2008 # first, and manually walk through the lines list moving the
1996 # first, and manually walk through the lines list moving the
2009 # counter ourselves.
1997 # counter ourselves.
2010 indent_re = re.compile('\s+\S')
1998 indent_re = re.compile('\s+\S')
2011 xfile = open(fname)
1999 xfile = open(fname)
2012 filelines = xfile.readlines()
2000 filelines = xfile.readlines()
2013 xfile.close()
2001 xfile.close()
2014 nlines = len(filelines)
2002 nlines = len(filelines)
2015 lnum = 0
2003 lnum = 0
2016 while lnum < nlines:
2004 while lnum < nlines:
2017 line = filelines[lnum]
2005 line = filelines[lnum]
2018 lnum += 1
2006 lnum += 1
2019 # don't re-insert logger status info into cache
2007 # don't re-insert logger status info into cache
2020 if line.startswith('#log#'):
2008 if line.startswith('#log#'):
2021 continue
2009 continue
2022 elif line.startswith('#!'):
2023 self.update_cache(line[1:])
2024 else:
2010 else:
2025 # build a block of code (maybe a single line) for execution
2011 # build a block of code (maybe a single line) for execution
2026 block = line
2012 block = line
2027 try:
2013 try:
2028 next = filelines[lnum] # lnum has already incremented
2014 next = filelines[lnum] # lnum has already incremented
2029 except:
2015 except:
2030 next = None
2016 next = None
2031 while next and indent_re.match(next):
2017 while next and indent_re.match(next):
2032 block += next
2018 block += next
2033 lnum += 1
2019 lnum += 1
2034 try:
2020 try:
2035 next = filelines[lnum]
2021 next = filelines[lnum]
2036 except:
2022 except:
2037 next = None
2023 next = None
2038 # now execute the block of one or more lines
2024 # now execute the block of one or more lines
2039 try:
2025 try:
2040 exec block in globs,locs
2026 exec block in globs,locs
2041 self.update_cache(block.rstrip())
2042 except SystemExit:
2027 except SystemExit:
2043 pass
2028 pass
2044 except:
2029 except:
2045 badblocks.append(block.rstrip())
2030 badblocks.append(block.rstrip())
2046 if kw['quiet']: # restore stdout
2031 if kw['quiet']: # restore stdout
2047 sys.stdout.close()
2032 sys.stdout.close()
2048 sys.stdout = stdout_save
2033 sys.stdout = stdout_save
2049 print 'Finished replaying log file <%s>' % fname
2034 print 'Finished replaying log file <%s>' % fname
2050 if badblocks:
2035 if badblocks:
2051 print >> sys.stderr, ('\nThe following lines/blocks in file '
2036 print >> sys.stderr, ('\nThe following lines/blocks in file '
2052 '<%s> reported errors:' % fname)
2037 '<%s> reported errors:' % fname)
2053
2038
2054 for badline in badblocks:
2039 for badline in badblocks:
2055 print >> sys.stderr, badline
2040 print >> sys.stderr, badline
2056 else: # regular file execution
2041 else: # regular file execution
2057 try:
2042 try:
2058 execfile(fname,*where)
2043 execfile(fname,*where)
2059 except SyntaxError:
2044 except SyntaxError:
2060 etype,evalue = sys.exc_info()[:2]
2045 etype,evalue = sys.exc_info()[:2]
2061 self.SyntaxTB(etype,evalue,[])
2046 self.SyntaxTB(etype,evalue,[])
2062 warn('Failure executing file: <%s>' % fname)
2047 warn('Failure executing file: <%s>' % fname)
2063 except SystemExit,status:
2048 except SystemExit,status:
2064 if not kw['exit_ignore']:
2049 if not kw['exit_ignore']:
2065 self.InteractiveTB()
2050 self.InteractiveTB()
2066 warn('Failure executing file: <%s>' % fname)
2051 warn('Failure executing file: <%s>' % fname)
2067 except:
2052 except:
2068 self.InteractiveTB()
2053 self.InteractiveTB()
2069 warn('Failure executing file: <%s>' % fname)
2054 warn('Failure executing file: <%s>' % fname)
2070
2055
2071 #************************* end of file <iplib.py> *****************************
2056 #************************* end of file <iplib.py> *****************************
@@ -1,4666 +1,4673 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
6 (_prefilter): change control flow to ensure that we NEVER
7 introspect objects when autocall is off. This will guarantee that
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
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
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
10 is important to note that, with autocall on, these side effects
11 can still happen.
11 can still happen.
12 (ipsystem): new builtin, to complete the ip{magic/alias/system}
13 trio. IPython offers these three kinds of special calls which are
14 not python code, and it's a good thing to have their call method
15 be accessible as pure python functions (not just special syntax at
16 the command line). It gives us a better internal implementation
17 structure, as well as exposing these for user scripting more
18 cleanly.
12
19
13 * IPython/macro.py (Macro.__init__): moved macros to a standalone
20 * IPython/macro.py (Macro.__init__): moved macros to a standalone
14 file. Now that they'll be more likely to be used with the
21 file. Now that they'll be more likely to be used with the
15 persistance system (%store), I want to make sure their module path
22 persistance system (%store), I want to make sure their module path
16 doesn't change in the future, so that we don't break things for
23 doesn't change in the future, so that we don't break things for
17 users' persisted data.
24 users' persisted data.
18
25
19 * IPython/iplib.py (autoindent_update): move indentation
26 * IPython/iplib.py (autoindent_update): move indentation
20 management into the _text_ processing loop, not the keyboard
27 management into the _text_ processing loop, not the keyboard
21 interactive one. This is necessary to correctly process non-typed
28 interactive one. This is necessary to correctly process non-typed
22 multiline input (such as macros).
29 multiline input (such as macros).
23
30
24 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
31 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
25 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
32 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
26 which was producing problems in the resulting manual.
33 which was producing problems in the resulting manual.
27 (magic_whos): improve reporting of instances (show their class,
34 (magic_whos): improve reporting of instances (show their class,
28 instead of simply printing 'instance' which isn't terribly
35 instead of simply printing 'instance' which isn't terribly
29 informative).
36 informative).
30
37
31 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
38 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
32 (minor mods) to support network shares under win32.
39 (minor mods) to support network shares under win32.
33
40
34 * IPython/winconsole.py (get_console_size): add new winconsole
41 * IPython/winconsole.py (get_console_size): add new winconsole
35 module and fixes to page_dumb() to improve its behavior under
42 module and fixes to page_dumb() to improve its behavior under
36 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
43 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
37
44
38 * IPython/Magic.py (Macro): simplified Macro class to just
45 * IPython/Magic.py (Macro): simplified Macro class to just
39 subclass list. We've had only 2.2 compatibility for a very long
46 subclass list. We've had only 2.2 compatibility for a very long
40 time, yet I was still avoiding subclassing the builtin types. No
47 time, yet I was still avoiding subclassing the builtin types. No
41 more (I'm also starting to use properties, though I won't shift to
48 more (I'm also starting to use properties, though I won't shift to
42 2.3-specific features quite yet).
49 2.3-specific features quite yet).
43 (magic_store): added Ville's patch for lightweight variable
50 (magic_store): added Ville's patch for lightweight variable
44 persistence, after a request on the user list by Matt Wilkie
51 persistence, after a request on the user list by Matt Wilkie
45 <maphew-AT-gmail.com>. The new %store magic's docstring has full
52 <maphew-AT-gmail.com>. The new %store magic's docstring has full
46 details.
53 details.
47
54
48 * IPython/iplib.py (InteractiveShell.post_config_initialization):
55 * IPython/iplib.py (InteractiveShell.post_config_initialization):
49 changed the default logfile name from 'ipython.log' to
56 changed the default logfile name from 'ipython.log' to
50 'ipython_log.py'. These logs are real python files, and now that
57 'ipython_log.py'. These logs are real python files, and now that
51 we have much better multiline support, people are more likely to
58 we have much better multiline support, people are more likely to
52 want to use them as such. Might as well name them correctly.
59 want to use them as such. Might as well name them correctly.
53
60
54 * IPython/Magic.py: substantial cleanup. While we can't stop
61 * IPython/Magic.py: substantial cleanup. While we can't stop
55 using magics as mixins, due to the existing customizations 'out
62 using magics as mixins, due to the existing customizations 'out
56 there' which rely on the mixin naming conventions, at least I
63 there' which rely on the mixin naming conventions, at least I
57 cleaned out all cross-class name usage. So once we are OK with
64 cleaned out all cross-class name usage. So once we are OK with
58 breaking compatibility, the two systems can be separated.
65 breaking compatibility, the two systems can be separated.
59
66
60 * IPython/Logger.py: major cleanup. This one is NOT a mixin
67 * IPython/Logger.py: major cleanup. This one is NOT a mixin
61 anymore, and the class is a fair bit less hideous as well. New
68 anymore, and the class is a fair bit less hideous as well. New
62 features were also introduced: timestamping of input, and logging
69 features were also introduced: timestamping of input, and logging
63 of output results. These are user-visible with the -t and -o
70 of output results. These are user-visible with the -t and -o
64 options to %logstart. Closes
71 options to %logstart. Closes
65 http://www.scipy.net/roundup/ipython/issue11 and a request by
72 http://www.scipy.net/roundup/ipython/issue11 and a request by
66 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
73 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
67
74
68 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
75 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
69
76
70 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
77 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
71 better hadnle backslashes in paths. See the thread 'More Windows
78 better hadnle backslashes in paths. See the thread 'More Windows
72 questions part 2 - \/ characters revisited' on the iypthon user
79 questions part 2 - \/ characters revisited' on the iypthon user
73 list:
80 list:
74 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
81 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
75
82
76 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
83 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
77
84
78 (InteractiveShell.__init__): change threaded shells to not use the
85 (InteractiveShell.__init__): change threaded shells to not use the
79 ipython crash handler. This was causing more problems than not,
86 ipython crash handler. This was causing more problems than not,
80 as exceptions in the main thread (GUI code, typically) would
87 as exceptions in the main thread (GUI code, typically) would
81 always show up as a 'crash', when they really weren't.
88 always show up as a 'crash', when they really weren't.
82
89
83 The colors and exception mode commands (%colors/%xmode) have been
90 The colors and exception mode commands (%colors/%xmode) have been
84 synchronized to also take this into account, so users can get
91 synchronized to also take this into account, so users can get
85 verbose exceptions for their threaded code as well. I also added
92 verbose exceptions for their threaded code as well. I also added
86 support for activating pdb inside this exception handler as well,
93 support for activating pdb inside this exception handler as well,
87 so now GUI authors can use IPython's enhanced pdb at runtime.
94 so now GUI authors can use IPython's enhanced pdb at runtime.
88
95
89 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
96 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
90 true by default, and add it to the shipped ipythonrc file. Since
97 true by default, and add it to the shipped ipythonrc file. Since
91 this asks the user before proceeding, I think it's OK to make it
98 this asks the user before proceeding, I think it's OK to make it
92 true by default.
99 true by default.
93
100
94 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
101 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
95 of the previous special-casing of input in the eval loop. I think
102 of the previous special-casing of input in the eval loop. I think
96 this is cleaner, as they really are commands and shouldn't have
103 this is cleaner, as they really are commands and shouldn't have
97 a special role in the middle of the core code.
104 a special role in the middle of the core code.
98
105
99 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
106 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
100
107
101 * IPython/iplib.py (edit_syntax_error): added support for
108 * IPython/iplib.py (edit_syntax_error): added support for
102 automatically reopening the editor if the file had a syntax error
109 automatically reopening the editor if the file had a syntax error
103 in it. Thanks to scottt who provided the patch at:
110 in it. Thanks to scottt who provided the patch at:
104 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
111 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
105 version committed).
112 version committed).
106
113
107 * IPython/iplib.py (handle_normal): add suport for multi-line
114 * IPython/iplib.py (handle_normal): add suport for multi-line
108 input with emtpy lines. This fixes
115 input with emtpy lines. This fixes
109 http://www.scipy.net/roundup/ipython/issue43 and a similar
116 http://www.scipy.net/roundup/ipython/issue43 and a similar
110 discussion on the user list.
117 discussion on the user list.
111
118
112 WARNING: a behavior change is necessarily introduced to support
119 WARNING: a behavior change is necessarily introduced to support
113 blank lines: now a single blank line with whitespace does NOT
120 blank lines: now a single blank line with whitespace does NOT
114 break the input loop, which means that when autoindent is on, by
121 break the input loop, which means that when autoindent is on, by
115 default hitting return on the next (indented) line does NOT exit.
122 default hitting return on the next (indented) line does NOT exit.
116
123
117 Instead, to exit a multiline input you can either have:
124 Instead, to exit a multiline input you can either have:
118
125
119 - TWO whitespace lines (just hit return again), or
126 - TWO whitespace lines (just hit return again), or
120 - a single whitespace line of a different length than provided
127 - a single whitespace line of a different length than provided
121 by the autoindent (add or remove a space).
128 by the autoindent (add or remove a space).
122
129
123 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
130 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
124 module to better organize all readline-related functionality.
131 module to better organize all readline-related functionality.
125 I've deleted FlexCompleter and put all completion clases here.
132 I've deleted FlexCompleter and put all completion clases here.
126
133
127 * IPython/iplib.py (raw_input): improve indentation management.
134 * IPython/iplib.py (raw_input): improve indentation management.
128 It is now possible to paste indented code with autoindent on, and
135 It is now possible to paste indented code with autoindent on, and
129 the code is interpreted correctly (though it still looks bad on
136 the code is interpreted correctly (though it still looks bad on
130 screen, due to the line-oriented nature of ipython).
137 screen, due to the line-oriented nature of ipython).
131 (MagicCompleter.complete): change behavior so that a TAB key on an
138 (MagicCompleter.complete): change behavior so that a TAB key on an
132 otherwise empty line actually inserts a tab, instead of completing
139 otherwise empty line actually inserts a tab, instead of completing
133 on the entire global namespace. This makes it easier to use the
140 on the entire global namespace. This makes it easier to use the
134 TAB key for indentation. After a request by Hans Meine
141 TAB key for indentation. After a request by Hans Meine
135 <hans_meine-AT-gmx.net>
142 <hans_meine-AT-gmx.net>
136 (_prefilter): add support so that typing plain 'exit' or 'quit'
143 (_prefilter): add support so that typing plain 'exit' or 'quit'
137 does a sensible thing. Originally I tried to deviate as little as
144 does a sensible thing. Originally I tried to deviate as little as
138 possible from the default python behavior, but even that one may
145 possible from the default python behavior, but even that one may
139 change in this direction (thread on python-dev to that effect).
146 change in this direction (thread on python-dev to that effect).
140 Regardless, ipython should do the right thing even if CPython's
147 Regardless, ipython should do the right thing even if CPython's
141 '>>>' prompt doesn't.
148 '>>>' prompt doesn't.
142 (InteractiveShell): removed subclassing code.InteractiveConsole
149 (InteractiveShell): removed subclassing code.InteractiveConsole
143 class. By now we'd overridden just about all of its methods: I've
150 class. By now we'd overridden just about all of its methods: I've
144 copied the remaining two over, and now ipython is a standalone
151 copied the remaining two over, and now ipython is a standalone
145 class. This will provide a clearer picture for the chainsaw
152 class. This will provide a clearer picture for the chainsaw
146 branch refactoring.
153 branch refactoring.
147
154
148 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
155 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
149
156
150 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
157 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
151 failures for objects which break when dir() is called on them.
158 failures for objects which break when dir() is called on them.
152
159
153 * IPython/FlexCompleter.py (Completer.__init__): Added support for
160 * IPython/FlexCompleter.py (Completer.__init__): Added support for
154 distinct local and global namespaces in the completer API. This
161 distinct local and global namespaces in the completer API. This
155 change allows us top properly handle completion with distinct
162 change allows us top properly handle completion with distinct
156 scopes, including in embedded instances (this had never really
163 scopes, including in embedded instances (this had never really
157 worked correctly).
164 worked correctly).
158
165
159 Note: this introduces a change in the constructor for
166 Note: this introduces a change in the constructor for
160 MagicCompleter, as a new global_namespace parameter is now the
167 MagicCompleter, as a new global_namespace parameter is now the
161 second argument (the others were bumped one position).
168 second argument (the others were bumped one position).
162
169
163 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
170 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
164
171
165 * IPython/iplib.py (embed_mainloop): fix tab-completion in
172 * IPython/iplib.py (embed_mainloop): fix tab-completion in
166 embedded instances (which can be done now thanks to Vivian's
173 embedded instances (which can be done now thanks to Vivian's
167 frame-handling fixes for pdb).
174 frame-handling fixes for pdb).
168 (InteractiveShell.__init__): Fix namespace handling problem in
175 (InteractiveShell.__init__): Fix namespace handling problem in
169 embedded instances. We were overwriting __main__ unconditionally,
176 embedded instances. We were overwriting __main__ unconditionally,
170 and this should only be done for 'full' (non-embedded) IPython;
177 and this should only be done for 'full' (non-embedded) IPython;
171 embedded instances must respect the caller's __main__. Thanks to
178 embedded instances must respect the caller's __main__. Thanks to
172 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
179 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
173
180
174 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
181 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
175
182
176 * setup.py: added download_url to setup(). This registers the
183 * setup.py: added download_url to setup(). This registers the
177 download address at PyPI, which is not only useful to humans
184 download address at PyPI, which is not only useful to humans
178 browsing the site, but is also picked up by setuptools (the Eggs
185 browsing the site, but is also picked up by setuptools (the Eggs
179 machinery). Thanks to Ville and R. Kern for the info/discussion
186 machinery). Thanks to Ville and R. Kern for the info/discussion
180 on this.
187 on this.
181
188
182 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
189 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
183
190
184 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
191 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
185 This brings a lot of nice functionality to the pdb mode, which now
192 This brings a lot of nice functionality to the pdb mode, which now
186 has tab-completion, syntax highlighting, and better stack handling
193 has tab-completion, syntax highlighting, and better stack handling
187 than before. Many thanks to Vivian De Smedt
194 than before. Many thanks to Vivian De Smedt
188 <vivian-AT-vdesmedt.com> for the original patches.
195 <vivian-AT-vdesmedt.com> for the original patches.
189
196
190 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
197 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
191
198
192 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
199 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
193 sequence to consistently accept the banner argument. The
200 sequence to consistently accept the banner argument. The
194 inconsistency was tripping SAGE, thanks to Gary Zablackis
201 inconsistency was tripping SAGE, thanks to Gary Zablackis
195 <gzabl-AT-yahoo.com> for the report.
202 <gzabl-AT-yahoo.com> for the report.
196
203
197 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
204 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
198
205
199 * IPython/iplib.py (InteractiveShell.post_config_initialization):
206 * IPython/iplib.py (InteractiveShell.post_config_initialization):
200 Fix bug where a naked 'alias' call in the ipythonrc file would
207 Fix bug where a naked 'alias' call in the ipythonrc file would
201 cause a crash. Bug reported by Jorgen Stenarson.
208 cause a crash. Bug reported by Jorgen Stenarson.
202
209
203 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
210 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
204
211
205 * IPython/ipmaker.py (make_IPython): cleanups which should improve
212 * IPython/ipmaker.py (make_IPython): cleanups which should improve
206 startup time.
213 startup time.
207
214
208 * IPython/iplib.py (runcode): my globals 'fix' for embedded
215 * IPython/iplib.py (runcode): my globals 'fix' for embedded
209 instances had introduced a bug with globals in normal code. Now
216 instances had introduced a bug with globals in normal code. Now
210 it's working in all cases.
217 it's working in all cases.
211
218
212 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
219 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
213 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
220 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
214 has been introduced to set the default case sensitivity of the
221 has been introduced to set the default case sensitivity of the
215 searches. Users can still select either mode at runtime on a
222 searches. Users can still select either mode at runtime on a
216 per-search basis.
223 per-search basis.
217
224
218 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
225 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
219
226
220 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
227 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
221 attributes in wildcard searches for subclasses. Modified version
228 attributes in wildcard searches for subclasses. Modified version
222 of a patch by Jorgen.
229 of a patch by Jorgen.
223
230
224 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
231 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
225
232
226 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
233 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
227 embedded instances. I added a user_global_ns attribute to the
234 embedded instances. I added a user_global_ns attribute to the
228 InteractiveShell class to handle this.
235 InteractiveShell class to handle this.
229
236
230 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
237 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
231
238
232 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
239 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
233 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
240 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
234 (reported under win32, but may happen also in other platforms).
241 (reported under win32, but may happen also in other platforms).
235 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
242 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
236
243
237 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
244 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
238
245
239 * IPython/Magic.py (magic_psearch): new support for wildcard
246 * IPython/Magic.py (magic_psearch): new support for wildcard
240 patterns. Now, typing ?a*b will list all names which begin with a
247 patterns. Now, typing ?a*b will list all names which begin with a
241 and end in b, for example. The %psearch magic has full
248 and end in b, for example. The %psearch magic has full
242 docstrings. Many thanks to JΓΆrgen Stenarson
249 docstrings. Many thanks to JΓΆrgen Stenarson
243 <jorgen.stenarson-AT-bostream.nu>, author of the patches
250 <jorgen.stenarson-AT-bostream.nu>, author of the patches
244 implementing this functionality.
251 implementing this functionality.
245
252
246 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
253 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
247
254
248 * Manual: fixed long-standing annoyance of double-dashes (as in
255 * Manual: fixed long-standing annoyance of double-dashes (as in
249 --prefix=~, for example) being stripped in the HTML version. This
256 --prefix=~, for example) being stripped in the HTML version. This
250 is a latex2html bug, but a workaround was provided. Many thanks
257 is a latex2html bug, but a workaround was provided. Many thanks
251 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
258 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
252 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
259 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
253 rolling. This seemingly small issue had tripped a number of users
260 rolling. This seemingly small issue had tripped a number of users
254 when first installing, so I'm glad to see it gone.
261 when first installing, so I'm glad to see it gone.
255
262
256 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
263 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
257
264
258 * IPython/Extensions/numeric_formats.py: fix missing import,
265 * IPython/Extensions/numeric_formats.py: fix missing import,
259 reported by Stephen Walton.
266 reported by Stephen Walton.
260
267
261 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
268 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
262
269
263 * IPython/demo.py: finish demo module, fully documented now.
270 * IPython/demo.py: finish demo module, fully documented now.
264
271
265 * IPython/genutils.py (file_read): simple little utility to read a
272 * IPython/genutils.py (file_read): simple little utility to read a
266 file and ensure it's closed afterwards.
273 file and ensure it's closed afterwards.
267
274
268 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
275 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
269
276
270 * IPython/demo.py (Demo.__init__): added support for individually
277 * IPython/demo.py (Demo.__init__): added support for individually
271 tagging blocks for automatic execution.
278 tagging blocks for automatic execution.
272
279
273 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
280 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
274 syntax-highlighted python sources, requested by John.
281 syntax-highlighted python sources, requested by John.
275
282
276 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
283 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
277
284
278 * IPython/demo.py (Demo.again): fix bug where again() blocks after
285 * IPython/demo.py (Demo.again): fix bug where again() blocks after
279 finishing.
286 finishing.
280
287
281 * IPython/genutils.py (shlex_split): moved from Magic to here,
288 * IPython/genutils.py (shlex_split): moved from Magic to here,
282 where all 2.2 compatibility stuff lives. I needed it for demo.py.
289 where all 2.2 compatibility stuff lives. I needed it for demo.py.
283
290
284 * IPython/demo.py (Demo.__init__): added support for silent
291 * IPython/demo.py (Demo.__init__): added support for silent
285 blocks, improved marks as regexps, docstrings written.
292 blocks, improved marks as regexps, docstrings written.
286 (Demo.__init__): better docstring, added support for sys.argv.
293 (Demo.__init__): better docstring, added support for sys.argv.
287
294
288 * IPython/genutils.py (marquee): little utility used by the demo
295 * IPython/genutils.py (marquee): little utility used by the demo
289 code, handy in general.
296 code, handy in general.
290
297
291 * IPython/demo.py (Demo.__init__): new class for interactive
298 * IPython/demo.py (Demo.__init__): new class for interactive
292 demos. Not documented yet, I just wrote it in a hurry for
299 demos. Not documented yet, I just wrote it in a hurry for
293 scipy'05. Will docstring later.
300 scipy'05. Will docstring later.
294
301
295 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
302 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
296
303
297 * IPython/Shell.py (sigint_handler): Drastic simplification which
304 * IPython/Shell.py (sigint_handler): Drastic simplification which
298 also seems to make Ctrl-C work correctly across threads! This is
305 also seems to make Ctrl-C work correctly across threads! This is
299 so simple, that I can't beleive I'd missed it before. Needs more
306 so simple, that I can't beleive I'd missed it before. Needs more
300 testing, though.
307 testing, though.
301 (KBINT): Never mind, revert changes. I'm sure I'd tried something
308 (KBINT): Never mind, revert changes. I'm sure I'd tried something
302 like this before...
309 like this before...
303
310
304 * IPython/genutils.py (get_home_dir): add protection against
311 * IPython/genutils.py (get_home_dir): add protection against
305 non-dirs in win32 registry.
312 non-dirs in win32 registry.
306
313
307 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
314 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
308 bug where dict was mutated while iterating (pysh crash).
315 bug where dict was mutated while iterating (pysh crash).
309
316
310 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
317 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
311
318
312 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
319 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
313 spurious newlines added by this routine. After a report by
320 spurious newlines added by this routine. After a report by
314 F. Mantegazza.
321 F. Mantegazza.
315
322
316 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
323 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
317
324
318 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
325 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
319 calls. These were a leftover from the GTK 1.x days, and can cause
326 calls. These were a leftover from the GTK 1.x days, and can cause
320 problems in certain cases (after a report by John Hunter).
327 problems in certain cases (after a report by John Hunter).
321
328
322 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
329 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
323 os.getcwd() fails at init time. Thanks to patch from David Remahl
330 os.getcwd() fails at init time. Thanks to patch from David Remahl
324 <chmod007-AT-mac.com>.
331 <chmod007-AT-mac.com>.
325 (InteractiveShell.__init__): prevent certain special magics from
332 (InteractiveShell.__init__): prevent certain special magics from
326 being shadowed by aliases. Closes
333 being shadowed by aliases. Closes
327 http://www.scipy.net/roundup/ipython/issue41.
334 http://www.scipy.net/roundup/ipython/issue41.
328
335
329 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
336 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
330
337
331 * IPython/iplib.py (InteractiveShell.complete): Added new
338 * IPython/iplib.py (InteractiveShell.complete): Added new
332 top-level completion method to expose the completion mechanism
339 top-level completion method to expose the completion mechanism
333 beyond readline-based environments.
340 beyond readline-based environments.
334
341
335 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
342 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
336
343
337 * tools/ipsvnc (svnversion): fix svnversion capture.
344 * tools/ipsvnc (svnversion): fix svnversion capture.
338
345
339 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
346 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
340 attribute to self, which was missing. Before, it was set by a
347 attribute to self, which was missing. Before, it was set by a
341 routine which in certain cases wasn't being called, so the
348 routine which in certain cases wasn't being called, so the
342 instance could end up missing the attribute. This caused a crash.
349 instance could end up missing the attribute. This caused a crash.
343 Closes http://www.scipy.net/roundup/ipython/issue40.
350 Closes http://www.scipy.net/roundup/ipython/issue40.
344
351
345 2005-08-16 Fernando Perez <fperez@colorado.edu>
352 2005-08-16 Fernando Perez <fperez@colorado.edu>
346
353
347 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
354 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
348 contains non-string attribute. Closes
355 contains non-string attribute. Closes
349 http://www.scipy.net/roundup/ipython/issue38.
356 http://www.scipy.net/roundup/ipython/issue38.
350
357
351 2005-08-14 Fernando Perez <fperez@colorado.edu>
358 2005-08-14 Fernando Perez <fperez@colorado.edu>
352
359
353 * tools/ipsvnc: Minor improvements, to add changeset info.
360 * tools/ipsvnc: Minor improvements, to add changeset info.
354
361
355 2005-08-12 Fernando Perez <fperez@colorado.edu>
362 2005-08-12 Fernando Perez <fperez@colorado.edu>
356
363
357 * IPython/iplib.py (runsource): remove self.code_to_run_src
364 * IPython/iplib.py (runsource): remove self.code_to_run_src
358 attribute. I realized this is nothing more than
365 attribute. I realized this is nothing more than
359 '\n'.join(self.buffer), and having the same data in two different
366 '\n'.join(self.buffer), and having the same data in two different
360 places is just asking for synchronization bugs. This may impact
367 places is just asking for synchronization bugs. This may impact
361 people who have custom exception handlers, so I need to warn
368 people who have custom exception handlers, so I need to warn
362 ipython-dev about it (F. Mantegazza may use them).
369 ipython-dev about it (F. Mantegazza may use them).
363
370
364 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
371 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
365
372
366 * IPython/genutils.py: fix 2.2 compatibility (generators)
373 * IPython/genutils.py: fix 2.2 compatibility (generators)
367
374
368 2005-07-18 Fernando Perez <fperez@colorado.edu>
375 2005-07-18 Fernando Perez <fperez@colorado.edu>
369
376
370 * IPython/genutils.py (get_home_dir): fix to help users with
377 * IPython/genutils.py (get_home_dir): fix to help users with
371 invalid $HOME under win32.
378 invalid $HOME under win32.
372
379
373 2005-07-17 Fernando Perez <fperez@colorado.edu>
380 2005-07-17 Fernando Perez <fperez@colorado.edu>
374
381
375 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
382 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
376 some old hacks and clean up a bit other routines; code should be
383 some old hacks and clean up a bit other routines; code should be
377 simpler and a bit faster.
384 simpler and a bit faster.
378
385
379 * IPython/iplib.py (interact): removed some last-resort attempts
386 * IPython/iplib.py (interact): removed some last-resort attempts
380 to survive broken stdout/stderr. That code was only making it
387 to survive broken stdout/stderr. That code was only making it
381 harder to abstract out the i/o (necessary for gui integration),
388 harder to abstract out the i/o (necessary for gui integration),
382 and the crashes it could prevent were extremely rare in practice
389 and the crashes it could prevent were extremely rare in practice
383 (besides being fully user-induced in a pretty violent manner).
390 (besides being fully user-induced in a pretty violent manner).
384
391
385 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
392 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
386 Nothing major yet, but the code is simpler to read; this should
393 Nothing major yet, but the code is simpler to read; this should
387 make it easier to do more serious modifications in the future.
394 make it easier to do more serious modifications in the future.
388
395
389 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
396 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
390 which broke in .15 (thanks to a report by Ville).
397 which broke in .15 (thanks to a report by Ville).
391
398
392 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
399 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
393 be quite correct, I know next to nothing about unicode). This
400 be quite correct, I know next to nothing about unicode). This
394 will allow unicode strings to be used in prompts, amongst other
401 will allow unicode strings to be used in prompts, amongst other
395 cases. It also will prevent ipython from crashing when unicode
402 cases. It also will prevent ipython from crashing when unicode
396 shows up unexpectedly in many places. If ascii encoding fails, we
403 shows up unexpectedly in many places. If ascii encoding fails, we
397 assume utf_8. Currently the encoding is not a user-visible
404 assume utf_8. Currently the encoding is not a user-visible
398 setting, though it could be made so if there is demand for it.
405 setting, though it could be made so if there is demand for it.
399
406
400 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
407 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
401
408
402 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
409 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
403
410
404 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
411 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
405
412
406 * IPython/genutils.py: Add 2.2 compatibility here, so all other
413 * IPython/genutils.py: Add 2.2 compatibility here, so all other
407 code can work transparently for 2.2/2.3.
414 code can work transparently for 2.2/2.3.
408
415
409 2005-07-16 Fernando Perez <fperez@colorado.edu>
416 2005-07-16 Fernando Perez <fperez@colorado.edu>
410
417
411 * IPython/ultraTB.py (ExceptionColors): Make a global variable
418 * IPython/ultraTB.py (ExceptionColors): Make a global variable
412 out of the color scheme table used for coloring exception
419 out of the color scheme table used for coloring exception
413 tracebacks. This allows user code to add new schemes at runtime.
420 tracebacks. This allows user code to add new schemes at runtime.
414 This is a minimally modified version of the patch at
421 This is a minimally modified version of the patch at
415 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
422 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
416 for the contribution.
423 for the contribution.
417
424
418 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
425 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
419 slightly modified version of the patch in
426 slightly modified version of the patch in
420 http://www.scipy.net/roundup/ipython/issue34, which also allows me
427 http://www.scipy.net/roundup/ipython/issue34, which also allows me
421 to remove the previous try/except solution (which was costlier).
428 to remove the previous try/except solution (which was costlier).
422 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
429 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
423
430
424 2005-06-08 Fernando Perez <fperez@colorado.edu>
431 2005-06-08 Fernando Perez <fperez@colorado.edu>
425
432
426 * IPython/iplib.py (write/write_err): Add methods to abstract all
433 * IPython/iplib.py (write/write_err): Add methods to abstract all
427 I/O a bit more.
434 I/O a bit more.
428
435
429 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
436 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
430 warning, reported by Aric Hagberg, fix by JD Hunter.
437 warning, reported by Aric Hagberg, fix by JD Hunter.
431
438
432 2005-06-02 *** Released version 0.6.15
439 2005-06-02 *** Released version 0.6.15
433
440
434 2005-06-01 Fernando Perez <fperez@colorado.edu>
441 2005-06-01 Fernando Perez <fperez@colorado.edu>
435
442
436 * IPython/iplib.py (MagicCompleter.file_matches): Fix
443 * IPython/iplib.py (MagicCompleter.file_matches): Fix
437 tab-completion of filenames within open-quoted strings. Note that
444 tab-completion of filenames within open-quoted strings. Note that
438 this requires that in ~/.ipython/ipythonrc, users change the
445 this requires that in ~/.ipython/ipythonrc, users change the
439 readline delimiters configuration to read:
446 readline delimiters configuration to read:
440
447
441 readline_remove_delims -/~
448 readline_remove_delims -/~
442
449
443
450
444 2005-05-31 *** Released version 0.6.14
451 2005-05-31 *** Released version 0.6.14
445
452
446 2005-05-29 Fernando Perez <fperez@colorado.edu>
453 2005-05-29 Fernando Perez <fperez@colorado.edu>
447
454
448 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
455 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
449 with files not on the filesystem. Reported by Eliyahu Sandler
456 with files not on the filesystem. Reported by Eliyahu Sandler
450 <eli@gondolin.net>
457 <eli@gondolin.net>
451
458
452 2005-05-22 Fernando Perez <fperez@colorado.edu>
459 2005-05-22 Fernando Perez <fperez@colorado.edu>
453
460
454 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
461 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
455 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
462 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
456
463
457 2005-05-19 Fernando Perez <fperez@colorado.edu>
464 2005-05-19 Fernando Perez <fperez@colorado.edu>
458
465
459 * IPython/iplib.py (safe_execfile): close a file which could be
466 * IPython/iplib.py (safe_execfile): close a file which could be
460 left open (causing problems in win32, which locks open files).
467 left open (causing problems in win32, which locks open files).
461 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
468 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
462
469
463 2005-05-18 Fernando Perez <fperez@colorado.edu>
470 2005-05-18 Fernando Perez <fperez@colorado.edu>
464
471
465 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
472 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
466 keyword arguments correctly to safe_execfile().
473 keyword arguments correctly to safe_execfile().
467
474
468 2005-05-13 Fernando Perez <fperez@colorado.edu>
475 2005-05-13 Fernando Perez <fperez@colorado.edu>
469
476
470 * ipython.1: Added info about Qt to manpage, and threads warning
477 * ipython.1: Added info about Qt to manpage, and threads warning
471 to usage page (invoked with --help).
478 to usage page (invoked with --help).
472
479
473 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
480 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
474 new matcher (it goes at the end of the priority list) to do
481 new matcher (it goes at the end of the priority list) to do
475 tab-completion on named function arguments. Submitted by George
482 tab-completion on named function arguments. Submitted by George
476 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
483 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
477 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
484 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
478 for more details.
485 for more details.
479
486
480 * IPython/Magic.py (magic_run): Added new -e flag to ignore
487 * IPython/Magic.py (magic_run): Added new -e flag to ignore
481 SystemExit exceptions in the script being run. Thanks to a report
488 SystemExit exceptions in the script being run. Thanks to a report
482 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
489 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
483 producing very annoying behavior when running unit tests.
490 producing very annoying behavior when running unit tests.
484
491
485 2005-05-12 Fernando Perez <fperez@colorado.edu>
492 2005-05-12 Fernando Perez <fperez@colorado.edu>
486
493
487 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
494 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
488 which I'd broken (again) due to a changed regexp. In the process,
495 which I'd broken (again) due to a changed regexp. In the process,
489 added ';' as an escape to auto-quote the whole line without
496 added ';' as an escape to auto-quote the whole line without
490 splitting its arguments. Thanks to a report by Jerry McRae
497 splitting its arguments. Thanks to a report by Jerry McRae
491 <qrs0xyc02-AT-sneakemail.com>.
498 <qrs0xyc02-AT-sneakemail.com>.
492
499
493 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
500 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
494 possible crashes caused by a TokenError. Reported by Ed Schofield
501 possible crashes caused by a TokenError. Reported by Ed Schofield
495 <schofield-AT-ftw.at>.
502 <schofield-AT-ftw.at>.
496
503
497 2005-05-06 Fernando Perez <fperez@colorado.edu>
504 2005-05-06 Fernando Perez <fperez@colorado.edu>
498
505
499 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
506 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
500
507
501 2005-04-29 Fernando Perez <fperez@colorado.edu>
508 2005-04-29 Fernando Perez <fperez@colorado.edu>
502
509
503 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
510 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
504 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
511 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
505 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
512 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
506 which provides support for Qt interactive usage (similar to the
513 which provides support for Qt interactive usage (similar to the
507 existing one for WX and GTK). This had been often requested.
514 existing one for WX and GTK). This had been often requested.
508
515
509 2005-04-14 *** Released version 0.6.13
516 2005-04-14 *** Released version 0.6.13
510
517
511 2005-04-08 Fernando Perez <fperez@colorado.edu>
518 2005-04-08 Fernando Perez <fperez@colorado.edu>
512
519
513 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
520 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
514 from _ofind, which gets called on almost every input line. Now,
521 from _ofind, which gets called on almost every input line. Now,
515 we only try to get docstrings if they are actually going to be
522 we only try to get docstrings if they are actually going to be
516 used (the overhead of fetching unnecessary docstrings can be
523 used (the overhead of fetching unnecessary docstrings can be
517 noticeable for certain objects, such as Pyro proxies).
524 noticeable for certain objects, such as Pyro proxies).
518
525
519 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
526 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
520 for completers. For some reason I had been passing them the state
527 for completers. For some reason I had been passing them the state
521 variable, which completers never actually need, and was in
528 variable, which completers never actually need, and was in
522 conflict with the rlcompleter API. Custom completers ONLY need to
529 conflict with the rlcompleter API. Custom completers ONLY need to
523 take the text parameter.
530 take the text parameter.
524
531
525 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
532 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
526 work correctly in pysh. I've also moved all the logic which used
533 work correctly in pysh. I've also moved all the logic which used
527 to be in pysh.py here, which will prevent problems with future
534 to be in pysh.py here, which will prevent problems with future
528 upgrades. However, this time I must warn users to update their
535 upgrades. However, this time I must warn users to update their
529 pysh profile to include the line
536 pysh profile to include the line
530
537
531 import_all IPython.Extensions.InterpreterExec
538 import_all IPython.Extensions.InterpreterExec
532
539
533 because otherwise things won't work for them. They MUST also
540 because otherwise things won't work for them. They MUST also
534 delete pysh.py and the line
541 delete pysh.py and the line
535
542
536 execfile pysh.py
543 execfile pysh.py
537
544
538 from their ipythonrc-pysh.
545 from their ipythonrc-pysh.
539
546
540 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
547 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
541 robust in the face of objects whose dir() returns non-strings
548 robust in the face of objects whose dir() returns non-strings
542 (which it shouldn't, but some broken libs like ITK do). Thanks to
549 (which it shouldn't, but some broken libs like ITK do). Thanks to
543 a patch by John Hunter (implemented differently, though). Also
550 a patch by John Hunter (implemented differently, though). Also
544 minor improvements by using .extend instead of + on lists.
551 minor improvements by using .extend instead of + on lists.
545
552
546 * pysh.py:
553 * pysh.py:
547
554
548 2005-04-06 Fernando Perez <fperez@colorado.edu>
555 2005-04-06 Fernando Perez <fperez@colorado.edu>
549
556
550 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
557 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
551 by default, so that all users benefit from it. Those who don't
558 by default, so that all users benefit from it. Those who don't
552 want it can still turn it off.
559 want it can still turn it off.
553
560
554 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
561 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
555 config file, I'd forgotten about this, so users were getting it
562 config file, I'd forgotten about this, so users were getting it
556 off by default.
563 off by default.
557
564
558 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
565 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
559 consistency. Now magics can be called in multiline statements,
566 consistency. Now magics can be called in multiline statements,
560 and python variables can be expanded in magic calls via $var.
567 and python variables can be expanded in magic calls via $var.
561 This makes the magic system behave just like aliases or !system
568 This makes the magic system behave just like aliases or !system
562 calls.
569 calls.
563
570
564 2005-03-28 Fernando Perez <fperez@colorado.edu>
571 2005-03-28 Fernando Perez <fperez@colorado.edu>
565
572
566 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
573 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
567 expensive string additions for building command. Add support for
574 expensive string additions for building command. Add support for
568 trailing ';' when autocall is used.
575 trailing ';' when autocall is used.
569
576
570 2005-03-26 Fernando Perez <fperez@colorado.edu>
577 2005-03-26 Fernando Perez <fperez@colorado.edu>
571
578
572 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
579 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
573 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
580 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
574 ipython.el robust against prompts with any number of spaces
581 ipython.el robust against prompts with any number of spaces
575 (including 0) after the ':' character.
582 (including 0) after the ':' character.
576
583
577 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
584 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
578 continuation prompt, which misled users to think the line was
585 continuation prompt, which misled users to think the line was
579 already indented. Closes debian Bug#300847, reported to me by
586 already indented. Closes debian Bug#300847, reported to me by
580 Norbert Tretkowski <tretkowski-AT-inittab.de>.
587 Norbert Tretkowski <tretkowski-AT-inittab.de>.
581
588
582 2005-03-23 Fernando Perez <fperez@colorado.edu>
589 2005-03-23 Fernando Perez <fperez@colorado.edu>
583
590
584 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
591 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
585 properly aligned if they have embedded newlines.
592 properly aligned if they have embedded newlines.
586
593
587 * IPython/iplib.py (runlines): Add a public method to expose
594 * IPython/iplib.py (runlines): Add a public method to expose
588 IPython's code execution machinery, so that users can run strings
595 IPython's code execution machinery, so that users can run strings
589 as if they had been typed at the prompt interactively.
596 as if they had been typed at the prompt interactively.
590 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
597 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
591 methods which can call the system shell, but with python variable
598 methods which can call the system shell, but with python variable
592 expansion. The three such methods are: __IPYTHON__.system,
599 expansion. The three such methods are: __IPYTHON__.system,
593 .getoutput and .getoutputerror. These need to be documented in a
600 .getoutput and .getoutputerror. These need to be documented in a
594 'public API' section (to be written) of the manual.
601 'public API' section (to be written) of the manual.
595
602
596 2005-03-20 Fernando Perez <fperez@colorado.edu>
603 2005-03-20 Fernando Perez <fperez@colorado.edu>
597
604
598 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
605 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
599 for custom exception handling. This is quite powerful, and it
606 for custom exception handling. This is quite powerful, and it
600 allows for user-installable exception handlers which can trap
607 allows for user-installable exception handlers which can trap
601 custom exceptions at runtime and treat them separately from
608 custom exceptions at runtime and treat them separately from
602 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
609 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
603 Mantegazza <mantegazza-AT-ill.fr>.
610 Mantegazza <mantegazza-AT-ill.fr>.
604 (InteractiveShell.set_custom_completer): public API function to
611 (InteractiveShell.set_custom_completer): public API function to
605 add new completers at runtime.
612 add new completers at runtime.
606
613
607 2005-03-19 Fernando Perez <fperez@colorado.edu>
614 2005-03-19 Fernando Perez <fperez@colorado.edu>
608
615
609 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
616 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
610 allow objects which provide their docstrings via non-standard
617 allow objects which provide their docstrings via non-standard
611 mechanisms (like Pyro proxies) to still be inspected by ipython's
618 mechanisms (like Pyro proxies) to still be inspected by ipython's
612 ? system.
619 ? system.
613
620
614 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
621 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
615 automatic capture system. I tried quite hard to make it work
622 automatic capture system. I tried quite hard to make it work
616 reliably, and simply failed. I tried many combinations with the
623 reliably, and simply failed. I tried many combinations with the
617 subprocess module, but eventually nothing worked in all needed
624 subprocess module, but eventually nothing worked in all needed
618 cases (not blocking stdin for the child, duplicating stdout
625 cases (not blocking stdin for the child, duplicating stdout
619 without blocking, etc). The new %sc/%sx still do capture to these
626 without blocking, etc). The new %sc/%sx still do capture to these
620 magical list/string objects which make shell use much more
627 magical list/string objects which make shell use much more
621 conveninent, so not all is lost.
628 conveninent, so not all is lost.
622
629
623 XXX - FIX MANUAL for the change above!
630 XXX - FIX MANUAL for the change above!
624
631
625 (runsource): I copied code.py's runsource() into ipython to modify
632 (runsource): I copied code.py's runsource() into ipython to modify
626 it a bit. Now the code object and source to be executed are
633 it a bit. Now the code object and source to be executed are
627 stored in ipython. This makes this info accessible to third-party
634 stored in ipython. This makes this info accessible to third-party
628 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
635 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
629 Mantegazza <mantegazza-AT-ill.fr>.
636 Mantegazza <mantegazza-AT-ill.fr>.
630
637
631 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
638 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
632 history-search via readline (like C-p/C-n). I'd wanted this for a
639 history-search via readline (like C-p/C-n). I'd wanted this for a
633 long time, but only recently found out how to do it. For users
640 long time, but only recently found out how to do it. For users
634 who already have their ipythonrc files made and want this, just
641 who already have their ipythonrc files made and want this, just
635 add:
642 add:
636
643
637 readline_parse_and_bind "\e[A": history-search-backward
644 readline_parse_and_bind "\e[A": history-search-backward
638 readline_parse_and_bind "\e[B": history-search-forward
645 readline_parse_and_bind "\e[B": history-search-forward
639
646
640 2005-03-18 Fernando Perez <fperez@colorado.edu>
647 2005-03-18 Fernando Perez <fperez@colorado.edu>
641
648
642 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
649 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
643 LSString and SList classes which allow transparent conversions
650 LSString and SList classes which allow transparent conversions
644 between list mode and whitespace-separated string.
651 between list mode and whitespace-separated string.
645 (magic_r): Fix recursion problem in %r.
652 (magic_r): Fix recursion problem in %r.
646
653
647 * IPython/genutils.py (LSString): New class to be used for
654 * IPython/genutils.py (LSString): New class to be used for
648 automatic storage of the results of all alias/system calls in _o
655 automatic storage of the results of all alias/system calls in _o
649 and _e (stdout/err). These provide a .l/.list attribute which
656 and _e (stdout/err). These provide a .l/.list attribute which
650 does automatic splitting on newlines. This means that for most
657 does automatic splitting on newlines. This means that for most
651 uses, you'll never need to do capturing of output with %sc/%sx
658 uses, you'll never need to do capturing of output with %sc/%sx
652 anymore, since ipython keeps this always done for you. Note that
659 anymore, since ipython keeps this always done for you. Note that
653 only the LAST results are stored, the _o/e variables are
660 only the LAST results are stored, the _o/e variables are
654 overwritten on each call. If you need to save their contents
661 overwritten on each call. If you need to save their contents
655 further, simply bind them to any other name.
662 further, simply bind them to any other name.
656
663
657 2005-03-17 Fernando Perez <fperez@colorado.edu>
664 2005-03-17 Fernando Perez <fperez@colorado.edu>
658
665
659 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
666 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
660 prompt namespace handling.
667 prompt namespace handling.
661
668
662 2005-03-16 Fernando Perez <fperez@colorado.edu>
669 2005-03-16 Fernando Perez <fperez@colorado.edu>
663
670
664 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
671 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
665 classic prompts to be '>>> ' (final space was missing, and it
672 classic prompts to be '>>> ' (final space was missing, and it
666 trips the emacs python mode).
673 trips the emacs python mode).
667 (BasePrompt.__str__): Added safe support for dynamic prompt
674 (BasePrompt.__str__): Added safe support for dynamic prompt
668 strings. Now you can set your prompt string to be '$x', and the
675 strings. Now you can set your prompt string to be '$x', and the
669 value of x will be printed from your interactive namespace. The
676 value of x will be printed from your interactive namespace. The
670 interpolation syntax includes the full Itpl support, so
677 interpolation syntax includes the full Itpl support, so
671 ${foo()+x+bar()} is a valid prompt string now, and the function
678 ${foo()+x+bar()} is a valid prompt string now, and the function
672 calls will be made at runtime.
679 calls will be made at runtime.
673
680
674 2005-03-15 Fernando Perez <fperez@colorado.edu>
681 2005-03-15 Fernando Perez <fperez@colorado.edu>
675
682
676 * IPython/Magic.py (magic_history): renamed %hist to %history, to
683 * IPython/Magic.py (magic_history): renamed %hist to %history, to
677 avoid name clashes in pylab. %hist still works, it just forwards
684 avoid name clashes in pylab. %hist still works, it just forwards
678 the call to %history.
685 the call to %history.
679
686
680 2005-03-02 *** Released version 0.6.12
687 2005-03-02 *** Released version 0.6.12
681
688
682 2005-03-02 Fernando Perez <fperez@colorado.edu>
689 2005-03-02 Fernando Perez <fperez@colorado.edu>
683
690
684 * IPython/iplib.py (handle_magic): log magic calls properly as
691 * IPython/iplib.py (handle_magic): log magic calls properly as
685 ipmagic() function calls.
692 ipmagic() function calls.
686
693
687 * IPython/Magic.py (magic_time): Improved %time to support
694 * IPython/Magic.py (magic_time): Improved %time to support
688 statements and provide wall-clock as well as CPU time.
695 statements and provide wall-clock as well as CPU time.
689
696
690 2005-02-27 Fernando Perez <fperez@colorado.edu>
697 2005-02-27 Fernando Perez <fperez@colorado.edu>
691
698
692 * IPython/hooks.py: New hooks module, to expose user-modifiable
699 * IPython/hooks.py: New hooks module, to expose user-modifiable
693 IPython functionality in a clean manner. For now only the editor
700 IPython functionality in a clean manner. For now only the editor
694 hook is actually written, and other thigns which I intend to turn
701 hook is actually written, and other thigns which I intend to turn
695 into proper hooks aren't yet there. The display and prefilter
702 into proper hooks aren't yet there. The display and prefilter
696 stuff, for example, should be hooks. But at least now the
703 stuff, for example, should be hooks. But at least now the
697 framework is in place, and the rest can be moved here with more
704 framework is in place, and the rest can be moved here with more
698 time later. IPython had had a .hooks variable for a long time for
705 time later. IPython had had a .hooks variable for a long time for
699 this purpose, but I'd never actually used it for anything.
706 this purpose, but I'd never actually used it for anything.
700
707
701 2005-02-26 Fernando Perez <fperez@colorado.edu>
708 2005-02-26 Fernando Perez <fperez@colorado.edu>
702
709
703 * IPython/ipmaker.py (make_IPython): make the default ipython
710 * IPython/ipmaker.py (make_IPython): make the default ipython
704 directory be called _ipython under win32, to follow more the
711 directory be called _ipython under win32, to follow more the
705 naming peculiarities of that platform (where buggy software like
712 naming peculiarities of that platform (where buggy software like
706 Visual Sourcesafe breaks with .named directories). Reported by
713 Visual Sourcesafe breaks with .named directories). Reported by
707 Ville Vainio.
714 Ville Vainio.
708
715
709 2005-02-23 Fernando Perez <fperez@colorado.edu>
716 2005-02-23 Fernando Perez <fperez@colorado.edu>
710
717
711 * IPython/iplib.py (InteractiveShell.__init__): removed a few
718 * IPython/iplib.py (InteractiveShell.__init__): removed a few
712 auto_aliases for win32 which were causing problems. Users can
719 auto_aliases for win32 which were causing problems. Users can
713 define the ones they personally like.
720 define the ones they personally like.
714
721
715 2005-02-21 Fernando Perez <fperez@colorado.edu>
722 2005-02-21 Fernando Perez <fperez@colorado.edu>
716
723
717 * IPython/Magic.py (magic_time): new magic to time execution of
724 * IPython/Magic.py (magic_time): new magic to time execution of
718 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
725 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
719
726
720 2005-02-19 Fernando Perez <fperez@colorado.edu>
727 2005-02-19 Fernando Perez <fperez@colorado.edu>
721
728
722 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
729 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
723 into keys (for prompts, for example).
730 into keys (for prompts, for example).
724
731
725 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
732 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
726 prompts in case users want them. This introduces a small behavior
733 prompts in case users want them. This introduces a small behavior
727 change: ipython does not automatically add a space to all prompts
734 change: ipython does not automatically add a space to all prompts
728 anymore. To get the old prompts with a space, users should add it
735 anymore. To get the old prompts with a space, users should add it
729 manually to their ipythonrc file, so for example prompt_in1 should
736 manually to their ipythonrc file, so for example prompt_in1 should
730 now read 'In [\#]: ' instead of 'In [\#]:'.
737 now read 'In [\#]: ' instead of 'In [\#]:'.
731 (BasePrompt.__init__): New option prompts_pad_left (only in rc
738 (BasePrompt.__init__): New option prompts_pad_left (only in rc
732 file) to control left-padding of secondary prompts.
739 file) to control left-padding of secondary prompts.
733
740
734 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
741 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
735 the profiler can't be imported. Fix for Debian, which removed
742 the profiler can't be imported. Fix for Debian, which removed
736 profile.py because of License issues. I applied a slightly
743 profile.py because of License issues. I applied a slightly
737 modified version of the original Debian patch at
744 modified version of the original Debian patch at
738 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
745 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
739
746
740 2005-02-17 Fernando Perez <fperez@colorado.edu>
747 2005-02-17 Fernando Perez <fperez@colorado.edu>
741
748
742 * IPython/genutils.py (native_line_ends): Fix bug which would
749 * IPython/genutils.py (native_line_ends): Fix bug which would
743 cause improper line-ends under win32 b/c I was not opening files
750 cause improper line-ends under win32 b/c I was not opening files
744 in binary mode. Bug report and fix thanks to Ville.
751 in binary mode. Bug report and fix thanks to Ville.
745
752
746 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
753 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
747 trying to catch spurious foo[1] autocalls. My fix actually broke
754 trying to catch spurious foo[1] autocalls. My fix actually broke
748 ',/' autoquote/call with explicit escape (bad regexp).
755 ',/' autoquote/call with explicit escape (bad regexp).
749
756
750 2005-02-15 *** Released version 0.6.11
757 2005-02-15 *** Released version 0.6.11
751
758
752 2005-02-14 Fernando Perez <fperez@colorado.edu>
759 2005-02-14 Fernando Perez <fperez@colorado.edu>
753
760
754 * IPython/background_jobs.py: New background job management
761 * IPython/background_jobs.py: New background job management
755 subsystem. This is implemented via a new set of classes, and
762 subsystem. This is implemented via a new set of classes, and
756 IPython now provides a builtin 'jobs' object for background job
763 IPython now provides a builtin 'jobs' object for background job
757 execution. A convenience %bg magic serves as a lightweight
764 execution. A convenience %bg magic serves as a lightweight
758 frontend for starting the more common type of calls. This was
765 frontend for starting the more common type of calls. This was
759 inspired by discussions with B. Granger and the BackgroundCommand
766 inspired by discussions with B. Granger and the BackgroundCommand
760 class described in the book Python Scripting for Computational
767 class described in the book Python Scripting for Computational
761 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
768 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
762 (although ultimately no code from this text was used, as IPython's
769 (although ultimately no code from this text was used, as IPython's
763 system is a separate implementation).
770 system is a separate implementation).
764
771
765 * IPython/iplib.py (MagicCompleter.python_matches): add new option
772 * IPython/iplib.py (MagicCompleter.python_matches): add new option
766 to control the completion of single/double underscore names
773 to control the completion of single/double underscore names
767 separately. As documented in the example ipytonrc file, the
774 separately. As documented in the example ipytonrc file, the
768 readline_omit__names variable can now be set to 2, to omit even
775 readline_omit__names variable can now be set to 2, to omit even
769 single underscore names. Thanks to a patch by Brian Wong
776 single underscore names. Thanks to a patch by Brian Wong
770 <BrianWong-AT-AirgoNetworks.Com>.
777 <BrianWong-AT-AirgoNetworks.Com>.
771 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
778 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
772 be autocalled as foo([1]) if foo were callable. A problem for
779 be autocalled as foo([1]) if foo were callable. A problem for
773 things which are both callable and implement __getitem__.
780 things which are both callable and implement __getitem__.
774 (init_readline): Fix autoindentation for win32. Thanks to a patch
781 (init_readline): Fix autoindentation for win32. Thanks to a patch
775 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
782 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
776
783
777 2005-02-12 Fernando Perez <fperez@colorado.edu>
784 2005-02-12 Fernando Perez <fperez@colorado.edu>
778
785
779 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
786 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
780 which I had written long ago to sort out user error messages which
787 which I had written long ago to sort out user error messages which
781 may occur during startup. This seemed like a good idea initially,
788 may occur during startup. This seemed like a good idea initially,
782 but it has proven a disaster in retrospect. I don't want to
789 but it has proven a disaster in retrospect. I don't want to
783 change much code for now, so my fix is to set the internal 'debug'
790 change much code for now, so my fix is to set the internal 'debug'
784 flag to true everywhere, whose only job was precisely to control
791 flag to true everywhere, whose only job was precisely to control
785 this subsystem. This closes issue 28 (as well as avoiding all
792 this subsystem. This closes issue 28 (as well as avoiding all
786 sorts of strange hangups which occur from time to time).
793 sorts of strange hangups which occur from time to time).
787
794
788 2005-02-07 Fernando Perez <fperez@colorado.edu>
795 2005-02-07 Fernando Perez <fperez@colorado.edu>
789
796
790 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
797 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
791 previous call produced a syntax error.
798 previous call produced a syntax error.
792
799
793 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
800 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
794 classes without constructor.
801 classes without constructor.
795
802
796 2005-02-06 Fernando Perez <fperez@colorado.edu>
803 2005-02-06 Fernando Perez <fperez@colorado.edu>
797
804
798 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
805 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
799 completions with the results of each matcher, so we return results
806 completions with the results of each matcher, so we return results
800 to the user from all namespaces. This breaks with ipython
807 to the user from all namespaces. This breaks with ipython
801 tradition, but I think it's a nicer behavior. Now you get all
808 tradition, but I think it's a nicer behavior. Now you get all
802 possible completions listed, from all possible namespaces (python,
809 possible completions listed, from all possible namespaces (python,
803 filesystem, magics...) After a request by John Hunter
810 filesystem, magics...) After a request by John Hunter
804 <jdhunter-AT-nitace.bsd.uchicago.edu>.
811 <jdhunter-AT-nitace.bsd.uchicago.edu>.
805
812
806 2005-02-05 Fernando Perez <fperez@colorado.edu>
813 2005-02-05 Fernando Perez <fperez@colorado.edu>
807
814
808 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
815 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
809 the call had quote characters in it (the quotes were stripped).
816 the call had quote characters in it (the quotes were stripped).
810
817
811 2005-01-31 Fernando Perez <fperez@colorado.edu>
818 2005-01-31 Fernando Perez <fperez@colorado.edu>
812
819
813 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
820 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
814 Itpl.itpl() to make the code more robust against psyco
821 Itpl.itpl() to make the code more robust against psyco
815 optimizations.
822 optimizations.
816
823
817 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
824 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
818 of causing an exception. Quicker, cleaner.
825 of causing an exception. Quicker, cleaner.
819
826
820 2005-01-28 Fernando Perez <fperez@colorado.edu>
827 2005-01-28 Fernando Perez <fperez@colorado.edu>
821
828
822 * scripts/ipython_win_post_install.py (install): hardcode
829 * scripts/ipython_win_post_install.py (install): hardcode
823 sys.prefix+'python.exe' as the executable path. It turns out that
830 sys.prefix+'python.exe' as the executable path. It turns out that
824 during the post-installation run, sys.executable resolves to the
831 during the post-installation run, sys.executable resolves to the
825 name of the binary installer! I should report this as a distutils
832 name of the binary installer! I should report this as a distutils
826 bug, I think. I updated the .10 release with this tiny fix, to
833 bug, I think. I updated the .10 release with this tiny fix, to
827 avoid annoying the lists further.
834 avoid annoying the lists further.
828
835
829 2005-01-27 *** Released version 0.6.10
836 2005-01-27 *** Released version 0.6.10
830
837
831 2005-01-27 Fernando Perez <fperez@colorado.edu>
838 2005-01-27 Fernando Perez <fperez@colorado.edu>
832
839
833 * IPython/numutils.py (norm): Added 'inf' as optional name for
840 * IPython/numutils.py (norm): Added 'inf' as optional name for
834 L-infinity norm, included references to mathworld.com for vector
841 L-infinity norm, included references to mathworld.com for vector
835 norm definitions.
842 norm definitions.
836 (amin/amax): added amin/amax for array min/max. Similar to what
843 (amin/amax): added amin/amax for array min/max. Similar to what
837 pylab ships with after the recent reorganization of names.
844 pylab ships with after the recent reorganization of names.
838 (spike/spike_odd): removed deprecated spike/spike_odd functions.
845 (spike/spike_odd): removed deprecated spike/spike_odd functions.
839
846
840 * ipython.el: committed Alex's recent fixes and improvements.
847 * ipython.el: committed Alex's recent fixes and improvements.
841 Tested with python-mode from CVS, and it looks excellent. Since
848 Tested with python-mode from CVS, and it looks excellent. Since
842 python-mode hasn't released anything in a while, I'm temporarily
849 python-mode hasn't released anything in a while, I'm temporarily
843 putting a copy of today's CVS (v 4.70) of python-mode in:
850 putting a copy of today's CVS (v 4.70) of python-mode in:
844 http://ipython.scipy.org/tmp/python-mode.el
851 http://ipython.scipy.org/tmp/python-mode.el
845
852
846 * scripts/ipython_win_post_install.py (install): Win32 fix to use
853 * scripts/ipython_win_post_install.py (install): Win32 fix to use
847 sys.executable for the executable name, instead of assuming it's
854 sys.executable for the executable name, instead of assuming it's
848 called 'python.exe' (the post-installer would have produced broken
855 called 'python.exe' (the post-installer would have produced broken
849 setups on systems with a differently named python binary).
856 setups on systems with a differently named python binary).
850
857
851 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
858 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
852 references to os.linesep, to make the code more
859 references to os.linesep, to make the code more
853 platform-independent. This is also part of the win32 coloring
860 platform-independent. This is also part of the win32 coloring
854 fixes.
861 fixes.
855
862
856 * IPython/genutils.py (page_dumb): Remove attempts to chop long
863 * IPython/genutils.py (page_dumb): Remove attempts to chop long
857 lines, which actually cause coloring bugs because the length of
864 lines, which actually cause coloring bugs because the length of
858 the line is very difficult to correctly compute with embedded
865 the line is very difficult to correctly compute with embedded
859 escapes. This was the source of all the coloring problems under
866 escapes. This was the source of all the coloring problems under
860 Win32. I think that _finally_, Win32 users have a properly
867 Win32. I think that _finally_, Win32 users have a properly
861 working ipython in all respects. This would never have happened
868 working ipython in all respects. This would never have happened
862 if not for Gary Bishop and Viktor Ransmayr's great help and work.
869 if not for Gary Bishop and Viktor Ransmayr's great help and work.
863
870
864 2005-01-26 *** Released version 0.6.9
871 2005-01-26 *** Released version 0.6.9
865
872
866 2005-01-25 Fernando Perez <fperez@colorado.edu>
873 2005-01-25 Fernando Perez <fperez@colorado.edu>
867
874
868 * setup.py: finally, we have a true Windows installer, thanks to
875 * setup.py: finally, we have a true Windows installer, thanks to
869 the excellent work of Viktor Ransmayr
876 the excellent work of Viktor Ransmayr
870 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
877 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
871 Windows users. The setup routine is quite a bit cleaner thanks to
878 Windows users. The setup routine is quite a bit cleaner thanks to
872 this, and the post-install script uses the proper functions to
879 this, and the post-install script uses the proper functions to
873 allow a clean de-installation using the standard Windows Control
880 allow a clean de-installation using the standard Windows Control
874 Panel.
881 Panel.
875
882
876 * IPython/genutils.py (get_home_dir): changed to use the $HOME
883 * IPython/genutils.py (get_home_dir): changed to use the $HOME
877 environment variable under all OSes (including win32) if
884 environment variable under all OSes (including win32) if
878 available. This will give consistency to win32 users who have set
885 available. This will give consistency to win32 users who have set
879 this variable for any reason. If os.environ['HOME'] fails, the
886 this variable for any reason. If os.environ['HOME'] fails, the
880 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
887 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
881
888
882 2005-01-24 Fernando Perez <fperez@colorado.edu>
889 2005-01-24 Fernando Perez <fperez@colorado.edu>
883
890
884 * IPython/numutils.py (empty_like): add empty_like(), similar to
891 * IPython/numutils.py (empty_like): add empty_like(), similar to
885 zeros_like() but taking advantage of the new empty() Numeric routine.
892 zeros_like() but taking advantage of the new empty() Numeric routine.
886
893
887 2005-01-23 *** Released version 0.6.8
894 2005-01-23 *** Released version 0.6.8
888
895
889 2005-01-22 Fernando Perez <fperez@colorado.edu>
896 2005-01-22 Fernando Perez <fperez@colorado.edu>
890
897
891 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
898 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
892 automatic show() calls. After discussing things with JDH, it
899 automatic show() calls. After discussing things with JDH, it
893 turns out there are too many corner cases where this can go wrong.
900 turns out there are too many corner cases where this can go wrong.
894 It's best not to try to be 'too smart', and simply have ipython
901 It's best not to try to be 'too smart', and simply have ipython
895 reproduce as much as possible the default behavior of a normal
902 reproduce as much as possible the default behavior of a normal
896 python shell.
903 python shell.
897
904
898 * IPython/iplib.py (InteractiveShell.__init__): Modified the
905 * IPython/iplib.py (InteractiveShell.__init__): Modified the
899 line-splitting regexp and _prefilter() to avoid calling getattr()
906 line-splitting regexp and _prefilter() to avoid calling getattr()
900 on assignments. This closes
907 on assignments. This closes
901 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
908 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
902 readline uses getattr(), so a simple <TAB> keypress is still
909 readline uses getattr(), so a simple <TAB> keypress is still
903 enough to trigger getattr() calls on an object.
910 enough to trigger getattr() calls on an object.
904
911
905 2005-01-21 Fernando Perez <fperez@colorado.edu>
912 2005-01-21 Fernando Perez <fperez@colorado.edu>
906
913
907 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
914 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
908 docstring under pylab so it doesn't mask the original.
915 docstring under pylab so it doesn't mask the original.
909
916
910 2005-01-21 *** Released version 0.6.7
917 2005-01-21 *** Released version 0.6.7
911
918
912 2005-01-21 Fernando Perez <fperez@colorado.edu>
919 2005-01-21 Fernando Perez <fperez@colorado.edu>
913
920
914 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
921 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
915 signal handling for win32 users in multithreaded mode.
922 signal handling for win32 users in multithreaded mode.
916
923
917 2005-01-17 Fernando Perez <fperez@colorado.edu>
924 2005-01-17 Fernando Perez <fperez@colorado.edu>
918
925
919 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
926 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
920 instances with no __init__. After a crash report by Norbert Nemec
927 instances with no __init__. After a crash report by Norbert Nemec
921 <Norbert-AT-nemec-online.de>.
928 <Norbert-AT-nemec-online.de>.
922
929
923 2005-01-14 Fernando Perez <fperez@colorado.edu>
930 2005-01-14 Fernando Perez <fperez@colorado.edu>
924
931
925 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
932 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
926 names for verbose exceptions, when multiple dotted names and the
933 names for verbose exceptions, when multiple dotted names and the
927 'parent' object were present on the same line.
934 'parent' object were present on the same line.
928
935
929 2005-01-11 Fernando Perez <fperez@colorado.edu>
936 2005-01-11 Fernando Perez <fperez@colorado.edu>
930
937
931 * IPython/genutils.py (flag_calls): new utility to trap and flag
938 * IPython/genutils.py (flag_calls): new utility to trap and flag
932 calls in functions. I need it to clean up matplotlib support.
939 calls in functions. I need it to clean up matplotlib support.
933 Also removed some deprecated code in genutils.
940 Also removed some deprecated code in genutils.
934
941
935 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
942 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
936 that matplotlib scripts called with %run, which don't call show()
943 that matplotlib scripts called with %run, which don't call show()
937 themselves, still have their plotting windows open.
944 themselves, still have their plotting windows open.
938
945
939 2005-01-05 Fernando Perez <fperez@colorado.edu>
946 2005-01-05 Fernando Perez <fperez@colorado.edu>
940
947
941 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
948 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
942 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
949 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
943
950
944 2004-12-19 Fernando Perez <fperez@colorado.edu>
951 2004-12-19 Fernando Perez <fperez@colorado.edu>
945
952
946 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
953 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
947 parent_runcode, which was an eyesore. The same result can be
954 parent_runcode, which was an eyesore. The same result can be
948 obtained with Python's regular superclass mechanisms.
955 obtained with Python's regular superclass mechanisms.
949
956
950 2004-12-17 Fernando Perez <fperez@colorado.edu>
957 2004-12-17 Fernando Perez <fperez@colorado.edu>
951
958
952 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
959 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
953 reported by Prabhu.
960 reported by Prabhu.
954 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
961 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
955 sys.stderr) instead of explicitly calling sys.stderr. This helps
962 sys.stderr) instead of explicitly calling sys.stderr. This helps
956 maintain our I/O abstractions clean, for future GUI embeddings.
963 maintain our I/O abstractions clean, for future GUI embeddings.
957
964
958 * IPython/genutils.py (info): added new utility for sys.stderr
965 * IPython/genutils.py (info): added new utility for sys.stderr
959 unified info message handling (thin wrapper around warn()).
966 unified info message handling (thin wrapper around warn()).
960
967
961 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
968 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
962 composite (dotted) names on verbose exceptions.
969 composite (dotted) names on verbose exceptions.
963 (VerboseTB.nullrepr): harden against another kind of errors which
970 (VerboseTB.nullrepr): harden against another kind of errors which
964 Python's inspect module can trigger, and which were crashing
971 Python's inspect module can trigger, and which were crashing
965 IPython. Thanks to a report by Marco Lombardi
972 IPython. Thanks to a report by Marco Lombardi
966 <mlombard-AT-ma010192.hq.eso.org>.
973 <mlombard-AT-ma010192.hq.eso.org>.
967
974
968 2004-12-13 *** Released version 0.6.6
975 2004-12-13 *** Released version 0.6.6
969
976
970 2004-12-12 Fernando Perez <fperez@colorado.edu>
977 2004-12-12 Fernando Perez <fperez@colorado.edu>
971
978
972 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
979 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
973 generated by pygtk upon initialization if it was built without
980 generated by pygtk upon initialization if it was built without
974 threads (for matplotlib users). After a crash reported by
981 threads (for matplotlib users). After a crash reported by
975 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
982 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
976
983
977 * IPython/ipmaker.py (make_IPython): fix small bug in the
984 * IPython/ipmaker.py (make_IPython): fix small bug in the
978 import_some parameter for multiple imports.
985 import_some parameter for multiple imports.
979
986
980 * IPython/iplib.py (ipmagic): simplified the interface of
987 * IPython/iplib.py (ipmagic): simplified the interface of
981 ipmagic() to take a single string argument, just as it would be
988 ipmagic() to take a single string argument, just as it would be
982 typed at the IPython cmd line.
989 typed at the IPython cmd line.
983 (ipalias): Added new ipalias() with an interface identical to
990 (ipalias): Added new ipalias() with an interface identical to
984 ipmagic(). This completes exposing a pure python interface to the
991 ipmagic(). This completes exposing a pure python interface to the
985 alias and magic system, which can be used in loops or more complex
992 alias and magic system, which can be used in loops or more complex
986 code where IPython's automatic line mangling is not active.
993 code where IPython's automatic line mangling is not active.
987
994
988 * IPython/genutils.py (timing): changed interface of timing to
995 * IPython/genutils.py (timing): changed interface of timing to
989 simply run code once, which is the most common case. timings()
996 simply run code once, which is the most common case. timings()
990 remains unchanged, for the cases where you want multiple runs.
997 remains unchanged, for the cases where you want multiple runs.
991
998
992 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
999 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
993 bug where Python2.2 crashes with exec'ing code which does not end
1000 bug where Python2.2 crashes with exec'ing code which does not end
994 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1001 in a single newline. Python 2.3 is OK, so I hadn't noticed this
995 before.
1002 before.
996
1003
997 2004-12-10 Fernando Perez <fperez@colorado.edu>
1004 2004-12-10 Fernando Perez <fperez@colorado.edu>
998
1005
999 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1006 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1000 -t to -T, to accomodate the new -t flag in %run (the %run and
1007 -t to -T, to accomodate the new -t flag in %run (the %run and
1001 %prun options are kind of intermixed, and it's not easy to change
1008 %prun options are kind of intermixed, and it's not easy to change
1002 this with the limitations of python's getopt).
1009 this with the limitations of python's getopt).
1003
1010
1004 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1011 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1005 the execution of scripts. It's not as fine-tuned as timeit.py,
1012 the execution of scripts. It's not as fine-tuned as timeit.py,
1006 but it works from inside ipython (and under 2.2, which lacks
1013 but it works from inside ipython (and under 2.2, which lacks
1007 timeit.py). Optionally a number of runs > 1 can be given for
1014 timeit.py). Optionally a number of runs > 1 can be given for
1008 timing very short-running code.
1015 timing very short-running code.
1009
1016
1010 * IPython/genutils.py (uniq_stable): new routine which returns a
1017 * IPython/genutils.py (uniq_stable): new routine which returns a
1011 list of unique elements in any iterable, but in stable order of
1018 list of unique elements in any iterable, but in stable order of
1012 appearance. I needed this for the ultraTB fixes, and it's a handy
1019 appearance. I needed this for the ultraTB fixes, and it's a handy
1013 utility.
1020 utility.
1014
1021
1015 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1022 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1016 dotted names in Verbose exceptions. This had been broken since
1023 dotted names in Verbose exceptions. This had been broken since
1017 the very start, now x.y will properly be printed in a Verbose
1024 the very start, now x.y will properly be printed in a Verbose
1018 traceback, instead of x being shown and y appearing always as an
1025 traceback, instead of x being shown and y appearing always as an
1019 'undefined global'. Getting this to work was a bit tricky,
1026 'undefined global'. Getting this to work was a bit tricky,
1020 because by default python tokenizers are stateless. Saved by
1027 because by default python tokenizers are stateless. Saved by
1021 python's ability to easily add a bit of state to an arbitrary
1028 python's ability to easily add a bit of state to an arbitrary
1022 function (without needing to build a full-blown callable object).
1029 function (without needing to build a full-blown callable object).
1023
1030
1024 Also big cleanup of this code, which had horrendous runtime
1031 Also big cleanup of this code, which had horrendous runtime
1025 lookups of zillions of attributes for colorization. Moved all
1032 lookups of zillions of attributes for colorization. Moved all
1026 this code into a few templates, which make it cleaner and quicker.
1033 this code into a few templates, which make it cleaner and quicker.
1027
1034
1028 Printout quality was also improved for Verbose exceptions: one
1035 Printout quality was also improved for Verbose exceptions: one
1029 variable per line, and memory addresses are printed (this can be
1036 variable per line, and memory addresses are printed (this can be
1030 quite handy in nasty debugging situations, which is what Verbose
1037 quite handy in nasty debugging situations, which is what Verbose
1031 is for).
1038 is for).
1032
1039
1033 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1040 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1034 the command line as scripts to be loaded by embedded instances.
1041 the command line as scripts to be loaded by embedded instances.
1035 Doing so has the potential for an infinite recursion if there are
1042 Doing so has the potential for an infinite recursion if there are
1036 exceptions thrown in the process. This fixes a strange crash
1043 exceptions thrown in the process. This fixes a strange crash
1037 reported by Philippe MULLER <muller-AT-irit.fr>.
1044 reported by Philippe MULLER <muller-AT-irit.fr>.
1038
1045
1039 2004-12-09 Fernando Perez <fperez@colorado.edu>
1046 2004-12-09 Fernando Perez <fperez@colorado.edu>
1040
1047
1041 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1048 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1042 to reflect new names in matplotlib, which now expose the
1049 to reflect new names in matplotlib, which now expose the
1043 matlab-compatible interface via a pylab module instead of the
1050 matlab-compatible interface via a pylab module instead of the
1044 'matlab' name. The new code is backwards compatible, so users of
1051 'matlab' name. The new code is backwards compatible, so users of
1045 all matplotlib versions are OK. Patch by J. Hunter.
1052 all matplotlib versions are OK. Patch by J. Hunter.
1046
1053
1047 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1054 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1048 of __init__ docstrings for instances (class docstrings are already
1055 of __init__ docstrings for instances (class docstrings are already
1049 automatically printed). Instances with customized docstrings
1056 automatically printed). Instances with customized docstrings
1050 (indep. of the class) are also recognized and all 3 separate
1057 (indep. of the class) are also recognized and all 3 separate
1051 docstrings are printed (instance, class, constructor). After some
1058 docstrings are printed (instance, class, constructor). After some
1052 comments/suggestions by J. Hunter.
1059 comments/suggestions by J. Hunter.
1053
1060
1054 2004-12-05 Fernando Perez <fperez@colorado.edu>
1061 2004-12-05 Fernando Perez <fperez@colorado.edu>
1055
1062
1056 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1063 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1057 warnings when tab-completion fails and triggers an exception.
1064 warnings when tab-completion fails and triggers an exception.
1058
1065
1059 2004-12-03 Fernando Perez <fperez@colorado.edu>
1066 2004-12-03 Fernando Perez <fperez@colorado.edu>
1060
1067
1061 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1068 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1062 be triggered when using 'run -p'. An incorrect option flag was
1069 be triggered when using 'run -p'. An incorrect option flag was
1063 being set ('d' instead of 'D').
1070 being set ('d' instead of 'D').
1064 (manpage): fix missing escaped \- sign.
1071 (manpage): fix missing escaped \- sign.
1065
1072
1066 2004-11-30 *** Released version 0.6.5
1073 2004-11-30 *** Released version 0.6.5
1067
1074
1068 2004-11-30 Fernando Perez <fperez@colorado.edu>
1075 2004-11-30 Fernando Perez <fperez@colorado.edu>
1069
1076
1070 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1077 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1071 setting with -d option.
1078 setting with -d option.
1072
1079
1073 * setup.py (docfiles): Fix problem where the doc glob I was using
1080 * setup.py (docfiles): Fix problem where the doc glob I was using
1074 was COMPLETELY BROKEN. It was giving the right files by pure
1081 was COMPLETELY BROKEN. It was giving the right files by pure
1075 accident, but failed once I tried to include ipython.el. Note:
1082 accident, but failed once I tried to include ipython.el. Note:
1076 glob() does NOT allow you to do exclusion on multiple endings!
1083 glob() does NOT allow you to do exclusion on multiple endings!
1077
1084
1078 2004-11-29 Fernando Perez <fperez@colorado.edu>
1085 2004-11-29 Fernando Perez <fperez@colorado.edu>
1079
1086
1080 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1087 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1081 the manpage as the source. Better formatting & consistency.
1088 the manpage as the source. Better formatting & consistency.
1082
1089
1083 * IPython/Magic.py (magic_run): Added new -d option, to run
1090 * IPython/Magic.py (magic_run): Added new -d option, to run
1084 scripts under the control of the python pdb debugger. Note that
1091 scripts under the control of the python pdb debugger. Note that
1085 this required changing the %prun option -d to -D, to avoid a clash
1092 this required changing the %prun option -d to -D, to avoid a clash
1086 (since %run must pass options to %prun, and getopt is too dumb to
1093 (since %run must pass options to %prun, and getopt is too dumb to
1087 handle options with string values with embedded spaces). Thanks
1094 handle options with string values with embedded spaces). Thanks
1088 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1095 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1089 (magic_who_ls): added type matching to %who and %whos, so that one
1096 (magic_who_ls): added type matching to %who and %whos, so that one
1090 can filter their output to only include variables of certain
1097 can filter their output to only include variables of certain
1091 types. Another suggestion by Matthew.
1098 types. Another suggestion by Matthew.
1092 (magic_whos): Added memory summaries in kb and Mb for arrays.
1099 (magic_whos): Added memory summaries in kb and Mb for arrays.
1093 (magic_who): Improve formatting (break lines every 9 vars).
1100 (magic_who): Improve formatting (break lines every 9 vars).
1094
1101
1095 2004-11-28 Fernando Perez <fperez@colorado.edu>
1102 2004-11-28 Fernando Perez <fperez@colorado.edu>
1096
1103
1097 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1104 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1098 cache when empty lines were present.
1105 cache when empty lines were present.
1099
1106
1100 2004-11-24 Fernando Perez <fperez@colorado.edu>
1107 2004-11-24 Fernando Perez <fperez@colorado.edu>
1101
1108
1102 * IPython/usage.py (__doc__): document the re-activated threading
1109 * IPython/usage.py (__doc__): document the re-activated threading
1103 options for WX and GTK.
1110 options for WX and GTK.
1104
1111
1105 2004-11-23 Fernando Perez <fperez@colorado.edu>
1112 2004-11-23 Fernando Perez <fperez@colorado.edu>
1106
1113
1107 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1114 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1108 the -wthread and -gthread options, along with a new -tk one to try
1115 the -wthread and -gthread options, along with a new -tk one to try
1109 and coordinate Tk threading with wx/gtk. The tk support is very
1116 and coordinate Tk threading with wx/gtk. The tk support is very
1110 platform dependent, since it seems to require Tcl and Tk to be
1117 platform dependent, since it seems to require Tcl and Tk to be
1111 built with threads (Fedora1/2 appears NOT to have it, but in
1118 built with threads (Fedora1/2 appears NOT to have it, but in
1112 Prabhu's Debian boxes it works OK). But even with some Tk
1119 Prabhu's Debian boxes it works OK). But even with some Tk
1113 limitations, this is a great improvement.
1120 limitations, this is a great improvement.
1114
1121
1115 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1122 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1116 info in user prompts. Patch by Prabhu.
1123 info in user prompts. Patch by Prabhu.
1117
1124
1118 2004-11-18 Fernando Perez <fperez@colorado.edu>
1125 2004-11-18 Fernando Perez <fperez@colorado.edu>
1119
1126
1120 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1127 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1121 EOFErrors and bail, to avoid infinite loops if a non-terminating
1128 EOFErrors and bail, to avoid infinite loops if a non-terminating
1122 file is fed into ipython. Patch submitted in issue 19 by user,
1129 file is fed into ipython. Patch submitted in issue 19 by user,
1123 many thanks.
1130 many thanks.
1124
1131
1125 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1132 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1126 autoquote/parens in continuation prompts, which can cause lots of
1133 autoquote/parens in continuation prompts, which can cause lots of
1127 problems. Closes roundup issue 20.
1134 problems. Closes roundup issue 20.
1128
1135
1129 2004-11-17 Fernando Perez <fperez@colorado.edu>
1136 2004-11-17 Fernando Perez <fperez@colorado.edu>
1130
1137
1131 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1138 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1132 reported as debian bug #280505. I'm not sure my local changelog
1139 reported as debian bug #280505. I'm not sure my local changelog
1133 entry has the proper debian format (Jack?).
1140 entry has the proper debian format (Jack?).
1134
1141
1135 2004-11-08 *** Released version 0.6.4
1142 2004-11-08 *** Released version 0.6.4
1136
1143
1137 2004-11-08 Fernando Perez <fperez@colorado.edu>
1144 2004-11-08 Fernando Perez <fperez@colorado.edu>
1138
1145
1139 * IPython/iplib.py (init_readline): Fix exit message for Windows
1146 * IPython/iplib.py (init_readline): Fix exit message for Windows
1140 when readline is active. Thanks to a report by Eric Jones
1147 when readline is active. Thanks to a report by Eric Jones
1141 <eric-AT-enthought.com>.
1148 <eric-AT-enthought.com>.
1142
1149
1143 2004-11-07 Fernando Perez <fperez@colorado.edu>
1150 2004-11-07 Fernando Perez <fperez@colorado.edu>
1144
1151
1145 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1152 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1146 sometimes seen by win2k/cygwin users.
1153 sometimes seen by win2k/cygwin users.
1147
1154
1148 2004-11-06 Fernando Perez <fperez@colorado.edu>
1155 2004-11-06 Fernando Perez <fperez@colorado.edu>
1149
1156
1150 * IPython/iplib.py (interact): Change the handling of %Exit from
1157 * IPython/iplib.py (interact): Change the handling of %Exit from
1151 trying to propagate a SystemExit to an internal ipython flag.
1158 trying to propagate a SystemExit to an internal ipython flag.
1152 This is less elegant than using Python's exception mechanism, but
1159 This is less elegant than using Python's exception mechanism, but
1153 I can't get that to work reliably with threads, so under -pylab
1160 I can't get that to work reliably with threads, so under -pylab
1154 %Exit was hanging IPython. Cross-thread exception handling is
1161 %Exit was hanging IPython. Cross-thread exception handling is
1155 really a bitch. Thaks to a bug report by Stephen Walton
1162 really a bitch. Thaks to a bug report by Stephen Walton
1156 <stephen.walton-AT-csun.edu>.
1163 <stephen.walton-AT-csun.edu>.
1157
1164
1158 2004-11-04 Fernando Perez <fperez@colorado.edu>
1165 2004-11-04 Fernando Perez <fperez@colorado.edu>
1159
1166
1160 * IPython/iplib.py (raw_input_original): store a pointer to the
1167 * IPython/iplib.py (raw_input_original): store a pointer to the
1161 true raw_input to harden against code which can modify it
1168 true raw_input to harden against code which can modify it
1162 (wx.py.PyShell does this and would otherwise crash ipython).
1169 (wx.py.PyShell does this and would otherwise crash ipython).
1163 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1170 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1164
1171
1165 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1172 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1166 Ctrl-C problem, which does not mess up the input line.
1173 Ctrl-C problem, which does not mess up the input line.
1167
1174
1168 2004-11-03 Fernando Perez <fperez@colorado.edu>
1175 2004-11-03 Fernando Perez <fperez@colorado.edu>
1169
1176
1170 * IPython/Release.py: Changed licensing to BSD, in all files.
1177 * IPython/Release.py: Changed licensing to BSD, in all files.
1171 (name): lowercase name for tarball/RPM release.
1178 (name): lowercase name for tarball/RPM release.
1172
1179
1173 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1180 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1174 use throughout ipython.
1181 use throughout ipython.
1175
1182
1176 * IPython/Magic.py (Magic._ofind): Switch to using the new
1183 * IPython/Magic.py (Magic._ofind): Switch to using the new
1177 OInspect.getdoc() function.
1184 OInspect.getdoc() function.
1178
1185
1179 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1186 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1180 of the line currently being canceled via Ctrl-C. It's extremely
1187 of the line currently being canceled via Ctrl-C. It's extremely
1181 ugly, but I don't know how to do it better (the problem is one of
1188 ugly, but I don't know how to do it better (the problem is one of
1182 handling cross-thread exceptions).
1189 handling cross-thread exceptions).
1183
1190
1184 2004-10-28 Fernando Perez <fperez@colorado.edu>
1191 2004-10-28 Fernando Perez <fperez@colorado.edu>
1185
1192
1186 * IPython/Shell.py (signal_handler): add signal handlers to trap
1193 * IPython/Shell.py (signal_handler): add signal handlers to trap
1187 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1194 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1188 report by Francesc Alted.
1195 report by Francesc Alted.
1189
1196
1190 2004-10-21 Fernando Perez <fperez@colorado.edu>
1197 2004-10-21 Fernando Perez <fperez@colorado.edu>
1191
1198
1192 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1199 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1193 to % for pysh syntax extensions.
1200 to % for pysh syntax extensions.
1194
1201
1195 2004-10-09 Fernando Perez <fperez@colorado.edu>
1202 2004-10-09 Fernando Perez <fperez@colorado.edu>
1196
1203
1197 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1204 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1198 arrays to print a more useful summary, without calling str(arr).
1205 arrays to print a more useful summary, without calling str(arr).
1199 This avoids the problem of extremely lengthy computations which
1206 This avoids the problem of extremely lengthy computations which
1200 occur if arr is large, and appear to the user as a system lockup
1207 occur if arr is large, and appear to the user as a system lockup
1201 with 100% cpu activity. After a suggestion by Kristian Sandberg
1208 with 100% cpu activity. After a suggestion by Kristian Sandberg
1202 <Kristian.Sandberg@colorado.edu>.
1209 <Kristian.Sandberg@colorado.edu>.
1203 (Magic.__init__): fix bug in global magic escapes not being
1210 (Magic.__init__): fix bug in global magic escapes not being
1204 correctly set.
1211 correctly set.
1205
1212
1206 2004-10-08 Fernando Perez <fperez@colorado.edu>
1213 2004-10-08 Fernando Perez <fperez@colorado.edu>
1207
1214
1208 * IPython/Magic.py (__license__): change to absolute imports of
1215 * IPython/Magic.py (__license__): change to absolute imports of
1209 ipython's own internal packages, to start adapting to the absolute
1216 ipython's own internal packages, to start adapting to the absolute
1210 import requirement of PEP-328.
1217 import requirement of PEP-328.
1211
1218
1212 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1219 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1213 files, and standardize author/license marks through the Release
1220 files, and standardize author/license marks through the Release
1214 module instead of having per/file stuff (except for files with
1221 module instead of having per/file stuff (except for files with
1215 particular licenses, like the MIT/PSF-licensed codes).
1222 particular licenses, like the MIT/PSF-licensed codes).
1216
1223
1217 * IPython/Debugger.py: remove dead code for python 2.1
1224 * IPython/Debugger.py: remove dead code for python 2.1
1218
1225
1219 2004-10-04 Fernando Perez <fperez@colorado.edu>
1226 2004-10-04 Fernando Perez <fperez@colorado.edu>
1220
1227
1221 * IPython/iplib.py (ipmagic): New function for accessing magics
1228 * IPython/iplib.py (ipmagic): New function for accessing magics
1222 via a normal python function call.
1229 via a normal python function call.
1223
1230
1224 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1231 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1225 from '@' to '%', to accomodate the new @decorator syntax of python
1232 from '@' to '%', to accomodate the new @decorator syntax of python
1226 2.4.
1233 2.4.
1227
1234
1228 2004-09-29 Fernando Perez <fperez@colorado.edu>
1235 2004-09-29 Fernando Perez <fperez@colorado.edu>
1229
1236
1230 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1237 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1231 matplotlib.use to prevent running scripts which try to switch
1238 matplotlib.use to prevent running scripts which try to switch
1232 interactive backends from within ipython. This will just crash
1239 interactive backends from within ipython. This will just crash
1233 the python interpreter, so we can't allow it (but a detailed error
1240 the python interpreter, so we can't allow it (but a detailed error
1234 is given to the user).
1241 is given to the user).
1235
1242
1236 2004-09-28 Fernando Perez <fperez@colorado.edu>
1243 2004-09-28 Fernando Perez <fperez@colorado.edu>
1237
1244
1238 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1245 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1239 matplotlib-related fixes so that using @run with non-matplotlib
1246 matplotlib-related fixes so that using @run with non-matplotlib
1240 scripts doesn't pop up spurious plot windows. This requires
1247 scripts doesn't pop up spurious plot windows. This requires
1241 matplotlib >= 0.63, where I had to make some changes as well.
1248 matplotlib >= 0.63, where I had to make some changes as well.
1242
1249
1243 * IPython/ipmaker.py (make_IPython): update version requirement to
1250 * IPython/ipmaker.py (make_IPython): update version requirement to
1244 python 2.2.
1251 python 2.2.
1245
1252
1246 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1253 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1247 banner arg for embedded customization.
1254 banner arg for embedded customization.
1248
1255
1249 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1256 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1250 explicit uses of __IP as the IPython's instance name. Now things
1257 explicit uses of __IP as the IPython's instance name. Now things
1251 are properly handled via the shell.name value. The actual code
1258 are properly handled via the shell.name value. The actual code
1252 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1259 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1253 is much better than before. I'll clean things completely when the
1260 is much better than before. I'll clean things completely when the
1254 magic stuff gets a real overhaul.
1261 magic stuff gets a real overhaul.
1255
1262
1256 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1263 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1257 minor changes to debian dir.
1264 minor changes to debian dir.
1258
1265
1259 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1266 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1260 pointer to the shell itself in the interactive namespace even when
1267 pointer to the shell itself in the interactive namespace even when
1261 a user-supplied dict is provided. This is needed for embedding
1268 a user-supplied dict is provided. This is needed for embedding
1262 purposes (found by tests with Michel Sanner).
1269 purposes (found by tests with Michel Sanner).
1263
1270
1264 2004-09-27 Fernando Perez <fperez@colorado.edu>
1271 2004-09-27 Fernando Perez <fperez@colorado.edu>
1265
1272
1266 * IPython/UserConfig/ipythonrc: remove []{} from
1273 * IPython/UserConfig/ipythonrc: remove []{} from
1267 readline_remove_delims, so that things like [modname.<TAB> do
1274 readline_remove_delims, so that things like [modname.<TAB> do
1268 proper completion. This disables [].TAB, but that's a less common
1275 proper completion. This disables [].TAB, but that's a less common
1269 case than module names in list comprehensions, for example.
1276 case than module names in list comprehensions, for example.
1270 Thanks to a report by Andrea Riciputi.
1277 Thanks to a report by Andrea Riciputi.
1271
1278
1272 2004-09-09 Fernando Perez <fperez@colorado.edu>
1279 2004-09-09 Fernando Perez <fperez@colorado.edu>
1273
1280
1274 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1281 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1275 blocking problems in win32 and osx. Fix by John.
1282 blocking problems in win32 and osx. Fix by John.
1276
1283
1277 2004-09-08 Fernando Perez <fperez@colorado.edu>
1284 2004-09-08 Fernando Perez <fperez@colorado.edu>
1278
1285
1279 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1286 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1280 for Win32 and OSX. Fix by John Hunter.
1287 for Win32 and OSX. Fix by John Hunter.
1281
1288
1282 2004-08-30 *** Released version 0.6.3
1289 2004-08-30 *** Released version 0.6.3
1283
1290
1284 2004-08-30 Fernando Perez <fperez@colorado.edu>
1291 2004-08-30 Fernando Perez <fperez@colorado.edu>
1285
1292
1286 * setup.py (isfile): Add manpages to list of dependent files to be
1293 * setup.py (isfile): Add manpages to list of dependent files to be
1287 updated.
1294 updated.
1288
1295
1289 2004-08-27 Fernando Perez <fperez@colorado.edu>
1296 2004-08-27 Fernando Perez <fperez@colorado.edu>
1290
1297
1291 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1298 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1292 for now. They don't really work with standalone WX/GTK code
1299 for now. They don't really work with standalone WX/GTK code
1293 (though matplotlib IS working fine with both of those backends).
1300 (though matplotlib IS working fine with both of those backends).
1294 This will neeed much more testing. I disabled most things with
1301 This will neeed much more testing. I disabled most things with
1295 comments, so turning it back on later should be pretty easy.
1302 comments, so turning it back on later should be pretty easy.
1296
1303
1297 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1304 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1298 autocalling of expressions like r'foo', by modifying the line
1305 autocalling of expressions like r'foo', by modifying the line
1299 split regexp. Closes
1306 split regexp. Closes
1300 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1307 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1301 Riley <ipythonbugs-AT-sabi.net>.
1308 Riley <ipythonbugs-AT-sabi.net>.
1302 (InteractiveShell.mainloop): honor --nobanner with banner
1309 (InteractiveShell.mainloop): honor --nobanner with banner
1303 extensions.
1310 extensions.
1304
1311
1305 * IPython/Shell.py: Significant refactoring of all classes, so
1312 * IPython/Shell.py: Significant refactoring of all classes, so
1306 that we can really support ALL matplotlib backends and threading
1313 that we can really support ALL matplotlib backends and threading
1307 models (John spotted a bug with Tk which required this). Now we
1314 models (John spotted a bug with Tk which required this). Now we
1308 should support single-threaded, WX-threads and GTK-threads, both
1315 should support single-threaded, WX-threads and GTK-threads, both
1309 for generic code and for matplotlib.
1316 for generic code and for matplotlib.
1310
1317
1311 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1318 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1312 -pylab, to simplify things for users. Will also remove the pylab
1319 -pylab, to simplify things for users. Will also remove the pylab
1313 profile, since now all of matplotlib configuration is directly
1320 profile, since now all of matplotlib configuration is directly
1314 handled here. This also reduces startup time.
1321 handled here. This also reduces startup time.
1315
1322
1316 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1323 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1317 shell wasn't being correctly called. Also in IPShellWX.
1324 shell wasn't being correctly called. Also in IPShellWX.
1318
1325
1319 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1326 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1320 fine-tune banner.
1327 fine-tune banner.
1321
1328
1322 * IPython/numutils.py (spike): Deprecate these spike functions,
1329 * IPython/numutils.py (spike): Deprecate these spike functions,
1323 delete (long deprecated) gnuplot_exec handler.
1330 delete (long deprecated) gnuplot_exec handler.
1324
1331
1325 2004-08-26 Fernando Perez <fperez@colorado.edu>
1332 2004-08-26 Fernando Perez <fperez@colorado.edu>
1326
1333
1327 * ipython.1: Update for threading options, plus some others which
1334 * ipython.1: Update for threading options, plus some others which
1328 were missing.
1335 were missing.
1329
1336
1330 * IPython/ipmaker.py (__call__): Added -wthread option for
1337 * IPython/ipmaker.py (__call__): Added -wthread option for
1331 wxpython thread handling. Make sure threading options are only
1338 wxpython thread handling. Make sure threading options are only
1332 valid at the command line.
1339 valid at the command line.
1333
1340
1334 * scripts/ipython: moved shell selection into a factory function
1341 * scripts/ipython: moved shell selection into a factory function
1335 in Shell.py, to keep the starter script to a minimum.
1342 in Shell.py, to keep the starter script to a minimum.
1336
1343
1337 2004-08-25 Fernando Perez <fperez@colorado.edu>
1344 2004-08-25 Fernando Perez <fperez@colorado.edu>
1338
1345
1339 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1346 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1340 John. Along with some recent changes he made to matplotlib, the
1347 John. Along with some recent changes he made to matplotlib, the
1341 next versions of both systems should work very well together.
1348 next versions of both systems should work very well together.
1342
1349
1343 2004-08-24 Fernando Perez <fperez@colorado.edu>
1350 2004-08-24 Fernando Perez <fperez@colorado.edu>
1344
1351
1345 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1352 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1346 tried to switch the profiling to using hotshot, but I'm getting
1353 tried to switch the profiling to using hotshot, but I'm getting
1347 strange errors from prof.runctx() there. I may be misreading the
1354 strange errors from prof.runctx() there. I may be misreading the
1348 docs, but it looks weird. For now the profiling code will
1355 docs, but it looks weird. For now the profiling code will
1349 continue to use the standard profiler.
1356 continue to use the standard profiler.
1350
1357
1351 2004-08-23 Fernando Perez <fperez@colorado.edu>
1358 2004-08-23 Fernando Perez <fperez@colorado.edu>
1352
1359
1353 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1360 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1354 threaded shell, by John Hunter. It's not quite ready yet, but
1361 threaded shell, by John Hunter. It's not quite ready yet, but
1355 close.
1362 close.
1356
1363
1357 2004-08-22 Fernando Perez <fperez@colorado.edu>
1364 2004-08-22 Fernando Perez <fperez@colorado.edu>
1358
1365
1359 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1366 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1360 in Magic and ultraTB.
1367 in Magic and ultraTB.
1361
1368
1362 * ipython.1: document threading options in manpage.
1369 * ipython.1: document threading options in manpage.
1363
1370
1364 * scripts/ipython: Changed name of -thread option to -gthread,
1371 * scripts/ipython: Changed name of -thread option to -gthread,
1365 since this is GTK specific. I want to leave the door open for a
1372 since this is GTK specific. I want to leave the door open for a
1366 -wthread option for WX, which will most likely be necessary. This
1373 -wthread option for WX, which will most likely be necessary. This
1367 change affects usage and ipmaker as well.
1374 change affects usage and ipmaker as well.
1368
1375
1369 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1376 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1370 handle the matplotlib shell issues. Code by John Hunter
1377 handle the matplotlib shell issues. Code by John Hunter
1371 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1378 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1372 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1379 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1373 broken (and disabled for end users) for now, but it puts the
1380 broken (and disabled for end users) for now, but it puts the
1374 infrastructure in place.
1381 infrastructure in place.
1375
1382
1376 2004-08-21 Fernando Perez <fperez@colorado.edu>
1383 2004-08-21 Fernando Perez <fperez@colorado.edu>
1377
1384
1378 * ipythonrc-pylab: Add matplotlib support.
1385 * ipythonrc-pylab: Add matplotlib support.
1379
1386
1380 * matplotlib_config.py: new files for matplotlib support, part of
1387 * matplotlib_config.py: new files for matplotlib support, part of
1381 the pylab profile.
1388 the pylab profile.
1382
1389
1383 * IPython/usage.py (__doc__): documented the threading options.
1390 * IPython/usage.py (__doc__): documented the threading options.
1384
1391
1385 2004-08-20 Fernando Perez <fperez@colorado.edu>
1392 2004-08-20 Fernando Perez <fperez@colorado.edu>
1386
1393
1387 * ipython: Modified the main calling routine to handle the -thread
1394 * ipython: Modified the main calling routine to handle the -thread
1388 and -mpthread options. This needs to be done as a top-level hack,
1395 and -mpthread options. This needs to be done as a top-level hack,
1389 because it determines which class to instantiate for IPython
1396 because it determines which class to instantiate for IPython
1390 itself.
1397 itself.
1391
1398
1392 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1399 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1393 classes to support multithreaded GTK operation without blocking,
1400 classes to support multithreaded GTK operation without blocking,
1394 and matplotlib with all backends. This is a lot of still very
1401 and matplotlib with all backends. This is a lot of still very
1395 experimental code, and threads are tricky. So it may still have a
1402 experimental code, and threads are tricky. So it may still have a
1396 few rough edges... This code owes a lot to
1403 few rough edges... This code owes a lot to
1397 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1404 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1398 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1405 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1399 to John Hunter for all the matplotlib work.
1406 to John Hunter for all the matplotlib work.
1400
1407
1401 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1408 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1402 options for gtk thread and matplotlib support.
1409 options for gtk thread and matplotlib support.
1403
1410
1404 2004-08-16 Fernando Perez <fperez@colorado.edu>
1411 2004-08-16 Fernando Perez <fperez@colorado.edu>
1405
1412
1406 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1413 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1407 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1414 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1408 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1415 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1409
1416
1410 2004-08-11 Fernando Perez <fperez@colorado.edu>
1417 2004-08-11 Fernando Perez <fperez@colorado.edu>
1411
1418
1412 * setup.py (isfile): Fix build so documentation gets updated for
1419 * setup.py (isfile): Fix build so documentation gets updated for
1413 rpms (it was only done for .tgz builds).
1420 rpms (it was only done for .tgz builds).
1414
1421
1415 2004-08-10 Fernando Perez <fperez@colorado.edu>
1422 2004-08-10 Fernando Perez <fperez@colorado.edu>
1416
1423
1417 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1424 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1418
1425
1419 * iplib.py : Silence syntax error exceptions in tab-completion.
1426 * iplib.py : Silence syntax error exceptions in tab-completion.
1420
1427
1421 2004-08-05 Fernando Perez <fperez@colorado.edu>
1428 2004-08-05 Fernando Perez <fperez@colorado.edu>
1422
1429
1423 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1430 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1424 'color off' mark for continuation prompts. This was causing long
1431 'color off' mark for continuation prompts. This was causing long
1425 continuation lines to mis-wrap.
1432 continuation lines to mis-wrap.
1426
1433
1427 2004-08-01 Fernando Perez <fperez@colorado.edu>
1434 2004-08-01 Fernando Perez <fperez@colorado.edu>
1428
1435
1429 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1436 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1430 for building ipython to be a parameter. All this is necessary
1437 for building ipython to be a parameter. All this is necessary
1431 right now to have a multithreaded version, but this insane
1438 right now to have a multithreaded version, but this insane
1432 non-design will be cleaned up soon. For now, it's a hack that
1439 non-design will be cleaned up soon. For now, it's a hack that
1433 works.
1440 works.
1434
1441
1435 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1442 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1436 args in various places. No bugs so far, but it's a dangerous
1443 args in various places. No bugs so far, but it's a dangerous
1437 practice.
1444 practice.
1438
1445
1439 2004-07-31 Fernando Perez <fperez@colorado.edu>
1446 2004-07-31 Fernando Perez <fperez@colorado.edu>
1440
1447
1441 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1448 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1442 fix completion of files with dots in their names under most
1449 fix completion of files with dots in their names under most
1443 profiles (pysh was OK because the completion order is different).
1450 profiles (pysh was OK because the completion order is different).
1444
1451
1445 2004-07-27 Fernando Perez <fperez@colorado.edu>
1452 2004-07-27 Fernando Perez <fperez@colorado.edu>
1446
1453
1447 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1454 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1448 keywords manually, b/c the one in keyword.py was removed in python
1455 keywords manually, b/c the one in keyword.py was removed in python
1449 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1456 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1450 This is NOT a bug under python 2.3 and earlier.
1457 This is NOT a bug under python 2.3 and earlier.
1451
1458
1452 2004-07-26 Fernando Perez <fperez@colorado.edu>
1459 2004-07-26 Fernando Perez <fperez@colorado.edu>
1453
1460
1454 * IPython/ultraTB.py (VerboseTB.text): Add another
1461 * IPython/ultraTB.py (VerboseTB.text): Add another
1455 linecache.checkcache() call to try to prevent inspect.py from
1462 linecache.checkcache() call to try to prevent inspect.py from
1456 crashing under python 2.3. I think this fixes
1463 crashing under python 2.3. I think this fixes
1457 http://www.scipy.net/roundup/ipython/issue17.
1464 http://www.scipy.net/roundup/ipython/issue17.
1458
1465
1459 2004-07-26 *** Released version 0.6.2
1466 2004-07-26 *** Released version 0.6.2
1460
1467
1461 2004-07-26 Fernando Perez <fperez@colorado.edu>
1468 2004-07-26 Fernando Perez <fperez@colorado.edu>
1462
1469
1463 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1470 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1464 fail for any number.
1471 fail for any number.
1465 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1472 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1466 empty bookmarks.
1473 empty bookmarks.
1467
1474
1468 2004-07-26 *** Released version 0.6.1
1475 2004-07-26 *** Released version 0.6.1
1469
1476
1470 2004-07-26 Fernando Perez <fperez@colorado.edu>
1477 2004-07-26 Fernando Perez <fperez@colorado.edu>
1471
1478
1472 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1479 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1473
1480
1474 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1481 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1475 escaping '()[]{}' in filenames.
1482 escaping '()[]{}' in filenames.
1476
1483
1477 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1484 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1478 Python 2.2 users who lack a proper shlex.split.
1485 Python 2.2 users who lack a proper shlex.split.
1479
1486
1480 2004-07-19 Fernando Perez <fperez@colorado.edu>
1487 2004-07-19 Fernando Perez <fperez@colorado.edu>
1481
1488
1482 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1489 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1483 for reading readline's init file. I follow the normal chain:
1490 for reading readline's init file. I follow the normal chain:
1484 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1491 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1485 report by Mike Heeter. This closes
1492 report by Mike Heeter. This closes
1486 http://www.scipy.net/roundup/ipython/issue16.
1493 http://www.scipy.net/roundup/ipython/issue16.
1487
1494
1488 2004-07-18 Fernando Perez <fperez@colorado.edu>
1495 2004-07-18 Fernando Perez <fperez@colorado.edu>
1489
1496
1490 * IPython/iplib.py (__init__): Add better handling of '\' under
1497 * IPython/iplib.py (__init__): Add better handling of '\' under
1491 Win32 for filenames. After a patch by Ville.
1498 Win32 for filenames. After a patch by Ville.
1492
1499
1493 2004-07-17 Fernando Perez <fperez@colorado.edu>
1500 2004-07-17 Fernando Perez <fperez@colorado.edu>
1494
1501
1495 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1502 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1496 autocalling would be triggered for 'foo is bar' if foo is
1503 autocalling would be triggered for 'foo is bar' if foo is
1497 callable. I also cleaned up the autocall detection code to use a
1504 callable. I also cleaned up the autocall detection code to use a
1498 regexp, which is faster. Bug reported by Alexander Schmolck.
1505 regexp, which is faster. Bug reported by Alexander Schmolck.
1499
1506
1500 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1507 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1501 '?' in them would confuse the help system. Reported by Alex
1508 '?' in them would confuse the help system. Reported by Alex
1502 Schmolck.
1509 Schmolck.
1503
1510
1504 2004-07-16 Fernando Perez <fperez@colorado.edu>
1511 2004-07-16 Fernando Perez <fperez@colorado.edu>
1505
1512
1506 * IPython/GnuplotInteractive.py (__all__): added plot2.
1513 * IPython/GnuplotInteractive.py (__all__): added plot2.
1507
1514
1508 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1515 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1509 plotting dictionaries, lists or tuples of 1d arrays.
1516 plotting dictionaries, lists or tuples of 1d arrays.
1510
1517
1511 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1518 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1512 optimizations.
1519 optimizations.
1513
1520
1514 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1521 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1515 the information which was there from Janko's original IPP code:
1522 the information which was there from Janko's original IPP code:
1516
1523
1517 03.05.99 20:53 porto.ifm.uni-kiel.de
1524 03.05.99 20:53 porto.ifm.uni-kiel.de
1518 --Started changelog.
1525 --Started changelog.
1519 --make clear do what it say it does
1526 --make clear do what it say it does
1520 --added pretty output of lines from inputcache
1527 --added pretty output of lines from inputcache
1521 --Made Logger a mixin class, simplifies handling of switches
1528 --Made Logger a mixin class, simplifies handling of switches
1522 --Added own completer class. .string<TAB> expands to last history
1529 --Added own completer class. .string<TAB> expands to last history
1523 line which starts with string. The new expansion is also present
1530 line which starts with string. The new expansion is also present
1524 with Ctrl-r from the readline library. But this shows, who this
1531 with Ctrl-r from the readline library. But this shows, who this
1525 can be done for other cases.
1532 can be done for other cases.
1526 --Added convention that all shell functions should accept a
1533 --Added convention that all shell functions should accept a
1527 parameter_string This opens the door for different behaviour for
1534 parameter_string This opens the door for different behaviour for
1528 each function. @cd is a good example of this.
1535 each function. @cd is a good example of this.
1529
1536
1530 04.05.99 12:12 porto.ifm.uni-kiel.de
1537 04.05.99 12:12 porto.ifm.uni-kiel.de
1531 --added logfile rotation
1538 --added logfile rotation
1532 --added new mainloop method which freezes first the namespace
1539 --added new mainloop method which freezes first the namespace
1533
1540
1534 07.05.99 21:24 porto.ifm.uni-kiel.de
1541 07.05.99 21:24 porto.ifm.uni-kiel.de
1535 --added the docreader classes. Now there is a help system.
1542 --added the docreader classes. Now there is a help system.
1536 -This is only a first try. Currently it's not easy to put new
1543 -This is only a first try. Currently it's not easy to put new
1537 stuff in the indices. But this is the way to go. Info would be
1544 stuff in the indices. But this is the way to go. Info would be
1538 better, but HTML is every where and not everybody has an info
1545 better, but HTML is every where and not everybody has an info
1539 system installed and it's not so easy to change html-docs to info.
1546 system installed and it's not so easy to change html-docs to info.
1540 --added global logfile option
1547 --added global logfile option
1541 --there is now a hook for object inspection method pinfo needs to
1548 --there is now a hook for object inspection method pinfo needs to
1542 be provided for this. Can be reached by two '??'.
1549 be provided for this. Can be reached by two '??'.
1543
1550
1544 08.05.99 20:51 porto.ifm.uni-kiel.de
1551 08.05.99 20:51 porto.ifm.uni-kiel.de
1545 --added a README
1552 --added a README
1546 --bug in rc file. Something has changed so functions in the rc
1553 --bug in rc file. Something has changed so functions in the rc
1547 file need to reference the shell and not self. Not clear if it's a
1554 file need to reference the shell and not self. Not clear if it's a
1548 bug or feature.
1555 bug or feature.
1549 --changed rc file for new behavior
1556 --changed rc file for new behavior
1550
1557
1551 2004-07-15 Fernando Perez <fperez@colorado.edu>
1558 2004-07-15 Fernando Perez <fperez@colorado.edu>
1552
1559
1553 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1560 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1554 cache was falling out of sync in bizarre manners when multi-line
1561 cache was falling out of sync in bizarre manners when multi-line
1555 input was present. Minor optimizations and cleanup.
1562 input was present. Minor optimizations and cleanup.
1556
1563
1557 (Logger): Remove old Changelog info for cleanup. This is the
1564 (Logger): Remove old Changelog info for cleanup. This is the
1558 information which was there from Janko's original code:
1565 information which was there from Janko's original code:
1559
1566
1560 Changes to Logger: - made the default log filename a parameter
1567 Changes to Logger: - made the default log filename a parameter
1561
1568
1562 - put a check for lines beginning with !@? in log(). Needed
1569 - put a check for lines beginning with !@? in log(). Needed
1563 (even if the handlers properly log their lines) for mid-session
1570 (even if the handlers properly log their lines) for mid-session
1564 logging activation to work properly. Without this, lines logged
1571 logging activation to work properly. Without this, lines logged
1565 in mid session, which get read from the cache, would end up
1572 in mid session, which get read from the cache, would end up
1566 'bare' (with !@? in the open) in the log. Now they are caught
1573 'bare' (with !@? in the open) in the log. Now they are caught
1567 and prepended with a #.
1574 and prepended with a #.
1568
1575
1569 * IPython/iplib.py (InteractiveShell.init_readline): added check
1576 * IPython/iplib.py (InteractiveShell.init_readline): added check
1570 in case MagicCompleter fails to be defined, so we don't crash.
1577 in case MagicCompleter fails to be defined, so we don't crash.
1571
1578
1572 2004-07-13 Fernando Perez <fperez@colorado.edu>
1579 2004-07-13 Fernando Perez <fperez@colorado.edu>
1573
1580
1574 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1581 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1575 of EPS if the requested filename ends in '.eps'.
1582 of EPS if the requested filename ends in '.eps'.
1576
1583
1577 2004-07-04 Fernando Perez <fperez@colorado.edu>
1584 2004-07-04 Fernando Perez <fperez@colorado.edu>
1578
1585
1579 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1586 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1580 escaping of quotes when calling the shell.
1587 escaping of quotes when calling the shell.
1581
1588
1582 2004-07-02 Fernando Perez <fperez@colorado.edu>
1589 2004-07-02 Fernando Perez <fperez@colorado.edu>
1583
1590
1584 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1591 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1585 gettext not working because we were clobbering '_'. Fixes
1592 gettext not working because we were clobbering '_'. Fixes
1586 http://www.scipy.net/roundup/ipython/issue6.
1593 http://www.scipy.net/roundup/ipython/issue6.
1587
1594
1588 2004-07-01 Fernando Perez <fperez@colorado.edu>
1595 2004-07-01 Fernando Perez <fperez@colorado.edu>
1589
1596
1590 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1597 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1591 into @cd. Patch by Ville.
1598 into @cd. Patch by Ville.
1592
1599
1593 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1600 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1594 new function to store things after ipmaker runs. Patch by Ville.
1601 new function to store things after ipmaker runs. Patch by Ville.
1595 Eventually this will go away once ipmaker is removed and the class
1602 Eventually this will go away once ipmaker is removed and the class
1596 gets cleaned up, but for now it's ok. Key functionality here is
1603 gets cleaned up, but for now it's ok. Key functionality here is
1597 the addition of the persistent storage mechanism, a dict for
1604 the addition of the persistent storage mechanism, a dict for
1598 keeping data across sessions (for now just bookmarks, but more can
1605 keeping data across sessions (for now just bookmarks, but more can
1599 be implemented later).
1606 be implemented later).
1600
1607
1601 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1608 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1602 persistent across sections. Patch by Ville, I modified it
1609 persistent across sections. Patch by Ville, I modified it
1603 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1610 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1604 added a '-l' option to list all bookmarks.
1611 added a '-l' option to list all bookmarks.
1605
1612
1606 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1613 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1607 center for cleanup. Registered with atexit.register(). I moved
1614 center for cleanup. Registered with atexit.register(). I moved
1608 here the old exit_cleanup(). After a patch by Ville.
1615 here the old exit_cleanup(). After a patch by Ville.
1609
1616
1610 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1617 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1611 characters in the hacked shlex_split for python 2.2.
1618 characters in the hacked shlex_split for python 2.2.
1612
1619
1613 * IPython/iplib.py (file_matches): more fixes to filenames with
1620 * IPython/iplib.py (file_matches): more fixes to filenames with
1614 whitespace in them. It's not perfect, but limitations in python's
1621 whitespace in them. It's not perfect, but limitations in python's
1615 readline make it impossible to go further.
1622 readline make it impossible to go further.
1616
1623
1617 2004-06-29 Fernando Perez <fperez@colorado.edu>
1624 2004-06-29 Fernando Perez <fperez@colorado.edu>
1618
1625
1619 * IPython/iplib.py (file_matches): escape whitespace correctly in
1626 * IPython/iplib.py (file_matches): escape whitespace correctly in
1620 filename completions. Bug reported by Ville.
1627 filename completions. Bug reported by Ville.
1621
1628
1622 2004-06-28 Fernando Perez <fperez@colorado.edu>
1629 2004-06-28 Fernando Perez <fperez@colorado.edu>
1623
1630
1624 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1631 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1625 the history file will be called 'history-PROFNAME' (or just
1632 the history file will be called 'history-PROFNAME' (or just
1626 'history' if no profile is loaded). I was getting annoyed at
1633 'history' if no profile is loaded). I was getting annoyed at
1627 getting my Numerical work history clobbered by pysh sessions.
1634 getting my Numerical work history clobbered by pysh sessions.
1628
1635
1629 * IPython/iplib.py (InteractiveShell.__init__): Internal
1636 * IPython/iplib.py (InteractiveShell.__init__): Internal
1630 getoutputerror() function so that we can honor the system_verbose
1637 getoutputerror() function so that we can honor the system_verbose
1631 flag for _all_ system calls. I also added escaping of #
1638 flag for _all_ system calls. I also added escaping of #
1632 characters here to avoid confusing Itpl.
1639 characters here to avoid confusing Itpl.
1633
1640
1634 * IPython/Magic.py (shlex_split): removed call to shell in
1641 * IPython/Magic.py (shlex_split): removed call to shell in
1635 parse_options and replaced it with shlex.split(). The annoying
1642 parse_options and replaced it with shlex.split(). The annoying
1636 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1643 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1637 to backport it from 2.3, with several frail hacks (the shlex
1644 to backport it from 2.3, with several frail hacks (the shlex
1638 module is rather limited in 2.2). Thanks to a suggestion by Ville
1645 module is rather limited in 2.2). Thanks to a suggestion by Ville
1639 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1646 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1640 problem.
1647 problem.
1641
1648
1642 (Magic.magic_system_verbose): new toggle to print the actual
1649 (Magic.magic_system_verbose): new toggle to print the actual
1643 system calls made by ipython. Mainly for debugging purposes.
1650 system calls made by ipython. Mainly for debugging purposes.
1644
1651
1645 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1652 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1646 doesn't support persistence. Reported (and fix suggested) by
1653 doesn't support persistence. Reported (and fix suggested) by
1647 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1654 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1648
1655
1649 2004-06-26 Fernando Perez <fperez@colorado.edu>
1656 2004-06-26 Fernando Perez <fperez@colorado.edu>
1650
1657
1651 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1658 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1652 continue prompts.
1659 continue prompts.
1653
1660
1654 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1661 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1655 function (basically a big docstring) and a few more things here to
1662 function (basically a big docstring) and a few more things here to
1656 speedup startup. pysh.py is now very lightweight. We want because
1663 speedup startup. pysh.py is now very lightweight. We want because
1657 it gets execfile'd, while InterpreterExec gets imported, so
1664 it gets execfile'd, while InterpreterExec gets imported, so
1658 byte-compilation saves time.
1665 byte-compilation saves time.
1659
1666
1660 2004-06-25 Fernando Perez <fperez@colorado.edu>
1667 2004-06-25 Fernando Perez <fperez@colorado.edu>
1661
1668
1662 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1669 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1663 -NUM', which was recently broken.
1670 -NUM', which was recently broken.
1664
1671
1665 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1672 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1666 in multi-line input (but not !!, which doesn't make sense there).
1673 in multi-line input (but not !!, which doesn't make sense there).
1667
1674
1668 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1675 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1669 It's just too useful, and people can turn it off in the less
1676 It's just too useful, and people can turn it off in the less
1670 common cases where it's a problem.
1677 common cases where it's a problem.
1671
1678
1672 2004-06-24 Fernando Perez <fperez@colorado.edu>
1679 2004-06-24 Fernando Perez <fperez@colorado.edu>
1673
1680
1674 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1681 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1675 special syntaxes (like alias calling) is now allied in multi-line
1682 special syntaxes (like alias calling) is now allied in multi-line
1676 input. This is still _very_ experimental, but it's necessary for
1683 input. This is still _very_ experimental, but it's necessary for
1677 efficient shell usage combining python looping syntax with system
1684 efficient shell usage combining python looping syntax with system
1678 calls. For now it's restricted to aliases, I don't think it
1685 calls. For now it's restricted to aliases, I don't think it
1679 really even makes sense to have this for magics.
1686 really even makes sense to have this for magics.
1680
1687
1681 2004-06-23 Fernando Perez <fperez@colorado.edu>
1688 2004-06-23 Fernando Perez <fperez@colorado.edu>
1682
1689
1683 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1690 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1684 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1691 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1685
1692
1686 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1693 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1687 extensions under Windows (after code sent by Gary Bishop). The
1694 extensions under Windows (after code sent by Gary Bishop). The
1688 extensions considered 'executable' are stored in IPython's rc
1695 extensions considered 'executable' are stored in IPython's rc
1689 structure as win_exec_ext.
1696 structure as win_exec_ext.
1690
1697
1691 * IPython/genutils.py (shell): new function, like system() but
1698 * IPython/genutils.py (shell): new function, like system() but
1692 without return value. Very useful for interactive shell work.
1699 without return value. Very useful for interactive shell work.
1693
1700
1694 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1701 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1695 delete aliases.
1702 delete aliases.
1696
1703
1697 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1704 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1698 sure that the alias table doesn't contain python keywords.
1705 sure that the alias table doesn't contain python keywords.
1699
1706
1700 2004-06-21 Fernando Perez <fperez@colorado.edu>
1707 2004-06-21 Fernando Perez <fperez@colorado.edu>
1701
1708
1702 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1709 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1703 non-existent items are found in $PATH. Reported by Thorsten.
1710 non-existent items are found in $PATH. Reported by Thorsten.
1704
1711
1705 2004-06-20 Fernando Perez <fperez@colorado.edu>
1712 2004-06-20 Fernando Perez <fperez@colorado.edu>
1706
1713
1707 * IPython/iplib.py (complete): modified the completer so that the
1714 * IPython/iplib.py (complete): modified the completer so that the
1708 order of priorities can be easily changed at runtime.
1715 order of priorities can be easily changed at runtime.
1709
1716
1710 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1717 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1711 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1718 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1712
1719
1713 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1720 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1714 expand Python variables prepended with $ in all system calls. The
1721 expand Python variables prepended with $ in all system calls. The
1715 same was done to InteractiveShell.handle_shell_escape. Now all
1722 same was done to InteractiveShell.handle_shell_escape. Now all
1716 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1723 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1717 expansion of python variables and expressions according to the
1724 expansion of python variables and expressions according to the
1718 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1725 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1719
1726
1720 Though PEP-215 has been rejected, a similar (but simpler) one
1727 Though PEP-215 has been rejected, a similar (but simpler) one
1721 seems like it will go into Python 2.4, PEP-292 -
1728 seems like it will go into Python 2.4, PEP-292 -
1722 http://www.python.org/peps/pep-0292.html.
1729 http://www.python.org/peps/pep-0292.html.
1723
1730
1724 I'll keep the full syntax of PEP-215, since IPython has since the
1731 I'll keep the full syntax of PEP-215, since IPython has since the
1725 start used Ka-Ping Yee's reference implementation discussed there
1732 start used Ka-Ping Yee's reference implementation discussed there
1726 (Itpl), and I actually like the powerful semantics it offers.
1733 (Itpl), and I actually like the powerful semantics it offers.
1727
1734
1728 In order to access normal shell variables, the $ has to be escaped
1735 In order to access normal shell variables, the $ has to be escaped
1729 via an extra $. For example:
1736 via an extra $. For example:
1730
1737
1731 In [7]: PATH='a python variable'
1738 In [7]: PATH='a python variable'
1732
1739
1733 In [8]: !echo $PATH
1740 In [8]: !echo $PATH
1734 a python variable
1741 a python variable
1735
1742
1736 In [9]: !echo $$PATH
1743 In [9]: !echo $$PATH
1737 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
1744 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
1738
1745
1739 (Magic.parse_options): escape $ so the shell doesn't evaluate
1746 (Magic.parse_options): escape $ so the shell doesn't evaluate
1740 things prematurely.
1747 things prematurely.
1741
1748
1742 * IPython/iplib.py (InteractiveShell.call_alias): added the
1749 * IPython/iplib.py (InteractiveShell.call_alias): added the
1743 ability for aliases to expand python variables via $.
1750 ability for aliases to expand python variables via $.
1744
1751
1745 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
1752 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
1746 system, now there's a @rehash/@rehashx pair of magics. These work
1753 system, now there's a @rehash/@rehashx pair of magics. These work
1747 like the csh rehash command, and can be invoked at any time. They
1754 like the csh rehash command, and can be invoked at any time. They
1748 build a table of aliases to everything in the user's $PATH
1755 build a table of aliases to everything in the user's $PATH
1749 (@rehash uses everything, @rehashx is slower but only adds
1756 (@rehash uses everything, @rehashx is slower but only adds
1750 executable files). With this, the pysh.py-based shell profile can
1757 executable files). With this, the pysh.py-based shell profile can
1751 now simply call rehash upon startup, and full access to all
1758 now simply call rehash upon startup, and full access to all
1752 programs in the user's path is obtained.
1759 programs in the user's path is obtained.
1753
1760
1754 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
1761 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
1755 functionality is now fully in place. I removed the old dynamic
1762 functionality is now fully in place. I removed the old dynamic
1756 code generation based approach, in favor of a much lighter one
1763 code generation based approach, in favor of a much lighter one
1757 based on a simple dict. The advantage is that this allows me to
1764 based on a simple dict. The advantage is that this allows me to
1758 now have thousands of aliases with negligible cost (unthinkable
1765 now have thousands of aliases with negligible cost (unthinkable
1759 with the old system).
1766 with the old system).
1760
1767
1761 2004-06-19 Fernando Perez <fperez@colorado.edu>
1768 2004-06-19 Fernando Perez <fperez@colorado.edu>
1762
1769
1763 * IPython/iplib.py (__init__): extended MagicCompleter class to
1770 * IPython/iplib.py (__init__): extended MagicCompleter class to
1764 also complete (last in priority) on user aliases.
1771 also complete (last in priority) on user aliases.
1765
1772
1766 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
1773 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
1767 call to eval.
1774 call to eval.
1768 (ItplNS.__init__): Added a new class which functions like Itpl,
1775 (ItplNS.__init__): Added a new class which functions like Itpl,
1769 but allows configuring the namespace for the evaluation to occur
1776 but allows configuring the namespace for the evaluation to occur
1770 in.
1777 in.
1771
1778
1772 2004-06-18 Fernando Perez <fperez@colorado.edu>
1779 2004-06-18 Fernando Perez <fperez@colorado.edu>
1773
1780
1774 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
1781 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
1775 better message when 'exit' or 'quit' are typed (a common newbie
1782 better message when 'exit' or 'quit' are typed (a common newbie
1776 confusion).
1783 confusion).
1777
1784
1778 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
1785 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
1779 check for Windows users.
1786 check for Windows users.
1780
1787
1781 * IPython/iplib.py (InteractiveShell.user_setup): removed
1788 * IPython/iplib.py (InteractiveShell.user_setup): removed
1782 disabling of colors for Windows. I'll test at runtime and issue a
1789 disabling of colors for Windows. I'll test at runtime and issue a
1783 warning if Gary's readline isn't found, as to nudge users to
1790 warning if Gary's readline isn't found, as to nudge users to
1784 download it.
1791 download it.
1785
1792
1786 2004-06-16 Fernando Perez <fperez@colorado.edu>
1793 2004-06-16 Fernando Perez <fperez@colorado.edu>
1787
1794
1788 * IPython/genutils.py (Stream.__init__): changed to print errors
1795 * IPython/genutils.py (Stream.__init__): changed to print errors
1789 to sys.stderr. I had a circular dependency here. Now it's
1796 to sys.stderr. I had a circular dependency here. Now it's
1790 possible to run ipython as IDLE's shell (consider this pre-alpha,
1797 possible to run ipython as IDLE's shell (consider this pre-alpha,
1791 since true stdout things end up in the starting terminal instead
1798 since true stdout things end up in the starting terminal instead
1792 of IDLE's out).
1799 of IDLE's out).
1793
1800
1794 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
1801 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
1795 users who haven't # updated their prompt_in2 definitions. Remove
1802 users who haven't # updated their prompt_in2 definitions. Remove
1796 eventually.
1803 eventually.
1797 (multiple_replace): added credit to original ASPN recipe.
1804 (multiple_replace): added credit to original ASPN recipe.
1798
1805
1799 2004-06-15 Fernando Perez <fperez@colorado.edu>
1806 2004-06-15 Fernando Perez <fperez@colorado.edu>
1800
1807
1801 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
1808 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
1802 list of auto-defined aliases.
1809 list of auto-defined aliases.
1803
1810
1804 2004-06-13 Fernando Perez <fperez@colorado.edu>
1811 2004-06-13 Fernando Perez <fperez@colorado.edu>
1805
1812
1806 * setup.py (scriptfiles): Don't trigger win_post_install unless an
1813 * setup.py (scriptfiles): Don't trigger win_post_install unless an
1807 install was really requested (so setup.py can be used for other
1814 install was really requested (so setup.py can be used for other
1808 things under Windows).
1815 things under Windows).
1809
1816
1810 2004-06-10 Fernando Perez <fperez@colorado.edu>
1817 2004-06-10 Fernando Perez <fperez@colorado.edu>
1811
1818
1812 * IPython/Logger.py (Logger.create_log): Manually remove any old
1819 * IPython/Logger.py (Logger.create_log): Manually remove any old
1813 backup, since os.remove may fail under Windows. Fixes bug
1820 backup, since os.remove may fail under Windows. Fixes bug
1814 reported by Thorsten.
1821 reported by Thorsten.
1815
1822
1816 2004-06-09 Fernando Perez <fperez@colorado.edu>
1823 2004-06-09 Fernando Perez <fperez@colorado.edu>
1817
1824
1818 * examples/example-embed.py: fixed all references to %n (replaced
1825 * examples/example-embed.py: fixed all references to %n (replaced
1819 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
1826 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
1820 for all examples and the manual as well.
1827 for all examples and the manual as well.
1821
1828
1822 2004-06-08 Fernando Perez <fperez@colorado.edu>
1829 2004-06-08 Fernando Perez <fperez@colorado.edu>
1823
1830
1824 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
1831 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
1825 alignment and color management. All 3 prompt subsystems now
1832 alignment and color management. All 3 prompt subsystems now
1826 inherit from BasePrompt.
1833 inherit from BasePrompt.
1827
1834
1828 * tools/release: updates for windows installer build and tag rpms
1835 * tools/release: updates for windows installer build and tag rpms
1829 with python version (since paths are fixed).
1836 with python version (since paths are fixed).
1830
1837
1831 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
1838 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
1832 which will become eventually obsolete. Also fixed the default
1839 which will become eventually obsolete. Also fixed the default
1833 prompt_in2 to use \D, so at least new users start with the correct
1840 prompt_in2 to use \D, so at least new users start with the correct
1834 defaults.
1841 defaults.
1835 WARNING: Users with existing ipythonrc files will need to apply
1842 WARNING: Users with existing ipythonrc files will need to apply
1836 this fix manually!
1843 this fix manually!
1837
1844
1838 * setup.py: make windows installer (.exe). This is finally the
1845 * setup.py: make windows installer (.exe). This is finally the
1839 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
1846 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
1840 which I hadn't included because it required Python 2.3 (or recent
1847 which I hadn't included because it required Python 2.3 (or recent
1841 distutils).
1848 distutils).
1842
1849
1843 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
1850 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
1844 usage of new '\D' escape.
1851 usage of new '\D' escape.
1845
1852
1846 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
1853 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
1847 lacks os.getuid())
1854 lacks os.getuid())
1848 (CachedOutput.set_colors): Added the ability to turn coloring
1855 (CachedOutput.set_colors): Added the ability to turn coloring
1849 on/off with @colors even for manually defined prompt colors. It
1856 on/off with @colors even for manually defined prompt colors. It
1850 uses a nasty global, but it works safely and via the generic color
1857 uses a nasty global, but it works safely and via the generic color
1851 handling mechanism.
1858 handling mechanism.
1852 (Prompt2.__init__): Introduced new escape '\D' for continuation
1859 (Prompt2.__init__): Introduced new escape '\D' for continuation
1853 prompts. It represents the counter ('\#') as dots.
1860 prompts. It represents the counter ('\#') as dots.
1854 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
1861 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
1855 need to update their ipythonrc files and replace '%n' with '\D' in
1862 need to update their ipythonrc files and replace '%n' with '\D' in
1856 their prompt_in2 settings everywhere. Sorry, but there's
1863 their prompt_in2 settings everywhere. Sorry, but there's
1857 otherwise no clean way to get all prompts to properly align. The
1864 otherwise no clean way to get all prompts to properly align. The
1858 ipythonrc shipped with IPython has been updated.
1865 ipythonrc shipped with IPython has been updated.
1859
1866
1860 2004-06-07 Fernando Perez <fperez@colorado.edu>
1867 2004-06-07 Fernando Perez <fperez@colorado.edu>
1861
1868
1862 * setup.py (isfile): Pass local_icons option to latex2html, so the
1869 * setup.py (isfile): Pass local_icons option to latex2html, so the
1863 resulting HTML file is self-contained. Thanks to
1870 resulting HTML file is self-contained. Thanks to
1864 dryice-AT-liu.com.cn for the tip.
1871 dryice-AT-liu.com.cn for the tip.
1865
1872
1866 * pysh.py: I created a new profile 'shell', which implements a
1873 * pysh.py: I created a new profile 'shell', which implements a
1867 _rudimentary_ IPython-based shell. This is in NO WAY a realy
1874 _rudimentary_ IPython-based shell. This is in NO WAY a realy
1868 system shell, nor will it become one anytime soon. It's mainly
1875 system shell, nor will it become one anytime soon. It's mainly
1869 meant to illustrate the use of the new flexible bash-like prompts.
1876 meant to illustrate the use of the new flexible bash-like prompts.
1870 I guess it could be used by hardy souls for true shell management,
1877 I guess it could be used by hardy souls for true shell management,
1871 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
1878 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
1872 profile. This uses the InterpreterExec extension provided by
1879 profile. This uses the InterpreterExec extension provided by
1873 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
1880 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
1874
1881
1875 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
1882 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
1876 auto-align itself with the length of the previous input prompt
1883 auto-align itself with the length of the previous input prompt
1877 (taking into account the invisible color escapes).
1884 (taking into account the invisible color escapes).
1878 (CachedOutput.__init__): Large restructuring of this class. Now
1885 (CachedOutput.__init__): Large restructuring of this class. Now
1879 all three prompts (primary1, primary2, output) are proper objects,
1886 all three prompts (primary1, primary2, output) are proper objects,
1880 managed by the 'parent' CachedOutput class. The code is still a
1887 managed by the 'parent' CachedOutput class. The code is still a
1881 bit hackish (all prompts share state via a pointer to the cache),
1888 bit hackish (all prompts share state via a pointer to the cache),
1882 but it's overall far cleaner than before.
1889 but it's overall far cleaner than before.
1883
1890
1884 * IPython/genutils.py (getoutputerror): modified to add verbose,
1891 * IPython/genutils.py (getoutputerror): modified to add verbose,
1885 debug and header options. This makes the interface of all getout*
1892 debug and header options. This makes the interface of all getout*
1886 functions uniform.
1893 functions uniform.
1887 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
1894 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
1888
1895
1889 * IPython/Magic.py (Magic.default_option): added a function to
1896 * IPython/Magic.py (Magic.default_option): added a function to
1890 allow registering default options for any magic command. This
1897 allow registering default options for any magic command. This
1891 makes it easy to have profiles which customize the magics globally
1898 makes it easy to have profiles which customize the magics globally
1892 for a certain use. The values set through this function are
1899 for a certain use. The values set through this function are
1893 picked up by the parse_options() method, which all magics should
1900 picked up by the parse_options() method, which all magics should
1894 use to parse their options.
1901 use to parse their options.
1895
1902
1896 * IPython/genutils.py (warn): modified the warnings framework to
1903 * IPython/genutils.py (warn): modified the warnings framework to
1897 use the Term I/O class. I'm trying to slowly unify all of
1904 use the Term I/O class. I'm trying to slowly unify all of
1898 IPython's I/O operations to pass through Term.
1905 IPython's I/O operations to pass through Term.
1899
1906
1900 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
1907 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
1901 the secondary prompt to correctly match the length of the primary
1908 the secondary prompt to correctly match the length of the primary
1902 one for any prompt. Now multi-line code will properly line up
1909 one for any prompt. Now multi-line code will properly line up
1903 even for path dependent prompts, such as the new ones available
1910 even for path dependent prompts, such as the new ones available
1904 via the prompt_specials.
1911 via the prompt_specials.
1905
1912
1906 2004-06-06 Fernando Perez <fperez@colorado.edu>
1913 2004-06-06 Fernando Perez <fperez@colorado.edu>
1907
1914
1908 * IPython/Prompts.py (prompt_specials): Added the ability to have
1915 * IPython/Prompts.py (prompt_specials): Added the ability to have
1909 bash-like special sequences in the prompts, which get
1916 bash-like special sequences in the prompts, which get
1910 automatically expanded. Things like hostname, current working
1917 automatically expanded. Things like hostname, current working
1911 directory and username are implemented already, but it's easy to
1918 directory and username are implemented already, but it's easy to
1912 add more in the future. Thanks to a patch by W.J. van der Laan
1919 add more in the future. Thanks to a patch by W.J. van der Laan
1913 <gnufnork-AT-hetdigitalegat.nl>
1920 <gnufnork-AT-hetdigitalegat.nl>
1914 (prompt_specials): Added color support for prompt strings, so
1921 (prompt_specials): Added color support for prompt strings, so
1915 users can define arbitrary color setups for their prompts.
1922 users can define arbitrary color setups for their prompts.
1916
1923
1917 2004-06-05 Fernando Perez <fperez@colorado.edu>
1924 2004-06-05 Fernando Perez <fperez@colorado.edu>
1918
1925
1919 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
1926 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
1920 code to load Gary Bishop's readline and configure it
1927 code to load Gary Bishop's readline and configure it
1921 automatically. Thanks to Gary for help on this.
1928 automatically. Thanks to Gary for help on this.
1922
1929
1923 2004-06-01 Fernando Perez <fperez@colorado.edu>
1930 2004-06-01 Fernando Perez <fperez@colorado.edu>
1924
1931
1925 * IPython/Logger.py (Logger.create_log): fix bug for logging
1932 * IPython/Logger.py (Logger.create_log): fix bug for logging
1926 with no filename (previous fix was incomplete).
1933 with no filename (previous fix was incomplete).
1927
1934
1928 2004-05-25 Fernando Perez <fperez@colorado.edu>
1935 2004-05-25 Fernando Perez <fperez@colorado.edu>
1929
1936
1930 * IPython/Magic.py (Magic.parse_options): fix bug where naked
1937 * IPython/Magic.py (Magic.parse_options): fix bug where naked
1931 parens would get passed to the shell.
1938 parens would get passed to the shell.
1932
1939
1933 2004-05-20 Fernando Perez <fperez@colorado.edu>
1940 2004-05-20 Fernando Perez <fperez@colorado.edu>
1934
1941
1935 * IPython/Magic.py (Magic.magic_prun): changed default profile
1942 * IPython/Magic.py (Magic.magic_prun): changed default profile
1936 sort order to 'time' (the more common profiling need).
1943 sort order to 'time' (the more common profiling need).
1937
1944
1938 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
1945 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
1939 so that source code shown is guaranteed in sync with the file on
1946 so that source code shown is guaranteed in sync with the file on
1940 disk (also changed in psource). Similar fix to the one for
1947 disk (also changed in psource). Similar fix to the one for
1941 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
1948 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
1942 <yann.ledu-AT-noos.fr>.
1949 <yann.ledu-AT-noos.fr>.
1943
1950
1944 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
1951 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
1945 with a single option would not be correctly parsed. Closes
1952 with a single option would not be correctly parsed. Closes
1946 http://www.scipy.net/roundup/ipython/issue14. This bug had been
1953 http://www.scipy.net/roundup/ipython/issue14. This bug had been
1947 introduced in 0.6.0 (on 2004-05-06).
1954 introduced in 0.6.0 (on 2004-05-06).
1948
1955
1949 2004-05-13 *** Released version 0.6.0
1956 2004-05-13 *** Released version 0.6.0
1950
1957
1951 2004-05-13 Fernando Perez <fperez@colorado.edu>
1958 2004-05-13 Fernando Perez <fperez@colorado.edu>
1952
1959
1953 * debian/: Added debian/ directory to CVS, so that debian support
1960 * debian/: Added debian/ directory to CVS, so that debian support
1954 is publicly accessible. The debian package is maintained by Jack
1961 is publicly accessible. The debian package is maintained by Jack
1955 Moffit <jack-AT-xiph.org>.
1962 Moffit <jack-AT-xiph.org>.
1956
1963
1957 * Documentation: included the notes about an ipython-based system
1964 * Documentation: included the notes about an ipython-based system
1958 shell (the hypothetical 'pysh') into the new_design.pdf document,
1965 shell (the hypothetical 'pysh') into the new_design.pdf document,
1959 so that these ideas get distributed to users along with the
1966 so that these ideas get distributed to users along with the
1960 official documentation.
1967 official documentation.
1961
1968
1962 2004-05-10 Fernando Perez <fperez@colorado.edu>
1969 2004-05-10 Fernando Perez <fperez@colorado.edu>
1963
1970
1964 * IPython/Logger.py (Logger.create_log): fix recently introduced
1971 * IPython/Logger.py (Logger.create_log): fix recently introduced
1965 bug (misindented line) where logstart would fail when not given an
1972 bug (misindented line) where logstart would fail when not given an
1966 explicit filename.
1973 explicit filename.
1967
1974
1968 2004-05-09 Fernando Perez <fperez@colorado.edu>
1975 2004-05-09 Fernando Perez <fperez@colorado.edu>
1969
1976
1970 * IPython/Magic.py (Magic.parse_options): skip system call when
1977 * IPython/Magic.py (Magic.parse_options): skip system call when
1971 there are no options to look for. Faster, cleaner for the common
1978 there are no options to look for. Faster, cleaner for the common
1972 case.
1979 case.
1973
1980
1974 * Documentation: many updates to the manual: describing Windows
1981 * Documentation: many updates to the manual: describing Windows
1975 support better, Gnuplot updates, credits, misc small stuff. Also
1982 support better, Gnuplot updates, credits, misc small stuff. Also
1976 updated the new_design doc a bit.
1983 updated the new_design doc a bit.
1977
1984
1978 2004-05-06 *** Released version 0.6.0.rc1
1985 2004-05-06 *** Released version 0.6.0.rc1
1979
1986
1980 2004-05-06 Fernando Perez <fperez@colorado.edu>
1987 2004-05-06 Fernando Perez <fperez@colorado.edu>
1981
1988
1982 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
1989 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
1983 operations to use the vastly more efficient list/''.join() method.
1990 operations to use the vastly more efficient list/''.join() method.
1984 (FormattedTB.text): Fix
1991 (FormattedTB.text): Fix
1985 http://www.scipy.net/roundup/ipython/issue12 - exception source
1992 http://www.scipy.net/roundup/ipython/issue12 - exception source
1986 extract not updated after reload. Thanks to Mike Salib
1993 extract not updated after reload. Thanks to Mike Salib
1987 <msalib-AT-mit.edu> for pinning the source of the problem.
1994 <msalib-AT-mit.edu> for pinning the source of the problem.
1988 Fortunately, the solution works inside ipython and doesn't require
1995 Fortunately, the solution works inside ipython and doesn't require
1989 any changes to python proper.
1996 any changes to python proper.
1990
1997
1991 * IPython/Magic.py (Magic.parse_options): Improved to process the
1998 * IPython/Magic.py (Magic.parse_options): Improved to process the
1992 argument list as a true shell would (by actually using the
1999 argument list as a true shell would (by actually using the
1993 underlying system shell). This way, all @magics automatically get
2000 underlying system shell). This way, all @magics automatically get
1994 shell expansion for variables. Thanks to a comment by Alex
2001 shell expansion for variables. Thanks to a comment by Alex
1995 Schmolck.
2002 Schmolck.
1996
2003
1997 2004-04-04 Fernando Perez <fperez@colorado.edu>
2004 2004-04-04 Fernando Perez <fperez@colorado.edu>
1998
2005
1999 * IPython/iplib.py (InteractiveShell.interact): Added a special
2006 * IPython/iplib.py (InteractiveShell.interact): Added a special
2000 trap for a debugger quit exception, which is basically impossible
2007 trap for a debugger quit exception, which is basically impossible
2001 to handle by normal mechanisms, given what pdb does to the stack.
2008 to handle by normal mechanisms, given what pdb does to the stack.
2002 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2009 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2003
2010
2004 2004-04-03 Fernando Perez <fperez@colorado.edu>
2011 2004-04-03 Fernando Perez <fperez@colorado.edu>
2005
2012
2006 * IPython/genutils.py (Term): Standardized the names of the Term
2013 * IPython/genutils.py (Term): Standardized the names of the Term
2007 class streams to cin/cout/cerr, following C++ naming conventions
2014 class streams to cin/cout/cerr, following C++ naming conventions
2008 (I can't use in/out/err because 'in' is not a valid attribute
2015 (I can't use in/out/err because 'in' is not a valid attribute
2009 name).
2016 name).
2010
2017
2011 * IPython/iplib.py (InteractiveShell.interact): don't increment
2018 * IPython/iplib.py (InteractiveShell.interact): don't increment
2012 the prompt if there's no user input. By Daniel 'Dang' Griffith
2019 the prompt if there's no user input. By Daniel 'Dang' Griffith
2013 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2020 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2014 Francois Pinard.
2021 Francois Pinard.
2015
2022
2016 2004-04-02 Fernando Perez <fperez@colorado.edu>
2023 2004-04-02 Fernando Perez <fperez@colorado.edu>
2017
2024
2018 * IPython/genutils.py (Stream.__init__): Modified to survive at
2025 * IPython/genutils.py (Stream.__init__): Modified to survive at
2019 least importing in contexts where stdin/out/err aren't true file
2026 least importing in contexts where stdin/out/err aren't true file
2020 objects, such as PyCrust (they lack fileno() and mode). However,
2027 objects, such as PyCrust (they lack fileno() and mode). However,
2021 the recovery facilities which rely on these things existing will
2028 the recovery facilities which rely on these things existing will
2022 not work.
2029 not work.
2023
2030
2024 2004-04-01 Fernando Perez <fperez@colorado.edu>
2031 2004-04-01 Fernando Perez <fperez@colorado.edu>
2025
2032
2026 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2033 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2027 use the new getoutputerror() function, so it properly
2034 use the new getoutputerror() function, so it properly
2028 distinguishes stdout/err.
2035 distinguishes stdout/err.
2029
2036
2030 * IPython/genutils.py (getoutputerror): added a function to
2037 * IPython/genutils.py (getoutputerror): added a function to
2031 capture separately the standard output and error of a command.
2038 capture separately the standard output and error of a command.
2032 After a comment from dang on the mailing lists. This code is
2039 After a comment from dang on the mailing lists. This code is
2033 basically a modified version of commands.getstatusoutput(), from
2040 basically a modified version of commands.getstatusoutput(), from
2034 the standard library.
2041 the standard library.
2035
2042
2036 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2043 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2037 '!!' as a special syntax (shorthand) to access @sx.
2044 '!!' as a special syntax (shorthand) to access @sx.
2038
2045
2039 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2046 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2040 command and return its output as a list split on '\n'.
2047 command and return its output as a list split on '\n'.
2041
2048
2042 2004-03-31 Fernando Perez <fperez@colorado.edu>
2049 2004-03-31 Fernando Perez <fperez@colorado.edu>
2043
2050
2044 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2051 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2045 method to dictionaries used as FakeModule instances if they lack
2052 method to dictionaries used as FakeModule instances if they lack
2046 it. At least pydoc in python2.3 breaks for runtime-defined
2053 it. At least pydoc in python2.3 breaks for runtime-defined
2047 functions without this hack. At some point I need to _really_
2054 functions without this hack. At some point I need to _really_
2048 understand what FakeModule is doing, because it's a gross hack.
2055 understand what FakeModule is doing, because it's a gross hack.
2049 But it solves Arnd's problem for now...
2056 But it solves Arnd's problem for now...
2050
2057
2051 2004-02-27 Fernando Perez <fperez@colorado.edu>
2058 2004-02-27 Fernando Perez <fperez@colorado.edu>
2052
2059
2053 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2060 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2054 mode would behave erratically. Also increased the number of
2061 mode would behave erratically. Also increased the number of
2055 possible logs in rotate mod to 999. Thanks to Rod Holland
2062 possible logs in rotate mod to 999. Thanks to Rod Holland
2056 <rhh@StructureLABS.com> for the report and fixes.
2063 <rhh@StructureLABS.com> for the report and fixes.
2057
2064
2058 2004-02-26 Fernando Perez <fperez@colorado.edu>
2065 2004-02-26 Fernando Perez <fperez@colorado.edu>
2059
2066
2060 * IPython/genutils.py (page): Check that the curses module really
2067 * IPython/genutils.py (page): Check that the curses module really
2061 has the initscr attribute before trying to use it. For some
2068 has the initscr attribute before trying to use it. For some
2062 reason, the Solaris curses module is missing this. I think this
2069 reason, the Solaris curses module is missing this. I think this
2063 should be considered a Solaris python bug, but I'm not sure.
2070 should be considered a Solaris python bug, but I'm not sure.
2064
2071
2065 2004-01-17 Fernando Perez <fperez@colorado.edu>
2072 2004-01-17 Fernando Perez <fperez@colorado.edu>
2066
2073
2067 * IPython/genutils.py (Stream.__init__): Changes to try to make
2074 * IPython/genutils.py (Stream.__init__): Changes to try to make
2068 ipython robust against stdin/out/err being closed by the user.
2075 ipython robust against stdin/out/err being closed by the user.
2069 This is 'user error' (and blocks a normal python session, at least
2076 This is 'user error' (and blocks a normal python session, at least
2070 the stdout case). However, Ipython should be able to survive such
2077 the stdout case). However, Ipython should be able to survive such
2071 instances of abuse as gracefully as possible. To simplify the
2078 instances of abuse as gracefully as possible. To simplify the
2072 coding and maintain compatibility with Gary Bishop's Term
2079 coding and maintain compatibility with Gary Bishop's Term
2073 contributions, I've made use of classmethods for this. I think
2080 contributions, I've made use of classmethods for this. I think
2074 this introduces a dependency on python 2.2.
2081 this introduces a dependency on python 2.2.
2075
2082
2076 2004-01-13 Fernando Perez <fperez@colorado.edu>
2083 2004-01-13 Fernando Perez <fperez@colorado.edu>
2077
2084
2078 * IPython/numutils.py (exp_safe): simplified the code a bit and
2085 * IPython/numutils.py (exp_safe): simplified the code a bit and
2079 removed the need for importing the kinds module altogether.
2086 removed the need for importing the kinds module altogether.
2080
2087
2081 2004-01-06 Fernando Perez <fperez@colorado.edu>
2088 2004-01-06 Fernando Perez <fperez@colorado.edu>
2082
2089
2083 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2090 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2084 a magic function instead, after some community feedback. No
2091 a magic function instead, after some community feedback. No
2085 special syntax will exist for it, but its name is deliberately
2092 special syntax will exist for it, but its name is deliberately
2086 very short.
2093 very short.
2087
2094
2088 2003-12-20 Fernando Perez <fperez@colorado.edu>
2095 2003-12-20 Fernando Perez <fperez@colorado.edu>
2089
2096
2090 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2097 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2091 new functionality, to automagically assign the result of a shell
2098 new functionality, to automagically assign the result of a shell
2092 command to a variable. I'll solicit some community feedback on
2099 command to a variable. I'll solicit some community feedback on
2093 this before making it permanent.
2100 this before making it permanent.
2094
2101
2095 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2102 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2096 requested about callables for which inspect couldn't obtain a
2103 requested about callables for which inspect couldn't obtain a
2097 proper argspec. Thanks to a crash report sent by Etienne
2104 proper argspec. Thanks to a crash report sent by Etienne
2098 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2105 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2099
2106
2100 2003-12-09 Fernando Perez <fperez@colorado.edu>
2107 2003-12-09 Fernando Perez <fperez@colorado.edu>
2101
2108
2102 * IPython/genutils.py (page): patch for the pager to work across
2109 * IPython/genutils.py (page): patch for the pager to work across
2103 various versions of Windows. By Gary Bishop.
2110 various versions of Windows. By Gary Bishop.
2104
2111
2105 2003-12-04 Fernando Perez <fperez@colorado.edu>
2112 2003-12-04 Fernando Perez <fperez@colorado.edu>
2106
2113
2107 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2114 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2108 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2115 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2109 While I tested this and it looks ok, there may still be corner
2116 While I tested this and it looks ok, there may still be corner
2110 cases I've missed.
2117 cases I've missed.
2111
2118
2112 2003-12-01 Fernando Perez <fperez@colorado.edu>
2119 2003-12-01 Fernando Perez <fperez@colorado.edu>
2113
2120
2114 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2121 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2115 where a line like 'p,q=1,2' would fail because the automagic
2122 where a line like 'p,q=1,2' would fail because the automagic
2116 system would be triggered for @p.
2123 system would be triggered for @p.
2117
2124
2118 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2125 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2119 cleanups, code unmodified.
2126 cleanups, code unmodified.
2120
2127
2121 * IPython/genutils.py (Term): added a class for IPython to handle
2128 * IPython/genutils.py (Term): added a class for IPython to handle
2122 output. In most cases it will just be a proxy for stdout/err, but
2129 output. In most cases it will just be a proxy for stdout/err, but
2123 having this allows modifications to be made for some platforms,
2130 having this allows modifications to be made for some platforms,
2124 such as handling color escapes under Windows. All of this code
2131 such as handling color escapes under Windows. All of this code
2125 was contributed by Gary Bishop, with minor modifications by me.
2132 was contributed by Gary Bishop, with minor modifications by me.
2126 The actual changes affect many files.
2133 The actual changes affect many files.
2127
2134
2128 2003-11-30 Fernando Perez <fperez@colorado.edu>
2135 2003-11-30 Fernando Perez <fperez@colorado.edu>
2129
2136
2130 * IPython/iplib.py (file_matches): new completion code, courtesy
2137 * IPython/iplib.py (file_matches): new completion code, courtesy
2131 of Jeff Collins. This enables filename completion again under
2138 of Jeff Collins. This enables filename completion again under
2132 python 2.3, which disabled it at the C level.
2139 python 2.3, which disabled it at the C level.
2133
2140
2134 2003-11-11 Fernando Perez <fperez@colorado.edu>
2141 2003-11-11 Fernando Perez <fperez@colorado.edu>
2135
2142
2136 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2143 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2137 for Numeric.array(map(...)), but often convenient.
2144 for Numeric.array(map(...)), but often convenient.
2138
2145
2139 2003-11-05 Fernando Perez <fperez@colorado.edu>
2146 2003-11-05 Fernando Perez <fperez@colorado.edu>
2140
2147
2141 * IPython/numutils.py (frange): Changed a call from int() to
2148 * IPython/numutils.py (frange): Changed a call from int() to
2142 int(round()) to prevent a problem reported with arange() in the
2149 int(round()) to prevent a problem reported with arange() in the
2143 numpy list.
2150 numpy list.
2144
2151
2145 2003-10-06 Fernando Perez <fperez@colorado.edu>
2152 2003-10-06 Fernando Perez <fperez@colorado.edu>
2146
2153
2147 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2154 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2148 prevent crashes if sys lacks an argv attribute (it happens with
2155 prevent crashes if sys lacks an argv attribute (it happens with
2149 embedded interpreters which build a bare-bones sys module).
2156 embedded interpreters which build a bare-bones sys module).
2150 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2157 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2151
2158
2152 2003-09-24 Fernando Perez <fperez@colorado.edu>
2159 2003-09-24 Fernando Perez <fperez@colorado.edu>
2153
2160
2154 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2161 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2155 to protect against poorly written user objects where __getattr__
2162 to protect against poorly written user objects where __getattr__
2156 raises exceptions other than AttributeError. Thanks to a bug
2163 raises exceptions other than AttributeError. Thanks to a bug
2157 report by Oliver Sander <osander-AT-gmx.de>.
2164 report by Oliver Sander <osander-AT-gmx.de>.
2158
2165
2159 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2166 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2160 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2167 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2161
2168
2162 2003-09-09 Fernando Perez <fperez@colorado.edu>
2169 2003-09-09 Fernando Perez <fperez@colorado.edu>
2163
2170
2164 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2171 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2165 unpacking a list whith a callable as first element would
2172 unpacking a list whith a callable as first element would
2166 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2173 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2167 Collins.
2174 Collins.
2168
2175
2169 2003-08-25 *** Released version 0.5.0
2176 2003-08-25 *** Released version 0.5.0
2170
2177
2171 2003-08-22 Fernando Perez <fperez@colorado.edu>
2178 2003-08-22 Fernando Perez <fperez@colorado.edu>
2172
2179
2173 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2180 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2174 improperly defined user exceptions. Thanks to feedback from Mark
2181 improperly defined user exceptions. Thanks to feedback from Mark
2175 Russell <mrussell-AT-verio.net>.
2182 Russell <mrussell-AT-verio.net>.
2176
2183
2177 2003-08-20 Fernando Perez <fperez@colorado.edu>
2184 2003-08-20 Fernando Perez <fperez@colorado.edu>
2178
2185
2179 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2186 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2180 printing so that it would print multi-line string forms starting
2187 printing so that it would print multi-line string forms starting
2181 with a new line. This way the formatting is better respected for
2188 with a new line. This way the formatting is better respected for
2182 objects which work hard to make nice string forms.
2189 objects which work hard to make nice string forms.
2183
2190
2184 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2191 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2185 autocall would overtake data access for objects with both
2192 autocall would overtake data access for objects with both
2186 __getitem__ and __call__.
2193 __getitem__ and __call__.
2187
2194
2188 2003-08-19 *** Released version 0.5.0-rc1
2195 2003-08-19 *** Released version 0.5.0-rc1
2189
2196
2190 2003-08-19 Fernando Perez <fperez@colorado.edu>
2197 2003-08-19 Fernando Perez <fperez@colorado.edu>
2191
2198
2192 * IPython/deep_reload.py (load_tail): single tiny change here
2199 * IPython/deep_reload.py (load_tail): single tiny change here
2193 seems to fix the long-standing bug of dreload() failing to work
2200 seems to fix the long-standing bug of dreload() failing to work
2194 for dotted names. But this module is pretty tricky, so I may have
2201 for dotted names. But this module is pretty tricky, so I may have
2195 missed some subtlety. Needs more testing!.
2202 missed some subtlety. Needs more testing!.
2196
2203
2197 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2204 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2198 exceptions which have badly implemented __str__ methods.
2205 exceptions which have badly implemented __str__ methods.
2199 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2206 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2200 which I've been getting reports about from Python 2.3 users. I
2207 which I've been getting reports about from Python 2.3 users. I
2201 wish I had a simple test case to reproduce the problem, so I could
2208 wish I had a simple test case to reproduce the problem, so I could
2202 either write a cleaner workaround or file a bug report if
2209 either write a cleaner workaround or file a bug report if
2203 necessary.
2210 necessary.
2204
2211
2205 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2212 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2206 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2213 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2207 a bug report by Tjabo Kloppenburg.
2214 a bug report by Tjabo Kloppenburg.
2208
2215
2209 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2216 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2210 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2217 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2211 seems rather unstable. Thanks to a bug report by Tjabo
2218 seems rather unstable. Thanks to a bug report by Tjabo
2212 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2219 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2213
2220
2214 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2221 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2215 this out soon because of the critical fixes in the inner loop for
2222 this out soon because of the critical fixes in the inner loop for
2216 generators.
2223 generators.
2217
2224
2218 * IPython/Magic.py (Magic.getargspec): removed. This (and
2225 * IPython/Magic.py (Magic.getargspec): removed. This (and
2219 _get_def) have been obsoleted by OInspect for a long time, I
2226 _get_def) have been obsoleted by OInspect for a long time, I
2220 hadn't noticed that they were dead code.
2227 hadn't noticed that they were dead code.
2221 (Magic._ofind): restored _ofind functionality for a few literals
2228 (Magic._ofind): restored _ofind functionality for a few literals
2222 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2229 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2223 for things like "hello".capitalize?, since that would require a
2230 for things like "hello".capitalize?, since that would require a
2224 potentially dangerous eval() again.
2231 potentially dangerous eval() again.
2225
2232
2226 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2233 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2227 logic a bit more to clean up the escapes handling and minimize the
2234 logic a bit more to clean up the escapes handling and minimize the
2228 use of _ofind to only necessary cases. The interactive 'feel' of
2235 use of _ofind to only necessary cases. The interactive 'feel' of
2229 IPython should have improved quite a bit with the changes in
2236 IPython should have improved quite a bit with the changes in
2230 _prefilter and _ofind (besides being far safer than before).
2237 _prefilter and _ofind (besides being far safer than before).
2231
2238
2232 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2239 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2233 obscure, never reported). Edit would fail to find the object to
2240 obscure, never reported). Edit would fail to find the object to
2234 edit under some circumstances.
2241 edit under some circumstances.
2235 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2242 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2236 which were causing double-calling of generators. Those eval calls
2243 which were causing double-calling of generators. Those eval calls
2237 were _very_ dangerous, since code with side effects could be
2244 were _very_ dangerous, since code with side effects could be
2238 triggered. As they say, 'eval is evil'... These were the
2245 triggered. As they say, 'eval is evil'... These were the
2239 nastiest evals in IPython. Besides, _ofind is now far simpler,
2246 nastiest evals in IPython. Besides, _ofind is now far simpler,
2240 and it should also be quite a bit faster. Its use of inspect is
2247 and it should also be quite a bit faster. Its use of inspect is
2241 also safer, so perhaps some of the inspect-related crashes I've
2248 also safer, so perhaps some of the inspect-related crashes I've
2242 seen lately with Python 2.3 might be taken care of. That will
2249 seen lately with Python 2.3 might be taken care of. That will
2243 need more testing.
2250 need more testing.
2244
2251
2245 2003-08-17 Fernando Perez <fperez@colorado.edu>
2252 2003-08-17 Fernando Perez <fperez@colorado.edu>
2246
2253
2247 * IPython/iplib.py (InteractiveShell._prefilter): significant
2254 * IPython/iplib.py (InteractiveShell._prefilter): significant
2248 simplifications to the logic for handling user escapes. Faster
2255 simplifications to the logic for handling user escapes. Faster
2249 and simpler code.
2256 and simpler code.
2250
2257
2251 2003-08-14 Fernando Perez <fperez@colorado.edu>
2258 2003-08-14 Fernando Perez <fperez@colorado.edu>
2252
2259
2253 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2260 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2254 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2261 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2255 but it should be quite a bit faster. And the recursive version
2262 but it should be quite a bit faster. And the recursive version
2256 generated O(log N) intermediate storage for all rank>1 arrays,
2263 generated O(log N) intermediate storage for all rank>1 arrays,
2257 even if they were contiguous.
2264 even if they were contiguous.
2258 (l1norm): Added this function.
2265 (l1norm): Added this function.
2259 (norm): Added this function for arbitrary norms (including
2266 (norm): Added this function for arbitrary norms (including
2260 l-infinity). l1 and l2 are still special cases for convenience
2267 l-infinity). l1 and l2 are still special cases for convenience
2261 and speed.
2268 and speed.
2262
2269
2263 2003-08-03 Fernando Perez <fperez@colorado.edu>
2270 2003-08-03 Fernando Perez <fperez@colorado.edu>
2264
2271
2265 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2272 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2266 exceptions, which now raise PendingDeprecationWarnings in Python
2273 exceptions, which now raise PendingDeprecationWarnings in Python
2267 2.3. There were some in Magic and some in Gnuplot2.
2274 2.3. There were some in Magic and some in Gnuplot2.
2268
2275
2269 2003-06-30 Fernando Perez <fperez@colorado.edu>
2276 2003-06-30 Fernando Perez <fperez@colorado.edu>
2270
2277
2271 * IPython/genutils.py (page): modified to call curses only for
2278 * IPython/genutils.py (page): modified to call curses only for
2272 terminals where TERM=='xterm'. After problems under many other
2279 terminals where TERM=='xterm'. After problems under many other
2273 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2280 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2274
2281
2275 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2282 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2276 would be triggered when readline was absent. This was just an old
2283 would be triggered when readline was absent. This was just an old
2277 debugging statement I'd forgotten to take out.
2284 debugging statement I'd forgotten to take out.
2278
2285
2279 2003-06-20 Fernando Perez <fperez@colorado.edu>
2286 2003-06-20 Fernando Perez <fperez@colorado.edu>
2280
2287
2281 * IPython/genutils.py (clock): modified to return only user time
2288 * IPython/genutils.py (clock): modified to return only user time
2282 (not counting system time), after a discussion on scipy. While
2289 (not counting system time), after a discussion on scipy. While
2283 system time may be a useful quantity occasionally, it may much
2290 system time may be a useful quantity occasionally, it may much
2284 more easily be skewed by occasional swapping or other similar
2291 more easily be skewed by occasional swapping or other similar
2285 activity.
2292 activity.
2286
2293
2287 2003-06-05 Fernando Perez <fperez@colorado.edu>
2294 2003-06-05 Fernando Perez <fperez@colorado.edu>
2288
2295
2289 * IPython/numutils.py (identity): new function, for building
2296 * IPython/numutils.py (identity): new function, for building
2290 arbitrary rank Kronecker deltas (mostly backwards compatible with
2297 arbitrary rank Kronecker deltas (mostly backwards compatible with
2291 Numeric.identity)
2298 Numeric.identity)
2292
2299
2293 2003-06-03 Fernando Perez <fperez@colorado.edu>
2300 2003-06-03 Fernando Perez <fperez@colorado.edu>
2294
2301
2295 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2302 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2296 arguments passed to magics with spaces, to allow trailing '\' to
2303 arguments passed to magics with spaces, to allow trailing '\' to
2297 work normally (mainly for Windows users).
2304 work normally (mainly for Windows users).
2298
2305
2299 2003-05-29 Fernando Perez <fperez@colorado.edu>
2306 2003-05-29 Fernando Perez <fperez@colorado.edu>
2300
2307
2301 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2308 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2302 instead of pydoc.help. This fixes a bizarre behavior where
2309 instead of pydoc.help. This fixes a bizarre behavior where
2303 printing '%s' % locals() would trigger the help system. Now
2310 printing '%s' % locals() would trigger the help system. Now
2304 ipython behaves like normal python does.
2311 ipython behaves like normal python does.
2305
2312
2306 Note that if one does 'from pydoc import help', the bizarre
2313 Note that if one does 'from pydoc import help', the bizarre
2307 behavior returns, but this will also happen in normal python, so
2314 behavior returns, but this will also happen in normal python, so
2308 it's not an ipython bug anymore (it has to do with how pydoc.help
2315 it's not an ipython bug anymore (it has to do with how pydoc.help
2309 is implemented).
2316 is implemented).
2310
2317
2311 2003-05-22 Fernando Perez <fperez@colorado.edu>
2318 2003-05-22 Fernando Perez <fperez@colorado.edu>
2312
2319
2313 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2320 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2314 return [] instead of None when nothing matches, also match to end
2321 return [] instead of None when nothing matches, also match to end
2315 of line. Patch by Gary Bishop.
2322 of line. Patch by Gary Bishop.
2316
2323
2317 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2324 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2318 protection as before, for files passed on the command line. This
2325 protection as before, for files passed on the command line. This
2319 prevents the CrashHandler from kicking in if user files call into
2326 prevents the CrashHandler from kicking in if user files call into
2320 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2327 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2321 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2328 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2322
2329
2323 2003-05-20 *** Released version 0.4.0
2330 2003-05-20 *** Released version 0.4.0
2324
2331
2325 2003-05-20 Fernando Perez <fperez@colorado.edu>
2332 2003-05-20 Fernando Perez <fperez@colorado.edu>
2326
2333
2327 * setup.py: added support for manpages. It's a bit hackish b/c of
2334 * setup.py: added support for manpages. It's a bit hackish b/c of
2328 a bug in the way the bdist_rpm distutils target handles gzipped
2335 a bug in the way the bdist_rpm distutils target handles gzipped
2329 manpages, but it works. After a patch by Jack.
2336 manpages, but it works. After a patch by Jack.
2330
2337
2331 2003-05-19 Fernando Perez <fperez@colorado.edu>
2338 2003-05-19 Fernando Perez <fperez@colorado.edu>
2332
2339
2333 * IPython/numutils.py: added a mockup of the kinds module, since
2340 * IPython/numutils.py: added a mockup of the kinds module, since
2334 it was recently removed from Numeric. This way, numutils will
2341 it was recently removed from Numeric. This way, numutils will
2335 work for all users even if they are missing kinds.
2342 work for all users even if they are missing kinds.
2336
2343
2337 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2344 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2338 failure, which can occur with SWIG-wrapped extensions. After a
2345 failure, which can occur with SWIG-wrapped extensions. After a
2339 crash report from Prabhu.
2346 crash report from Prabhu.
2340
2347
2341 2003-05-16 Fernando Perez <fperez@colorado.edu>
2348 2003-05-16 Fernando Perez <fperez@colorado.edu>
2342
2349
2343 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2350 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2344 protect ipython from user code which may call directly
2351 protect ipython from user code which may call directly
2345 sys.excepthook (this looks like an ipython crash to the user, even
2352 sys.excepthook (this looks like an ipython crash to the user, even
2346 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2353 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2347 This is especially important to help users of WxWindows, but may
2354 This is especially important to help users of WxWindows, but may
2348 also be useful in other cases.
2355 also be useful in other cases.
2349
2356
2350 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2357 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2351 an optional tb_offset to be specified, and to preserve exception
2358 an optional tb_offset to be specified, and to preserve exception
2352 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2359 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2353
2360
2354 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2361 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2355
2362
2356 2003-05-15 Fernando Perez <fperez@colorado.edu>
2363 2003-05-15 Fernando Perez <fperez@colorado.edu>
2357
2364
2358 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2365 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2359 installing for a new user under Windows.
2366 installing for a new user under Windows.
2360
2367
2361 2003-05-12 Fernando Perez <fperez@colorado.edu>
2368 2003-05-12 Fernando Perez <fperez@colorado.edu>
2362
2369
2363 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2370 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2364 handler for Emacs comint-based lines. Currently it doesn't do
2371 handler for Emacs comint-based lines. Currently it doesn't do
2365 much (but importantly, it doesn't update the history cache). In
2372 much (but importantly, it doesn't update the history cache). In
2366 the future it may be expanded if Alex needs more functionality
2373 the future it may be expanded if Alex needs more functionality
2367 there.
2374 there.
2368
2375
2369 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2376 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2370 info to crash reports.
2377 info to crash reports.
2371
2378
2372 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2379 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2373 just like Python's -c. Also fixed crash with invalid -color
2380 just like Python's -c. Also fixed crash with invalid -color
2374 option value at startup. Thanks to Will French
2381 option value at startup. Thanks to Will French
2375 <wfrench-AT-bestweb.net> for the bug report.
2382 <wfrench-AT-bestweb.net> for the bug report.
2376
2383
2377 2003-05-09 Fernando Perez <fperez@colorado.edu>
2384 2003-05-09 Fernando Perez <fperez@colorado.edu>
2378
2385
2379 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2386 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2380 to EvalDict (it's a mapping, after all) and simplified its code
2387 to EvalDict (it's a mapping, after all) and simplified its code
2381 quite a bit, after a nice discussion on c.l.py where Gustavo
2388 quite a bit, after a nice discussion on c.l.py where Gustavo
2382 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2389 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2383
2390
2384 2003-04-30 Fernando Perez <fperez@colorado.edu>
2391 2003-04-30 Fernando Perez <fperez@colorado.edu>
2385
2392
2386 * IPython/genutils.py (timings_out): modified it to reduce its
2393 * IPython/genutils.py (timings_out): modified it to reduce its
2387 overhead in the common reps==1 case.
2394 overhead in the common reps==1 case.
2388
2395
2389 2003-04-29 Fernando Perez <fperez@colorado.edu>
2396 2003-04-29 Fernando Perez <fperez@colorado.edu>
2390
2397
2391 * IPython/genutils.py (timings_out): Modified to use the resource
2398 * IPython/genutils.py (timings_out): Modified to use the resource
2392 module, which avoids the wraparound problems of time.clock().
2399 module, which avoids the wraparound problems of time.clock().
2393
2400
2394 2003-04-17 *** Released version 0.2.15pre4
2401 2003-04-17 *** Released version 0.2.15pre4
2395
2402
2396 2003-04-17 Fernando Perez <fperez@colorado.edu>
2403 2003-04-17 Fernando Perez <fperez@colorado.edu>
2397
2404
2398 * setup.py (scriptfiles): Split windows-specific stuff over to a
2405 * setup.py (scriptfiles): Split windows-specific stuff over to a
2399 separate file, in an attempt to have a Windows GUI installer.
2406 separate file, in an attempt to have a Windows GUI installer.
2400 That didn't work, but part of the groundwork is done.
2407 That didn't work, but part of the groundwork is done.
2401
2408
2402 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2409 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2403 indent/unindent with 4 spaces. Particularly useful in combination
2410 indent/unindent with 4 spaces. Particularly useful in combination
2404 with the new auto-indent option.
2411 with the new auto-indent option.
2405
2412
2406 2003-04-16 Fernando Perez <fperez@colorado.edu>
2413 2003-04-16 Fernando Perez <fperez@colorado.edu>
2407
2414
2408 * IPython/Magic.py: various replacements of self.rc for
2415 * IPython/Magic.py: various replacements of self.rc for
2409 self.shell.rc. A lot more remains to be done to fully disentangle
2416 self.shell.rc. A lot more remains to be done to fully disentangle
2410 this class from the main Shell class.
2417 this class from the main Shell class.
2411
2418
2412 * IPython/GnuplotRuntime.py: added checks for mouse support so
2419 * IPython/GnuplotRuntime.py: added checks for mouse support so
2413 that we don't try to enable it if the current gnuplot doesn't
2420 that we don't try to enable it if the current gnuplot doesn't
2414 really support it. Also added checks so that we don't try to
2421 really support it. Also added checks so that we don't try to
2415 enable persist under Windows (where Gnuplot doesn't recognize the
2422 enable persist under Windows (where Gnuplot doesn't recognize the
2416 option).
2423 option).
2417
2424
2418 * IPython/iplib.py (InteractiveShell.interact): Added optional
2425 * IPython/iplib.py (InteractiveShell.interact): Added optional
2419 auto-indenting code, after a patch by King C. Shu
2426 auto-indenting code, after a patch by King C. Shu
2420 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2427 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2421 get along well with pasting indented code. If I ever figure out
2428 get along well with pasting indented code. If I ever figure out
2422 how to make that part go well, it will become on by default.
2429 how to make that part go well, it will become on by default.
2423
2430
2424 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2431 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2425 crash ipython if there was an unmatched '%' in the user's prompt
2432 crash ipython if there was an unmatched '%' in the user's prompt
2426 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2433 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2427
2434
2428 * IPython/iplib.py (InteractiveShell.interact): removed the
2435 * IPython/iplib.py (InteractiveShell.interact): removed the
2429 ability to ask the user whether he wants to crash or not at the
2436 ability to ask the user whether he wants to crash or not at the
2430 'last line' exception handler. Calling functions at that point
2437 'last line' exception handler. Calling functions at that point
2431 changes the stack, and the error reports would have incorrect
2438 changes the stack, and the error reports would have incorrect
2432 tracebacks.
2439 tracebacks.
2433
2440
2434 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2441 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2435 pass through a peger a pretty-printed form of any object. After a
2442 pass through a peger a pretty-printed form of any object. After a
2436 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2443 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2437
2444
2438 2003-04-14 Fernando Perez <fperez@colorado.edu>
2445 2003-04-14 Fernando Perez <fperez@colorado.edu>
2439
2446
2440 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2447 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2441 all files in ~ would be modified at first install (instead of
2448 all files in ~ would be modified at first install (instead of
2442 ~/.ipython). This could be potentially disastrous, as the
2449 ~/.ipython). This could be potentially disastrous, as the
2443 modification (make line-endings native) could damage binary files.
2450 modification (make line-endings native) could damage binary files.
2444
2451
2445 2003-04-10 Fernando Perez <fperez@colorado.edu>
2452 2003-04-10 Fernando Perez <fperez@colorado.edu>
2446
2453
2447 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2454 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2448 handle only lines which are invalid python. This now means that
2455 handle only lines which are invalid python. This now means that
2449 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2456 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2450 for the bug report.
2457 for the bug report.
2451
2458
2452 2003-04-01 Fernando Perez <fperez@colorado.edu>
2459 2003-04-01 Fernando Perez <fperez@colorado.edu>
2453
2460
2454 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2461 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2455 where failing to set sys.last_traceback would crash pdb.pm().
2462 where failing to set sys.last_traceback would crash pdb.pm().
2456 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2463 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2457 report.
2464 report.
2458
2465
2459 2003-03-25 Fernando Perez <fperez@colorado.edu>
2466 2003-03-25 Fernando Perez <fperez@colorado.edu>
2460
2467
2461 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2468 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2462 before printing it (it had a lot of spurious blank lines at the
2469 before printing it (it had a lot of spurious blank lines at the
2463 end).
2470 end).
2464
2471
2465 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2472 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2466 output would be sent 21 times! Obviously people don't use this
2473 output would be sent 21 times! Obviously people don't use this
2467 too often, or I would have heard about it.
2474 too often, or I would have heard about it.
2468
2475
2469 2003-03-24 Fernando Perez <fperez@colorado.edu>
2476 2003-03-24 Fernando Perez <fperez@colorado.edu>
2470
2477
2471 * setup.py (scriptfiles): renamed the data_files parameter from
2478 * setup.py (scriptfiles): renamed the data_files parameter from
2472 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2479 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2473 for the patch.
2480 for the patch.
2474
2481
2475 2003-03-20 Fernando Perez <fperez@colorado.edu>
2482 2003-03-20 Fernando Perez <fperez@colorado.edu>
2476
2483
2477 * IPython/genutils.py (error): added error() and fatal()
2484 * IPython/genutils.py (error): added error() and fatal()
2478 functions.
2485 functions.
2479
2486
2480 2003-03-18 *** Released version 0.2.15pre3
2487 2003-03-18 *** Released version 0.2.15pre3
2481
2488
2482 2003-03-18 Fernando Perez <fperez@colorado.edu>
2489 2003-03-18 Fernando Perez <fperez@colorado.edu>
2483
2490
2484 * setupext/install_data_ext.py
2491 * setupext/install_data_ext.py
2485 (install_data_ext.initialize_options): Class contributed by Jack
2492 (install_data_ext.initialize_options): Class contributed by Jack
2486 Moffit for fixing the old distutils hack. He is sending this to
2493 Moffit for fixing the old distutils hack. He is sending this to
2487 the distutils folks so in the future we may not need it as a
2494 the distutils folks so in the future we may not need it as a
2488 private fix.
2495 private fix.
2489
2496
2490 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2497 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2491 changes for Debian packaging. See his patch for full details.
2498 changes for Debian packaging. See his patch for full details.
2492 The old distutils hack of making the ipythonrc* files carry a
2499 The old distutils hack of making the ipythonrc* files carry a
2493 bogus .py extension is gone, at last. Examples were moved to a
2500 bogus .py extension is gone, at last. Examples were moved to a
2494 separate subdir under doc/, and the separate executable scripts
2501 separate subdir under doc/, and the separate executable scripts
2495 now live in their own directory. Overall a great cleanup. The
2502 now live in their own directory. Overall a great cleanup. The
2496 manual was updated to use the new files, and setup.py has been
2503 manual was updated to use the new files, and setup.py has been
2497 fixed for this setup.
2504 fixed for this setup.
2498
2505
2499 * IPython/PyColorize.py (Parser.usage): made non-executable and
2506 * IPython/PyColorize.py (Parser.usage): made non-executable and
2500 created a pycolor wrapper around it to be included as a script.
2507 created a pycolor wrapper around it to be included as a script.
2501
2508
2502 2003-03-12 *** Released version 0.2.15pre2
2509 2003-03-12 *** Released version 0.2.15pre2
2503
2510
2504 2003-03-12 Fernando Perez <fperez@colorado.edu>
2511 2003-03-12 Fernando Perez <fperez@colorado.edu>
2505
2512
2506 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2513 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2507 long-standing problem with garbage characters in some terminals.
2514 long-standing problem with garbage characters in some terminals.
2508 The issue was really that the \001 and \002 escapes must _only_ be
2515 The issue was really that the \001 and \002 escapes must _only_ be
2509 passed to input prompts (which call readline), but _never_ to
2516 passed to input prompts (which call readline), but _never_ to
2510 normal text to be printed on screen. I changed ColorANSI to have
2517 normal text to be printed on screen. I changed ColorANSI to have
2511 two classes: TermColors and InputTermColors, each with the
2518 two classes: TermColors and InputTermColors, each with the
2512 appropriate escapes for input prompts or normal text. The code in
2519 appropriate escapes for input prompts or normal text. The code in
2513 Prompts.py got slightly more complicated, but this very old and
2520 Prompts.py got slightly more complicated, but this very old and
2514 annoying bug is finally fixed.
2521 annoying bug is finally fixed.
2515
2522
2516 All the credit for nailing down the real origin of this problem
2523 All the credit for nailing down the real origin of this problem
2517 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2524 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2518 *Many* thanks to him for spending quite a bit of effort on this.
2525 *Many* thanks to him for spending quite a bit of effort on this.
2519
2526
2520 2003-03-05 *** Released version 0.2.15pre1
2527 2003-03-05 *** Released version 0.2.15pre1
2521
2528
2522 2003-03-03 Fernando Perez <fperez@colorado.edu>
2529 2003-03-03 Fernando Perez <fperez@colorado.edu>
2523
2530
2524 * IPython/FakeModule.py: Moved the former _FakeModule to a
2531 * IPython/FakeModule.py: Moved the former _FakeModule to a
2525 separate file, because it's also needed by Magic (to fix a similar
2532 separate file, because it's also needed by Magic (to fix a similar
2526 pickle-related issue in @run).
2533 pickle-related issue in @run).
2527
2534
2528 2003-03-02 Fernando Perez <fperez@colorado.edu>
2535 2003-03-02 Fernando Perez <fperez@colorado.edu>
2529
2536
2530 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2537 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2531 the autocall option at runtime.
2538 the autocall option at runtime.
2532 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2539 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2533 across Magic.py to start separating Magic from InteractiveShell.
2540 across Magic.py to start separating Magic from InteractiveShell.
2534 (Magic._ofind): Fixed to return proper namespace for dotted
2541 (Magic._ofind): Fixed to return proper namespace for dotted
2535 names. Before, a dotted name would always return 'not currently
2542 names. Before, a dotted name would always return 'not currently
2536 defined', because it would find the 'parent'. s.x would be found,
2543 defined', because it would find the 'parent'. s.x would be found,
2537 but since 'x' isn't defined by itself, it would get confused.
2544 but since 'x' isn't defined by itself, it would get confused.
2538 (Magic.magic_run): Fixed pickling problems reported by Ralf
2545 (Magic.magic_run): Fixed pickling problems reported by Ralf
2539 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2546 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2540 that I'd used when Mike Heeter reported similar issues at the
2547 that I'd used when Mike Heeter reported similar issues at the
2541 top-level, but now for @run. It boils down to injecting the
2548 top-level, but now for @run. It boils down to injecting the
2542 namespace where code is being executed with something that looks
2549 namespace where code is being executed with something that looks
2543 enough like a module to fool pickle.dump(). Since a pickle stores
2550 enough like a module to fool pickle.dump(). Since a pickle stores
2544 a named reference to the importing module, we need this for
2551 a named reference to the importing module, we need this for
2545 pickles to save something sensible.
2552 pickles to save something sensible.
2546
2553
2547 * IPython/ipmaker.py (make_IPython): added an autocall option.
2554 * IPython/ipmaker.py (make_IPython): added an autocall option.
2548
2555
2549 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2556 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2550 the auto-eval code. Now autocalling is an option, and the code is
2557 the auto-eval code. Now autocalling is an option, and the code is
2551 also vastly safer. There is no more eval() involved at all.
2558 also vastly safer. There is no more eval() involved at all.
2552
2559
2553 2003-03-01 Fernando Perez <fperez@colorado.edu>
2560 2003-03-01 Fernando Perez <fperez@colorado.edu>
2554
2561
2555 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2562 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2556 dict with named keys instead of a tuple.
2563 dict with named keys instead of a tuple.
2557
2564
2558 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2565 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2559
2566
2560 * setup.py (make_shortcut): Fixed message about directories
2567 * setup.py (make_shortcut): Fixed message about directories
2561 created during Windows installation (the directories were ok, just
2568 created during Windows installation (the directories were ok, just
2562 the printed message was misleading). Thanks to Chris Liechti
2569 the printed message was misleading). Thanks to Chris Liechti
2563 <cliechti-AT-gmx.net> for the heads up.
2570 <cliechti-AT-gmx.net> for the heads up.
2564
2571
2565 2003-02-21 Fernando Perez <fperez@colorado.edu>
2572 2003-02-21 Fernando Perez <fperez@colorado.edu>
2566
2573
2567 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2574 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2568 of ValueError exception when checking for auto-execution. This
2575 of ValueError exception when checking for auto-execution. This
2569 one is raised by things like Numeric arrays arr.flat when the
2576 one is raised by things like Numeric arrays arr.flat when the
2570 array is non-contiguous.
2577 array is non-contiguous.
2571
2578
2572 2003-01-31 Fernando Perez <fperez@colorado.edu>
2579 2003-01-31 Fernando Perez <fperez@colorado.edu>
2573
2580
2574 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2581 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2575 not return any value at all (even though the command would get
2582 not return any value at all (even though the command would get
2576 executed).
2583 executed).
2577 (xsys): Flush stdout right after printing the command to ensure
2584 (xsys): Flush stdout right after printing the command to ensure
2578 proper ordering of commands and command output in the total
2585 proper ordering of commands and command output in the total
2579 output.
2586 output.
2580 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2587 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2581 system/getoutput as defaults. The old ones are kept for
2588 system/getoutput as defaults. The old ones are kept for
2582 compatibility reasons, so no code which uses this library needs
2589 compatibility reasons, so no code which uses this library needs
2583 changing.
2590 changing.
2584
2591
2585 2003-01-27 *** Released version 0.2.14
2592 2003-01-27 *** Released version 0.2.14
2586
2593
2587 2003-01-25 Fernando Perez <fperez@colorado.edu>
2594 2003-01-25 Fernando Perez <fperez@colorado.edu>
2588
2595
2589 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2596 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2590 functions defined in previous edit sessions could not be re-edited
2597 functions defined in previous edit sessions could not be re-edited
2591 (because the temp files were immediately removed). Now temp files
2598 (because the temp files were immediately removed). Now temp files
2592 are removed only at IPython's exit.
2599 are removed only at IPython's exit.
2593 (Magic.magic_run): Improved @run to perform shell-like expansions
2600 (Magic.magic_run): Improved @run to perform shell-like expansions
2594 on its arguments (~users and $VARS). With this, @run becomes more
2601 on its arguments (~users and $VARS). With this, @run becomes more
2595 like a normal command-line.
2602 like a normal command-line.
2596
2603
2597 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2604 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2598 bugs related to embedding and cleaned up that code. A fairly
2605 bugs related to embedding and cleaned up that code. A fairly
2599 important one was the impossibility to access the global namespace
2606 important one was the impossibility to access the global namespace
2600 through the embedded IPython (only local variables were visible).
2607 through the embedded IPython (only local variables were visible).
2601
2608
2602 2003-01-14 Fernando Perez <fperez@colorado.edu>
2609 2003-01-14 Fernando Perez <fperez@colorado.edu>
2603
2610
2604 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2611 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2605 auto-calling to be a bit more conservative. Now it doesn't get
2612 auto-calling to be a bit more conservative. Now it doesn't get
2606 triggered if any of '!=()<>' are in the rest of the input line, to
2613 triggered if any of '!=()<>' are in the rest of the input line, to
2607 allow comparing callables. Thanks to Alex for the heads up.
2614 allow comparing callables. Thanks to Alex for the heads up.
2608
2615
2609 2003-01-07 Fernando Perez <fperez@colorado.edu>
2616 2003-01-07 Fernando Perez <fperez@colorado.edu>
2610
2617
2611 * IPython/genutils.py (page): fixed estimation of the number of
2618 * IPython/genutils.py (page): fixed estimation of the number of
2612 lines in a string to be paged to simply count newlines. This
2619 lines in a string to be paged to simply count newlines. This
2613 prevents over-guessing due to embedded escape sequences. A better
2620 prevents over-guessing due to embedded escape sequences. A better
2614 long-term solution would involve stripping out the control chars
2621 long-term solution would involve stripping out the control chars
2615 for the count, but it's potentially so expensive I just don't
2622 for the count, but it's potentially so expensive I just don't
2616 think it's worth doing.
2623 think it's worth doing.
2617
2624
2618 2002-12-19 *** Released version 0.2.14pre50
2625 2002-12-19 *** Released version 0.2.14pre50
2619
2626
2620 2002-12-19 Fernando Perez <fperez@colorado.edu>
2627 2002-12-19 Fernando Perez <fperez@colorado.edu>
2621
2628
2622 * tools/release (version): Changed release scripts to inform
2629 * tools/release (version): Changed release scripts to inform
2623 Andrea and build a NEWS file with a list of recent changes.
2630 Andrea and build a NEWS file with a list of recent changes.
2624
2631
2625 * IPython/ColorANSI.py (__all__): changed terminal detection
2632 * IPython/ColorANSI.py (__all__): changed terminal detection
2626 code. Seems to work better for xterms without breaking
2633 code. Seems to work better for xterms without breaking
2627 konsole. Will need more testing to determine if WinXP and Mac OSX
2634 konsole. Will need more testing to determine if WinXP and Mac OSX
2628 also work ok.
2635 also work ok.
2629
2636
2630 2002-12-18 *** Released version 0.2.14pre49
2637 2002-12-18 *** Released version 0.2.14pre49
2631
2638
2632 2002-12-18 Fernando Perez <fperez@colorado.edu>
2639 2002-12-18 Fernando Perez <fperez@colorado.edu>
2633
2640
2634 * Docs: added new info about Mac OSX, from Andrea.
2641 * Docs: added new info about Mac OSX, from Andrea.
2635
2642
2636 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2643 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2637 allow direct plotting of python strings whose format is the same
2644 allow direct plotting of python strings whose format is the same
2638 of gnuplot data files.
2645 of gnuplot data files.
2639
2646
2640 2002-12-16 Fernando Perez <fperez@colorado.edu>
2647 2002-12-16 Fernando Perez <fperez@colorado.edu>
2641
2648
2642 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2649 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2643 value of exit question to be acknowledged.
2650 value of exit question to be acknowledged.
2644
2651
2645 2002-12-03 Fernando Perez <fperez@colorado.edu>
2652 2002-12-03 Fernando Perez <fperez@colorado.edu>
2646
2653
2647 * IPython/ipmaker.py: removed generators, which had been added
2654 * IPython/ipmaker.py: removed generators, which had been added
2648 by mistake in an earlier debugging run. This was causing trouble
2655 by mistake in an earlier debugging run. This was causing trouble
2649 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2656 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2650 for pointing this out.
2657 for pointing this out.
2651
2658
2652 2002-11-17 Fernando Perez <fperez@colorado.edu>
2659 2002-11-17 Fernando Perez <fperez@colorado.edu>
2653
2660
2654 * Manual: updated the Gnuplot section.
2661 * Manual: updated the Gnuplot section.
2655
2662
2656 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2663 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2657 a much better split of what goes in Runtime and what goes in
2664 a much better split of what goes in Runtime and what goes in
2658 Interactive.
2665 Interactive.
2659
2666
2660 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2667 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2661 being imported from iplib.
2668 being imported from iplib.
2662
2669
2663 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2670 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2664 for command-passing. Now the global Gnuplot instance is called
2671 for command-passing. Now the global Gnuplot instance is called
2665 'gp' instead of 'g', which was really a far too fragile and
2672 'gp' instead of 'g', which was really a far too fragile and
2666 common name.
2673 common name.
2667
2674
2668 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2675 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2669 bounding boxes generated by Gnuplot for square plots.
2676 bounding boxes generated by Gnuplot for square plots.
2670
2677
2671 * IPython/genutils.py (popkey): new function added. I should
2678 * IPython/genutils.py (popkey): new function added. I should
2672 suggest this on c.l.py as a dict method, it seems useful.
2679 suggest this on c.l.py as a dict method, it seems useful.
2673
2680
2674 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2681 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2675 to transparently handle PostScript generation. MUCH better than
2682 to transparently handle PostScript generation. MUCH better than
2676 the previous plot_eps/replot_eps (which I removed now). The code
2683 the previous plot_eps/replot_eps (which I removed now). The code
2677 is also fairly clean and well documented now (including
2684 is also fairly clean and well documented now (including
2678 docstrings).
2685 docstrings).
2679
2686
2680 2002-11-13 Fernando Perez <fperez@colorado.edu>
2687 2002-11-13 Fernando Perez <fperez@colorado.edu>
2681
2688
2682 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2689 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2683 (inconsistent with options).
2690 (inconsistent with options).
2684
2691
2685 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2692 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2686 manually disabled, I don't know why. Fixed it.
2693 manually disabled, I don't know why. Fixed it.
2687 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2694 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2688 eps output.
2695 eps output.
2689
2696
2690 2002-11-12 Fernando Perez <fperez@colorado.edu>
2697 2002-11-12 Fernando Perez <fperez@colorado.edu>
2691
2698
2692 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2699 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2693 don't propagate up to caller. Fixes crash reported by François
2700 don't propagate up to caller. Fixes crash reported by François
2694 Pinard.
2701 Pinard.
2695
2702
2696 2002-11-09 Fernando Perez <fperez@colorado.edu>
2703 2002-11-09 Fernando Perez <fperez@colorado.edu>
2697
2704
2698 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2705 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2699 history file for new users.
2706 history file for new users.
2700 (make_IPython): fixed bug where initial install would leave the
2707 (make_IPython): fixed bug where initial install would leave the
2701 user running in the .ipython dir.
2708 user running in the .ipython dir.
2702 (make_IPython): fixed bug where config dir .ipython would be
2709 (make_IPython): fixed bug where config dir .ipython would be
2703 created regardless of the given -ipythondir option. Thanks to Cory
2710 created regardless of the given -ipythondir option. Thanks to Cory
2704 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2711 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2705
2712
2706 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2713 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2707 type confirmations. Will need to use it in all of IPython's code
2714 type confirmations. Will need to use it in all of IPython's code
2708 consistently.
2715 consistently.
2709
2716
2710 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2717 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2711 context to print 31 lines instead of the default 5. This will make
2718 context to print 31 lines instead of the default 5. This will make
2712 the crash reports extremely detailed in case the problem is in
2719 the crash reports extremely detailed in case the problem is in
2713 libraries I don't have access to.
2720 libraries I don't have access to.
2714
2721
2715 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2722 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2716 line of defense' code to still crash, but giving users fair
2723 line of defense' code to still crash, but giving users fair
2717 warning. I don't want internal errors to go unreported: if there's
2724 warning. I don't want internal errors to go unreported: if there's
2718 an internal problem, IPython should crash and generate a full
2725 an internal problem, IPython should crash and generate a full
2719 report.
2726 report.
2720
2727
2721 2002-11-08 Fernando Perez <fperez@colorado.edu>
2728 2002-11-08 Fernando Perez <fperez@colorado.edu>
2722
2729
2723 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2730 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2724 otherwise uncaught exceptions which can appear if people set
2731 otherwise uncaught exceptions which can appear if people set
2725 sys.stdout to something badly broken. Thanks to a crash report
2732 sys.stdout to something badly broken. Thanks to a crash report
2726 from henni-AT-mail.brainbot.com.
2733 from henni-AT-mail.brainbot.com.
2727
2734
2728 2002-11-04 Fernando Perez <fperez@colorado.edu>
2735 2002-11-04 Fernando Perez <fperez@colorado.edu>
2729
2736
2730 * IPython/iplib.py (InteractiveShell.interact): added
2737 * IPython/iplib.py (InteractiveShell.interact): added
2731 __IPYTHON__active to the builtins. It's a flag which goes on when
2738 __IPYTHON__active to the builtins. It's a flag which goes on when
2732 the interaction starts and goes off again when it stops. This
2739 the interaction starts and goes off again when it stops. This
2733 allows embedding code to detect being inside IPython. Before this
2740 allows embedding code to detect being inside IPython. Before this
2734 was done via __IPYTHON__, but that only shows that an IPython
2741 was done via __IPYTHON__, but that only shows that an IPython
2735 instance has been created.
2742 instance has been created.
2736
2743
2737 * IPython/Magic.py (Magic.magic_env): I realized that in a
2744 * IPython/Magic.py (Magic.magic_env): I realized that in a
2738 UserDict, instance.data holds the data as a normal dict. So I
2745 UserDict, instance.data holds the data as a normal dict. So I
2739 modified @env to return os.environ.data instead of rebuilding a
2746 modified @env to return os.environ.data instead of rebuilding a
2740 dict by hand.
2747 dict by hand.
2741
2748
2742 2002-11-02 Fernando Perez <fperez@colorado.edu>
2749 2002-11-02 Fernando Perez <fperez@colorado.edu>
2743
2750
2744 * IPython/genutils.py (warn): changed so that level 1 prints no
2751 * IPython/genutils.py (warn): changed so that level 1 prints no
2745 header. Level 2 is now the default (with 'WARNING' header, as
2752 header. Level 2 is now the default (with 'WARNING' header, as
2746 before). I think I tracked all places where changes were needed in
2753 before). I think I tracked all places where changes were needed in
2747 IPython, but outside code using the old level numbering may have
2754 IPython, but outside code using the old level numbering may have
2748 broken.
2755 broken.
2749
2756
2750 * IPython/iplib.py (InteractiveShell.runcode): added this to
2757 * IPython/iplib.py (InteractiveShell.runcode): added this to
2751 handle the tracebacks in SystemExit traps correctly. The previous
2758 handle the tracebacks in SystemExit traps correctly. The previous
2752 code (through interact) was printing more of the stack than
2759 code (through interact) was printing more of the stack than
2753 necessary, showing IPython internal code to the user.
2760 necessary, showing IPython internal code to the user.
2754
2761
2755 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
2762 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
2756 default. Now that the default at the confirmation prompt is yes,
2763 default. Now that the default at the confirmation prompt is yes,
2757 it's not so intrusive. François' argument that ipython sessions
2764 it's not so intrusive. François' argument that ipython sessions
2758 tend to be complex enough not to lose them from an accidental C-d,
2765 tend to be complex enough not to lose them from an accidental C-d,
2759 is a valid one.
2766 is a valid one.
2760
2767
2761 * IPython/iplib.py (InteractiveShell.interact): added a
2768 * IPython/iplib.py (InteractiveShell.interact): added a
2762 showtraceback() call to the SystemExit trap, and modified the exit
2769 showtraceback() call to the SystemExit trap, and modified the exit
2763 confirmation to have yes as the default.
2770 confirmation to have yes as the default.
2764
2771
2765 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
2772 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
2766 this file. It's been gone from the code for a long time, this was
2773 this file. It's been gone from the code for a long time, this was
2767 simply leftover junk.
2774 simply leftover junk.
2768
2775
2769 2002-11-01 Fernando Perez <fperez@colorado.edu>
2776 2002-11-01 Fernando Perez <fperez@colorado.edu>
2770
2777
2771 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
2778 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
2772 added. If set, IPython now traps EOF and asks for
2779 added. If set, IPython now traps EOF and asks for
2773 confirmation. After a request by François Pinard.
2780 confirmation. After a request by François Pinard.
2774
2781
2775 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
2782 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
2776 of @abort, and with a new (better) mechanism for handling the
2783 of @abort, and with a new (better) mechanism for handling the
2777 exceptions.
2784 exceptions.
2778
2785
2779 2002-10-27 Fernando Perez <fperez@colorado.edu>
2786 2002-10-27 Fernando Perez <fperez@colorado.edu>
2780
2787
2781 * IPython/usage.py (__doc__): updated the --help information and
2788 * IPython/usage.py (__doc__): updated the --help information and
2782 the ipythonrc file to indicate that -log generates
2789 the ipythonrc file to indicate that -log generates
2783 ./ipython.log. Also fixed the corresponding info in @logstart.
2790 ./ipython.log. Also fixed the corresponding info in @logstart.
2784 This and several other fixes in the manuals thanks to reports by
2791 This and several other fixes in the manuals thanks to reports by
2785 François Pinard <pinard-AT-iro.umontreal.ca>.
2792 François Pinard <pinard-AT-iro.umontreal.ca>.
2786
2793
2787 * IPython/Logger.py (Logger.switch_log): Fixed error message to
2794 * IPython/Logger.py (Logger.switch_log): Fixed error message to
2788 refer to @logstart (instead of @log, which doesn't exist).
2795 refer to @logstart (instead of @log, which doesn't exist).
2789
2796
2790 * IPython/iplib.py (InteractiveShell._prefilter): fixed
2797 * IPython/iplib.py (InteractiveShell._prefilter): fixed
2791 AttributeError crash. Thanks to Christopher Armstrong
2798 AttributeError crash. Thanks to Christopher Armstrong
2792 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
2799 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
2793 introduced recently (in 0.2.14pre37) with the fix to the eval
2800 introduced recently (in 0.2.14pre37) with the fix to the eval
2794 problem mentioned below.
2801 problem mentioned below.
2795
2802
2796 2002-10-17 Fernando Perez <fperez@colorado.edu>
2803 2002-10-17 Fernando Perez <fperez@colorado.edu>
2797
2804
2798 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
2805 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
2799 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
2806 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
2800
2807
2801 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
2808 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
2802 this function to fix a problem reported by Alex Schmolck. He saw
2809 this function to fix a problem reported by Alex Schmolck. He saw
2803 it with list comprehensions and generators, which were getting
2810 it with list comprehensions and generators, which were getting
2804 called twice. The real problem was an 'eval' call in testing for
2811 called twice. The real problem was an 'eval' call in testing for
2805 automagic which was evaluating the input line silently.
2812 automagic which was evaluating the input line silently.
2806
2813
2807 This is a potentially very nasty bug, if the input has side
2814 This is a potentially very nasty bug, if the input has side
2808 effects which must not be repeated. The code is much cleaner now,
2815 effects which must not be repeated. The code is much cleaner now,
2809 without any blanket 'except' left and with a regexp test for
2816 without any blanket 'except' left and with a regexp test for
2810 actual function names.
2817 actual function names.
2811
2818
2812 But an eval remains, which I'm not fully comfortable with. I just
2819 But an eval remains, which I'm not fully comfortable with. I just
2813 don't know how to find out if an expression could be a callable in
2820 don't know how to find out if an expression could be a callable in
2814 the user's namespace without doing an eval on the string. However
2821 the user's namespace without doing an eval on the string. However
2815 that string is now much more strictly checked so that no code
2822 that string is now much more strictly checked so that no code
2816 slips by, so the eval should only happen for things that can
2823 slips by, so the eval should only happen for things that can
2817 really be only function/method names.
2824 really be only function/method names.
2818
2825
2819 2002-10-15 Fernando Perez <fperez@colorado.edu>
2826 2002-10-15 Fernando Perez <fperez@colorado.edu>
2820
2827
2821 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
2828 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
2822 OSX information to main manual, removed README_Mac_OSX file from
2829 OSX information to main manual, removed README_Mac_OSX file from
2823 distribution. Also updated credits for recent additions.
2830 distribution. Also updated credits for recent additions.
2824
2831
2825 2002-10-10 Fernando Perez <fperez@colorado.edu>
2832 2002-10-10 Fernando Perez <fperez@colorado.edu>
2826
2833
2827 * README_Mac_OSX: Added a README for Mac OSX users for fixing
2834 * README_Mac_OSX: Added a README for Mac OSX users for fixing
2828 terminal-related issues. Many thanks to Andrea Riciputi
2835 terminal-related issues. Many thanks to Andrea Riciputi
2829 <andrea.riciputi-AT-libero.it> for writing it.
2836 <andrea.riciputi-AT-libero.it> for writing it.
2830
2837
2831 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
2838 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
2832 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2839 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2833
2840
2834 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
2841 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
2835 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
2842 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
2836 <syver-en-AT-online.no> who both submitted patches for this problem.
2843 <syver-en-AT-online.no> who both submitted patches for this problem.
2837
2844
2838 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
2845 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
2839 global embedding to make sure that things don't overwrite user
2846 global embedding to make sure that things don't overwrite user
2840 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
2847 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
2841
2848
2842 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
2849 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
2843 compatibility. Thanks to Hayden Callow
2850 compatibility. Thanks to Hayden Callow
2844 <h.callow-AT-elec.canterbury.ac.nz>
2851 <h.callow-AT-elec.canterbury.ac.nz>
2845
2852
2846 2002-10-04 Fernando Perez <fperez@colorado.edu>
2853 2002-10-04 Fernando Perez <fperez@colorado.edu>
2847
2854
2848 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
2855 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
2849 Gnuplot.File objects.
2856 Gnuplot.File objects.
2850
2857
2851 2002-07-23 Fernando Perez <fperez@colorado.edu>
2858 2002-07-23 Fernando Perez <fperez@colorado.edu>
2852
2859
2853 * IPython/genutils.py (timing): Added timings() and timing() for
2860 * IPython/genutils.py (timing): Added timings() and timing() for
2854 quick access to the most commonly needed data, the execution
2861 quick access to the most commonly needed data, the execution
2855 times. Old timing() renamed to timings_out().
2862 times. Old timing() renamed to timings_out().
2856
2863
2857 2002-07-18 Fernando Perez <fperez@colorado.edu>
2864 2002-07-18 Fernando Perez <fperez@colorado.edu>
2858
2865
2859 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
2866 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
2860 bug with nested instances disrupting the parent's tab completion.
2867 bug with nested instances disrupting the parent's tab completion.
2861
2868
2862 * IPython/iplib.py (all_completions): Added Alex Schmolck's
2869 * IPython/iplib.py (all_completions): Added Alex Schmolck's
2863 all_completions code to begin the emacs integration.
2870 all_completions code to begin the emacs integration.
2864
2871
2865 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
2872 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
2866 argument to allow titling individual arrays when plotting.
2873 argument to allow titling individual arrays when plotting.
2867
2874
2868 2002-07-15 Fernando Perez <fperez@colorado.edu>
2875 2002-07-15 Fernando Perez <fperez@colorado.edu>
2869
2876
2870 * setup.py (make_shortcut): changed to retrieve the value of
2877 * setup.py (make_shortcut): changed to retrieve the value of
2871 'Program Files' directory from the registry (this value changes in
2878 'Program Files' directory from the registry (this value changes in
2872 non-english versions of Windows). Thanks to Thomas Fanslau
2879 non-english versions of Windows). Thanks to Thomas Fanslau
2873 <tfanslau-AT-gmx.de> for the report.
2880 <tfanslau-AT-gmx.de> for the report.
2874
2881
2875 2002-07-10 Fernando Perez <fperez@colorado.edu>
2882 2002-07-10 Fernando Perez <fperez@colorado.edu>
2876
2883
2877 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
2884 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
2878 a bug in pdb, which crashes if a line with only whitespace is
2885 a bug in pdb, which crashes if a line with only whitespace is
2879 entered. Bug report submitted to sourceforge.
2886 entered. Bug report submitted to sourceforge.
2880
2887
2881 2002-07-09 Fernando Perez <fperez@colorado.edu>
2888 2002-07-09 Fernando Perez <fperez@colorado.edu>
2882
2889
2883 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
2890 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
2884 reporting exceptions (it's a bug in inspect.py, I just set a
2891 reporting exceptions (it's a bug in inspect.py, I just set a
2885 workaround).
2892 workaround).
2886
2893
2887 2002-07-08 Fernando Perez <fperez@colorado.edu>
2894 2002-07-08 Fernando Perez <fperez@colorado.edu>
2888
2895
2889 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
2896 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
2890 __IPYTHON__ in __builtins__ to show up in user_ns.
2897 __IPYTHON__ in __builtins__ to show up in user_ns.
2891
2898
2892 2002-07-03 Fernando Perez <fperez@colorado.edu>
2899 2002-07-03 Fernando Perez <fperez@colorado.edu>
2893
2900
2894 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
2901 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
2895 name from @gp_set_instance to @gp_set_default.
2902 name from @gp_set_instance to @gp_set_default.
2896
2903
2897 * IPython/ipmaker.py (make_IPython): default editor value set to
2904 * IPython/ipmaker.py (make_IPython): default editor value set to
2898 '0' (a string), to match the rc file. Otherwise will crash when
2905 '0' (a string), to match the rc file. Otherwise will crash when
2899 .strip() is called on it.
2906 .strip() is called on it.
2900
2907
2901
2908
2902 2002-06-28 Fernando Perez <fperez@colorado.edu>
2909 2002-06-28 Fernando Perez <fperez@colorado.edu>
2903
2910
2904 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
2911 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
2905 of files in current directory when a file is executed via
2912 of files in current directory when a file is executed via
2906 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
2913 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
2907
2914
2908 * setup.py (manfiles): fix for rpm builds, submitted by RA
2915 * setup.py (manfiles): fix for rpm builds, submitted by RA
2909 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
2916 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
2910
2917
2911 * IPython/ipmaker.py (make_IPython): fixed lookup of default
2918 * IPython/ipmaker.py (make_IPython): fixed lookup of default
2912 editor when set to '0'. Problem was, '0' evaluates to True (it's a
2919 editor when set to '0'. Problem was, '0' evaluates to True (it's a
2913 string!). A. Schmolck caught this one.
2920 string!). A. Schmolck caught this one.
2914
2921
2915 2002-06-27 Fernando Perez <fperez@colorado.edu>
2922 2002-06-27 Fernando Perez <fperez@colorado.edu>
2916
2923
2917 * IPython/ipmaker.py (make_IPython): fixed bug when running user
2924 * IPython/ipmaker.py (make_IPython): fixed bug when running user
2918 defined files at the cmd line. __name__ wasn't being set to
2925 defined files at the cmd line. __name__ wasn't being set to
2919 __main__.
2926 __main__.
2920
2927
2921 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
2928 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
2922 regular lists and tuples besides Numeric arrays.
2929 regular lists and tuples besides Numeric arrays.
2923
2930
2924 * IPython/Prompts.py (CachedOutput.__call__): Added output
2931 * IPython/Prompts.py (CachedOutput.__call__): Added output
2925 supression for input ending with ';'. Similar to Mathematica and
2932 supression for input ending with ';'. Similar to Mathematica and
2926 Matlab. The _* vars and Out[] list are still updated, just like
2933 Matlab. The _* vars and Out[] list are still updated, just like
2927 Mathematica behaves.
2934 Mathematica behaves.
2928
2935
2929 2002-06-25 Fernando Perez <fperez@colorado.edu>
2936 2002-06-25 Fernando Perez <fperez@colorado.edu>
2930
2937
2931 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
2938 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
2932 .ini extensions for profiels under Windows.
2939 .ini extensions for profiels under Windows.
2933
2940
2934 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
2941 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
2935 string form. Fix contributed by Alexander Schmolck
2942 string form. Fix contributed by Alexander Schmolck
2936 <a.schmolck-AT-gmx.net>
2943 <a.schmolck-AT-gmx.net>
2937
2944
2938 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
2945 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
2939 pre-configured Gnuplot instance.
2946 pre-configured Gnuplot instance.
2940
2947
2941 2002-06-21 Fernando Perez <fperez@colorado.edu>
2948 2002-06-21 Fernando Perez <fperez@colorado.edu>
2942
2949
2943 * IPython/numutils.py (exp_safe): new function, works around the
2950 * IPython/numutils.py (exp_safe): new function, works around the
2944 underflow problems in Numeric.
2951 underflow problems in Numeric.
2945 (log2): New fn. Safe log in base 2: returns exact integer answer
2952 (log2): New fn. Safe log in base 2: returns exact integer answer
2946 for exact integer powers of 2.
2953 for exact integer powers of 2.
2947
2954
2948 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
2955 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
2949 properly.
2956 properly.
2950
2957
2951 2002-06-20 Fernando Perez <fperez@colorado.edu>
2958 2002-06-20 Fernando Perez <fperez@colorado.edu>
2952
2959
2953 * IPython/genutils.py (timing): new function like
2960 * IPython/genutils.py (timing): new function like
2954 Mathematica's. Similar to time_test, but returns more info.
2961 Mathematica's. Similar to time_test, but returns more info.
2955
2962
2956 2002-06-18 Fernando Perez <fperez@colorado.edu>
2963 2002-06-18 Fernando Perez <fperez@colorado.edu>
2957
2964
2958 * IPython/Magic.py (Magic.magic_save): modified @save and @r
2965 * IPython/Magic.py (Magic.magic_save): modified @save and @r
2959 according to Mike Heeter's suggestions.
2966 according to Mike Heeter's suggestions.
2960
2967
2961 2002-06-16 Fernando Perez <fperez@colorado.edu>
2968 2002-06-16 Fernando Perez <fperez@colorado.edu>
2962
2969
2963 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
2970 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
2964 system. GnuplotMagic is gone as a user-directory option. New files
2971 system. GnuplotMagic is gone as a user-directory option. New files
2965 make it easier to use all the gnuplot stuff both from external
2972 make it easier to use all the gnuplot stuff both from external
2966 programs as well as from IPython. Had to rewrite part of
2973 programs as well as from IPython. Had to rewrite part of
2967 hardcopy() b/c of a strange bug: often the ps files simply don't
2974 hardcopy() b/c of a strange bug: often the ps files simply don't
2968 get created, and require a repeat of the command (often several
2975 get created, and require a repeat of the command (often several
2969 times).
2976 times).
2970
2977
2971 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
2978 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
2972 resolve output channel at call time, so that if sys.stderr has
2979 resolve output channel at call time, so that if sys.stderr has
2973 been redirected by user this gets honored.
2980 been redirected by user this gets honored.
2974
2981
2975 2002-06-13 Fernando Perez <fperez@colorado.edu>
2982 2002-06-13 Fernando Perez <fperez@colorado.edu>
2976
2983
2977 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
2984 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
2978 IPShell. Kept a copy with the old names to avoid breaking people's
2985 IPShell. Kept a copy with the old names to avoid breaking people's
2979 embedded code.
2986 embedded code.
2980
2987
2981 * IPython/ipython: simplified it to the bare minimum after
2988 * IPython/ipython: simplified it to the bare minimum after
2982 Holger's suggestions. Added info about how to use it in
2989 Holger's suggestions. Added info about how to use it in
2983 PYTHONSTARTUP.
2990 PYTHONSTARTUP.
2984
2991
2985 * IPython/Shell.py (IPythonShell): changed the options passing
2992 * IPython/Shell.py (IPythonShell): changed the options passing
2986 from a string with funky %s replacements to a straight list. Maybe
2993 from a string with funky %s replacements to a straight list. Maybe
2987 a bit more typing, but it follows sys.argv conventions, so there's
2994 a bit more typing, but it follows sys.argv conventions, so there's
2988 less special-casing to remember.
2995 less special-casing to remember.
2989
2996
2990 2002-06-12 Fernando Perez <fperez@colorado.edu>
2997 2002-06-12 Fernando Perez <fperez@colorado.edu>
2991
2998
2992 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
2999 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
2993 command. Thanks to a suggestion by Mike Heeter.
3000 command. Thanks to a suggestion by Mike Heeter.
2994 (Magic.magic_pfile): added behavior to look at filenames if given
3001 (Magic.magic_pfile): added behavior to look at filenames if given
2995 arg is not a defined object.
3002 arg is not a defined object.
2996 (Magic.magic_save): New @save function to save code snippets. Also
3003 (Magic.magic_save): New @save function to save code snippets. Also
2997 a Mike Heeter idea.
3004 a Mike Heeter idea.
2998
3005
2999 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3006 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3000 plot() and replot(). Much more convenient now, especially for
3007 plot() and replot(). Much more convenient now, especially for
3001 interactive use.
3008 interactive use.
3002
3009
3003 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3010 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3004 filenames.
3011 filenames.
3005
3012
3006 2002-06-02 Fernando Perez <fperez@colorado.edu>
3013 2002-06-02 Fernando Perez <fperez@colorado.edu>
3007
3014
3008 * IPython/Struct.py (Struct.__init__): modified to admit
3015 * IPython/Struct.py (Struct.__init__): modified to admit
3009 initialization via another struct.
3016 initialization via another struct.
3010
3017
3011 * IPython/genutils.py (SystemExec.__init__): New stateful
3018 * IPython/genutils.py (SystemExec.__init__): New stateful
3012 interface to xsys and bq. Useful for writing system scripts.
3019 interface to xsys and bq. Useful for writing system scripts.
3013
3020
3014 2002-05-30 Fernando Perez <fperez@colorado.edu>
3021 2002-05-30 Fernando Perez <fperez@colorado.edu>
3015
3022
3016 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3023 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3017 documents. This will make the user download smaller (it's getting
3024 documents. This will make the user download smaller (it's getting
3018 too big).
3025 too big).
3019
3026
3020 2002-05-29 Fernando Perez <fperez@colorado.edu>
3027 2002-05-29 Fernando Perez <fperez@colorado.edu>
3021
3028
3022 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3029 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3023 fix problems with shelve and pickle. Seems to work, but I don't
3030 fix problems with shelve and pickle. Seems to work, but I don't
3024 know if corner cases break it. Thanks to Mike Heeter
3031 know if corner cases break it. Thanks to Mike Heeter
3025 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3032 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3026
3033
3027 2002-05-24 Fernando Perez <fperez@colorado.edu>
3034 2002-05-24 Fernando Perez <fperez@colorado.edu>
3028
3035
3029 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3036 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3030 macros having broken.
3037 macros having broken.
3031
3038
3032 2002-05-21 Fernando Perez <fperez@colorado.edu>
3039 2002-05-21 Fernando Perez <fperez@colorado.edu>
3033
3040
3034 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3041 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3035 introduced logging bug: all history before logging started was
3042 introduced logging bug: all history before logging started was
3036 being written one character per line! This came from the redesign
3043 being written one character per line! This came from the redesign
3037 of the input history as a special list which slices to strings,
3044 of the input history as a special list which slices to strings,
3038 not to lists.
3045 not to lists.
3039
3046
3040 2002-05-20 Fernando Perez <fperez@colorado.edu>
3047 2002-05-20 Fernando Perez <fperez@colorado.edu>
3041
3048
3042 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3049 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3043 be an attribute of all classes in this module. The design of these
3050 be an attribute of all classes in this module. The design of these
3044 classes needs some serious overhauling.
3051 classes needs some serious overhauling.
3045
3052
3046 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3053 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3047 which was ignoring '_' in option names.
3054 which was ignoring '_' in option names.
3048
3055
3049 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3056 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3050 'Verbose_novars' to 'Context' and made it the new default. It's a
3057 'Verbose_novars' to 'Context' and made it the new default. It's a
3051 bit more readable and also safer than verbose.
3058 bit more readable and also safer than verbose.
3052
3059
3053 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3060 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3054 triple-quoted strings.
3061 triple-quoted strings.
3055
3062
3056 * IPython/OInspect.py (__all__): new module exposing the object
3063 * IPython/OInspect.py (__all__): new module exposing the object
3057 introspection facilities. Now the corresponding magics are dummy
3064 introspection facilities. Now the corresponding magics are dummy
3058 wrappers around this. Having this module will make it much easier
3065 wrappers around this. Having this module will make it much easier
3059 to put these functions into our modified pdb.
3066 to put these functions into our modified pdb.
3060 This new object inspector system uses the new colorizing module,
3067 This new object inspector system uses the new colorizing module,
3061 so source code and other things are nicely syntax highlighted.
3068 so source code and other things are nicely syntax highlighted.
3062
3069
3063 2002-05-18 Fernando Perez <fperez@colorado.edu>
3070 2002-05-18 Fernando Perez <fperez@colorado.edu>
3064
3071
3065 * IPython/ColorANSI.py: Split the coloring tools into a separate
3072 * IPython/ColorANSI.py: Split the coloring tools into a separate
3066 module so I can use them in other code easier (they were part of
3073 module so I can use them in other code easier (they were part of
3067 ultraTB).
3074 ultraTB).
3068
3075
3069 2002-05-17 Fernando Perez <fperez@colorado.edu>
3076 2002-05-17 Fernando Perez <fperez@colorado.edu>
3070
3077
3071 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3078 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3072 fixed it to set the global 'g' also to the called instance, as
3079 fixed it to set the global 'g' also to the called instance, as
3073 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3080 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3074 user's 'g' variables).
3081 user's 'g' variables).
3075
3082
3076 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3083 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3077 global variables (aliases to _ih,_oh) so that users which expect
3084 global variables (aliases to _ih,_oh) so that users which expect
3078 In[5] or Out[7] to work aren't unpleasantly surprised.
3085 In[5] or Out[7] to work aren't unpleasantly surprised.
3079 (InputList.__getslice__): new class to allow executing slices of
3086 (InputList.__getslice__): new class to allow executing slices of
3080 input history directly. Very simple class, complements the use of
3087 input history directly. Very simple class, complements the use of
3081 macros.
3088 macros.
3082
3089
3083 2002-05-16 Fernando Perez <fperez@colorado.edu>
3090 2002-05-16 Fernando Perez <fperez@colorado.edu>
3084
3091
3085 * setup.py (docdirbase): make doc directory be just doc/IPython
3092 * setup.py (docdirbase): make doc directory be just doc/IPython
3086 without version numbers, it will reduce clutter for users.
3093 without version numbers, it will reduce clutter for users.
3087
3094
3088 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3095 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3089 execfile call to prevent possible memory leak. See for details:
3096 execfile call to prevent possible memory leak. See for details:
3090 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3097 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3091
3098
3092 2002-05-15 Fernando Perez <fperez@colorado.edu>
3099 2002-05-15 Fernando Perez <fperez@colorado.edu>
3093
3100
3094 * IPython/Magic.py (Magic.magic_psource): made the object
3101 * IPython/Magic.py (Magic.magic_psource): made the object
3095 introspection names be more standard: pdoc, pdef, pfile and
3102 introspection names be more standard: pdoc, pdef, pfile and
3096 psource. They all print/page their output, and it makes
3103 psource. They all print/page their output, and it makes
3097 remembering them easier. Kept old names for compatibility as
3104 remembering them easier. Kept old names for compatibility as
3098 aliases.
3105 aliases.
3099
3106
3100 2002-05-14 Fernando Perez <fperez@colorado.edu>
3107 2002-05-14 Fernando Perez <fperez@colorado.edu>
3101
3108
3102 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3109 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3103 what the mouse problem was. The trick is to use gnuplot with temp
3110 what the mouse problem was. The trick is to use gnuplot with temp
3104 files and NOT with pipes (for data communication), because having
3111 files and NOT with pipes (for data communication), because having
3105 both pipes and the mouse on is bad news.
3112 both pipes and the mouse on is bad news.
3106
3113
3107 2002-05-13 Fernando Perez <fperez@colorado.edu>
3114 2002-05-13 Fernando Perez <fperez@colorado.edu>
3108
3115
3109 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3116 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3110 bug. Information would be reported about builtins even when
3117 bug. Information would be reported about builtins even when
3111 user-defined functions overrode them.
3118 user-defined functions overrode them.
3112
3119
3113 2002-05-11 Fernando Perez <fperez@colorado.edu>
3120 2002-05-11 Fernando Perez <fperez@colorado.edu>
3114
3121
3115 * IPython/__init__.py (__all__): removed FlexCompleter from
3122 * IPython/__init__.py (__all__): removed FlexCompleter from
3116 __all__ so that things don't fail in platforms without readline.
3123 __all__ so that things don't fail in platforms without readline.
3117
3124
3118 2002-05-10 Fernando Perez <fperez@colorado.edu>
3125 2002-05-10 Fernando Perez <fperez@colorado.edu>
3119
3126
3120 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3127 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3121 it requires Numeric, effectively making Numeric a dependency for
3128 it requires Numeric, effectively making Numeric a dependency for
3122 IPython.
3129 IPython.
3123
3130
3124 * Released 0.2.13
3131 * Released 0.2.13
3125
3132
3126 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3133 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3127 profiler interface. Now all the major options from the profiler
3134 profiler interface. Now all the major options from the profiler
3128 module are directly supported in IPython, both for single
3135 module are directly supported in IPython, both for single
3129 expressions (@prun) and for full programs (@run -p).
3136 expressions (@prun) and for full programs (@run -p).
3130
3137
3131 2002-05-09 Fernando Perez <fperez@colorado.edu>
3138 2002-05-09 Fernando Perez <fperez@colorado.edu>
3132
3139
3133 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3140 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3134 magic properly formatted for screen.
3141 magic properly formatted for screen.
3135
3142
3136 * setup.py (make_shortcut): Changed things to put pdf version in
3143 * setup.py (make_shortcut): Changed things to put pdf version in
3137 doc/ instead of doc/manual (had to change lyxport a bit).
3144 doc/ instead of doc/manual (had to change lyxport a bit).
3138
3145
3139 * IPython/Magic.py (Profile.string_stats): made profile runs go
3146 * IPython/Magic.py (Profile.string_stats): made profile runs go
3140 through pager (they are long and a pager allows searching, saving,
3147 through pager (they are long and a pager allows searching, saving,
3141 etc.)
3148 etc.)
3142
3149
3143 2002-05-08 Fernando Perez <fperez@colorado.edu>
3150 2002-05-08 Fernando Perez <fperez@colorado.edu>
3144
3151
3145 * Released 0.2.12
3152 * Released 0.2.12
3146
3153
3147 2002-05-06 Fernando Perez <fperez@colorado.edu>
3154 2002-05-06 Fernando Perez <fperez@colorado.edu>
3148
3155
3149 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3156 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3150 introduced); 'hist n1 n2' was broken.
3157 introduced); 'hist n1 n2' was broken.
3151 (Magic.magic_pdb): added optional on/off arguments to @pdb
3158 (Magic.magic_pdb): added optional on/off arguments to @pdb
3152 (Magic.magic_run): added option -i to @run, which executes code in
3159 (Magic.magic_run): added option -i to @run, which executes code in
3153 the IPython namespace instead of a clean one. Also added @irun as
3160 the IPython namespace instead of a clean one. Also added @irun as
3154 an alias to @run -i.
3161 an alias to @run -i.
3155
3162
3156 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3163 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3157 fixed (it didn't really do anything, the namespaces were wrong).
3164 fixed (it didn't really do anything, the namespaces were wrong).
3158
3165
3159 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3166 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3160
3167
3161 * IPython/__init__.py (__all__): Fixed package namespace, now
3168 * IPython/__init__.py (__all__): Fixed package namespace, now
3162 'import IPython' does give access to IPython.<all> as
3169 'import IPython' does give access to IPython.<all> as
3163 expected. Also renamed __release__ to Release.
3170 expected. Also renamed __release__ to Release.
3164
3171
3165 * IPython/Debugger.py (__license__): created new Pdb class which
3172 * IPython/Debugger.py (__license__): created new Pdb class which
3166 functions like a drop-in for the normal pdb.Pdb but does NOT
3173 functions like a drop-in for the normal pdb.Pdb but does NOT
3167 import readline by default. This way it doesn't muck up IPython's
3174 import readline by default. This way it doesn't muck up IPython's
3168 readline handling, and now tab-completion finally works in the
3175 readline handling, and now tab-completion finally works in the
3169 debugger -- sort of. It completes things globally visible, but the
3176 debugger -- sort of. It completes things globally visible, but the
3170 completer doesn't track the stack as pdb walks it. That's a bit
3177 completer doesn't track the stack as pdb walks it. That's a bit
3171 tricky, and I'll have to implement it later.
3178 tricky, and I'll have to implement it later.
3172
3179
3173 2002-05-05 Fernando Perez <fperez@colorado.edu>
3180 2002-05-05 Fernando Perez <fperez@colorado.edu>
3174
3181
3175 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3182 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3176 magic docstrings when printed via ? (explicit \'s were being
3183 magic docstrings when printed via ? (explicit \'s were being
3177 printed).
3184 printed).
3178
3185
3179 * IPython/ipmaker.py (make_IPython): fixed namespace
3186 * IPython/ipmaker.py (make_IPython): fixed namespace
3180 identification bug. Now variables loaded via logs or command-line
3187 identification bug. Now variables loaded via logs or command-line
3181 files are recognized in the interactive namespace by @who.
3188 files are recognized in the interactive namespace by @who.
3182
3189
3183 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3190 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3184 log replay system stemming from the string form of Structs.
3191 log replay system stemming from the string form of Structs.
3185
3192
3186 * IPython/Magic.py (Macro.__init__): improved macros to properly
3193 * IPython/Magic.py (Macro.__init__): improved macros to properly
3187 handle magic commands in them.
3194 handle magic commands in them.
3188 (Magic.magic_logstart): usernames are now expanded so 'logstart
3195 (Magic.magic_logstart): usernames are now expanded so 'logstart
3189 ~/mylog' now works.
3196 ~/mylog' now works.
3190
3197
3191 * IPython/iplib.py (complete): fixed bug where paths starting with
3198 * IPython/iplib.py (complete): fixed bug where paths starting with
3192 '/' would be completed as magic names.
3199 '/' would be completed as magic names.
3193
3200
3194 2002-05-04 Fernando Perez <fperez@colorado.edu>
3201 2002-05-04 Fernando Perez <fperez@colorado.edu>
3195
3202
3196 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3203 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3197 allow running full programs under the profiler's control.
3204 allow running full programs under the profiler's control.
3198
3205
3199 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3206 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3200 mode to report exceptions verbosely but without formatting
3207 mode to report exceptions verbosely but without formatting
3201 variables. This addresses the issue of ipython 'freezing' (it's
3208 variables. This addresses the issue of ipython 'freezing' (it's
3202 not frozen, but caught in an expensive formatting loop) when huge
3209 not frozen, but caught in an expensive formatting loop) when huge
3203 variables are in the context of an exception.
3210 variables are in the context of an exception.
3204 (VerboseTB.text): Added '--->' markers at line where exception was
3211 (VerboseTB.text): Added '--->' markers at line where exception was
3205 triggered. Much clearer to read, especially in NoColor modes.
3212 triggered. Much clearer to read, especially in NoColor modes.
3206
3213
3207 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3214 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3208 implemented in reverse when changing to the new parse_options().
3215 implemented in reverse when changing to the new parse_options().
3209
3216
3210 2002-05-03 Fernando Perez <fperez@colorado.edu>
3217 2002-05-03 Fernando Perez <fperez@colorado.edu>
3211
3218
3212 * IPython/Magic.py (Magic.parse_options): new function so that
3219 * IPython/Magic.py (Magic.parse_options): new function so that
3213 magics can parse options easier.
3220 magics can parse options easier.
3214 (Magic.magic_prun): new function similar to profile.run(),
3221 (Magic.magic_prun): new function similar to profile.run(),
3215 suggested by Chris Hart.
3222 suggested by Chris Hart.
3216 (Magic.magic_cd): fixed behavior so that it only changes if
3223 (Magic.magic_cd): fixed behavior so that it only changes if
3217 directory actually is in history.
3224 directory actually is in history.
3218
3225
3219 * IPython/usage.py (__doc__): added information about potential
3226 * IPython/usage.py (__doc__): added information about potential
3220 slowness of Verbose exception mode when there are huge data
3227 slowness of Verbose exception mode when there are huge data
3221 structures to be formatted (thanks to Archie Paulson).
3228 structures to be formatted (thanks to Archie Paulson).
3222
3229
3223 * IPython/ipmaker.py (make_IPython): Changed default logging
3230 * IPython/ipmaker.py (make_IPython): Changed default logging
3224 (when simply called with -log) to use curr_dir/ipython.log in
3231 (when simply called with -log) to use curr_dir/ipython.log in
3225 rotate mode. Fixed crash which was occuring with -log before
3232 rotate mode. Fixed crash which was occuring with -log before
3226 (thanks to Jim Boyle).
3233 (thanks to Jim Boyle).
3227
3234
3228 2002-05-01 Fernando Perez <fperez@colorado.edu>
3235 2002-05-01 Fernando Perez <fperez@colorado.edu>
3229
3236
3230 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3237 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3231 was nasty -- though somewhat of a corner case).
3238 was nasty -- though somewhat of a corner case).
3232
3239
3233 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3240 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3234 text (was a bug).
3241 text (was a bug).
3235
3242
3236 2002-04-30 Fernando Perez <fperez@colorado.edu>
3243 2002-04-30 Fernando Perez <fperez@colorado.edu>
3237
3244
3238 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3245 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3239 a print after ^D or ^C from the user so that the In[] prompt
3246 a print after ^D or ^C from the user so that the In[] prompt
3240 doesn't over-run the gnuplot one.
3247 doesn't over-run the gnuplot one.
3241
3248
3242 2002-04-29 Fernando Perez <fperez@colorado.edu>
3249 2002-04-29 Fernando Perez <fperez@colorado.edu>
3243
3250
3244 * Released 0.2.10
3251 * Released 0.2.10
3245
3252
3246 * IPython/__release__.py (version): get date dynamically.
3253 * IPython/__release__.py (version): get date dynamically.
3247
3254
3248 * Misc. documentation updates thanks to Arnd's comments. Also ran
3255 * Misc. documentation updates thanks to Arnd's comments. Also ran
3249 a full spellcheck on the manual (hadn't been done in a while).
3256 a full spellcheck on the manual (hadn't been done in a while).
3250
3257
3251 2002-04-27 Fernando Perez <fperez@colorado.edu>
3258 2002-04-27 Fernando Perez <fperez@colorado.edu>
3252
3259
3253 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3260 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3254 starting a log in mid-session would reset the input history list.
3261 starting a log in mid-session would reset the input history list.
3255
3262
3256 2002-04-26 Fernando Perez <fperez@colorado.edu>
3263 2002-04-26 Fernando Perez <fperez@colorado.edu>
3257
3264
3258 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3265 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3259 all files were being included in an update. Now anything in
3266 all files were being included in an update. Now anything in
3260 UserConfig that matches [A-Za-z]*.py will go (this excludes
3267 UserConfig that matches [A-Za-z]*.py will go (this excludes
3261 __init__.py)
3268 __init__.py)
3262
3269
3263 2002-04-25 Fernando Perez <fperez@colorado.edu>
3270 2002-04-25 Fernando Perez <fperez@colorado.edu>
3264
3271
3265 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3272 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3266 to __builtins__ so that any form of embedded or imported code can
3273 to __builtins__ so that any form of embedded or imported code can
3267 test for being inside IPython.
3274 test for being inside IPython.
3268
3275
3269 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3276 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3270 changed to GnuplotMagic because it's now an importable module,
3277 changed to GnuplotMagic because it's now an importable module,
3271 this makes the name follow that of the standard Gnuplot module.
3278 this makes the name follow that of the standard Gnuplot module.
3272 GnuplotMagic can now be loaded at any time in mid-session.
3279 GnuplotMagic can now be loaded at any time in mid-session.
3273
3280
3274 2002-04-24 Fernando Perez <fperez@colorado.edu>
3281 2002-04-24 Fernando Perez <fperez@colorado.edu>
3275
3282
3276 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3283 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3277 the globals (IPython has its own namespace) and the
3284 the globals (IPython has its own namespace) and the
3278 PhysicalQuantity stuff is much better anyway.
3285 PhysicalQuantity stuff is much better anyway.
3279
3286
3280 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3287 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3281 embedding example to standard user directory for
3288 embedding example to standard user directory for
3282 distribution. Also put it in the manual.
3289 distribution. Also put it in the manual.
3283
3290
3284 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3291 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3285 instance as first argument (so it doesn't rely on some obscure
3292 instance as first argument (so it doesn't rely on some obscure
3286 hidden global).
3293 hidden global).
3287
3294
3288 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3295 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3289 delimiters. While it prevents ().TAB from working, it allows
3296 delimiters. While it prevents ().TAB from working, it allows
3290 completions in open (... expressions. This is by far a more common
3297 completions in open (... expressions. This is by far a more common
3291 case.
3298 case.
3292
3299
3293 2002-04-23 Fernando Perez <fperez@colorado.edu>
3300 2002-04-23 Fernando Perez <fperez@colorado.edu>
3294
3301
3295 * IPython/Extensions/InterpreterPasteInput.py: new
3302 * IPython/Extensions/InterpreterPasteInput.py: new
3296 syntax-processing module for pasting lines with >>> or ... at the
3303 syntax-processing module for pasting lines with >>> or ... at the
3297 start.
3304 start.
3298
3305
3299 * IPython/Extensions/PhysicalQ_Interactive.py
3306 * IPython/Extensions/PhysicalQ_Interactive.py
3300 (PhysicalQuantityInteractive.__int__): fixed to work with either
3307 (PhysicalQuantityInteractive.__int__): fixed to work with either
3301 Numeric or math.
3308 Numeric or math.
3302
3309
3303 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3310 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3304 provided profiles. Now we have:
3311 provided profiles. Now we have:
3305 -math -> math module as * and cmath with its own namespace.
3312 -math -> math module as * and cmath with its own namespace.
3306 -numeric -> Numeric as *, plus gnuplot & grace
3313 -numeric -> Numeric as *, plus gnuplot & grace
3307 -physics -> same as before
3314 -physics -> same as before
3308
3315
3309 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3316 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3310 user-defined magics wouldn't be found by @magic if they were
3317 user-defined magics wouldn't be found by @magic if they were
3311 defined as class methods. Also cleaned up the namespace search
3318 defined as class methods. Also cleaned up the namespace search
3312 logic and the string building (to use %s instead of many repeated
3319 logic and the string building (to use %s instead of many repeated
3313 string adds).
3320 string adds).
3314
3321
3315 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3322 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3316 of user-defined magics to operate with class methods (cleaner, in
3323 of user-defined magics to operate with class methods (cleaner, in
3317 line with the gnuplot code).
3324 line with the gnuplot code).
3318
3325
3319 2002-04-22 Fernando Perez <fperez@colorado.edu>
3326 2002-04-22 Fernando Perez <fperez@colorado.edu>
3320
3327
3321 * setup.py: updated dependency list so that manual is updated when
3328 * setup.py: updated dependency list so that manual is updated when
3322 all included files change.
3329 all included files change.
3323
3330
3324 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3331 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3325 the delimiter removal option (the fix is ugly right now).
3332 the delimiter removal option (the fix is ugly right now).
3326
3333
3327 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3334 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3328 all of the math profile (quicker loading, no conflict between
3335 all of the math profile (quicker loading, no conflict between
3329 g-9.8 and g-gnuplot).
3336 g-9.8 and g-gnuplot).
3330
3337
3331 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3338 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3332 name of post-mortem files to IPython_crash_report.txt.
3339 name of post-mortem files to IPython_crash_report.txt.
3333
3340
3334 * Cleanup/update of the docs. Added all the new readline info and
3341 * Cleanup/update of the docs. Added all the new readline info and
3335 formatted all lists as 'real lists'.
3342 formatted all lists as 'real lists'.
3336
3343
3337 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3344 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3338 tab-completion options, since the full readline parse_and_bind is
3345 tab-completion options, since the full readline parse_and_bind is
3339 now accessible.
3346 now accessible.
3340
3347
3341 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3348 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3342 handling of readline options. Now users can specify any string to
3349 handling of readline options. Now users can specify any string to
3343 be passed to parse_and_bind(), as well as the delimiters to be
3350 be passed to parse_and_bind(), as well as the delimiters to be
3344 removed.
3351 removed.
3345 (InteractiveShell.__init__): Added __name__ to the global
3352 (InteractiveShell.__init__): Added __name__ to the global
3346 namespace so that things like Itpl which rely on its existence
3353 namespace so that things like Itpl which rely on its existence
3347 don't crash.
3354 don't crash.
3348 (InteractiveShell._prefilter): Defined the default with a _ so
3355 (InteractiveShell._prefilter): Defined the default with a _ so
3349 that prefilter() is easier to override, while the default one
3356 that prefilter() is easier to override, while the default one
3350 remains available.
3357 remains available.
3351
3358
3352 2002-04-18 Fernando Perez <fperez@colorado.edu>
3359 2002-04-18 Fernando Perez <fperez@colorado.edu>
3353
3360
3354 * Added information about pdb in the docs.
3361 * Added information about pdb in the docs.
3355
3362
3356 2002-04-17 Fernando Perez <fperez@colorado.edu>
3363 2002-04-17 Fernando Perez <fperez@colorado.edu>
3357
3364
3358 * IPython/ipmaker.py (make_IPython): added rc_override option to
3365 * IPython/ipmaker.py (make_IPython): added rc_override option to
3359 allow passing config options at creation time which may override
3366 allow passing config options at creation time which may override
3360 anything set in the config files or command line. This is
3367 anything set in the config files or command line. This is
3361 particularly useful for configuring embedded instances.
3368 particularly useful for configuring embedded instances.
3362
3369
3363 2002-04-15 Fernando Perez <fperez@colorado.edu>
3370 2002-04-15 Fernando Perez <fperez@colorado.edu>
3364
3371
3365 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3372 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3366 crash embedded instances because of the input cache falling out of
3373 crash embedded instances because of the input cache falling out of
3367 sync with the output counter.
3374 sync with the output counter.
3368
3375
3369 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3376 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3370 mode which calls pdb after an uncaught exception in IPython itself.
3377 mode which calls pdb after an uncaught exception in IPython itself.
3371
3378
3372 2002-04-14 Fernando Perez <fperez@colorado.edu>
3379 2002-04-14 Fernando Perez <fperez@colorado.edu>
3373
3380
3374 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3381 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3375 readline, fix it back after each call.
3382 readline, fix it back after each call.
3376
3383
3377 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3384 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3378 method to force all access via __call__(), which guarantees that
3385 method to force all access via __call__(), which guarantees that
3379 traceback references are properly deleted.
3386 traceback references are properly deleted.
3380
3387
3381 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3388 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3382 improve printing when pprint is in use.
3389 improve printing when pprint is in use.
3383
3390
3384 2002-04-13 Fernando Perez <fperez@colorado.edu>
3391 2002-04-13 Fernando Perez <fperez@colorado.edu>
3385
3392
3386 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3393 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3387 exceptions aren't caught anymore. If the user triggers one, he
3394 exceptions aren't caught anymore. If the user triggers one, he
3388 should know why he's doing it and it should go all the way up,
3395 should know why he's doing it and it should go all the way up,
3389 just like any other exception. So now @abort will fully kill the
3396 just like any other exception. So now @abort will fully kill the
3390 embedded interpreter and the embedding code (unless that happens
3397 embedded interpreter and the embedding code (unless that happens
3391 to catch SystemExit).
3398 to catch SystemExit).
3392
3399
3393 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3400 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3394 and a debugger() method to invoke the interactive pdb debugger
3401 and a debugger() method to invoke the interactive pdb debugger
3395 after printing exception information. Also added the corresponding
3402 after printing exception information. Also added the corresponding
3396 -pdb option and @pdb magic to control this feature, and updated
3403 -pdb option and @pdb magic to control this feature, and updated
3397 the docs. After a suggestion from Christopher Hart
3404 the docs. After a suggestion from Christopher Hart
3398 (hart-AT-caltech.edu).
3405 (hart-AT-caltech.edu).
3399
3406
3400 2002-04-12 Fernando Perez <fperez@colorado.edu>
3407 2002-04-12 Fernando Perez <fperez@colorado.edu>
3401
3408
3402 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3409 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3403 the exception handlers defined by the user (not the CrashHandler)
3410 the exception handlers defined by the user (not the CrashHandler)
3404 so that user exceptions don't trigger an ipython bug report.
3411 so that user exceptions don't trigger an ipython bug report.
3405
3412
3406 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3413 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3407 configurable (it should have always been so).
3414 configurable (it should have always been so).
3408
3415
3409 2002-03-26 Fernando Perez <fperez@colorado.edu>
3416 2002-03-26 Fernando Perez <fperez@colorado.edu>
3410
3417
3411 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3418 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3412 and there to fix embedding namespace issues. This should all be
3419 and there to fix embedding namespace issues. This should all be
3413 done in a more elegant way.
3420 done in a more elegant way.
3414
3421
3415 2002-03-25 Fernando Perez <fperez@colorado.edu>
3422 2002-03-25 Fernando Perez <fperez@colorado.edu>
3416
3423
3417 * IPython/genutils.py (get_home_dir): Try to make it work under
3424 * IPython/genutils.py (get_home_dir): Try to make it work under
3418 win9x also.
3425 win9x also.
3419
3426
3420 2002-03-20 Fernando Perez <fperez@colorado.edu>
3427 2002-03-20 Fernando Perez <fperez@colorado.edu>
3421
3428
3422 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3429 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3423 sys.displayhook untouched upon __init__.
3430 sys.displayhook untouched upon __init__.
3424
3431
3425 2002-03-19 Fernando Perez <fperez@colorado.edu>
3432 2002-03-19 Fernando Perez <fperez@colorado.edu>
3426
3433
3427 * Released 0.2.9 (for embedding bug, basically).
3434 * Released 0.2.9 (for embedding bug, basically).
3428
3435
3429 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3436 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3430 exceptions so that enclosing shell's state can be restored.
3437 exceptions so that enclosing shell's state can be restored.
3431
3438
3432 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3439 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3433 naming conventions in the .ipython/ dir.
3440 naming conventions in the .ipython/ dir.
3434
3441
3435 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3442 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3436 from delimiters list so filenames with - in them get expanded.
3443 from delimiters list so filenames with - in them get expanded.
3437
3444
3438 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3445 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3439 sys.displayhook not being properly restored after an embedded call.
3446 sys.displayhook not being properly restored after an embedded call.
3440
3447
3441 2002-03-18 Fernando Perez <fperez@colorado.edu>
3448 2002-03-18 Fernando Perez <fperez@colorado.edu>
3442
3449
3443 * Released 0.2.8
3450 * Released 0.2.8
3444
3451
3445 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3452 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3446 some files weren't being included in a -upgrade.
3453 some files weren't being included in a -upgrade.
3447 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3454 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3448 on' so that the first tab completes.
3455 on' so that the first tab completes.
3449 (InteractiveShell.handle_magic): fixed bug with spaces around
3456 (InteractiveShell.handle_magic): fixed bug with spaces around
3450 quotes breaking many magic commands.
3457 quotes breaking many magic commands.
3451
3458
3452 * setup.py: added note about ignoring the syntax error messages at
3459 * setup.py: added note about ignoring the syntax error messages at
3453 installation.
3460 installation.
3454
3461
3455 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3462 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3456 streamlining the gnuplot interface, now there's only one magic @gp.
3463 streamlining the gnuplot interface, now there's only one magic @gp.
3457
3464
3458 2002-03-17 Fernando Perez <fperez@colorado.edu>
3465 2002-03-17 Fernando Perez <fperez@colorado.edu>
3459
3466
3460 * IPython/UserConfig/magic_gnuplot.py: new name for the
3467 * IPython/UserConfig/magic_gnuplot.py: new name for the
3461 example-magic_pm.py file. Much enhanced system, now with a shell
3468 example-magic_pm.py file. Much enhanced system, now with a shell
3462 for communicating directly with gnuplot, one command at a time.
3469 for communicating directly with gnuplot, one command at a time.
3463
3470
3464 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3471 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3465 setting __name__=='__main__'.
3472 setting __name__=='__main__'.
3466
3473
3467 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3474 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3468 mini-shell for accessing gnuplot from inside ipython. Should
3475 mini-shell for accessing gnuplot from inside ipython. Should
3469 extend it later for grace access too. Inspired by Arnd's
3476 extend it later for grace access too. Inspired by Arnd's
3470 suggestion.
3477 suggestion.
3471
3478
3472 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3479 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3473 calling magic functions with () in their arguments. Thanks to Arnd
3480 calling magic functions with () in their arguments. Thanks to Arnd
3474 Baecker for pointing this to me.
3481 Baecker for pointing this to me.
3475
3482
3476 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3483 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3477 infinitely for integer or complex arrays (only worked with floats).
3484 infinitely for integer or complex arrays (only worked with floats).
3478
3485
3479 2002-03-16 Fernando Perez <fperez@colorado.edu>
3486 2002-03-16 Fernando Perez <fperez@colorado.edu>
3480
3487
3481 * setup.py: Merged setup and setup_windows into a single script
3488 * setup.py: Merged setup and setup_windows into a single script
3482 which properly handles things for windows users.
3489 which properly handles things for windows users.
3483
3490
3484 2002-03-15 Fernando Perez <fperez@colorado.edu>
3491 2002-03-15 Fernando Perez <fperez@colorado.edu>
3485
3492
3486 * Big change to the manual: now the magics are all automatically
3493 * Big change to the manual: now the magics are all automatically
3487 documented. This information is generated from their docstrings
3494 documented. This information is generated from their docstrings
3488 and put in a latex file included by the manual lyx file. This way
3495 and put in a latex file included by the manual lyx file. This way
3489 we get always up to date information for the magics. The manual
3496 we get always up to date information for the magics. The manual
3490 now also has proper version information, also auto-synced.
3497 now also has proper version information, also auto-synced.
3491
3498
3492 For this to work, an undocumented --magic_docstrings option was added.
3499 For this to work, an undocumented --magic_docstrings option was added.
3493
3500
3494 2002-03-13 Fernando Perez <fperez@colorado.edu>
3501 2002-03-13 Fernando Perez <fperez@colorado.edu>
3495
3502
3496 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3503 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3497 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3504 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3498
3505
3499 2002-03-12 Fernando Perez <fperez@colorado.edu>
3506 2002-03-12 Fernando Perez <fperez@colorado.edu>
3500
3507
3501 * IPython/ultraTB.py (TermColors): changed color escapes again to
3508 * IPython/ultraTB.py (TermColors): changed color escapes again to
3502 fix the (old, reintroduced) line-wrapping bug. Basically, if
3509 fix the (old, reintroduced) line-wrapping bug. Basically, if
3503 \001..\002 aren't given in the color escapes, lines get wrapped
3510 \001..\002 aren't given in the color escapes, lines get wrapped
3504 weirdly. But giving those screws up old xterms and emacs terms. So
3511 weirdly. But giving those screws up old xterms and emacs terms. So
3505 I added some logic for emacs terms to be ok, but I can't identify old
3512 I added some logic for emacs terms to be ok, but I can't identify old
3506 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3513 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3507
3514
3508 2002-03-10 Fernando Perez <fperez@colorado.edu>
3515 2002-03-10 Fernando Perez <fperez@colorado.edu>
3509
3516
3510 * IPython/usage.py (__doc__): Various documentation cleanups and
3517 * IPython/usage.py (__doc__): Various documentation cleanups and
3511 updates, both in usage docstrings and in the manual.
3518 updates, both in usage docstrings and in the manual.
3512
3519
3513 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3520 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3514 handling of caching. Set minimum acceptabe value for having a
3521 handling of caching. Set minimum acceptabe value for having a
3515 cache at 20 values.
3522 cache at 20 values.
3516
3523
3517 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3524 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3518 install_first_time function to a method, renamed it and added an
3525 install_first_time function to a method, renamed it and added an
3519 'upgrade' mode. Now people can update their config directory with
3526 'upgrade' mode. Now people can update their config directory with
3520 a simple command line switch (-upgrade, also new).
3527 a simple command line switch (-upgrade, also new).
3521
3528
3522 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3529 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3523 @file (convenient for automagic users under Python >= 2.2).
3530 @file (convenient for automagic users under Python >= 2.2).
3524 Removed @files (it seemed more like a plural than an abbrev. of
3531 Removed @files (it seemed more like a plural than an abbrev. of
3525 'file show').
3532 'file show').
3526
3533
3527 * IPython/iplib.py (install_first_time): Fixed crash if there were
3534 * IPython/iplib.py (install_first_time): Fixed crash if there were
3528 backup files ('~') in .ipython/ install directory.
3535 backup files ('~') in .ipython/ install directory.
3529
3536
3530 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3537 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3531 system. Things look fine, but these changes are fairly
3538 system. Things look fine, but these changes are fairly
3532 intrusive. Test them for a few days.
3539 intrusive. Test them for a few days.
3533
3540
3534 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3541 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3535 the prompts system. Now all in/out prompt strings are user
3542 the prompts system. Now all in/out prompt strings are user
3536 controllable. This is particularly useful for embedding, as one
3543 controllable. This is particularly useful for embedding, as one
3537 can tag embedded instances with particular prompts.
3544 can tag embedded instances with particular prompts.
3538
3545
3539 Also removed global use of sys.ps1/2, which now allows nested
3546 Also removed global use of sys.ps1/2, which now allows nested
3540 embeddings without any problems. Added command-line options for
3547 embeddings without any problems. Added command-line options for
3541 the prompt strings.
3548 the prompt strings.
3542
3549
3543 2002-03-08 Fernando Perez <fperez@colorado.edu>
3550 2002-03-08 Fernando Perez <fperez@colorado.edu>
3544
3551
3545 * IPython/UserConfig/example-embed-short.py (ipshell): added
3552 * IPython/UserConfig/example-embed-short.py (ipshell): added
3546 example file with the bare minimum code for embedding.
3553 example file with the bare minimum code for embedding.
3547
3554
3548 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3555 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3549 functionality for the embeddable shell to be activated/deactivated
3556 functionality for the embeddable shell to be activated/deactivated
3550 either globally or at each call.
3557 either globally or at each call.
3551
3558
3552 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3559 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3553 rewriting the prompt with '--->' for auto-inputs with proper
3560 rewriting the prompt with '--->' for auto-inputs with proper
3554 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3561 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3555 this is handled by the prompts class itself, as it should.
3562 this is handled by the prompts class itself, as it should.
3556
3563
3557 2002-03-05 Fernando Perez <fperez@colorado.edu>
3564 2002-03-05 Fernando Perez <fperez@colorado.edu>
3558
3565
3559 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3566 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3560 @logstart to avoid name clashes with the math log function.
3567 @logstart to avoid name clashes with the math log function.
3561
3568
3562 * Big updates to X/Emacs section of the manual.
3569 * Big updates to X/Emacs section of the manual.
3563
3570
3564 * Removed ipython_emacs. Milan explained to me how to pass
3571 * Removed ipython_emacs. Milan explained to me how to pass
3565 arguments to ipython through Emacs. Some day I'm going to end up
3572 arguments to ipython through Emacs. Some day I'm going to end up
3566 learning some lisp...
3573 learning some lisp...
3567
3574
3568 2002-03-04 Fernando Perez <fperez@colorado.edu>
3575 2002-03-04 Fernando Perez <fperez@colorado.edu>
3569
3576
3570 * IPython/ipython_emacs: Created script to be used as the
3577 * IPython/ipython_emacs: Created script to be used as the
3571 py-python-command Emacs variable so we can pass IPython
3578 py-python-command Emacs variable so we can pass IPython
3572 parameters. I can't figure out how to tell Emacs directly to pass
3579 parameters. I can't figure out how to tell Emacs directly to pass
3573 parameters to IPython, so a dummy shell script will do it.
3580 parameters to IPython, so a dummy shell script will do it.
3574
3581
3575 Other enhancements made for things to work better under Emacs'
3582 Other enhancements made for things to work better under Emacs'
3576 various types of terminals. Many thanks to Milan Zamazal
3583 various types of terminals. Many thanks to Milan Zamazal
3577 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3584 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3578
3585
3579 2002-03-01 Fernando Perez <fperez@colorado.edu>
3586 2002-03-01 Fernando Perez <fperez@colorado.edu>
3580
3587
3581 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3588 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3582 that loading of readline is now optional. This gives better
3589 that loading of readline is now optional. This gives better
3583 control to emacs users.
3590 control to emacs users.
3584
3591
3585 * IPython/ultraTB.py (__date__): Modified color escape sequences
3592 * IPython/ultraTB.py (__date__): Modified color escape sequences
3586 and now things work fine under xterm and in Emacs' term buffers
3593 and now things work fine under xterm and in Emacs' term buffers
3587 (though not shell ones). Well, in emacs you get colors, but all
3594 (though not shell ones). Well, in emacs you get colors, but all
3588 seem to be 'light' colors (no difference between dark and light
3595 seem to be 'light' colors (no difference between dark and light
3589 ones). But the garbage chars are gone, and also in xterms. It
3596 ones). But the garbage chars are gone, and also in xterms. It
3590 seems that now I'm using 'cleaner' ansi sequences.
3597 seems that now I'm using 'cleaner' ansi sequences.
3591
3598
3592 2002-02-21 Fernando Perez <fperez@colorado.edu>
3599 2002-02-21 Fernando Perez <fperez@colorado.edu>
3593
3600
3594 * Released 0.2.7 (mainly to publish the scoping fix).
3601 * Released 0.2.7 (mainly to publish the scoping fix).
3595
3602
3596 * IPython/Logger.py (Logger.logstate): added. A corresponding
3603 * IPython/Logger.py (Logger.logstate): added. A corresponding
3597 @logstate magic was created.
3604 @logstate magic was created.
3598
3605
3599 * IPython/Magic.py: fixed nested scoping problem under Python
3606 * IPython/Magic.py: fixed nested scoping problem under Python
3600 2.1.x (automagic wasn't working).
3607 2.1.x (automagic wasn't working).
3601
3608
3602 2002-02-20 Fernando Perez <fperez@colorado.edu>
3609 2002-02-20 Fernando Perez <fperez@colorado.edu>
3603
3610
3604 * Released 0.2.6.
3611 * Released 0.2.6.
3605
3612
3606 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3613 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3607 option so that logs can come out without any headers at all.
3614 option so that logs can come out without any headers at all.
3608
3615
3609 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3616 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3610 SciPy.
3617 SciPy.
3611
3618
3612 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3619 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3613 that embedded IPython calls don't require vars() to be explicitly
3620 that embedded IPython calls don't require vars() to be explicitly
3614 passed. Now they are extracted from the caller's frame (code
3621 passed. Now they are extracted from the caller's frame (code
3615 snatched from Eric Jones' weave). Added better documentation to
3622 snatched from Eric Jones' weave). Added better documentation to
3616 the section on embedding and the example file.
3623 the section on embedding and the example file.
3617
3624
3618 * IPython/genutils.py (page): Changed so that under emacs, it just
3625 * IPython/genutils.py (page): Changed so that under emacs, it just
3619 prints the string. You can then page up and down in the emacs
3626 prints the string. You can then page up and down in the emacs
3620 buffer itself. This is how the builtin help() works.
3627 buffer itself. This is how the builtin help() works.
3621
3628
3622 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3629 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3623 macro scoping: macros need to be executed in the user's namespace
3630 macro scoping: macros need to be executed in the user's namespace
3624 to work as if they had been typed by the user.
3631 to work as if they had been typed by the user.
3625
3632
3626 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3633 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3627 execute automatically (no need to type 'exec...'). They then
3634 execute automatically (no need to type 'exec...'). They then
3628 behave like 'true macros'. The printing system was also modified
3635 behave like 'true macros'. The printing system was also modified
3629 for this to work.
3636 for this to work.
3630
3637
3631 2002-02-19 Fernando Perez <fperez@colorado.edu>
3638 2002-02-19 Fernando Perez <fperez@colorado.edu>
3632
3639
3633 * IPython/genutils.py (page_file): new function for paging files
3640 * IPython/genutils.py (page_file): new function for paging files
3634 in an OS-independent way. Also necessary for file viewing to work
3641 in an OS-independent way. Also necessary for file viewing to work
3635 well inside Emacs buffers.
3642 well inside Emacs buffers.
3636 (page): Added checks for being in an emacs buffer.
3643 (page): Added checks for being in an emacs buffer.
3637 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3644 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3638 same bug in iplib.
3645 same bug in iplib.
3639
3646
3640 2002-02-18 Fernando Perez <fperez@colorado.edu>
3647 2002-02-18 Fernando Perez <fperez@colorado.edu>
3641
3648
3642 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3649 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3643 of readline so that IPython can work inside an Emacs buffer.
3650 of readline so that IPython can work inside an Emacs buffer.
3644
3651
3645 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3652 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3646 method signatures (they weren't really bugs, but it looks cleaner
3653 method signatures (they weren't really bugs, but it looks cleaner
3647 and keeps PyChecker happy).
3654 and keeps PyChecker happy).
3648
3655
3649 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3656 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3650 for implementing various user-defined hooks. Currently only
3657 for implementing various user-defined hooks. Currently only
3651 display is done.
3658 display is done.
3652
3659
3653 * IPython/Prompts.py (CachedOutput._display): changed display
3660 * IPython/Prompts.py (CachedOutput._display): changed display
3654 functions so that they can be dynamically changed by users easily.
3661 functions so that they can be dynamically changed by users easily.
3655
3662
3656 * IPython/Extensions/numeric_formats.py (num_display): added an
3663 * IPython/Extensions/numeric_formats.py (num_display): added an
3657 extension for printing NumPy arrays in flexible manners. It
3664 extension for printing NumPy arrays in flexible manners. It
3658 doesn't do anything yet, but all the structure is in
3665 doesn't do anything yet, but all the structure is in
3659 place. Ultimately the plan is to implement output format control
3666 place. Ultimately the plan is to implement output format control
3660 like in Octave.
3667 like in Octave.
3661
3668
3662 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3669 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3663 methods are found at run-time by all the automatic machinery.
3670 methods are found at run-time by all the automatic machinery.
3664
3671
3665 2002-02-17 Fernando Perez <fperez@colorado.edu>
3672 2002-02-17 Fernando Perez <fperez@colorado.edu>
3666
3673
3667 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3674 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3668 whole file a little.
3675 whole file a little.
3669
3676
3670 * ToDo: closed this document. Now there's a new_design.lyx
3677 * ToDo: closed this document. Now there's a new_design.lyx
3671 document for all new ideas. Added making a pdf of it for the
3678 document for all new ideas. Added making a pdf of it for the
3672 end-user distro.
3679 end-user distro.
3673
3680
3674 * IPython/Logger.py (Logger.switch_log): Created this to replace
3681 * IPython/Logger.py (Logger.switch_log): Created this to replace
3675 logon() and logoff(). It also fixes a nasty crash reported by
3682 logon() and logoff(). It also fixes a nasty crash reported by
3676 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3683 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3677
3684
3678 * IPython/iplib.py (complete): got auto-completion to work with
3685 * IPython/iplib.py (complete): got auto-completion to work with
3679 automagic (I had wanted this for a long time).
3686 automagic (I had wanted this for a long time).
3680
3687
3681 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3688 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3682 to @file, since file() is now a builtin and clashes with automagic
3689 to @file, since file() is now a builtin and clashes with automagic
3683 for @file.
3690 for @file.
3684
3691
3685 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3692 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3686 of this was previously in iplib, which had grown to more than 2000
3693 of this was previously in iplib, which had grown to more than 2000
3687 lines, way too long. No new functionality, but it makes managing
3694 lines, way too long. No new functionality, but it makes managing
3688 the code a bit easier.
3695 the code a bit easier.
3689
3696
3690 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3697 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3691 information to crash reports.
3698 information to crash reports.
3692
3699
3693 2002-02-12 Fernando Perez <fperez@colorado.edu>
3700 2002-02-12 Fernando Perez <fperez@colorado.edu>
3694
3701
3695 * Released 0.2.5.
3702 * Released 0.2.5.
3696
3703
3697 2002-02-11 Fernando Perez <fperez@colorado.edu>
3704 2002-02-11 Fernando Perez <fperez@colorado.edu>
3698
3705
3699 * Wrote a relatively complete Windows installer. It puts
3706 * Wrote a relatively complete Windows installer. It puts
3700 everything in place, creates Start Menu entries and fixes the
3707 everything in place, creates Start Menu entries and fixes the
3701 color issues. Nothing fancy, but it works.
3708 color issues. Nothing fancy, but it works.
3702
3709
3703 2002-02-10 Fernando Perez <fperez@colorado.edu>
3710 2002-02-10 Fernando Perez <fperez@colorado.edu>
3704
3711
3705 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3712 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3706 os.path.expanduser() call so that we can type @run ~/myfile.py and
3713 os.path.expanduser() call so that we can type @run ~/myfile.py and
3707 have thigs work as expected.
3714 have thigs work as expected.
3708
3715
3709 * IPython/genutils.py (page): fixed exception handling so things
3716 * IPython/genutils.py (page): fixed exception handling so things
3710 work both in Unix and Windows correctly. Quitting a pager triggers
3717 work both in Unix and Windows correctly. Quitting a pager triggers
3711 an IOError/broken pipe in Unix, and in windows not finding a pager
3718 an IOError/broken pipe in Unix, and in windows not finding a pager
3712 is also an IOError, so I had to actually look at the return value
3719 is also an IOError, so I had to actually look at the return value
3713 of the exception, not just the exception itself. Should be ok now.
3720 of the exception, not just the exception itself. Should be ok now.
3714
3721
3715 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3722 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3716 modified to allow case-insensitive color scheme changes.
3723 modified to allow case-insensitive color scheme changes.
3717
3724
3718 2002-02-09 Fernando Perez <fperez@colorado.edu>
3725 2002-02-09 Fernando Perez <fperez@colorado.edu>
3719
3726
3720 * IPython/genutils.py (native_line_ends): new function to leave
3727 * IPython/genutils.py (native_line_ends): new function to leave
3721 user config files with os-native line-endings.
3728 user config files with os-native line-endings.
3722
3729
3723 * README and manual updates.
3730 * README and manual updates.
3724
3731
3725 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3732 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3726 instead of StringType to catch Unicode strings.
3733 instead of StringType to catch Unicode strings.
3727
3734
3728 * IPython/genutils.py (filefind): fixed bug for paths with
3735 * IPython/genutils.py (filefind): fixed bug for paths with
3729 embedded spaces (very common in Windows).
3736 embedded spaces (very common in Windows).
3730
3737
3731 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3738 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3732 files under Windows, so that they get automatically associated
3739 files under Windows, so that they get automatically associated
3733 with a text editor. Windows makes it a pain to handle
3740 with a text editor. Windows makes it a pain to handle
3734 extension-less files.
3741 extension-less files.
3735
3742
3736 * IPython/iplib.py (InteractiveShell.init_readline): Made the
3743 * IPython/iplib.py (InteractiveShell.init_readline): Made the
3737 warning about readline only occur for Posix. In Windows there's no
3744 warning about readline only occur for Posix. In Windows there's no
3738 way to get readline, so why bother with the warning.
3745 way to get readline, so why bother with the warning.
3739
3746
3740 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
3747 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
3741 for __str__ instead of dir(self), since dir() changed in 2.2.
3748 for __str__ instead of dir(self), since dir() changed in 2.2.
3742
3749
3743 * Ported to Windows! Tested on XP, I suspect it should work fine
3750 * Ported to Windows! Tested on XP, I suspect it should work fine
3744 on NT/2000, but I don't think it will work on 98 et al. That
3751 on NT/2000, but I don't think it will work on 98 et al. That
3745 series of Windows is such a piece of junk anyway that I won't try
3752 series of Windows is such a piece of junk anyway that I won't try
3746 porting it there. The XP port was straightforward, showed a few
3753 porting it there. The XP port was straightforward, showed a few
3747 bugs here and there (fixed all), in particular some string
3754 bugs here and there (fixed all), in particular some string
3748 handling stuff which required considering Unicode strings (which
3755 handling stuff which required considering Unicode strings (which
3749 Windows uses). This is good, but hasn't been too tested :) No
3756 Windows uses). This is good, but hasn't been too tested :) No
3750 fancy installer yet, I'll put a note in the manual so people at
3757 fancy installer yet, I'll put a note in the manual so people at
3751 least make manually a shortcut.
3758 least make manually a shortcut.
3752
3759
3753 * IPython/iplib.py (Magic.magic_colors): Unified the color options
3760 * IPython/iplib.py (Magic.magic_colors): Unified the color options
3754 into a single one, "colors". This now controls both prompt and
3761 into a single one, "colors". This now controls both prompt and
3755 exception color schemes, and can be changed both at startup
3762 exception color schemes, and can be changed both at startup
3756 (either via command-line switches or via ipythonrc files) and at
3763 (either via command-line switches or via ipythonrc files) and at
3757 runtime, with @colors.
3764 runtime, with @colors.
3758 (Magic.magic_run): renamed @prun to @run and removed the old
3765 (Magic.magic_run): renamed @prun to @run and removed the old
3759 @run. The two were too similar to warrant keeping both.
3766 @run. The two were too similar to warrant keeping both.
3760
3767
3761 2002-02-03 Fernando Perez <fperez@colorado.edu>
3768 2002-02-03 Fernando Perez <fperez@colorado.edu>
3762
3769
3763 * IPython/iplib.py (install_first_time): Added comment on how to
3770 * IPython/iplib.py (install_first_time): Added comment on how to
3764 configure the color options for first-time users. Put a <return>
3771 configure the color options for first-time users. Put a <return>
3765 request at the end so that small-terminal users get a chance to
3772 request at the end so that small-terminal users get a chance to
3766 read the startup info.
3773 read the startup info.
3767
3774
3768 2002-01-23 Fernando Perez <fperez@colorado.edu>
3775 2002-01-23 Fernando Perez <fperez@colorado.edu>
3769
3776
3770 * IPython/iplib.py (CachedOutput.update): Changed output memory
3777 * IPython/iplib.py (CachedOutput.update): Changed output memory
3771 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
3778 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
3772 input history we still use _i. Did this b/c these variable are
3779 input history we still use _i. Did this b/c these variable are
3773 very commonly used in interactive work, so the less we need to
3780 very commonly used in interactive work, so the less we need to
3774 type the better off we are.
3781 type the better off we are.
3775 (Magic.magic_prun): updated @prun to better handle the namespaces
3782 (Magic.magic_prun): updated @prun to better handle the namespaces
3776 the file will run in, including a fix for __name__ not being set
3783 the file will run in, including a fix for __name__ not being set
3777 before.
3784 before.
3778
3785
3779 2002-01-20 Fernando Perez <fperez@colorado.edu>
3786 2002-01-20 Fernando Perez <fperez@colorado.edu>
3780
3787
3781 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
3788 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
3782 extra garbage for Python 2.2. Need to look more carefully into
3789 extra garbage for Python 2.2. Need to look more carefully into
3783 this later.
3790 this later.
3784
3791
3785 2002-01-19 Fernando Perez <fperez@colorado.edu>
3792 2002-01-19 Fernando Perez <fperez@colorado.edu>
3786
3793
3787 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
3794 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
3788 display SyntaxError exceptions properly formatted when they occur
3795 display SyntaxError exceptions properly formatted when they occur
3789 (they can be triggered by imported code).
3796 (they can be triggered by imported code).
3790
3797
3791 2002-01-18 Fernando Perez <fperez@colorado.edu>
3798 2002-01-18 Fernando Perez <fperez@colorado.edu>
3792
3799
3793 * IPython/iplib.py (InteractiveShell.safe_execfile): now
3800 * IPython/iplib.py (InteractiveShell.safe_execfile): now
3794 SyntaxError exceptions are reported nicely formatted, instead of
3801 SyntaxError exceptions are reported nicely formatted, instead of
3795 spitting out only offset information as before.
3802 spitting out only offset information as before.
3796 (Magic.magic_prun): Added the @prun function for executing
3803 (Magic.magic_prun): Added the @prun function for executing
3797 programs with command line args inside IPython.
3804 programs with command line args inside IPython.
3798
3805
3799 2002-01-16 Fernando Perez <fperez@colorado.edu>
3806 2002-01-16 Fernando Perez <fperez@colorado.edu>
3800
3807
3801 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
3808 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
3802 to *not* include the last item given in a range. This brings their
3809 to *not* include the last item given in a range. This brings their
3803 behavior in line with Python's slicing:
3810 behavior in line with Python's slicing:
3804 a[n1:n2] -> a[n1]...a[n2-1]
3811 a[n1:n2] -> a[n1]...a[n2-1]
3805 It may be a bit less convenient, but I prefer to stick to Python's
3812 It may be a bit less convenient, but I prefer to stick to Python's
3806 conventions *everywhere*, so users never have to wonder.
3813 conventions *everywhere*, so users never have to wonder.
3807 (Magic.magic_macro): Added @macro function to ease the creation of
3814 (Magic.magic_macro): Added @macro function to ease the creation of
3808 macros.
3815 macros.
3809
3816
3810 2002-01-05 Fernando Perez <fperez@colorado.edu>
3817 2002-01-05 Fernando Perez <fperez@colorado.edu>
3811
3818
3812 * Released 0.2.4.
3819 * Released 0.2.4.
3813
3820
3814 * IPython/iplib.py (Magic.magic_pdef):
3821 * IPython/iplib.py (Magic.magic_pdef):
3815 (InteractiveShell.safe_execfile): report magic lines and error
3822 (InteractiveShell.safe_execfile): report magic lines and error
3816 lines without line numbers so one can easily copy/paste them for
3823 lines without line numbers so one can easily copy/paste them for
3817 re-execution.
3824 re-execution.
3818
3825
3819 * Updated manual with recent changes.
3826 * Updated manual with recent changes.
3820
3827
3821 * IPython/iplib.py (Magic.magic_oinfo): added constructor
3828 * IPython/iplib.py (Magic.magic_oinfo): added constructor
3822 docstring printing when class? is called. Very handy for knowing
3829 docstring printing when class? is called. Very handy for knowing
3823 how to create class instances (as long as __init__ is well
3830 how to create class instances (as long as __init__ is well
3824 documented, of course :)
3831 documented, of course :)
3825 (Magic.magic_doc): print both class and constructor docstrings.
3832 (Magic.magic_doc): print both class and constructor docstrings.
3826 (Magic.magic_pdef): give constructor info if passed a class and
3833 (Magic.magic_pdef): give constructor info if passed a class and
3827 __call__ info for callable object instances.
3834 __call__ info for callable object instances.
3828
3835
3829 2002-01-04 Fernando Perez <fperez@colorado.edu>
3836 2002-01-04 Fernando Perez <fperez@colorado.edu>
3830
3837
3831 * Made deep_reload() off by default. It doesn't always work
3838 * Made deep_reload() off by default. It doesn't always work
3832 exactly as intended, so it's probably safer to have it off. It's
3839 exactly as intended, so it's probably safer to have it off. It's
3833 still available as dreload() anyway, so nothing is lost.
3840 still available as dreload() anyway, so nothing is lost.
3834
3841
3835 2002-01-02 Fernando Perez <fperez@colorado.edu>
3842 2002-01-02 Fernando Perez <fperez@colorado.edu>
3836
3843
3837 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
3844 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
3838 so I wanted an updated release).
3845 so I wanted an updated release).
3839
3846
3840 2001-12-27 Fernando Perez <fperez@colorado.edu>
3847 2001-12-27 Fernando Perez <fperez@colorado.edu>
3841
3848
3842 * IPython/iplib.py (InteractiveShell.interact): Added the original
3849 * IPython/iplib.py (InteractiveShell.interact): Added the original
3843 code from 'code.py' for this module in order to change the
3850 code from 'code.py' for this module in order to change the
3844 handling of a KeyboardInterrupt. This was necessary b/c otherwise
3851 handling of a KeyboardInterrupt. This was necessary b/c otherwise
3845 the history cache would break when the user hit Ctrl-C, and
3852 the history cache would break when the user hit Ctrl-C, and
3846 interact() offers no way to add any hooks to it.
3853 interact() offers no way to add any hooks to it.
3847
3854
3848 2001-12-23 Fernando Perez <fperez@colorado.edu>
3855 2001-12-23 Fernando Perez <fperez@colorado.edu>
3849
3856
3850 * setup.py: added check for 'MANIFEST' before trying to remove
3857 * setup.py: added check for 'MANIFEST' before trying to remove
3851 it. Thanks to Sean Reifschneider.
3858 it. Thanks to Sean Reifschneider.
3852
3859
3853 2001-12-22 Fernando Perez <fperez@colorado.edu>
3860 2001-12-22 Fernando Perez <fperez@colorado.edu>
3854
3861
3855 * Released 0.2.2.
3862 * Released 0.2.2.
3856
3863
3857 * Finished (reasonably) writing the manual. Later will add the
3864 * Finished (reasonably) writing the manual. Later will add the
3858 python-standard navigation stylesheets, but for the time being
3865 python-standard navigation stylesheets, but for the time being
3859 it's fairly complete. Distribution will include html and pdf
3866 it's fairly complete. Distribution will include html and pdf
3860 versions.
3867 versions.
3861
3868
3862 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
3869 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
3863 (MayaVi author).
3870 (MayaVi author).
3864
3871
3865 2001-12-21 Fernando Perez <fperez@colorado.edu>
3872 2001-12-21 Fernando Perez <fperez@colorado.edu>
3866
3873
3867 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
3874 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
3868 good public release, I think (with the manual and the distutils
3875 good public release, I think (with the manual and the distutils
3869 installer). The manual can use some work, but that can go
3876 installer). The manual can use some work, but that can go
3870 slowly. Otherwise I think it's quite nice for end users. Next
3877 slowly. Otherwise I think it's quite nice for end users. Next
3871 summer, rewrite the guts of it...
3878 summer, rewrite the guts of it...
3872
3879
3873 * Changed format of ipythonrc files to use whitespace as the
3880 * Changed format of ipythonrc files to use whitespace as the
3874 separator instead of an explicit '='. Cleaner.
3881 separator instead of an explicit '='. Cleaner.
3875
3882
3876 2001-12-20 Fernando Perez <fperez@colorado.edu>
3883 2001-12-20 Fernando Perez <fperez@colorado.edu>
3877
3884
3878 * Started a manual in LyX. For now it's just a quick merge of the
3885 * Started a manual in LyX. For now it's just a quick merge of the
3879 various internal docstrings and READMEs. Later it may grow into a
3886 various internal docstrings and READMEs. Later it may grow into a
3880 nice, full-blown manual.
3887 nice, full-blown manual.
3881
3888
3882 * Set up a distutils based installer. Installation should now be
3889 * Set up a distutils based installer. Installation should now be
3883 trivially simple for end-users.
3890 trivially simple for end-users.
3884
3891
3885 2001-12-11 Fernando Perez <fperez@colorado.edu>
3892 2001-12-11 Fernando Perez <fperez@colorado.edu>
3886
3893
3887 * Released 0.2.0. First public release, announced it at
3894 * Released 0.2.0. First public release, announced it at
3888 comp.lang.python. From now on, just bugfixes...
3895 comp.lang.python. From now on, just bugfixes...
3889
3896
3890 * Went through all the files, set copyright/license notices and
3897 * Went through all the files, set copyright/license notices and
3891 cleaned up things. Ready for release.
3898 cleaned up things. Ready for release.
3892
3899
3893 2001-12-10 Fernando Perez <fperez@colorado.edu>
3900 2001-12-10 Fernando Perez <fperez@colorado.edu>
3894
3901
3895 * Changed the first-time installer not to use tarfiles. It's more
3902 * Changed the first-time installer not to use tarfiles. It's more
3896 robust now and less unix-dependent. Also makes it easier for
3903 robust now and less unix-dependent. Also makes it easier for
3897 people to later upgrade versions.
3904 people to later upgrade versions.
3898
3905
3899 * Changed @exit to @abort to reflect the fact that it's pretty
3906 * Changed @exit to @abort to reflect the fact that it's pretty
3900 brutal (a sys.exit()). The difference between @abort and Ctrl-D
3907 brutal (a sys.exit()). The difference between @abort and Ctrl-D
3901 becomes significant only when IPyhton is embedded: in that case,
3908 becomes significant only when IPyhton is embedded: in that case,
3902 C-D closes IPython only, but @abort kills the enclosing program
3909 C-D closes IPython only, but @abort kills the enclosing program
3903 too (unless it had called IPython inside a try catching
3910 too (unless it had called IPython inside a try catching
3904 SystemExit).
3911 SystemExit).
3905
3912
3906 * Created Shell module which exposes the actuall IPython Shell
3913 * Created Shell module which exposes the actuall IPython Shell
3907 classes, currently the normal and the embeddable one. This at
3914 classes, currently the normal and the embeddable one. This at
3908 least offers a stable interface we won't need to change when
3915 least offers a stable interface we won't need to change when
3909 (later) the internals are rewritten. That rewrite will be confined
3916 (later) the internals are rewritten. That rewrite will be confined
3910 to iplib and ipmaker, but the Shell interface should remain as is.
3917 to iplib and ipmaker, but the Shell interface should remain as is.
3911
3918
3912 * Added embed module which offers an embeddable IPShell object,
3919 * Added embed module which offers an embeddable IPShell object,
3913 useful to fire up IPython *inside* a running program. Great for
3920 useful to fire up IPython *inside* a running program. Great for
3914 debugging or dynamical data analysis.
3921 debugging or dynamical data analysis.
3915
3922
3916 2001-12-08 Fernando Perez <fperez@colorado.edu>
3923 2001-12-08 Fernando Perez <fperez@colorado.edu>
3917
3924
3918 * Fixed small bug preventing seeing info from methods of defined
3925 * Fixed small bug preventing seeing info from methods of defined
3919 objects (incorrect namespace in _ofind()).
3926 objects (incorrect namespace in _ofind()).
3920
3927
3921 * Documentation cleanup. Moved the main usage docstrings to a
3928 * Documentation cleanup. Moved the main usage docstrings to a
3922 separate file, usage.py (cleaner to maintain, and hopefully in the
3929 separate file, usage.py (cleaner to maintain, and hopefully in the
3923 future some perlpod-like way of producing interactive, man and
3930 future some perlpod-like way of producing interactive, man and
3924 html docs out of it will be found).
3931 html docs out of it will be found).
3925
3932
3926 * Added @profile to see your profile at any time.
3933 * Added @profile to see your profile at any time.
3927
3934
3928 * Added @p as an alias for 'print'. It's especially convenient if
3935 * Added @p as an alias for 'print'. It's especially convenient if
3929 using automagic ('p x' prints x).
3936 using automagic ('p x' prints x).
3930
3937
3931 * Small cleanups and fixes after a pychecker run.
3938 * Small cleanups and fixes after a pychecker run.
3932
3939
3933 * Changed the @cd command to handle @cd - and @cd -<n> for
3940 * Changed the @cd command to handle @cd - and @cd -<n> for
3934 visiting any directory in _dh.
3941 visiting any directory in _dh.
3935
3942
3936 * Introduced _dh, a history of visited directories. @dhist prints
3943 * Introduced _dh, a history of visited directories. @dhist prints
3937 it out with numbers.
3944 it out with numbers.
3938
3945
3939 2001-12-07 Fernando Perez <fperez@colorado.edu>
3946 2001-12-07 Fernando Perez <fperez@colorado.edu>
3940
3947
3941 * Released 0.1.22
3948 * Released 0.1.22
3942
3949
3943 * Made initialization a bit more robust against invalid color
3950 * Made initialization a bit more robust against invalid color
3944 options in user input (exit, not traceback-crash).
3951 options in user input (exit, not traceback-crash).
3945
3952
3946 * Changed the bug crash reporter to write the report only in the
3953 * Changed the bug crash reporter to write the report only in the
3947 user's .ipython directory. That way IPython won't litter people's
3954 user's .ipython directory. That way IPython won't litter people's
3948 hard disks with crash files all over the place. Also print on
3955 hard disks with crash files all over the place. Also print on
3949 screen the necessary mail command.
3956 screen the necessary mail command.
3950
3957
3951 * With the new ultraTB, implemented LightBG color scheme for light
3958 * With the new ultraTB, implemented LightBG color scheme for light
3952 background terminals. A lot of people like white backgrounds, so I
3959 background terminals. A lot of people like white backgrounds, so I
3953 guess we should at least give them something readable.
3960 guess we should at least give them something readable.
3954
3961
3955 2001-12-06 Fernando Perez <fperez@colorado.edu>
3962 2001-12-06 Fernando Perez <fperez@colorado.edu>
3956
3963
3957 * Modified the structure of ultraTB. Now there's a proper class
3964 * Modified the structure of ultraTB. Now there's a proper class
3958 for tables of color schemes which allow adding schemes easily and
3965 for tables of color schemes which allow adding schemes easily and
3959 switching the active scheme without creating a new instance every
3966 switching the active scheme without creating a new instance every
3960 time (which was ridiculous). The syntax for creating new schemes
3967 time (which was ridiculous). The syntax for creating new schemes
3961 is also cleaner. I think ultraTB is finally done, with a clean
3968 is also cleaner. I think ultraTB is finally done, with a clean
3962 class structure. Names are also much cleaner (now there's proper
3969 class structure. Names are also much cleaner (now there's proper
3963 color tables, no need for every variable to also have 'color' in
3970 color tables, no need for every variable to also have 'color' in
3964 its name).
3971 its name).
3965
3972
3966 * Broke down genutils into separate files. Now genutils only
3973 * Broke down genutils into separate files. Now genutils only
3967 contains utility functions, and classes have been moved to their
3974 contains utility functions, and classes have been moved to their
3968 own files (they had enough independent functionality to warrant
3975 own files (they had enough independent functionality to warrant
3969 it): ConfigLoader, OutputTrap, Struct.
3976 it): ConfigLoader, OutputTrap, Struct.
3970
3977
3971 2001-12-05 Fernando Perez <fperez@colorado.edu>
3978 2001-12-05 Fernando Perez <fperez@colorado.edu>
3972
3979
3973 * IPython turns 21! Released version 0.1.21, as a candidate for
3980 * IPython turns 21! Released version 0.1.21, as a candidate for
3974 public consumption. If all goes well, release in a few days.
3981 public consumption. If all goes well, release in a few days.
3975
3982
3976 * Fixed path bug (files in Extensions/ directory wouldn't be found
3983 * Fixed path bug (files in Extensions/ directory wouldn't be found
3977 unless IPython/ was explicitly in sys.path).
3984 unless IPython/ was explicitly in sys.path).
3978
3985
3979 * Extended the FlexCompleter class as MagicCompleter to allow
3986 * Extended the FlexCompleter class as MagicCompleter to allow
3980 completion of @-starting lines.
3987 completion of @-starting lines.
3981
3988
3982 * Created __release__.py file as a central repository for release
3989 * Created __release__.py file as a central repository for release
3983 info that other files can read from.
3990 info that other files can read from.
3984
3991
3985 * Fixed small bug in logging: when logging was turned on in
3992 * Fixed small bug in logging: when logging was turned on in
3986 mid-session, old lines with special meanings (!@?) were being
3993 mid-session, old lines with special meanings (!@?) were being
3987 logged without the prepended comment, which is necessary since
3994 logged without the prepended comment, which is necessary since
3988 they are not truly valid python syntax. This should make session
3995 they are not truly valid python syntax. This should make session
3989 restores produce less errors.
3996 restores produce less errors.
3990
3997
3991 * The namespace cleanup forced me to make a FlexCompleter class
3998 * The namespace cleanup forced me to make a FlexCompleter class
3992 which is nothing but a ripoff of rlcompleter, but with selectable
3999 which is nothing but a ripoff of rlcompleter, but with selectable
3993 namespace (rlcompleter only works in __main__.__dict__). I'll try
4000 namespace (rlcompleter only works in __main__.__dict__). I'll try
3994 to submit a note to the authors to see if this change can be
4001 to submit a note to the authors to see if this change can be
3995 incorporated in future rlcompleter releases (Dec.6: done)
4002 incorporated in future rlcompleter releases (Dec.6: done)
3996
4003
3997 * More fixes to namespace handling. It was a mess! Now all
4004 * More fixes to namespace handling. It was a mess! Now all
3998 explicit references to __main__.__dict__ are gone (except when
4005 explicit references to __main__.__dict__ are gone (except when
3999 really needed) and everything is handled through the namespace
4006 really needed) and everything is handled through the namespace
4000 dicts in the IPython instance. We seem to be getting somewhere
4007 dicts in the IPython instance. We seem to be getting somewhere
4001 with this, finally...
4008 with this, finally...
4002
4009
4003 * Small documentation updates.
4010 * Small documentation updates.
4004
4011
4005 * Created the Extensions directory under IPython (with an
4012 * Created the Extensions directory under IPython (with an
4006 __init__.py). Put the PhysicalQ stuff there. This directory should
4013 __init__.py). Put the PhysicalQ stuff there. This directory should
4007 be used for all special-purpose extensions.
4014 be used for all special-purpose extensions.
4008
4015
4009 * File renaming:
4016 * File renaming:
4010 ipythonlib --> ipmaker
4017 ipythonlib --> ipmaker
4011 ipplib --> iplib
4018 ipplib --> iplib
4012 This makes a bit more sense in terms of what these files actually do.
4019 This makes a bit more sense in terms of what these files actually do.
4013
4020
4014 * Moved all the classes and functions in ipythonlib to ipplib, so
4021 * Moved all the classes and functions in ipythonlib to ipplib, so
4015 now ipythonlib only has make_IPython(). This will ease up its
4022 now ipythonlib only has make_IPython(). This will ease up its
4016 splitting in smaller functional chunks later.
4023 splitting in smaller functional chunks later.
4017
4024
4018 * Cleaned up (done, I think) output of @whos. Better column
4025 * Cleaned up (done, I think) output of @whos. Better column
4019 formatting, and now shows str(var) for as much as it can, which is
4026 formatting, and now shows str(var) for as much as it can, which is
4020 typically what one gets with a 'print var'.
4027 typically what one gets with a 'print var'.
4021
4028
4022 2001-12-04 Fernando Perez <fperez@colorado.edu>
4029 2001-12-04 Fernando Perez <fperez@colorado.edu>
4023
4030
4024 * Fixed namespace problems. Now builtin/IPyhton/user names get
4031 * Fixed namespace problems. Now builtin/IPyhton/user names get
4025 properly reported in their namespace. Internal namespace handling
4032 properly reported in their namespace. Internal namespace handling
4026 is finally getting decent (not perfect yet, but much better than
4033 is finally getting decent (not perfect yet, but much better than
4027 the ad-hoc mess we had).
4034 the ad-hoc mess we had).
4028
4035
4029 * Removed -exit option. If people just want to run a python
4036 * Removed -exit option. If people just want to run a python
4030 script, that's what the normal interpreter is for. Less
4037 script, that's what the normal interpreter is for. Less
4031 unnecessary options, less chances for bugs.
4038 unnecessary options, less chances for bugs.
4032
4039
4033 * Added a crash handler which generates a complete post-mortem if
4040 * Added a crash handler which generates a complete post-mortem if
4034 IPython crashes. This will help a lot in tracking bugs down the
4041 IPython crashes. This will help a lot in tracking bugs down the
4035 road.
4042 road.
4036
4043
4037 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4044 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4038 which were boud to functions being reassigned would bypass the
4045 which were boud to functions being reassigned would bypass the
4039 logger, breaking the sync of _il with the prompt counter. This
4046 logger, breaking the sync of _il with the prompt counter. This
4040 would then crash IPython later when a new line was logged.
4047 would then crash IPython later when a new line was logged.
4041
4048
4042 2001-12-02 Fernando Perez <fperez@colorado.edu>
4049 2001-12-02 Fernando Perez <fperez@colorado.edu>
4043
4050
4044 * Made IPython a package. This means people don't have to clutter
4051 * Made IPython a package. This means people don't have to clutter
4045 their sys.path with yet another directory. Changed the INSTALL
4052 their sys.path with yet another directory. Changed the INSTALL
4046 file accordingly.
4053 file accordingly.
4047
4054
4048 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4055 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4049 sorts its output (so @who shows it sorted) and @whos formats the
4056 sorts its output (so @who shows it sorted) and @whos formats the
4050 table according to the width of the first column. Nicer, easier to
4057 table according to the width of the first column. Nicer, easier to
4051 read. Todo: write a generic table_format() which takes a list of
4058 read. Todo: write a generic table_format() which takes a list of
4052 lists and prints it nicely formatted, with optional row/column
4059 lists and prints it nicely formatted, with optional row/column
4053 separators and proper padding and justification.
4060 separators and proper padding and justification.
4054
4061
4055 * Released 0.1.20
4062 * Released 0.1.20
4056
4063
4057 * Fixed bug in @log which would reverse the inputcache list (a
4064 * Fixed bug in @log which would reverse the inputcache list (a
4058 copy operation was missing).
4065 copy operation was missing).
4059
4066
4060 * Code cleanup. @config was changed to use page(). Better, since
4067 * Code cleanup. @config was changed to use page(). Better, since
4061 its output is always quite long.
4068 its output is always quite long.
4062
4069
4063 * Itpl is back as a dependency. I was having too many problems
4070 * Itpl is back as a dependency. I was having too many problems
4064 getting the parametric aliases to work reliably, and it's just
4071 getting the parametric aliases to work reliably, and it's just
4065 easier to code weird string operations with it than playing %()s
4072 easier to code weird string operations with it than playing %()s
4066 games. It's only ~6k, so I don't think it's too big a deal.
4073 games. It's only ~6k, so I don't think it's too big a deal.
4067
4074
4068 * Found (and fixed) a very nasty bug with history. !lines weren't
4075 * Found (and fixed) a very nasty bug with history. !lines weren't
4069 getting cached, and the out of sync caches would crash
4076 getting cached, and the out of sync caches would crash
4070 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4077 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4071 division of labor a bit better. Bug fixed, cleaner structure.
4078 division of labor a bit better. Bug fixed, cleaner structure.
4072
4079
4073 2001-12-01 Fernando Perez <fperez@colorado.edu>
4080 2001-12-01 Fernando Perez <fperez@colorado.edu>
4074
4081
4075 * Released 0.1.19
4082 * Released 0.1.19
4076
4083
4077 * Added option -n to @hist to prevent line number printing. Much
4084 * Added option -n to @hist to prevent line number printing. Much
4078 easier to copy/paste code this way.
4085 easier to copy/paste code this way.
4079
4086
4080 * Created global _il to hold the input list. Allows easy
4087 * Created global _il to hold the input list. Allows easy
4081 re-execution of blocks of code by slicing it (inspired by Janko's
4088 re-execution of blocks of code by slicing it (inspired by Janko's
4082 comment on 'macros').
4089 comment on 'macros').
4083
4090
4084 * Small fixes and doc updates.
4091 * Small fixes and doc updates.
4085
4092
4086 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4093 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4087 much too fragile with automagic. Handles properly multi-line
4094 much too fragile with automagic. Handles properly multi-line
4088 statements and takes parameters.
4095 statements and takes parameters.
4089
4096
4090 2001-11-30 Fernando Perez <fperez@colorado.edu>
4097 2001-11-30 Fernando Perez <fperez@colorado.edu>
4091
4098
4092 * Version 0.1.18 released.
4099 * Version 0.1.18 released.
4093
4100
4094 * Fixed nasty namespace bug in initial module imports.
4101 * Fixed nasty namespace bug in initial module imports.
4095
4102
4096 * Added copyright/license notes to all code files (except
4103 * Added copyright/license notes to all code files (except
4097 DPyGetOpt). For the time being, LGPL. That could change.
4104 DPyGetOpt). For the time being, LGPL. That could change.
4098
4105
4099 * Rewrote a much nicer README, updated INSTALL, cleaned up
4106 * Rewrote a much nicer README, updated INSTALL, cleaned up
4100 ipythonrc-* samples.
4107 ipythonrc-* samples.
4101
4108
4102 * Overall code/documentation cleanup. Basically ready for
4109 * Overall code/documentation cleanup. Basically ready for
4103 release. Only remaining thing: licence decision (LGPL?).
4110 release. Only remaining thing: licence decision (LGPL?).
4104
4111
4105 * Converted load_config to a class, ConfigLoader. Now recursion
4112 * Converted load_config to a class, ConfigLoader. Now recursion
4106 control is better organized. Doesn't include the same file twice.
4113 control is better organized. Doesn't include the same file twice.
4107
4114
4108 2001-11-29 Fernando Perez <fperez@colorado.edu>
4115 2001-11-29 Fernando Perez <fperez@colorado.edu>
4109
4116
4110 * Got input history working. Changed output history variables from
4117 * Got input history working. Changed output history variables from
4111 _p to _o so that _i is for input and _o for output. Just cleaner
4118 _p to _o so that _i is for input and _o for output. Just cleaner
4112 convention.
4119 convention.
4113
4120
4114 * Implemented parametric aliases. This pretty much allows the
4121 * Implemented parametric aliases. This pretty much allows the
4115 alias system to offer full-blown shell convenience, I think.
4122 alias system to offer full-blown shell convenience, I think.
4116
4123
4117 * Version 0.1.17 released, 0.1.18 opened.
4124 * Version 0.1.17 released, 0.1.18 opened.
4118
4125
4119 * dot_ipython/ipythonrc (alias): added documentation.
4126 * dot_ipython/ipythonrc (alias): added documentation.
4120 (xcolor): Fixed small bug (xcolors -> xcolor)
4127 (xcolor): Fixed small bug (xcolors -> xcolor)
4121
4128
4122 * Changed the alias system. Now alias is a magic command to define
4129 * Changed the alias system. Now alias is a magic command to define
4123 aliases just like the shell. Rationale: the builtin magics should
4130 aliases just like the shell. Rationale: the builtin magics should
4124 be there for things deeply connected to IPython's
4131 be there for things deeply connected to IPython's
4125 architecture. And this is a much lighter system for what I think
4132 architecture. And this is a much lighter system for what I think
4126 is the really important feature: allowing users to define quickly
4133 is the really important feature: allowing users to define quickly
4127 magics that will do shell things for them, so they can customize
4134 magics that will do shell things for them, so they can customize
4128 IPython easily to match their work habits. If someone is really
4135 IPython easily to match their work habits. If someone is really
4129 desperate to have another name for a builtin alias, they can
4136 desperate to have another name for a builtin alias, they can
4130 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4137 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4131 works.
4138 works.
4132
4139
4133 2001-11-28 Fernando Perez <fperez@colorado.edu>
4140 2001-11-28 Fernando Perez <fperez@colorado.edu>
4134
4141
4135 * Changed @file so that it opens the source file at the proper
4142 * Changed @file so that it opens the source file at the proper
4136 line. Since it uses less, if your EDITOR environment is
4143 line. Since it uses less, if your EDITOR environment is
4137 configured, typing v will immediately open your editor of choice
4144 configured, typing v will immediately open your editor of choice
4138 right at the line where the object is defined. Not as quick as
4145 right at the line where the object is defined. Not as quick as
4139 having a direct @edit command, but for all intents and purposes it
4146 having a direct @edit command, but for all intents and purposes it
4140 works. And I don't have to worry about writing @edit to deal with
4147 works. And I don't have to worry about writing @edit to deal with
4141 all the editors, less does that.
4148 all the editors, less does that.
4142
4149
4143 * Version 0.1.16 released, 0.1.17 opened.
4150 * Version 0.1.16 released, 0.1.17 opened.
4144
4151
4145 * Fixed some nasty bugs in the page/page_dumb combo that could
4152 * Fixed some nasty bugs in the page/page_dumb combo that could
4146 crash IPython.
4153 crash IPython.
4147
4154
4148 2001-11-27 Fernando Perez <fperez@colorado.edu>
4155 2001-11-27 Fernando Perez <fperez@colorado.edu>
4149
4156
4150 * Version 0.1.15 released, 0.1.16 opened.
4157 * Version 0.1.15 released, 0.1.16 opened.
4151
4158
4152 * Finally got ? and ?? to work for undefined things: now it's
4159 * Finally got ? and ?? to work for undefined things: now it's
4153 possible to type {}.get? and get information about the get method
4160 possible to type {}.get? and get information about the get method
4154 of dicts, or os.path? even if only os is defined (so technically
4161 of dicts, or os.path? even if only os is defined (so technically
4155 os.path isn't). Works at any level. For example, after import os,
4162 os.path isn't). Works at any level. For example, after import os,
4156 os?, os.path?, os.path.abspath? all work. This is great, took some
4163 os?, os.path?, os.path.abspath? all work. This is great, took some
4157 work in _ofind.
4164 work in _ofind.
4158
4165
4159 * Fixed more bugs with logging. The sanest way to do it was to add
4166 * Fixed more bugs with logging. The sanest way to do it was to add
4160 to @log a 'mode' parameter. Killed two in one shot (this mode
4167 to @log a 'mode' parameter. Killed two in one shot (this mode
4161 option was a request of Janko's). I think it's finally clean
4168 option was a request of Janko's). I think it's finally clean
4162 (famous last words).
4169 (famous last words).
4163
4170
4164 * Added a page_dumb() pager which does a decent job of paging on
4171 * Added a page_dumb() pager which does a decent job of paging on
4165 screen, if better things (like less) aren't available. One less
4172 screen, if better things (like less) aren't available. One less
4166 unix dependency (someday maybe somebody will port this to
4173 unix dependency (someday maybe somebody will port this to
4167 windows).
4174 windows).
4168
4175
4169 * Fixed problem in magic_log: would lock of logging out if log
4176 * Fixed problem in magic_log: would lock of logging out if log
4170 creation failed (because it would still think it had succeeded).
4177 creation failed (because it would still think it had succeeded).
4171
4178
4172 * Improved the page() function using curses to auto-detect screen
4179 * Improved the page() function using curses to auto-detect screen
4173 size. Now it can make a much better decision on whether to print
4180 size. Now it can make a much better decision on whether to print
4174 or page a string. Option screen_length was modified: a value 0
4181 or page a string. Option screen_length was modified: a value 0
4175 means auto-detect, and that's the default now.
4182 means auto-detect, and that's the default now.
4176
4183
4177 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4184 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4178 go out. I'll test it for a few days, then talk to Janko about
4185 go out. I'll test it for a few days, then talk to Janko about
4179 licences and announce it.
4186 licences and announce it.
4180
4187
4181 * Fixed the length of the auto-generated ---> prompt which appears
4188 * Fixed the length of the auto-generated ---> prompt which appears
4182 for auto-parens and auto-quotes. Getting this right isn't trivial,
4189 for auto-parens and auto-quotes. Getting this right isn't trivial,
4183 with all the color escapes, different prompt types and optional
4190 with all the color escapes, different prompt types and optional
4184 separators. But it seems to be working in all the combinations.
4191 separators. But it seems to be working in all the combinations.
4185
4192
4186 2001-11-26 Fernando Perez <fperez@colorado.edu>
4193 2001-11-26 Fernando Perez <fperez@colorado.edu>
4187
4194
4188 * Wrote a regexp filter to get option types from the option names
4195 * Wrote a regexp filter to get option types from the option names
4189 string. This eliminates the need to manually keep two duplicate
4196 string. This eliminates the need to manually keep two duplicate
4190 lists.
4197 lists.
4191
4198
4192 * Removed the unneeded check_option_names. Now options are handled
4199 * Removed the unneeded check_option_names. Now options are handled
4193 in a much saner manner and it's easy to visually check that things
4200 in a much saner manner and it's easy to visually check that things
4194 are ok.
4201 are ok.
4195
4202
4196 * Updated version numbers on all files I modified to carry a
4203 * Updated version numbers on all files I modified to carry a
4197 notice so Janko and Nathan have clear version markers.
4204 notice so Janko and Nathan have clear version markers.
4198
4205
4199 * Updated docstring for ultraTB with my changes. I should send
4206 * Updated docstring for ultraTB with my changes. I should send
4200 this to Nathan.
4207 this to Nathan.
4201
4208
4202 * Lots of small fixes. Ran everything through pychecker again.
4209 * Lots of small fixes. Ran everything through pychecker again.
4203
4210
4204 * Made loading of deep_reload an cmd line option. If it's not too
4211 * Made loading of deep_reload an cmd line option. If it's not too
4205 kosher, now people can just disable it. With -nodeep_reload it's
4212 kosher, now people can just disable it. With -nodeep_reload it's
4206 still available as dreload(), it just won't overwrite reload().
4213 still available as dreload(), it just won't overwrite reload().
4207
4214
4208 * Moved many options to the no| form (-opt and -noopt
4215 * Moved many options to the no| form (-opt and -noopt
4209 accepted). Cleaner.
4216 accepted). Cleaner.
4210
4217
4211 * Changed magic_log so that if called with no parameters, it uses
4218 * Changed magic_log so that if called with no parameters, it uses
4212 'rotate' mode. That way auto-generated logs aren't automatically
4219 'rotate' mode. That way auto-generated logs aren't automatically
4213 over-written. For normal logs, now a backup is made if it exists
4220 over-written. For normal logs, now a backup is made if it exists
4214 (only 1 level of backups). A new 'backup' mode was added to the
4221 (only 1 level of backups). A new 'backup' mode was added to the
4215 Logger class to support this. This was a request by Janko.
4222 Logger class to support this. This was a request by Janko.
4216
4223
4217 * Added @logoff/@logon to stop/restart an active log.
4224 * Added @logoff/@logon to stop/restart an active log.
4218
4225
4219 * Fixed a lot of bugs in log saving/replay. It was pretty
4226 * Fixed a lot of bugs in log saving/replay. It was pretty
4220 broken. Now special lines (!@,/) appear properly in the command
4227 broken. Now special lines (!@,/) appear properly in the command
4221 history after a log replay.
4228 history after a log replay.
4222
4229
4223 * Tried and failed to implement full session saving via pickle. My
4230 * Tried and failed to implement full session saving via pickle. My
4224 idea was to pickle __main__.__dict__, but modules can't be
4231 idea was to pickle __main__.__dict__, but modules can't be
4225 pickled. This would be a better alternative to replaying logs, but
4232 pickled. This would be a better alternative to replaying logs, but
4226 seems quite tricky to get to work. Changed -session to be called
4233 seems quite tricky to get to work. Changed -session to be called
4227 -logplay, which more accurately reflects what it does. And if we
4234 -logplay, which more accurately reflects what it does. And if we
4228 ever get real session saving working, -session is now available.
4235 ever get real session saving working, -session is now available.
4229
4236
4230 * Implemented color schemes for prompts also. As for tracebacks,
4237 * Implemented color schemes for prompts also. As for tracebacks,
4231 currently only NoColor and Linux are supported. But now the
4238 currently only NoColor and Linux are supported. But now the
4232 infrastructure is in place, based on a generic ColorScheme
4239 infrastructure is in place, based on a generic ColorScheme
4233 class. So writing and activating new schemes both for the prompts
4240 class. So writing and activating new schemes both for the prompts
4234 and the tracebacks should be straightforward.
4241 and the tracebacks should be straightforward.
4235
4242
4236 * Version 0.1.13 released, 0.1.14 opened.
4243 * Version 0.1.13 released, 0.1.14 opened.
4237
4244
4238 * Changed handling of options for output cache. Now counter is
4245 * Changed handling of options for output cache. Now counter is
4239 hardwired starting at 1 and one specifies the maximum number of
4246 hardwired starting at 1 and one specifies the maximum number of
4240 entries *in the outcache* (not the max prompt counter). This is
4247 entries *in the outcache* (not the max prompt counter). This is
4241 much better, since many statements won't increase the cache
4248 much better, since many statements won't increase the cache
4242 count. It also eliminated some confusing options, now there's only
4249 count. It also eliminated some confusing options, now there's only
4243 one: cache_size.
4250 one: cache_size.
4244
4251
4245 * Added 'alias' magic function and magic_alias option in the
4252 * Added 'alias' magic function and magic_alias option in the
4246 ipythonrc file. Now the user can easily define whatever names he
4253 ipythonrc file. Now the user can easily define whatever names he
4247 wants for the magic functions without having to play weird
4254 wants for the magic functions without having to play weird
4248 namespace games. This gives IPython a real shell-like feel.
4255 namespace games. This gives IPython a real shell-like feel.
4249
4256
4250 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4257 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4251 @ or not).
4258 @ or not).
4252
4259
4253 This was one of the last remaining 'visible' bugs (that I know
4260 This was one of the last remaining 'visible' bugs (that I know
4254 of). I think if I can clean up the session loading so it works
4261 of). I think if I can clean up the session loading so it works
4255 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4262 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4256 about licensing).
4263 about licensing).
4257
4264
4258 2001-11-25 Fernando Perez <fperez@colorado.edu>
4265 2001-11-25 Fernando Perez <fperez@colorado.edu>
4259
4266
4260 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4267 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4261 there's a cleaner distinction between what ? and ?? show.
4268 there's a cleaner distinction between what ? and ?? show.
4262
4269
4263 * Added screen_length option. Now the user can define his own
4270 * Added screen_length option. Now the user can define his own
4264 screen size for page() operations.
4271 screen size for page() operations.
4265
4272
4266 * Implemented magic shell-like functions with automatic code
4273 * Implemented magic shell-like functions with automatic code
4267 generation. Now adding another function is just a matter of adding
4274 generation. Now adding another function is just a matter of adding
4268 an entry to a dict, and the function is dynamically generated at
4275 an entry to a dict, and the function is dynamically generated at
4269 run-time. Python has some really cool features!
4276 run-time. Python has some really cool features!
4270
4277
4271 * Renamed many options to cleanup conventions a little. Now all
4278 * Renamed many options to cleanup conventions a little. Now all
4272 are lowercase, and only underscores where needed. Also in the code
4279 are lowercase, and only underscores where needed. Also in the code
4273 option name tables are clearer.
4280 option name tables are clearer.
4274
4281
4275 * Changed prompts a little. Now input is 'In [n]:' instead of
4282 * Changed prompts a little. Now input is 'In [n]:' instead of
4276 'In[n]:='. This allows it the numbers to be aligned with the
4283 'In[n]:='. This allows it the numbers to be aligned with the
4277 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4284 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4278 Python (it was a Mathematica thing). The '...' continuation prompt
4285 Python (it was a Mathematica thing). The '...' continuation prompt
4279 was also changed a little to align better.
4286 was also changed a little to align better.
4280
4287
4281 * Fixed bug when flushing output cache. Not all _p<n> variables
4288 * Fixed bug when flushing output cache. Not all _p<n> variables
4282 exist, so their deletion needs to be wrapped in a try:
4289 exist, so their deletion needs to be wrapped in a try:
4283
4290
4284 * Figured out how to properly use inspect.formatargspec() (it
4291 * Figured out how to properly use inspect.formatargspec() (it
4285 requires the args preceded by *). So I removed all the code from
4292 requires the args preceded by *). So I removed all the code from
4286 _get_pdef in Magic, which was just replicating that.
4293 _get_pdef in Magic, which was just replicating that.
4287
4294
4288 * Added test to prefilter to allow redefining magic function names
4295 * Added test to prefilter to allow redefining magic function names
4289 as variables. This is ok, since the @ form is always available,
4296 as variables. This is ok, since the @ form is always available,
4290 but whe should allow the user to define a variable called 'ls' if
4297 but whe should allow the user to define a variable called 'ls' if
4291 he needs it.
4298 he needs it.
4292
4299
4293 * Moved the ToDo information from README into a separate ToDo.
4300 * Moved the ToDo information from README into a separate ToDo.
4294
4301
4295 * General code cleanup and small bugfixes. I think it's close to a
4302 * General code cleanup and small bugfixes. I think it's close to a
4296 state where it can be released, obviously with a big 'beta'
4303 state where it can be released, obviously with a big 'beta'
4297 warning on it.
4304 warning on it.
4298
4305
4299 * Got the magic function split to work. Now all magics are defined
4306 * Got the magic function split to work. Now all magics are defined
4300 in a separate class. It just organizes things a bit, and now
4307 in a separate class. It just organizes things a bit, and now
4301 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4308 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4302 was too long).
4309 was too long).
4303
4310
4304 * Changed @clear to @reset to avoid potential confusions with
4311 * Changed @clear to @reset to avoid potential confusions with
4305 the shell command clear. Also renamed @cl to @clear, which does
4312 the shell command clear. Also renamed @cl to @clear, which does
4306 exactly what people expect it to from their shell experience.
4313 exactly what people expect it to from their shell experience.
4307
4314
4308 Added a check to the @reset command (since it's so
4315 Added a check to the @reset command (since it's so
4309 destructive, it's probably a good idea to ask for confirmation).
4316 destructive, it's probably a good idea to ask for confirmation).
4310 But now reset only works for full namespace resetting. Since the
4317 But now reset only works for full namespace resetting. Since the
4311 del keyword is already there for deleting a few specific
4318 del keyword is already there for deleting a few specific
4312 variables, I don't see the point of having a redundant magic
4319 variables, I don't see the point of having a redundant magic
4313 function for the same task.
4320 function for the same task.
4314
4321
4315 2001-11-24 Fernando Perez <fperez@colorado.edu>
4322 2001-11-24 Fernando Perez <fperez@colorado.edu>
4316
4323
4317 * Updated the builtin docs (esp. the ? ones).
4324 * Updated the builtin docs (esp. the ? ones).
4318
4325
4319 * Ran all the code through pychecker. Not terribly impressed with
4326 * Ran all the code through pychecker. Not terribly impressed with
4320 it: lots of spurious warnings and didn't really find anything of
4327 it: lots of spurious warnings and didn't really find anything of
4321 substance (just a few modules being imported and not used).
4328 substance (just a few modules being imported and not used).
4322
4329
4323 * Implemented the new ultraTB functionality into IPython. New
4330 * Implemented the new ultraTB functionality into IPython. New
4324 option: xcolors. This chooses color scheme. xmode now only selects
4331 option: xcolors. This chooses color scheme. xmode now only selects
4325 between Plain and Verbose. Better orthogonality.
4332 between Plain and Verbose. Better orthogonality.
4326
4333
4327 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4334 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4328 mode and color scheme for the exception handlers. Now it's
4335 mode and color scheme for the exception handlers. Now it's
4329 possible to have the verbose traceback with no coloring.
4336 possible to have the verbose traceback with no coloring.
4330
4337
4331 2001-11-23 Fernando Perez <fperez@colorado.edu>
4338 2001-11-23 Fernando Perez <fperez@colorado.edu>
4332
4339
4333 * Version 0.1.12 released, 0.1.13 opened.
4340 * Version 0.1.12 released, 0.1.13 opened.
4334
4341
4335 * Removed option to set auto-quote and auto-paren escapes by
4342 * Removed option to set auto-quote and auto-paren escapes by
4336 user. The chances of breaking valid syntax are just too high. If
4343 user. The chances of breaking valid syntax are just too high. If
4337 someone *really* wants, they can always dig into the code.
4344 someone *really* wants, they can always dig into the code.
4338
4345
4339 * Made prompt separators configurable.
4346 * Made prompt separators configurable.
4340
4347
4341 2001-11-22 Fernando Perez <fperez@colorado.edu>
4348 2001-11-22 Fernando Perez <fperez@colorado.edu>
4342
4349
4343 * Small bugfixes in many places.
4350 * Small bugfixes in many places.
4344
4351
4345 * Removed the MyCompleter class from ipplib. It seemed redundant
4352 * Removed the MyCompleter class from ipplib. It seemed redundant
4346 with the C-p,C-n history search functionality. Less code to
4353 with the C-p,C-n history search functionality. Less code to
4347 maintain.
4354 maintain.
4348
4355
4349 * Moved all the original ipython.py code into ipythonlib.py. Right
4356 * Moved all the original ipython.py code into ipythonlib.py. Right
4350 now it's just one big dump into a function called make_IPython, so
4357 now it's just one big dump into a function called make_IPython, so
4351 no real modularity has been gained. But at least it makes the
4358 no real modularity has been gained. But at least it makes the
4352 wrapper script tiny, and since ipythonlib is a module, it gets
4359 wrapper script tiny, and since ipythonlib is a module, it gets
4353 compiled and startup is much faster.
4360 compiled and startup is much faster.
4354
4361
4355 This is a reasobably 'deep' change, so we should test it for a
4362 This is a reasobably 'deep' change, so we should test it for a
4356 while without messing too much more with the code.
4363 while without messing too much more with the code.
4357
4364
4358 2001-11-21 Fernando Perez <fperez@colorado.edu>
4365 2001-11-21 Fernando Perez <fperez@colorado.edu>
4359
4366
4360 * Version 0.1.11 released, 0.1.12 opened for further work.
4367 * Version 0.1.11 released, 0.1.12 opened for further work.
4361
4368
4362 * Removed dependency on Itpl. It was only needed in one place. It
4369 * Removed dependency on Itpl. It was only needed in one place. It
4363 would be nice if this became part of python, though. It makes life
4370 would be nice if this became part of python, though. It makes life
4364 *a lot* easier in some cases.
4371 *a lot* easier in some cases.
4365
4372
4366 * Simplified the prefilter code a bit. Now all handlers are
4373 * Simplified the prefilter code a bit. Now all handlers are
4367 expected to explicitly return a value (at least a blank string).
4374 expected to explicitly return a value (at least a blank string).
4368
4375
4369 * Heavy edits in ipplib. Removed the help system altogether. Now
4376 * Heavy edits in ipplib. Removed the help system altogether. Now
4370 obj?/?? is used for inspecting objects, a magic @doc prints
4377 obj?/?? is used for inspecting objects, a magic @doc prints
4371 docstrings, and full-blown Python help is accessed via the 'help'
4378 docstrings, and full-blown Python help is accessed via the 'help'
4372 keyword. This cleans up a lot of code (less to maintain) and does
4379 keyword. This cleans up a lot of code (less to maintain) and does
4373 the job. Since 'help' is now a standard Python component, might as
4380 the job. Since 'help' is now a standard Python component, might as
4374 well use it and remove duplicate functionality.
4381 well use it and remove duplicate functionality.
4375
4382
4376 Also removed the option to use ipplib as a standalone program. By
4383 Also removed the option to use ipplib as a standalone program. By
4377 now it's too dependent on other parts of IPython to function alone.
4384 now it's too dependent on other parts of IPython to function alone.
4378
4385
4379 * Fixed bug in genutils.pager. It would crash if the pager was
4386 * Fixed bug in genutils.pager. It would crash if the pager was
4380 exited immediately after opening (broken pipe).
4387 exited immediately after opening (broken pipe).
4381
4388
4382 * Trimmed down the VerboseTB reporting a little. The header is
4389 * Trimmed down the VerboseTB reporting a little. The header is
4383 much shorter now and the repeated exception arguments at the end
4390 much shorter now and the repeated exception arguments at the end
4384 have been removed. For interactive use the old header seemed a bit
4391 have been removed. For interactive use the old header seemed a bit
4385 excessive.
4392 excessive.
4386
4393
4387 * Fixed small bug in output of @whos for variables with multi-word
4394 * Fixed small bug in output of @whos for variables with multi-word
4388 types (only first word was displayed).
4395 types (only first word was displayed).
4389
4396
4390 2001-11-17 Fernando Perez <fperez@colorado.edu>
4397 2001-11-17 Fernando Perez <fperez@colorado.edu>
4391
4398
4392 * Version 0.1.10 released, 0.1.11 opened for further work.
4399 * Version 0.1.10 released, 0.1.11 opened for further work.
4393
4400
4394 * Modified dirs and friends. dirs now *returns* the stack (not
4401 * Modified dirs and friends. dirs now *returns* the stack (not
4395 prints), so one can manipulate it as a variable. Convenient to
4402 prints), so one can manipulate it as a variable. Convenient to
4396 travel along many directories.
4403 travel along many directories.
4397
4404
4398 * Fixed bug in magic_pdef: would only work with functions with
4405 * Fixed bug in magic_pdef: would only work with functions with
4399 arguments with default values.
4406 arguments with default values.
4400
4407
4401 2001-11-14 Fernando Perez <fperez@colorado.edu>
4408 2001-11-14 Fernando Perez <fperez@colorado.edu>
4402
4409
4403 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4410 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4404 example with IPython. Various other minor fixes and cleanups.
4411 example with IPython. Various other minor fixes and cleanups.
4405
4412
4406 * Version 0.1.9 released, 0.1.10 opened for further work.
4413 * Version 0.1.9 released, 0.1.10 opened for further work.
4407
4414
4408 * Added sys.path to the list of directories searched in the
4415 * Added sys.path to the list of directories searched in the
4409 execfile= option. It used to be the current directory and the
4416 execfile= option. It used to be the current directory and the
4410 user's IPYTHONDIR only.
4417 user's IPYTHONDIR only.
4411
4418
4412 2001-11-13 Fernando Perez <fperez@colorado.edu>
4419 2001-11-13 Fernando Perez <fperez@colorado.edu>
4413
4420
4414 * Reinstated the raw_input/prefilter separation that Janko had
4421 * Reinstated the raw_input/prefilter separation that Janko had
4415 initially. This gives a more convenient setup for extending the
4422 initially. This gives a more convenient setup for extending the
4416 pre-processor from the outside: raw_input always gets a string,
4423 pre-processor from the outside: raw_input always gets a string,
4417 and prefilter has to process it. We can then redefine prefilter
4424 and prefilter has to process it. We can then redefine prefilter
4418 from the outside and implement extensions for special
4425 from the outside and implement extensions for special
4419 purposes.
4426 purposes.
4420
4427
4421 Today I got one for inputting PhysicalQuantity objects
4428 Today I got one for inputting PhysicalQuantity objects
4422 (from Scientific) without needing any function calls at
4429 (from Scientific) without needing any function calls at
4423 all. Extremely convenient, and it's all done as a user-level
4430 all. Extremely convenient, and it's all done as a user-level
4424 extension (no IPython code was touched). Now instead of:
4431 extension (no IPython code was touched). Now instead of:
4425 a = PhysicalQuantity(4.2,'m/s**2')
4432 a = PhysicalQuantity(4.2,'m/s**2')
4426 one can simply say
4433 one can simply say
4427 a = 4.2 m/s**2
4434 a = 4.2 m/s**2
4428 or even
4435 or even
4429 a = 4.2 m/s^2
4436 a = 4.2 m/s^2
4430
4437
4431 I use this, but it's also a proof of concept: IPython really is
4438 I use this, but it's also a proof of concept: IPython really is
4432 fully user-extensible, even at the level of the parsing of the
4439 fully user-extensible, even at the level of the parsing of the
4433 command line. It's not trivial, but it's perfectly doable.
4440 command line. It's not trivial, but it's perfectly doable.
4434
4441
4435 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4442 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4436 the problem of modules being loaded in the inverse order in which
4443 the problem of modules being loaded in the inverse order in which
4437 they were defined in
4444 they were defined in
4438
4445
4439 * Version 0.1.8 released, 0.1.9 opened for further work.
4446 * Version 0.1.8 released, 0.1.9 opened for further work.
4440
4447
4441 * Added magics pdef, source and file. They respectively show the
4448 * Added magics pdef, source and file. They respectively show the
4442 definition line ('prototype' in C), source code and full python
4449 definition line ('prototype' in C), source code and full python
4443 file for any callable object. The object inspector oinfo uses
4450 file for any callable object. The object inspector oinfo uses
4444 these to show the same information.
4451 these to show the same information.
4445
4452
4446 * Version 0.1.7 released, 0.1.8 opened for further work.
4453 * Version 0.1.7 released, 0.1.8 opened for further work.
4447
4454
4448 * Separated all the magic functions into a class called Magic. The
4455 * Separated all the magic functions into a class called Magic. The
4449 InteractiveShell class was becoming too big for Xemacs to handle
4456 InteractiveShell class was becoming too big for Xemacs to handle
4450 (de-indenting a line would lock it up for 10 seconds while it
4457 (de-indenting a line would lock it up for 10 seconds while it
4451 backtracked on the whole class!)
4458 backtracked on the whole class!)
4452
4459
4453 FIXME: didn't work. It can be done, but right now namespaces are
4460 FIXME: didn't work. It can be done, but right now namespaces are
4454 all messed up. Do it later (reverted it for now, so at least
4461 all messed up. Do it later (reverted it for now, so at least
4455 everything works as before).
4462 everything works as before).
4456
4463
4457 * Got the object introspection system (magic_oinfo) working! I
4464 * Got the object introspection system (magic_oinfo) working! I
4458 think this is pretty much ready for release to Janko, so he can
4465 think this is pretty much ready for release to Janko, so he can
4459 test it for a while and then announce it. Pretty much 100% of what
4466 test it for a while and then announce it. Pretty much 100% of what
4460 I wanted for the 'phase 1' release is ready. Happy, tired.
4467 I wanted for the 'phase 1' release is ready. Happy, tired.
4461
4468
4462 2001-11-12 Fernando Perez <fperez@colorado.edu>
4469 2001-11-12 Fernando Perez <fperez@colorado.edu>
4463
4470
4464 * Version 0.1.6 released, 0.1.7 opened for further work.
4471 * Version 0.1.6 released, 0.1.7 opened for further work.
4465
4472
4466 * Fixed bug in printing: it used to test for truth before
4473 * Fixed bug in printing: it used to test for truth before
4467 printing, so 0 wouldn't print. Now checks for None.
4474 printing, so 0 wouldn't print. Now checks for None.
4468
4475
4469 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4476 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4470 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4477 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4471 reaches by hand into the outputcache. Think of a better way to do
4478 reaches by hand into the outputcache. Think of a better way to do
4472 this later.
4479 this later.
4473
4480
4474 * Various small fixes thanks to Nathan's comments.
4481 * Various small fixes thanks to Nathan's comments.
4475
4482
4476 * Changed magic_pprint to magic_Pprint. This way it doesn't
4483 * Changed magic_pprint to magic_Pprint. This way it doesn't
4477 collide with pprint() and the name is consistent with the command
4484 collide with pprint() and the name is consistent with the command
4478 line option.
4485 line option.
4479
4486
4480 * Changed prompt counter behavior to be fully like
4487 * Changed prompt counter behavior to be fully like
4481 Mathematica's. That is, even input that doesn't return a result
4488 Mathematica's. That is, even input that doesn't return a result
4482 raises the prompt counter. The old behavior was kind of confusing
4489 raises the prompt counter. The old behavior was kind of confusing
4483 (getting the same prompt number several times if the operation
4490 (getting the same prompt number several times if the operation
4484 didn't return a result).
4491 didn't return a result).
4485
4492
4486 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4493 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4487
4494
4488 * Fixed -Classic mode (wasn't working anymore).
4495 * Fixed -Classic mode (wasn't working anymore).
4489
4496
4490 * Added colored prompts using Nathan's new code. Colors are
4497 * Added colored prompts using Nathan's new code. Colors are
4491 currently hardwired, they can be user-configurable. For
4498 currently hardwired, they can be user-configurable. For
4492 developers, they can be chosen in file ipythonlib.py, at the
4499 developers, they can be chosen in file ipythonlib.py, at the
4493 beginning of the CachedOutput class def.
4500 beginning of the CachedOutput class def.
4494
4501
4495 2001-11-11 Fernando Perez <fperez@colorado.edu>
4502 2001-11-11 Fernando Perez <fperez@colorado.edu>
4496
4503
4497 * Version 0.1.5 released, 0.1.6 opened for further work.
4504 * Version 0.1.5 released, 0.1.6 opened for further work.
4498
4505
4499 * Changed magic_env to *return* the environment as a dict (not to
4506 * Changed magic_env to *return* the environment as a dict (not to
4500 print it). This way it prints, but it can also be processed.
4507 print it). This way it prints, but it can also be processed.
4501
4508
4502 * Added Verbose exception reporting to interactive
4509 * Added Verbose exception reporting to interactive
4503 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4510 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4504 traceback. Had to make some changes to the ultraTB file. This is
4511 traceback. Had to make some changes to the ultraTB file. This is
4505 probably the last 'big' thing in my mental todo list. This ties
4512 probably the last 'big' thing in my mental todo list. This ties
4506 in with the next entry:
4513 in with the next entry:
4507
4514
4508 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4515 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4509 has to specify is Plain, Color or Verbose for all exception
4516 has to specify is Plain, Color or Verbose for all exception
4510 handling.
4517 handling.
4511
4518
4512 * Removed ShellServices option. All this can really be done via
4519 * Removed ShellServices option. All this can really be done via
4513 the magic system. It's easier to extend, cleaner and has automatic
4520 the magic system. It's easier to extend, cleaner and has automatic
4514 namespace protection and documentation.
4521 namespace protection and documentation.
4515
4522
4516 2001-11-09 Fernando Perez <fperez@colorado.edu>
4523 2001-11-09 Fernando Perez <fperez@colorado.edu>
4517
4524
4518 * Fixed bug in output cache flushing (missing parameter to
4525 * Fixed bug in output cache flushing (missing parameter to
4519 __init__). Other small bugs fixed (found using pychecker).
4526 __init__). Other small bugs fixed (found using pychecker).
4520
4527
4521 * Version 0.1.4 opened for bugfixing.
4528 * Version 0.1.4 opened for bugfixing.
4522
4529
4523 2001-11-07 Fernando Perez <fperez@colorado.edu>
4530 2001-11-07 Fernando Perez <fperez@colorado.edu>
4524
4531
4525 * Version 0.1.3 released, mainly because of the raw_input bug.
4532 * Version 0.1.3 released, mainly because of the raw_input bug.
4526
4533
4527 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4534 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4528 and when testing for whether things were callable, a call could
4535 and when testing for whether things were callable, a call could
4529 actually be made to certain functions. They would get called again
4536 actually be made to certain functions. They would get called again
4530 once 'really' executed, with a resulting double call. A disaster
4537 once 'really' executed, with a resulting double call. A disaster
4531 in many cases (list.reverse() would never work!).
4538 in many cases (list.reverse() would never work!).
4532
4539
4533 * Removed prefilter() function, moved its code to raw_input (which
4540 * Removed prefilter() function, moved its code to raw_input (which
4534 after all was just a near-empty caller for prefilter). This saves
4541 after all was just a near-empty caller for prefilter). This saves
4535 a function call on every prompt, and simplifies the class a tiny bit.
4542 a function call on every prompt, and simplifies the class a tiny bit.
4536
4543
4537 * Fix _ip to __ip name in magic example file.
4544 * Fix _ip to __ip name in magic example file.
4538
4545
4539 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4546 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4540 work with non-gnu versions of tar.
4547 work with non-gnu versions of tar.
4541
4548
4542 2001-11-06 Fernando Perez <fperez@colorado.edu>
4549 2001-11-06 Fernando Perez <fperez@colorado.edu>
4543
4550
4544 * Version 0.1.2. Just to keep track of the recent changes.
4551 * Version 0.1.2. Just to keep track of the recent changes.
4545
4552
4546 * Fixed nasty bug in output prompt routine. It used to check 'if
4553 * Fixed nasty bug in output prompt routine. It used to check 'if
4547 arg != None...'. Problem is, this fails if arg implements a
4554 arg != None...'. Problem is, this fails if arg implements a
4548 special comparison (__cmp__) which disallows comparing to
4555 special comparison (__cmp__) which disallows comparing to
4549 None. Found it when trying to use the PhysicalQuantity module from
4556 None. Found it when trying to use the PhysicalQuantity module from
4550 ScientificPython.
4557 ScientificPython.
4551
4558
4552 2001-11-05 Fernando Perez <fperez@colorado.edu>
4559 2001-11-05 Fernando Perez <fperez@colorado.edu>
4553
4560
4554 * Also added dirs. Now the pushd/popd/dirs family functions
4561 * Also added dirs. Now the pushd/popd/dirs family functions
4555 basically like the shell, with the added convenience of going home
4562 basically like the shell, with the added convenience of going home
4556 when called with no args.
4563 when called with no args.
4557
4564
4558 * pushd/popd slightly modified to mimic shell behavior more
4565 * pushd/popd slightly modified to mimic shell behavior more
4559 closely.
4566 closely.
4560
4567
4561 * Added env,pushd,popd from ShellServices as magic functions. I
4568 * Added env,pushd,popd from ShellServices as magic functions. I
4562 think the cleanest will be to port all desired functions from
4569 think the cleanest will be to port all desired functions from
4563 ShellServices as magics and remove ShellServices altogether. This
4570 ShellServices as magics and remove ShellServices altogether. This
4564 will provide a single, clean way of adding functionality
4571 will provide a single, clean way of adding functionality
4565 (shell-type or otherwise) to IP.
4572 (shell-type or otherwise) to IP.
4566
4573
4567 2001-11-04 Fernando Perez <fperez@colorado.edu>
4574 2001-11-04 Fernando Perez <fperez@colorado.edu>
4568
4575
4569 * Added .ipython/ directory to sys.path. This way users can keep
4576 * Added .ipython/ directory to sys.path. This way users can keep
4570 customizations there and access them via import.
4577 customizations there and access them via import.
4571
4578
4572 2001-11-03 Fernando Perez <fperez@colorado.edu>
4579 2001-11-03 Fernando Perez <fperez@colorado.edu>
4573
4580
4574 * Opened version 0.1.1 for new changes.
4581 * Opened version 0.1.1 for new changes.
4575
4582
4576 * Changed version number to 0.1.0: first 'public' release, sent to
4583 * Changed version number to 0.1.0: first 'public' release, sent to
4577 Nathan and Janko.
4584 Nathan and Janko.
4578
4585
4579 * Lots of small fixes and tweaks.
4586 * Lots of small fixes and tweaks.
4580
4587
4581 * Minor changes to whos format. Now strings are shown, snipped if
4588 * Minor changes to whos format. Now strings are shown, snipped if
4582 too long.
4589 too long.
4583
4590
4584 * Changed ShellServices to work on __main__ so they show up in @who
4591 * Changed ShellServices to work on __main__ so they show up in @who
4585
4592
4586 * Help also works with ? at the end of a line:
4593 * Help also works with ? at the end of a line:
4587 ?sin and sin?
4594 ?sin and sin?
4588 both produce the same effect. This is nice, as often I use the
4595 both produce the same effect. This is nice, as often I use the
4589 tab-complete to find the name of a method, but I used to then have
4596 tab-complete to find the name of a method, but I used to then have
4590 to go to the beginning of the line to put a ? if I wanted more
4597 to go to the beginning of the line to put a ? if I wanted more
4591 info. Now I can just add the ? and hit return. Convenient.
4598 info. Now I can just add the ? and hit return. Convenient.
4592
4599
4593 2001-11-02 Fernando Perez <fperez@colorado.edu>
4600 2001-11-02 Fernando Perez <fperez@colorado.edu>
4594
4601
4595 * Python version check (>=2.1) added.
4602 * Python version check (>=2.1) added.
4596
4603
4597 * Added LazyPython documentation. At this point the docs are quite
4604 * Added LazyPython documentation. At this point the docs are quite
4598 a mess. A cleanup is in order.
4605 a mess. A cleanup is in order.
4599
4606
4600 * Auto-installer created. For some bizarre reason, the zipfiles
4607 * Auto-installer created. For some bizarre reason, the zipfiles
4601 module isn't working on my system. So I made a tar version
4608 module isn't working on my system. So I made a tar version
4602 (hopefully the command line options in various systems won't kill
4609 (hopefully the command line options in various systems won't kill
4603 me).
4610 me).
4604
4611
4605 * Fixes to Struct in genutils. Now all dictionary-like methods are
4612 * Fixes to Struct in genutils. Now all dictionary-like methods are
4606 protected (reasonably).
4613 protected (reasonably).
4607
4614
4608 * Added pager function to genutils and changed ? to print usage
4615 * Added pager function to genutils and changed ? to print usage
4609 note through it (it was too long).
4616 note through it (it was too long).
4610
4617
4611 * Added the LazyPython functionality. Works great! I changed the
4618 * Added the LazyPython functionality. Works great! I changed the
4612 auto-quote escape to ';', it's on home row and next to '. But
4619 auto-quote escape to ';', it's on home row and next to '. But
4613 both auto-quote and auto-paren (still /) escapes are command-line
4620 both auto-quote and auto-paren (still /) escapes are command-line
4614 parameters.
4621 parameters.
4615
4622
4616
4623
4617 2001-11-01 Fernando Perez <fperez@colorado.edu>
4624 2001-11-01 Fernando Perez <fperez@colorado.edu>
4618
4625
4619 * Version changed to 0.0.7. Fairly large change: configuration now
4626 * Version changed to 0.0.7. Fairly large change: configuration now
4620 is all stored in a directory, by default .ipython. There, all
4627 is all stored in a directory, by default .ipython. There, all
4621 config files have normal looking names (not .names)
4628 config files have normal looking names (not .names)
4622
4629
4623 * Version 0.0.6 Released first to Lucas and Archie as a test
4630 * Version 0.0.6 Released first to Lucas and Archie as a test
4624 run. Since it's the first 'semi-public' release, change version to
4631 run. Since it's the first 'semi-public' release, change version to
4625 > 0.0.6 for any changes now.
4632 > 0.0.6 for any changes now.
4626
4633
4627 * Stuff I had put in the ipplib.py changelog:
4634 * Stuff I had put in the ipplib.py changelog:
4628
4635
4629 Changes to InteractiveShell:
4636 Changes to InteractiveShell:
4630
4637
4631 - Made the usage message a parameter.
4638 - Made the usage message a parameter.
4632
4639
4633 - Require the name of the shell variable to be given. It's a bit
4640 - Require the name of the shell variable to be given. It's a bit
4634 of a hack, but allows the name 'shell' not to be hardwire in the
4641 of a hack, but allows the name 'shell' not to be hardwire in the
4635 magic (@) handler, which is problematic b/c it requires
4642 magic (@) handler, which is problematic b/c it requires
4636 polluting the global namespace with 'shell'. This in turn is
4643 polluting the global namespace with 'shell'. This in turn is
4637 fragile: if a user redefines a variable called shell, things
4644 fragile: if a user redefines a variable called shell, things
4638 break.
4645 break.
4639
4646
4640 - magic @: all functions available through @ need to be defined
4647 - magic @: all functions available through @ need to be defined
4641 as magic_<name>, even though they can be called simply as
4648 as magic_<name>, even though they can be called simply as
4642 @<name>. This allows the special command @magic to gather
4649 @<name>. This allows the special command @magic to gather
4643 information automatically about all existing magic functions,
4650 information automatically about all existing magic functions,
4644 even if they are run-time user extensions, by parsing the shell
4651 even if they are run-time user extensions, by parsing the shell
4645 instance __dict__ looking for special magic_ names.
4652 instance __dict__ looking for special magic_ names.
4646
4653
4647 - mainloop: added *two* local namespace parameters. This allows
4654 - mainloop: added *two* local namespace parameters. This allows
4648 the class to differentiate between parameters which were there
4655 the class to differentiate between parameters which were there
4649 before and after command line initialization was processed. This
4656 before and after command line initialization was processed. This
4650 way, later @who can show things loaded at startup by the
4657 way, later @who can show things loaded at startup by the
4651 user. This trick was necessary to make session saving/reloading
4658 user. This trick was necessary to make session saving/reloading
4652 really work: ideally after saving/exiting/reloading a session,
4659 really work: ideally after saving/exiting/reloading a session,
4653 *everythin* should look the same, including the output of @who. I
4660 *everythin* should look the same, including the output of @who. I
4654 was only able to make this work with this double namespace
4661 was only able to make this work with this double namespace
4655 trick.
4662 trick.
4656
4663
4657 - added a header to the logfile which allows (almost) full
4664 - added a header to the logfile which allows (almost) full
4658 session restoring.
4665 session restoring.
4659
4666
4660 - prepend lines beginning with @ or !, with a and log
4667 - prepend lines beginning with @ or !, with a and log
4661 them. Why? !lines: may be useful to know what you did @lines:
4668 them. Why? !lines: may be useful to know what you did @lines:
4662 they may affect session state. So when restoring a session, at
4669 they may affect session state. So when restoring a session, at
4663 least inform the user of their presence. I couldn't quite get
4670 least inform the user of their presence. I couldn't quite get
4664 them to properly re-execute, but at least the user is warned.
4671 them to properly re-execute, but at least the user is warned.
4665
4672
4666 * Started ChangeLog.
4673 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now