##// END OF EJS Templates
Fixed logical flaw (harmless so far) in handle_shell_escape
vivainio -
Show More
@@ -1,2191 +1,2193 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 1013 2006-01-13 08:33:32Z fperez $
9 $Id: iplib.py 1015 2006-01-13 22:47:06Z vivainio $
10 """
10 """
11
11
12 #*****************************************************************************
12 #*****************************************************************************
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
15 #
15 #
16 # Distributed under the terms of the BSD License. The full license is in
16 # Distributed under the terms of the BSD License. The full license is in
17 # the file COPYING, distributed as part of this software.
17 # the file COPYING, distributed as part of this software.
18 #
18 #
19 # Note: this code originally subclassed code.InteractiveConsole from the
19 # Note: this code originally subclassed code.InteractiveConsole from the
20 # Python standard library. Over time, all of that class has been copied
20 # Python standard library. Over time, all of that class has been copied
21 # verbatim here for modifications which could not be accomplished by
21 # verbatim here for modifications which could not be accomplished by
22 # subclassing. At this point, there are no dependencies at all on the code
22 # subclassing. At this point, there are no dependencies at all on the code
23 # module anymore (it is not even imported). The Python License (sec. 2)
23 # module anymore (it is not even imported). The Python License (sec. 2)
24 # allows for this, but it's always nice to acknowledge credit where credit is
24 # allows for this, but it's always nice to acknowledge credit where credit is
25 # due.
25 # due.
26 #*****************************************************************************
26 #*****************************************************************************
27
27
28 #****************************************************************************
28 #****************************************************************************
29 # Modules and globals
29 # Modules and globals
30
30
31 from __future__ import generators # for 2.2 backwards-compatibility
31 from __future__ import generators # for 2.2 backwards-compatibility
32
32
33 from IPython import Release
33 from IPython import Release
34 __author__ = '%s <%s>\n%s <%s>' % \
34 __author__ = '%s <%s>\n%s <%s>' % \
35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
36 __license__ = Release.license
36 __license__ = Release.license
37 __version__ = Release.version
37 __version__ = Release.version
38
38
39 # Python standard modules
39 # Python standard modules
40 import __main__
40 import __main__
41 import __builtin__
41 import __builtin__
42 import StringIO
42 import StringIO
43 import bdb
43 import bdb
44 import cPickle as pickle
44 import cPickle as pickle
45 import codeop
45 import codeop
46 import exceptions
46 import exceptions
47 import glob
47 import glob
48 import inspect
48 import inspect
49 import keyword
49 import keyword
50 import new
50 import new
51 import os
51 import os
52 import pdb
52 import pdb
53 import pydoc
53 import pydoc
54 import re
54 import re
55 import shutil
55 import shutil
56 import string
56 import string
57 import sys
57 import sys
58 import tempfile
58 import tempfile
59 import traceback
59 import traceback
60 import types
60 import types
61
61
62 from pprint import pprint, pformat
62 from pprint import pprint, pformat
63
63
64 # IPython's own modules
64 # IPython's own modules
65 import IPython
65 import IPython
66 from IPython import OInspect,PyColorize,ultraTB
66 from IPython import OInspect,PyColorize,ultraTB
67 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
67 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
68 from IPython.FakeModule import FakeModule
68 from IPython.FakeModule import FakeModule
69 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
69 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
70 from IPython.Logger import Logger
70 from IPython.Logger import Logger
71 from IPython.Magic import Magic
71 from IPython.Magic import Magic
72 from IPython.Prompts import CachedOutput
72 from IPython.Prompts import CachedOutput
73 from IPython.ipstruct import Struct
73 from IPython.ipstruct import Struct
74 from IPython.background_jobs import BackgroundJobManager
74 from IPython.background_jobs import BackgroundJobManager
75 from IPython.usage import cmd_line_usage,interactive_usage
75 from IPython.usage import cmd_line_usage,interactive_usage
76 from IPython.genutils import *
76 from IPython.genutils import *
77
77
78 # Globals
78 # Globals
79
79
80 # store the builtin raw_input globally, and use this always, in case user code
80 # store the builtin raw_input globally, and use this always, in case user code
81 # overwrites it (like wx.py.PyShell does)
81 # overwrites it (like wx.py.PyShell does)
82 raw_input_original = raw_input
82 raw_input_original = raw_input
83
83
84 # compiled regexps for autoindent management
84 # compiled regexps for autoindent management
85 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
85 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
86
86
87
87
88 #****************************************************************************
88 #****************************************************************************
89 # Some utility function definitions
89 # Some utility function definitions
90
90
91 ini_spaces_re = re.compile(r'^(\s+)')
91 ini_spaces_re = re.compile(r'^(\s+)')
92
92
93 def num_ini_spaces(strng):
93 def num_ini_spaces(strng):
94 """Return the number of initial spaces in a string"""
94 """Return the number of initial spaces in a string"""
95
95
96 ini_spaces = ini_spaces_re.match(strng)
96 ini_spaces = ini_spaces_re.match(strng)
97 if ini_spaces:
97 if ini_spaces:
98 return ini_spaces.end()
98 return ini_spaces.end()
99 else:
99 else:
100 return 0
100 return 0
101
101
102 def softspace(file, newvalue):
102 def softspace(file, newvalue):
103 """Copied from code.py, to remove the dependency"""
103 """Copied from code.py, to remove the dependency"""
104
104
105 oldvalue = 0
105 oldvalue = 0
106 try:
106 try:
107 oldvalue = file.softspace
107 oldvalue = file.softspace
108 except AttributeError:
108 except AttributeError:
109 pass
109 pass
110 try:
110 try:
111 file.softspace = newvalue
111 file.softspace = newvalue
112 except (AttributeError, TypeError):
112 except (AttributeError, TypeError):
113 # "attribute-less object" or "read-only attributes"
113 # "attribute-less object" or "read-only attributes"
114 pass
114 pass
115 return oldvalue
115 return oldvalue
116
116
117
117
118 #****************************************************************************
118 #****************************************************************************
119 # Local use exceptions
119 # Local use exceptions
120 class SpaceInInput(exceptions.Exception): pass
120 class SpaceInInput(exceptions.Exception): pass
121
121
122
122
123 #****************************************************************************
123 #****************************************************************************
124 # Local use classes
124 # Local use classes
125 class Bunch: pass
125 class Bunch: pass
126
126
127 class Undefined: pass
127 class Undefined: pass
128
128
129 class InputList(list):
129 class InputList(list):
130 """Class to store user input.
130 """Class to store user input.
131
131
132 It's basically a list, but slices return a string instead of a list, thus
132 It's basically a list, but slices return a string instead of a list, thus
133 allowing things like (assuming 'In' is an instance):
133 allowing things like (assuming 'In' is an instance):
134
134
135 exec In[4:7]
135 exec In[4:7]
136
136
137 or
137 or
138
138
139 exec In[5:9] + In[14] + In[21:25]"""
139 exec In[5:9] + In[14] + In[21:25]"""
140
140
141 def __getslice__(self,i,j):
141 def __getslice__(self,i,j):
142 return ''.join(list.__getslice__(self,i,j))
142 return ''.join(list.__getslice__(self,i,j))
143
143
144 class SyntaxTB(ultraTB.ListTB):
144 class SyntaxTB(ultraTB.ListTB):
145 """Extension which holds some state: the last exception value"""
145 """Extension which holds some state: the last exception value"""
146
146
147 def __init__(self,color_scheme = 'NoColor'):
147 def __init__(self,color_scheme = 'NoColor'):
148 ultraTB.ListTB.__init__(self,color_scheme)
148 ultraTB.ListTB.__init__(self,color_scheme)
149 self.last_syntax_error = None
149 self.last_syntax_error = None
150
150
151 def __call__(self, etype, value, elist):
151 def __call__(self, etype, value, elist):
152 self.last_syntax_error = value
152 self.last_syntax_error = value
153 ultraTB.ListTB.__call__(self,etype,value,elist)
153 ultraTB.ListTB.__call__(self,etype,value,elist)
154
154
155 def clear_err_state(self):
155 def clear_err_state(self):
156 """Return the current error state and clear it"""
156 """Return the current error state and clear it"""
157 e = self.last_syntax_error
157 e = self.last_syntax_error
158 self.last_syntax_error = None
158 self.last_syntax_error = None
159 return e
159 return e
160
160
161 #****************************************************************************
161 #****************************************************************************
162 # Main IPython class
162 # Main IPython class
163
163
164 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
164 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
165 # until a full rewrite is made. I've cleaned all cross-class uses of
165 # until a full rewrite is made. I've cleaned all cross-class uses of
166 # attributes and methods, but too much user code out there relies on the
166 # attributes and methods, but too much user code out there relies on the
167 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
167 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
168 #
168 #
169 # But at least now, all the pieces have been separated and we could, in
169 # But at least now, all the pieces have been separated and we could, in
170 # principle, stop using the mixin. This will ease the transition to the
170 # principle, stop using the mixin. This will ease the transition to the
171 # chainsaw branch.
171 # chainsaw branch.
172
172
173 # For reference, the following is the list of 'self.foo' uses in the Magic
173 # For reference, the following is the list of 'self.foo' uses in the Magic
174 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
174 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
175 # class, to prevent clashes.
175 # class, to prevent clashes.
176
176
177 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
177 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
178 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
178 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
179 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
179 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
180 # 'self.value']
180 # 'self.value']
181
181
182 class InteractiveShell(object,Magic):
182 class InteractiveShell(object,Magic):
183 """An enhanced console for Python."""
183 """An enhanced console for Python."""
184
184
185 # class attribute to indicate whether the class supports threads or not.
185 # class attribute to indicate whether the class supports threads or not.
186 # Subclasses with thread support should override this as needed.
186 # Subclasses with thread support should override this as needed.
187 isthreaded = False
187 isthreaded = False
188
188
189 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
189 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
190 user_ns = None,user_global_ns=None,banner2='',
190 user_ns = None,user_global_ns=None,banner2='',
191 custom_exceptions=((),None),embedded=False):
191 custom_exceptions=((),None),embedded=False):
192
192
193 # some minimal strict typechecks. For some core data structures, I
193 # some minimal strict typechecks. For some core data structures, I
194 # want actual basic python types, not just anything that looks like
194 # want actual basic python types, not just anything that looks like
195 # one. This is especially true for namespaces.
195 # one. This is especially true for namespaces.
196 for ns in (user_ns,user_global_ns):
196 for ns in (user_ns,user_global_ns):
197 if ns is not None and type(ns) != types.DictType:
197 if ns is not None and type(ns) != types.DictType:
198 raise TypeError,'namespace must be a dictionary'
198 raise TypeError,'namespace must be a dictionary'
199
199
200 # Job manager (for jobs run as background threads)
200 # Job manager (for jobs run as background threads)
201 self.jobs = BackgroundJobManager()
201 self.jobs = BackgroundJobManager()
202
202
203 # track which builtins we add, so we can clean up later
203 # track which builtins we add, so we can clean up later
204 self.builtins_added = {}
204 self.builtins_added = {}
205 # This method will add the necessary builtins for operation, but
205 # This method will add the necessary builtins for operation, but
206 # tracking what it did via the builtins_added dict.
206 # tracking what it did via the builtins_added dict.
207 self.add_builtins()
207 self.add_builtins()
208
208
209 # Do the intuitively correct thing for quit/exit: we remove the
209 # Do the intuitively correct thing for quit/exit: we remove the
210 # builtins if they exist, and our own magics will deal with this
210 # builtins if they exist, and our own magics will deal with this
211 try:
211 try:
212 del __builtin__.exit, __builtin__.quit
212 del __builtin__.exit, __builtin__.quit
213 except AttributeError:
213 except AttributeError:
214 pass
214 pass
215
215
216 # Store the actual shell's name
216 # Store the actual shell's name
217 self.name = name
217 self.name = name
218
218
219 # We need to know whether the instance is meant for embedding, since
219 # We need to know whether the instance is meant for embedding, since
220 # global/local namespaces need to be handled differently in that case
220 # global/local namespaces need to be handled differently in that case
221 self.embedded = embedded
221 self.embedded = embedded
222
222
223 # command compiler
223 # command compiler
224 self.compile = codeop.CommandCompiler()
224 self.compile = codeop.CommandCompiler()
225
225
226 # User input buffer
226 # User input buffer
227 self.buffer = []
227 self.buffer = []
228
228
229 # Default name given in compilation of code
229 # Default name given in compilation of code
230 self.filename = '<ipython console>'
230 self.filename = '<ipython console>'
231
231
232 # Make an empty namespace, which extension writers can rely on both
232 # Make an empty namespace, which extension writers can rely on both
233 # existing and NEVER being used by ipython itself. This gives them a
233 # existing and NEVER being used by ipython itself. This gives them a
234 # convenient location for storing additional information and state
234 # convenient location for storing additional information and state
235 # their extensions may require, without fear of collisions with other
235 # their extensions may require, without fear of collisions with other
236 # ipython names that may develop later.
236 # ipython names that may develop later.
237 self.meta = Bunch()
237 self.meta = Bunch()
238
238
239 # Create the namespace where the user will operate. user_ns is
239 # Create the namespace where the user will operate. user_ns is
240 # normally the only one used, and it is passed to the exec calls as
240 # normally the only one used, and it is passed to the exec calls as
241 # the locals argument. But we do carry a user_global_ns namespace
241 # the locals argument. But we do carry a user_global_ns namespace
242 # given as the exec 'globals' argument, This is useful in embedding
242 # given as the exec 'globals' argument, This is useful in embedding
243 # situations where the ipython shell opens in a context where the
243 # situations where the ipython shell opens in a context where the
244 # distinction between locals and globals is meaningful.
244 # distinction between locals and globals is meaningful.
245
245
246 # FIXME. For some strange reason, __builtins__ is showing up at user
246 # FIXME. For some strange reason, __builtins__ is showing up at user
247 # level as a dict instead of a module. This is a manual fix, but I
247 # level as a dict instead of a module. This is a manual fix, but I
248 # should really track down where the problem is coming from. Alex
248 # should really track down where the problem is coming from. Alex
249 # Schmolck reported this problem first.
249 # Schmolck reported this problem first.
250
250
251 # A useful post by Alex Martelli on this topic:
251 # A useful post by Alex Martelli on this topic:
252 # Re: inconsistent value from __builtins__
252 # Re: inconsistent value from __builtins__
253 # Von: Alex Martelli <aleaxit@yahoo.com>
253 # Von: Alex Martelli <aleaxit@yahoo.com>
254 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
254 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
255 # Gruppen: comp.lang.python
255 # Gruppen: comp.lang.python
256
256
257 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
257 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
258 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
258 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
259 # > <type 'dict'>
259 # > <type 'dict'>
260 # > >>> print type(__builtins__)
260 # > >>> print type(__builtins__)
261 # > <type 'module'>
261 # > <type 'module'>
262 # > Is this difference in return value intentional?
262 # > Is this difference in return value intentional?
263
263
264 # Well, it's documented that '__builtins__' can be either a dictionary
264 # Well, it's documented that '__builtins__' can be either a dictionary
265 # or a module, and it's been that way for a long time. Whether it's
265 # or a module, and it's been that way for a long time. Whether it's
266 # intentional (or sensible), I don't know. In any case, the idea is
266 # intentional (or sensible), I don't know. In any case, the idea is
267 # that if you need to access the built-in namespace directly, you
267 # that if you need to access the built-in namespace directly, you
268 # should start with "import __builtin__" (note, no 's') which will
268 # should start with "import __builtin__" (note, no 's') which will
269 # definitely give you a module. Yeah, it's somewhatΒ confusing:-(.
269 # definitely give you a module. Yeah, it's somewhatΒ confusing:-(.
270
270
271 if user_ns is None:
271 if user_ns is None:
272 # Set __name__ to __main__ to better match the behavior of the
272 # Set __name__ to __main__ to better match the behavior of the
273 # normal interpreter.
273 # normal interpreter.
274 user_ns = {'__name__' :'__main__',
274 user_ns = {'__name__' :'__main__',
275 '__builtins__' : __builtin__,
275 '__builtins__' : __builtin__,
276 }
276 }
277
277
278 if user_global_ns is None:
278 if user_global_ns is None:
279 user_global_ns = {}
279 user_global_ns = {}
280
280
281 # Assign namespaces
281 # Assign namespaces
282 # This is the namespace where all normal user variables live
282 # This is the namespace where all normal user variables live
283 self.user_ns = user_ns
283 self.user_ns = user_ns
284 # Embedded instances require a separate namespace for globals.
284 # Embedded instances require a separate namespace for globals.
285 # Normally this one is unused by non-embedded instances.
285 # Normally this one is unused by non-embedded instances.
286 self.user_global_ns = user_global_ns
286 self.user_global_ns = user_global_ns
287 # A namespace to keep track of internal data structures to prevent
287 # A namespace to keep track of internal data structures to prevent
288 # them from cluttering user-visible stuff. Will be updated later
288 # them from cluttering user-visible stuff. Will be updated later
289 self.internal_ns = {}
289 self.internal_ns = {}
290
290
291 # Namespace of system aliases. Each entry in the alias
291 # Namespace of system aliases. Each entry in the alias
292 # table must be a 2-tuple of the form (N,name), where N is the number
292 # table must be a 2-tuple of the form (N,name), where N is the number
293 # of positional arguments of the alias.
293 # of positional arguments of the alias.
294 self.alias_table = {}
294 self.alias_table = {}
295
295
296 # A table holding all the namespaces IPython deals with, so that
296 # A table holding all the namespaces IPython deals with, so that
297 # introspection facilities can search easily.
297 # introspection facilities can search easily.
298 self.ns_table = {'user':user_ns,
298 self.ns_table = {'user':user_ns,
299 'user_global':user_global_ns,
299 'user_global':user_global_ns,
300 'alias':self.alias_table,
300 'alias':self.alias_table,
301 'internal':self.internal_ns,
301 'internal':self.internal_ns,
302 'builtin':__builtin__.__dict__
302 'builtin':__builtin__.__dict__
303 }
303 }
304
304
305 # The user namespace MUST have a pointer to the shell itself.
305 # The user namespace MUST have a pointer to the shell itself.
306 self.user_ns[name] = self
306 self.user_ns[name] = self
307
307
308 # We need to insert into sys.modules something that looks like a
308 # We need to insert into sys.modules something that looks like a
309 # module but which accesses the IPython namespace, for shelve and
309 # module but which accesses the IPython namespace, for shelve and
310 # pickle to work interactively. Normally they rely on getting
310 # pickle to work interactively. Normally they rely on getting
311 # everything out of __main__, but for embedding purposes each IPython
311 # everything out of __main__, but for embedding purposes each IPython
312 # instance has its own private namespace, so we can't go shoving
312 # instance has its own private namespace, so we can't go shoving
313 # everything into __main__.
313 # everything into __main__.
314
314
315 # note, however, that we should only do this for non-embedded
315 # note, however, that we should only do this for non-embedded
316 # ipythons, which really mimic the __main__.__dict__ with their own
316 # ipythons, which really mimic the __main__.__dict__ with their own
317 # namespace. Embedded instances, on the other hand, should not do
317 # namespace. Embedded instances, on the other hand, should not do
318 # this because they need to manage the user local/global namespaces
318 # this because they need to manage the user local/global namespaces
319 # only, but they live within a 'normal' __main__ (meaning, they
319 # only, but they live within a 'normal' __main__ (meaning, they
320 # shouldn't overtake the execution environment of the script they're
320 # shouldn't overtake the execution environment of the script they're
321 # embedded in).
321 # embedded in).
322
322
323 if not embedded:
323 if not embedded:
324 try:
324 try:
325 main_name = self.user_ns['__name__']
325 main_name = self.user_ns['__name__']
326 except KeyError:
326 except KeyError:
327 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
327 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
328 else:
328 else:
329 #print "pickle hack in place" # dbg
329 #print "pickle hack in place" # dbg
330 #print 'main_name:',main_name # dbg
330 #print 'main_name:',main_name # dbg
331 sys.modules[main_name] = FakeModule(self.user_ns)
331 sys.modules[main_name] = FakeModule(self.user_ns)
332
332
333 # List of input with multi-line handling.
333 # List of input with multi-line handling.
334 # Fill its zero entry, user counter starts at 1
334 # Fill its zero entry, user counter starts at 1
335 self.input_hist = InputList(['\n'])
335 self.input_hist = InputList(['\n'])
336
336
337 # list of visited directories
337 # list of visited directories
338 try:
338 try:
339 self.dir_hist = [os.getcwd()]
339 self.dir_hist = [os.getcwd()]
340 except IOError, e:
340 except IOError, e:
341 self.dir_hist = []
341 self.dir_hist = []
342
342
343 # dict of output history
343 # dict of output history
344 self.output_hist = {}
344 self.output_hist = {}
345
345
346 # dict of things NOT to alias (keywords, builtins and some magics)
346 # dict of things NOT to alias (keywords, builtins and some magics)
347 no_alias = {}
347 no_alias = {}
348 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
348 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
349 for key in keyword.kwlist + no_alias_magics:
349 for key in keyword.kwlist + no_alias_magics:
350 no_alias[key] = 1
350 no_alias[key] = 1
351 no_alias.update(__builtin__.__dict__)
351 no_alias.update(__builtin__.__dict__)
352 self.no_alias = no_alias
352 self.no_alias = no_alias
353
353
354 # make global variables for user access to these
354 # make global variables for user access to these
355 self.user_ns['_ih'] = self.input_hist
355 self.user_ns['_ih'] = self.input_hist
356 self.user_ns['_oh'] = self.output_hist
356 self.user_ns['_oh'] = self.output_hist
357 self.user_ns['_dh'] = self.dir_hist
357 self.user_ns['_dh'] = self.dir_hist
358
358
359 # user aliases to input and output histories
359 # user aliases to input and output histories
360 self.user_ns['In'] = self.input_hist
360 self.user_ns['In'] = self.input_hist
361 self.user_ns['Out'] = self.output_hist
361 self.user_ns['Out'] = self.output_hist
362
362
363 # Object variable to store code object waiting execution. This is
363 # Object variable to store code object waiting execution. This is
364 # used mainly by the multithreaded shells, but it can come in handy in
364 # used mainly by the multithreaded shells, but it can come in handy in
365 # other situations. No need to use a Queue here, since it's a single
365 # other situations. No need to use a Queue here, since it's a single
366 # item which gets cleared once run.
366 # item which gets cleared once run.
367 self.code_to_run = None
367 self.code_to_run = None
368
368
369 # escapes for automatic behavior on the command line
369 # escapes for automatic behavior on the command line
370 self.ESC_SHELL = '!'
370 self.ESC_SHELL = '!'
371 self.ESC_HELP = '?'
371 self.ESC_HELP = '?'
372 self.ESC_MAGIC = '%'
372 self.ESC_MAGIC = '%'
373 self.ESC_QUOTE = ','
373 self.ESC_QUOTE = ','
374 self.ESC_QUOTE2 = ';'
374 self.ESC_QUOTE2 = ';'
375 self.ESC_PAREN = '/'
375 self.ESC_PAREN = '/'
376
376
377 # And their associated handlers
377 # And their associated handlers
378 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
378 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
379 self.ESC_QUOTE : self.handle_auto,
379 self.ESC_QUOTE : self.handle_auto,
380 self.ESC_QUOTE2 : self.handle_auto,
380 self.ESC_QUOTE2 : self.handle_auto,
381 self.ESC_MAGIC : self.handle_magic,
381 self.ESC_MAGIC : self.handle_magic,
382 self.ESC_HELP : self.handle_help,
382 self.ESC_HELP : self.handle_help,
383 self.ESC_SHELL : self.handle_shell_escape,
383 self.ESC_SHELL : self.handle_shell_escape,
384 }
384 }
385
385
386 # class initializations
386 # class initializations
387 Magic.__init__(self,self)
387 Magic.__init__(self,self)
388
388
389 # Python source parser/formatter for syntax highlighting
389 # Python source parser/formatter for syntax highlighting
390 pyformat = PyColorize.Parser().format
390 pyformat = PyColorize.Parser().format
391 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
391 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
392
392
393 # hooks holds pointers used for user-side customizations
393 # hooks holds pointers used for user-side customizations
394 self.hooks = Struct()
394 self.hooks = Struct()
395
395
396 # Set all default hooks, defined in the IPython.hooks module.
396 # Set all default hooks, defined in the IPython.hooks module.
397 hooks = IPython.hooks
397 hooks = IPython.hooks
398 for hook_name in hooks.__all__:
398 for hook_name in hooks.__all__:
399 self.set_hook(hook_name,getattr(hooks,hook_name))
399 self.set_hook(hook_name,getattr(hooks,hook_name))
400
400
401 # Flag to mark unconditional exit
401 # Flag to mark unconditional exit
402 self.exit_now = False
402 self.exit_now = False
403
403
404 self.usage_min = """\
404 self.usage_min = """\
405 An enhanced console for Python.
405 An enhanced console for Python.
406 Some of its features are:
406 Some of its features are:
407 - Readline support if the readline library is present.
407 - Readline support if the readline library is present.
408 - Tab completion in the local namespace.
408 - Tab completion in the local namespace.
409 - Logging of input, see command-line options.
409 - Logging of input, see command-line options.
410 - System shell escape via ! , eg !ls.
410 - System shell escape via ! , eg !ls.
411 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
411 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
412 - Keeps track of locally defined variables via %who, %whos.
412 - Keeps track of locally defined variables via %who, %whos.
413 - Show object information with a ? eg ?x or x? (use ?? for more info).
413 - Show object information with a ? eg ?x or x? (use ?? for more info).
414 """
414 """
415 if usage: self.usage = usage
415 if usage: self.usage = usage
416 else: self.usage = self.usage_min
416 else: self.usage = self.usage_min
417
417
418 # Storage
418 # Storage
419 self.rc = rc # This will hold all configuration information
419 self.rc = rc # This will hold all configuration information
420 self.pager = 'less'
420 self.pager = 'less'
421 # temporary files used for various purposes. Deleted at exit.
421 # temporary files used for various purposes. Deleted at exit.
422 self.tempfiles = []
422 self.tempfiles = []
423
423
424 # Keep track of readline usage (later set by init_readline)
424 # Keep track of readline usage (later set by init_readline)
425 self.has_readline = False
425 self.has_readline = False
426
426
427 # template for logfile headers. It gets resolved at runtime by the
427 # template for logfile headers. It gets resolved at runtime by the
428 # logstart method.
428 # logstart method.
429 self.loghead_tpl = \
429 self.loghead_tpl = \
430 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
430 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
431 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
431 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
432 #log# opts = %s
432 #log# opts = %s
433 #log# args = %s
433 #log# args = %s
434 #log# It is safe to make manual edits below here.
434 #log# It is safe to make manual edits below here.
435 #log#-----------------------------------------------------------------------
435 #log#-----------------------------------------------------------------------
436 """
436 """
437 # for pushd/popd management
437 # for pushd/popd management
438 try:
438 try:
439 self.home_dir = get_home_dir()
439 self.home_dir = get_home_dir()
440 except HomeDirError,msg:
440 except HomeDirError,msg:
441 fatal(msg)
441 fatal(msg)
442
442
443 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
443 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
444
444
445 # Functions to call the underlying shell.
445 # Functions to call the underlying shell.
446
446
447 # utility to expand user variables via Itpl
447 # utility to expand user variables via Itpl
448 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
448 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
449 self.user_ns))
449 self.user_ns))
450 # The first is similar to os.system, but it doesn't return a value,
450 # The first is similar to os.system, but it doesn't return a value,
451 # and it allows interpolation of variables in the user's namespace.
451 # and it allows interpolation of variables in the user's namespace.
452 self.system = lambda cmd: shell(self.var_expand(cmd),
452 self.system = lambda cmd: shell(self.var_expand(cmd),
453 header='IPython system call: ',
453 header='IPython system call: ',
454 verbose=self.rc.system_verbose)
454 verbose=self.rc.system_verbose)
455 # These are for getoutput and getoutputerror:
455 # These are for getoutput and getoutputerror:
456 self.getoutput = lambda cmd: \
456 self.getoutput = lambda cmd: \
457 getoutput(self.var_expand(cmd),
457 getoutput(self.var_expand(cmd),
458 header='IPython system call: ',
458 header='IPython system call: ',
459 verbose=self.rc.system_verbose)
459 verbose=self.rc.system_verbose)
460 self.getoutputerror = lambda cmd: \
460 self.getoutputerror = lambda cmd: \
461 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
461 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
462 self.user_ns)),
462 self.user_ns)),
463 header='IPython system call: ',
463 header='IPython system call: ',
464 verbose=self.rc.system_verbose)
464 verbose=self.rc.system_verbose)
465
465
466 # RegExp for splitting line contents into pre-char//first
466 # RegExp for splitting line contents into pre-char//first
467 # word-method//rest. For clarity, each group in on one line.
467 # word-method//rest. For clarity, each group in on one line.
468
468
469 # WARNING: update the regexp if the above escapes are changed, as they
469 # WARNING: update the regexp if the above escapes are changed, as they
470 # are hardwired in.
470 # are hardwired in.
471
471
472 # Don't get carried away with trying to make the autocalling catch too
472 # Don't get carried away with trying to make the autocalling catch too
473 # much: it's better to be conservative rather than to trigger hidden
473 # much: it's better to be conservative rather than to trigger hidden
474 # evals() somewhere and end up causing side effects.
474 # evals() somewhere and end up causing side effects.
475
475
476 self.line_split = re.compile(r'^([\s*,;/])'
476 self.line_split = re.compile(r'^([\s*,;/])'
477 r'([\?\w\.]+\w*\s*)'
477 r'([\?\w\.]+\w*\s*)'
478 r'(\(?.*$)')
478 r'(\(?.*$)')
479
479
480 # Original re, keep around for a while in case changes break something
480 # Original re, keep around for a while in case changes break something
481 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
481 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
482 # r'(\s*[\?\w\.]+\w*\s*)'
482 # r'(\s*[\?\w\.]+\w*\s*)'
483 # r'(\(?.*$)')
483 # r'(\(?.*$)')
484
484
485 # RegExp to identify potential function names
485 # RegExp to identify potential function names
486 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
486 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
487
487
488 # RegExp to exclude strings with this start from autocalling. In
488 # RegExp to exclude strings with this start from autocalling. In
489 # particular, all binary operators should be excluded, so that if foo
489 # particular, all binary operators should be excluded, so that if foo
490 # is callable, foo OP bar doesn't become foo(OP bar), which is
490 # is callable, foo OP bar doesn't become foo(OP bar), which is
491 # invalid. The characters '!=()' don't need to be checked for, as the
491 # invalid. The characters '!=()' don't need to be checked for, as the
492 # _prefilter routine explicitely does so, to catch direct calls and
492 # _prefilter routine explicitely does so, to catch direct calls and
493 # rebindings of existing names.
493 # rebindings of existing names.
494
494
495 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
495 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
496 # it affects the rest of the group in square brackets.
496 # it affects the rest of the group in square brackets.
497 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
497 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
498 '|^is |^not |^in |^and |^or ')
498 '|^is |^not |^in |^and |^or ')
499
499
500 # try to catch also methods for stuff in lists/tuples/dicts: off
500 # try to catch also methods for stuff in lists/tuples/dicts: off
501 # (experimental). For this to work, the line_split regexp would need
501 # (experimental). For this to work, the line_split regexp would need
502 # to be modified so it wouldn't break things at '['. That line is
502 # to be modified so it wouldn't break things at '['. That line is
503 # nasty enough that I shouldn't change it until I can test it _well_.
503 # nasty enough that I shouldn't change it until I can test it _well_.
504 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
504 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
505
505
506 # keep track of where we started running (mainly for crash post-mortem)
506 # keep track of where we started running (mainly for crash post-mortem)
507 self.starting_dir = os.getcwd()
507 self.starting_dir = os.getcwd()
508
508
509 # Various switches which can be set
509 # Various switches which can be set
510 self.CACHELENGTH = 5000 # this is cheap, it's just text
510 self.CACHELENGTH = 5000 # this is cheap, it's just text
511 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
511 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
512 self.banner2 = banner2
512 self.banner2 = banner2
513
513
514 # TraceBack handlers:
514 # TraceBack handlers:
515
515
516 # Syntax error handler.
516 # Syntax error handler.
517 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
517 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
518
518
519 # The interactive one is initialized with an offset, meaning we always
519 # The interactive one is initialized with an offset, meaning we always
520 # want to remove the topmost item in the traceback, which is our own
520 # want to remove the topmost item in the traceback, which is our own
521 # internal code. Valid modes: ['Plain','Context','Verbose']
521 # internal code. Valid modes: ['Plain','Context','Verbose']
522 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
522 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
523 color_scheme='NoColor',
523 color_scheme='NoColor',
524 tb_offset = 1)
524 tb_offset = 1)
525
525
526 # IPython itself shouldn't crash. This will produce a detailed
526 # IPython itself shouldn't crash. This will produce a detailed
527 # post-mortem if it does. But we only install the crash handler for
527 # post-mortem if it does. But we only install the crash handler for
528 # non-threaded shells, the threaded ones use a normal verbose reporter
528 # non-threaded shells, the threaded ones use a normal verbose reporter
529 # and lose the crash handler. This is because exceptions in the main
529 # and lose the crash handler. This is because exceptions in the main
530 # thread (such as in GUI code) propagate directly to sys.excepthook,
530 # thread (such as in GUI code) propagate directly to sys.excepthook,
531 # and there's no point in printing crash dumps for every user exception.
531 # and there's no point in printing crash dumps for every user exception.
532 if self.isthreaded:
532 if self.isthreaded:
533 sys.excepthook = ultraTB.FormattedTB()
533 sys.excepthook = ultraTB.FormattedTB()
534 else:
534 else:
535 from IPython import CrashHandler
535 from IPython import CrashHandler
536 sys.excepthook = CrashHandler.CrashHandler(self)
536 sys.excepthook = CrashHandler.CrashHandler(self)
537
537
538 # The instance will store a pointer to this, so that runtime code
538 # The instance will store a pointer to this, so that runtime code
539 # (such as magics) can access it. This is because during the
539 # (such as magics) can access it. This is because during the
540 # read-eval loop, it gets temporarily overwritten (to deal with GUI
540 # read-eval loop, it gets temporarily overwritten (to deal with GUI
541 # frameworks).
541 # frameworks).
542 self.sys_excepthook = sys.excepthook
542 self.sys_excepthook = sys.excepthook
543
543
544 # and add any custom exception handlers the user may have specified
544 # and add any custom exception handlers the user may have specified
545 self.set_custom_exc(*custom_exceptions)
545 self.set_custom_exc(*custom_exceptions)
546
546
547 # Object inspector
547 # Object inspector
548 self.inspector = OInspect.Inspector(OInspect.InspectColors,
548 self.inspector = OInspect.Inspector(OInspect.InspectColors,
549 PyColorize.ANSICodeColors,
549 PyColorize.ANSICodeColors,
550 'NoColor')
550 'NoColor')
551 # indentation management
551 # indentation management
552 self.autoindent = False
552 self.autoindent = False
553 self.indent_current_nsp = 0
553 self.indent_current_nsp = 0
554 self.indent_current = '' # actual indent string
554 self.indent_current = '' # actual indent string
555
555
556 # Make some aliases automatically
556 # Make some aliases automatically
557 # Prepare list of shell aliases to auto-define
557 # Prepare list of shell aliases to auto-define
558 if os.name == 'posix':
558 if os.name == 'posix':
559 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
559 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
560 'mv mv -i','rm rm -i','cp cp -i',
560 'mv mv -i','rm rm -i','cp cp -i',
561 'cat cat','less less','clear clear',
561 'cat cat','less less','clear clear',
562 # a better ls
562 # a better ls
563 'ls ls -F',
563 'ls ls -F',
564 # long ls
564 # long ls
565 'll ls -lF',
565 'll ls -lF',
566 # color ls
566 # color ls
567 'lc ls -F -o --color',
567 'lc ls -F -o --color',
568 # ls normal files only
568 # ls normal files only
569 'lf ls -F -o --color %l | grep ^-',
569 'lf ls -F -o --color %l | grep ^-',
570 # ls symbolic links
570 # ls symbolic links
571 'lk ls -F -o --color %l | grep ^l',
571 'lk ls -F -o --color %l | grep ^l',
572 # directories or links to directories,
572 # directories or links to directories,
573 'ldir ls -F -o --color %l | grep /$',
573 'ldir ls -F -o --color %l | grep /$',
574 # things which are executable
574 # things which are executable
575 'lx ls -F -o --color %l | grep ^-..x',
575 'lx ls -F -o --color %l | grep ^-..x',
576 )
576 )
577 elif os.name in ['nt','dos']:
577 elif os.name in ['nt','dos']:
578 auto_alias = ('dir dir /on', 'ls dir /on',
578 auto_alias = ('dir dir /on', 'ls dir /on',
579 'ddir dir /ad /on', 'ldir dir /ad /on',
579 'ddir dir /ad /on', 'ldir dir /ad /on',
580 'mkdir mkdir','rmdir rmdir','echo echo',
580 'mkdir mkdir','rmdir rmdir','echo echo',
581 'ren ren','cls cls','copy copy')
581 'ren ren','cls cls','copy copy')
582 else:
582 else:
583 auto_alias = ()
583 auto_alias = ()
584 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
584 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
585 # Call the actual (public) initializer
585 # Call the actual (public) initializer
586 self.init_auto_alias()
586 self.init_auto_alias()
587 # end __init__
587 # end __init__
588
588
589 def post_config_initialization(self):
589 def post_config_initialization(self):
590 """Post configuration init method
590 """Post configuration init method
591
591
592 This is called after the configuration files have been processed to
592 This is called after the configuration files have been processed to
593 'finalize' the initialization."""
593 'finalize' the initialization."""
594
594
595 rc = self.rc
595 rc = self.rc
596
596
597 # Load readline proper
597 # Load readline proper
598 if rc.readline:
598 if rc.readline:
599 self.init_readline()
599 self.init_readline()
600
600
601 # log system
601 # log system
602 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
602 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
603 # local shortcut, this is used a LOT
603 # local shortcut, this is used a LOT
604 self.log = self.logger.log
604 self.log = self.logger.log
605
605
606 # Initialize cache, set in/out prompts and printing system
606 # Initialize cache, set in/out prompts and printing system
607 self.outputcache = CachedOutput(self,
607 self.outputcache = CachedOutput(self,
608 rc.cache_size,
608 rc.cache_size,
609 rc.pprint,
609 rc.pprint,
610 input_sep = rc.separate_in,
610 input_sep = rc.separate_in,
611 output_sep = rc.separate_out,
611 output_sep = rc.separate_out,
612 output_sep2 = rc.separate_out2,
612 output_sep2 = rc.separate_out2,
613 ps1 = rc.prompt_in1,
613 ps1 = rc.prompt_in1,
614 ps2 = rc.prompt_in2,
614 ps2 = rc.prompt_in2,
615 ps_out = rc.prompt_out,
615 ps_out = rc.prompt_out,
616 pad_left = rc.prompts_pad_left)
616 pad_left = rc.prompts_pad_left)
617
617
618 # user may have over-ridden the default print hook:
618 # user may have over-ridden the default print hook:
619 try:
619 try:
620 self.outputcache.__class__.display = self.hooks.display
620 self.outputcache.__class__.display = self.hooks.display
621 except AttributeError:
621 except AttributeError:
622 pass
622 pass
623
623
624 # I don't like assigning globally to sys, because it means when embedding
624 # I don't like assigning globally to sys, because it means when embedding
625 # instances, each embedded instance overrides the previous choice. But
625 # instances, each embedded instance overrides the previous choice. But
626 # sys.displayhook seems to be called internally by exec, so I don't see a
626 # sys.displayhook seems to be called internally by exec, so I don't see a
627 # way around it.
627 # way around it.
628 sys.displayhook = self.outputcache
628 sys.displayhook = self.outputcache
629
629
630 # Set user colors (don't do it in the constructor above so that it
630 # Set user colors (don't do it in the constructor above so that it
631 # doesn't crash if colors option is invalid)
631 # doesn't crash if colors option is invalid)
632 self.magic_colors(rc.colors)
632 self.magic_colors(rc.colors)
633
633
634 # Set calling of pdb on exceptions
634 # Set calling of pdb on exceptions
635 self.call_pdb = rc.pdb
635 self.call_pdb = rc.pdb
636
636
637 # Load user aliases
637 # Load user aliases
638 for alias in rc.alias:
638 for alias in rc.alias:
639 self.magic_alias(alias)
639 self.magic_alias(alias)
640
640
641 # dynamic data that survives through sessions
641 # dynamic data that survives through sessions
642 # XXX make the filename a config option?
642 # XXX make the filename a config option?
643 persist_base = 'persist'
643 persist_base = 'persist'
644 if rc.profile:
644 if rc.profile:
645 persist_base += '_%s' % rc.profile
645 persist_base += '_%s' % rc.profile
646 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
646 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
647
647
648 try:
648 try:
649 self.persist = pickle.load(file(self.persist_fname))
649 self.persist = pickle.load(file(self.persist_fname))
650 except:
650 except:
651 self.persist = {}
651 self.persist = {}
652
652
653
653
654 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
654 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
655 try:
655 try:
656 obj = pickle.loads(value)
656 obj = pickle.loads(value)
657 except:
657 except:
658
658
659 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
659 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
660 print "The error was:",sys.exc_info()[0]
660 print "The error was:",sys.exc_info()[0]
661 continue
661 continue
662
662
663
663
664 self.user_ns[key] = obj
664 self.user_ns[key] = obj
665
665
666 def add_builtins(self):
666 def add_builtins(self):
667 """Store ipython references into the builtin namespace.
667 """Store ipython references into the builtin namespace.
668
668
669 Some parts of ipython operate via builtins injected here, which hold a
669 Some parts of ipython operate via builtins injected here, which hold a
670 reference to IPython itself."""
670 reference to IPython itself."""
671
671
672 builtins_new = dict(__IPYTHON__ = self,
672 builtins_new = dict(__IPYTHON__ = self,
673 ip_set_hook = self.set_hook,
673 ip_set_hook = self.set_hook,
674 jobs = self.jobs,
674 jobs = self.jobs,
675 ipmagic = self.ipmagic,
675 ipmagic = self.ipmagic,
676 ipalias = self.ipalias,
676 ipalias = self.ipalias,
677 ipsystem = self.ipsystem,
677 ipsystem = self.ipsystem,
678 )
678 )
679 for biname,bival in builtins_new.items():
679 for biname,bival in builtins_new.items():
680 try:
680 try:
681 # store the orignal value so we can restore it
681 # store the orignal value so we can restore it
682 self.builtins_added[biname] = __builtin__.__dict__[biname]
682 self.builtins_added[biname] = __builtin__.__dict__[biname]
683 except KeyError:
683 except KeyError:
684 # or mark that it wasn't defined, and we'll just delete it at
684 # or mark that it wasn't defined, and we'll just delete it at
685 # cleanup
685 # cleanup
686 self.builtins_added[biname] = Undefined
686 self.builtins_added[biname] = Undefined
687 __builtin__.__dict__[biname] = bival
687 __builtin__.__dict__[biname] = bival
688
688
689 # Keep in the builtins a flag for when IPython is active. We set it
689 # Keep in the builtins a flag for when IPython is active. We set it
690 # with setdefault so that multiple nested IPythons don't clobber one
690 # with setdefault so that multiple nested IPythons don't clobber one
691 # another. Each will increase its value by one upon being activated,
691 # another. Each will increase its value by one upon being activated,
692 # which also gives us a way to determine the nesting level.
692 # which also gives us a way to determine the nesting level.
693 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
693 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
694
694
695 def clean_builtins(self):
695 def clean_builtins(self):
696 """Remove any builtins which might have been added by add_builtins, or
696 """Remove any builtins which might have been added by add_builtins, or
697 restore overwritten ones to their previous values."""
697 restore overwritten ones to their previous values."""
698 for biname,bival in self.builtins_added.items():
698 for biname,bival in self.builtins_added.items():
699 if bival is Undefined:
699 if bival is Undefined:
700 del __builtin__.__dict__[biname]
700 del __builtin__.__dict__[biname]
701 else:
701 else:
702 __builtin__.__dict__[biname] = bival
702 __builtin__.__dict__[biname] = bival
703 self.builtins_added.clear()
703 self.builtins_added.clear()
704
704
705 def set_hook(self,name,hook):
705 def set_hook(self,name,hook):
706 """set_hook(name,hook) -> sets an internal IPython hook.
706 """set_hook(name,hook) -> sets an internal IPython hook.
707
707
708 IPython exposes some of its internal API as user-modifiable hooks. By
708 IPython exposes some of its internal API as user-modifiable hooks. By
709 resetting one of these hooks, you can modify IPython's behavior to
709 resetting one of these hooks, you can modify IPython's behavior to
710 call at runtime your own routines."""
710 call at runtime your own routines."""
711
711
712 # At some point in the future, this should validate the hook before it
712 # At some point in the future, this should validate the hook before it
713 # accepts it. Probably at least check that the hook takes the number
713 # accepts it. Probably at least check that the hook takes the number
714 # of args it's supposed to.
714 # of args it's supposed to.
715 setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
715 setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
716
716
717 def set_custom_exc(self,exc_tuple,handler):
717 def set_custom_exc(self,exc_tuple,handler):
718 """set_custom_exc(exc_tuple,handler)
718 """set_custom_exc(exc_tuple,handler)
719
719
720 Set a custom exception handler, which will be called if any of the
720 Set a custom exception handler, which will be called if any of the
721 exceptions in exc_tuple occur in the mainloop (specifically, in the
721 exceptions in exc_tuple occur in the mainloop (specifically, in the
722 runcode() method.
722 runcode() method.
723
723
724 Inputs:
724 Inputs:
725
725
726 - exc_tuple: a *tuple* of valid exceptions to call the defined
726 - exc_tuple: a *tuple* of valid exceptions to call the defined
727 handler for. It is very important that you use a tuple, and NOT A
727 handler for. It is very important that you use a tuple, and NOT A
728 LIST here, because of the way Python's except statement works. If
728 LIST here, because of the way Python's except statement works. If
729 you only want to trap a single exception, use a singleton tuple:
729 you only want to trap a single exception, use a singleton tuple:
730
730
731 exc_tuple == (MyCustomException,)
731 exc_tuple == (MyCustomException,)
732
732
733 - handler: this must be defined as a function with the following
733 - handler: this must be defined as a function with the following
734 basic interface: def my_handler(self,etype,value,tb).
734 basic interface: def my_handler(self,etype,value,tb).
735
735
736 This will be made into an instance method (via new.instancemethod)
736 This will be made into an instance method (via new.instancemethod)
737 of IPython itself, and it will be called if any of the exceptions
737 of IPython itself, and it will be called if any of the exceptions
738 listed in the exc_tuple are caught. If the handler is None, an
738 listed in the exc_tuple are caught. If the handler is None, an
739 internal basic one is used, which just prints basic info.
739 internal basic one is used, which just prints basic info.
740
740
741 WARNING: by putting in your own exception handler into IPython's main
741 WARNING: by putting in your own exception handler into IPython's main
742 execution loop, you run a very good chance of nasty crashes. This
742 execution loop, you run a very good chance of nasty crashes. This
743 facility should only be used if you really know what you are doing."""
743 facility should only be used if you really know what you are doing."""
744
744
745 assert type(exc_tuple)==type(()) , \
745 assert type(exc_tuple)==type(()) , \
746 "The custom exceptions must be given AS A TUPLE."
746 "The custom exceptions must be given AS A TUPLE."
747
747
748 def dummy_handler(self,etype,value,tb):
748 def dummy_handler(self,etype,value,tb):
749 print '*** Simple custom exception handler ***'
749 print '*** Simple custom exception handler ***'
750 print 'Exception type :',etype
750 print 'Exception type :',etype
751 print 'Exception value:',value
751 print 'Exception value:',value
752 print 'Traceback :',tb
752 print 'Traceback :',tb
753 print 'Source code :','\n'.join(self.buffer)
753 print 'Source code :','\n'.join(self.buffer)
754
754
755 if handler is None: handler = dummy_handler
755 if handler is None: handler = dummy_handler
756
756
757 self.CustomTB = new.instancemethod(handler,self,self.__class__)
757 self.CustomTB = new.instancemethod(handler,self,self.__class__)
758 self.custom_exceptions = exc_tuple
758 self.custom_exceptions = exc_tuple
759
759
760 def set_custom_completer(self,completer,pos=0):
760 def set_custom_completer(self,completer,pos=0):
761 """set_custom_completer(completer,pos=0)
761 """set_custom_completer(completer,pos=0)
762
762
763 Adds a new custom completer function.
763 Adds a new custom completer function.
764
764
765 The position argument (defaults to 0) is the index in the completers
765 The position argument (defaults to 0) is the index in the completers
766 list where you want the completer to be inserted."""
766 list where you want the completer to be inserted."""
767
767
768 newcomp = new.instancemethod(completer,self.Completer,
768 newcomp = new.instancemethod(completer,self.Completer,
769 self.Completer.__class__)
769 self.Completer.__class__)
770 self.Completer.matchers.insert(pos,newcomp)
770 self.Completer.matchers.insert(pos,newcomp)
771
771
772 def _get_call_pdb(self):
772 def _get_call_pdb(self):
773 return self._call_pdb
773 return self._call_pdb
774
774
775 def _set_call_pdb(self,val):
775 def _set_call_pdb(self,val):
776
776
777 if val not in (0,1,False,True):
777 if val not in (0,1,False,True):
778 raise ValueError,'new call_pdb value must be boolean'
778 raise ValueError,'new call_pdb value must be boolean'
779
779
780 # store value in instance
780 # store value in instance
781 self._call_pdb = val
781 self._call_pdb = val
782
782
783 # notify the actual exception handlers
783 # notify the actual exception handlers
784 self.InteractiveTB.call_pdb = val
784 self.InteractiveTB.call_pdb = val
785 if self.isthreaded:
785 if self.isthreaded:
786 try:
786 try:
787 self.sys_excepthook.call_pdb = val
787 self.sys_excepthook.call_pdb = val
788 except:
788 except:
789 warn('Failed to activate pdb for threaded exception handler')
789 warn('Failed to activate pdb for threaded exception handler')
790
790
791 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
791 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
792 'Control auto-activation of pdb at exceptions')
792 'Control auto-activation of pdb at exceptions')
793
793
794
794
795 # These special functions get installed in the builtin namespace, to
795 # These special functions get installed in the builtin namespace, to
796 # provide programmatic (pure python) access to magics, aliases and system
796 # provide programmatic (pure python) access to magics, aliases and system
797 # calls. This is important for logging, user scripting, and more.
797 # calls. This is important for logging, user scripting, and more.
798
798
799 # We are basically exposing, via normal python functions, the three
799 # We are basically exposing, via normal python functions, the three
800 # mechanisms in which ipython offers special call modes (magics for
800 # mechanisms in which ipython offers special call modes (magics for
801 # internal control, aliases for direct system access via pre-selected
801 # internal control, aliases for direct system access via pre-selected
802 # names, and !cmd for calling arbitrary system commands).
802 # names, and !cmd for calling arbitrary system commands).
803
803
804 def ipmagic(self,arg_s):
804 def ipmagic(self,arg_s):
805 """Call a magic function by name.
805 """Call a magic function by name.
806
806
807 Input: a string containing the name of the magic function to call and any
807 Input: a string containing the name of the magic function to call and any
808 additional arguments to be passed to the magic.
808 additional arguments to be passed to the magic.
809
809
810 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
810 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
811 prompt:
811 prompt:
812
812
813 In[1]: %name -opt foo bar
813 In[1]: %name -opt foo bar
814
814
815 To call a magic without arguments, simply use ipmagic('name').
815 To call a magic without arguments, simply use ipmagic('name').
816
816
817 This provides a proper Python function to call IPython's magics in any
817 This provides a proper Python function to call IPython's magics in any
818 valid Python code you can type at the interpreter, including loops and
818 valid Python code you can type at the interpreter, including loops and
819 compound statements. It is added by IPython to the Python builtin
819 compound statements. It is added by IPython to the Python builtin
820 namespace upon initialization."""
820 namespace upon initialization."""
821
821
822 args = arg_s.split(' ',1)
822 args = arg_s.split(' ',1)
823 magic_name = args[0]
823 magic_name = args[0]
824 if magic_name.startswith(self.ESC_MAGIC):
824 if magic_name.startswith(self.ESC_MAGIC):
825 magic_name = magic_name[1:]
825 magic_name = magic_name[1:]
826 try:
826 try:
827 magic_args = args[1]
827 magic_args = args[1]
828 except IndexError:
828 except IndexError:
829 magic_args = ''
829 magic_args = ''
830 fn = getattr(self,'magic_'+magic_name,None)
830 fn = getattr(self,'magic_'+magic_name,None)
831 if fn is None:
831 if fn is None:
832 error("Magic function `%s` not found." % magic_name)
832 error("Magic function `%s` not found." % magic_name)
833 else:
833 else:
834 magic_args = self.var_expand(magic_args)
834 magic_args = self.var_expand(magic_args)
835 return fn(magic_args)
835 return fn(magic_args)
836
836
837 def ipalias(self,arg_s):
837 def ipalias(self,arg_s):
838 """Call an alias by name.
838 """Call an alias by name.
839
839
840 Input: a string containing the name of the alias to call and any
840 Input: a string containing the name of the alias to call and any
841 additional arguments to be passed to the magic.
841 additional arguments to be passed to the magic.
842
842
843 ipalias('name -opt foo bar') is equivalent to typing at the ipython
843 ipalias('name -opt foo bar') is equivalent to typing at the ipython
844 prompt:
844 prompt:
845
845
846 In[1]: name -opt foo bar
846 In[1]: name -opt foo bar
847
847
848 To call an alias without arguments, simply use ipalias('name').
848 To call an alias without arguments, simply use ipalias('name').
849
849
850 This provides a proper Python function to call IPython's aliases in any
850 This provides a proper Python function to call IPython's aliases in any
851 valid Python code you can type at the interpreter, including loops and
851 valid Python code you can type at the interpreter, including loops and
852 compound statements. It is added by IPython to the Python builtin
852 compound statements. It is added by IPython to the Python builtin
853 namespace upon initialization."""
853 namespace upon initialization."""
854
854
855 args = arg_s.split(' ',1)
855 args = arg_s.split(' ',1)
856 alias_name = args[0]
856 alias_name = args[0]
857 try:
857 try:
858 alias_args = args[1]
858 alias_args = args[1]
859 except IndexError:
859 except IndexError:
860 alias_args = ''
860 alias_args = ''
861 if alias_name in self.alias_table:
861 if alias_name in self.alias_table:
862 self.call_alias(alias_name,alias_args)
862 self.call_alias(alias_name,alias_args)
863 else:
863 else:
864 error("Alias `%s` not found." % alias_name)
864 error("Alias `%s` not found." % alias_name)
865
865
866 def ipsystem(self,arg_s):
866 def ipsystem(self,arg_s):
867 """Make a system call, using IPython."""
867 """Make a system call, using IPython."""
868
868
869 self.system(arg_s)
869 self.system(arg_s)
870
870
871 def complete(self,text):
871 def complete(self,text):
872 """Return a sorted list of all possible completions on text.
872 """Return a sorted list of all possible completions on text.
873
873
874 Inputs:
874 Inputs:
875
875
876 - text: a string of text to be completed on.
876 - text: a string of text to be completed on.
877
877
878 This is a wrapper around the completion mechanism, similar to what
878 This is a wrapper around the completion mechanism, similar to what
879 readline does at the command line when the TAB key is hit. By
879 readline does at the command line when the TAB key is hit. By
880 exposing it as a method, it can be used by other non-readline
880 exposing it as a method, it can be used by other non-readline
881 environments (such as GUIs) for text completion.
881 environments (such as GUIs) for text completion.
882
882
883 Simple usage example:
883 Simple usage example:
884
884
885 In [1]: x = 'hello'
885 In [1]: x = 'hello'
886
886
887 In [2]: __IP.complete('x.l')
887 In [2]: __IP.complete('x.l')
888 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
888 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
889
889
890 complete = self.Completer.complete
890 complete = self.Completer.complete
891 state = 0
891 state = 0
892 # use a dict so we get unique keys, since ipyhton's multiple
892 # use a dict so we get unique keys, since ipyhton's multiple
893 # completers can return duplicates.
893 # completers can return duplicates.
894 comps = {}
894 comps = {}
895 while True:
895 while True:
896 newcomp = complete(text,state)
896 newcomp = complete(text,state)
897 if newcomp is None:
897 if newcomp is None:
898 break
898 break
899 comps[newcomp] = 1
899 comps[newcomp] = 1
900 state += 1
900 state += 1
901 outcomps = comps.keys()
901 outcomps = comps.keys()
902 outcomps.sort()
902 outcomps.sort()
903 return outcomps
903 return outcomps
904
904
905 def set_completer_frame(self, frame=None):
905 def set_completer_frame(self, frame=None):
906 if frame:
906 if frame:
907 self.Completer.namespace = frame.f_locals
907 self.Completer.namespace = frame.f_locals
908 self.Completer.global_namespace = frame.f_globals
908 self.Completer.global_namespace = frame.f_globals
909 else:
909 else:
910 self.Completer.namespace = self.user_ns
910 self.Completer.namespace = self.user_ns
911 self.Completer.global_namespace = self.user_global_ns
911 self.Completer.global_namespace = self.user_global_ns
912
912
913 def init_auto_alias(self):
913 def init_auto_alias(self):
914 """Define some aliases automatically.
914 """Define some aliases automatically.
915
915
916 These are ALL parameter-less aliases"""
916 These are ALL parameter-less aliases"""
917
917
918 for alias,cmd in self.auto_alias:
918 for alias,cmd in self.auto_alias:
919 self.alias_table[alias] = (0,cmd)
919 self.alias_table[alias] = (0,cmd)
920
920
921 def alias_table_validate(self,verbose=0):
921 def alias_table_validate(self,verbose=0):
922 """Update information about the alias table.
922 """Update information about the alias table.
923
923
924 In particular, make sure no Python keywords/builtins are in it."""
924 In particular, make sure no Python keywords/builtins are in it."""
925
925
926 no_alias = self.no_alias
926 no_alias = self.no_alias
927 for k in self.alias_table.keys():
927 for k in self.alias_table.keys():
928 if k in no_alias:
928 if k in no_alias:
929 del self.alias_table[k]
929 del self.alias_table[k]
930 if verbose:
930 if verbose:
931 print ("Deleting alias <%s>, it's a Python "
931 print ("Deleting alias <%s>, it's a Python "
932 "keyword or builtin." % k)
932 "keyword or builtin." % k)
933
933
934 def set_autoindent(self,value=None):
934 def set_autoindent(self,value=None):
935 """Set the autoindent flag, checking for readline support.
935 """Set the autoindent flag, checking for readline support.
936
936
937 If called with no arguments, it acts as a toggle."""
937 If called with no arguments, it acts as a toggle."""
938
938
939 if not self.has_readline:
939 if not self.has_readline:
940 if os.name == 'posix':
940 if os.name == 'posix':
941 warn("The auto-indent feature requires the readline library")
941 warn("The auto-indent feature requires the readline library")
942 self.autoindent = 0
942 self.autoindent = 0
943 return
943 return
944 if value is None:
944 if value is None:
945 self.autoindent = not self.autoindent
945 self.autoindent = not self.autoindent
946 else:
946 else:
947 self.autoindent = value
947 self.autoindent = value
948
948
949 def rc_set_toggle(self,rc_field,value=None):
949 def rc_set_toggle(self,rc_field,value=None):
950 """Set or toggle a field in IPython's rc config. structure.
950 """Set or toggle a field in IPython's rc config. structure.
951
951
952 If called with no arguments, it acts as a toggle.
952 If called with no arguments, it acts as a toggle.
953
953
954 If called with a non-existent field, the resulting AttributeError
954 If called with a non-existent field, the resulting AttributeError
955 exception will propagate out."""
955 exception will propagate out."""
956
956
957 rc_val = getattr(self.rc,rc_field)
957 rc_val = getattr(self.rc,rc_field)
958 if value is None:
958 if value is None:
959 value = not rc_val
959 value = not rc_val
960 setattr(self.rc,rc_field,value)
960 setattr(self.rc,rc_field,value)
961
961
962 def user_setup(self,ipythondir,rc_suffix,mode='install'):
962 def user_setup(self,ipythondir,rc_suffix,mode='install'):
963 """Install the user configuration directory.
963 """Install the user configuration directory.
964
964
965 Can be called when running for the first time or to upgrade the user's
965 Can be called when running for the first time or to upgrade the user's
966 .ipython/ directory with the mode parameter. Valid modes are 'install'
966 .ipython/ directory with the mode parameter. Valid modes are 'install'
967 and 'upgrade'."""
967 and 'upgrade'."""
968
968
969 def wait():
969 def wait():
970 try:
970 try:
971 raw_input("Please press <RETURN> to start IPython.")
971 raw_input("Please press <RETURN> to start IPython.")
972 except EOFError:
972 except EOFError:
973 print >> Term.cout
973 print >> Term.cout
974 print '*'*70
974 print '*'*70
975
975
976 cwd = os.getcwd() # remember where we started
976 cwd = os.getcwd() # remember where we started
977 glb = glob.glob
977 glb = glob.glob
978 print '*'*70
978 print '*'*70
979 if mode == 'install':
979 if mode == 'install':
980 print \
980 print \
981 """Welcome to IPython. I will try to create a personal configuration directory
981 """Welcome to IPython. I will try to create a personal configuration directory
982 where you can customize many aspects of IPython's functionality in:\n"""
982 where you can customize many aspects of IPython's functionality in:\n"""
983 else:
983 else:
984 print 'I am going to upgrade your configuration in:'
984 print 'I am going to upgrade your configuration in:'
985
985
986 print ipythondir
986 print ipythondir
987
987
988 rcdirend = os.path.join('IPython','UserConfig')
988 rcdirend = os.path.join('IPython','UserConfig')
989 cfg = lambda d: os.path.join(d,rcdirend)
989 cfg = lambda d: os.path.join(d,rcdirend)
990 try:
990 try:
991 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
991 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
992 except IOError:
992 except IOError:
993 warning = """
993 warning = """
994 Installation error. IPython's directory was not found.
994 Installation error. IPython's directory was not found.
995
995
996 Check the following:
996 Check the following:
997
997
998 The ipython/IPython directory should be in a directory belonging to your
998 The ipython/IPython directory should be in a directory belonging to your
999 PYTHONPATH environment variable (that is, it should be in a directory
999 PYTHONPATH environment variable (that is, it should be in a directory
1000 belonging to sys.path). You can copy it explicitly there or just link to it.
1000 belonging to sys.path). You can copy it explicitly there or just link to it.
1001
1001
1002 IPython will proceed with builtin defaults.
1002 IPython will proceed with builtin defaults.
1003 """
1003 """
1004 warn(warning)
1004 warn(warning)
1005 wait()
1005 wait()
1006 return
1006 return
1007
1007
1008 if mode == 'install':
1008 if mode == 'install':
1009 try:
1009 try:
1010 shutil.copytree(rcdir,ipythondir)
1010 shutil.copytree(rcdir,ipythondir)
1011 os.chdir(ipythondir)
1011 os.chdir(ipythondir)
1012 rc_files = glb("ipythonrc*")
1012 rc_files = glb("ipythonrc*")
1013 for rc_file in rc_files:
1013 for rc_file in rc_files:
1014 os.rename(rc_file,rc_file+rc_suffix)
1014 os.rename(rc_file,rc_file+rc_suffix)
1015 except:
1015 except:
1016 warning = """
1016 warning = """
1017
1017
1018 There was a problem with the installation:
1018 There was a problem with the installation:
1019 %s
1019 %s
1020 Try to correct it or contact the developers if you think it's a bug.
1020 Try to correct it or contact the developers if you think it's a bug.
1021 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1021 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1022 warn(warning)
1022 warn(warning)
1023 wait()
1023 wait()
1024 return
1024 return
1025
1025
1026 elif mode == 'upgrade':
1026 elif mode == 'upgrade':
1027 try:
1027 try:
1028 os.chdir(ipythondir)
1028 os.chdir(ipythondir)
1029 except:
1029 except:
1030 print """
1030 print """
1031 Can not upgrade: changing to directory %s failed. Details:
1031 Can not upgrade: changing to directory %s failed. Details:
1032 %s
1032 %s
1033 """ % (ipythondir,sys.exc_info()[1])
1033 """ % (ipythondir,sys.exc_info()[1])
1034 wait()
1034 wait()
1035 return
1035 return
1036 else:
1036 else:
1037 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1037 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1038 for new_full_path in sources:
1038 for new_full_path in sources:
1039 new_filename = os.path.basename(new_full_path)
1039 new_filename = os.path.basename(new_full_path)
1040 if new_filename.startswith('ipythonrc'):
1040 if new_filename.startswith('ipythonrc'):
1041 new_filename = new_filename + rc_suffix
1041 new_filename = new_filename + rc_suffix
1042 # The config directory should only contain files, skip any
1042 # The config directory should only contain files, skip any
1043 # directories which may be there (like CVS)
1043 # directories which may be there (like CVS)
1044 if os.path.isdir(new_full_path):
1044 if os.path.isdir(new_full_path):
1045 continue
1045 continue
1046 if os.path.exists(new_filename):
1046 if os.path.exists(new_filename):
1047 old_file = new_filename+'.old'
1047 old_file = new_filename+'.old'
1048 if os.path.exists(old_file):
1048 if os.path.exists(old_file):
1049 os.remove(old_file)
1049 os.remove(old_file)
1050 os.rename(new_filename,old_file)
1050 os.rename(new_filename,old_file)
1051 shutil.copy(new_full_path,new_filename)
1051 shutil.copy(new_full_path,new_filename)
1052 else:
1052 else:
1053 raise ValueError,'unrecognized mode for install:',`mode`
1053 raise ValueError,'unrecognized mode for install:',`mode`
1054
1054
1055 # Fix line-endings to those native to each platform in the config
1055 # Fix line-endings to those native to each platform in the config
1056 # directory.
1056 # directory.
1057 try:
1057 try:
1058 os.chdir(ipythondir)
1058 os.chdir(ipythondir)
1059 except:
1059 except:
1060 print """
1060 print """
1061 Problem: changing to directory %s failed.
1061 Problem: changing to directory %s failed.
1062 Details:
1062 Details:
1063 %s
1063 %s
1064
1064
1065 Some configuration files may have incorrect line endings. This should not
1065 Some configuration files may have incorrect line endings. This should not
1066 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1066 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1067 wait()
1067 wait()
1068 else:
1068 else:
1069 for fname in glb('ipythonrc*'):
1069 for fname in glb('ipythonrc*'):
1070 try:
1070 try:
1071 native_line_ends(fname,backup=0)
1071 native_line_ends(fname,backup=0)
1072 except IOError:
1072 except IOError:
1073 pass
1073 pass
1074
1074
1075 if mode == 'install':
1075 if mode == 'install':
1076 print """
1076 print """
1077 Successful installation!
1077 Successful installation!
1078
1078
1079 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1079 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1080 IPython manual (there are both HTML and PDF versions supplied with the
1080 IPython manual (there are both HTML and PDF versions supplied with the
1081 distribution) to make sure that your system environment is properly configured
1081 distribution) to make sure that your system environment is properly configured
1082 to take advantage of IPython's features."""
1082 to take advantage of IPython's features."""
1083 else:
1083 else:
1084 print """
1084 print """
1085 Successful upgrade!
1085 Successful upgrade!
1086
1086
1087 All files in your directory:
1087 All files in your directory:
1088 %(ipythondir)s
1088 %(ipythondir)s
1089 which would have been overwritten by the upgrade were backed up with a .old
1089 which would have been overwritten by the upgrade were backed up with a .old
1090 extension. If you had made particular customizations in those files you may
1090 extension. If you had made particular customizations in those files you may
1091 want to merge them back into the new files.""" % locals()
1091 want to merge them back into the new files.""" % locals()
1092 wait()
1092 wait()
1093 os.chdir(cwd)
1093 os.chdir(cwd)
1094 # end user_setup()
1094 # end user_setup()
1095
1095
1096 def atexit_operations(self):
1096 def atexit_operations(self):
1097 """This will be executed at the time of exit.
1097 """This will be executed at the time of exit.
1098
1098
1099 Saving of persistent data should be performed here. """
1099 Saving of persistent data should be performed here. """
1100
1100
1101 #print '*** IPython exit cleanup ***' # dbg
1101 #print '*** IPython exit cleanup ***' # dbg
1102 # input history
1102 # input history
1103 self.savehist()
1103 self.savehist()
1104
1104
1105 # Cleanup all tempfiles left around
1105 # Cleanup all tempfiles left around
1106 for tfile in self.tempfiles:
1106 for tfile in self.tempfiles:
1107 try:
1107 try:
1108 os.unlink(tfile)
1108 os.unlink(tfile)
1109 except OSError:
1109 except OSError:
1110 pass
1110 pass
1111
1111
1112 # save the "persistent data" catch-all dictionary
1112 # save the "persistent data" catch-all dictionary
1113 try:
1113 try:
1114 pickle.dump(self.persist, open(self.persist_fname,"w"))
1114 pickle.dump(self.persist, open(self.persist_fname,"w"))
1115 except:
1115 except:
1116 print "*** ERROR *** persistent data saving failed."
1116 print "*** ERROR *** persistent data saving failed."
1117
1117
1118 def savehist(self):
1118 def savehist(self):
1119 """Save input history to a file (via readline library)."""
1119 """Save input history to a file (via readline library)."""
1120 try:
1120 try:
1121 self.readline.write_history_file(self.histfile)
1121 self.readline.write_history_file(self.histfile)
1122 except:
1122 except:
1123 print 'Unable to save IPython command history to file: ' + \
1123 print 'Unable to save IPython command history to file: ' + \
1124 `self.histfile`
1124 `self.histfile`
1125
1125
1126 def pre_readline(self):
1126 def pre_readline(self):
1127 """readline hook to be used at the start of each line.
1127 """readline hook to be used at the start of each line.
1128
1128
1129 Currently it handles auto-indent only."""
1129 Currently it handles auto-indent only."""
1130
1130
1131 self.readline.insert_text(self.indent_current)
1131 self.readline.insert_text(self.indent_current)
1132
1132
1133 def init_readline(self):
1133 def init_readline(self):
1134 """Command history completion/saving/reloading."""
1134 """Command history completion/saving/reloading."""
1135 try:
1135 try:
1136 import readline
1136 import readline
1137 except ImportError:
1137 except ImportError:
1138 self.has_readline = 0
1138 self.has_readline = 0
1139 self.readline = None
1139 self.readline = None
1140 # no point in bugging windows users with this every time:
1140 # no point in bugging windows users with this every time:
1141 if os.name == 'posix':
1141 if os.name == 'posix':
1142 warn('Readline services not available on this platform.')
1142 warn('Readline services not available on this platform.')
1143 else:
1143 else:
1144 import atexit
1144 import atexit
1145 from IPython.completer import IPCompleter
1145 from IPython.completer import IPCompleter
1146 self.Completer = IPCompleter(self,
1146 self.Completer = IPCompleter(self,
1147 self.user_ns,
1147 self.user_ns,
1148 self.user_global_ns,
1148 self.user_global_ns,
1149 self.rc.readline_omit__names,
1149 self.rc.readline_omit__names,
1150 self.alias_table)
1150 self.alias_table)
1151
1151
1152 # Platform-specific configuration
1152 # Platform-specific configuration
1153 if os.name == 'nt':
1153 if os.name == 'nt':
1154 self.readline_startup_hook = readline.set_pre_input_hook
1154 self.readline_startup_hook = readline.set_pre_input_hook
1155 else:
1155 else:
1156 self.readline_startup_hook = readline.set_startup_hook
1156 self.readline_startup_hook = readline.set_startup_hook
1157
1157
1158 # Load user's initrc file (readline config)
1158 # Load user's initrc file (readline config)
1159 inputrc_name = os.environ.get('INPUTRC')
1159 inputrc_name = os.environ.get('INPUTRC')
1160 if inputrc_name is None:
1160 if inputrc_name is None:
1161 home_dir = get_home_dir()
1161 home_dir = get_home_dir()
1162 if home_dir is not None:
1162 if home_dir is not None:
1163 inputrc_name = os.path.join(home_dir,'.inputrc')
1163 inputrc_name = os.path.join(home_dir,'.inputrc')
1164 if os.path.isfile(inputrc_name):
1164 if os.path.isfile(inputrc_name):
1165 try:
1165 try:
1166 readline.read_init_file(inputrc_name)
1166 readline.read_init_file(inputrc_name)
1167 except:
1167 except:
1168 warn('Problems reading readline initialization file <%s>'
1168 warn('Problems reading readline initialization file <%s>'
1169 % inputrc_name)
1169 % inputrc_name)
1170
1170
1171 self.has_readline = 1
1171 self.has_readline = 1
1172 self.readline = readline
1172 self.readline = readline
1173 # save this in sys so embedded copies can restore it properly
1173 # save this in sys so embedded copies can restore it properly
1174 sys.ipcompleter = self.Completer.complete
1174 sys.ipcompleter = self.Completer.complete
1175 readline.set_completer(self.Completer.complete)
1175 readline.set_completer(self.Completer.complete)
1176
1176
1177 # Configure readline according to user's prefs
1177 # Configure readline according to user's prefs
1178 for rlcommand in self.rc.readline_parse_and_bind:
1178 for rlcommand in self.rc.readline_parse_and_bind:
1179 readline.parse_and_bind(rlcommand)
1179 readline.parse_and_bind(rlcommand)
1180
1180
1181 # remove some chars from the delimiters list
1181 # remove some chars from the delimiters list
1182 delims = readline.get_completer_delims()
1182 delims = readline.get_completer_delims()
1183 delims = delims.translate(string._idmap,
1183 delims = delims.translate(string._idmap,
1184 self.rc.readline_remove_delims)
1184 self.rc.readline_remove_delims)
1185 readline.set_completer_delims(delims)
1185 readline.set_completer_delims(delims)
1186 # otherwise we end up with a monster history after a while:
1186 # otherwise we end up with a monster history after a while:
1187 readline.set_history_length(1000)
1187 readline.set_history_length(1000)
1188 try:
1188 try:
1189 #print '*** Reading readline history' # dbg
1189 #print '*** Reading readline history' # dbg
1190 readline.read_history_file(self.histfile)
1190 readline.read_history_file(self.histfile)
1191 except IOError:
1191 except IOError:
1192 pass # It doesn't exist yet.
1192 pass # It doesn't exist yet.
1193
1193
1194 atexit.register(self.atexit_operations)
1194 atexit.register(self.atexit_operations)
1195 del atexit
1195 del atexit
1196
1196
1197 # Configure auto-indent for all platforms
1197 # Configure auto-indent for all platforms
1198 self.set_autoindent(self.rc.autoindent)
1198 self.set_autoindent(self.rc.autoindent)
1199
1199
1200 def _should_recompile(self,e):
1200 def _should_recompile(self,e):
1201 """Utility routine for edit_syntax_error"""
1201 """Utility routine for edit_syntax_error"""
1202
1202
1203 if e.filename in ('<ipython console>','<input>','<string>',
1203 if e.filename in ('<ipython console>','<input>','<string>',
1204 '<console>',None):
1204 '<console>',None):
1205
1205
1206 return False
1206 return False
1207 try:
1207 try:
1208 if not ask_yes_no('Return to editor to correct syntax error? '
1208 if not ask_yes_no('Return to editor to correct syntax error? '
1209 '[Y/n] ','y'):
1209 '[Y/n] ','y'):
1210 return False
1210 return False
1211 except EOFError:
1211 except EOFError:
1212 return False
1212 return False
1213
1213
1214 def int0(x):
1214 def int0(x):
1215 try:
1215 try:
1216 return int(x)
1216 return int(x)
1217 except TypeError:
1217 except TypeError:
1218 return 0
1218 return 0
1219 # always pass integer line and offset values to editor hook
1219 # always pass integer line and offset values to editor hook
1220 self.hooks.fix_error_editor(e.filename,
1220 self.hooks.fix_error_editor(e.filename,
1221 int0(e.lineno),int0(e.offset),e.msg)
1221 int0(e.lineno),int0(e.offset),e.msg)
1222 return True
1222 return True
1223
1223
1224 def edit_syntax_error(self):
1224 def edit_syntax_error(self):
1225 """The bottom half of the syntax error handler called in the main loop.
1225 """The bottom half of the syntax error handler called in the main loop.
1226
1226
1227 Loop until syntax error is fixed or user cancels.
1227 Loop until syntax error is fixed or user cancels.
1228 """
1228 """
1229
1229
1230 while self.SyntaxTB.last_syntax_error:
1230 while self.SyntaxTB.last_syntax_error:
1231 # copy and clear last_syntax_error
1231 # copy and clear last_syntax_error
1232 err = self.SyntaxTB.clear_err_state()
1232 err = self.SyntaxTB.clear_err_state()
1233 if not self._should_recompile(err):
1233 if not self._should_recompile(err):
1234 return
1234 return
1235 try:
1235 try:
1236 # may set last_syntax_error again if a SyntaxError is raised
1236 # may set last_syntax_error again if a SyntaxError is raised
1237 self.safe_execfile(err.filename,self.shell.user_ns)
1237 self.safe_execfile(err.filename,self.shell.user_ns)
1238 except:
1238 except:
1239 self.showtraceback()
1239 self.showtraceback()
1240 else:
1240 else:
1241 f = file(err.filename)
1241 f = file(err.filename)
1242 try:
1242 try:
1243 sys.displayhook(f.read())
1243 sys.displayhook(f.read())
1244 finally:
1244 finally:
1245 f.close()
1245 f.close()
1246
1246
1247 def showsyntaxerror(self, filename=None):
1247 def showsyntaxerror(self, filename=None):
1248 """Display the syntax error that just occurred.
1248 """Display the syntax error that just occurred.
1249
1249
1250 This doesn't display a stack trace because there isn't one.
1250 This doesn't display a stack trace because there isn't one.
1251
1251
1252 If a filename is given, it is stuffed in the exception instead
1252 If a filename is given, it is stuffed in the exception instead
1253 of what was there before (because Python's parser always uses
1253 of what was there before (because Python's parser always uses
1254 "<string>" when reading from a string).
1254 "<string>" when reading from a string).
1255 """
1255 """
1256 etype, value, last_traceback = sys.exc_info()
1256 etype, value, last_traceback = sys.exc_info()
1257 if filename and etype is SyntaxError:
1257 if filename and etype is SyntaxError:
1258 # Work hard to stuff the correct filename in the exception
1258 # Work hard to stuff the correct filename in the exception
1259 try:
1259 try:
1260 msg, (dummy_filename, lineno, offset, line) = value
1260 msg, (dummy_filename, lineno, offset, line) = value
1261 except:
1261 except:
1262 # Not the format we expect; leave it alone
1262 # Not the format we expect; leave it alone
1263 pass
1263 pass
1264 else:
1264 else:
1265 # Stuff in the right filename
1265 # Stuff in the right filename
1266 try:
1266 try:
1267 # Assume SyntaxError is a class exception
1267 # Assume SyntaxError is a class exception
1268 value = SyntaxError(msg, (filename, lineno, offset, line))
1268 value = SyntaxError(msg, (filename, lineno, offset, line))
1269 except:
1269 except:
1270 # If that failed, assume SyntaxError is a string
1270 # If that failed, assume SyntaxError is a string
1271 value = msg, (filename, lineno, offset, line)
1271 value = msg, (filename, lineno, offset, line)
1272 self.SyntaxTB(etype,value,[])
1272 self.SyntaxTB(etype,value,[])
1273
1273
1274 def debugger(self):
1274 def debugger(self):
1275 """Call the pdb debugger."""
1275 """Call the pdb debugger."""
1276
1276
1277 if not self.rc.pdb:
1277 if not self.rc.pdb:
1278 return
1278 return
1279 pdb.pm()
1279 pdb.pm()
1280
1280
1281 def showtraceback(self,exc_tuple = None,filename=None):
1281 def showtraceback(self,exc_tuple = None,filename=None):
1282 """Display the exception that just occurred."""
1282 """Display the exception that just occurred."""
1283
1283
1284 # Though this won't be called by syntax errors in the input line,
1284 # Though this won't be called by syntax errors in the input line,
1285 # there may be SyntaxError cases whith imported code.
1285 # there may be SyntaxError cases whith imported code.
1286 if exc_tuple is None:
1286 if exc_tuple is None:
1287 type, value, tb = sys.exc_info()
1287 type, value, tb = sys.exc_info()
1288 else:
1288 else:
1289 type, value, tb = exc_tuple
1289 type, value, tb = exc_tuple
1290 if type is SyntaxError:
1290 if type is SyntaxError:
1291 self.showsyntaxerror(filename)
1291 self.showsyntaxerror(filename)
1292 else:
1292 else:
1293 self.InteractiveTB()
1293 self.InteractiveTB()
1294 if self.InteractiveTB.call_pdb and self.has_readline:
1294 if self.InteractiveTB.call_pdb and self.has_readline:
1295 # pdb mucks up readline, fix it back
1295 # pdb mucks up readline, fix it back
1296 self.readline.set_completer(self.Completer.complete)
1296 self.readline.set_completer(self.Completer.complete)
1297
1297
1298 def mainloop(self,banner=None):
1298 def mainloop(self,banner=None):
1299 """Creates the local namespace and starts the mainloop.
1299 """Creates the local namespace and starts the mainloop.
1300
1300
1301 If an optional banner argument is given, it will override the
1301 If an optional banner argument is given, it will override the
1302 internally created default banner."""
1302 internally created default banner."""
1303
1303
1304 if self.rc.c: # Emulate Python's -c option
1304 if self.rc.c: # Emulate Python's -c option
1305 self.exec_init_cmd()
1305 self.exec_init_cmd()
1306 if banner is None:
1306 if banner is None:
1307 if self.rc.banner:
1307 if self.rc.banner:
1308 banner = self.BANNER+self.banner2
1308 banner = self.BANNER+self.banner2
1309 else:
1309 else:
1310 banner = ''
1310 banner = ''
1311 self.interact(banner)
1311 self.interact(banner)
1312
1312
1313 def exec_init_cmd(self):
1313 def exec_init_cmd(self):
1314 """Execute a command given at the command line.
1314 """Execute a command given at the command line.
1315
1315
1316 This emulates Python's -c option."""
1316 This emulates Python's -c option."""
1317
1317
1318 sys.argv = ['-c']
1318 sys.argv = ['-c']
1319 self.push(self.rc.c)
1319 self.push(self.rc.c)
1320
1320
1321 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1321 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1322 """Embeds IPython into a running python program.
1322 """Embeds IPython into a running python program.
1323
1323
1324 Input:
1324 Input:
1325
1325
1326 - header: An optional header message can be specified.
1326 - header: An optional header message can be specified.
1327
1327
1328 - local_ns, global_ns: working namespaces. If given as None, the
1328 - local_ns, global_ns: working namespaces. If given as None, the
1329 IPython-initialized one is updated with __main__.__dict__, so that
1329 IPython-initialized one is updated with __main__.__dict__, so that
1330 program variables become visible but user-specific configuration
1330 program variables become visible but user-specific configuration
1331 remains possible.
1331 remains possible.
1332
1332
1333 - stack_depth: specifies how many levels in the stack to go to
1333 - stack_depth: specifies how many levels in the stack to go to
1334 looking for namespaces (when local_ns and global_ns are None). This
1334 looking for namespaces (when local_ns and global_ns are None). This
1335 allows an intermediate caller to make sure that this function gets
1335 allows an intermediate caller to make sure that this function gets
1336 the namespace from the intended level in the stack. By default (0)
1336 the namespace from the intended level in the stack. By default (0)
1337 it will get its locals and globals from the immediate caller.
1337 it will get its locals and globals from the immediate caller.
1338
1338
1339 Warning: it's possible to use this in a program which is being run by
1339 Warning: it's possible to use this in a program which is being run by
1340 IPython itself (via %run), but some funny things will happen (a few
1340 IPython itself (via %run), but some funny things will happen (a few
1341 globals get overwritten). In the future this will be cleaned up, as
1341 globals get overwritten). In the future this will be cleaned up, as
1342 there is no fundamental reason why it can't work perfectly."""
1342 there is no fundamental reason why it can't work perfectly."""
1343
1343
1344 # Get locals and globals from caller
1344 # Get locals and globals from caller
1345 if local_ns is None or global_ns is None:
1345 if local_ns is None or global_ns is None:
1346 call_frame = sys._getframe(stack_depth).f_back
1346 call_frame = sys._getframe(stack_depth).f_back
1347
1347
1348 if local_ns is None:
1348 if local_ns is None:
1349 local_ns = call_frame.f_locals
1349 local_ns = call_frame.f_locals
1350 if global_ns is None:
1350 if global_ns is None:
1351 global_ns = call_frame.f_globals
1351 global_ns = call_frame.f_globals
1352
1352
1353 # Update namespaces and fire up interpreter
1353 # Update namespaces and fire up interpreter
1354
1354
1355 # The global one is easy, we can just throw it in
1355 # The global one is easy, we can just throw it in
1356 self.user_global_ns = global_ns
1356 self.user_global_ns = global_ns
1357
1357
1358 # but the user/local one is tricky: ipython needs it to store internal
1358 # but the user/local one is tricky: ipython needs it to store internal
1359 # data, but we also need the locals. We'll copy locals in the user
1359 # data, but we also need the locals. We'll copy locals in the user
1360 # one, but will track what got copied so we can delete them at exit.
1360 # one, but will track what got copied so we can delete them at exit.
1361 # This is so that a later embedded call doesn't see locals from a
1361 # This is so that a later embedded call doesn't see locals from a
1362 # previous call (which most likely existed in a separate scope).
1362 # previous call (which most likely existed in a separate scope).
1363 local_varnames = local_ns.keys()
1363 local_varnames = local_ns.keys()
1364 self.user_ns.update(local_ns)
1364 self.user_ns.update(local_ns)
1365
1365
1366 # Patch for global embedding to make sure that things don't overwrite
1366 # Patch for global embedding to make sure that things don't overwrite
1367 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1367 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1368 # FIXME. Test this a bit more carefully (the if.. is new)
1368 # FIXME. Test this a bit more carefully (the if.. is new)
1369 if local_ns is None and global_ns is None:
1369 if local_ns is None and global_ns is None:
1370 self.user_global_ns.update(__main__.__dict__)
1370 self.user_global_ns.update(__main__.__dict__)
1371
1371
1372 # make sure the tab-completer has the correct frame information, so it
1372 # make sure the tab-completer has the correct frame information, so it
1373 # actually completes using the frame's locals/globals
1373 # actually completes using the frame's locals/globals
1374 self.set_completer_frame()
1374 self.set_completer_frame()
1375
1375
1376 # before activating the interactive mode, we need to make sure that
1376 # before activating the interactive mode, we need to make sure that
1377 # all names in the builtin namespace needed by ipython point to
1377 # all names in the builtin namespace needed by ipython point to
1378 # ourselves, and not to other instances.
1378 # ourselves, and not to other instances.
1379 self.add_builtins()
1379 self.add_builtins()
1380
1380
1381 self.interact(header)
1381 self.interact(header)
1382
1382
1383 # now, purge out the user namespace from anything we might have added
1383 # now, purge out the user namespace from anything we might have added
1384 # from the caller's local namespace
1384 # from the caller's local namespace
1385 delvar = self.user_ns.pop
1385 delvar = self.user_ns.pop
1386 for var in local_varnames:
1386 for var in local_varnames:
1387 delvar(var,None)
1387 delvar(var,None)
1388 # and clean builtins we may have overridden
1388 # and clean builtins we may have overridden
1389 self.clean_builtins()
1389 self.clean_builtins()
1390
1390
1391 def interact(self, banner=None):
1391 def interact(self, banner=None):
1392 """Closely emulate the interactive Python console.
1392 """Closely emulate the interactive Python console.
1393
1393
1394 The optional banner argument specify the banner to print
1394 The optional banner argument specify the banner to print
1395 before the first interaction; by default it prints a banner
1395 before the first interaction; by default it prints a banner
1396 similar to the one printed by the real Python interpreter,
1396 similar to the one printed by the real Python interpreter,
1397 followed by the current class name in parentheses (so as not
1397 followed by the current class name in parentheses (so as not
1398 to confuse this with the real interpreter -- since it's so
1398 to confuse this with the real interpreter -- since it's so
1399 close!).
1399 close!).
1400
1400
1401 """
1401 """
1402 cprt = 'Type "copyright", "credits" or "license" for more information.'
1402 cprt = 'Type "copyright", "credits" or "license" for more information.'
1403 if banner is None:
1403 if banner is None:
1404 self.write("Python %s on %s\n%s\n(%s)\n" %
1404 self.write("Python %s on %s\n%s\n(%s)\n" %
1405 (sys.version, sys.platform, cprt,
1405 (sys.version, sys.platform, cprt,
1406 self.__class__.__name__))
1406 self.__class__.__name__))
1407 else:
1407 else:
1408 self.write(banner)
1408 self.write(banner)
1409
1409
1410 more = 0
1410 more = 0
1411
1411
1412 # Mark activity in the builtins
1412 # Mark activity in the builtins
1413 __builtin__.__dict__['__IPYTHON__active'] += 1
1413 __builtin__.__dict__['__IPYTHON__active'] += 1
1414
1414
1415 # exit_now is set by a call to %Exit or %Quit
1415 # exit_now is set by a call to %Exit or %Quit
1416 self.exit_now = False
1416 self.exit_now = False
1417 while not self.exit_now:
1417 while not self.exit_now:
1418
1418
1419 try:
1419 try:
1420 if more:
1420 if more:
1421 prompt = self.outputcache.prompt2
1421 prompt = self.outputcache.prompt2
1422 if self.autoindent:
1422 if self.autoindent:
1423 self.readline_startup_hook(self.pre_readline)
1423 self.readline_startup_hook(self.pre_readline)
1424 else:
1424 else:
1425 prompt = self.outputcache.prompt1
1425 prompt = self.outputcache.prompt1
1426 try:
1426 try:
1427 line = self.raw_input(prompt,more)
1427 line = self.raw_input(prompt,more)
1428 if self.autoindent:
1428 if self.autoindent:
1429 self.readline_startup_hook(None)
1429 self.readline_startup_hook(None)
1430 except EOFError:
1430 except EOFError:
1431 if self.autoindent:
1431 if self.autoindent:
1432 self.readline_startup_hook(None)
1432 self.readline_startup_hook(None)
1433 self.write("\n")
1433 self.write("\n")
1434 self.exit()
1434 self.exit()
1435 else:
1435 else:
1436 more = self.push(line)
1436 more = self.push(line)
1437
1437
1438 if (self.SyntaxTB.last_syntax_error and
1438 if (self.SyntaxTB.last_syntax_error and
1439 self.rc.autoedit_syntax):
1439 self.rc.autoedit_syntax):
1440 self.edit_syntax_error()
1440 self.edit_syntax_error()
1441
1441
1442 except KeyboardInterrupt:
1442 except KeyboardInterrupt:
1443 self.write("\nKeyboardInterrupt\n")
1443 self.write("\nKeyboardInterrupt\n")
1444 self.resetbuffer()
1444 self.resetbuffer()
1445 more = 0
1445 more = 0
1446 # keep cache in sync with the prompt counter:
1446 # keep cache in sync with the prompt counter:
1447 self.outputcache.prompt_count -= 1
1447 self.outputcache.prompt_count -= 1
1448
1448
1449 if self.autoindent:
1449 if self.autoindent:
1450 self.indent_current_nsp = 0
1450 self.indent_current_nsp = 0
1451 self.indent_current = ' '* self.indent_current_nsp
1451 self.indent_current = ' '* self.indent_current_nsp
1452
1452
1453 except bdb.BdbQuit:
1453 except bdb.BdbQuit:
1454 warn("The Python debugger has exited with a BdbQuit exception.\n"
1454 warn("The Python debugger has exited with a BdbQuit exception.\n"
1455 "Because of how pdb handles the stack, it is impossible\n"
1455 "Because of how pdb handles the stack, it is impossible\n"
1456 "for IPython to properly format this particular exception.\n"
1456 "for IPython to properly format this particular exception.\n"
1457 "IPython will resume normal operation.")
1457 "IPython will resume normal operation.")
1458
1458
1459 # We are off again...
1459 # We are off again...
1460 __builtin__.__dict__['__IPYTHON__active'] -= 1
1460 __builtin__.__dict__['__IPYTHON__active'] -= 1
1461
1461
1462 def excepthook(self, type, value, tb):
1462 def excepthook(self, type, value, tb):
1463 """One more defense for GUI apps that call sys.excepthook.
1463 """One more defense for GUI apps that call sys.excepthook.
1464
1464
1465 GUI frameworks like wxPython trap exceptions and call
1465 GUI frameworks like wxPython trap exceptions and call
1466 sys.excepthook themselves. I guess this is a feature that
1466 sys.excepthook themselves. I guess this is a feature that
1467 enables them to keep running after exceptions that would
1467 enables them to keep running after exceptions that would
1468 otherwise kill their mainloop. This is a bother for IPython
1468 otherwise kill their mainloop. This is a bother for IPython
1469 which excepts to catch all of the program exceptions with a try:
1469 which excepts to catch all of the program exceptions with a try:
1470 except: statement.
1470 except: statement.
1471
1471
1472 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1472 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1473 any app directly invokes sys.excepthook, it will look to the user like
1473 any app directly invokes sys.excepthook, it will look to the user like
1474 IPython crashed. In order to work around this, we can disable the
1474 IPython crashed. In order to work around this, we can disable the
1475 CrashHandler and replace it with this excepthook instead, which prints a
1475 CrashHandler and replace it with this excepthook instead, which prints a
1476 regular traceback using our InteractiveTB. In this fashion, apps which
1476 regular traceback using our InteractiveTB. In this fashion, apps which
1477 call sys.excepthook will generate a regular-looking exception from
1477 call sys.excepthook will generate a regular-looking exception from
1478 IPython, and the CrashHandler will only be triggered by real IPython
1478 IPython, and the CrashHandler will only be triggered by real IPython
1479 crashes.
1479 crashes.
1480
1480
1481 This hook should be used sparingly, only in places which are not likely
1481 This hook should be used sparingly, only in places which are not likely
1482 to be true IPython errors.
1482 to be true IPython errors.
1483 """
1483 """
1484
1484
1485 self.InteractiveTB(type, value, tb, tb_offset=0)
1485 self.InteractiveTB(type, value, tb, tb_offset=0)
1486 if self.InteractiveTB.call_pdb and self.has_readline:
1486 if self.InteractiveTB.call_pdb and self.has_readline:
1487 self.readline.set_completer(self.Completer.complete)
1487 self.readline.set_completer(self.Completer.complete)
1488
1488
1489 def call_alias(self,alias,rest=''):
1489 def call_alias(self,alias,rest=''):
1490 """Call an alias given its name and the rest of the line.
1490 """Call an alias given its name and the rest of the line.
1491
1491
1492 This function MUST be given a proper alias, because it doesn't make
1492 This function MUST be given a proper alias, because it doesn't make
1493 any checks when looking up into the alias table. The caller is
1493 any checks when looking up into the alias table. The caller is
1494 responsible for invoking it only with a valid alias."""
1494 responsible for invoking it only with a valid alias."""
1495
1495
1496 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1496 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1497 nargs,cmd = self.alias_table[alias]
1497 nargs,cmd = self.alias_table[alias]
1498 # Expand the %l special to be the user's input line
1498 # Expand the %l special to be the user's input line
1499 if cmd.find('%l') >= 0:
1499 if cmd.find('%l') >= 0:
1500 cmd = cmd.replace('%l',rest)
1500 cmd = cmd.replace('%l',rest)
1501 rest = ''
1501 rest = ''
1502 if nargs==0:
1502 if nargs==0:
1503 # Simple, argument-less aliases
1503 # Simple, argument-less aliases
1504 cmd = '%s %s' % (cmd,rest)
1504 cmd = '%s %s' % (cmd,rest)
1505 else:
1505 else:
1506 # Handle aliases with positional arguments
1506 # Handle aliases with positional arguments
1507 args = rest.split(None,nargs)
1507 args = rest.split(None,nargs)
1508 if len(args)< nargs:
1508 if len(args)< nargs:
1509 error('Alias <%s> requires %s arguments, %s given.' %
1509 error('Alias <%s> requires %s arguments, %s given.' %
1510 (alias,nargs,len(args)))
1510 (alias,nargs,len(args)))
1511 return
1511 return
1512 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1512 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1513 # Now call the macro, evaluating in the user's namespace
1513 # Now call the macro, evaluating in the user's namespace
1514 try:
1514 try:
1515 self.system(cmd)
1515 self.system(cmd)
1516 except:
1516 except:
1517 self.showtraceback()
1517 self.showtraceback()
1518
1518
1519 def autoindent_update(self,line):
1519 def autoindent_update(self,line):
1520 """Keep track of the indent level."""
1520 """Keep track of the indent level."""
1521
1521
1522 if self.autoindent:
1522 if self.autoindent:
1523 if line:
1523 if line:
1524 self.indent_current_nsp = num_ini_spaces(line)
1524 self.indent_current_nsp = num_ini_spaces(line)
1525
1525
1526 if line[-1] == ':':
1526 if line[-1] == ':':
1527 self.indent_current_nsp += 4
1527 self.indent_current_nsp += 4
1528 elif dedent_re.match(line):
1528 elif dedent_re.match(line):
1529 self.indent_current_nsp -= 4
1529 self.indent_current_nsp -= 4
1530 else:
1530 else:
1531 self.indent_current_nsp = 0
1531 self.indent_current_nsp = 0
1532
1532
1533 # indent_current is the actual string to be inserted
1533 # indent_current is the actual string to be inserted
1534 # by the readline hooks for indentation
1534 # by the readline hooks for indentation
1535 self.indent_current = ' '* self.indent_current_nsp
1535 self.indent_current = ' '* self.indent_current_nsp
1536
1536
1537 def runlines(self,lines):
1537 def runlines(self,lines):
1538 """Run a string of one or more lines of source.
1538 """Run a string of one or more lines of source.
1539
1539
1540 This method is capable of running a string containing multiple source
1540 This method is capable of running a string containing multiple source
1541 lines, as if they had been entered at the IPython prompt. Since it
1541 lines, as if they had been entered at the IPython prompt. Since it
1542 exposes IPython's processing machinery, the given strings can contain
1542 exposes IPython's processing machinery, the given strings can contain
1543 magic calls (%magic), special shell access (!cmd), etc."""
1543 magic calls (%magic), special shell access (!cmd), etc."""
1544
1544
1545 # We must start with a clean buffer, in case this is run from an
1545 # We must start with a clean buffer, in case this is run from an
1546 # interactive IPython session (via a magic, for example).
1546 # interactive IPython session (via a magic, for example).
1547 self.resetbuffer()
1547 self.resetbuffer()
1548 lines = lines.split('\n')
1548 lines = lines.split('\n')
1549 more = 0
1549 more = 0
1550 for line in lines:
1550 for line in lines:
1551 # skip blank lines so we don't mess up the prompt counter, but do
1551 # skip blank lines so we don't mess up the prompt counter, but do
1552 # NOT skip even a blank line if we are in a code block (more is
1552 # NOT skip even a blank line if we are in a code block (more is
1553 # true)
1553 # true)
1554 if line or more:
1554 if line or more:
1555 more = self.push(self.prefilter(line,more))
1555 more = self.push(self.prefilter(line,more))
1556 # IPython's runsource returns None if there was an error
1556 # IPython's runsource returns None if there was an error
1557 # compiling the code. This allows us to stop processing right
1557 # compiling the code. This allows us to stop processing right
1558 # away, so the user gets the error message at the right place.
1558 # away, so the user gets the error message at the right place.
1559 if more is None:
1559 if more is None:
1560 break
1560 break
1561 # final newline in case the input didn't have it, so that the code
1561 # final newline in case the input didn't have it, so that the code
1562 # actually does get executed
1562 # actually does get executed
1563 if more:
1563 if more:
1564 self.push('\n')
1564 self.push('\n')
1565
1565
1566 def runsource(self, source, filename='<input>', symbol='single'):
1566 def runsource(self, source, filename='<input>', symbol='single'):
1567 """Compile and run some source in the interpreter.
1567 """Compile and run some source in the interpreter.
1568
1568
1569 Arguments are as for compile_command().
1569 Arguments are as for compile_command().
1570
1570
1571 One several things can happen:
1571 One several things can happen:
1572
1572
1573 1) The input is incorrect; compile_command() raised an
1573 1) The input is incorrect; compile_command() raised an
1574 exception (SyntaxError or OverflowError). A syntax traceback
1574 exception (SyntaxError or OverflowError). A syntax traceback
1575 will be printed by calling the showsyntaxerror() method.
1575 will be printed by calling the showsyntaxerror() method.
1576
1576
1577 2) The input is incomplete, and more input is required;
1577 2) The input is incomplete, and more input is required;
1578 compile_command() returned None. Nothing happens.
1578 compile_command() returned None. Nothing happens.
1579
1579
1580 3) The input is complete; compile_command() returned a code
1580 3) The input is complete; compile_command() returned a code
1581 object. The code is executed by calling self.runcode() (which
1581 object. The code is executed by calling self.runcode() (which
1582 also handles run-time exceptions, except for SystemExit).
1582 also handles run-time exceptions, except for SystemExit).
1583
1583
1584 The return value is:
1584 The return value is:
1585
1585
1586 - True in case 2
1586 - True in case 2
1587
1587
1588 - False in the other cases, unless an exception is raised, where
1588 - False in the other cases, unless an exception is raised, where
1589 None is returned instead. This can be used by external callers to
1589 None is returned instead. This can be used by external callers to
1590 know whether to continue feeding input or not.
1590 know whether to continue feeding input or not.
1591
1591
1592 The return value can be used to decide whether to use sys.ps1 or
1592 The return value can be used to decide whether to use sys.ps1 or
1593 sys.ps2 to prompt the next line."""
1593 sys.ps2 to prompt the next line."""
1594
1594
1595 try:
1595 try:
1596 code = self.compile(source,filename,symbol)
1596 code = self.compile(source,filename,symbol)
1597 except (OverflowError, SyntaxError, ValueError):
1597 except (OverflowError, SyntaxError, ValueError):
1598 # Case 1
1598 # Case 1
1599 self.showsyntaxerror(filename)
1599 self.showsyntaxerror(filename)
1600 return None
1600 return None
1601
1601
1602 if code is None:
1602 if code is None:
1603 # Case 2
1603 # Case 2
1604 return True
1604 return True
1605
1605
1606 # Case 3
1606 # Case 3
1607 # We store the code object so that threaded shells and
1607 # We store the code object so that threaded shells and
1608 # custom exception handlers can access all this info if needed.
1608 # custom exception handlers can access all this info if needed.
1609 # The source corresponding to this can be obtained from the
1609 # The source corresponding to this can be obtained from the
1610 # buffer attribute as '\n'.join(self.buffer).
1610 # buffer attribute as '\n'.join(self.buffer).
1611 self.code_to_run = code
1611 self.code_to_run = code
1612 # now actually execute the code object
1612 # now actually execute the code object
1613 if self.runcode(code) == 0:
1613 if self.runcode(code) == 0:
1614 return False
1614 return False
1615 else:
1615 else:
1616 return None
1616 return None
1617
1617
1618 def runcode(self,code_obj):
1618 def runcode(self,code_obj):
1619 """Execute a code object.
1619 """Execute a code object.
1620
1620
1621 When an exception occurs, self.showtraceback() is called to display a
1621 When an exception occurs, self.showtraceback() is called to display a
1622 traceback.
1622 traceback.
1623
1623
1624 Return value: a flag indicating whether the code to be run completed
1624 Return value: a flag indicating whether the code to be run completed
1625 successfully:
1625 successfully:
1626
1626
1627 - 0: successful execution.
1627 - 0: successful execution.
1628 - 1: an error occurred.
1628 - 1: an error occurred.
1629 """
1629 """
1630
1630
1631 # Set our own excepthook in case the user code tries to call it
1631 # Set our own excepthook in case the user code tries to call it
1632 # directly, so that the IPython crash handler doesn't get triggered
1632 # directly, so that the IPython crash handler doesn't get triggered
1633 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1633 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1634
1634
1635 # we save the original sys.excepthook in the instance, in case config
1635 # we save the original sys.excepthook in the instance, in case config
1636 # code (such as magics) needs access to it.
1636 # code (such as magics) needs access to it.
1637 self.sys_excepthook = old_excepthook
1637 self.sys_excepthook = old_excepthook
1638 outflag = 1 # happens in more places, so it's easier as default
1638 outflag = 1 # happens in more places, so it's easier as default
1639 try:
1639 try:
1640 try:
1640 try:
1641 # Embedded instances require separate global/local namespaces
1641 # Embedded instances require separate global/local namespaces
1642 # so they can see both the surrounding (local) namespace and
1642 # so they can see both the surrounding (local) namespace and
1643 # the module-level globals when called inside another function.
1643 # the module-level globals when called inside another function.
1644 if self.embedded:
1644 if self.embedded:
1645 exec code_obj in self.user_global_ns, self.user_ns
1645 exec code_obj in self.user_global_ns, self.user_ns
1646 # Normal (non-embedded) instances should only have a single
1646 # Normal (non-embedded) instances should only have a single
1647 # namespace for user code execution, otherwise functions won't
1647 # namespace for user code execution, otherwise functions won't
1648 # see interactive top-level globals.
1648 # see interactive top-level globals.
1649 else:
1649 else:
1650 exec code_obj in self.user_ns
1650 exec code_obj in self.user_ns
1651 finally:
1651 finally:
1652 # Reset our crash handler in place
1652 # Reset our crash handler in place
1653 sys.excepthook = old_excepthook
1653 sys.excepthook = old_excepthook
1654 except SystemExit:
1654 except SystemExit:
1655 self.resetbuffer()
1655 self.resetbuffer()
1656 self.showtraceback()
1656 self.showtraceback()
1657 warn("Type exit or quit to exit IPython "
1657 warn("Type exit or quit to exit IPython "
1658 "(%Exit or %Quit do so unconditionally).",level=1)
1658 "(%Exit or %Quit do so unconditionally).",level=1)
1659 except self.custom_exceptions:
1659 except self.custom_exceptions:
1660 etype,value,tb = sys.exc_info()
1660 etype,value,tb = sys.exc_info()
1661 self.CustomTB(etype,value,tb)
1661 self.CustomTB(etype,value,tb)
1662 except:
1662 except:
1663 self.showtraceback()
1663 self.showtraceback()
1664 else:
1664 else:
1665 outflag = 0
1665 outflag = 0
1666 if softspace(sys.stdout, 0):
1666 if softspace(sys.stdout, 0):
1667 print
1667 print
1668 # Flush out code object which has been run (and source)
1668 # Flush out code object which has been run (and source)
1669 self.code_to_run = None
1669 self.code_to_run = None
1670 return outflag
1670 return outflag
1671
1671
1672 def push(self, line):
1672 def push(self, line):
1673 """Push a line to the interpreter.
1673 """Push a line to the interpreter.
1674
1674
1675 The line should not have a trailing newline; it may have
1675 The line should not have a trailing newline; it may have
1676 internal newlines. The line is appended to a buffer and the
1676 internal newlines. The line is appended to a buffer and the
1677 interpreter's runsource() method is called with the
1677 interpreter's runsource() method is called with the
1678 concatenated contents of the buffer as source. If this
1678 concatenated contents of the buffer as source. If this
1679 indicates that the command was executed or invalid, the buffer
1679 indicates that the command was executed or invalid, the buffer
1680 is reset; otherwise, the command is incomplete, and the buffer
1680 is reset; otherwise, the command is incomplete, and the buffer
1681 is left as it was after the line was appended. The return
1681 is left as it was after the line was appended. The return
1682 value is 1 if more input is required, 0 if the line was dealt
1682 value is 1 if more input is required, 0 if the line was dealt
1683 with in some way (this is the same as runsource()).
1683 with in some way (this is the same as runsource()).
1684 """
1684 """
1685
1685
1686 # autoindent management should be done here, and not in the
1686 # autoindent management should be done here, and not in the
1687 # interactive loop, since that one is only seen by keyboard input. We
1687 # interactive loop, since that one is only seen by keyboard input. We
1688 # need this done correctly even for code run via runlines (which uses
1688 # need this done correctly even for code run via runlines (which uses
1689 # push).
1689 # push).
1690
1690
1691 #print 'push line: <%s>' % line # dbg
1691 #print 'push line: <%s>' % line # dbg
1692 self.autoindent_update(line)
1692 self.autoindent_update(line)
1693
1693
1694 self.buffer.append(line)
1694 self.buffer.append(line)
1695 more = self.runsource('\n'.join(self.buffer), self.filename)
1695 more = self.runsource('\n'.join(self.buffer), self.filename)
1696 if not more:
1696 if not more:
1697 self.resetbuffer()
1697 self.resetbuffer()
1698 return more
1698 return more
1699
1699
1700 def resetbuffer(self):
1700 def resetbuffer(self):
1701 """Reset the input buffer."""
1701 """Reset the input buffer."""
1702 self.buffer[:] = []
1702 self.buffer[:] = []
1703
1703
1704 def raw_input(self,prompt='',continue_prompt=False):
1704 def raw_input(self,prompt='',continue_prompt=False):
1705 """Write a prompt and read a line.
1705 """Write a prompt and read a line.
1706
1706
1707 The returned line does not include the trailing newline.
1707 The returned line does not include the trailing newline.
1708 When the user enters the EOF key sequence, EOFError is raised.
1708 When the user enters the EOF key sequence, EOFError is raised.
1709
1709
1710 Optional inputs:
1710 Optional inputs:
1711
1711
1712 - prompt(''): a string to be printed to prompt the user.
1712 - prompt(''): a string to be printed to prompt the user.
1713
1713
1714 - continue_prompt(False): whether this line is the first one or a
1714 - continue_prompt(False): whether this line is the first one or a
1715 continuation in a sequence of inputs.
1715 continuation in a sequence of inputs.
1716 """
1716 """
1717
1717
1718 line = raw_input_original(prompt)
1718 line = raw_input_original(prompt)
1719 # Try to be reasonably smart about not re-indenting pasted input more
1719 # Try to be reasonably smart about not re-indenting pasted input more
1720 # than necessary. We do this by trimming out the auto-indent initial
1720 # than necessary. We do this by trimming out the auto-indent initial
1721 # spaces, if the user's actual input started itself with whitespace.
1721 # spaces, if the user's actual input started itself with whitespace.
1722 #debugp('self.buffer[-1]')
1722 #debugp('self.buffer[-1]')
1723 ## if self.autoindent:
1723 ## if self.autoindent:
1724 ## try:
1724 ## try:
1725 ## prev_line = self.buffer[-1]
1725 ## prev_line = self.buffer[-1]
1726 ## except IndexError:
1726 ## except IndexError:
1727 ## prev_line = ''
1727 ## prev_line = ''
1728 ## prev_indent = num_ini_spaces(prev_line)
1728 ## prev_indent = num_ini_spaces(prev_line)
1729 ## debugp('prev_indent')
1729 ## debugp('prev_indent')
1730 ## # Split the user's input
1730 ## # Split the user's input
1731 ## line1 = line[:self.indent_current_nsp]
1731 ## line1 = line[:self.indent_current_nsp]
1732 ## line2 = line[self.indent_current_nsp:]
1732 ## line2 = line[self.indent_current_nsp:]
1733 ## if line1.isspace() and line2 and \
1733 ## if line1.isspace() and line2 and \
1734 ## num_ini_spaces(line2)==prev_indent:
1734 ## num_ini_spaces(line2)==prev_indent:
1735 ## line = line2
1735 ## line = line2
1736 #debugp('line')
1736 #debugp('line')
1737 #debugp('line1')
1737 #debugp('line1')
1738 #debugp('line2')
1738 #debugp('line2')
1739 ## if line1.isspace() and line2 and line2[0:1] in (' ','\t'):
1739 ## if line1.isspace() and line2 and line2[0:1] in (' ','\t'):
1740 ## line = line2
1740 ## line = line2
1741 ## debugp('line')
1741 ## debugp('line')
1742 return self.prefilter(line,continue_prompt)
1742 return self.prefilter(line,continue_prompt)
1743
1743
1744 def split_user_input(self,line):
1744 def split_user_input(self,line):
1745 """Split user input into pre-char, function part and rest."""
1745 """Split user input into pre-char, function part and rest."""
1746
1746
1747 lsplit = self.line_split.match(line)
1747 lsplit = self.line_split.match(line)
1748 if lsplit is None: # no regexp match returns None
1748 if lsplit is None: # no regexp match returns None
1749 try:
1749 try:
1750 iFun,theRest = line.split(None,1)
1750 iFun,theRest = line.split(None,1)
1751 except ValueError:
1751 except ValueError:
1752 iFun,theRest = line,''
1752 iFun,theRest = line,''
1753 pre = re.match('^(\s*)(.*)',line).groups()[0]
1753 pre = re.match('^(\s*)(.*)',line).groups()[0]
1754 else:
1754 else:
1755 pre,iFun,theRest = lsplit.groups()
1755 pre,iFun,theRest = lsplit.groups()
1756
1756
1757 #print 'line:<%s>' % line # dbg
1757 #print 'line:<%s>' % line # dbg
1758 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1758 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1759 return pre,iFun.strip(),theRest
1759 return pre,iFun.strip(),theRest
1760
1760
1761 def _prefilter(self, line, continue_prompt):
1761 def _prefilter(self, line, continue_prompt):
1762 """Calls different preprocessors, depending on the form of line."""
1762 """Calls different preprocessors, depending on the form of line."""
1763
1763
1764 # All handlers *must* return a value, even if it's blank ('').
1764 # All handlers *must* return a value, even if it's blank ('').
1765
1765
1766 # Lines are NOT logged here. Handlers should process the line as
1766 # Lines are NOT logged here. Handlers should process the line as
1767 # needed, update the cache AND log it (so that the input cache array
1767 # needed, update the cache AND log it (so that the input cache array
1768 # stays synced).
1768 # stays synced).
1769
1769
1770 # This function is _very_ delicate, and since it's also the one which
1770 # This function is _very_ delicate, and since it's also the one which
1771 # determines IPython's response to user input, it must be as efficient
1771 # determines IPython's response to user input, it must be as efficient
1772 # as possible. For this reason it has _many_ returns in it, trying
1772 # as possible. For this reason it has _many_ returns in it, trying
1773 # always to exit as quickly as it can figure out what it needs to do.
1773 # always to exit as quickly as it can figure out what it needs to do.
1774
1774
1775 # This function is the main responsible for maintaining IPython's
1775 # This function is the main responsible for maintaining IPython's
1776 # behavior respectful of Python's semantics. So be _very_ careful if
1776 # behavior respectful of Python's semantics. So be _very_ careful if
1777 # making changes to anything here.
1777 # making changes to anything here.
1778
1778
1779 #.....................................................................
1779 #.....................................................................
1780 # Code begins
1780 # Code begins
1781
1781
1782 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1782 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1783
1783
1784 # save the line away in case we crash, so the post-mortem handler can
1784 # save the line away in case we crash, so the post-mortem handler can
1785 # record it
1785 # record it
1786 self._last_input_line = line
1786 self._last_input_line = line
1787
1787
1788 #print '***line: <%s>' % line # dbg
1788 #print '***line: <%s>' % line # dbg
1789
1789
1790 # the input history needs to track even empty lines
1790 # the input history needs to track even empty lines
1791 if not line.strip():
1791 if not line.strip():
1792 if not continue_prompt:
1792 if not continue_prompt:
1793 self.outputcache.prompt_count -= 1
1793 self.outputcache.prompt_count -= 1
1794 return self.handle_normal(line,continue_prompt)
1794 return self.handle_normal(line,continue_prompt)
1795 #return self.handle_normal('',continue_prompt)
1795 #return self.handle_normal('',continue_prompt)
1796
1796
1797 # print '***cont',continue_prompt # dbg
1797 # print '***cont',continue_prompt # dbg
1798 # special handlers are only allowed for single line statements
1798 # special handlers are only allowed for single line statements
1799 if continue_prompt and not self.rc.multi_line_specials:
1799 if continue_prompt and not self.rc.multi_line_specials:
1800 return self.handle_normal(line,continue_prompt)
1800 return self.handle_normal(line,continue_prompt)
1801
1801
1802 # For the rest, we need the structure of the input
1802 # For the rest, we need the structure of the input
1803 pre,iFun,theRest = self.split_user_input(line)
1803 pre,iFun,theRest = self.split_user_input(line)
1804 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1804 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1805
1805
1806 # First check for explicit escapes in the last/first character
1806 # First check for explicit escapes in the last/first character
1807 handler = None
1807 handler = None
1808 if line[-1] == self.ESC_HELP:
1808 if line[-1] == self.ESC_HELP:
1809 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1809 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1810 if handler is None:
1810 if handler is None:
1811 # look at the first character of iFun, NOT of line, so we skip
1811 # look at the first character of iFun, NOT of line, so we skip
1812 # leading whitespace in multiline input
1812 # leading whitespace in multiline input
1813 handler = self.esc_handlers.get(iFun[0:1])
1813 handler = self.esc_handlers.get(iFun[0:1])
1814 if handler is not None:
1814 if handler is not None:
1815 return handler(line,continue_prompt,pre,iFun,theRest)
1815 return handler(line,continue_prompt,pre,iFun,theRest)
1816 # Emacs ipython-mode tags certain input lines
1816 # Emacs ipython-mode tags certain input lines
1817 if line.endswith('# PYTHON-MODE'):
1817 if line.endswith('# PYTHON-MODE'):
1818 return self.handle_emacs(line,continue_prompt)
1818 return self.handle_emacs(line,continue_prompt)
1819
1819
1820 # Next, check if we can automatically execute this thing
1820 # Next, check if we can automatically execute this thing
1821
1821
1822 # Allow ! in multi-line statements if multi_line_specials is on:
1822 # Allow ! in multi-line statements if multi_line_specials is on:
1823 if continue_prompt and self.rc.multi_line_specials and \
1823 if continue_prompt and self.rc.multi_line_specials and \
1824 iFun.startswith(self.ESC_SHELL):
1824 iFun.startswith(self.ESC_SHELL):
1825 return self.handle_shell_escape(line,continue_prompt,
1825 return self.handle_shell_escape(line,continue_prompt,
1826 pre=pre,iFun=iFun,
1826 pre=pre,iFun=iFun,
1827 theRest=theRest)
1827 theRest=theRest)
1828
1828
1829 # Let's try to find if the input line is a magic fn
1829 # Let's try to find if the input line is a magic fn
1830 oinfo = None
1830 oinfo = None
1831 if hasattr(self,'magic_'+iFun):
1831 if hasattr(self,'magic_'+iFun):
1832 # WARNING: _ofind uses getattr(), so it can consume generators and
1832 # WARNING: _ofind uses getattr(), so it can consume generators and
1833 # cause other side effects.
1833 # cause other side effects.
1834 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1834 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1835 if oinfo['ismagic']:
1835 if oinfo['ismagic']:
1836 # Be careful not to call magics when a variable assignment is
1836 # Be careful not to call magics when a variable assignment is
1837 # being made (ls='hi', for example)
1837 # being made (ls='hi', for example)
1838 if self.rc.automagic and \
1838 if self.rc.automagic and \
1839 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1839 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1840 (self.rc.multi_line_specials or not continue_prompt):
1840 (self.rc.multi_line_specials or not continue_prompt):
1841 return self.handle_magic(line,continue_prompt,
1841 return self.handle_magic(line,continue_prompt,
1842 pre,iFun,theRest)
1842 pre,iFun,theRest)
1843 else:
1843 else:
1844 return self.handle_normal(line,continue_prompt)
1844 return self.handle_normal(line,continue_prompt)
1845
1845
1846 # If the rest of the line begins with an (in)equality, assginment or
1846 # If the rest of the line begins with an (in)equality, assginment or
1847 # function call, we should not call _ofind but simply execute it.
1847 # function call, we should not call _ofind but simply execute it.
1848 # This avoids spurious geattr() accesses on objects upon assignment.
1848 # This avoids spurious geattr() accesses on objects upon assignment.
1849 #
1849 #
1850 # It also allows users to assign to either alias or magic names true
1850 # It also allows users to assign to either alias or magic names true
1851 # python variables (the magic/alias systems always take second seat to
1851 # python variables (the magic/alias systems always take second seat to
1852 # true python code).
1852 # true python code).
1853 if theRest and theRest[0] in '!=()':
1853 if theRest and theRest[0] in '!=()':
1854 return self.handle_normal(line,continue_prompt)
1854 return self.handle_normal(line,continue_prompt)
1855
1855
1856 if oinfo is None:
1856 if oinfo is None:
1857 # let's try to ensure that _oinfo is ONLY called when autocall is
1857 # let's try to ensure that _oinfo is ONLY called when autocall is
1858 # on. Since it has inevitable potential side effects, at least
1858 # on. Since it has inevitable potential side effects, at least
1859 # having autocall off should be a guarantee to the user that no
1859 # having autocall off should be a guarantee to the user that no
1860 # weird things will happen.
1860 # weird things will happen.
1861
1861
1862 if self.rc.autocall:
1862 if self.rc.autocall:
1863 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1863 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1864 else:
1864 else:
1865 # in this case, all that's left is either an alias or
1865 # in this case, all that's left is either an alias or
1866 # processing the line normally.
1866 # processing the line normally.
1867 if iFun in self.alias_table:
1867 if iFun in self.alias_table:
1868 return self.handle_alias(line,continue_prompt,
1868 return self.handle_alias(line,continue_prompt,
1869 pre,iFun,theRest)
1869 pre,iFun,theRest)
1870
1870 else:
1871 else:
1871 return self.handle_normal(line,continue_prompt)
1872 return self.handle_normal(line,continue_prompt)
1872
1873
1873 if not oinfo['found']:
1874 if not oinfo['found']:
1874 return self.handle_normal(line,continue_prompt)
1875 return self.handle_normal(line,continue_prompt)
1875 else:
1876 else:
1876 #print 'iFun <%s> rest <%s>' % (iFun,theRest) # dbg
1877 #print 'iFun <%s> rest <%s>' % (iFun,theRest) # dbg
1877 if oinfo['isalias']:
1878 if oinfo['isalias']:
1878 return self.handle_alias(line,continue_prompt,
1879 return self.handle_alias(line,continue_prompt,
1879 pre,iFun,theRest)
1880 pre,iFun,theRest)
1880
1881
1881 if self.rc.autocall and \
1882 if self.rc.autocall and \
1882 not self.re_exclude_auto.match(theRest) and \
1883 not self.re_exclude_auto.match(theRest) and \
1883 self.re_fun_name.match(iFun) and \
1884 self.re_fun_name.match(iFun) and \
1884 callable(oinfo['obj']) :
1885 callable(oinfo['obj']) :
1885 #print 'going auto' # dbg
1886 #print 'going auto' # dbg
1886 return self.handle_auto(line,continue_prompt,
1887 return self.handle_auto(line,continue_prompt,
1887 pre,iFun,theRest,oinfo['obj'])
1888 pre,iFun,theRest,oinfo['obj'])
1888 else:
1889 else:
1889 #print 'was callable?', callable(oinfo['obj']) # dbg
1890 #print 'was callable?', callable(oinfo['obj']) # dbg
1890 return self.handle_normal(line,continue_prompt)
1891 return self.handle_normal(line,continue_prompt)
1891
1892
1892 # If we get here, we have a normal Python line. Log and return.
1893 # If we get here, we have a normal Python line. Log and return.
1893 return self.handle_normal(line,continue_prompt)
1894 return self.handle_normal(line,continue_prompt)
1894
1895
1895 def _prefilter_dumb(self, line, continue_prompt):
1896 def _prefilter_dumb(self, line, continue_prompt):
1896 """simple prefilter function, for debugging"""
1897 """simple prefilter function, for debugging"""
1897 return self.handle_normal(line,continue_prompt)
1898 return self.handle_normal(line,continue_prompt)
1898
1899
1899 # Set the default prefilter() function (this can be user-overridden)
1900 # Set the default prefilter() function (this can be user-overridden)
1900 prefilter = _prefilter
1901 prefilter = _prefilter
1901
1902
1902 def handle_normal(self,line,continue_prompt=None,
1903 def handle_normal(self,line,continue_prompt=None,
1903 pre=None,iFun=None,theRest=None):
1904 pre=None,iFun=None,theRest=None):
1904 """Handle normal input lines. Use as a template for handlers."""
1905 """Handle normal input lines. Use as a template for handlers."""
1905
1906
1906 # With autoindent on, we need some way to exit the input loop, and I
1907 # With autoindent on, we need some way to exit the input loop, and I
1907 # don't want to force the user to have to backspace all the way to
1908 # don't want to force the user to have to backspace all the way to
1908 # clear the line. The rule will be in this case, that either two
1909 # clear the line. The rule will be in this case, that either two
1909 # lines of pure whitespace in a row, or a line of pure whitespace but
1910 # lines of pure whitespace in a row, or a line of pure whitespace but
1910 # of a size different to the indent level, will exit the input loop.
1911 # of a size different to the indent level, will exit the input loop.
1911
1912
1912 if (continue_prompt and self.autoindent and line.isspace() and
1913 if (continue_prompt and self.autoindent and line.isspace() and
1913 (line != self.indent_current or (self.buffer[-1]).isspace() )):
1914 (line != self.indent_current or (self.buffer[-1]).isspace() )):
1914 line = ''
1915 line = ''
1915
1916
1916 self.log(line,continue_prompt)
1917 self.log(line,continue_prompt)
1917 return line
1918 return line
1918
1919
1919 def handle_alias(self,line,continue_prompt=None,
1920 def handle_alias(self,line,continue_prompt=None,
1920 pre=None,iFun=None,theRest=None):
1921 pre=None,iFun=None,theRest=None):
1921 """Handle alias input lines. """
1922 """Handle alias input lines. """
1922
1923
1923 # pre is needed, because it carries the leading whitespace. Otherwise
1924 # pre is needed, because it carries the leading whitespace. Otherwise
1924 # aliases won't work in indented sections.
1925 # aliases won't work in indented sections.
1925 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1926 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1926 self.log(line_out,continue_prompt)
1927 self.log(line_out,continue_prompt)
1927 return line_out
1928 return line_out
1928
1929
1929 def handle_shell_escape(self, line, continue_prompt=None,
1930 def handle_shell_escape(self, line, continue_prompt=None,
1930 pre=None,iFun=None,theRest=None):
1931 pre=None,iFun=None,theRest=None):
1931 """Execute the line in a shell, empty return value"""
1932 """Execute the line in a shell, empty return value"""
1932
1933
1933 #print 'line in :', `line` # dbg
1934 #print 'line in :', `line` # dbg
1934 # Example of a special handler. Others follow a similar pattern.
1935 # Example of a special handler. Others follow a similar pattern.
1935 if line.lstrip().startswith('!!'):
1936 if line.lstrip().startswith('!!'):
1936 # rewrite iFun/theRest to properly hold the call to %sx and
1937 # rewrite iFun/theRest to properly hold the call to %sx and
1937 # the actual command to be executed, so handle_magic can work
1938 # the actual command to be executed, so handle_magic can work
1938 # correctly
1939 # correctly
1939 theRest = '%s %s' % (iFun[2:],theRest)
1940 theRest = '%s %s' % (iFun[2:],theRest)
1940 iFun = 'sx'
1941 iFun = 'sx'
1941 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,line[2:]),
1942 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
1943 line.lstrip()[2:]),
1942 continue_prompt,pre,iFun,theRest)
1944 continue_prompt,pre,iFun,theRest)
1943 else:
1945 else:
1944 cmd=line.lstrip()[1:]
1946 cmd=line.lstrip().lstrip('!')
1945 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
1947 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
1946 # update cache/log and return
1948 # update cache/log and return
1947 self.log(line_out,continue_prompt)
1949 self.log(line_out,continue_prompt)
1948 return line_out
1950 return line_out
1949
1951
1950 def handle_magic(self, line, continue_prompt=None,
1952 def handle_magic(self, line, continue_prompt=None,
1951 pre=None,iFun=None,theRest=None):
1953 pre=None,iFun=None,theRest=None):
1952 """Execute magic functions."""
1954 """Execute magic functions."""
1953
1955
1954
1956
1955 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1957 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1956 self.log(cmd,continue_prompt)
1958 self.log(cmd,continue_prompt)
1957 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1959 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1958 return cmd
1960 return cmd
1959
1961
1960 def handle_auto(self, line, continue_prompt=None,
1962 def handle_auto(self, line, continue_prompt=None,
1961 pre=None,iFun=None,theRest=None,obj=None):
1963 pre=None,iFun=None,theRest=None,obj=None):
1962 """Hande lines which can be auto-executed, quoting if requested."""
1964 """Hande lines which can be auto-executed, quoting if requested."""
1963
1965
1964 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1966 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1965
1967
1966 # This should only be active for single-line input!
1968 # This should only be active for single-line input!
1967 if continue_prompt:
1969 if continue_prompt:
1968 self.log(line,continue_prompt)
1970 self.log(line,continue_prompt)
1969 return line
1971 return line
1970
1972
1971 auto_rewrite = True
1973 auto_rewrite = True
1972 if pre == self.ESC_QUOTE:
1974 if pre == self.ESC_QUOTE:
1973 # Auto-quote splitting on whitespace
1975 # Auto-quote splitting on whitespace
1974 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
1976 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
1975 elif pre == self.ESC_QUOTE2:
1977 elif pre == self.ESC_QUOTE2:
1976 # Auto-quote whole string
1978 # Auto-quote whole string
1977 newcmd = '%s("%s")' % (iFun,theRest)
1979 newcmd = '%s("%s")' % (iFun,theRest)
1978 else:
1980 else:
1979 # Auto-paren.
1981 # Auto-paren.
1980 # We only apply it to argument-less calls if the autocall
1982 # We only apply it to argument-less calls if the autocall
1981 # parameter is set to 2. We only need to check that autocall is <
1983 # parameter is set to 2. We only need to check that autocall is <
1982 # 2, since this function isn't called unless it's at least 1.
1984 # 2, since this function isn't called unless it's at least 1.
1983 if not theRest and (self.rc.autocall < 2):
1985 if not theRest and (self.rc.autocall < 2):
1984 newcmd = '%s %s' % (iFun,theRest)
1986 newcmd = '%s %s' % (iFun,theRest)
1985 auto_rewrite = False
1987 auto_rewrite = False
1986 else:
1988 else:
1987 if theRest.startswith('['):
1989 if theRest.startswith('['):
1988 if hasattr(obj,'__getitem__'):
1990 if hasattr(obj,'__getitem__'):
1989 # Don't autocall in this case: item access for an object
1991 # Don't autocall in this case: item access for an object
1990 # which is BOTH callable and implements __getitem__.
1992 # which is BOTH callable and implements __getitem__.
1991 newcmd = '%s %s' % (iFun,theRest)
1993 newcmd = '%s %s' % (iFun,theRest)
1992 auto_rewrite = False
1994 auto_rewrite = False
1993 else:
1995 else:
1994 # if the object doesn't support [] access, go ahead and
1996 # if the object doesn't support [] access, go ahead and
1995 # autocall
1997 # autocall
1996 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
1998 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
1997 elif theRest.endswith(';'):
1999 elif theRest.endswith(';'):
1998 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2000 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
1999 else:
2001 else:
2000 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2002 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2001
2003
2002 if auto_rewrite:
2004 if auto_rewrite:
2003 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2005 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2004 # log what is now valid Python, not the actual user input (without the
2006 # log what is now valid Python, not the actual user input (without the
2005 # final newline)
2007 # final newline)
2006 self.log(newcmd,continue_prompt)
2008 self.log(newcmd,continue_prompt)
2007 return newcmd
2009 return newcmd
2008
2010
2009 def handle_help(self, line, continue_prompt=None,
2011 def handle_help(self, line, continue_prompt=None,
2010 pre=None,iFun=None,theRest=None):
2012 pre=None,iFun=None,theRest=None):
2011 """Try to get some help for the object.
2013 """Try to get some help for the object.
2012
2014
2013 obj? or ?obj -> basic information.
2015 obj? or ?obj -> basic information.
2014 obj?? or ??obj -> more details.
2016 obj?? or ??obj -> more details.
2015 """
2017 """
2016
2018
2017 # We need to make sure that we don't process lines which would be
2019 # We need to make sure that we don't process lines which would be
2018 # otherwise valid python, such as "x=1 # what?"
2020 # otherwise valid python, such as "x=1 # what?"
2019 try:
2021 try:
2020 codeop.compile_command(line)
2022 codeop.compile_command(line)
2021 except SyntaxError:
2023 except SyntaxError:
2022 # We should only handle as help stuff which is NOT valid syntax
2024 # We should only handle as help stuff which is NOT valid syntax
2023 if line[0]==self.ESC_HELP:
2025 if line[0]==self.ESC_HELP:
2024 line = line[1:]
2026 line = line[1:]
2025 elif line[-1]==self.ESC_HELP:
2027 elif line[-1]==self.ESC_HELP:
2026 line = line[:-1]
2028 line = line[:-1]
2027 self.log('#?'+line)
2029 self.log('#?'+line)
2028 if line:
2030 if line:
2029 self.magic_pinfo(line)
2031 self.magic_pinfo(line)
2030 else:
2032 else:
2031 page(self.usage,screen_lines=self.rc.screen_length)
2033 page(self.usage,screen_lines=self.rc.screen_length)
2032 return '' # Empty string is needed here!
2034 return '' # Empty string is needed here!
2033 except:
2035 except:
2034 # Pass any other exceptions through to the normal handler
2036 # Pass any other exceptions through to the normal handler
2035 return self.handle_normal(line,continue_prompt)
2037 return self.handle_normal(line,continue_prompt)
2036 else:
2038 else:
2037 # If the code compiles ok, we should handle it normally
2039 # If the code compiles ok, we should handle it normally
2038 return self.handle_normal(line,continue_prompt)
2040 return self.handle_normal(line,continue_prompt)
2039
2041
2040 def handle_emacs(self,line,continue_prompt=None,
2042 def handle_emacs(self,line,continue_prompt=None,
2041 pre=None,iFun=None,theRest=None):
2043 pre=None,iFun=None,theRest=None):
2042 """Handle input lines marked by python-mode."""
2044 """Handle input lines marked by python-mode."""
2043
2045
2044 # Currently, nothing is done. Later more functionality can be added
2046 # Currently, nothing is done. Later more functionality can be added
2045 # here if needed.
2047 # here if needed.
2046
2048
2047 # The input cache shouldn't be updated
2049 # The input cache shouldn't be updated
2048
2050
2049 return line
2051 return line
2050
2052
2051 def mktempfile(self,data=None):
2053 def mktempfile(self,data=None):
2052 """Make a new tempfile and return its filename.
2054 """Make a new tempfile and return its filename.
2053
2055
2054 This makes a call to tempfile.mktemp, but it registers the created
2056 This makes a call to tempfile.mktemp, but it registers the created
2055 filename internally so ipython cleans it up at exit time.
2057 filename internally so ipython cleans it up at exit time.
2056
2058
2057 Optional inputs:
2059 Optional inputs:
2058
2060
2059 - data(None): if data is given, it gets written out to the temp file
2061 - data(None): if data is given, it gets written out to the temp file
2060 immediately, and the file is closed again."""
2062 immediately, and the file is closed again."""
2061
2063
2062 filename = tempfile.mktemp('.py','ipython_edit_')
2064 filename = tempfile.mktemp('.py','ipython_edit_')
2063 self.tempfiles.append(filename)
2065 self.tempfiles.append(filename)
2064
2066
2065 if data:
2067 if data:
2066 tmp_file = open(filename,'w')
2068 tmp_file = open(filename,'w')
2067 tmp_file.write(data)
2069 tmp_file.write(data)
2068 tmp_file.close()
2070 tmp_file.close()
2069 return filename
2071 return filename
2070
2072
2071 def write(self,data):
2073 def write(self,data):
2072 """Write a string to the default output"""
2074 """Write a string to the default output"""
2073 Term.cout.write(data)
2075 Term.cout.write(data)
2074
2076
2075 def write_err(self,data):
2077 def write_err(self,data):
2076 """Write a string to the default error output"""
2078 """Write a string to the default error output"""
2077 Term.cerr.write(data)
2079 Term.cerr.write(data)
2078
2080
2079 def exit(self):
2081 def exit(self):
2080 """Handle interactive exit.
2082 """Handle interactive exit.
2081
2083
2082 This method sets the exit_now attribute."""
2084 This method sets the exit_now attribute."""
2083
2085
2084 if self.rc.confirm_exit:
2086 if self.rc.confirm_exit:
2085 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2087 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2086 self.exit_now = True
2088 self.exit_now = True
2087 else:
2089 else:
2088 self.exit_now = True
2090 self.exit_now = True
2089 return self.exit_now
2091 return self.exit_now
2090
2092
2091 def safe_execfile(self,fname,*where,**kw):
2093 def safe_execfile(self,fname,*where,**kw):
2092 fname = os.path.expanduser(fname)
2094 fname = os.path.expanduser(fname)
2093
2095
2094 # find things also in current directory
2096 # find things also in current directory
2095 dname = os.path.dirname(fname)
2097 dname = os.path.dirname(fname)
2096 if not sys.path.count(dname):
2098 if not sys.path.count(dname):
2097 sys.path.append(dname)
2099 sys.path.append(dname)
2098
2100
2099 try:
2101 try:
2100 xfile = open(fname)
2102 xfile = open(fname)
2101 except:
2103 except:
2102 print >> Term.cerr, \
2104 print >> Term.cerr, \
2103 'Could not open file <%s> for safe execution.' % fname
2105 'Could not open file <%s> for safe execution.' % fname
2104 return None
2106 return None
2105
2107
2106 kw.setdefault('islog',0)
2108 kw.setdefault('islog',0)
2107 kw.setdefault('quiet',1)
2109 kw.setdefault('quiet',1)
2108 kw.setdefault('exit_ignore',0)
2110 kw.setdefault('exit_ignore',0)
2109 first = xfile.readline()
2111 first = xfile.readline()
2110 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2112 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2111 xfile.close()
2113 xfile.close()
2112 # line by line execution
2114 # line by line execution
2113 if first.startswith(loghead) or kw['islog']:
2115 if first.startswith(loghead) or kw['islog']:
2114 print 'Loading log file <%s> one line at a time...' % fname
2116 print 'Loading log file <%s> one line at a time...' % fname
2115 if kw['quiet']:
2117 if kw['quiet']:
2116 stdout_save = sys.stdout
2118 stdout_save = sys.stdout
2117 sys.stdout = StringIO.StringIO()
2119 sys.stdout = StringIO.StringIO()
2118 try:
2120 try:
2119 globs,locs = where[0:2]
2121 globs,locs = where[0:2]
2120 except:
2122 except:
2121 try:
2123 try:
2122 globs = locs = where[0]
2124 globs = locs = where[0]
2123 except:
2125 except:
2124 globs = locs = globals()
2126 globs = locs = globals()
2125 badblocks = []
2127 badblocks = []
2126
2128
2127 # we also need to identify indented blocks of code when replaying
2129 # we also need to identify indented blocks of code when replaying
2128 # logs and put them together before passing them to an exec
2130 # logs and put them together before passing them to an exec
2129 # statement. This takes a bit of regexp and look-ahead work in the
2131 # statement. This takes a bit of regexp and look-ahead work in the
2130 # file. It's easiest if we swallow the whole thing in memory
2132 # file. It's easiest if we swallow the whole thing in memory
2131 # first, and manually walk through the lines list moving the
2133 # first, and manually walk through the lines list moving the
2132 # counter ourselves.
2134 # counter ourselves.
2133 indent_re = re.compile('\s+\S')
2135 indent_re = re.compile('\s+\S')
2134 xfile = open(fname)
2136 xfile = open(fname)
2135 filelines = xfile.readlines()
2137 filelines = xfile.readlines()
2136 xfile.close()
2138 xfile.close()
2137 nlines = len(filelines)
2139 nlines = len(filelines)
2138 lnum = 0
2140 lnum = 0
2139 while lnum < nlines:
2141 while lnum < nlines:
2140 line = filelines[lnum]
2142 line = filelines[lnum]
2141 lnum += 1
2143 lnum += 1
2142 # don't re-insert logger status info into cache
2144 # don't re-insert logger status info into cache
2143 if line.startswith('#log#'):
2145 if line.startswith('#log#'):
2144 continue
2146 continue
2145 else:
2147 else:
2146 # build a block of code (maybe a single line) for execution
2148 # build a block of code (maybe a single line) for execution
2147 block = line
2149 block = line
2148 try:
2150 try:
2149 next = filelines[lnum] # lnum has already incremented
2151 next = filelines[lnum] # lnum has already incremented
2150 except:
2152 except:
2151 next = None
2153 next = None
2152 while next and indent_re.match(next):
2154 while next and indent_re.match(next):
2153 block += next
2155 block += next
2154 lnum += 1
2156 lnum += 1
2155 try:
2157 try:
2156 next = filelines[lnum]
2158 next = filelines[lnum]
2157 except:
2159 except:
2158 next = None
2160 next = None
2159 # now execute the block of one or more lines
2161 # now execute the block of one or more lines
2160 try:
2162 try:
2161 exec block in globs,locs
2163 exec block in globs,locs
2162 except SystemExit:
2164 except SystemExit:
2163 pass
2165 pass
2164 except:
2166 except:
2165 badblocks.append(block.rstrip())
2167 badblocks.append(block.rstrip())
2166 if kw['quiet']: # restore stdout
2168 if kw['quiet']: # restore stdout
2167 sys.stdout.close()
2169 sys.stdout.close()
2168 sys.stdout = stdout_save
2170 sys.stdout = stdout_save
2169 print 'Finished replaying log file <%s>' % fname
2171 print 'Finished replaying log file <%s>' % fname
2170 if badblocks:
2172 if badblocks:
2171 print >> sys.stderr, ('\nThe following lines/blocks in file '
2173 print >> sys.stderr, ('\nThe following lines/blocks in file '
2172 '<%s> reported errors:' % fname)
2174 '<%s> reported errors:' % fname)
2173
2175
2174 for badline in badblocks:
2176 for badline in badblocks:
2175 print >> sys.stderr, badline
2177 print >> sys.stderr, badline
2176 else: # regular file execution
2178 else: # regular file execution
2177 try:
2179 try:
2178 execfile(fname,*where)
2180 execfile(fname,*where)
2179 except SyntaxError:
2181 except SyntaxError:
2180 etype,evalue = sys.exc_info()[:2]
2182 etype,evalue = sys.exc_info()[:2]
2181 self.SyntaxTB(etype,evalue,[])
2183 self.SyntaxTB(etype,evalue,[])
2182 warn('Failure executing file: <%s>' % fname)
2184 warn('Failure executing file: <%s>' % fname)
2183 except SystemExit,status:
2185 except SystemExit,status:
2184 if not kw['exit_ignore']:
2186 if not kw['exit_ignore']:
2185 self.InteractiveTB()
2187 self.InteractiveTB()
2186 warn('Failure executing file: <%s>' % fname)
2188 warn('Failure executing file: <%s>' % fname)
2187 except:
2189 except:
2188 self.InteractiveTB()
2190 self.InteractiveTB()
2189 warn('Failure executing file: <%s>' % fname)
2191 warn('Failure executing file: <%s>' % fname)
2190
2192
2191 #************************* end of file <iplib.py> *****************************
2193 #************************* end of file <iplib.py> *****************************
@@ -1,4890 +1,4896 b''
1 2006-01-13 Ville Vainio <vivainio@gmail.com>
1 2006-01-13 Ville Vainio <vivainio@gmail.com>
2
2
3 * IPython/platutils*.py: platform specific utility functions,
3 * IPython/platutils*.py: platform specific utility functions,
4 so far only set_term_title is implemented (change terminal
4 so far only set_term_title is implemented (change terminal
5 label in windowing systems). %cd now changes the title to
5 label in windowing systems). %cd now changes the title to
6 current dir.
6 current dir.
7
7
8 * Added myself to "authors" list, had to create new files.
8 * IPython/Release.py: Added myself to "authors" list,
9 had to create new files.
10
11 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
12 shell escape; not a known bug but had potential to be one in the
13 future.
14
9
15
10 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
16 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
11
17
12 * IPython/iplib.py (raw_input): temporarily deactivate all
18 * IPython/iplib.py (raw_input): temporarily deactivate all
13 attempts at allowing pasting of code with autoindent on. It
19 attempts at allowing pasting of code with autoindent on. It
14 introduced bugs (reported by Prabhu) and I can't seem to find a
20 introduced bugs (reported by Prabhu) and I can't seem to find a
15 robust combination which works in all cases. Will have to revisit
21 robust combination which works in all cases. Will have to revisit
16 later.
22 later.
17
23
18 * IPython/genutils.py: remove isspace() function. We've dropped
24 * IPython/genutils.py: remove isspace() function. We've dropped
19 2.2 compatibility, so it's OK to use the string method.
25 2.2 compatibility, so it's OK to use the string method.
20
26
21 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
27 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
22
28
23 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
29 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
24 matching what NOT to autocall on, to include all python binary
30 matching what NOT to autocall on, to include all python binary
25 operators (including things like 'and', 'or', 'is' and 'in').
31 operators (including things like 'and', 'or', 'is' and 'in').
26 Prompted by a bug report on 'foo & bar', but I realized we had
32 Prompted by a bug report on 'foo & bar', but I realized we had
27 many more potential bug cases with other operators. The regexp is
33 many more potential bug cases with other operators. The regexp is
28 self.re_exclude_auto, it's fairly commented.
34 self.re_exclude_auto, it's fairly commented.
29
35
30 2006-01-12 Ville Vainio <vivainio@gmail.com>
36 2006-01-12 Ville Vainio <vivainio@gmail.com>
31
37
32 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
38 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
33 Prettified and hardened string/backslash quoting with ipsystem(),
39 Prettified and hardened string/backslash quoting with ipsystem(),
34 ipalias() and ipmagic(). Now even \ characters are passed to
40 ipalias() and ipmagic(). Now even \ characters are passed to
35 %magics, !shell escapes and aliases exactly as they are in the
41 %magics, !shell escapes and aliases exactly as they are in the
36 ipython command line. Should improve backslash experience,
42 ipython command line. Should improve backslash experience,
37 particularly in Windows (path delimiter for some commands that
43 particularly in Windows (path delimiter for some commands that
38 won't understand '/'), but Unix benefits as well (regexps). %cd
44 won't understand '/'), but Unix benefits as well (regexps). %cd
39 magic still doesn't support backslash path delimiters, though. Also
45 magic still doesn't support backslash path delimiters, though. Also
40 deleted all pretense of supporting multiline command strings in
46 deleted all pretense of supporting multiline command strings in
41 !system or %magic commands. Thanks to Jerry McRae for suggestions.
47 !system or %magic commands. Thanks to Jerry McRae for suggestions.
42
48
43 * doc/build_doc_instructions.txt added. Documentation on how to
49 * doc/build_doc_instructions.txt added. Documentation on how to
44 use doc/update_manual.py, added yesterday. Both files contributed
50 use doc/update_manual.py, added yesterday. Both files contributed
45 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
51 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
46 doc/*.sh for deprecation at a later date.
52 doc/*.sh for deprecation at a later date.
47
53
48 * /ipython.py Added ipython.py to root directory for
54 * /ipython.py Added ipython.py to root directory for
49 zero-installation (tar xzvf ipython.tgz; cd ipython; python
55 zero-installation (tar xzvf ipython.tgz; cd ipython; python
50 ipython.py) and development convenience (no need to kee doing
56 ipython.py) and development convenience (no need to kee doing
51 "setup.py install" between changes).
57 "setup.py install" between changes).
52
58
53 * Made ! and !! shell escapes work (again) in multiline expressions:
59 * Made ! and !! shell escapes work (again) in multiline expressions:
54 if 1:
60 if 1:
55 !ls
61 !ls
56 !!ls
62 !!ls
57
63
58 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
64 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
59
65
60 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
66 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
61 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
67 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
62 module in case-insensitive installation. Was causing crashes
68 module in case-insensitive installation. Was causing crashes
63 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
69 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
64
70
65 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
71 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
66 <marienz-AT-gentoo.org>, closes
72 <marienz-AT-gentoo.org>, closes
67 http://www.scipy.net/roundup/ipython/issue51.
73 http://www.scipy.net/roundup/ipython/issue51.
68
74
69 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
75 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
70
76
71 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
77 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
72 problem of excessive CPU usage under *nix and keyboard lag under
78 problem of excessive CPU usage under *nix and keyboard lag under
73 win32.
79 win32.
74
80
75 2006-01-10 *** Released version 0.7.0
81 2006-01-10 *** Released version 0.7.0
76
82
77 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
83 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
78
84
79 * IPython/Release.py (revision): tag version number to 0.7.0,
85 * IPython/Release.py (revision): tag version number to 0.7.0,
80 ready for release.
86 ready for release.
81
87
82 * IPython/Magic.py (magic_edit): Add print statement to %edit so
88 * IPython/Magic.py (magic_edit): Add print statement to %edit so
83 it informs the user of the name of the temp. file used. This can
89 it informs the user of the name of the temp. file used. This can
84 help if you decide later to reuse that same file, so you know
90 help if you decide later to reuse that same file, so you know
85 where to copy the info from.
91 where to copy the info from.
86
92
87 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
93 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
88
94
89 * setup_bdist_egg.py: little script to build an egg. Added
95 * setup_bdist_egg.py: little script to build an egg. Added
90 support in the release tools as well.
96 support in the release tools as well.
91
97
92 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
98 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
93
99
94 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
100 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
95 version selection (new -wxversion command line and ipythonrc
101 version selection (new -wxversion command line and ipythonrc
96 parameter). Patch contributed by Arnd Baecker
102 parameter). Patch contributed by Arnd Baecker
97 <arnd.baecker-AT-web.de>.
103 <arnd.baecker-AT-web.de>.
98
104
99 * IPython/iplib.py (embed_mainloop): fix tab-completion in
105 * IPython/iplib.py (embed_mainloop): fix tab-completion in
100 embedded instances, for variables defined at the interactive
106 embedded instances, for variables defined at the interactive
101 prompt of the embedded ipython. Reported by Arnd.
107 prompt of the embedded ipython. Reported by Arnd.
102
108
103 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
109 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
104 it can be used as a (stateful) toggle, or with a direct parameter.
110 it can be used as a (stateful) toggle, or with a direct parameter.
105
111
106 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
112 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
107 could be triggered in certain cases and cause the traceback
113 could be triggered in certain cases and cause the traceback
108 printer not to work.
114 printer not to work.
109
115
110 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
116 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
111
117
112 * IPython/iplib.py (_should_recompile): Small fix, closes
118 * IPython/iplib.py (_should_recompile): Small fix, closes
113 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
119 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
114
120
115 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
121 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
116
122
117 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
123 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
118 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
124 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
119 Moad for help with tracking it down.
125 Moad for help with tracking it down.
120
126
121 * IPython/iplib.py (handle_auto): fix autocall handling for
127 * IPython/iplib.py (handle_auto): fix autocall handling for
122 objects which support BOTH __getitem__ and __call__ (so that f [x]
128 objects which support BOTH __getitem__ and __call__ (so that f [x]
123 is left alone, instead of becoming f([x]) automatically).
129 is left alone, instead of becoming f([x]) automatically).
124
130
125 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
131 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
126 Ville's patch.
132 Ville's patch.
127
133
128 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
134 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
129
135
130 * IPython/iplib.py (handle_auto): changed autocall semantics to
136 * IPython/iplib.py (handle_auto): changed autocall semantics to
131 include 'smart' mode, where the autocall transformation is NOT
137 include 'smart' mode, where the autocall transformation is NOT
132 applied if there are no arguments on the line. This allows you to
138 applied if there are no arguments on the line. This allows you to
133 just type 'foo' if foo is a callable to see its internal form,
139 just type 'foo' if foo is a callable to see its internal form,
134 instead of having it called with no arguments (typically a
140 instead of having it called with no arguments (typically a
135 mistake). The old 'full' autocall still exists: for that, you
141 mistake). The old 'full' autocall still exists: for that, you
136 need to set the 'autocall' parameter to 2 in your ipythonrc file.
142 need to set the 'autocall' parameter to 2 in your ipythonrc file.
137
143
138 * IPython/completer.py (Completer.attr_matches): add
144 * IPython/completer.py (Completer.attr_matches): add
139 tab-completion support for Enthoughts' traits. After a report by
145 tab-completion support for Enthoughts' traits. After a report by
140 Arnd and a patch by Prabhu.
146 Arnd and a patch by Prabhu.
141
147
142 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
148 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
143
149
144 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
150 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
145 Schmolck's patch to fix inspect.getinnerframes().
151 Schmolck's patch to fix inspect.getinnerframes().
146
152
147 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
153 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
148 for embedded instances, regarding handling of namespaces and items
154 for embedded instances, regarding handling of namespaces and items
149 added to the __builtin__ one. Multiple embedded instances and
155 added to the __builtin__ one. Multiple embedded instances and
150 recursive embeddings should work better now (though I'm not sure
156 recursive embeddings should work better now (though I'm not sure
151 I've got all the corner cases fixed, that code is a bit of a brain
157 I've got all the corner cases fixed, that code is a bit of a brain
152 twister).
158 twister).
153
159
154 * IPython/Magic.py (magic_edit): added support to edit in-memory
160 * IPython/Magic.py (magic_edit): added support to edit in-memory
155 macros (automatically creates the necessary temp files). %edit
161 macros (automatically creates the necessary temp files). %edit
156 also doesn't return the file contents anymore, it's just noise.
162 also doesn't return the file contents anymore, it's just noise.
157
163
158 * IPython/completer.py (Completer.attr_matches): revert change to
164 * IPython/completer.py (Completer.attr_matches): revert change to
159 complete only on attributes listed in __all__. I realized it
165 complete only on attributes listed in __all__. I realized it
160 cripples the tab-completion system as a tool for exploring the
166 cripples the tab-completion system as a tool for exploring the
161 internals of unknown libraries (it renders any non-__all__
167 internals of unknown libraries (it renders any non-__all__
162 attribute off-limits). I got bit by this when trying to see
168 attribute off-limits). I got bit by this when trying to see
163 something inside the dis module.
169 something inside the dis module.
164
170
165 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
171 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
166
172
167 * IPython/iplib.py (InteractiveShell.__init__): add .meta
173 * IPython/iplib.py (InteractiveShell.__init__): add .meta
168 namespace for users and extension writers to hold data in. This
174 namespace for users and extension writers to hold data in. This
169 follows the discussion in
175 follows the discussion in
170 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
176 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
171
177
172 * IPython/completer.py (IPCompleter.complete): small patch to help
178 * IPython/completer.py (IPCompleter.complete): small patch to help
173 tab-completion under Emacs, after a suggestion by John Barnard
179 tab-completion under Emacs, after a suggestion by John Barnard
174 <barnarj-AT-ccf.org>.
180 <barnarj-AT-ccf.org>.
175
181
176 * IPython/Magic.py (Magic.extract_input_slices): added support for
182 * IPython/Magic.py (Magic.extract_input_slices): added support for
177 the slice notation in magics to use N-M to represent numbers N...M
183 the slice notation in magics to use N-M to represent numbers N...M
178 (closed endpoints). This is used by %macro and %save.
184 (closed endpoints). This is used by %macro and %save.
179
185
180 * IPython/completer.py (Completer.attr_matches): for modules which
186 * IPython/completer.py (Completer.attr_matches): for modules which
181 define __all__, complete only on those. After a patch by Jeffrey
187 define __all__, complete only on those. After a patch by Jeffrey
182 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
188 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
183 speed up this routine.
189 speed up this routine.
184
190
185 * IPython/Logger.py (Logger.log): fix a history handling bug. I
191 * IPython/Logger.py (Logger.log): fix a history handling bug. I
186 don't know if this is the end of it, but the behavior now is
192 don't know if this is the end of it, but the behavior now is
187 certainly much more correct. Note that coupled with macros,
193 certainly much more correct. Note that coupled with macros,
188 slightly surprising (at first) behavior may occur: a macro will in
194 slightly surprising (at first) behavior may occur: a macro will in
189 general expand to multiple lines of input, so upon exiting, the
195 general expand to multiple lines of input, so upon exiting, the
190 in/out counters will both be bumped by the corresponding amount
196 in/out counters will both be bumped by the corresponding amount
191 (as if the macro's contents had been typed interactively). Typing
197 (as if the macro's contents had been typed interactively). Typing
192 %hist will reveal the intermediate (silently processed) lines.
198 %hist will reveal the intermediate (silently processed) lines.
193
199
194 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
200 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
195 pickle to fail (%run was overwriting __main__ and not restoring
201 pickle to fail (%run was overwriting __main__ and not restoring
196 it, but pickle relies on __main__ to operate).
202 it, but pickle relies on __main__ to operate).
197
203
198 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
204 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
199 using properties, but forgot to make the main InteractiveShell
205 using properties, but forgot to make the main InteractiveShell
200 class a new-style class. Properties fail silently, and
206 class a new-style class. Properties fail silently, and
201 misteriously, with old-style class (getters work, but
207 misteriously, with old-style class (getters work, but
202 setters don't do anything).
208 setters don't do anything).
203
209
204 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
210 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
205
211
206 * IPython/Magic.py (magic_history): fix history reporting bug (I
212 * IPython/Magic.py (magic_history): fix history reporting bug (I
207 know some nasties are still there, I just can't seem to find a
213 know some nasties are still there, I just can't seem to find a
208 reproducible test case to track them down; the input history is
214 reproducible test case to track them down; the input history is
209 falling out of sync...)
215 falling out of sync...)
210
216
211 * IPython/iplib.py (handle_shell_escape): fix bug where both
217 * IPython/iplib.py (handle_shell_escape): fix bug where both
212 aliases and system accesses where broken for indented code (such
218 aliases and system accesses where broken for indented code (such
213 as loops).
219 as loops).
214
220
215 * IPython/genutils.py (shell): fix small but critical bug for
221 * IPython/genutils.py (shell): fix small but critical bug for
216 win32 system access.
222 win32 system access.
217
223
218 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
224 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
219
225
220 * IPython/iplib.py (showtraceback): remove use of the
226 * IPython/iplib.py (showtraceback): remove use of the
221 sys.last_{type/value/traceback} structures, which are non
227 sys.last_{type/value/traceback} structures, which are non
222 thread-safe.
228 thread-safe.
223 (_prefilter): change control flow to ensure that we NEVER
229 (_prefilter): change control flow to ensure that we NEVER
224 introspect objects when autocall is off. This will guarantee that
230 introspect objects when autocall is off. This will guarantee that
225 having an input line of the form 'x.y', where access to attribute
231 having an input line of the form 'x.y', where access to attribute
226 'y' has side effects, doesn't trigger the side effect TWICE. It
232 'y' has side effects, doesn't trigger the side effect TWICE. It
227 is important to note that, with autocall on, these side effects
233 is important to note that, with autocall on, these side effects
228 can still happen.
234 can still happen.
229 (ipsystem): new builtin, to complete the ip{magic/alias/system}
235 (ipsystem): new builtin, to complete the ip{magic/alias/system}
230 trio. IPython offers these three kinds of special calls which are
236 trio. IPython offers these three kinds of special calls which are
231 not python code, and it's a good thing to have their call method
237 not python code, and it's a good thing to have their call method
232 be accessible as pure python functions (not just special syntax at
238 be accessible as pure python functions (not just special syntax at
233 the command line). It gives us a better internal implementation
239 the command line). It gives us a better internal implementation
234 structure, as well as exposing these for user scripting more
240 structure, as well as exposing these for user scripting more
235 cleanly.
241 cleanly.
236
242
237 * IPython/macro.py (Macro.__init__): moved macros to a standalone
243 * IPython/macro.py (Macro.__init__): moved macros to a standalone
238 file. Now that they'll be more likely to be used with the
244 file. Now that they'll be more likely to be used with the
239 persistance system (%store), I want to make sure their module path
245 persistance system (%store), I want to make sure their module path
240 doesn't change in the future, so that we don't break things for
246 doesn't change in the future, so that we don't break things for
241 users' persisted data.
247 users' persisted data.
242
248
243 * IPython/iplib.py (autoindent_update): move indentation
249 * IPython/iplib.py (autoindent_update): move indentation
244 management into the _text_ processing loop, not the keyboard
250 management into the _text_ processing loop, not the keyboard
245 interactive one. This is necessary to correctly process non-typed
251 interactive one. This is necessary to correctly process non-typed
246 multiline input (such as macros).
252 multiline input (such as macros).
247
253
248 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
254 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
249 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
255 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
250 which was producing problems in the resulting manual.
256 which was producing problems in the resulting manual.
251 (magic_whos): improve reporting of instances (show their class,
257 (magic_whos): improve reporting of instances (show their class,
252 instead of simply printing 'instance' which isn't terribly
258 instead of simply printing 'instance' which isn't terribly
253 informative).
259 informative).
254
260
255 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
261 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
256 (minor mods) to support network shares under win32.
262 (minor mods) to support network shares under win32.
257
263
258 * IPython/winconsole.py (get_console_size): add new winconsole
264 * IPython/winconsole.py (get_console_size): add new winconsole
259 module and fixes to page_dumb() to improve its behavior under
265 module and fixes to page_dumb() to improve its behavior under
260 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
266 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
261
267
262 * IPython/Magic.py (Macro): simplified Macro class to just
268 * IPython/Magic.py (Macro): simplified Macro class to just
263 subclass list. We've had only 2.2 compatibility for a very long
269 subclass list. We've had only 2.2 compatibility for a very long
264 time, yet I was still avoiding subclassing the builtin types. No
270 time, yet I was still avoiding subclassing the builtin types. No
265 more (I'm also starting to use properties, though I won't shift to
271 more (I'm also starting to use properties, though I won't shift to
266 2.3-specific features quite yet).
272 2.3-specific features quite yet).
267 (magic_store): added Ville's patch for lightweight variable
273 (magic_store): added Ville's patch for lightweight variable
268 persistence, after a request on the user list by Matt Wilkie
274 persistence, after a request on the user list by Matt Wilkie
269 <maphew-AT-gmail.com>. The new %store magic's docstring has full
275 <maphew-AT-gmail.com>. The new %store magic's docstring has full
270 details.
276 details.
271
277
272 * IPython/iplib.py (InteractiveShell.post_config_initialization):
278 * IPython/iplib.py (InteractiveShell.post_config_initialization):
273 changed the default logfile name from 'ipython.log' to
279 changed the default logfile name from 'ipython.log' to
274 'ipython_log.py'. These logs are real python files, and now that
280 'ipython_log.py'. These logs are real python files, and now that
275 we have much better multiline support, people are more likely to
281 we have much better multiline support, people are more likely to
276 want to use them as such. Might as well name them correctly.
282 want to use them as such. Might as well name them correctly.
277
283
278 * IPython/Magic.py: substantial cleanup. While we can't stop
284 * IPython/Magic.py: substantial cleanup. While we can't stop
279 using magics as mixins, due to the existing customizations 'out
285 using magics as mixins, due to the existing customizations 'out
280 there' which rely on the mixin naming conventions, at least I
286 there' which rely on the mixin naming conventions, at least I
281 cleaned out all cross-class name usage. So once we are OK with
287 cleaned out all cross-class name usage. So once we are OK with
282 breaking compatibility, the two systems can be separated.
288 breaking compatibility, the two systems can be separated.
283
289
284 * IPython/Logger.py: major cleanup. This one is NOT a mixin
290 * IPython/Logger.py: major cleanup. This one is NOT a mixin
285 anymore, and the class is a fair bit less hideous as well. New
291 anymore, and the class is a fair bit less hideous as well. New
286 features were also introduced: timestamping of input, and logging
292 features were also introduced: timestamping of input, and logging
287 of output results. These are user-visible with the -t and -o
293 of output results. These are user-visible with the -t and -o
288 options to %logstart. Closes
294 options to %logstart. Closes
289 http://www.scipy.net/roundup/ipython/issue11 and a request by
295 http://www.scipy.net/roundup/ipython/issue11 and a request by
290 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
296 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
291
297
292 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
298 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
293
299
294 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
300 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
295 better hadnle backslashes in paths. See the thread 'More Windows
301 better hadnle backslashes in paths. See the thread 'More Windows
296 questions part 2 - \/ characters revisited' on the iypthon user
302 questions part 2 - \/ characters revisited' on the iypthon user
297 list:
303 list:
298 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
304 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
299
305
300 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
306 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
301
307
302 (InteractiveShell.__init__): change threaded shells to not use the
308 (InteractiveShell.__init__): change threaded shells to not use the
303 ipython crash handler. This was causing more problems than not,
309 ipython crash handler. This was causing more problems than not,
304 as exceptions in the main thread (GUI code, typically) would
310 as exceptions in the main thread (GUI code, typically) would
305 always show up as a 'crash', when they really weren't.
311 always show up as a 'crash', when they really weren't.
306
312
307 The colors and exception mode commands (%colors/%xmode) have been
313 The colors and exception mode commands (%colors/%xmode) have been
308 synchronized to also take this into account, so users can get
314 synchronized to also take this into account, so users can get
309 verbose exceptions for their threaded code as well. I also added
315 verbose exceptions for their threaded code as well. I also added
310 support for activating pdb inside this exception handler as well,
316 support for activating pdb inside this exception handler as well,
311 so now GUI authors can use IPython's enhanced pdb at runtime.
317 so now GUI authors can use IPython's enhanced pdb at runtime.
312
318
313 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
319 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
314 true by default, and add it to the shipped ipythonrc file. Since
320 true by default, and add it to the shipped ipythonrc file. Since
315 this asks the user before proceeding, I think it's OK to make it
321 this asks the user before proceeding, I think it's OK to make it
316 true by default.
322 true by default.
317
323
318 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
324 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
319 of the previous special-casing of input in the eval loop. I think
325 of the previous special-casing of input in the eval loop. I think
320 this is cleaner, as they really are commands and shouldn't have
326 this is cleaner, as they really are commands and shouldn't have
321 a special role in the middle of the core code.
327 a special role in the middle of the core code.
322
328
323 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
329 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
324
330
325 * IPython/iplib.py (edit_syntax_error): added support for
331 * IPython/iplib.py (edit_syntax_error): added support for
326 automatically reopening the editor if the file had a syntax error
332 automatically reopening the editor if the file had a syntax error
327 in it. Thanks to scottt who provided the patch at:
333 in it. Thanks to scottt who provided the patch at:
328 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
334 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
329 version committed).
335 version committed).
330
336
331 * IPython/iplib.py (handle_normal): add suport for multi-line
337 * IPython/iplib.py (handle_normal): add suport for multi-line
332 input with emtpy lines. This fixes
338 input with emtpy lines. This fixes
333 http://www.scipy.net/roundup/ipython/issue43 and a similar
339 http://www.scipy.net/roundup/ipython/issue43 and a similar
334 discussion on the user list.
340 discussion on the user list.
335
341
336 WARNING: a behavior change is necessarily introduced to support
342 WARNING: a behavior change is necessarily introduced to support
337 blank lines: now a single blank line with whitespace does NOT
343 blank lines: now a single blank line with whitespace does NOT
338 break the input loop, which means that when autoindent is on, by
344 break the input loop, which means that when autoindent is on, by
339 default hitting return on the next (indented) line does NOT exit.
345 default hitting return on the next (indented) line does NOT exit.
340
346
341 Instead, to exit a multiline input you can either have:
347 Instead, to exit a multiline input you can either have:
342
348
343 - TWO whitespace lines (just hit return again), or
349 - TWO whitespace lines (just hit return again), or
344 - a single whitespace line of a different length than provided
350 - a single whitespace line of a different length than provided
345 by the autoindent (add or remove a space).
351 by the autoindent (add or remove a space).
346
352
347 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
353 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
348 module to better organize all readline-related functionality.
354 module to better organize all readline-related functionality.
349 I've deleted FlexCompleter and put all completion clases here.
355 I've deleted FlexCompleter and put all completion clases here.
350
356
351 * IPython/iplib.py (raw_input): improve indentation management.
357 * IPython/iplib.py (raw_input): improve indentation management.
352 It is now possible to paste indented code with autoindent on, and
358 It is now possible to paste indented code with autoindent on, and
353 the code is interpreted correctly (though it still looks bad on
359 the code is interpreted correctly (though it still looks bad on
354 screen, due to the line-oriented nature of ipython).
360 screen, due to the line-oriented nature of ipython).
355 (MagicCompleter.complete): change behavior so that a TAB key on an
361 (MagicCompleter.complete): change behavior so that a TAB key on an
356 otherwise empty line actually inserts a tab, instead of completing
362 otherwise empty line actually inserts a tab, instead of completing
357 on the entire global namespace. This makes it easier to use the
363 on the entire global namespace. This makes it easier to use the
358 TAB key for indentation. After a request by Hans Meine
364 TAB key for indentation. After a request by Hans Meine
359 <hans_meine-AT-gmx.net>
365 <hans_meine-AT-gmx.net>
360 (_prefilter): add support so that typing plain 'exit' or 'quit'
366 (_prefilter): add support so that typing plain 'exit' or 'quit'
361 does a sensible thing. Originally I tried to deviate as little as
367 does a sensible thing. Originally I tried to deviate as little as
362 possible from the default python behavior, but even that one may
368 possible from the default python behavior, but even that one may
363 change in this direction (thread on python-dev to that effect).
369 change in this direction (thread on python-dev to that effect).
364 Regardless, ipython should do the right thing even if CPython's
370 Regardless, ipython should do the right thing even if CPython's
365 '>>>' prompt doesn't.
371 '>>>' prompt doesn't.
366 (InteractiveShell): removed subclassing code.InteractiveConsole
372 (InteractiveShell): removed subclassing code.InteractiveConsole
367 class. By now we'd overridden just about all of its methods: I've
373 class. By now we'd overridden just about all of its methods: I've
368 copied the remaining two over, and now ipython is a standalone
374 copied the remaining two over, and now ipython is a standalone
369 class. This will provide a clearer picture for the chainsaw
375 class. This will provide a clearer picture for the chainsaw
370 branch refactoring.
376 branch refactoring.
371
377
372 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
378 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
373
379
374 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
380 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
375 failures for objects which break when dir() is called on them.
381 failures for objects which break when dir() is called on them.
376
382
377 * IPython/FlexCompleter.py (Completer.__init__): Added support for
383 * IPython/FlexCompleter.py (Completer.__init__): Added support for
378 distinct local and global namespaces in the completer API. This
384 distinct local and global namespaces in the completer API. This
379 change allows us top properly handle completion with distinct
385 change allows us top properly handle completion with distinct
380 scopes, including in embedded instances (this had never really
386 scopes, including in embedded instances (this had never really
381 worked correctly).
387 worked correctly).
382
388
383 Note: this introduces a change in the constructor for
389 Note: this introduces a change in the constructor for
384 MagicCompleter, as a new global_namespace parameter is now the
390 MagicCompleter, as a new global_namespace parameter is now the
385 second argument (the others were bumped one position).
391 second argument (the others were bumped one position).
386
392
387 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
393 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
388
394
389 * IPython/iplib.py (embed_mainloop): fix tab-completion in
395 * IPython/iplib.py (embed_mainloop): fix tab-completion in
390 embedded instances (which can be done now thanks to Vivian's
396 embedded instances (which can be done now thanks to Vivian's
391 frame-handling fixes for pdb).
397 frame-handling fixes for pdb).
392 (InteractiveShell.__init__): Fix namespace handling problem in
398 (InteractiveShell.__init__): Fix namespace handling problem in
393 embedded instances. We were overwriting __main__ unconditionally,
399 embedded instances. We were overwriting __main__ unconditionally,
394 and this should only be done for 'full' (non-embedded) IPython;
400 and this should only be done for 'full' (non-embedded) IPython;
395 embedded instances must respect the caller's __main__. Thanks to
401 embedded instances must respect the caller's __main__. Thanks to
396 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
402 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
397
403
398 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
404 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
399
405
400 * setup.py: added download_url to setup(). This registers the
406 * setup.py: added download_url to setup(). This registers the
401 download address at PyPI, which is not only useful to humans
407 download address at PyPI, which is not only useful to humans
402 browsing the site, but is also picked up by setuptools (the Eggs
408 browsing the site, but is also picked up by setuptools (the Eggs
403 machinery). Thanks to Ville and R. Kern for the info/discussion
409 machinery). Thanks to Ville and R. Kern for the info/discussion
404 on this.
410 on this.
405
411
406 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
412 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
407
413
408 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
414 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
409 This brings a lot of nice functionality to the pdb mode, which now
415 This brings a lot of nice functionality to the pdb mode, which now
410 has tab-completion, syntax highlighting, and better stack handling
416 has tab-completion, syntax highlighting, and better stack handling
411 than before. Many thanks to Vivian De Smedt
417 than before. Many thanks to Vivian De Smedt
412 <vivian-AT-vdesmedt.com> for the original patches.
418 <vivian-AT-vdesmedt.com> for the original patches.
413
419
414 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
420 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
415
421
416 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
422 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
417 sequence to consistently accept the banner argument. The
423 sequence to consistently accept the banner argument. The
418 inconsistency was tripping SAGE, thanks to Gary Zablackis
424 inconsistency was tripping SAGE, thanks to Gary Zablackis
419 <gzabl-AT-yahoo.com> for the report.
425 <gzabl-AT-yahoo.com> for the report.
420
426
421 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
427 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
422
428
423 * IPython/iplib.py (InteractiveShell.post_config_initialization):
429 * IPython/iplib.py (InteractiveShell.post_config_initialization):
424 Fix bug where a naked 'alias' call in the ipythonrc file would
430 Fix bug where a naked 'alias' call in the ipythonrc file would
425 cause a crash. Bug reported by Jorgen Stenarson.
431 cause a crash. Bug reported by Jorgen Stenarson.
426
432
427 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
433 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
428
434
429 * IPython/ipmaker.py (make_IPython): cleanups which should improve
435 * IPython/ipmaker.py (make_IPython): cleanups which should improve
430 startup time.
436 startup time.
431
437
432 * IPython/iplib.py (runcode): my globals 'fix' for embedded
438 * IPython/iplib.py (runcode): my globals 'fix' for embedded
433 instances had introduced a bug with globals in normal code. Now
439 instances had introduced a bug with globals in normal code. Now
434 it's working in all cases.
440 it's working in all cases.
435
441
436 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
442 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
437 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
443 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
438 has been introduced to set the default case sensitivity of the
444 has been introduced to set the default case sensitivity of the
439 searches. Users can still select either mode at runtime on a
445 searches. Users can still select either mode at runtime on a
440 per-search basis.
446 per-search basis.
441
447
442 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
448 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
443
449
444 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
450 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
445 attributes in wildcard searches for subclasses. Modified version
451 attributes in wildcard searches for subclasses. Modified version
446 of a patch by Jorgen.
452 of a patch by Jorgen.
447
453
448 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
454 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
449
455
450 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
456 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
451 embedded instances. I added a user_global_ns attribute to the
457 embedded instances. I added a user_global_ns attribute to the
452 InteractiveShell class to handle this.
458 InteractiveShell class to handle this.
453
459
454 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
460 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
455
461
456 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
462 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
457 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
463 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
458 (reported under win32, but may happen also in other platforms).
464 (reported under win32, but may happen also in other platforms).
459 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
465 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
460
466
461 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
467 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
462
468
463 * IPython/Magic.py (magic_psearch): new support for wildcard
469 * IPython/Magic.py (magic_psearch): new support for wildcard
464 patterns. Now, typing ?a*b will list all names which begin with a
470 patterns. Now, typing ?a*b will list all names which begin with a
465 and end in b, for example. The %psearch magic has full
471 and end in b, for example. The %psearch magic has full
466 docstrings. Many thanks to JΓΆrgen Stenarson
472 docstrings. Many thanks to JΓΆrgen Stenarson
467 <jorgen.stenarson-AT-bostream.nu>, author of the patches
473 <jorgen.stenarson-AT-bostream.nu>, author of the patches
468 implementing this functionality.
474 implementing this functionality.
469
475
470 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
476 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
471
477
472 * Manual: fixed long-standing annoyance of double-dashes (as in
478 * Manual: fixed long-standing annoyance of double-dashes (as in
473 --prefix=~, for example) being stripped in the HTML version. This
479 --prefix=~, for example) being stripped in the HTML version. This
474 is a latex2html bug, but a workaround was provided. Many thanks
480 is a latex2html bug, but a workaround was provided. Many thanks
475 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
481 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
476 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
482 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
477 rolling. This seemingly small issue had tripped a number of users
483 rolling. This seemingly small issue had tripped a number of users
478 when first installing, so I'm glad to see it gone.
484 when first installing, so I'm glad to see it gone.
479
485
480 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
486 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
481
487
482 * IPython/Extensions/numeric_formats.py: fix missing import,
488 * IPython/Extensions/numeric_formats.py: fix missing import,
483 reported by Stephen Walton.
489 reported by Stephen Walton.
484
490
485 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
491 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
486
492
487 * IPython/demo.py: finish demo module, fully documented now.
493 * IPython/demo.py: finish demo module, fully documented now.
488
494
489 * IPython/genutils.py (file_read): simple little utility to read a
495 * IPython/genutils.py (file_read): simple little utility to read a
490 file and ensure it's closed afterwards.
496 file and ensure it's closed afterwards.
491
497
492 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
498 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
493
499
494 * IPython/demo.py (Demo.__init__): added support for individually
500 * IPython/demo.py (Demo.__init__): added support for individually
495 tagging blocks for automatic execution.
501 tagging blocks for automatic execution.
496
502
497 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
503 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
498 syntax-highlighted python sources, requested by John.
504 syntax-highlighted python sources, requested by John.
499
505
500 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
506 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
501
507
502 * IPython/demo.py (Demo.again): fix bug where again() blocks after
508 * IPython/demo.py (Demo.again): fix bug where again() blocks after
503 finishing.
509 finishing.
504
510
505 * IPython/genutils.py (shlex_split): moved from Magic to here,
511 * IPython/genutils.py (shlex_split): moved from Magic to here,
506 where all 2.2 compatibility stuff lives. I needed it for demo.py.
512 where all 2.2 compatibility stuff lives. I needed it for demo.py.
507
513
508 * IPython/demo.py (Demo.__init__): added support for silent
514 * IPython/demo.py (Demo.__init__): added support for silent
509 blocks, improved marks as regexps, docstrings written.
515 blocks, improved marks as regexps, docstrings written.
510 (Demo.__init__): better docstring, added support for sys.argv.
516 (Demo.__init__): better docstring, added support for sys.argv.
511
517
512 * IPython/genutils.py (marquee): little utility used by the demo
518 * IPython/genutils.py (marquee): little utility used by the demo
513 code, handy in general.
519 code, handy in general.
514
520
515 * IPython/demo.py (Demo.__init__): new class for interactive
521 * IPython/demo.py (Demo.__init__): new class for interactive
516 demos. Not documented yet, I just wrote it in a hurry for
522 demos. Not documented yet, I just wrote it in a hurry for
517 scipy'05. Will docstring later.
523 scipy'05. Will docstring later.
518
524
519 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
525 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
520
526
521 * IPython/Shell.py (sigint_handler): Drastic simplification which
527 * IPython/Shell.py (sigint_handler): Drastic simplification which
522 also seems to make Ctrl-C work correctly across threads! This is
528 also seems to make Ctrl-C work correctly across threads! This is
523 so simple, that I can't beleive I'd missed it before. Needs more
529 so simple, that I can't beleive I'd missed it before. Needs more
524 testing, though.
530 testing, though.
525 (KBINT): Never mind, revert changes. I'm sure I'd tried something
531 (KBINT): Never mind, revert changes. I'm sure I'd tried something
526 like this before...
532 like this before...
527
533
528 * IPython/genutils.py (get_home_dir): add protection against
534 * IPython/genutils.py (get_home_dir): add protection against
529 non-dirs in win32 registry.
535 non-dirs in win32 registry.
530
536
531 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
537 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
532 bug where dict was mutated while iterating (pysh crash).
538 bug where dict was mutated while iterating (pysh crash).
533
539
534 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
540 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
535
541
536 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
542 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
537 spurious newlines added by this routine. After a report by
543 spurious newlines added by this routine. After a report by
538 F. Mantegazza.
544 F. Mantegazza.
539
545
540 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
546 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
541
547
542 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
548 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
543 calls. These were a leftover from the GTK 1.x days, and can cause
549 calls. These were a leftover from the GTK 1.x days, and can cause
544 problems in certain cases (after a report by John Hunter).
550 problems in certain cases (after a report by John Hunter).
545
551
546 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
552 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
547 os.getcwd() fails at init time. Thanks to patch from David Remahl
553 os.getcwd() fails at init time. Thanks to patch from David Remahl
548 <chmod007-AT-mac.com>.
554 <chmod007-AT-mac.com>.
549 (InteractiveShell.__init__): prevent certain special magics from
555 (InteractiveShell.__init__): prevent certain special magics from
550 being shadowed by aliases. Closes
556 being shadowed by aliases. Closes
551 http://www.scipy.net/roundup/ipython/issue41.
557 http://www.scipy.net/roundup/ipython/issue41.
552
558
553 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
559 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
554
560
555 * IPython/iplib.py (InteractiveShell.complete): Added new
561 * IPython/iplib.py (InteractiveShell.complete): Added new
556 top-level completion method to expose the completion mechanism
562 top-level completion method to expose the completion mechanism
557 beyond readline-based environments.
563 beyond readline-based environments.
558
564
559 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
565 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
560
566
561 * tools/ipsvnc (svnversion): fix svnversion capture.
567 * tools/ipsvnc (svnversion): fix svnversion capture.
562
568
563 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
569 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
564 attribute to self, which was missing. Before, it was set by a
570 attribute to self, which was missing. Before, it was set by a
565 routine which in certain cases wasn't being called, so the
571 routine which in certain cases wasn't being called, so the
566 instance could end up missing the attribute. This caused a crash.
572 instance could end up missing the attribute. This caused a crash.
567 Closes http://www.scipy.net/roundup/ipython/issue40.
573 Closes http://www.scipy.net/roundup/ipython/issue40.
568
574
569 2005-08-16 Fernando Perez <fperez@colorado.edu>
575 2005-08-16 Fernando Perez <fperez@colorado.edu>
570
576
571 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
577 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
572 contains non-string attribute. Closes
578 contains non-string attribute. Closes
573 http://www.scipy.net/roundup/ipython/issue38.
579 http://www.scipy.net/roundup/ipython/issue38.
574
580
575 2005-08-14 Fernando Perez <fperez@colorado.edu>
581 2005-08-14 Fernando Perez <fperez@colorado.edu>
576
582
577 * tools/ipsvnc: Minor improvements, to add changeset info.
583 * tools/ipsvnc: Minor improvements, to add changeset info.
578
584
579 2005-08-12 Fernando Perez <fperez@colorado.edu>
585 2005-08-12 Fernando Perez <fperez@colorado.edu>
580
586
581 * IPython/iplib.py (runsource): remove self.code_to_run_src
587 * IPython/iplib.py (runsource): remove self.code_to_run_src
582 attribute. I realized this is nothing more than
588 attribute. I realized this is nothing more than
583 '\n'.join(self.buffer), and having the same data in two different
589 '\n'.join(self.buffer), and having the same data in two different
584 places is just asking for synchronization bugs. This may impact
590 places is just asking for synchronization bugs. This may impact
585 people who have custom exception handlers, so I need to warn
591 people who have custom exception handlers, so I need to warn
586 ipython-dev about it (F. Mantegazza may use them).
592 ipython-dev about it (F. Mantegazza may use them).
587
593
588 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
594 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
589
595
590 * IPython/genutils.py: fix 2.2 compatibility (generators)
596 * IPython/genutils.py: fix 2.2 compatibility (generators)
591
597
592 2005-07-18 Fernando Perez <fperez@colorado.edu>
598 2005-07-18 Fernando Perez <fperez@colorado.edu>
593
599
594 * IPython/genutils.py (get_home_dir): fix to help users with
600 * IPython/genutils.py (get_home_dir): fix to help users with
595 invalid $HOME under win32.
601 invalid $HOME under win32.
596
602
597 2005-07-17 Fernando Perez <fperez@colorado.edu>
603 2005-07-17 Fernando Perez <fperez@colorado.edu>
598
604
599 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
605 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
600 some old hacks and clean up a bit other routines; code should be
606 some old hacks and clean up a bit other routines; code should be
601 simpler and a bit faster.
607 simpler and a bit faster.
602
608
603 * IPython/iplib.py (interact): removed some last-resort attempts
609 * IPython/iplib.py (interact): removed some last-resort attempts
604 to survive broken stdout/stderr. That code was only making it
610 to survive broken stdout/stderr. That code was only making it
605 harder to abstract out the i/o (necessary for gui integration),
611 harder to abstract out the i/o (necessary for gui integration),
606 and the crashes it could prevent were extremely rare in practice
612 and the crashes it could prevent were extremely rare in practice
607 (besides being fully user-induced in a pretty violent manner).
613 (besides being fully user-induced in a pretty violent manner).
608
614
609 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
615 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
610 Nothing major yet, but the code is simpler to read; this should
616 Nothing major yet, but the code is simpler to read; this should
611 make it easier to do more serious modifications in the future.
617 make it easier to do more serious modifications in the future.
612
618
613 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
619 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
614 which broke in .15 (thanks to a report by Ville).
620 which broke in .15 (thanks to a report by Ville).
615
621
616 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
622 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
617 be quite correct, I know next to nothing about unicode). This
623 be quite correct, I know next to nothing about unicode). This
618 will allow unicode strings to be used in prompts, amongst other
624 will allow unicode strings to be used in prompts, amongst other
619 cases. It also will prevent ipython from crashing when unicode
625 cases. It also will prevent ipython from crashing when unicode
620 shows up unexpectedly in many places. If ascii encoding fails, we
626 shows up unexpectedly in many places. If ascii encoding fails, we
621 assume utf_8. Currently the encoding is not a user-visible
627 assume utf_8. Currently the encoding is not a user-visible
622 setting, though it could be made so if there is demand for it.
628 setting, though it could be made so if there is demand for it.
623
629
624 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
630 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
625
631
626 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
632 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
627
633
628 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
634 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
629
635
630 * IPython/genutils.py: Add 2.2 compatibility here, so all other
636 * IPython/genutils.py: Add 2.2 compatibility here, so all other
631 code can work transparently for 2.2/2.3.
637 code can work transparently for 2.2/2.3.
632
638
633 2005-07-16 Fernando Perez <fperez@colorado.edu>
639 2005-07-16 Fernando Perez <fperez@colorado.edu>
634
640
635 * IPython/ultraTB.py (ExceptionColors): Make a global variable
641 * IPython/ultraTB.py (ExceptionColors): Make a global variable
636 out of the color scheme table used for coloring exception
642 out of the color scheme table used for coloring exception
637 tracebacks. This allows user code to add new schemes at runtime.
643 tracebacks. This allows user code to add new schemes at runtime.
638 This is a minimally modified version of the patch at
644 This is a minimally modified version of the patch at
639 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
645 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
640 for the contribution.
646 for the contribution.
641
647
642 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
648 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
643 slightly modified version of the patch in
649 slightly modified version of the patch in
644 http://www.scipy.net/roundup/ipython/issue34, which also allows me
650 http://www.scipy.net/roundup/ipython/issue34, which also allows me
645 to remove the previous try/except solution (which was costlier).
651 to remove the previous try/except solution (which was costlier).
646 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
652 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
647
653
648 2005-06-08 Fernando Perez <fperez@colorado.edu>
654 2005-06-08 Fernando Perez <fperez@colorado.edu>
649
655
650 * IPython/iplib.py (write/write_err): Add methods to abstract all
656 * IPython/iplib.py (write/write_err): Add methods to abstract all
651 I/O a bit more.
657 I/O a bit more.
652
658
653 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
659 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
654 warning, reported by Aric Hagberg, fix by JD Hunter.
660 warning, reported by Aric Hagberg, fix by JD Hunter.
655
661
656 2005-06-02 *** Released version 0.6.15
662 2005-06-02 *** Released version 0.6.15
657
663
658 2005-06-01 Fernando Perez <fperez@colorado.edu>
664 2005-06-01 Fernando Perez <fperez@colorado.edu>
659
665
660 * IPython/iplib.py (MagicCompleter.file_matches): Fix
666 * IPython/iplib.py (MagicCompleter.file_matches): Fix
661 tab-completion of filenames within open-quoted strings. Note that
667 tab-completion of filenames within open-quoted strings. Note that
662 this requires that in ~/.ipython/ipythonrc, users change the
668 this requires that in ~/.ipython/ipythonrc, users change the
663 readline delimiters configuration to read:
669 readline delimiters configuration to read:
664
670
665 readline_remove_delims -/~
671 readline_remove_delims -/~
666
672
667
673
668 2005-05-31 *** Released version 0.6.14
674 2005-05-31 *** Released version 0.6.14
669
675
670 2005-05-29 Fernando Perez <fperez@colorado.edu>
676 2005-05-29 Fernando Perez <fperez@colorado.edu>
671
677
672 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
678 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
673 with files not on the filesystem. Reported by Eliyahu Sandler
679 with files not on the filesystem. Reported by Eliyahu Sandler
674 <eli@gondolin.net>
680 <eli@gondolin.net>
675
681
676 2005-05-22 Fernando Perez <fperez@colorado.edu>
682 2005-05-22 Fernando Perez <fperez@colorado.edu>
677
683
678 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
684 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
679 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
685 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
680
686
681 2005-05-19 Fernando Perez <fperez@colorado.edu>
687 2005-05-19 Fernando Perez <fperez@colorado.edu>
682
688
683 * IPython/iplib.py (safe_execfile): close a file which could be
689 * IPython/iplib.py (safe_execfile): close a file which could be
684 left open (causing problems in win32, which locks open files).
690 left open (causing problems in win32, which locks open files).
685 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
691 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
686
692
687 2005-05-18 Fernando Perez <fperez@colorado.edu>
693 2005-05-18 Fernando Perez <fperez@colorado.edu>
688
694
689 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
695 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
690 keyword arguments correctly to safe_execfile().
696 keyword arguments correctly to safe_execfile().
691
697
692 2005-05-13 Fernando Perez <fperez@colorado.edu>
698 2005-05-13 Fernando Perez <fperez@colorado.edu>
693
699
694 * ipython.1: Added info about Qt to manpage, and threads warning
700 * ipython.1: Added info about Qt to manpage, and threads warning
695 to usage page (invoked with --help).
701 to usage page (invoked with --help).
696
702
697 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
703 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
698 new matcher (it goes at the end of the priority list) to do
704 new matcher (it goes at the end of the priority list) to do
699 tab-completion on named function arguments. Submitted by George
705 tab-completion on named function arguments. Submitted by George
700 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
706 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
701 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
707 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
702 for more details.
708 for more details.
703
709
704 * IPython/Magic.py (magic_run): Added new -e flag to ignore
710 * IPython/Magic.py (magic_run): Added new -e flag to ignore
705 SystemExit exceptions in the script being run. Thanks to a report
711 SystemExit exceptions in the script being run. Thanks to a report
706 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
712 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
707 producing very annoying behavior when running unit tests.
713 producing very annoying behavior when running unit tests.
708
714
709 2005-05-12 Fernando Perez <fperez@colorado.edu>
715 2005-05-12 Fernando Perez <fperez@colorado.edu>
710
716
711 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
717 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
712 which I'd broken (again) due to a changed regexp. In the process,
718 which I'd broken (again) due to a changed regexp. In the process,
713 added ';' as an escape to auto-quote the whole line without
719 added ';' as an escape to auto-quote the whole line without
714 splitting its arguments. Thanks to a report by Jerry McRae
720 splitting its arguments. Thanks to a report by Jerry McRae
715 <qrs0xyc02-AT-sneakemail.com>.
721 <qrs0xyc02-AT-sneakemail.com>.
716
722
717 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
723 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
718 possible crashes caused by a TokenError. Reported by Ed Schofield
724 possible crashes caused by a TokenError. Reported by Ed Schofield
719 <schofield-AT-ftw.at>.
725 <schofield-AT-ftw.at>.
720
726
721 2005-05-06 Fernando Perez <fperez@colorado.edu>
727 2005-05-06 Fernando Perez <fperez@colorado.edu>
722
728
723 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
729 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
724
730
725 2005-04-29 Fernando Perez <fperez@colorado.edu>
731 2005-04-29 Fernando Perez <fperez@colorado.edu>
726
732
727 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
733 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
728 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
734 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
729 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
735 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
730 which provides support for Qt interactive usage (similar to the
736 which provides support for Qt interactive usage (similar to the
731 existing one for WX and GTK). This had been often requested.
737 existing one for WX and GTK). This had been often requested.
732
738
733 2005-04-14 *** Released version 0.6.13
739 2005-04-14 *** Released version 0.6.13
734
740
735 2005-04-08 Fernando Perez <fperez@colorado.edu>
741 2005-04-08 Fernando Perez <fperez@colorado.edu>
736
742
737 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
743 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
738 from _ofind, which gets called on almost every input line. Now,
744 from _ofind, which gets called on almost every input line. Now,
739 we only try to get docstrings if they are actually going to be
745 we only try to get docstrings if they are actually going to be
740 used (the overhead of fetching unnecessary docstrings can be
746 used (the overhead of fetching unnecessary docstrings can be
741 noticeable for certain objects, such as Pyro proxies).
747 noticeable for certain objects, such as Pyro proxies).
742
748
743 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
749 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
744 for completers. For some reason I had been passing them the state
750 for completers. For some reason I had been passing them the state
745 variable, which completers never actually need, and was in
751 variable, which completers never actually need, and was in
746 conflict with the rlcompleter API. Custom completers ONLY need to
752 conflict with the rlcompleter API. Custom completers ONLY need to
747 take the text parameter.
753 take the text parameter.
748
754
749 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
755 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
750 work correctly in pysh. I've also moved all the logic which used
756 work correctly in pysh. I've also moved all the logic which used
751 to be in pysh.py here, which will prevent problems with future
757 to be in pysh.py here, which will prevent problems with future
752 upgrades. However, this time I must warn users to update their
758 upgrades. However, this time I must warn users to update their
753 pysh profile to include the line
759 pysh profile to include the line
754
760
755 import_all IPython.Extensions.InterpreterExec
761 import_all IPython.Extensions.InterpreterExec
756
762
757 because otherwise things won't work for them. They MUST also
763 because otherwise things won't work for them. They MUST also
758 delete pysh.py and the line
764 delete pysh.py and the line
759
765
760 execfile pysh.py
766 execfile pysh.py
761
767
762 from their ipythonrc-pysh.
768 from their ipythonrc-pysh.
763
769
764 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
770 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
765 robust in the face of objects whose dir() returns non-strings
771 robust in the face of objects whose dir() returns non-strings
766 (which it shouldn't, but some broken libs like ITK do). Thanks to
772 (which it shouldn't, but some broken libs like ITK do). Thanks to
767 a patch by John Hunter (implemented differently, though). Also
773 a patch by John Hunter (implemented differently, though). Also
768 minor improvements by using .extend instead of + on lists.
774 minor improvements by using .extend instead of + on lists.
769
775
770 * pysh.py:
776 * pysh.py:
771
777
772 2005-04-06 Fernando Perez <fperez@colorado.edu>
778 2005-04-06 Fernando Perez <fperez@colorado.edu>
773
779
774 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
780 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
775 by default, so that all users benefit from it. Those who don't
781 by default, so that all users benefit from it. Those who don't
776 want it can still turn it off.
782 want it can still turn it off.
777
783
778 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
784 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
779 config file, I'd forgotten about this, so users were getting it
785 config file, I'd forgotten about this, so users were getting it
780 off by default.
786 off by default.
781
787
782 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
788 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
783 consistency. Now magics can be called in multiline statements,
789 consistency. Now magics can be called in multiline statements,
784 and python variables can be expanded in magic calls via $var.
790 and python variables can be expanded in magic calls via $var.
785 This makes the magic system behave just like aliases or !system
791 This makes the magic system behave just like aliases or !system
786 calls.
792 calls.
787
793
788 2005-03-28 Fernando Perez <fperez@colorado.edu>
794 2005-03-28 Fernando Perez <fperez@colorado.edu>
789
795
790 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
796 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
791 expensive string additions for building command. Add support for
797 expensive string additions for building command. Add support for
792 trailing ';' when autocall is used.
798 trailing ';' when autocall is used.
793
799
794 2005-03-26 Fernando Perez <fperez@colorado.edu>
800 2005-03-26 Fernando Perez <fperez@colorado.edu>
795
801
796 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
802 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
797 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
803 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
798 ipython.el robust against prompts with any number of spaces
804 ipython.el robust against prompts with any number of spaces
799 (including 0) after the ':' character.
805 (including 0) after the ':' character.
800
806
801 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
807 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
802 continuation prompt, which misled users to think the line was
808 continuation prompt, which misled users to think the line was
803 already indented. Closes debian Bug#300847, reported to me by
809 already indented. Closes debian Bug#300847, reported to me by
804 Norbert Tretkowski <tretkowski-AT-inittab.de>.
810 Norbert Tretkowski <tretkowski-AT-inittab.de>.
805
811
806 2005-03-23 Fernando Perez <fperez@colorado.edu>
812 2005-03-23 Fernando Perez <fperez@colorado.edu>
807
813
808 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
814 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
809 properly aligned if they have embedded newlines.
815 properly aligned if they have embedded newlines.
810
816
811 * IPython/iplib.py (runlines): Add a public method to expose
817 * IPython/iplib.py (runlines): Add a public method to expose
812 IPython's code execution machinery, so that users can run strings
818 IPython's code execution machinery, so that users can run strings
813 as if they had been typed at the prompt interactively.
819 as if they had been typed at the prompt interactively.
814 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
820 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
815 methods which can call the system shell, but with python variable
821 methods which can call the system shell, but with python variable
816 expansion. The three such methods are: __IPYTHON__.system,
822 expansion. The three such methods are: __IPYTHON__.system,
817 .getoutput and .getoutputerror. These need to be documented in a
823 .getoutput and .getoutputerror. These need to be documented in a
818 'public API' section (to be written) of the manual.
824 'public API' section (to be written) of the manual.
819
825
820 2005-03-20 Fernando Perez <fperez@colorado.edu>
826 2005-03-20 Fernando Perez <fperez@colorado.edu>
821
827
822 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
828 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
823 for custom exception handling. This is quite powerful, and it
829 for custom exception handling. This is quite powerful, and it
824 allows for user-installable exception handlers which can trap
830 allows for user-installable exception handlers which can trap
825 custom exceptions at runtime and treat them separately from
831 custom exceptions at runtime and treat them separately from
826 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
832 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
827 Mantegazza <mantegazza-AT-ill.fr>.
833 Mantegazza <mantegazza-AT-ill.fr>.
828 (InteractiveShell.set_custom_completer): public API function to
834 (InteractiveShell.set_custom_completer): public API function to
829 add new completers at runtime.
835 add new completers at runtime.
830
836
831 2005-03-19 Fernando Perez <fperez@colorado.edu>
837 2005-03-19 Fernando Perez <fperez@colorado.edu>
832
838
833 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
839 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
834 allow objects which provide their docstrings via non-standard
840 allow objects which provide their docstrings via non-standard
835 mechanisms (like Pyro proxies) to still be inspected by ipython's
841 mechanisms (like Pyro proxies) to still be inspected by ipython's
836 ? system.
842 ? system.
837
843
838 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
844 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
839 automatic capture system. I tried quite hard to make it work
845 automatic capture system. I tried quite hard to make it work
840 reliably, and simply failed. I tried many combinations with the
846 reliably, and simply failed. I tried many combinations with the
841 subprocess module, but eventually nothing worked in all needed
847 subprocess module, but eventually nothing worked in all needed
842 cases (not blocking stdin for the child, duplicating stdout
848 cases (not blocking stdin for the child, duplicating stdout
843 without blocking, etc). The new %sc/%sx still do capture to these
849 without blocking, etc). The new %sc/%sx still do capture to these
844 magical list/string objects which make shell use much more
850 magical list/string objects which make shell use much more
845 conveninent, so not all is lost.
851 conveninent, so not all is lost.
846
852
847 XXX - FIX MANUAL for the change above!
853 XXX - FIX MANUAL for the change above!
848
854
849 (runsource): I copied code.py's runsource() into ipython to modify
855 (runsource): I copied code.py's runsource() into ipython to modify
850 it a bit. Now the code object and source to be executed are
856 it a bit. Now the code object and source to be executed are
851 stored in ipython. This makes this info accessible to third-party
857 stored in ipython. This makes this info accessible to third-party
852 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
858 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
853 Mantegazza <mantegazza-AT-ill.fr>.
859 Mantegazza <mantegazza-AT-ill.fr>.
854
860
855 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
861 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
856 history-search via readline (like C-p/C-n). I'd wanted this for a
862 history-search via readline (like C-p/C-n). I'd wanted this for a
857 long time, but only recently found out how to do it. For users
863 long time, but only recently found out how to do it. For users
858 who already have their ipythonrc files made and want this, just
864 who already have their ipythonrc files made and want this, just
859 add:
865 add:
860
866
861 readline_parse_and_bind "\e[A": history-search-backward
867 readline_parse_and_bind "\e[A": history-search-backward
862 readline_parse_and_bind "\e[B": history-search-forward
868 readline_parse_and_bind "\e[B": history-search-forward
863
869
864 2005-03-18 Fernando Perez <fperez@colorado.edu>
870 2005-03-18 Fernando Perez <fperez@colorado.edu>
865
871
866 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
872 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
867 LSString and SList classes which allow transparent conversions
873 LSString and SList classes which allow transparent conversions
868 between list mode and whitespace-separated string.
874 between list mode and whitespace-separated string.
869 (magic_r): Fix recursion problem in %r.
875 (magic_r): Fix recursion problem in %r.
870
876
871 * IPython/genutils.py (LSString): New class to be used for
877 * IPython/genutils.py (LSString): New class to be used for
872 automatic storage of the results of all alias/system calls in _o
878 automatic storage of the results of all alias/system calls in _o
873 and _e (stdout/err). These provide a .l/.list attribute which
879 and _e (stdout/err). These provide a .l/.list attribute which
874 does automatic splitting on newlines. This means that for most
880 does automatic splitting on newlines. This means that for most
875 uses, you'll never need to do capturing of output with %sc/%sx
881 uses, you'll never need to do capturing of output with %sc/%sx
876 anymore, since ipython keeps this always done for you. Note that
882 anymore, since ipython keeps this always done for you. Note that
877 only the LAST results are stored, the _o/e variables are
883 only the LAST results are stored, the _o/e variables are
878 overwritten on each call. If you need to save their contents
884 overwritten on each call. If you need to save their contents
879 further, simply bind them to any other name.
885 further, simply bind them to any other name.
880
886
881 2005-03-17 Fernando Perez <fperez@colorado.edu>
887 2005-03-17 Fernando Perez <fperez@colorado.edu>
882
888
883 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
889 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
884 prompt namespace handling.
890 prompt namespace handling.
885
891
886 2005-03-16 Fernando Perez <fperez@colorado.edu>
892 2005-03-16 Fernando Perez <fperez@colorado.edu>
887
893
888 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
894 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
889 classic prompts to be '>>> ' (final space was missing, and it
895 classic prompts to be '>>> ' (final space was missing, and it
890 trips the emacs python mode).
896 trips the emacs python mode).
891 (BasePrompt.__str__): Added safe support for dynamic prompt
897 (BasePrompt.__str__): Added safe support for dynamic prompt
892 strings. Now you can set your prompt string to be '$x', and the
898 strings. Now you can set your prompt string to be '$x', and the
893 value of x will be printed from your interactive namespace. The
899 value of x will be printed from your interactive namespace. The
894 interpolation syntax includes the full Itpl support, so
900 interpolation syntax includes the full Itpl support, so
895 ${foo()+x+bar()} is a valid prompt string now, and the function
901 ${foo()+x+bar()} is a valid prompt string now, and the function
896 calls will be made at runtime.
902 calls will be made at runtime.
897
903
898 2005-03-15 Fernando Perez <fperez@colorado.edu>
904 2005-03-15 Fernando Perez <fperez@colorado.edu>
899
905
900 * IPython/Magic.py (magic_history): renamed %hist to %history, to
906 * IPython/Magic.py (magic_history): renamed %hist to %history, to
901 avoid name clashes in pylab. %hist still works, it just forwards
907 avoid name clashes in pylab. %hist still works, it just forwards
902 the call to %history.
908 the call to %history.
903
909
904 2005-03-02 *** Released version 0.6.12
910 2005-03-02 *** Released version 0.6.12
905
911
906 2005-03-02 Fernando Perez <fperez@colorado.edu>
912 2005-03-02 Fernando Perez <fperez@colorado.edu>
907
913
908 * IPython/iplib.py (handle_magic): log magic calls properly as
914 * IPython/iplib.py (handle_magic): log magic calls properly as
909 ipmagic() function calls.
915 ipmagic() function calls.
910
916
911 * IPython/Magic.py (magic_time): Improved %time to support
917 * IPython/Magic.py (magic_time): Improved %time to support
912 statements and provide wall-clock as well as CPU time.
918 statements and provide wall-clock as well as CPU time.
913
919
914 2005-02-27 Fernando Perez <fperez@colorado.edu>
920 2005-02-27 Fernando Perez <fperez@colorado.edu>
915
921
916 * IPython/hooks.py: New hooks module, to expose user-modifiable
922 * IPython/hooks.py: New hooks module, to expose user-modifiable
917 IPython functionality in a clean manner. For now only the editor
923 IPython functionality in a clean manner. For now only the editor
918 hook is actually written, and other thigns which I intend to turn
924 hook is actually written, and other thigns which I intend to turn
919 into proper hooks aren't yet there. The display and prefilter
925 into proper hooks aren't yet there. The display and prefilter
920 stuff, for example, should be hooks. But at least now the
926 stuff, for example, should be hooks. But at least now the
921 framework is in place, and the rest can be moved here with more
927 framework is in place, and the rest can be moved here with more
922 time later. IPython had had a .hooks variable for a long time for
928 time later. IPython had had a .hooks variable for a long time for
923 this purpose, but I'd never actually used it for anything.
929 this purpose, but I'd never actually used it for anything.
924
930
925 2005-02-26 Fernando Perez <fperez@colorado.edu>
931 2005-02-26 Fernando Perez <fperez@colorado.edu>
926
932
927 * IPython/ipmaker.py (make_IPython): make the default ipython
933 * IPython/ipmaker.py (make_IPython): make the default ipython
928 directory be called _ipython under win32, to follow more the
934 directory be called _ipython under win32, to follow more the
929 naming peculiarities of that platform (where buggy software like
935 naming peculiarities of that platform (where buggy software like
930 Visual Sourcesafe breaks with .named directories). Reported by
936 Visual Sourcesafe breaks with .named directories). Reported by
931 Ville Vainio.
937 Ville Vainio.
932
938
933 2005-02-23 Fernando Perez <fperez@colorado.edu>
939 2005-02-23 Fernando Perez <fperez@colorado.edu>
934
940
935 * IPython/iplib.py (InteractiveShell.__init__): removed a few
941 * IPython/iplib.py (InteractiveShell.__init__): removed a few
936 auto_aliases for win32 which were causing problems. Users can
942 auto_aliases for win32 which were causing problems. Users can
937 define the ones they personally like.
943 define the ones they personally like.
938
944
939 2005-02-21 Fernando Perez <fperez@colorado.edu>
945 2005-02-21 Fernando Perez <fperez@colorado.edu>
940
946
941 * IPython/Magic.py (magic_time): new magic to time execution of
947 * IPython/Magic.py (magic_time): new magic to time execution of
942 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
948 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
943
949
944 2005-02-19 Fernando Perez <fperez@colorado.edu>
950 2005-02-19 Fernando Perez <fperez@colorado.edu>
945
951
946 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
952 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
947 into keys (for prompts, for example).
953 into keys (for prompts, for example).
948
954
949 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
955 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
950 prompts in case users want them. This introduces a small behavior
956 prompts in case users want them. This introduces a small behavior
951 change: ipython does not automatically add a space to all prompts
957 change: ipython does not automatically add a space to all prompts
952 anymore. To get the old prompts with a space, users should add it
958 anymore. To get the old prompts with a space, users should add it
953 manually to their ipythonrc file, so for example prompt_in1 should
959 manually to their ipythonrc file, so for example prompt_in1 should
954 now read 'In [\#]: ' instead of 'In [\#]:'.
960 now read 'In [\#]: ' instead of 'In [\#]:'.
955 (BasePrompt.__init__): New option prompts_pad_left (only in rc
961 (BasePrompt.__init__): New option prompts_pad_left (only in rc
956 file) to control left-padding of secondary prompts.
962 file) to control left-padding of secondary prompts.
957
963
958 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
964 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
959 the profiler can't be imported. Fix for Debian, which removed
965 the profiler can't be imported. Fix for Debian, which removed
960 profile.py because of License issues. I applied a slightly
966 profile.py because of License issues. I applied a slightly
961 modified version of the original Debian patch at
967 modified version of the original Debian patch at
962 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
968 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
963
969
964 2005-02-17 Fernando Perez <fperez@colorado.edu>
970 2005-02-17 Fernando Perez <fperez@colorado.edu>
965
971
966 * IPython/genutils.py (native_line_ends): Fix bug which would
972 * IPython/genutils.py (native_line_ends): Fix bug which would
967 cause improper line-ends under win32 b/c I was not opening files
973 cause improper line-ends under win32 b/c I was not opening files
968 in binary mode. Bug report and fix thanks to Ville.
974 in binary mode. Bug report and fix thanks to Ville.
969
975
970 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
976 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
971 trying to catch spurious foo[1] autocalls. My fix actually broke
977 trying to catch spurious foo[1] autocalls. My fix actually broke
972 ',/' autoquote/call with explicit escape (bad regexp).
978 ',/' autoquote/call with explicit escape (bad regexp).
973
979
974 2005-02-15 *** Released version 0.6.11
980 2005-02-15 *** Released version 0.6.11
975
981
976 2005-02-14 Fernando Perez <fperez@colorado.edu>
982 2005-02-14 Fernando Perez <fperez@colorado.edu>
977
983
978 * IPython/background_jobs.py: New background job management
984 * IPython/background_jobs.py: New background job management
979 subsystem. This is implemented via a new set of classes, and
985 subsystem. This is implemented via a new set of classes, and
980 IPython now provides a builtin 'jobs' object for background job
986 IPython now provides a builtin 'jobs' object for background job
981 execution. A convenience %bg magic serves as a lightweight
987 execution. A convenience %bg magic serves as a lightweight
982 frontend for starting the more common type of calls. This was
988 frontend for starting the more common type of calls. This was
983 inspired by discussions with B. Granger and the BackgroundCommand
989 inspired by discussions with B. Granger and the BackgroundCommand
984 class described in the book Python Scripting for Computational
990 class described in the book Python Scripting for Computational
985 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
991 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
986 (although ultimately no code from this text was used, as IPython's
992 (although ultimately no code from this text was used, as IPython's
987 system is a separate implementation).
993 system is a separate implementation).
988
994
989 * IPython/iplib.py (MagicCompleter.python_matches): add new option
995 * IPython/iplib.py (MagicCompleter.python_matches): add new option
990 to control the completion of single/double underscore names
996 to control the completion of single/double underscore names
991 separately. As documented in the example ipytonrc file, the
997 separately. As documented in the example ipytonrc file, the
992 readline_omit__names variable can now be set to 2, to omit even
998 readline_omit__names variable can now be set to 2, to omit even
993 single underscore names. Thanks to a patch by Brian Wong
999 single underscore names. Thanks to a patch by Brian Wong
994 <BrianWong-AT-AirgoNetworks.Com>.
1000 <BrianWong-AT-AirgoNetworks.Com>.
995 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1001 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
996 be autocalled as foo([1]) if foo were callable. A problem for
1002 be autocalled as foo([1]) if foo were callable. A problem for
997 things which are both callable and implement __getitem__.
1003 things which are both callable and implement __getitem__.
998 (init_readline): Fix autoindentation for win32. Thanks to a patch
1004 (init_readline): Fix autoindentation for win32. Thanks to a patch
999 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1005 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1000
1006
1001 2005-02-12 Fernando Perez <fperez@colorado.edu>
1007 2005-02-12 Fernando Perez <fperez@colorado.edu>
1002
1008
1003 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1009 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1004 which I had written long ago to sort out user error messages which
1010 which I had written long ago to sort out user error messages which
1005 may occur during startup. This seemed like a good idea initially,
1011 may occur during startup. This seemed like a good idea initially,
1006 but it has proven a disaster in retrospect. I don't want to
1012 but it has proven a disaster in retrospect. I don't want to
1007 change much code for now, so my fix is to set the internal 'debug'
1013 change much code for now, so my fix is to set the internal 'debug'
1008 flag to true everywhere, whose only job was precisely to control
1014 flag to true everywhere, whose only job was precisely to control
1009 this subsystem. This closes issue 28 (as well as avoiding all
1015 this subsystem. This closes issue 28 (as well as avoiding all
1010 sorts of strange hangups which occur from time to time).
1016 sorts of strange hangups which occur from time to time).
1011
1017
1012 2005-02-07 Fernando Perez <fperez@colorado.edu>
1018 2005-02-07 Fernando Perez <fperez@colorado.edu>
1013
1019
1014 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1020 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1015 previous call produced a syntax error.
1021 previous call produced a syntax error.
1016
1022
1017 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1023 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1018 classes without constructor.
1024 classes without constructor.
1019
1025
1020 2005-02-06 Fernando Perez <fperez@colorado.edu>
1026 2005-02-06 Fernando Perez <fperez@colorado.edu>
1021
1027
1022 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1028 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1023 completions with the results of each matcher, so we return results
1029 completions with the results of each matcher, so we return results
1024 to the user from all namespaces. This breaks with ipython
1030 to the user from all namespaces. This breaks with ipython
1025 tradition, but I think it's a nicer behavior. Now you get all
1031 tradition, but I think it's a nicer behavior. Now you get all
1026 possible completions listed, from all possible namespaces (python,
1032 possible completions listed, from all possible namespaces (python,
1027 filesystem, magics...) After a request by John Hunter
1033 filesystem, magics...) After a request by John Hunter
1028 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1034 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1029
1035
1030 2005-02-05 Fernando Perez <fperez@colorado.edu>
1036 2005-02-05 Fernando Perez <fperez@colorado.edu>
1031
1037
1032 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1038 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1033 the call had quote characters in it (the quotes were stripped).
1039 the call had quote characters in it (the quotes were stripped).
1034
1040
1035 2005-01-31 Fernando Perez <fperez@colorado.edu>
1041 2005-01-31 Fernando Perez <fperez@colorado.edu>
1036
1042
1037 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1043 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1038 Itpl.itpl() to make the code more robust against psyco
1044 Itpl.itpl() to make the code more robust against psyco
1039 optimizations.
1045 optimizations.
1040
1046
1041 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1047 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1042 of causing an exception. Quicker, cleaner.
1048 of causing an exception. Quicker, cleaner.
1043
1049
1044 2005-01-28 Fernando Perez <fperez@colorado.edu>
1050 2005-01-28 Fernando Perez <fperez@colorado.edu>
1045
1051
1046 * scripts/ipython_win_post_install.py (install): hardcode
1052 * scripts/ipython_win_post_install.py (install): hardcode
1047 sys.prefix+'python.exe' as the executable path. It turns out that
1053 sys.prefix+'python.exe' as the executable path. It turns out that
1048 during the post-installation run, sys.executable resolves to the
1054 during the post-installation run, sys.executable resolves to the
1049 name of the binary installer! I should report this as a distutils
1055 name of the binary installer! I should report this as a distutils
1050 bug, I think. I updated the .10 release with this tiny fix, to
1056 bug, I think. I updated the .10 release with this tiny fix, to
1051 avoid annoying the lists further.
1057 avoid annoying the lists further.
1052
1058
1053 2005-01-27 *** Released version 0.6.10
1059 2005-01-27 *** Released version 0.6.10
1054
1060
1055 2005-01-27 Fernando Perez <fperez@colorado.edu>
1061 2005-01-27 Fernando Perez <fperez@colorado.edu>
1056
1062
1057 * IPython/numutils.py (norm): Added 'inf' as optional name for
1063 * IPython/numutils.py (norm): Added 'inf' as optional name for
1058 L-infinity norm, included references to mathworld.com for vector
1064 L-infinity norm, included references to mathworld.com for vector
1059 norm definitions.
1065 norm definitions.
1060 (amin/amax): added amin/amax for array min/max. Similar to what
1066 (amin/amax): added amin/amax for array min/max. Similar to what
1061 pylab ships with after the recent reorganization of names.
1067 pylab ships with after the recent reorganization of names.
1062 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1068 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1063
1069
1064 * ipython.el: committed Alex's recent fixes and improvements.
1070 * ipython.el: committed Alex's recent fixes and improvements.
1065 Tested with python-mode from CVS, and it looks excellent. Since
1071 Tested with python-mode from CVS, and it looks excellent. Since
1066 python-mode hasn't released anything in a while, I'm temporarily
1072 python-mode hasn't released anything in a while, I'm temporarily
1067 putting a copy of today's CVS (v 4.70) of python-mode in:
1073 putting a copy of today's CVS (v 4.70) of python-mode in:
1068 http://ipython.scipy.org/tmp/python-mode.el
1074 http://ipython.scipy.org/tmp/python-mode.el
1069
1075
1070 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1076 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1071 sys.executable for the executable name, instead of assuming it's
1077 sys.executable for the executable name, instead of assuming it's
1072 called 'python.exe' (the post-installer would have produced broken
1078 called 'python.exe' (the post-installer would have produced broken
1073 setups on systems with a differently named python binary).
1079 setups on systems with a differently named python binary).
1074
1080
1075 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1081 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1076 references to os.linesep, to make the code more
1082 references to os.linesep, to make the code more
1077 platform-independent. This is also part of the win32 coloring
1083 platform-independent. This is also part of the win32 coloring
1078 fixes.
1084 fixes.
1079
1085
1080 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1086 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1081 lines, which actually cause coloring bugs because the length of
1087 lines, which actually cause coloring bugs because the length of
1082 the line is very difficult to correctly compute with embedded
1088 the line is very difficult to correctly compute with embedded
1083 escapes. This was the source of all the coloring problems under
1089 escapes. This was the source of all the coloring problems under
1084 Win32. I think that _finally_, Win32 users have a properly
1090 Win32. I think that _finally_, Win32 users have a properly
1085 working ipython in all respects. This would never have happened
1091 working ipython in all respects. This would never have happened
1086 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1092 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1087
1093
1088 2005-01-26 *** Released version 0.6.9
1094 2005-01-26 *** Released version 0.6.9
1089
1095
1090 2005-01-25 Fernando Perez <fperez@colorado.edu>
1096 2005-01-25 Fernando Perez <fperez@colorado.edu>
1091
1097
1092 * setup.py: finally, we have a true Windows installer, thanks to
1098 * setup.py: finally, we have a true Windows installer, thanks to
1093 the excellent work of Viktor Ransmayr
1099 the excellent work of Viktor Ransmayr
1094 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1100 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1095 Windows users. The setup routine is quite a bit cleaner thanks to
1101 Windows users. The setup routine is quite a bit cleaner thanks to
1096 this, and the post-install script uses the proper functions to
1102 this, and the post-install script uses the proper functions to
1097 allow a clean de-installation using the standard Windows Control
1103 allow a clean de-installation using the standard Windows Control
1098 Panel.
1104 Panel.
1099
1105
1100 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1106 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1101 environment variable under all OSes (including win32) if
1107 environment variable under all OSes (including win32) if
1102 available. This will give consistency to win32 users who have set
1108 available. This will give consistency to win32 users who have set
1103 this variable for any reason. If os.environ['HOME'] fails, the
1109 this variable for any reason. If os.environ['HOME'] fails, the
1104 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1110 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1105
1111
1106 2005-01-24 Fernando Perez <fperez@colorado.edu>
1112 2005-01-24 Fernando Perez <fperez@colorado.edu>
1107
1113
1108 * IPython/numutils.py (empty_like): add empty_like(), similar to
1114 * IPython/numutils.py (empty_like): add empty_like(), similar to
1109 zeros_like() but taking advantage of the new empty() Numeric routine.
1115 zeros_like() but taking advantage of the new empty() Numeric routine.
1110
1116
1111 2005-01-23 *** Released version 0.6.8
1117 2005-01-23 *** Released version 0.6.8
1112
1118
1113 2005-01-22 Fernando Perez <fperez@colorado.edu>
1119 2005-01-22 Fernando Perez <fperez@colorado.edu>
1114
1120
1115 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1121 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1116 automatic show() calls. After discussing things with JDH, it
1122 automatic show() calls. After discussing things with JDH, it
1117 turns out there are too many corner cases where this can go wrong.
1123 turns out there are too many corner cases where this can go wrong.
1118 It's best not to try to be 'too smart', and simply have ipython
1124 It's best not to try to be 'too smart', and simply have ipython
1119 reproduce as much as possible the default behavior of a normal
1125 reproduce as much as possible the default behavior of a normal
1120 python shell.
1126 python shell.
1121
1127
1122 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1128 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1123 line-splitting regexp and _prefilter() to avoid calling getattr()
1129 line-splitting regexp and _prefilter() to avoid calling getattr()
1124 on assignments. This closes
1130 on assignments. This closes
1125 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1131 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1126 readline uses getattr(), so a simple <TAB> keypress is still
1132 readline uses getattr(), so a simple <TAB> keypress is still
1127 enough to trigger getattr() calls on an object.
1133 enough to trigger getattr() calls on an object.
1128
1134
1129 2005-01-21 Fernando Perez <fperez@colorado.edu>
1135 2005-01-21 Fernando Perez <fperez@colorado.edu>
1130
1136
1131 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1137 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1132 docstring under pylab so it doesn't mask the original.
1138 docstring under pylab so it doesn't mask the original.
1133
1139
1134 2005-01-21 *** Released version 0.6.7
1140 2005-01-21 *** Released version 0.6.7
1135
1141
1136 2005-01-21 Fernando Perez <fperez@colorado.edu>
1142 2005-01-21 Fernando Perez <fperez@colorado.edu>
1137
1143
1138 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1144 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1139 signal handling for win32 users in multithreaded mode.
1145 signal handling for win32 users in multithreaded mode.
1140
1146
1141 2005-01-17 Fernando Perez <fperez@colorado.edu>
1147 2005-01-17 Fernando Perez <fperez@colorado.edu>
1142
1148
1143 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1149 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1144 instances with no __init__. After a crash report by Norbert Nemec
1150 instances with no __init__. After a crash report by Norbert Nemec
1145 <Norbert-AT-nemec-online.de>.
1151 <Norbert-AT-nemec-online.de>.
1146
1152
1147 2005-01-14 Fernando Perez <fperez@colorado.edu>
1153 2005-01-14 Fernando Perez <fperez@colorado.edu>
1148
1154
1149 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1155 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1150 names for verbose exceptions, when multiple dotted names and the
1156 names for verbose exceptions, when multiple dotted names and the
1151 'parent' object were present on the same line.
1157 'parent' object were present on the same line.
1152
1158
1153 2005-01-11 Fernando Perez <fperez@colorado.edu>
1159 2005-01-11 Fernando Perez <fperez@colorado.edu>
1154
1160
1155 * IPython/genutils.py (flag_calls): new utility to trap and flag
1161 * IPython/genutils.py (flag_calls): new utility to trap and flag
1156 calls in functions. I need it to clean up matplotlib support.
1162 calls in functions. I need it to clean up matplotlib support.
1157 Also removed some deprecated code in genutils.
1163 Also removed some deprecated code in genutils.
1158
1164
1159 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1165 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1160 that matplotlib scripts called with %run, which don't call show()
1166 that matplotlib scripts called with %run, which don't call show()
1161 themselves, still have their plotting windows open.
1167 themselves, still have their plotting windows open.
1162
1168
1163 2005-01-05 Fernando Perez <fperez@colorado.edu>
1169 2005-01-05 Fernando Perez <fperez@colorado.edu>
1164
1170
1165 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1171 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1166 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1172 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1167
1173
1168 2004-12-19 Fernando Perez <fperez@colorado.edu>
1174 2004-12-19 Fernando Perez <fperez@colorado.edu>
1169
1175
1170 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1176 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1171 parent_runcode, which was an eyesore. The same result can be
1177 parent_runcode, which was an eyesore. The same result can be
1172 obtained with Python's regular superclass mechanisms.
1178 obtained with Python's regular superclass mechanisms.
1173
1179
1174 2004-12-17 Fernando Perez <fperez@colorado.edu>
1180 2004-12-17 Fernando Perez <fperez@colorado.edu>
1175
1181
1176 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1182 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1177 reported by Prabhu.
1183 reported by Prabhu.
1178 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1184 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1179 sys.stderr) instead of explicitly calling sys.stderr. This helps
1185 sys.stderr) instead of explicitly calling sys.stderr. This helps
1180 maintain our I/O abstractions clean, for future GUI embeddings.
1186 maintain our I/O abstractions clean, for future GUI embeddings.
1181
1187
1182 * IPython/genutils.py (info): added new utility for sys.stderr
1188 * IPython/genutils.py (info): added new utility for sys.stderr
1183 unified info message handling (thin wrapper around warn()).
1189 unified info message handling (thin wrapper around warn()).
1184
1190
1185 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1191 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1186 composite (dotted) names on verbose exceptions.
1192 composite (dotted) names on verbose exceptions.
1187 (VerboseTB.nullrepr): harden against another kind of errors which
1193 (VerboseTB.nullrepr): harden against another kind of errors which
1188 Python's inspect module can trigger, and which were crashing
1194 Python's inspect module can trigger, and which were crashing
1189 IPython. Thanks to a report by Marco Lombardi
1195 IPython. Thanks to a report by Marco Lombardi
1190 <mlombard-AT-ma010192.hq.eso.org>.
1196 <mlombard-AT-ma010192.hq.eso.org>.
1191
1197
1192 2004-12-13 *** Released version 0.6.6
1198 2004-12-13 *** Released version 0.6.6
1193
1199
1194 2004-12-12 Fernando Perez <fperez@colorado.edu>
1200 2004-12-12 Fernando Perez <fperez@colorado.edu>
1195
1201
1196 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1202 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1197 generated by pygtk upon initialization if it was built without
1203 generated by pygtk upon initialization if it was built without
1198 threads (for matplotlib users). After a crash reported by
1204 threads (for matplotlib users). After a crash reported by
1199 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1205 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1200
1206
1201 * IPython/ipmaker.py (make_IPython): fix small bug in the
1207 * IPython/ipmaker.py (make_IPython): fix small bug in the
1202 import_some parameter for multiple imports.
1208 import_some parameter for multiple imports.
1203
1209
1204 * IPython/iplib.py (ipmagic): simplified the interface of
1210 * IPython/iplib.py (ipmagic): simplified the interface of
1205 ipmagic() to take a single string argument, just as it would be
1211 ipmagic() to take a single string argument, just as it would be
1206 typed at the IPython cmd line.
1212 typed at the IPython cmd line.
1207 (ipalias): Added new ipalias() with an interface identical to
1213 (ipalias): Added new ipalias() with an interface identical to
1208 ipmagic(). This completes exposing a pure python interface to the
1214 ipmagic(). This completes exposing a pure python interface to the
1209 alias and magic system, which can be used in loops or more complex
1215 alias and magic system, which can be used in loops or more complex
1210 code where IPython's automatic line mangling is not active.
1216 code where IPython's automatic line mangling is not active.
1211
1217
1212 * IPython/genutils.py (timing): changed interface of timing to
1218 * IPython/genutils.py (timing): changed interface of timing to
1213 simply run code once, which is the most common case. timings()
1219 simply run code once, which is the most common case. timings()
1214 remains unchanged, for the cases where you want multiple runs.
1220 remains unchanged, for the cases where you want multiple runs.
1215
1221
1216 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1222 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1217 bug where Python2.2 crashes with exec'ing code which does not end
1223 bug where Python2.2 crashes with exec'ing code which does not end
1218 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1224 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1219 before.
1225 before.
1220
1226
1221 2004-12-10 Fernando Perez <fperez@colorado.edu>
1227 2004-12-10 Fernando Perez <fperez@colorado.edu>
1222
1228
1223 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1229 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1224 -t to -T, to accomodate the new -t flag in %run (the %run and
1230 -t to -T, to accomodate the new -t flag in %run (the %run and
1225 %prun options are kind of intermixed, and it's not easy to change
1231 %prun options are kind of intermixed, and it's not easy to change
1226 this with the limitations of python's getopt).
1232 this with the limitations of python's getopt).
1227
1233
1228 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1234 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1229 the execution of scripts. It's not as fine-tuned as timeit.py,
1235 the execution of scripts. It's not as fine-tuned as timeit.py,
1230 but it works from inside ipython (and under 2.2, which lacks
1236 but it works from inside ipython (and under 2.2, which lacks
1231 timeit.py). Optionally a number of runs > 1 can be given for
1237 timeit.py). Optionally a number of runs > 1 can be given for
1232 timing very short-running code.
1238 timing very short-running code.
1233
1239
1234 * IPython/genutils.py (uniq_stable): new routine which returns a
1240 * IPython/genutils.py (uniq_stable): new routine which returns a
1235 list of unique elements in any iterable, but in stable order of
1241 list of unique elements in any iterable, but in stable order of
1236 appearance. I needed this for the ultraTB fixes, and it's a handy
1242 appearance. I needed this for the ultraTB fixes, and it's a handy
1237 utility.
1243 utility.
1238
1244
1239 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1245 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1240 dotted names in Verbose exceptions. This had been broken since
1246 dotted names in Verbose exceptions. This had been broken since
1241 the very start, now x.y will properly be printed in a Verbose
1247 the very start, now x.y will properly be printed in a Verbose
1242 traceback, instead of x being shown and y appearing always as an
1248 traceback, instead of x being shown and y appearing always as an
1243 'undefined global'. Getting this to work was a bit tricky,
1249 'undefined global'. Getting this to work was a bit tricky,
1244 because by default python tokenizers are stateless. Saved by
1250 because by default python tokenizers are stateless. Saved by
1245 python's ability to easily add a bit of state to an arbitrary
1251 python's ability to easily add a bit of state to an arbitrary
1246 function (without needing to build a full-blown callable object).
1252 function (without needing to build a full-blown callable object).
1247
1253
1248 Also big cleanup of this code, which had horrendous runtime
1254 Also big cleanup of this code, which had horrendous runtime
1249 lookups of zillions of attributes for colorization. Moved all
1255 lookups of zillions of attributes for colorization. Moved all
1250 this code into a few templates, which make it cleaner and quicker.
1256 this code into a few templates, which make it cleaner and quicker.
1251
1257
1252 Printout quality was also improved for Verbose exceptions: one
1258 Printout quality was also improved for Verbose exceptions: one
1253 variable per line, and memory addresses are printed (this can be
1259 variable per line, and memory addresses are printed (this can be
1254 quite handy in nasty debugging situations, which is what Verbose
1260 quite handy in nasty debugging situations, which is what Verbose
1255 is for).
1261 is for).
1256
1262
1257 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1263 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1258 the command line as scripts to be loaded by embedded instances.
1264 the command line as scripts to be loaded by embedded instances.
1259 Doing so has the potential for an infinite recursion if there are
1265 Doing so has the potential for an infinite recursion if there are
1260 exceptions thrown in the process. This fixes a strange crash
1266 exceptions thrown in the process. This fixes a strange crash
1261 reported by Philippe MULLER <muller-AT-irit.fr>.
1267 reported by Philippe MULLER <muller-AT-irit.fr>.
1262
1268
1263 2004-12-09 Fernando Perez <fperez@colorado.edu>
1269 2004-12-09 Fernando Perez <fperez@colorado.edu>
1264
1270
1265 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1271 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1266 to reflect new names in matplotlib, which now expose the
1272 to reflect new names in matplotlib, which now expose the
1267 matlab-compatible interface via a pylab module instead of the
1273 matlab-compatible interface via a pylab module instead of the
1268 'matlab' name. The new code is backwards compatible, so users of
1274 'matlab' name. The new code is backwards compatible, so users of
1269 all matplotlib versions are OK. Patch by J. Hunter.
1275 all matplotlib versions are OK. Patch by J. Hunter.
1270
1276
1271 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1277 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1272 of __init__ docstrings for instances (class docstrings are already
1278 of __init__ docstrings for instances (class docstrings are already
1273 automatically printed). Instances with customized docstrings
1279 automatically printed). Instances with customized docstrings
1274 (indep. of the class) are also recognized and all 3 separate
1280 (indep. of the class) are also recognized and all 3 separate
1275 docstrings are printed (instance, class, constructor). After some
1281 docstrings are printed (instance, class, constructor). After some
1276 comments/suggestions by J. Hunter.
1282 comments/suggestions by J. Hunter.
1277
1283
1278 2004-12-05 Fernando Perez <fperez@colorado.edu>
1284 2004-12-05 Fernando Perez <fperez@colorado.edu>
1279
1285
1280 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1286 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1281 warnings when tab-completion fails and triggers an exception.
1287 warnings when tab-completion fails and triggers an exception.
1282
1288
1283 2004-12-03 Fernando Perez <fperez@colorado.edu>
1289 2004-12-03 Fernando Perez <fperez@colorado.edu>
1284
1290
1285 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1291 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1286 be triggered when using 'run -p'. An incorrect option flag was
1292 be triggered when using 'run -p'. An incorrect option flag was
1287 being set ('d' instead of 'D').
1293 being set ('d' instead of 'D').
1288 (manpage): fix missing escaped \- sign.
1294 (manpage): fix missing escaped \- sign.
1289
1295
1290 2004-11-30 *** Released version 0.6.5
1296 2004-11-30 *** Released version 0.6.5
1291
1297
1292 2004-11-30 Fernando Perez <fperez@colorado.edu>
1298 2004-11-30 Fernando Perez <fperez@colorado.edu>
1293
1299
1294 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1300 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1295 setting with -d option.
1301 setting with -d option.
1296
1302
1297 * setup.py (docfiles): Fix problem where the doc glob I was using
1303 * setup.py (docfiles): Fix problem where the doc glob I was using
1298 was COMPLETELY BROKEN. It was giving the right files by pure
1304 was COMPLETELY BROKEN. It was giving the right files by pure
1299 accident, but failed once I tried to include ipython.el. Note:
1305 accident, but failed once I tried to include ipython.el. Note:
1300 glob() does NOT allow you to do exclusion on multiple endings!
1306 glob() does NOT allow you to do exclusion on multiple endings!
1301
1307
1302 2004-11-29 Fernando Perez <fperez@colorado.edu>
1308 2004-11-29 Fernando Perez <fperez@colorado.edu>
1303
1309
1304 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1310 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1305 the manpage as the source. Better formatting & consistency.
1311 the manpage as the source. Better formatting & consistency.
1306
1312
1307 * IPython/Magic.py (magic_run): Added new -d option, to run
1313 * IPython/Magic.py (magic_run): Added new -d option, to run
1308 scripts under the control of the python pdb debugger. Note that
1314 scripts under the control of the python pdb debugger. Note that
1309 this required changing the %prun option -d to -D, to avoid a clash
1315 this required changing the %prun option -d to -D, to avoid a clash
1310 (since %run must pass options to %prun, and getopt is too dumb to
1316 (since %run must pass options to %prun, and getopt is too dumb to
1311 handle options with string values with embedded spaces). Thanks
1317 handle options with string values with embedded spaces). Thanks
1312 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1318 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1313 (magic_who_ls): added type matching to %who and %whos, so that one
1319 (magic_who_ls): added type matching to %who and %whos, so that one
1314 can filter their output to only include variables of certain
1320 can filter their output to only include variables of certain
1315 types. Another suggestion by Matthew.
1321 types. Another suggestion by Matthew.
1316 (magic_whos): Added memory summaries in kb and Mb for arrays.
1322 (magic_whos): Added memory summaries in kb and Mb for arrays.
1317 (magic_who): Improve formatting (break lines every 9 vars).
1323 (magic_who): Improve formatting (break lines every 9 vars).
1318
1324
1319 2004-11-28 Fernando Perez <fperez@colorado.edu>
1325 2004-11-28 Fernando Perez <fperez@colorado.edu>
1320
1326
1321 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1327 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1322 cache when empty lines were present.
1328 cache when empty lines were present.
1323
1329
1324 2004-11-24 Fernando Perez <fperez@colorado.edu>
1330 2004-11-24 Fernando Perez <fperez@colorado.edu>
1325
1331
1326 * IPython/usage.py (__doc__): document the re-activated threading
1332 * IPython/usage.py (__doc__): document the re-activated threading
1327 options for WX and GTK.
1333 options for WX and GTK.
1328
1334
1329 2004-11-23 Fernando Perez <fperez@colorado.edu>
1335 2004-11-23 Fernando Perez <fperez@colorado.edu>
1330
1336
1331 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1337 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1332 the -wthread and -gthread options, along with a new -tk one to try
1338 the -wthread and -gthread options, along with a new -tk one to try
1333 and coordinate Tk threading with wx/gtk. The tk support is very
1339 and coordinate Tk threading with wx/gtk. The tk support is very
1334 platform dependent, since it seems to require Tcl and Tk to be
1340 platform dependent, since it seems to require Tcl and Tk to be
1335 built with threads (Fedora1/2 appears NOT to have it, but in
1341 built with threads (Fedora1/2 appears NOT to have it, but in
1336 Prabhu's Debian boxes it works OK). But even with some Tk
1342 Prabhu's Debian boxes it works OK). But even with some Tk
1337 limitations, this is a great improvement.
1343 limitations, this is a great improvement.
1338
1344
1339 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1345 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1340 info in user prompts. Patch by Prabhu.
1346 info in user prompts. Patch by Prabhu.
1341
1347
1342 2004-11-18 Fernando Perez <fperez@colorado.edu>
1348 2004-11-18 Fernando Perez <fperez@colorado.edu>
1343
1349
1344 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1350 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1345 EOFErrors and bail, to avoid infinite loops if a non-terminating
1351 EOFErrors and bail, to avoid infinite loops if a non-terminating
1346 file is fed into ipython. Patch submitted in issue 19 by user,
1352 file is fed into ipython. Patch submitted in issue 19 by user,
1347 many thanks.
1353 many thanks.
1348
1354
1349 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1355 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1350 autoquote/parens in continuation prompts, which can cause lots of
1356 autoquote/parens in continuation prompts, which can cause lots of
1351 problems. Closes roundup issue 20.
1357 problems. Closes roundup issue 20.
1352
1358
1353 2004-11-17 Fernando Perez <fperez@colorado.edu>
1359 2004-11-17 Fernando Perez <fperez@colorado.edu>
1354
1360
1355 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1361 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1356 reported as debian bug #280505. I'm not sure my local changelog
1362 reported as debian bug #280505. I'm not sure my local changelog
1357 entry has the proper debian format (Jack?).
1363 entry has the proper debian format (Jack?).
1358
1364
1359 2004-11-08 *** Released version 0.6.4
1365 2004-11-08 *** Released version 0.6.4
1360
1366
1361 2004-11-08 Fernando Perez <fperez@colorado.edu>
1367 2004-11-08 Fernando Perez <fperez@colorado.edu>
1362
1368
1363 * IPython/iplib.py (init_readline): Fix exit message for Windows
1369 * IPython/iplib.py (init_readline): Fix exit message for Windows
1364 when readline is active. Thanks to a report by Eric Jones
1370 when readline is active. Thanks to a report by Eric Jones
1365 <eric-AT-enthought.com>.
1371 <eric-AT-enthought.com>.
1366
1372
1367 2004-11-07 Fernando Perez <fperez@colorado.edu>
1373 2004-11-07 Fernando Perez <fperez@colorado.edu>
1368
1374
1369 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1375 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1370 sometimes seen by win2k/cygwin users.
1376 sometimes seen by win2k/cygwin users.
1371
1377
1372 2004-11-06 Fernando Perez <fperez@colorado.edu>
1378 2004-11-06 Fernando Perez <fperez@colorado.edu>
1373
1379
1374 * IPython/iplib.py (interact): Change the handling of %Exit from
1380 * IPython/iplib.py (interact): Change the handling of %Exit from
1375 trying to propagate a SystemExit to an internal ipython flag.
1381 trying to propagate a SystemExit to an internal ipython flag.
1376 This is less elegant than using Python's exception mechanism, but
1382 This is less elegant than using Python's exception mechanism, but
1377 I can't get that to work reliably with threads, so under -pylab
1383 I can't get that to work reliably with threads, so under -pylab
1378 %Exit was hanging IPython. Cross-thread exception handling is
1384 %Exit was hanging IPython. Cross-thread exception handling is
1379 really a bitch. Thaks to a bug report by Stephen Walton
1385 really a bitch. Thaks to a bug report by Stephen Walton
1380 <stephen.walton-AT-csun.edu>.
1386 <stephen.walton-AT-csun.edu>.
1381
1387
1382 2004-11-04 Fernando Perez <fperez@colorado.edu>
1388 2004-11-04 Fernando Perez <fperez@colorado.edu>
1383
1389
1384 * IPython/iplib.py (raw_input_original): store a pointer to the
1390 * IPython/iplib.py (raw_input_original): store a pointer to the
1385 true raw_input to harden against code which can modify it
1391 true raw_input to harden against code which can modify it
1386 (wx.py.PyShell does this and would otherwise crash ipython).
1392 (wx.py.PyShell does this and would otherwise crash ipython).
1387 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1393 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1388
1394
1389 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1395 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1390 Ctrl-C problem, which does not mess up the input line.
1396 Ctrl-C problem, which does not mess up the input line.
1391
1397
1392 2004-11-03 Fernando Perez <fperez@colorado.edu>
1398 2004-11-03 Fernando Perez <fperez@colorado.edu>
1393
1399
1394 * IPython/Release.py: Changed licensing to BSD, in all files.
1400 * IPython/Release.py: Changed licensing to BSD, in all files.
1395 (name): lowercase name for tarball/RPM release.
1401 (name): lowercase name for tarball/RPM release.
1396
1402
1397 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1403 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1398 use throughout ipython.
1404 use throughout ipython.
1399
1405
1400 * IPython/Magic.py (Magic._ofind): Switch to using the new
1406 * IPython/Magic.py (Magic._ofind): Switch to using the new
1401 OInspect.getdoc() function.
1407 OInspect.getdoc() function.
1402
1408
1403 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1409 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1404 of the line currently being canceled via Ctrl-C. It's extremely
1410 of the line currently being canceled via Ctrl-C. It's extremely
1405 ugly, but I don't know how to do it better (the problem is one of
1411 ugly, but I don't know how to do it better (the problem is one of
1406 handling cross-thread exceptions).
1412 handling cross-thread exceptions).
1407
1413
1408 2004-10-28 Fernando Perez <fperez@colorado.edu>
1414 2004-10-28 Fernando Perez <fperez@colorado.edu>
1409
1415
1410 * IPython/Shell.py (signal_handler): add signal handlers to trap
1416 * IPython/Shell.py (signal_handler): add signal handlers to trap
1411 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1417 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1412 report by Francesc Alted.
1418 report by Francesc Alted.
1413
1419
1414 2004-10-21 Fernando Perez <fperez@colorado.edu>
1420 2004-10-21 Fernando Perez <fperez@colorado.edu>
1415
1421
1416 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1422 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1417 to % for pysh syntax extensions.
1423 to % for pysh syntax extensions.
1418
1424
1419 2004-10-09 Fernando Perez <fperez@colorado.edu>
1425 2004-10-09 Fernando Perez <fperez@colorado.edu>
1420
1426
1421 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1427 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1422 arrays to print a more useful summary, without calling str(arr).
1428 arrays to print a more useful summary, without calling str(arr).
1423 This avoids the problem of extremely lengthy computations which
1429 This avoids the problem of extremely lengthy computations which
1424 occur if arr is large, and appear to the user as a system lockup
1430 occur if arr is large, and appear to the user as a system lockup
1425 with 100% cpu activity. After a suggestion by Kristian Sandberg
1431 with 100% cpu activity. After a suggestion by Kristian Sandberg
1426 <Kristian.Sandberg@colorado.edu>.
1432 <Kristian.Sandberg@colorado.edu>.
1427 (Magic.__init__): fix bug in global magic escapes not being
1433 (Magic.__init__): fix bug in global magic escapes not being
1428 correctly set.
1434 correctly set.
1429
1435
1430 2004-10-08 Fernando Perez <fperez@colorado.edu>
1436 2004-10-08 Fernando Perez <fperez@colorado.edu>
1431
1437
1432 * IPython/Magic.py (__license__): change to absolute imports of
1438 * IPython/Magic.py (__license__): change to absolute imports of
1433 ipython's own internal packages, to start adapting to the absolute
1439 ipython's own internal packages, to start adapting to the absolute
1434 import requirement of PEP-328.
1440 import requirement of PEP-328.
1435
1441
1436 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1442 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1437 files, and standardize author/license marks through the Release
1443 files, and standardize author/license marks through the Release
1438 module instead of having per/file stuff (except for files with
1444 module instead of having per/file stuff (except for files with
1439 particular licenses, like the MIT/PSF-licensed codes).
1445 particular licenses, like the MIT/PSF-licensed codes).
1440
1446
1441 * IPython/Debugger.py: remove dead code for python 2.1
1447 * IPython/Debugger.py: remove dead code for python 2.1
1442
1448
1443 2004-10-04 Fernando Perez <fperez@colorado.edu>
1449 2004-10-04 Fernando Perez <fperez@colorado.edu>
1444
1450
1445 * IPython/iplib.py (ipmagic): New function for accessing magics
1451 * IPython/iplib.py (ipmagic): New function for accessing magics
1446 via a normal python function call.
1452 via a normal python function call.
1447
1453
1448 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1454 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1449 from '@' to '%', to accomodate the new @decorator syntax of python
1455 from '@' to '%', to accomodate the new @decorator syntax of python
1450 2.4.
1456 2.4.
1451
1457
1452 2004-09-29 Fernando Perez <fperez@colorado.edu>
1458 2004-09-29 Fernando Perez <fperez@colorado.edu>
1453
1459
1454 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1460 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1455 matplotlib.use to prevent running scripts which try to switch
1461 matplotlib.use to prevent running scripts which try to switch
1456 interactive backends from within ipython. This will just crash
1462 interactive backends from within ipython. This will just crash
1457 the python interpreter, so we can't allow it (but a detailed error
1463 the python interpreter, so we can't allow it (but a detailed error
1458 is given to the user).
1464 is given to the user).
1459
1465
1460 2004-09-28 Fernando Perez <fperez@colorado.edu>
1466 2004-09-28 Fernando Perez <fperez@colorado.edu>
1461
1467
1462 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1468 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1463 matplotlib-related fixes so that using @run with non-matplotlib
1469 matplotlib-related fixes so that using @run with non-matplotlib
1464 scripts doesn't pop up spurious plot windows. This requires
1470 scripts doesn't pop up spurious plot windows. This requires
1465 matplotlib >= 0.63, where I had to make some changes as well.
1471 matplotlib >= 0.63, where I had to make some changes as well.
1466
1472
1467 * IPython/ipmaker.py (make_IPython): update version requirement to
1473 * IPython/ipmaker.py (make_IPython): update version requirement to
1468 python 2.2.
1474 python 2.2.
1469
1475
1470 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1476 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1471 banner arg for embedded customization.
1477 banner arg for embedded customization.
1472
1478
1473 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1479 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1474 explicit uses of __IP as the IPython's instance name. Now things
1480 explicit uses of __IP as the IPython's instance name. Now things
1475 are properly handled via the shell.name value. The actual code
1481 are properly handled via the shell.name value. The actual code
1476 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1482 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1477 is much better than before. I'll clean things completely when the
1483 is much better than before. I'll clean things completely when the
1478 magic stuff gets a real overhaul.
1484 magic stuff gets a real overhaul.
1479
1485
1480 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1486 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1481 minor changes to debian dir.
1487 minor changes to debian dir.
1482
1488
1483 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1489 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1484 pointer to the shell itself in the interactive namespace even when
1490 pointer to the shell itself in the interactive namespace even when
1485 a user-supplied dict is provided. This is needed for embedding
1491 a user-supplied dict is provided. This is needed for embedding
1486 purposes (found by tests with Michel Sanner).
1492 purposes (found by tests with Michel Sanner).
1487
1493
1488 2004-09-27 Fernando Perez <fperez@colorado.edu>
1494 2004-09-27 Fernando Perez <fperez@colorado.edu>
1489
1495
1490 * IPython/UserConfig/ipythonrc: remove []{} from
1496 * IPython/UserConfig/ipythonrc: remove []{} from
1491 readline_remove_delims, so that things like [modname.<TAB> do
1497 readline_remove_delims, so that things like [modname.<TAB> do
1492 proper completion. This disables [].TAB, but that's a less common
1498 proper completion. This disables [].TAB, but that's a less common
1493 case than module names in list comprehensions, for example.
1499 case than module names in list comprehensions, for example.
1494 Thanks to a report by Andrea Riciputi.
1500 Thanks to a report by Andrea Riciputi.
1495
1501
1496 2004-09-09 Fernando Perez <fperez@colorado.edu>
1502 2004-09-09 Fernando Perez <fperez@colorado.edu>
1497
1503
1498 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1504 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1499 blocking problems in win32 and osx. Fix by John.
1505 blocking problems in win32 and osx. Fix by John.
1500
1506
1501 2004-09-08 Fernando Perez <fperez@colorado.edu>
1507 2004-09-08 Fernando Perez <fperez@colorado.edu>
1502
1508
1503 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1509 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1504 for Win32 and OSX. Fix by John Hunter.
1510 for Win32 and OSX. Fix by John Hunter.
1505
1511
1506 2004-08-30 *** Released version 0.6.3
1512 2004-08-30 *** Released version 0.6.3
1507
1513
1508 2004-08-30 Fernando Perez <fperez@colorado.edu>
1514 2004-08-30 Fernando Perez <fperez@colorado.edu>
1509
1515
1510 * setup.py (isfile): Add manpages to list of dependent files to be
1516 * setup.py (isfile): Add manpages to list of dependent files to be
1511 updated.
1517 updated.
1512
1518
1513 2004-08-27 Fernando Perez <fperez@colorado.edu>
1519 2004-08-27 Fernando Perez <fperez@colorado.edu>
1514
1520
1515 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1521 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1516 for now. They don't really work with standalone WX/GTK code
1522 for now. They don't really work with standalone WX/GTK code
1517 (though matplotlib IS working fine with both of those backends).
1523 (though matplotlib IS working fine with both of those backends).
1518 This will neeed much more testing. I disabled most things with
1524 This will neeed much more testing. I disabled most things with
1519 comments, so turning it back on later should be pretty easy.
1525 comments, so turning it back on later should be pretty easy.
1520
1526
1521 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1527 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1522 autocalling of expressions like r'foo', by modifying the line
1528 autocalling of expressions like r'foo', by modifying the line
1523 split regexp. Closes
1529 split regexp. Closes
1524 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1530 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1525 Riley <ipythonbugs-AT-sabi.net>.
1531 Riley <ipythonbugs-AT-sabi.net>.
1526 (InteractiveShell.mainloop): honor --nobanner with banner
1532 (InteractiveShell.mainloop): honor --nobanner with banner
1527 extensions.
1533 extensions.
1528
1534
1529 * IPython/Shell.py: Significant refactoring of all classes, so
1535 * IPython/Shell.py: Significant refactoring of all classes, so
1530 that we can really support ALL matplotlib backends and threading
1536 that we can really support ALL matplotlib backends and threading
1531 models (John spotted a bug with Tk which required this). Now we
1537 models (John spotted a bug with Tk which required this). Now we
1532 should support single-threaded, WX-threads and GTK-threads, both
1538 should support single-threaded, WX-threads and GTK-threads, both
1533 for generic code and for matplotlib.
1539 for generic code and for matplotlib.
1534
1540
1535 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1541 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1536 -pylab, to simplify things for users. Will also remove the pylab
1542 -pylab, to simplify things for users. Will also remove the pylab
1537 profile, since now all of matplotlib configuration is directly
1543 profile, since now all of matplotlib configuration is directly
1538 handled here. This also reduces startup time.
1544 handled here. This also reduces startup time.
1539
1545
1540 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1546 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1541 shell wasn't being correctly called. Also in IPShellWX.
1547 shell wasn't being correctly called. Also in IPShellWX.
1542
1548
1543 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1549 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1544 fine-tune banner.
1550 fine-tune banner.
1545
1551
1546 * IPython/numutils.py (spike): Deprecate these spike functions,
1552 * IPython/numutils.py (spike): Deprecate these spike functions,
1547 delete (long deprecated) gnuplot_exec handler.
1553 delete (long deprecated) gnuplot_exec handler.
1548
1554
1549 2004-08-26 Fernando Perez <fperez@colorado.edu>
1555 2004-08-26 Fernando Perez <fperez@colorado.edu>
1550
1556
1551 * ipython.1: Update for threading options, plus some others which
1557 * ipython.1: Update for threading options, plus some others which
1552 were missing.
1558 were missing.
1553
1559
1554 * IPython/ipmaker.py (__call__): Added -wthread option for
1560 * IPython/ipmaker.py (__call__): Added -wthread option for
1555 wxpython thread handling. Make sure threading options are only
1561 wxpython thread handling. Make sure threading options are only
1556 valid at the command line.
1562 valid at the command line.
1557
1563
1558 * scripts/ipython: moved shell selection into a factory function
1564 * scripts/ipython: moved shell selection into a factory function
1559 in Shell.py, to keep the starter script to a minimum.
1565 in Shell.py, to keep the starter script to a minimum.
1560
1566
1561 2004-08-25 Fernando Perez <fperez@colorado.edu>
1567 2004-08-25 Fernando Perez <fperez@colorado.edu>
1562
1568
1563 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1569 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1564 John. Along with some recent changes he made to matplotlib, the
1570 John. Along with some recent changes he made to matplotlib, the
1565 next versions of both systems should work very well together.
1571 next versions of both systems should work very well together.
1566
1572
1567 2004-08-24 Fernando Perez <fperez@colorado.edu>
1573 2004-08-24 Fernando Perez <fperez@colorado.edu>
1568
1574
1569 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1575 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1570 tried to switch the profiling to using hotshot, but I'm getting
1576 tried to switch the profiling to using hotshot, but I'm getting
1571 strange errors from prof.runctx() there. I may be misreading the
1577 strange errors from prof.runctx() there. I may be misreading the
1572 docs, but it looks weird. For now the profiling code will
1578 docs, but it looks weird. For now the profiling code will
1573 continue to use the standard profiler.
1579 continue to use the standard profiler.
1574
1580
1575 2004-08-23 Fernando Perez <fperez@colorado.edu>
1581 2004-08-23 Fernando Perez <fperez@colorado.edu>
1576
1582
1577 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1583 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1578 threaded shell, by John Hunter. It's not quite ready yet, but
1584 threaded shell, by John Hunter. It's not quite ready yet, but
1579 close.
1585 close.
1580
1586
1581 2004-08-22 Fernando Perez <fperez@colorado.edu>
1587 2004-08-22 Fernando Perez <fperez@colorado.edu>
1582
1588
1583 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1589 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1584 in Magic and ultraTB.
1590 in Magic and ultraTB.
1585
1591
1586 * ipython.1: document threading options in manpage.
1592 * ipython.1: document threading options in manpage.
1587
1593
1588 * scripts/ipython: Changed name of -thread option to -gthread,
1594 * scripts/ipython: Changed name of -thread option to -gthread,
1589 since this is GTK specific. I want to leave the door open for a
1595 since this is GTK specific. I want to leave the door open for a
1590 -wthread option for WX, which will most likely be necessary. This
1596 -wthread option for WX, which will most likely be necessary. This
1591 change affects usage and ipmaker as well.
1597 change affects usage and ipmaker as well.
1592
1598
1593 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1599 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1594 handle the matplotlib shell issues. Code by John Hunter
1600 handle the matplotlib shell issues. Code by John Hunter
1595 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1601 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1596 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1602 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1597 broken (and disabled for end users) for now, but it puts the
1603 broken (and disabled for end users) for now, but it puts the
1598 infrastructure in place.
1604 infrastructure in place.
1599
1605
1600 2004-08-21 Fernando Perez <fperez@colorado.edu>
1606 2004-08-21 Fernando Perez <fperez@colorado.edu>
1601
1607
1602 * ipythonrc-pylab: Add matplotlib support.
1608 * ipythonrc-pylab: Add matplotlib support.
1603
1609
1604 * matplotlib_config.py: new files for matplotlib support, part of
1610 * matplotlib_config.py: new files for matplotlib support, part of
1605 the pylab profile.
1611 the pylab profile.
1606
1612
1607 * IPython/usage.py (__doc__): documented the threading options.
1613 * IPython/usage.py (__doc__): documented the threading options.
1608
1614
1609 2004-08-20 Fernando Perez <fperez@colorado.edu>
1615 2004-08-20 Fernando Perez <fperez@colorado.edu>
1610
1616
1611 * ipython: Modified the main calling routine to handle the -thread
1617 * ipython: Modified the main calling routine to handle the -thread
1612 and -mpthread options. This needs to be done as a top-level hack,
1618 and -mpthread options. This needs to be done as a top-level hack,
1613 because it determines which class to instantiate for IPython
1619 because it determines which class to instantiate for IPython
1614 itself.
1620 itself.
1615
1621
1616 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1622 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1617 classes to support multithreaded GTK operation without blocking,
1623 classes to support multithreaded GTK operation without blocking,
1618 and matplotlib with all backends. This is a lot of still very
1624 and matplotlib with all backends. This is a lot of still very
1619 experimental code, and threads are tricky. So it may still have a
1625 experimental code, and threads are tricky. So it may still have a
1620 few rough edges... This code owes a lot to
1626 few rough edges... This code owes a lot to
1621 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1627 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1622 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1628 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1623 to John Hunter for all the matplotlib work.
1629 to John Hunter for all the matplotlib work.
1624
1630
1625 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1631 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1626 options for gtk thread and matplotlib support.
1632 options for gtk thread and matplotlib support.
1627
1633
1628 2004-08-16 Fernando Perez <fperez@colorado.edu>
1634 2004-08-16 Fernando Perez <fperez@colorado.edu>
1629
1635
1630 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1636 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1631 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1637 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1632 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1638 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1633
1639
1634 2004-08-11 Fernando Perez <fperez@colorado.edu>
1640 2004-08-11 Fernando Perez <fperez@colorado.edu>
1635
1641
1636 * setup.py (isfile): Fix build so documentation gets updated for
1642 * setup.py (isfile): Fix build so documentation gets updated for
1637 rpms (it was only done for .tgz builds).
1643 rpms (it was only done for .tgz builds).
1638
1644
1639 2004-08-10 Fernando Perez <fperez@colorado.edu>
1645 2004-08-10 Fernando Perez <fperez@colorado.edu>
1640
1646
1641 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1647 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1642
1648
1643 * iplib.py : Silence syntax error exceptions in tab-completion.
1649 * iplib.py : Silence syntax error exceptions in tab-completion.
1644
1650
1645 2004-08-05 Fernando Perez <fperez@colorado.edu>
1651 2004-08-05 Fernando Perez <fperez@colorado.edu>
1646
1652
1647 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1653 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1648 'color off' mark for continuation prompts. This was causing long
1654 'color off' mark for continuation prompts. This was causing long
1649 continuation lines to mis-wrap.
1655 continuation lines to mis-wrap.
1650
1656
1651 2004-08-01 Fernando Perez <fperez@colorado.edu>
1657 2004-08-01 Fernando Perez <fperez@colorado.edu>
1652
1658
1653 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1659 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1654 for building ipython to be a parameter. All this is necessary
1660 for building ipython to be a parameter. All this is necessary
1655 right now to have a multithreaded version, but this insane
1661 right now to have a multithreaded version, but this insane
1656 non-design will be cleaned up soon. For now, it's a hack that
1662 non-design will be cleaned up soon. For now, it's a hack that
1657 works.
1663 works.
1658
1664
1659 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1665 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1660 args in various places. No bugs so far, but it's a dangerous
1666 args in various places. No bugs so far, but it's a dangerous
1661 practice.
1667 practice.
1662
1668
1663 2004-07-31 Fernando Perez <fperez@colorado.edu>
1669 2004-07-31 Fernando Perez <fperez@colorado.edu>
1664
1670
1665 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1671 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1666 fix completion of files with dots in their names under most
1672 fix completion of files with dots in their names under most
1667 profiles (pysh was OK because the completion order is different).
1673 profiles (pysh was OK because the completion order is different).
1668
1674
1669 2004-07-27 Fernando Perez <fperez@colorado.edu>
1675 2004-07-27 Fernando Perez <fperez@colorado.edu>
1670
1676
1671 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1677 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1672 keywords manually, b/c the one in keyword.py was removed in python
1678 keywords manually, b/c the one in keyword.py was removed in python
1673 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1679 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1674 This is NOT a bug under python 2.3 and earlier.
1680 This is NOT a bug under python 2.3 and earlier.
1675
1681
1676 2004-07-26 Fernando Perez <fperez@colorado.edu>
1682 2004-07-26 Fernando Perez <fperez@colorado.edu>
1677
1683
1678 * IPython/ultraTB.py (VerboseTB.text): Add another
1684 * IPython/ultraTB.py (VerboseTB.text): Add another
1679 linecache.checkcache() call to try to prevent inspect.py from
1685 linecache.checkcache() call to try to prevent inspect.py from
1680 crashing under python 2.3. I think this fixes
1686 crashing under python 2.3. I think this fixes
1681 http://www.scipy.net/roundup/ipython/issue17.
1687 http://www.scipy.net/roundup/ipython/issue17.
1682
1688
1683 2004-07-26 *** Released version 0.6.2
1689 2004-07-26 *** Released version 0.6.2
1684
1690
1685 2004-07-26 Fernando Perez <fperez@colorado.edu>
1691 2004-07-26 Fernando Perez <fperez@colorado.edu>
1686
1692
1687 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1693 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1688 fail for any number.
1694 fail for any number.
1689 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1695 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1690 empty bookmarks.
1696 empty bookmarks.
1691
1697
1692 2004-07-26 *** Released version 0.6.1
1698 2004-07-26 *** Released version 0.6.1
1693
1699
1694 2004-07-26 Fernando Perez <fperez@colorado.edu>
1700 2004-07-26 Fernando Perez <fperez@colorado.edu>
1695
1701
1696 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1702 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1697
1703
1698 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1704 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1699 escaping '()[]{}' in filenames.
1705 escaping '()[]{}' in filenames.
1700
1706
1701 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1707 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1702 Python 2.2 users who lack a proper shlex.split.
1708 Python 2.2 users who lack a proper shlex.split.
1703
1709
1704 2004-07-19 Fernando Perez <fperez@colorado.edu>
1710 2004-07-19 Fernando Perez <fperez@colorado.edu>
1705
1711
1706 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1712 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1707 for reading readline's init file. I follow the normal chain:
1713 for reading readline's init file. I follow the normal chain:
1708 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1714 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1709 report by Mike Heeter. This closes
1715 report by Mike Heeter. This closes
1710 http://www.scipy.net/roundup/ipython/issue16.
1716 http://www.scipy.net/roundup/ipython/issue16.
1711
1717
1712 2004-07-18 Fernando Perez <fperez@colorado.edu>
1718 2004-07-18 Fernando Perez <fperez@colorado.edu>
1713
1719
1714 * IPython/iplib.py (__init__): Add better handling of '\' under
1720 * IPython/iplib.py (__init__): Add better handling of '\' under
1715 Win32 for filenames. After a patch by Ville.
1721 Win32 for filenames. After a patch by Ville.
1716
1722
1717 2004-07-17 Fernando Perez <fperez@colorado.edu>
1723 2004-07-17 Fernando Perez <fperez@colorado.edu>
1718
1724
1719 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1725 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1720 autocalling would be triggered for 'foo is bar' if foo is
1726 autocalling would be triggered for 'foo is bar' if foo is
1721 callable. I also cleaned up the autocall detection code to use a
1727 callable. I also cleaned up the autocall detection code to use a
1722 regexp, which is faster. Bug reported by Alexander Schmolck.
1728 regexp, which is faster. Bug reported by Alexander Schmolck.
1723
1729
1724 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1730 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1725 '?' in them would confuse the help system. Reported by Alex
1731 '?' in them would confuse the help system. Reported by Alex
1726 Schmolck.
1732 Schmolck.
1727
1733
1728 2004-07-16 Fernando Perez <fperez@colorado.edu>
1734 2004-07-16 Fernando Perez <fperez@colorado.edu>
1729
1735
1730 * IPython/GnuplotInteractive.py (__all__): added plot2.
1736 * IPython/GnuplotInteractive.py (__all__): added plot2.
1731
1737
1732 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1738 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1733 plotting dictionaries, lists or tuples of 1d arrays.
1739 plotting dictionaries, lists or tuples of 1d arrays.
1734
1740
1735 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1741 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1736 optimizations.
1742 optimizations.
1737
1743
1738 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1744 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1739 the information which was there from Janko's original IPP code:
1745 the information which was there from Janko's original IPP code:
1740
1746
1741 03.05.99 20:53 porto.ifm.uni-kiel.de
1747 03.05.99 20:53 porto.ifm.uni-kiel.de
1742 --Started changelog.
1748 --Started changelog.
1743 --make clear do what it say it does
1749 --make clear do what it say it does
1744 --added pretty output of lines from inputcache
1750 --added pretty output of lines from inputcache
1745 --Made Logger a mixin class, simplifies handling of switches
1751 --Made Logger a mixin class, simplifies handling of switches
1746 --Added own completer class. .string<TAB> expands to last history
1752 --Added own completer class. .string<TAB> expands to last history
1747 line which starts with string. The new expansion is also present
1753 line which starts with string. The new expansion is also present
1748 with Ctrl-r from the readline library. But this shows, who this
1754 with Ctrl-r from the readline library. But this shows, who this
1749 can be done for other cases.
1755 can be done for other cases.
1750 --Added convention that all shell functions should accept a
1756 --Added convention that all shell functions should accept a
1751 parameter_string This opens the door for different behaviour for
1757 parameter_string This opens the door for different behaviour for
1752 each function. @cd is a good example of this.
1758 each function. @cd is a good example of this.
1753
1759
1754 04.05.99 12:12 porto.ifm.uni-kiel.de
1760 04.05.99 12:12 porto.ifm.uni-kiel.de
1755 --added logfile rotation
1761 --added logfile rotation
1756 --added new mainloop method which freezes first the namespace
1762 --added new mainloop method which freezes first the namespace
1757
1763
1758 07.05.99 21:24 porto.ifm.uni-kiel.de
1764 07.05.99 21:24 porto.ifm.uni-kiel.de
1759 --added the docreader classes. Now there is a help system.
1765 --added the docreader classes. Now there is a help system.
1760 -This is only a first try. Currently it's not easy to put new
1766 -This is only a first try. Currently it's not easy to put new
1761 stuff in the indices. But this is the way to go. Info would be
1767 stuff in the indices. But this is the way to go. Info would be
1762 better, but HTML is every where and not everybody has an info
1768 better, but HTML is every where and not everybody has an info
1763 system installed and it's not so easy to change html-docs to info.
1769 system installed and it's not so easy to change html-docs to info.
1764 --added global logfile option
1770 --added global logfile option
1765 --there is now a hook for object inspection method pinfo needs to
1771 --there is now a hook for object inspection method pinfo needs to
1766 be provided for this. Can be reached by two '??'.
1772 be provided for this. Can be reached by two '??'.
1767
1773
1768 08.05.99 20:51 porto.ifm.uni-kiel.de
1774 08.05.99 20:51 porto.ifm.uni-kiel.de
1769 --added a README
1775 --added a README
1770 --bug in rc file. Something has changed so functions in the rc
1776 --bug in rc file. Something has changed so functions in the rc
1771 file need to reference the shell and not self. Not clear if it's a
1777 file need to reference the shell and not self. Not clear if it's a
1772 bug or feature.
1778 bug or feature.
1773 --changed rc file for new behavior
1779 --changed rc file for new behavior
1774
1780
1775 2004-07-15 Fernando Perez <fperez@colorado.edu>
1781 2004-07-15 Fernando Perez <fperez@colorado.edu>
1776
1782
1777 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1783 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1778 cache was falling out of sync in bizarre manners when multi-line
1784 cache was falling out of sync in bizarre manners when multi-line
1779 input was present. Minor optimizations and cleanup.
1785 input was present. Minor optimizations and cleanup.
1780
1786
1781 (Logger): Remove old Changelog info for cleanup. This is the
1787 (Logger): Remove old Changelog info for cleanup. This is the
1782 information which was there from Janko's original code:
1788 information which was there from Janko's original code:
1783
1789
1784 Changes to Logger: - made the default log filename a parameter
1790 Changes to Logger: - made the default log filename a parameter
1785
1791
1786 - put a check for lines beginning with !@? in log(). Needed
1792 - put a check for lines beginning with !@? in log(). Needed
1787 (even if the handlers properly log their lines) for mid-session
1793 (even if the handlers properly log their lines) for mid-session
1788 logging activation to work properly. Without this, lines logged
1794 logging activation to work properly. Without this, lines logged
1789 in mid session, which get read from the cache, would end up
1795 in mid session, which get read from the cache, would end up
1790 'bare' (with !@? in the open) in the log. Now they are caught
1796 'bare' (with !@? in the open) in the log. Now they are caught
1791 and prepended with a #.
1797 and prepended with a #.
1792
1798
1793 * IPython/iplib.py (InteractiveShell.init_readline): added check
1799 * IPython/iplib.py (InteractiveShell.init_readline): added check
1794 in case MagicCompleter fails to be defined, so we don't crash.
1800 in case MagicCompleter fails to be defined, so we don't crash.
1795
1801
1796 2004-07-13 Fernando Perez <fperez@colorado.edu>
1802 2004-07-13 Fernando Perez <fperez@colorado.edu>
1797
1803
1798 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1804 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1799 of EPS if the requested filename ends in '.eps'.
1805 of EPS if the requested filename ends in '.eps'.
1800
1806
1801 2004-07-04 Fernando Perez <fperez@colorado.edu>
1807 2004-07-04 Fernando Perez <fperez@colorado.edu>
1802
1808
1803 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1809 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1804 escaping of quotes when calling the shell.
1810 escaping of quotes when calling the shell.
1805
1811
1806 2004-07-02 Fernando Perez <fperez@colorado.edu>
1812 2004-07-02 Fernando Perez <fperez@colorado.edu>
1807
1813
1808 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1814 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1809 gettext not working because we were clobbering '_'. Fixes
1815 gettext not working because we were clobbering '_'. Fixes
1810 http://www.scipy.net/roundup/ipython/issue6.
1816 http://www.scipy.net/roundup/ipython/issue6.
1811
1817
1812 2004-07-01 Fernando Perez <fperez@colorado.edu>
1818 2004-07-01 Fernando Perez <fperez@colorado.edu>
1813
1819
1814 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1820 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1815 into @cd. Patch by Ville.
1821 into @cd. Patch by Ville.
1816
1822
1817 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1823 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1818 new function to store things after ipmaker runs. Patch by Ville.
1824 new function to store things after ipmaker runs. Patch by Ville.
1819 Eventually this will go away once ipmaker is removed and the class
1825 Eventually this will go away once ipmaker is removed and the class
1820 gets cleaned up, but for now it's ok. Key functionality here is
1826 gets cleaned up, but for now it's ok. Key functionality here is
1821 the addition of the persistent storage mechanism, a dict for
1827 the addition of the persistent storage mechanism, a dict for
1822 keeping data across sessions (for now just bookmarks, but more can
1828 keeping data across sessions (for now just bookmarks, but more can
1823 be implemented later).
1829 be implemented later).
1824
1830
1825 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1831 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1826 persistent across sections. Patch by Ville, I modified it
1832 persistent across sections. Patch by Ville, I modified it
1827 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1833 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1828 added a '-l' option to list all bookmarks.
1834 added a '-l' option to list all bookmarks.
1829
1835
1830 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1836 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1831 center for cleanup. Registered with atexit.register(). I moved
1837 center for cleanup. Registered with atexit.register(). I moved
1832 here the old exit_cleanup(). After a patch by Ville.
1838 here the old exit_cleanup(). After a patch by Ville.
1833
1839
1834 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1840 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1835 characters in the hacked shlex_split for python 2.2.
1841 characters in the hacked shlex_split for python 2.2.
1836
1842
1837 * IPython/iplib.py (file_matches): more fixes to filenames with
1843 * IPython/iplib.py (file_matches): more fixes to filenames with
1838 whitespace in them. It's not perfect, but limitations in python's
1844 whitespace in them. It's not perfect, but limitations in python's
1839 readline make it impossible to go further.
1845 readline make it impossible to go further.
1840
1846
1841 2004-06-29 Fernando Perez <fperez@colorado.edu>
1847 2004-06-29 Fernando Perez <fperez@colorado.edu>
1842
1848
1843 * IPython/iplib.py (file_matches): escape whitespace correctly in
1849 * IPython/iplib.py (file_matches): escape whitespace correctly in
1844 filename completions. Bug reported by Ville.
1850 filename completions. Bug reported by Ville.
1845
1851
1846 2004-06-28 Fernando Perez <fperez@colorado.edu>
1852 2004-06-28 Fernando Perez <fperez@colorado.edu>
1847
1853
1848 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1854 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1849 the history file will be called 'history-PROFNAME' (or just
1855 the history file will be called 'history-PROFNAME' (or just
1850 'history' if no profile is loaded). I was getting annoyed at
1856 'history' if no profile is loaded). I was getting annoyed at
1851 getting my Numerical work history clobbered by pysh sessions.
1857 getting my Numerical work history clobbered by pysh sessions.
1852
1858
1853 * IPython/iplib.py (InteractiveShell.__init__): Internal
1859 * IPython/iplib.py (InteractiveShell.__init__): Internal
1854 getoutputerror() function so that we can honor the system_verbose
1860 getoutputerror() function so that we can honor the system_verbose
1855 flag for _all_ system calls. I also added escaping of #
1861 flag for _all_ system calls. I also added escaping of #
1856 characters here to avoid confusing Itpl.
1862 characters here to avoid confusing Itpl.
1857
1863
1858 * IPython/Magic.py (shlex_split): removed call to shell in
1864 * IPython/Magic.py (shlex_split): removed call to shell in
1859 parse_options and replaced it with shlex.split(). The annoying
1865 parse_options and replaced it with shlex.split(). The annoying
1860 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1866 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1861 to backport it from 2.3, with several frail hacks (the shlex
1867 to backport it from 2.3, with several frail hacks (the shlex
1862 module is rather limited in 2.2). Thanks to a suggestion by Ville
1868 module is rather limited in 2.2). Thanks to a suggestion by Ville
1863 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1869 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1864 problem.
1870 problem.
1865
1871
1866 (Magic.magic_system_verbose): new toggle to print the actual
1872 (Magic.magic_system_verbose): new toggle to print the actual
1867 system calls made by ipython. Mainly for debugging purposes.
1873 system calls made by ipython. Mainly for debugging purposes.
1868
1874
1869 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1875 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1870 doesn't support persistence. Reported (and fix suggested) by
1876 doesn't support persistence. Reported (and fix suggested) by
1871 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1877 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1872
1878
1873 2004-06-26 Fernando Perez <fperez@colorado.edu>
1879 2004-06-26 Fernando Perez <fperez@colorado.edu>
1874
1880
1875 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1881 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1876 continue prompts.
1882 continue prompts.
1877
1883
1878 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1884 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1879 function (basically a big docstring) and a few more things here to
1885 function (basically a big docstring) and a few more things here to
1880 speedup startup. pysh.py is now very lightweight. We want because
1886 speedup startup. pysh.py is now very lightweight. We want because
1881 it gets execfile'd, while InterpreterExec gets imported, so
1887 it gets execfile'd, while InterpreterExec gets imported, so
1882 byte-compilation saves time.
1888 byte-compilation saves time.
1883
1889
1884 2004-06-25 Fernando Perez <fperez@colorado.edu>
1890 2004-06-25 Fernando Perez <fperez@colorado.edu>
1885
1891
1886 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1892 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1887 -NUM', which was recently broken.
1893 -NUM', which was recently broken.
1888
1894
1889 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1895 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1890 in multi-line input (but not !!, which doesn't make sense there).
1896 in multi-line input (but not !!, which doesn't make sense there).
1891
1897
1892 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1898 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1893 It's just too useful, and people can turn it off in the less
1899 It's just too useful, and people can turn it off in the less
1894 common cases where it's a problem.
1900 common cases where it's a problem.
1895
1901
1896 2004-06-24 Fernando Perez <fperez@colorado.edu>
1902 2004-06-24 Fernando Perez <fperez@colorado.edu>
1897
1903
1898 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1904 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1899 special syntaxes (like alias calling) is now allied in multi-line
1905 special syntaxes (like alias calling) is now allied in multi-line
1900 input. This is still _very_ experimental, but it's necessary for
1906 input. This is still _very_ experimental, but it's necessary for
1901 efficient shell usage combining python looping syntax with system
1907 efficient shell usage combining python looping syntax with system
1902 calls. For now it's restricted to aliases, I don't think it
1908 calls. For now it's restricted to aliases, I don't think it
1903 really even makes sense to have this for magics.
1909 really even makes sense to have this for magics.
1904
1910
1905 2004-06-23 Fernando Perez <fperez@colorado.edu>
1911 2004-06-23 Fernando Perez <fperez@colorado.edu>
1906
1912
1907 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1913 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1908 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1914 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1909
1915
1910 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1916 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1911 extensions under Windows (after code sent by Gary Bishop). The
1917 extensions under Windows (after code sent by Gary Bishop). The
1912 extensions considered 'executable' are stored in IPython's rc
1918 extensions considered 'executable' are stored in IPython's rc
1913 structure as win_exec_ext.
1919 structure as win_exec_ext.
1914
1920
1915 * IPython/genutils.py (shell): new function, like system() but
1921 * IPython/genutils.py (shell): new function, like system() but
1916 without return value. Very useful for interactive shell work.
1922 without return value. Very useful for interactive shell work.
1917
1923
1918 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1924 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1919 delete aliases.
1925 delete aliases.
1920
1926
1921 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1927 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1922 sure that the alias table doesn't contain python keywords.
1928 sure that the alias table doesn't contain python keywords.
1923
1929
1924 2004-06-21 Fernando Perez <fperez@colorado.edu>
1930 2004-06-21 Fernando Perez <fperez@colorado.edu>
1925
1931
1926 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1932 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1927 non-existent items are found in $PATH. Reported by Thorsten.
1933 non-existent items are found in $PATH. Reported by Thorsten.
1928
1934
1929 2004-06-20 Fernando Perez <fperez@colorado.edu>
1935 2004-06-20 Fernando Perez <fperez@colorado.edu>
1930
1936
1931 * IPython/iplib.py (complete): modified the completer so that the
1937 * IPython/iplib.py (complete): modified the completer so that the
1932 order of priorities can be easily changed at runtime.
1938 order of priorities can be easily changed at runtime.
1933
1939
1934 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1940 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1935 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1941 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1936
1942
1937 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1943 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1938 expand Python variables prepended with $ in all system calls. The
1944 expand Python variables prepended with $ in all system calls. The
1939 same was done to InteractiveShell.handle_shell_escape. Now all
1945 same was done to InteractiveShell.handle_shell_escape. Now all
1940 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1946 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1941 expansion of python variables and expressions according to the
1947 expansion of python variables and expressions according to the
1942 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1948 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1943
1949
1944 Though PEP-215 has been rejected, a similar (but simpler) one
1950 Though PEP-215 has been rejected, a similar (but simpler) one
1945 seems like it will go into Python 2.4, PEP-292 -
1951 seems like it will go into Python 2.4, PEP-292 -
1946 http://www.python.org/peps/pep-0292.html.
1952 http://www.python.org/peps/pep-0292.html.
1947
1953
1948 I'll keep the full syntax of PEP-215, since IPython has since the
1954 I'll keep the full syntax of PEP-215, since IPython has since the
1949 start used Ka-Ping Yee's reference implementation discussed there
1955 start used Ka-Ping Yee's reference implementation discussed there
1950 (Itpl), and I actually like the powerful semantics it offers.
1956 (Itpl), and I actually like the powerful semantics it offers.
1951
1957
1952 In order to access normal shell variables, the $ has to be escaped
1958 In order to access normal shell variables, the $ has to be escaped
1953 via an extra $. For example:
1959 via an extra $. For example:
1954
1960
1955 In [7]: PATH='a python variable'
1961 In [7]: PATH='a python variable'
1956
1962
1957 In [8]: !echo $PATH
1963 In [8]: !echo $PATH
1958 a python variable
1964 a python variable
1959
1965
1960 In [9]: !echo $$PATH
1966 In [9]: !echo $$PATH
1961 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
1967 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
1962
1968
1963 (Magic.parse_options): escape $ so the shell doesn't evaluate
1969 (Magic.parse_options): escape $ so the shell doesn't evaluate
1964 things prematurely.
1970 things prematurely.
1965
1971
1966 * IPython/iplib.py (InteractiveShell.call_alias): added the
1972 * IPython/iplib.py (InteractiveShell.call_alias): added the
1967 ability for aliases to expand python variables via $.
1973 ability for aliases to expand python variables via $.
1968
1974
1969 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
1975 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
1970 system, now there's a @rehash/@rehashx pair of magics. These work
1976 system, now there's a @rehash/@rehashx pair of magics. These work
1971 like the csh rehash command, and can be invoked at any time. They
1977 like the csh rehash command, and can be invoked at any time. They
1972 build a table of aliases to everything in the user's $PATH
1978 build a table of aliases to everything in the user's $PATH
1973 (@rehash uses everything, @rehashx is slower but only adds
1979 (@rehash uses everything, @rehashx is slower but only adds
1974 executable files). With this, the pysh.py-based shell profile can
1980 executable files). With this, the pysh.py-based shell profile can
1975 now simply call rehash upon startup, and full access to all
1981 now simply call rehash upon startup, and full access to all
1976 programs in the user's path is obtained.
1982 programs in the user's path is obtained.
1977
1983
1978 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
1984 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
1979 functionality is now fully in place. I removed the old dynamic
1985 functionality is now fully in place. I removed the old dynamic
1980 code generation based approach, in favor of a much lighter one
1986 code generation based approach, in favor of a much lighter one
1981 based on a simple dict. The advantage is that this allows me to
1987 based on a simple dict. The advantage is that this allows me to
1982 now have thousands of aliases with negligible cost (unthinkable
1988 now have thousands of aliases with negligible cost (unthinkable
1983 with the old system).
1989 with the old system).
1984
1990
1985 2004-06-19 Fernando Perez <fperez@colorado.edu>
1991 2004-06-19 Fernando Perez <fperez@colorado.edu>
1986
1992
1987 * IPython/iplib.py (__init__): extended MagicCompleter class to
1993 * IPython/iplib.py (__init__): extended MagicCompleter class to
1988 also complete (last in priority) on user aliases.
1994 also complete (last in priority) on user aliases.
1989
1995
1990 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
1996 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
1991 call to eval.
1997 call to eval.
1992 (ItplNS.__init__): Added a new class which functions like Itpl,
1998 (ItplNS.__init__): Added a new class which functions like Itpl,
1993 but allows configuring the namespace for the evaluation to occur
1999 but allows configuring the namespace for the evaluation to occur
1994 in.
2000 in.
1995
2001
1996 2004-06-18 Fernando Perez <fperez@colorado.edu>
2002 2004-06-18 Fernando Perez <fperez@colorado.edu>
1997
2003
1998 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2004 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
1999 better message when 'exit' or 'quit' are typed (a common newbie
2005 better message when 'exit' or 'quit' are typed (a common newbie
2000 confusion).
2006 confusion).
2001
2007
2002 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2008 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2003 check for Windows users.
2009 check for Windows users.
2004
2010
2005 * IPython/iplib.py (InteractiveShell.user_setup): removed
2011 * IPython/iplib.py (InteractiveShell.user_setup): removed
2006 disabling of colors for Windows. I'll test at runtime and issue a
2012 disabling of colors for Windows. I'll test at runtime and issue a
2007 warning if Gary's readline isn't found, as to nudge users to
2013 warning if Gary's readline isn't found, as to nudge users to
2008 download it.
2014 download it.
2009
2015
2010 2004-06-16 Fernando Perez <fperez@colorado.edu>
2016 2004-06-16 Fernando Perez <fperez@colorado.edu>
2011
2017
2012 * IPython/genutils.py (Stream.__init__): changed to print errors
2018 * IPython/genutils.py (Stream.__init__): changed to print errors
2013 to sys.stderr. I had a circular dependency here. Now it's
2019 to sys.stderr. I had a circular dependency here. Now it's
2014 possible to run ipython as IDLE's shell (consider this pre-alpha,
2020 possible to run ipython as IDLE's shell (consider this pre-alpha,
2015 since true stdout things end up in the starting terminal instead
2021 since true stdout things end up in the starting terminal instead
2016 of IDLE's out).
2022 of IDLE's out).
2017
2023
2018 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2024 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2019 users who haven't # updated their prompt_in2 definitions. Remove
2025 users who haven't # updated their prompt_in2 definitions. Remove
2020 eventually.
2026 eventually.
2021 (multiple_replace): added credit to original ASPN recipe.
2027 (multiple_replace): added credit to original ASPN recipe.
2022
2028
2023 2004-06-15 Fernando Perez <fperez@colorado.edu>
2029 2004-06-15 Fernando Perez <fperez@colorado.edu>
2024
2030
2025 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2031 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2026 list of auto-defined aliases.
2032 list of auto-defined aliases.
2027
2033
2028 2004-06-13 Fernando Perez <fperez@colorado.edu>
2034 2004-06-13 Fernando Perez <fperez@colorado.edu>
2029
2035
2030 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2036 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2031 install was really requested (so setup.py can be used for other
2037 install was really requested (so setup.py can be used for other
2032 things under Windows).
2038 things under Windows).
2033
2039
2034 2004-06-10 Fernando Perez <fperez@colorado.edu>
2040 2004-06-10 Fernando Perez <fperez@colorado.edu>
2035
2041
2036 * IPython/Logger.py (Logger.create_log): Manually remove any old
2042 * IPython/Logger.py (Logger.create_log): Manually remove any old
2037 backup, since os.remove may fail under Windows. Fixes bug
2043 backup, since os.remove may fail under Windows. Fixes bug
2038 reported by Thorsten.
2044 reported by Thorsten.
2039
2045
2040 2004-06-09 Fernando Perez <fperez@colorado.edu>
2046 2004-06-09 Fernando Perez <fperez@colorado.edu>
2041
2047
2042 * examples/example-embed.py: fixed all references to %n (replaced
2048 * examples/example-embed.py: fixed all references to %n (replaced
2043 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2049 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2044 for all examples and the manual as well.
2050 for all examples and the manual as well.
2045
2051
2046 2004-06-08 Fernando Perez <fperez@colorado.edu>
2052 2004-06-08 Fernando Perez <fperez@colorado.edu>
2047
2053
2048 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2054 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2049 alignment and color management. All 3 prompt subsystems now
2055 alignment and color management. All 3 prompt subsystems now
2050 inherit from BasePrompt.
2056 inherit from BasePrompt.
2051
2057
2052 * tools/release: updates for windows installer build and tag rpms
2058 * tools/release: updates for windows installer build and tag rpms
2053 with python version (since paths are fixed).
2059 with python version (since paths are fixed).
2054
2060
2055 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2061 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2056 which will become eventually obsolete. Also fixed the default
2062 which will become eventually obsolete. Also fixed the default
2057 prompt_in2 to use \D, so at least new users start with the correct
2063 prompt_in2 to use \D, so at least new users start with the correct
2058 defaults.
2064 defaults.
2059 WARNING: Users with existing ipythonrc files will need to apply
2065 WARNING: Users with existing ipythonrc files will need to apply
2060 this fix manually!
2066 this fix manually!
2061
2067
2062 * setup.py: make windows installer (.exe). This is finally the
2068 * setup.py: make windows installer (.exe). This is finally the
2063 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2069 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2064 which I hadn't included because it required Python 2.3 (or recent
2070 which I hadn't included because it required Python 2.3 (or recent
2065 distutils).
2071 distutils).
2066
2072
2067 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2073 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2068 usage of new '\D' escape.
2074 usage of new '\D' escape.
2069
2075
2070 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2076 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2071 lacks os.getuid())
2077 lacks os.getuid())
2072 (CachedOutput.set_colors): Added the ability to turn coloring
2078 (CachedOutput.set_colors): Added the ability to turn coloring
2073 on/off with @colors even for manually defined prompt colors. It
2079 on/off with @colors even for manually defined prompt colors. It
2074 uses a nasty global, but it works safely and via the generic color
2080 uses a nasty global, but it works safely and via the generic color
2075 handling mechanism.
2081 handling mechanism.
2076 (Prompt2.__init__): Introduced new escape '\D' for continuation
2082 (Prompt2.__init__): Introduced new escape '\D' for continuation
2077 prompts. It represents the counter ('\#') as dots.
2083 prompts. It represents the counter ('\#') as dots.
2078 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2084 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2079 need to update their ipythonrc files and replace '%n' with '\D' in
2085 need to update their ipythonrc files and replace '%n' with '\D' in
2080 their prompt_in2 settings everywhere. Sorry, but there's
2086 their prompt_in2 settings everywhere. Sorry, but there's
2081 otherwise no clean way to get all prompts to properly align. The
2087 otherwise no clean way to get all prompts to properly align. The
2082 ipythonrc shipped with IPython has been updated.
2088 ipythonrc shipped with IPython has been updated.
2083
2089
2084 2004-06-07 Fernando Perez <fperez@colorado.edu>
2090 2004-06-07 Fernando Perez <fperez@colorado.edu>
2085
2091
2086 * setup.py (isfile): Pass local_icons option to latex2html, so the
2092 * setup.py (isfile): Pass local_icons option to latex2html, so the
2087 resulting HTML file is self-contained. Thanks to
2093 resulting HTML file is self-contained. Thanks to
2088 dryice-AT-liu.com.cn for the tip.
2094 dryice-AT-liu.com.cn for the tip.
2089
2095
2090 * pysh.py: I created a new profile 'shell', which implements a
2096 * pysh.py: I created a new profile 'shell', which implements a
2091 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2097 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2092 system shell, nor will it become one anytime soon. It's mainly
2098 system shell, nor will it become one anytime soon. It's mainly
2093 meant to illustrate the use of the new flexible bash-like prompts.
2099 meant to illustrate the use of the new flexible bash-like prompts.
2094 I guess it could be used by hardy souls for true shell management,
2100 I guess it could be used by hardy souls for true shell management,
2095 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2101 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2096 profile. This uses the InterpreterExec extension provided by
2102 profile. This uses the InterpreterExec extension provided by
2097 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2103 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2098
2104
2099 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2105 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2100 auto-align itself with the length of the previous input prompt
2106 auto-align itself with the length of the previous input prompt
2101 (taking into account the invisible color escapes).
2107 (taking into account the invisible color escapes).
2102 (CachedOutput.__init__): Large restructuring of this class. Now
2108 (CachedOutput.__init__): Large restructuring of this class. Now
2103 all three prompts (primary1, primary2, output) are proper objects,
2109 all three prompts (primary1, primary2, output) are proper objects,
2104 managed by the 'parent' CachedOutput class. The code is still a
2110 managed by the 'parent' CachedOutput class. The code is still a
2105 bit hackish (all prompts share state via a pointer to the cache),
2111 bit hackish (all prompts share state via a pointer to the cache),
2106 but it's overall far cleaner than before.
2112 but it's overall far cleaner than before.
2107
2113
2108 * IPython/genutils.py (getoutputerror): modified to add verbose,
2114 * IPython/genutils.py (getoutputerror): modified to add verbose,
2109 debug and header options. This makes the interface of all getout*
2115 debug and header options. This makes the interface of all getout*
2110 functions uniform.
2116 functions uniform.
2111 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2117 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2112
2118
2113 * IPython/Magic.py (Magic.default_option): added a function to
2119 * IPython/Magic.py (Magic.default_option): added a function to
2114 allow registering default options for any magic command. This
2120 allow registering default options for any magic command. This
2115 makes it easy to have profiles which customize the magics globally
2121 makes it easy to have profiles which customize the magics globally
2116 for a certain use. The values set through this function are
2122 for a certain use. The values set through this function are
2117 picked up by the parse_options() method, which all magics should
2123 picked up by the parse_options() method, which all magics should
2118 use to parse their options.
2124 use to parse their options.
2119
2125
2120 * IPython/genutils.py (warn): modified the warnings framework to
2126 * IPython/genutils.py (warn): modified the warnings framework to
2121 use the Term I/O class. I'm trying to slowly unify all of
2127 use the Term I/O class. I'm trying to slowly unify all of
2122 IPython's I/O operations to pass through Term.
2128 IPython's I/O operations to pass through Term.
2123
2129
2124 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2130 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2125 the secondary prompt to correctly match the length of the primary
2131 the secondary prompt to correctly match the length of the primary
2126 one for any prompt. Now multi-line code will properly line up
2132 one for any prompt. Now multi-line code will properly line up
2127 even for path dependent prompts, such as the new ones available
2133 even for path dependent prompts, such as the new ones available
2128 via the prompt_specials.
2134 via the prompt_specials.
2129
2135
2130 2004-06-06 Fernando Perez <fperez@colorado.edu>
2136 2004-06-06 Fernando Perez <fperez@colorado.edu>
2131
2137
2132 * IPython/Prompts.py (prompt_specials): Added the ability to have
2138 * IPython/Prompts.py (prompt_specials): Added the ability to have
2133 bash-like special sequences in the prompts, which get
2139 bash-like special sequences in the prompts, which get
2134 automatically expanded. Things like hostname, current working
2140 automatically expanded. Things like hostname, current working
2135 directory and username are implemented already, but it's easy to
2141 directory and username are implemented already, but it's easy to
2136 add more in the future. Thanks to a patch by W.J. van der Laan
2142 add more in the future. Thanks to a patch by W.J. van der Laan
2137 <gnufnork-AT-hetdigitalegat.nl>
2143 <gnufnork-AT-hetdigitalegat.nl>
2138 (prompt_specials): Added color support for prompt strings, so
2144 (prompt_specials): Added color support for prompt strings, so
2139 users can define arbitrary color setups for their prompts.
2145 users can define arbitrary color setups for their prompts.
2140
2146
2141 2004-06-05 Fernando Perez <fperez@colorado.edu>
2147 2004-06-05 Fernando Perez <fperez@colorado.edu>
2142
2148
2143 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2149 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2144 code to load Gary Bishop's readline and configure it
2150 code to load Gary Bishop's readline and configure it
2145 automatically. Thanks to Gary for help on this.
2151 automatically. Thanks to Gary for help on this.
2146
2152
2147 2004-06-01 Fernando Perez <fperez@colorado.edu>
2153 2004-06-01 Fernando Perez <fperez@colorado.edu>
2148
2154
2149 * IPython/Logger.py (Logger.create_log): fix bug for logging
2155 * IPython/Logger.py (Logger.create_log): fix bug for logging
2150 with no filename (previous fix was incomplete).
2156 with no filename (previous fix was incomplete).
2151
2157
2152 2004-05-25 Fernando Perez <fperez@colorado.edu>
2158 2004-05-25 Fernando Perez <fperez@colorado.edu>
2153
2159
2154 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2160 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2155 parens would get passed to the shell.
2161 parens would get passed to the shell.
2156
2162
2157 2004-05-20 Fernando Perez <fperez@colorado.edu>
2163 2004-05-20 Fernando Perez <fperez@colorado.edu>
2158
2164
2159 * IPython/Magic.py (Magic.magic_prun): changed default profile
2165 * IPython/Magic.py (Magic.magic_prun): changed default profile
2160 sort order to 'time' (the more common profiling need).
2166 sort order to 'time' (the more common profiling need).
2161
2167
2162 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2168 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2163 so that source code shown is guaranteed in sync with the file on
2169 so that source code shown is guaranteed in sync with the file on
2164 disk (also changed in psource). Similar fix to the one for
2170 disk (also changed in psource). Similar fix to the one for
2165 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2171 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2166 <yann.ledu-AT-noos.fr>.
2172 <yann.ledu-AT-noos.fr>.
2167
2173
2168 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2174 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2169 with a single option would not be correctly parsed. Closes
2175 with a single option would not be correctly parsed. Closes
2170 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2176 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2171 introduced in 0.6.0 (on 2004-05-06).
2177 introduced in 0.6.0 (on 2004-05-06).
2172
2178
2173 2004-05-13 *** Released version 0.6.0
2179 2004-05-13 *** Released version 0.6.0
2174
2180
2175 2004-05-13 Fernando Perez <fperez@colorado.edu>
2181 2004-05-13 Fernando Perez <fperez@colorado.edu>
2176
2182
2177 * debian/: Added debian/ directory to CVS, so that debian support
2183 * debian/: Added debian/ directory to CVS, so that debian support
2178 is publicly accessible. The debian package is maintained by Jack
2184 is publicly accessible. The debian package is maintained by Jack
2179 Moffit <jack-AT-xiph.org>.
2185 Moffit <jack-AT-xiph.org>.
2180
2186
2181 * Documentation: included the notes about an ipython-based system
2187 * Documentation: included the notes about an ipython-based system
2182 shell (the hypothetical 'pysh') into the new_design.pdf document,
2188 shell (the hypothetical 'pysh') into the new_design.pdf document,
2183 so that these ideas get distributed to users along with the
2189 so that these ideas get distributed to users along with the
2184 official documentation.
2190 official documentation.
2185
2191
2186 2004-05-10 Fernando Perez <fperez@colorado.edu>
2192 2004-05-10 Fernando Perez <fperez@colorado.edu>
2187
2193
2188 * IPython/Logger.py (Logger.create_log): fix recently introduced
2194 * IPython/Logger.py (Logger.create_log): fix recently introduced
2189 bug (misindented line) where logstart would fail when not given an
2195 bug (misindented line) where logstart would fail when not given an
2190 explicit filename.
2196 explicit filename.
2191
2197
2192 2004-05-09 Fernando Perez <fperez@colorado.edu>
2198 2004-05-09 Fernando Perez <fperez@colorado.edu>
2193
2199
2194 * IPython/Magic.py (Magic.parse_options): skip system call when
2200 * IPython/Magic.py (Magic.parse_options): skip system call when
2195 there are no options to look for. Faster, cleaner for the common
2201 there are no options to look for. Faster, cleaner for the common
2196 case.
2202 case.
2197
2203
2198 * Documentation: many updates to the manual: describing Windows
2204 * Documentation: many updates to the manual: describing Windows
2199 support better, Gnuplot updates, credits, misc small stuff. Also
2205 support better, Gnuplot updates, credits, misc small stuff. Also
2200 updated the new_design doc a bit.
2206 updated the new_design doc a bit.
2201
2207
2202 2004-05-06 *** Released version 0.6.0.rc1
2208 2004-05-06 *** Released version 0.6.0.rc1
2203
2209
2204 2004-05-06 Fernando Perez <fperez@colorado.edu>
2210 2004-05-06 Fernando Perez <fperez@colorado.edu>
2205
2211
2206 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2212 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2207 operations to use the vastly more efficient list/''.join() method.
2213 operations to use the vastly more efficient list/''.join() method.
2208 (FormattedTB.text): Fix
2214 (FormattedTB.text): Fix
2209 http://www.scipy.net/roundup/ipython/issue12 - exception source
2215 http://www.scipy.net/roundup/ipython/issue12 - exception source
2210 extract not updated after reload. Thanks to Mike Salib
2216 extract not updated after reload. Thanks to Mike Salib
2211 <msalib-AT-mit.edu> for pinning the source of the problem.
2217 <msalib-AT-mit.edu> for pinning the source of the problem.
2212 Fortunately, the solution works inside ipython and doesn't require
2218 Fortunately, the solution works inside ipython and doesn't require
2213 any changes to python proper.
2219 any changes to python proper.
2214
2220
2215 * IPython/Magic.py (Magic.parse_options): Improved to process the
2221 * IPython/Magic.py (Magic.parse_options): Improved to process the
2216 argument list as a true shell would (by actually using the
2222 argument list as a true shell would (by actually using the
2217 underlying system shell). This way, all @magics automatically get
2223 underlying system shell). This way, all @magics automatically get
2218 shell expansion for variables. Thanks to a comment by Alex
2224 shell expansion for variables. Thanks to a comment by Alex
2219 Schmolck.
2225 Schmolck.
2220
2226
2221 2004-04-04 Fernando Perez <fperez@colorado.edu>
2227 2004-04-04 Fernando Perez <fperez@colorado.edu>
2222
2228
2223 * IPython/iplib.py (InteractiveShell.interact): Added a special
2229 * IPython/iplib.py (InteractiveShell.interact): Added a special
2224 trap for a debugger quit exception, which is basically impossible
2230 trap for a debugger quit exception, which is basically impossible
2225 to handle by normal mechanisms, given what pdb does to the stack.
2231 to handle by normal mechanisms, given what pdb does to the stack.
2226 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2232 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2227
2233
2228 2004-04-03 Fernando Perez <fperez@colorado.edu>
2234 2004-04-03 Fernando Perez <fperez@colorado.edu>
2229
2235
2230 * IPython/genutils.py (Term): Standardized the names of the Term
2236 * IPython/genutils.py (Term): Standardized the names of the Term
2231 class streams to cin/cout/cerr, following C++ naming conventions
2237 class streams to cin/cout/cerr, following C++ naming conventions
2232 (I can't use in/out/err because 'in' is not a valid attribute
2238 (I can't use in/out/err because 'in' is not a valid attribute
2233 name).
2239 name).
2234
2240
2235 * IPython/iplib.py (InteractiveShell.interact): don't increment
2241 * IPython/iplib.py (InteractiveShell.interact): don't increment
2236 the prompt if there's no user input. By Daniel 'Dang' Griffith
2242 the prompt if there's no user input. By Daniel 'Dang' Griffith
2237 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2243 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2238 Francois Pinard.
2244 Francois Pinard.
2239
2245
2240 2004-04-02 Fernando Perez <fperez@colorado.edu>
2246 2004-04-02 Fernando Perez <fperez@colorado.edu>
2241
2247
2242 * IPython/genutils.py (Stream.__init__): Modified to survive at
2248 * IPython/genutils.py (Stream.__init__): Modified to survive at
2243 least importing in contexts where stdin/out/err aren't true file
2249 least importing in contexts where stdin/out/err aren't true file
2244 objects, such as PyCrust (they lack fileno() and mode). However,
2250 objects, such as PyCrust (they lack fileno() and mode). However,
2245 the recovery facilities which rely on these things existing will
2251 the recovery facilities which rely on these things existing will
2246 not work.
2252 not work.
2247
2253
2248 2004-04-01 Fernando Perez <fperez@colorado.edu>
2254 2004-04-01 Fernando Perez <fperez@colorado.edu>
2249
2255
2250 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2256 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2251 use the new getoutputerror() function, so it properly
2257 use the new getoutputerror() function, so it properly
2252 distinguishes stdout/err.
2258 distinguishes stdout/err.
2253
2259
2254 * IPython/genutils.py (getoutputerror): added a function to
2260 * IPython/genutils.py (getoutputerror): added a function to
2255 capture separately the standard output and error of a command.
2261 capture separately the standard output and error of a command.
2256 After a comment from dang on the mailing lists. This code is
2262 After a comment from dang on the mailing lists. This code is
2257 basically a modified version of commands.getstatusoutput(), from
2263 basically a modified version of commands.getstatusoutput(), from
2258 the standard library.
2264 the standard library.
2259
2265
2260 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2266 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2261 '!!' as a special syntax (shorthand) to access @sx.
2267 '!!' as a special syntax (shorthand) to access @sx.
2262
2268
2263 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2269 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2264 command and return its output as a list split on '\n'.
2270 command and return its output as a list split on '\n'.
2265
2271
2266 2004-03-31 Fernando Perez <fperez@colorado.edu>
2272 2004-03-31 Fernando Perez <fperez@colorado.edu>
2267
2273
2268 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2274 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2269 method to dictionaries used as FakeModule instances if they lack
2275 method to dictionaries used as FakeModule instances if they lack
2270 it. At least pydoc in python2.3 breaks for runtime-defined
2276 it. At least pydoc in python2.3 breaks for runtime-defined
2271 functions without this hack. At some point I need to _really_
2277 functions without this hack. At some point I need to _really_
2272 understand what FakeModule is doing, because it's a gross hack.
2278 understand what FakeModule is doing, because it's a gross hack.
2273 But it solves Arnd's problem for now...
2279 But it solves Arnd's problem for now...
2274
2280
2275 2004-02-27 Fernando Perez <fperez@colorado.edu>
2281 2004-02-27 Fernando Perez <fperez@colorado.edu>
2276
2282
2277 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2283 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2278 mode would behave erratically. Also increased the number of
2284 mode would behave erratically. Also increased the number of
2279 possible logs in rotate mod to 999. Thanks to Rod Holland
2285 possible logs in rotate mod to 999. Thanks to Rod Holland
2280 <rhh@StructureLABS.com> for the report and fixes.
2286 <rhh@StructureLABS.com> for the report and fixes.
2281
2287
2282 2004-02-26 Fernando Perez <fperez@colorado.edu>
2288 2004-02-26 Fernando Perez <fperez@colorado.edu>
2283
2289
2284 * IPython/genutils.py (page): Check that the curses module really
2290 * IPython/genutils.py (page): Check that the curses module really
2285 has the initscr attribute before trying to use it. For some
2291 has the initscr attribute before trying to use it. For some
2286 reason, the Solaris curses module is missing this. I think this
2292 reason, the Solaris curses module is missing this. I think this
2287 should be considered a Solaris python bug, but I'm not sure.
2293 should be considered a Solaris python bug, but I'm not sure.
2288
2294
2289 2004-01-17 Fernando Perez <fperez@colorado.edu>
2295 2004-01-17 Fernando Perez <fperez@colorado.edu>
2290
2296
2291 * IPython/genutils.py (Stream.__init__): Changes to try to make
2297 * IPython/genutils.py (Stream.__init__): Changes to try to make
2292 ipython robust against stdin/out/err being closed by the user.
2298 ipython robust against stdin/out/err being closed by the user.
2293 This is 'user error' (and blocks a normal python session, at least
2299 This is 'user error' (and blocks a normal python session, at least
2294 the stdout case). However, Ipython should be able to survive such
2300 the stdout case). However, Ipython should be able to survive such
2295 instances of abuse as gracefully as possible. To simplify the
2301 instances of abuse as gracefully as possible. To simplify the
2296 coding and maintain compatibility with Gary Bishop's Term
2302 coding and maintain compatibility with Gary Bishop's Term
2297 contributions, I've made use of classmethods for this. I think
2303 contributions, I've made use of classmethods for this. I think
2298 this introduces a dependency on python 2.2.
2304 this introduces a dependency on python 2.2.
2299
2305
2300 2004-01-13 Fernando Perez <fperez@colorado.edu>
2306 2004-01-13 Fernando Perez <fperez@colorado.edu>
2301
2307
2302 * IPython/numutils.py (exp_safe): simplified the code a bit and
2308 * IPython/numutils.py (exp_safe): simplified the code a bit and
2303 removed the need for importing the kinds module altogether.
2309 removed the need for importing the kinds module altogether.
2304
2310
2305 2004-01-06 Fernando Perez <fperez@colorado.edu>
2311 2004-01-06 Fernando Perez <fperez@colorado.edu>
2306
2312
2307 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2313 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2308 a magic function instead, after some community feedback. No
2314 a magic function instead, after some community feedback. No
2309 special syntax will exist for it, but its name is deliberately
2315 special syntax will exist for it, but its name is deliberately
2310 very short.
2316 very short.
2311
2317
2312 2003-12-20 Fernando Perez <fperez@colorado.edu>
2318 2003-12-20 Fernando Perez <fperez@colorado.edu>
2313
2319
2314 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2320 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2315 new functionality, to automagically assign the result of a shell
2321 new functionality, to automagically assign the result of a shell
2316 command to a variable. I'll solicit some community feedback on
2322 command to a variable. I'll solicit some community feedback on
2317 this before making it permanent.
2323 this before making it permanent.
2318
2324
2319 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2325 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2320 requested about callables for which inspect couldn't obtain a
2326 requested about callables for which inspect couldn't obtain a
2321 proper argspec. Thanks to a crash report sent by Etienne
2327 proper argspec. Thanks to a crash report sent by Etienne
2322 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2328 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2323
2329
2324 2003-12-09 Fernando Perez <fperez@colorado.edu>
2330 2003-12-09 Fernando Perez <fperez@colorado.edu>
2325
2331
2326 * IPython/genutils.py (page): patch for the pager to work across
2332 * IPython/genutils.py (page): patch for the pager to work across
2327 various versions of Windows. By Gary Bishop.
2333 various versions of Windows. By Gary Bishop.
2328
2334
2329 2003-12-04 Fernando Perez <fperez@colorado.edu>
2335 2003-12-04 Fernando Perez <fperez@colorado.edu>
2330
2336
2331 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2337 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2332 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2338 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2333 While I tested this and it looks ok, there may still be corner
2339 While I tested this and it looks ok, there may still be corner
2334 cases I've missed.
2340 cases I've missed.
2335
2341
2336 2003-12-01 Fernando Perez <fperez@colorado.edu>
2342 2003-12-01 Fernando Perez <fperez@colorado.edu>
2337
2343
2338 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2344 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2339 where a line like 'p,q=1,2' would fail because the automagic
2345 where a line like 'p,q=1,2' would fail because the automagic
2340 system would be triggered for @p.
2346 system would be triggered for @p.
2341
2347
2342 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2348 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2343 cleanups, code unmodified.
2349 cleanups, code unmodified.
2344
2350
2345 * IPython/genutils.py (Term): added a class for IPython to handle
2351 * IPython/genutils.py (Term): added a class for IPython to handle
2346 output. In most cases it will just be a proxy for stdout/err, but
2352 output. In most cases it will just be a proxy for stdout/err, but
2347 having this allows modifications to be made for some platforms,
2353 having this allows modifications to be made for some platforms,
2348 such as handling color escapes under Windows. All of this code
2354 such as handling color escapes under Windows. All of this code
2349 was contributed by Gary Bishop, with minor modifications by me.
2355 was contributed by Gary Bishop, with minor modifications by me.
2350 The actual changes affect many files.
2356 The actual changes affect many files.
2351
2357
2352 2003-11-30 Fernando Perez <fperez@colorado.edu>
2358 2003-11-30 Fernando Perez <fperez@colorado.edu>
2353
2359
2354 * IPython/iplib.py (file_matches): new completion code, courtesy
2360 * IPython/iplib.py (file_matches): new completion code, courtesy
2355 of Jeff Collins. This enables filename completion again under
2361 of Jeff Collins. This enables filename completion again under
2356 python 2.3, which disabled it at the C level.
2362 python 2.3, which disabled it at the C level.
2357
2363
2358 2003-11-11 Fernando Perez <fperez@colorado.edu>
2364 2003-11-11 Fernando Perez <fperez@colorado.edu>
2359
2365
2360 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2366 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2361 for Numeric.array(map(...)), but often convenient.
2367 for Numeric.array(map(...)), but often convenient.
2362
2368
2363 2003-11-05 Fernando Perez <fperez@colorado.edu>
2369 2003-11-05 Fernando Perez <fperez@colorado.edu>
2364
2370
2365 * IPython/numutils.py (frange): Changed a call from int() to
2371 * IPython/numutils.py (frange): Changed a call from int() to
2366 int(round()) to prevent a problem reported with arange() in the
2372 int(round()) to prevent a problem reported with arange() in the
2367 numpy list.
2373 numpy list.
2368
2374
2369 2003-10-06 Fernando Perez <fperez@colorado.edu>
2375 2003-10-06 Fernando Perez <fperez@colorado.edu>
2370
2376
2371 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2377 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2372 prevent crashes if sys lacks an argv attribute (it happens with
2378 prevent crashes if sys lacks an argv attribute (it happens with
2373 embedded interpreters which build a bare-bones sys module).
2379 embedded interpreters which build a bare-bones sys module).
2374 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2380 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2375
2381
2376 2003-09-24 Fernando Perez <fperez@colorado.edu>
2382 2003-09-24 Fernando Perez <fperez@colorado.edu>
2377
2383
2378 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2384 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2379 to protect against poorly written user objects where __getattr__
2385 to protect against poorly written user objects where __getattr__
2380 raises exceptions other than AttributeError. Thanks to a bug
2386 raises exceptions other than AttributeError. Thanks to a bug
2381 report by Oliver Sander <osander-AT-gmx.de>.
2387 report by Oliver Sander <osander-AT-gmx.de>.
2382
2388
2383 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2389 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2384 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2390 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2385
2391
2386 2003-09-09 Fernando Perez <fperez@colorado.edu>
2392 2003-09-09 Fernando Perez <fperez@colorado.edu>
2387
2393
2388 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2394 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2389 unpacking a list whith a callable as first element would
2395 unpacking a list whith a callable as first element would
2390 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2396 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2391 Collins.
2397 Collins.
2392
2398
2393 2003-08-25 *** Released version 0.5.0
2399 2003-08-25 *** Released version 0.5.0
2394
2400
2395 2003-08-22 Fernando Perez <fperez@colorado.edu>
2401 2003-08-22 Fernando Perez <fperez@colorado.edu>
2396
2402
2397 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2403 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2398 improperly defined user exceptions. Thanks to feedback from Mark
2404 improperly defined user exceptions. Thanks to feedback from Mark
2399 Russell <mrussell-AT-verio.net>.
2405 Russell <mrussell-AT-verio.net>.
2400
2406
2401 2003-08-20 Fernando Perez <fperez@colorado.edu>
2407 2003-08-20 Fernando Perez <fperez@colorado.edu>
2402
2408
2403 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2409 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2404 printing so that it would print multi-line string forms starting
2410 printing so that it would print multi-line string forms starting
2405 with a new line. This way the formatting is better respected for
2411 with a new line. This way the formatting is better respected for
2406 objects which work hard to make nice string forms.
2412 objects which work hard to make nice string forms.
2407
2413
2408 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2414 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2409 autocall would overtake data access for objects with both
2415 autocall would overtake data access for objects with both
2410 __getitem__ and __call__.
2416 __getitem__ and __call__.
2411
2417
2412 2003-08-19 *** Released version 0.5.0-rc1
2418 2003-08-19 *** Released version 0.5.0-rc1
2413
2419
2414 2003-08-19 Fernando Perez <fperez@colorado.edu>
2420 2003-08-19 Fernando Perez <fperez@colorado.edu>
2415
2421
2416 * IPython/deep_reload.py (load_tail): single tiny change here
2422 * IPython/deep_reload.py (load_tail): single tiny change here
2417 seems to fix the long-standing bug of dreload() failing to work
2423 seems to fix the long-standing bug of dreload() failing to work
2418 for dotted names. But this module is pretty tricky, so I may have
2424 for dotted names. But this module is pretty tricky, so I may have
2419 missed some subtlety. Needs more testing!.
2425 missed some subtlety. Needs more testing!.
2420
2426
2421 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2427 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2422 exceptions which have badly implemented __str__ methods.
2428 exceptions which have badly implemented __str__ methods.
2423 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2429 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2424 which I've been getting reports about from Python 2.3 users. I
2430 which I've been getting reports about from Python 2.3 users. I
2425 wish I had a simple test case to reproduce the problem, so I could
2431 wish I had a simple test case to reproduce the problem, so I could
2426 either write a cleaner workaround or file a bug report if
2432 either write a cleaner workaround or file a bug report if
2427 necessary.
2433 necessary.
2428
2434
2429 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2435 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2430 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2436 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2431 a bug report by Tjabo Kloppenburg.
2437 a bug report by Tjabo Kloppenburg.
2432
2438
2433 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2439 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2434 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2440 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2435 seems rather unstable. Thanks to a bug report by Tjabo
2441 seems rather unstable. Thanks to a bug report by Tjabo
2436 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2442 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2437
2443
2438 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2444 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2439 this out soon because of the critical fixes in the inner loop for
2445 this out soon because of the critical fixes in the inner loop for
2440 generators.
2446 generators.
2441
2447
2442 * IPython/Magic.py (Magic.getargspec): removed. This (and
2448 * IPython/Magic.py (Magic.getargspec): removed. This (and
2443 _get_def) have been obsoleted by OInspect for a long time, I
2449 _get_def) have been obsoleted by OInspect for a long time, I
2444 hadn't noticed that they were dead code.
2450 hadn't noticed that they were dead code.
2445 (Magic._ofind): restored _ofind functionality for a few literals
2451 (Magic._ofind): restored _ofind functionality for a few literals
2446 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2452 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2447 for things like "hello".capitalize?, since that would require a
2453 for things like "hello".capitalize?, since that would require a
2448 potentially dangerous eval() again.
2454 potentially dangerous eval() again.
2449
2455
2450 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2456 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2451 logic a bit more to clean up the escapes handling and minimize the
2457 logic a bit more to clean up the escapes handling and minimize the
2452 use of _ofind to only necessary cases. The interactive 'feel' of
2458 use of _ofind to only necessary cases. The interactive 'feel' of
2453 IPython should have improved quite a bit with the changes in
2459 IPython should have improved quite a bit with the changes in
2454 _prefilter and _ofind (besides being far safer than before).
2460 _prefilter and _ofind (besides being far safer than before).
2455
2461
2456 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2462 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2457 obscure, never reported). Edit would fail to find the object to
2463 obscure, never reported). Edit would fail to find the object to
2458 edit under some circumstances.
2464 edit under some circumstances.
2459 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2465 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2460 which were causing double-calling of generators. Those eval calls
2466 which were causing double-calling of generators. Those eval calls
2461 were _very_ dangerous, since code with side effects could be
2467 were _very_ dangerous, since code with side effects could be
2462 triggered. As they say, 'eval is evil'... These were the
2468 triggered. As they say, 'eval is evil'... These were the
2463 nastiest evals in IPython. Besides, _ofind is now far simpler,
2469 nastiest evals in IPython. Besides, _ofind is now far simpler,
2464 and it should also be quite a bit faster. Its use of inspect is
2470 and it should also be quite a bit faster. Its use of inspect is
2465 also safer, so perhaps some of the inspect-related crashes I've
2471 also safer, so perhaps some of the inspect-related crashes I've
2466 seen lately with Python 2.3 might be taken care of. That will
2472 seen lately with Python 2.3 might be taken care of. That will
2467 need more testing.
2473 need more testing.
2468
2474
2469 2003-08-17 Fernando Perez <fperez@colorado.edu>
2475 2003-08-17 Fernando Perez <fperez@colorado.edu>
2470
2476
2471 * IPython/iplib.py (InteractiveShell._prefilter): significant
2477 * IPython/iplib.py (InteractiveShell._prefilter): significant
2472 simplifications to the logic for handling user escapes. Faster
2478 simplifications to the logic for handling user escapes. Faster
2473 and simpler code.
2479 and simpler code.
2474
2480
2475 2003-08-14 Fernando Perez <fperez@colorado.edu>
2481 2003-08-14 Fernando Perez <fperez@colorado.edu>
2476
2482
2477 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2483 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2478 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2484 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2479 but it should be quite a bit faster. And the recursive version
2485 but it should be quite a bit faster. And the recursive version
2480 generated O(log N) intermediate storage for all rank>1 arrays,
2486 generated O(log N) intermediate storage for all rank>1 arrays,
2481 even if they were contiguous.
2487 even if they were contiguous.
2482 (l1norm): Added this function.
2488 (l1norm): Added this function.
2483 (norm): Added this function for arbitrary norms (including
2489 (norm): Added this function for arbitrary norms (including
2484 l-infinity). l1 and l2 are still special cases for convenience
2490 l-infinity). l1 and l2 are still special cases for convenience
2485 and speed.
2491 and speed.
2486
2492
2487 2003-08-03 Fernando Perez <fperez@colorado.edu>
2493 2003-08-03 Fernando Perez <fperez@colorado.edu>
2488
2494
2489 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2495 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2490 exceptions, which now raise PendingDeprecationWarnings in Python
2496 exceptions, which now raise PendingDeprecationWarnings in Python
2491 2.3. There were some in Magic and some in Gnuplot2.
2497 2.3. There were some in Magic and some in Gnuplot2.
2492
2498
2493 2003-06-30 Fernando Perez <fperez@colorado.edu>
2499 2003-06-30 Fernando Perez <fperez@colorado.edu>
2494
2500
2495 * IPython/genutils.py (page): modified to call curses only for
2501 * IPython/genutils.py (page): modified to call curses only for
2496 terminals where TERM=='xterm'. After problems under many other
2502 terminals where TERM=='xterm'. After problems under many other
2497 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2503 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2498
2504
2499 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2505 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2500 would be triggered when readline was absent. This was just an old
2506 would be triggered when readline was absent. This was just an old
2501 debugging statement I'd forgotten to take out.
2507 debugging statement I'd forgotten to take out.
2502
2508
2503 2003-06-20 Fernando Perez <fperez@colorado.edu>
2509 2003-06-20 Fernando Perez <fperez@colorado.edu>
2504
2510
2505 * IPython/genutils.py (clock): modified to return only user time
2511 * IPython/genutils.py (clock): modified to return only user time
2506 (not counting system time), after a discussion on scipy. While
2512 (not counting system time), after a discussion on scipy. While
2507 system time may be a useful quantity occasionally, it may much
2513 system time may be a useful quantity occasionally, it may much
2508 more easily be skewed by occasional swapping or other similar
2514 more easily be skewed by occasional swapping or other similar
2509 activity.
2515 activity.
2510
2516
2511 2003-06-05 Fernando Perez <fperez@colorado.edu>
2517 2003-06-05 Fernando Perez <fperez@colorado.edu>
2512
2518
2513 * IPython/numutils.py (identity): new function, for building
2519 * IPython/numutils.py (identity): new function, for building
2514 arbitrary rank Kronecker deltas (mostly backwards compatible with
2520 arbitrary rank Kronecker deltas (mostly backwards compatible with
2515 Numeric.identity)
2521 Numeric.identity)
2516
2522
2517 2003-06-03 Fernando Perez <fperez@colorado.edu>
2523 2003-06-03 Fernando Perez <fperez@colorado.edu>
2518
2524
2519 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2525 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2520 arguments passed to magics with spaces, to allow trailing '\' to
2526 arguments passed to magics with spaces, to allow trailing '\' to
2521 work normally (mainly for Windows users).
2527 work normally (mainly for Windows users).
2522
2528
2523 2003-05-29 Fernando Perez <fperez@colorado.edu>
2529 2003-05-29 Fernando Perez <fperez@colorado.edu>
2524
2530
2525 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2531 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2526 instead of pydoc.help. This fixes a bizarre behavior where
2532 instead of pydoc.help. This fixes a bizarre behavior where
2527 printing '%s' % locals() would trigger the help system. Now
2533 printing '%s' % locals() would trigger the help system. Now
2528 ipython behaves like normal python does.
2534 ipython behaves like normal python does.
2529
2535
2530 Note that if one does 'from pydoc import help', the bizarre
2536 Note that if one does 'from pydoc import help', the bizarre
2531 behavior returns, but this will also happen in normal python, so
2537 behavior returns, but this will also happen in normal python, so
2532 it's not an ipython bug anymore (it has to do with how pydoc.help
2538 it's not an ipython bug anymore (it has to do with how pydoc.help
2533 is implemented).
2539 is implemented).
2534
2540
2535 2003-05-22 Fernando Perez <fperez@colorado.edu>
2541 2003-05-22 Fernando Perez <fperez@colorado.edu>
2536
2542
2537 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2543 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2538 return [] instead of None when nothing matches, also match to end
2544 return [] instead of None when nothing matches, also match to end
2539 of line. Patch by Gary Bishop.
2545 of line. Patch by Gary Bishop.
2540
2546
2541 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2547 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2542 protection as before, for files passed on the command line. This
2548 protection as before, for files passed on the command line. This
2543 prevents the CrashHandler from kicking in if user files call into
2549 prevents the CrashHandler from kicking in if user files call into
2544 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2550 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2545 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2551 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2546
2552
2547 2003-05-20 *** Released version 0.4.0
2553 2003-05-20 *** Released version 0.4.0
2548
2554
2549 2003-05-20 Fernando Perez <fperez@colorado.edu>
2555 2003-05-20 Fernando Perez <fperez@colorado.edu>
2550
2556
2551 * setup.py: added support for manpages. It's a bit hackish b/c of
2557 * setup.py: added support for manpages. It's a bit hackish b/c of
2552 a bug in the way the bdist_rpm distutils target handles gzipped
2558 a bug in the way the bdist_rpm distutils target handles gzipped
2553 manpages, but it works. After a patch by Jack.
2559 manpages, but it works. After a patch by Jack.
2554
2560
2555 2003-05-19 Fernando Perez <fperez@colorado.edu>
2561 2003-05-19 Fernando Perez <fperez@colorado.edu>
2556
2562
2557 * IPython/numutils.py: added a mockup of the kinds module, since
2563 * IPython/numutils.py: added a mockup of the kinds module, since
2558 it was recently removed from Numeric. This way, numutils will
2564 it was recently removed from Numeric. This way, numutils will
2559 work for all users even if they are missing kinds.
2565 work for all users even if they are missing kinds.
2560
2566
2561 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2567 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2562 failure, which can occur with SWIG-wrapped extensions. After a
2568 failure, which can occur with SWIG-wrapped extensions. After a
2563 crash report from Prabhu.
2569 crash report from Prabhu.
2564
2570
2565 2003-05-16 Fernando Perez <fperez@colorado.edu>
2571 2003-05-16 Fernando Perez <fperez@colorado.edu>
2566
2572
2567 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2573 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2568 protect ipython from user code which may call directly
2574 protect ipython from user code which may call directly
2569 sys.excepthook (this looks like an ipython crash to the user, even
2575 sys.excepthook (this looks like an ipython crash to the user, even
2570 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2576 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2571 This is especially important to help users of WxWindows, but may
2577 This is especially important to help users of WxWindows, but may
2572 also be useful in other cases.
2578 also be useful in other cases.
2573
2579
2574 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2580 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2575 an optional tb_offset to be specified, and to preserve exception
2581 an optional tb_offset to be specified, and to preserve exception
2576 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2582 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2577
2583
2578 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2584 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2579
2585
2580 2003-05-15 Fernando Perez <fperez@colorado.edu>
2586 2003-05-15 Fernando Perez <fperez@colorado.edu>
2581
2587
2582 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2588 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2583 installing for a new user under Windows.
2589 installing for a new user under Windows.
2584
2590
2585 2003-05-12 Fernando Perez <fperez@colorado.edu>
2591 2003-05-12 Fernando Perez <fperez@colorado.edu>
2586
2592
2587 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2593 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2588 handler for Emacs comint-based lines. Currently it doesn't do
2594 handler for Emacs comint-based lines. Currently it doesn't do
2589 much (but importantly, it doesn't update the history cache). In
2595 much (but importantly, it doesn't update the history cache). In
2590 the future it may be expanded if Alex needs more functionality
2596 the future it may be expanded if Alex needs more functionality
2591 there.
2597 there.
2592
2598
2593 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2599 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2594 info to crash reports.
2600 info to crash reports.
2595
2601
2596 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2602 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2597 just like Python's -c. Also fixed crash with invalid -color
2603 just like Python's -c. Also fixed crash with invalid -color
2598 option value at startup. Thanks to Will French
2604 option value at startup. Thanks to Will French
2599 <wfrench-AT-bestweb.net> for the bug report.
2605 <wfrench-AT-bestweb.net> for the bug report.
2600
2606
2601 2003-05-09 Fernando Perez <fperez@colorado.edu>
2607 2003-05-09 Fernando Perez <fperez@colorado.edu>
2602
2608
2603 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2609 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2604 to EvalDict (it's a mapping, after all) and simplified its code
2610 to EvalDict (it's a mapping, after all) and simplified its code
2605 quite a bit, after a nice discussion on c.l.py where Gustavo
2611 quite a bit, after a nice discussion on c.l.py where Gustavo
2606 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2612 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2607
2613
2608 2003-04-30 Fernando Perez <fperez@colorado.edu>
2614 2003-04-30 Fernando Perez <fperez@colorado.edu>
2609
2615
2610 * IPython/genutils.py (timings_out): modified it to reduce its
2616 * IPython/genutils.py (timings_out): modified it to reduce its
2611 overhead in the common reps==1 case.
2617 overhead in the common reps==1 case.
2612
2618
2613 2003-04-29 Fernando Perez <fperez@colorado.edu>
2619 2003-04-29 Fernando Perez <fperez@colorado.edu>
2614
2620
2615 * IPython/genutils.py (timings_out): Modified to use the resource
2621 * IPython/genutils.py (timings_out): Modified to use the resource
2616 module, which avoids the wraparound problems of time.clock().
2622 module, which avoids the wraparound problems of time.clock().
2617
2623
2618 2003-04-17 *** Released version 0.2.15pre4
2624 2003-04-17 *** Released version 0.2.15pre4
2619
2625
2620 2003-04-17 Fernando Perez <fperez@colorado.edu>
2626 2003-04-17 Fernando Perez <fperez@colorado.edu>
2621
2627
2622 * setup.py (scriptfiles): Split windows-specific stuff over to a
2628 * setup.py (scriptfiles): Split windows-specific stuff over to a
2623 separate file, in an attempt to have a Windows GUI installer.
2629 separate file, in an attempt to have a Windows GUI installer.
2624 That didn't work, but part of the groundwork is done.
2630 That didn't work, but part of the groundwork is done.
2625
2631
2626 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2632 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2627 indent/unindent with 4 spaces. Particularly useful in combination
2633 indent/unindent with 4 spaces. Particularly useful in combination
2628 with the new auto-indent option.
2634 with the new auto-indent option.
2629
2635
2630 2003-04-16 Fernando Perez <fperez@colorado.edu>
2636 2003-04-16 Fernando Perez <fperez@colorado.edu>
2631
2637
2632 * IPython/Magic.py: various replacements of self.rc for
2638 * IPython/Magic.py: various replacements of self.rc for
2633 self.shell.rc. A lot more remains to be done to fully disentangle
2639 self.shell.rc. A lot more remains to be done to fully disentangle
2634 this class from the main Shell class.
2640 this class from the main Shell class.
2635
2641
2636 * IPython/GnuplotRuntime.py: added checks for mouse support so
2642 * IPython/GnuplotRuntime.py: added checks for mouse support so
2637 that we don't try to enable it if the current gnuplot doesn't
2643 that we don't try to enable it if the current gnuplot doesn't
2638 really support it. Also added checks so that we don't try to
2644 really support it. Also added checks so that we don't try to
2639 enable persist under Windows (where Gnuplot doesn't recognize the
2645 enable persist under Windows (where Gnuplot doesn't recognize the
2640 option).
2646 option).
2641
2647
2642 * IPython/iplib.py (InteractiveShell.interact): Added optional
2648 * IPython/iplib.py (InteractiveShell.interact): Added optional
2643 auto-indenting code, after a patch by King C. Shu
2649 auto-indenting code, after a patch by King C. Shu
2644 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2650 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2645 get along well with pasting indented code. If I ever figure out
2651 get along well with pasting indented code. If I ever figure out
2646 how to make that part go well, it will become on by default.
2652 how to make that part go well, it will become on by default.
2647
2653
2648 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2654 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2649 crash ipython if there was an unmatched '%' in the user's prompt
2655 crash ipython if there was an unmatched '%' in the user's prompt
2650 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2656 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2651
2657
2652 * IPython/iplib.py (InteractiveShell.interact): removed the
2658 * IPython/iplib.py (InteractiveShell.interact): removed the
2653 ability to ask the user whether he wants to crash or not at the
2659 ability to ask the user whether he wants to crash or not at the
2654 'last line' exception handler. Calling functions at that point
2660 'last line' exception handler. Calling functions at that point
2655 changes the stack, and the error reports would have incorrect
2661 changes the stack, and the error reports would have incorrect
2656 tracebacks.
2662 tracebacks.
2657
2663
2658 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2664 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2659 pass through a peger a pretty-printed form of any object. After a
2665 pass through a peger a pretty-printed form of any object. After a
2660 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2666 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2661
2667
2662 2003-04-14 Fernando Perez <fperez@colorado.edu>
2668 2003-04-14 Fernando Perez <fperez@colorado.edu>
2663
2669
2664 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2670 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2665 all files in ~ would be modified at first install (instead of
2671 all files in ~ would be modified at first install (instead of
2666 ~/.ipython). This could be potentially disastrous, as the
2672 ~/.ipython). This could be potentially disastrous, as the
2667 modification (make line-endings native) could damage binary files.
2673 modification (make line-endings native) could damage binary files.
2668
2674
2669 2003-04-10 Fernando Perez <fperez@colorado.edu>
2675 2003-04-10 Fernando Perez <fperez@colorado.edu>
2670
2676
2671 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2677 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2672 handle only lines which are invalid python. This now means that
2678 handle only lines which are invalid python. This now means that
2673 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2679 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2674 for the bug report.
2680 for the bug report.
2675
2681
2676 2003-04-01 Fernando Perez <fperez@colorado.edu>
2682 2003-04-01 Fernando Perez <fperez@colorado.edu>
2677
2683
2678 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2684 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2679 where failing to set sys.last_traceback would crash pdb.pm().
2685 where failing to set sys.last_traceback would crash pdb.pm().
2680 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2686 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2681 report.
2687 report.
2682
2688
2683 2003-03-25 Fernando Perez <fperez@colorado.edu>
2689 2003-03-25 Fernando Perez <fperez@colorado.edu>
2684
2690
2685 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2691 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2686 before printing it (it had a lot of spurious blank lines at the
2692 before printing it (it had a lot of spurious blank lines at the
2687 end).
2693 end).
2688
2694
2689 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2695 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2690 output would be sent 21 times! Obviously people don't use this
2696 output would be sent 21 times! Obviously people don't use this
2691 too often, or I would have heard about it.
2697 too often, or I would have heard about it.
2692
2698
2693 2003-03-24 Fernando Perez <fperez@colorado.edu>
2699 2003-03-24 Fernando Perez <fperez@colorado.edu>
2694
2700
2695 * setup.py (scriptfiles): renamed the data_files parameter from
2701 * setup.py (scriptfiles): renamed the data_files parameter from
2696 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2702 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2697 for the patch.
2703 for the patch.
2698
2704
2699 2003-03-20 Fernando Perez <fperez@colorado.edu>
2705 2003-03-20 Fernando Perez <fperez@colorado.edu>
2700
2706
2701 * IPython/genutils.py (error): added error() and fatal()
2707 * IPython/genutils.py (error): added error() and fatal()
2702 functions.
2708 functions.
2703
2709
2704 2003-03-18 *** Released version 0.2.15pre3
2710 2003-03-18 *** Released version 0.2.15pre3
2705
2711
2706 2003-03-18 Fernando Perez <fperez@colorado.edu>
2712 2003-03-18 Fernando Perez <fperez@colorado.edu>
2707
2713
2708 * setupext/install_data_ext.py
2714 * setupext/install_data_ext.py
2709 (install_data_ext.initialize_options): Class contributed by Jack
2715 (install_data_ext.initialize_options): Class contributed by Jack
2710 Moffit for fixing the old distutils hack. He is sending this to
2716 Moffit for fixing the old distutils hack. He is sending this to
2711 the distutils folks so in the future we may not need it as a
2717 the distutils folks so in the future we may not need it as a
2712 private fix.
2718 private fix.
2713
2719
2714 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2720 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2715 changes for Debian packaging. See his patch for full details.
2721 changes for Debian packaging. See his patch for full details.
2716 The old distutils hack of making the ipythonrc* files carry a
2722 The old distutils hack of making the ipythonrc* files carry a
2717 bogus .py extension is gone, at last. Examples were moved to a
2723 bogus .py extension is gone, at last. Examples were moved to a
2718 separate subdir under doc/, and the separate executable scripts
2724 separate subdir under doc/, and the separate executable scripts
2719 now live in their own directory. Overall a great cleanup. The
2725 now live in their own directory. Overall a great cleanup. The
2720 manual was updated to use the new files, and setup.py has been
2726 manual was updated to use the new files, and setup.py has been
2721 fixed for this setup.
2727 fixed for this setup.
2722
2728
2723 * IPython/PyColorize.py (Parser.usage): made non-executable and
2729 * IPython/PyColorize.py (Parser.usage): made non-executable and
2724 created a pycolor wrapper around it to be included as a script.
2730 created a pycolor wrapper around it to be included as a script.
2725
2731
2726 2003-03-12 *** Released version 0.2.15pre2
2732 2003-03-12 *** Released version 0.2.15pre2
2727
2733
2728 2003-03-12 Fernando Perez <fperez@colorado.edu>
2734 2003-03-12 Fernando Perez <fperez@colorado.edu>
2729
2735
2730 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2736 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2731 long-standing problem with garbage characters in some terminals.
2737 long-standing problem with garbage characters in some terminals.
2732 The issue was really that the \001 and \002 escapes must _only_ be
2738 The issue was really that the \001 and \002 escapes must _only_ be
2733 passed to input prompts (which call readline), but _never_ to
2739 passed to input prompts (which call readline), but _never_ to
2734 normal text to be printed on screen. I changed ColorANSI to have
2740 normal text to be printed on screen. I changed ColorANSI to have
2735 two classes: TermColors and InputTermColors, each with the
2741 two classes: TermColors and InputTermColors, each with the
2736 appropriate escapes for input prompts or normal text. The code in
2742 appropriate escapes for input prompts or normal text. The code in
2737 Prompts.py got slightly more complicated, but this very old and
2743 Prompts.py got slightly more complicated, but this very old and
2738 annoying bug is finally fixed.
2744 annoying bug is finally fixed.
2739
2745
2740 All the credit for nailing down the real origin of this problem
2746 All the credit for nailing down the real origin of this problem
2741 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2747 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2742 *Many* thanks to him for spending quite a bit of effort on this.
2748 *Many* thanks to him for spending quite a bit of effort on this.
2743
2749
2744 2003-03-05 *** Released version 0.2.15pre1
2750 2003-03-05 *** Released version 0.2.15pre1
2745
2751
2746 2003-03-03 Fernando Perez <fperez@colorado.edu>
2752 2003-03-03 Fernando Perez <fperez@colorado.edu>
2747
2753
2748 * IPython/FakeModule.py: Moved the former _FakeModule to a
2754 * IPython/FakeModule.py: Moved the former _FakeModule to a
2749 separate file, because it's also needed by Magic (to fix a similar
2755 separate file, because it's also needed by Magic (to fix a similar
2750 pickle-related issue in @run).
2756 pickle-related issue in @run).
2751
2757
2752 2003-03-02 Fernando Perez <fperez@colorado.edu>
2758 2003-03-02 Fernando Perez <fperez@colorado.edu>
2753
2759
2754 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2760 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2755 the autocall option at runtime.
2761 the autocall option at runtime.
2756 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2762 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2757 across Magic.py to start separating Magic from InteractiveShell.
2763 across Magic.py to start separating Magic from InteractiveShell.
2758 (Magic._ofind): Fixed to return proper namespace for dotted
2764 (Magic._ofind): Fixed to return proper namespace for dotted
2759 names. Before, a dotted name would always return 'not currently
2765 names. Before, a dotted name would always return 'not currently
2760 defined', because it would find the 'parent'. s.x would be found,
2766 defined', because it would find the 'parent'. s.x would be found,
2761 but since 'x' isn't defined by itself, it would get confused.
2767 but since 'x' isn't defined by itself, it would get confused.
2762 (Magic.magic_run): Fixed pickling problems reported by Ralf
2768 (Magic.magic_run): Fixed pickling problems reported by Ralf
2763 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2769 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2764 that I'd used when Mike Heeter reported similar issues at the
2770 that I'd used when Mike Heeter reported similar issues at the
2765 top-level, but now for @run. It boils down to injecting the
2771 top-level, but now for @run. It boils down to injecting the
2766 namespace where code is being executed with something that looks
2772 namespace where code is being executed with something that looks
2767 enough like a module to fool pickle.dump(). Since a pickle stores
2773 enough like a module to fool pickle.dump(). Since a pickle stores
2768 a named reference to the importing module, we need this for
2774 a named reference to the importing module, we need this for
2769 pickles to save something sensible.
2775 pickles to save something sensible.
2770
2776
2771 * IPython/ipmaker.py (make_IPython): added an autocall option.
2777 * IPython/ipmaker.py (make_IPython): added an autocall option.
2772
2778
2773 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2779 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2774 the auto-eval code. Now autocalling is an option, and the code is
2780 the auto-eval code. Now autocalling is an option, and the code is
2775 also vastly safer. There is no more eval() involved at all.
2781 also vastly safer. There is no more eval() involved at all.
2776
2782
2777 2003-03-01 Fernando Perez <fperez@colorado.edu>
2783 2003-03-01 Fernando Perez <fperez@colorado.edu>
2778
2784
2779 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2785 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2780 dict with named keys instead of a tuple.
2786 dict with named keys instead of a tuple.
2781
2787
2782 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2788 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2783
2789
2784 * setup.py (make_shortcut): Fixed message about directories
2790 * setup.py (make_shortcut): Fixed message about directories
2785 created during Windows installation (the directories were ok, just
2791 created during Windows installation (the directories were ok, just
2786 the printed message was misleading). Thanks to Chris Liechti
2792 the printed message was misleading). Thanks to Chris Liechti
2787 <cliechti-AT-gmx.net> for the heads up.
2793 <cliechti-AT-gmx.net> for the heads up.
2788
2794
2789 2003-02-21 Fernando Perez <fperez@colorado.edu>
2795 2003-02-21 Fernando Perez <fperez@colorado.edu>
2790
2796
2791 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2797 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2792 of ValueError exception when checking for auto-execution. This
2798 of ValueError exception when checking for auto-execution. This
2793 one is raised by things like Numeric arrays arr.flat when the
2799 one is raised by things like Numeric arrays arr.flat when the
2794 array is non-contiguous.
2800 array is non-contiguous.
2795
2801
2796 2003-01-31 Fernando Perez <fperez@colorado.edu>
2802 2003-01-31 Fernando Perez <fperez@colorado.edu>
2797
2803
2798 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2804 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2799 not return any value at all (even though the command would get
2805 not return any value at all (even though the command would get
2800 executed).
2806 executed).
2801 (xsys): Flush stdout right after printing the command to ensure
2807 (xsys): Flush stdout right after printing the command to ensure
2802 proper ordering of commands and command output in the total
2808 proper ordering of commands and command output in the total
2803 output.
2809 output.
2804 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2810 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2805 system/getoutput as defaults. The old ones are kept for
2811 system/getoutput as defaults. The old ones are kept for
2806 compatibility reasons, so no code which uses this library needs
2812 compatibility reasons, so no code which uses this library needs
2807 changing.
2813 changing.
2808
2814
2809 2003-01-27 *** Released version 0.2.14
2815 2003-01-27 *** Released version 0.2.14
2810
2816
2811 2003-01-25 Fernando Perez <fperez@colorado.edu>
2817 2003-01-25 Fernando Perez <fperez@colorado.edu>
2812
2818
2813 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2819 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2814 functions defined in previous edit sessions could not be re-edited
2820 functions defined in previous edit sessions could not be re-edited
2815 (because the temp files were immediately removed). Now temp files
2821 (because the temp files were immediately removed). Now temp files
2816 are removed only at IPython's exit.
2822 are removed only at IPython's exit.
2817 (Magic.magic_run): Improved @run to perform shell-like expansions
2823 (Magic.magic_run): Improved @run to perform shell-like expansions
2818 on its arguments (~users and $VARS). With this, @run becomes more
2824 on its arguments (~users and $VARS). With this, @run becomes more
2819 like a normal command-line.
2825 like a normal command-line.
2820
2826
2821 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2827 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2822 bugs related to embedding and cleaned up that code. A fairly
2828 bugs related to embedding and cleaned up that code. A fairly
2823 important one was the impossibility to access the global namespace
2829 important one was the impossibility to access the global namespace
2824 through the embedded IPython (only local variables were visible).
2830 through the embedded IPython (only local variables were visible).
2825
2831
2826 2003-01-14 Fernando Perez <fperez@colorado.edu>
2832 2003-01-14 Fernando Perez <fperez@colorado.edu>
2827
2833
2828 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2834 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2829 auto-calling to be a bit more conservative. Now it doesn't get
2835 auto-calling to be a bit more conservative. Now it doesn't get
2830 triggered if any of '!=()<>' are in the rest of the input line, to
2836 triggered if any of '!=()<>' are in the rest of the input line, to
2831 allow comparing callables. Thanks to Alex for the heads up.
2837 allow comparing callables. Thanks to Alex for the heads up.
2832
2838
2833 2003-01-07 Fernando Perez <fperez@colorado.edu>
2839 2003-01-07 Fernando Perez <fperez@colorado.edu>
2834
2840
2835 * IPython/genutils.py (page): fixed estimation of the number of
2841 * IPython/genutils.py (page): fixed estimation of the number of
2836 lines in a string to be paged to simply count newlines. This
2842 lines in a string to be paged to simply count newlines. This
2837 prevents over-guessing due to embedded escape sequences. A better
2843 prevents over-guessing due to embedded escape sequences. A better
2838 long-term solution would involve stripping out the control chars
2844 long-term solution would involve stripping out the control chars
2839 for the count, but it's potentially so expensive I just don't
2845 for the count, but it's potentially so expensive I just don't
2840 think it's worth doing.
2846 think it's worth doing.
2841
2847
2842 2002-12-19 *** Released version 0.2.14pre50
2848 2002-12-19 *** Released version 0.2.14pre50
2843
2849
2844 2002-12-19 Fernando Perez <fperez@colorado.edu>
2850 2002-12-19 Fernando Perez <fperez@colorado.edu>
2845
2851
2846 * tools/release (version): Changed release scripts to inform
2852 * tools/release (version): Changed release scripts to inform
2847 Andrea and build a NEWS file with a list of recent changes.
2853 Andrea and build a NEWS file with a list of recent changes.
2848
2854
2849 * IPython/ColorANSI.py (__all__): changed terminal detection
2855 * IPython/ColorANSI.py (__all__): changed terminal detection
2850 code. Seems to work better for xterms without breaking
2856 code. Seems to work better for xterms without breaking
2851 konsole. Will need more testing to determine if WinXP and Mac OSX
2857 konsole. Will need more testing to determine if WinXP and Mac OSX
2852 also work ok.
2858 also work ok.
2853
2859
2854 2002-12-18 *** Released version 0.2.14pre49
2860 2002-12-18 *** Released version 0.2.14pre49
2855
2861
2856 2002-12-18 Fernando Perez <fperez@colorado.edu>
2862 2002-12-18 Fernando Perez <fperez@colorado.edu>
2857
2863
2858 * Docs: added new info about Mac OSX, from Andrea.
2864 * Docs: added new info about Mac OSX, from Andrea.
2859
2865
2860 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2866 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2861 allow direct plotting of python strings whose format is the same
2867 allow direct plotting of python strings whose format is the same
2862 of gnuplot data files.
2868 of gnuplot data files.
2863
2869
2864 2002-12-16 Fernando Perez <fperez@colorado.edu>
2870 2002-12-16 Fernando Perez <fperez@colorado.edu>
2865
2871
2866 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2872 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2867 value of exit question to be acknowledged.
2873 value of exit question to be acknowledged.
2868
2874
2869 2002-12-03 Fernando Perez <fperez@colorado.edu>
2875 2002-12-03 Fernando Perez <fperez@colorado.edu>
2870
2876
2871 * IPython/ipmaker.py: removed generators, which had been added
2877 * IPython/ipmaker.py: removed generators, which had been added
2872 by mistake in an earlier debugging run. This was causing trouble
2878 by mistake in an earlier debugging run. This was causing trouble
2873 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2879 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2874 for pointing this out.
2880 for pointing this out.
2875
2881
2876 2002-11-17 Fernando Perez <fperez@colorado.edu>
2882 2002-11-17 Fernando Perez <fperez@colorado.edu>
2877
2883
2878 * Manual: updated the Gnuplot section.
2884 * Manual: updated the Gnuplot section.
2879
2885
2880 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2886 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2881 a much better split of what goes in Runtime and what goes in
2887 a much better split of what goes in Runtime and what goes in
2882 Interactive.
2888 Interactive.
2883
2889
2884 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2890 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2885 being imported from iplib.
2891 being imported from iplib.
2886
2892
2887 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2893 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2888 for command-passing. Now the global Gnuplot instance is called
2894 for command-passing. Now the global Gnuplot instance is called
2889 'gp' instead of 'g', which was really a far too fragile and
2895 'gp' instead of 'g', which was really a far too fragile and
2890 common name.
2896 common name.
2891
2897
2892 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2898 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2893 bounding boxes generated by Gnuplot for square plots.
2899 bounding boxes generated by Gnuplot for square plots.
2894
2900
2895 * IPython/genutils.py (popkey): new function added. I should
2901 * IPython/genutils.py (popkey): new function added. I should
2896 suggest this on c.l.py as a dict method, it seems useful.
2902 suggest this on c.l.py as a dict method, it seems useful.
2897
2903
2898 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2904 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2899 to transparently handle PostScript generation. MUCH better than
2905 to transparently handle PostScript generation. MUCH better than
2900 the previous plot_eps/replot_eps (which I removed now). The code
2906 the previous plot_eps/replot_eps (which I removed now). The code
2901 is also fairly clean and well documented now (including
2907 is also fairly clean and well documented now (including
2902 docstrings).
2908 docstrings).
2903
2909
2904 2002-11-13 Fernando Perez <fperez@colorado.edu>
2910 2002-11-13 Fernando Perez <fperez@colorado.edu>
2905
2911
2906 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2912 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2907 (inconsistent with options).
2913 (inconsistent with options).
2908
2914
2909 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2915 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2910 manually disabled, I don't know why. Fixed it.
2916 manually disabled, I don't know why. Fixed it.
2911 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2917 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2912 eps output.
2918 eps output.
2913
2919
2914 2002-11-12 Fernando Perez <fperez@colorado.edu>
2920 2002-11-12 Fernando Perez <fperez@colorado.edu>
2915
2921
2916 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2922 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2917 don't propagate up to caller. Fixes crash reported by François
2923 don't propagate up to caller. Fixes crash reported by François
2918 Pinard.
2924 Pinard.
2919
2925
2920 2002-11-09 Fernando Perez <fperez@colorado.edu>
2926 2002-11-09 Fernando Perez <fperez@colorado.edu>
2921
2927
2922 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2928 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2923 history file for new users.
2929 history file for new users.
2924 (make_IPython): fixed bug where initial install would leave the
2930 (make_IPython): fixed bug where initial install would leave the
2925 user running in the .ipython dir.
2931 user running in the .ipython dir.
2926 (make_IPython): fixed bug where config dir .ipython would be
2932 (make_IPython): fixed bug where config dir .ipython would be
2927 created regardless of the given -ipythondir option. Thanks to Cory
2933 created regardless of the given -ipythondir option. Thanks to Cory
2928 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2934 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2929
2935
2930 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2936 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2931 type confirmations. Will need to use it in all of IPython's code
2937 type confirmations. Will need to use it in all of IPython's code
2932 consistently.
2938 consistently.
2933
2939
2934 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2940 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2935 context to print 31 lines instead of the default 5. This will make
2941 context to print 31 lines instead of the default 5. This will make
2936 the crash reports extremely detailed in case the problem is in
2942 the crash reports extremely detailed in case the problem is in
2937 libraries I don't have access to.
2943 libraries I don't have access to.
2938
2944
2939 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2945 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2940 line of defense' code to still crash, but giving users fair
2946 line of defense' code to still crash, but giving users fair
2941 warning. I don't want internal errors to go unreported: if there's
2947 warning. I don't want internal errors to go unreported: if there's
2942 an internal problem, IPython should crash and generate a full
2948 an internal problem, IPython should crash and generate a full
2943 report.
2949 report.
2944
2950
2945 2002-11-08 Fernando Perez <fperez@colorado.edu>
2951 2002-11-08 Fernando Perez <fperez@colorado.edu>
2946
2952
2947 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2953 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2948 otherwise uncaught exceptions which can appear if people set
2954 otherwise uncaught exceptions which can appear if people set
2949 sys.stdout to something badly broken. Thanks to a crash report
2955 sys.stdout to something badly broken. Thanks to a crash report
2950 from henni-AT-mail.brainbot.com.
2956 from henni-AT-mail.brainbot.com.
2951
2957
2952 2002-11-04 Fernando Perez <fperez@colorado.edu>
2958 2002-11-04 Fernando Perez <fperez@colorado.edu>
2953
2959
2954 * IPython/iplib.py (InteractiveShell.interact): added
2960 * IPython/iplib.py (InteractiveShell.interact): added
2955 __IPYTHON__active to the builtins. It's a flag which goes on when
2961 __IPYTHON__active to the builtins. It's a flag which goes on when
2956 the interaction starts and goes off again when it stops. This
2962 the interaction starts and goes off again when it stops. This
2957 allows embedding code to detect being inside IPython. Before this
2963 allows embedding code to detect being inside IPython. Before this
2958 was done via __IPYTHON__, but that only shows that an IPython
2964 was done via __IPYTHON__, but that only shows that an IPython
2959 instance has been created.
2965 instance has been created.
2960
2966
2961 * IPython/Magic.py (Magic.magic_env): I realized that in a
2967 * IPython/Magic.py (Magic.magic_env): I realized that in a
2962 UserDict, instance.data holds the data as a normal dict. So I
2968 UserDict, instance.data holds the data as a normal dict. So I
2963 modified @env to return os.environ.data instead of rebuilding a
2969 modified @env to return os.environ.data instead of rebuilding a
2964 dict by hand.
2970 dict by hand.
2965
2971
2966 2002-11-02 Fernando Perez <fperez@colorado.edu>
2972 2002-11-02 Fernando Perez <fperez@colorado.edu>
2967
2973
2968 * IPython/genutils.py (warn): changed so that level 1 prints no
2974 * IPython/genutils.py (warn): changed so that level 1 prints no
2969 header. Level 2 is now the default (with 'WARNING' header, as
2975 header. Level 2 is now the default (with 'WARNING' header, as
2970 before). I think I tracked all places where changes were needed in
2976 before). I think I tracked all places where changes were needed in
2971 IPython, but outside code using the old level numbering may have
2977 IPython, but outside code using the old level numbering may have
2972 broken.
2978 broken.
2973
2979
2974 * IPython/iplib.py (InteractiveShell.runcode): added this to
2980 * IPython/iplib.py (InteractiveShell.runcode): added this to
2975 handle the tracebacks in SystemExit traps correctly. The previous
2981 handle the tracebacks in SystemExit traps correctly. The previous
2976 code (through interact) was printing more of the stack than
2982 code (through interact) was printing more of the stack than
2977 necessary, showing IPython internal code to the user.
2983 necessary, showing IPython internal code to the user.
2978
2984
2979 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
2985 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
2980 default. Now that the default at the confirmation prompt is yes,
2986 default. Now that the default at the confirmation prompt is yes,
2981 it's not so intrusive. François' argument that ipython sessions
2987 it's not so intrusive. François' argument that ipython sessions
2982 tend to be complex enough not to lose them from an accidental C-d,
2988 tend to be complex enough not to lose them from an accidental C-d,
2983 is a valid one.
2989 is a valid one.
2984
2990
2985 * IPython/iplib.py (InteractiveShell.interact): added a
2991 * IPython/iplib.py (InteractiveShell.interact): added a
2986 showtraceback() call to the SystemExit trap, and modified the exit
2992 showtraceback() call to the SystemExit trap, and modified the exit
2987 confirmation to have yes as the default.
2993 confirmation to have yes as the default.
2988
2994
2989 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
2995 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
2990 this file. It's been gone from the code for a long time, this was
2996 this file. It's been gone from the code for a long time, this was
2991 simply leftover junk.
2997 simply leftover junk.
2992
2998
2993 2002-11-01 Fernando Perez <fperez@colorado.edu>
2999 2002-11-01 Fernando Perez <fperez@colorado.edu>
2994
3000
2995 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3001 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
2996 added. If set, IPython now traps EOF and asks for
3002 added. If set, IPython now traps EOF and asks for
2997 confirmation. After a request by François Pinard.
3003 confirmation. After a request by François Pinard.
2998
3004
2999 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3005 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3000 of @abort, and with a new (better) mechanism for handling the
3006 of @abort, and with a new (better) mechanism for handling the
3001 exceptions.
3007 exceptions.
3002
3008
3003 2002-10-27 Fernando Perez <fperez@colorado.edu>
3009 2002-10-27 Fernando Perez <fperez@colorado.edu>
3004
3010
3005 * IPython/usage.py (__doc__): updated the --help information and
3011 * IPython/usage.py (__doc__): updated the --help information and
3006 the ipythonrc file to indicate that -log generates
3012 the ipythonrc file to indicate that -log generates
3007 ./ipython.log. Also fixed the corresponding info in @logstart.
3013 ./ipython.log. Also fixed the corresponding info in @logstart.
3008 This and several other fixes in the manuals thanks to reports by
3014 This and several other fixes in the manuals thanks to reports by
3009 François Pinard <pinard-AT-iro.umontreal.ca>.
3015 François Pinard <pinard-AT-iro.umontreal.ca>.
3010
3016
3011 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3017 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3012 refer to @logstart (instead of @log, which doesn't exist).
3018 refer to @logstart (instead of @log, which doesn't exist).
3013
3019
3014 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3020 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3015 AttributeError crash. Thanks to Christopher Armstrong
3021 AttributeError crash. Thanks to Christopher Armstrong
3016 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3022 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3017 introduced recently (in 0.2.14pre37) with the fix to the eval
3023 introduced recently (in 0.2.14pre37) with the fix to the eval
3018 problem mentioned below.
3024 problem mentioned below.
3019
3025
3020 2002-10-17 Fernando Perez <fperez@colorado.edu>
3026 2002-10-17 Fernando Perez <fperez@colorado.edu>
3021
3027
3022 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3028 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3023 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3029 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3024
3030
3025 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3031 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3026 this function to fix a problem reported by Alex Schmolck. He saw
3032 this function to fix a problem reported by Alex Schmolck. He saw
3027 it with list comprehensions and generators, which were getting
3033 it with list comprehensions and generators, which were getting
3028 called twice. The real problem was an 'eval' call in testing for
3034 called twice. The real problem was an 'eval' call in testing for
3029 automagic which was evaluating the input line silently.
3035 automagic which was evaluating the input line silently.
3030
3036
3031 This is a potentially very nasty bug, if the input has side
3037 This is a potentially very nasty bug, if the input has side
3032 effects which must not be repeated. The code is much cleaner now,
3038 effects which must not be repeated. The code is much cleaner now,
3033 without any blanket 'except' left and with a regexp test for
3039 without any blanket 'except' left and with a regexp test for
3034 actual function names.
3040 actual function names.
3035
3041
3036 But an eval remains, which I'm not fully comfortable with. I just
3042 But an eval remains, which I'm not fully comfortable with. I just
3037 don't know how to find out if an expression could be a callable in
3043 don't know how to find out if an expression could be a callable in
3038 the user's namespace without doing an eval on the string. However
3044 the user's namespace without doing an eval on the string. However
3039 that string is now much more strictly checked so that no code
3045 that string is now much more strictly checked so that no code
3040 slips by, so the eval should only happen for things that can
3046 slips by, so the eval should only happen for things that can
3041 really be only function/method names.
3047 really be only function/method names.
3042
3048
3043 2002-10-15 Fernando Perez <fperez@colorado.edu>
3049 2002-10-15 Fernando Perez <fperez@colorado.edu>
3044
3050
3045 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3051 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3046 OSX information to main manual, removed README_Mac_OSX file from
3052 OSX information to main manual, removed README_Mac_OSX file from
3047 distribution. Also updated credits for recent additions.
3053 distribution. Also updated credits for recent additions.
3048
3054
3049 2002-10-10 Fernando Perez <fperez@colorado.edu>
3055 2002-10-10 Fernando Perez <fperez@colorado.edu>
3050
3056
3051 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3057 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3052 terminal-related issues. Many thanks to Andrea Riciputi
3058 terminal-related issues. Many thanks to Andrea Riciputi
3053 <andrea.riciputi-AT-libero.it> for writing it.
3059 <andrea.riciputi-AT-libero.it> for writing it.
3054
3060
3055 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3061 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3056 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3062 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3057
3063
3058 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3064 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3059 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3065 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3060 <syver-en-AT-online.no> who both submitted patches for this problem.
3066 <syver-en-AT-online.no> who both submitted patches for this problem.
3061
3067
3062 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3068 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3063 global embedding to make sure that things don't overwrite user
3069 global embedding to make sure that things don't overwrite user
3064 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3070 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3065
3071
3066 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3072 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3067 compatibility. Thanks to Hayden Callow
3073 compatibility. Thanks to Hayden Callow
3068 <h.callow-AT-elec.canterbury.ac.nz>
3074 <h.callow-AT-elec.canterbury.ac.nz>
3069
3075
3070 2002-10-04 Fernando Perez <fperez@colorado.edu>
3076 2002-10-04 Fernando Perez <fperez@colorado.edu>
3071
3077
3072 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3078 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3073 Gnuplot.File objects.
3079 Gnuplot.File objects.
3074
3080
3075 2002-07-23 Fernando Perez <fperez@colorado.edu>
3081 2002-07-23 Fernando Perez <fperez@colorado.edu>
3076
3082
3077 * IPython/genutils.py (timing): Added timings() and timing() for
3083 * IPython/genutils.py (timing): Added timings() and timing() for
3078 quick access to the most commonly needed data, the execution
3084 quick access to the most commonly needed data, the execution
3079 times. Old timing() renamed to timings_out().
3085 times. Old timing() renamed to timings_out().
3080
3086
3081 2002-07-18 Fernando Perez <fperez@colorado.edu>
3087 2002-07-18 Fernando Perez <fperez@colorado.edu>
3082
3088
3083 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3089 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3084 bug with nested instances disrupting the parent's tab completion.
3090 bug with nested instances disrupting the parent's tab completion.
3085
3091
3086 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3092 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3087 all_completions code to begin the emacs integration.
3093 all_completions code to begin the emacs integration.
3088
3094
3089 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3095 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3090 argument to allow titling individual arrays when plotting.
3096 argument to allow titling individual arrays when plotting.
3091
3097
3092 2002-07-15 Fernando Perez <fperez@colorado.edu>
3098 2002-07-15 Fernando Perez <fperez@colorado.edu>
3093
3099
3094 * setup.py (make_shortcut): changed to retrieve the value of
3100 * setup.py (make_shortcut): changed to retrieve the value of
3095 'Program Files' directory from the registry (this value changes in
3101 'Program Files' directory from the registry (this value changes in
3096 non-english versions of Windows). Thanks to Thomas Fanslau
3102 non-english versions of Windows). Thanks to Thomas Fanslau
3097 <tfanslau-AT-gmx.de> for the report.
3103 <tfanslau-AT-gmx.de> for the report.
3098
3104
3099 2002-07-10 Fernando Perez <fperez@colorado.edu>
3105 2002-07-10 Fernando Perez <fperez@colorado.edu>
3100
3106
3101 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3107 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3102 a bug in pdb, which crashes if a line with only whitespace is
3108 a bug in pdb, which crashes if a line with only whitespace is
3103 entered. Bug report submitted to sourceforge.
3109 entered. Bug report submitted to sourceforge.
3104
3110
3105 2002-07-09 Fernando Perez <fperez@colorado.edu>
3111 2002-07-09 Fernando Perez <fperez@colorado.edu>
3106
3112
3107 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3113 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3108 reporting exceptions (it's a bug in inspect.py, I just set a
3114 reporting exceptions (it's a bug in inspect.py, I just set a
3109 workaround).
3115 workaround).
3110
3116
3111 2002-07-08 Fernando Perez <fperez@colorado.edu>
3117 2002-07-08 Fernando Perez <fperez@colorado.edu>
3112
3118
3113 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3119 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3114 __IPYTHON__ in __builtins__ to show up in user_ns.
3120 __IPYTHON__ in __builtins__ to show up in user_ns.
3115
3121
3116 2002-07-03 Fernando Perez <fperez@colorado.edu>
3122 2002-07-03 Fernando Perez <fperez@colorado.edu>
3117
3123
3118 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3124 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3119 name from @gp_set_instance to @gp_set_default.
3125 name from @gp_set_instance to @gp_set_default.
3120
3126
3121 * IPython/ipmaker.py (make_IPython): default editor value set to
3127 * IPython/ipmaker.py (make_IPython): default editor value set to
3122 '0' (a string), to match the rc file. Otherwise will crash when
3128 '0' (a string), to match the rc file. Otherwise will crash when
3123 .strip() is called on it.
3129 .strip() is called on it.
3124
3130
3125
3131
3126 2002-06-28 Fernando Perez <fperez@colorado.edu>
3132 2002-06-28 Fernando Perez <fperez@colorado.edu>
3127
3133
3128 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3134 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3129 of files in current directory when a file is executed via
3135 of files in current directory when a file is executed via
3130 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3136 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3131
3137
3132 * setup.py (manfiles): fix for rpm builds, submitted by RA
3138 * setup.py (manfiles): fix for rpm builds, submitted by RA
3133 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3139 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3134
3140
3135 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3141 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3136 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3142 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3137 string!). A. Schmolck caught this one.
3143 string!). A. Schmolck caught this one.
3138
3144
3139 2002-06-27 Fernando Perez <fperez@colorado.edu>
3145 2002-06-27 Fernando Perez <fperez@colorado.edu>
3140
3146
3141 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3147 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3142 defined files at the cmd line. __name__ wasn't being set to
3148 defined files at the cmd line. __name__ wasn't being set to
3143 __main__.
3149 __main__.
3144
3150
3145 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3151 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3146 regular lists and tuples besides Numeric arrays.
3152 regular lists and tuples besides Numeric arrays.
3147
3153
3148 * IPython/Prompts.py (CachedOutput.__call__): Added output
3154 * IPython/Prompts.py (CachedOutput.__call__): Added output
3149 supression for input ending with ';'. Similar to Mathematica and
3155 supression for input ending with ';'. Similar to Mathematica and
3150 Matlab. The _* vars and Out[] list are still updated, just like
3156 Matlab. The _* vars and Out[] list are still updated, just like
3151 Mathematica behaves.
3157 Mathematica behaves.
3152
3158
3153 2002-06-25 Fernando Perez <fperez@colorado.edu>
3159 2002-06-25 Fernando Perez <fperez@colorado.edu>
3154
3160
3155 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3161 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3156 .ini extensions for profiels under Windows.
3162 .ini extensions for profiels under Windows.
3157
3163
3158 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3164 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3159 string form. Fix contributed by Alexander Schmolck
3165 string form. Fix contributed by Alexander Schmolck
3160 <a.schmolck-AT-gmx.net>
3166 <a.schmolck-AT-gmx.net>
3161
3167
3162 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3168 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3163 pre-configured Gnuplot instance.
3169 pre-configured Gnuplot instance.
3164
3170
3165 2002-06-21 Fernando Perez <fperez@colorado.edu>
3171 2002-06-21 Fernando Perez <fperez@colorado.edu>
3166
3172
3167 * IPython/numutils.py (exp_safe): new function, works around the
3173 * IPython/numutils.py (exp_safe): new function, works around the
3168 underflow problems in Numeric.
3174 underflow problems in Numeric.
3169 (log2): New fn. Safe log in base 2: returns exact integer answer
3175 (log2): New fn. Safe log in base 2: returns exact integer answer
3170 for exact integer powers of 2.
3176 for exact integer powers of 2.
3171
3177
3172 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3178 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3173 properly.
3179 properly.
3174
3180
3175 2002-06-20 Fernando Perez <fperez@colorado.edu>
3181 2002-06-20 Fernando Perez <fperez@colorado.edu>
3176
3182
3177 * IPython/genutils.py (timing): new function like
3183 * IPython/genutils.py (timing): new function like
3178 Mathematica's. Similar to time_test, but returns more info.
3184 Mathematica's. Similar to time_test, but returns more info.
3179
3185
3180 2002-06-18 Fernando Perez <fperez@colorado.edu>
3186 2002-06-18 Fernando Perez <fperez@colorado.edu>
3181
3187
3182 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3188 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3183 according to Mike Heeter's suggestions.
3189 according to Mike Heeter's suggestions.
3184
3190
3185 2002-06-16 Fernando Perez <fperez@colorado.edu>
3191 2002-06-16 Fernando Perez <fperez@colorado.edu>
3186
3192
3187 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3193 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3188 system. GnuplotMagic is gone as a user-directory option. New files
3194 system. GnuplotMagic is gone as a user-directory option. New files
3189 make it easier to use all the gnuplot stuff both from external
3195 make it easier to use all the gnuplot stuff both from external
3190 programs as well as from IPython. Had to rewrite part of
3196 programs as well as from IPython. Had to rewrite part of
3191 hardcopy() b/c of a strange bug: often the ps files simply don't
3197 hardcopy() b/c of a strange bug: often the ps files simply don't
3192 get created, and require a repeat of the command (often several
3198 get created, and require a repeat of the command (often several
3193 times).
3199 times).
3194
3200
3195 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3201 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3196 resolve output channel at call time, so that if sys.stderr has
3202 resolve output channel at call time, so that if sys.stderr has
3197 been redirected by user this gets honored.
3203 been redirected by user this gets honored.
3198
3204
3199 2002-06-13 Fernando Perez <fperez@colorado.edu>
3205 2002-06-13 Fernando Perez <fperez@colorado.edu>
3200
3206
3201 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3207 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3202 IPShell. Kept a copy with the old names to avoid breaking people's
3208 IPShell. Kept a copy with the old names to avoid breaking people's
3203 embedded code.
3209 embedded code.
3204
3210
3205 * IPython/ipython: simplified it to the bare minimum after
3211 * IPython/ipython: simplified it to the bare minimum after
3206 Holger's suggestions. Added info about how to use it in
3212 Holger's suggestions. Added info about how to use it in
3207 PYTHONSTARTUP.
3213 PYTHONSTARTUP.
3208
3214
3209 * IPython/Shell.py (IPythonShell): changed the options passing
3215 * IPython/Shell.py (IPythonShell): changed the options passing
3210 from a string with funky %s replacements to a straight list. Maybe
3216 from a string with funky %s replacements to a straight list. Maybe
3211 a bit more typing, but it follows sys.argv conventions, so there's
3217 a bit more typing, but it follows sys.argv conventions, so there's
3212 less special-casing to remember.
3218 less special-casing to remember.
3213
3219
3214 2002-06-12 Fernando Perez <fperez@colorado.edu>
3220 2002-06-12 Fernando Perez <fperez@colorado.edu>
3215
3221
3216 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3222 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3217 command. Thanks to a suggestion by Mike Heeter.
3223 command. Thanks to a suggestion by Mike Heeter.
3218 (Magic.magic_pfile): added behavior to look at filenames if given
3224 (Magic.magic_pfile): added behavior to look at filenames if given
3219 arg is not a defined object.
3225 arg is not a defined object.
3220 (Magic.magic_save): New @save function to save code snippets. Also
3226 (Magic.magic_save): New @save function to save code snippets. Also
3221 a Mike Heeter idea.
3227 a Mike Heeter idea.
3222
3228
3223 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3229 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3224 plot() and replot(). Much more convenient now, especially for
3230 plot() and replot(). Much more convenient now, especially for
3225 interactive use.
3231 interactive use.
3226
3232
3227 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3233 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3228 filenames.
3234 filenames.
3229
3235
3230 2002-06-02 Fernando Perez <fperez@colorado.edu>
3236 2002-06-02 Fernando Perez <fperez@colorado.edu>
3231
3237
3232 * IPython/Struct.py (Struct.__init__): modified to admit
3238 * IPython/Struct.py (Struct.__init__): modified to admit
3233 initialization via another struct.
3239 initialization via another struct.
3234
3240
3235 * IPython/genutils.py (SystemExec.__init__): New stateful
3241 * IPython/genutils.py (SystemExec.__init__): New stateful
3236 interface to xsys and bq. Useful for writing system scripts.
3242 interface to xsys and bq. Useful for writing system scripts.
3237
3243
3238 2002-05-30 Fernando Perez <fperez@colorado.edu>
3244 2002-05-30 Fernando Perez <fperez@colorado.edu>
3239
3245
3240 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3246 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3241 documents. This will make the user download smaller (it's getting
3247 documents. This will make the user download smaller (it's getting
3242 too big).
3248 too big).
3243
3249
3244 2002-05-29 Fernando Perez <fperez@colorado.edu>
3250 2002-05-29 Fernando Perez <fperez@colorado.edu>
3245
3251
3246 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3252 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3247 fix problems with shelve and pickle. Seems to work, but I don't
3253 fix problems with shelve and pickle. Seems to work, but I don't
3248 know if corner cases break it. Thanks to Mike Heeter
3254 know if corner cases break it. Thanks to Mike Heeter
3249 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3255 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3250
3256
3251 2002-05-24 Fernando Perez <fperez@colorado.edu>
3257 2002-05-24 Fernando Perez <fperez@colorado.edu>
3252
3258
3253 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3259 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3254 macros having broken.
3260 macros having broken.
3255
3261
3256 2002-05-21 Fernando Perez <fperez@colorado.edu>
3262 2002-05-21 Fernando Perez <fperez@colorado.edu>
3257
3263
3258 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3264 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3259 introduced logging bug: all history before logging started was
3265 introduced logging bug: all history before logging started was
3260 being written one character per line! This came from the redesign
3266 being written one character per line! This came from the redesign
3261 of the input history as a special list which slices to strings,
3267 of the input history as a special list which slices to strings,
3262 not to lists.
3268 not to lists.
3263
3269
3264 2002-05-20 Fernando Perez <fperez@colorado.edu>
3270 2002-05-20 Fernando Perez <fperez@colorado.edu>
3265
3271
3266 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3272 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3267 be an attribute of all classes in this module. The design of these
3273 be an attribute of all classes in this module. The design of these
3268 classes needs some serious overhauling.
3274 classes needs some serious overhauling.
3269
3275
3270 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3276 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3271 which was ignoring '_' in option names.
3277 which was ignoring '_' in option names.
3272
3278
3273 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3279 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3274 'Verbose_novars' to 'Context' and made it the new default. It's a
3280 'Verbose_novars' to 'Context' and made it the new default. It's a
3275 bit more readable and also safer than verbose.
3281 bit more readable and also safer than verbose.
3276
3282
3277 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3283 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3278 triple-quoted strings.
3284 triple-quoted strings.
3279
3285
3280 * IPython/OInspect.py (__all__): new module exposing the object
3286 * IPython/OInspect.py (__all__): new module exposing the object
3281 introspection facilities. Now the corresponding magics are dummy
3287 introspection facilities. Now the corresponding magics are dummy
3282 wrappers around this. Having this module will make it much easier
3288 wrappers around this. Having this module will make it much easier
3283 to put these functions into our modified pdb.
3289 to put these functions into our modified pdb.
3284 This new object inspector system uses the new colorizing module,
3290 This new object inspector system uses the new colorizing module,
3285 so source code and other things are nicely syntax highlighted.
3291 so source code and other things are nicely syntax highlighted.
3286
3292
3287 2002-05-18 Fernando Perez <fperez@colorado.edu>
3293 2002-05-18 Fernando Perez <fperez@colorado.edu>
3288
3294
3289 * IPython/ColorANSI.py: Split the coloring tools into a separate
3295 * IPython/ColorANSI.py: Split the coloring tools into a separate
3290 module so I can use them in other code easier (they were part of
3296 module so I can use them in other code easier (they were part of
3291 ultraTB).
3297 ultraTB).
3292
3298
3293 2002-05-17 Fernando Perez <fperez@colorado.edu>
3299 2002-05-17 Fernando Perez <fperez@colorado.edu>
3294
3300
3295 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3301 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3296 fixed it to set the global 'g' also to the called instance, as
3302 fixed it to set the global 'g' also to the called instance, as
3297 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3303 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3298 user's 'g' variables).
3304 user's 'g' variables).
3299
3305
3300 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3306 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3301 global variables (aliases to _ih,_oh) so that users which expect
3307 global variables (aliases to _ih,_oh) so that users which expect
3302 In[5] or Out[7] to work aren't unpleasantly surprised.
3308 In[5] or Out[7] to work aren't unpleasantly surprised.
3303 (InputList.__getslice__): new class to allow executing slices of
3309 (InputList.__getslice__): new class to allow executing slices of
3304 input history directly. Very simple class, complements the use of
3310 input history directly. Very simple class, complements the use of
3305 macros.
3311 macros.
3306
3312
3307 2002-05-16 Fernando Perez <fperez@colorado.edu>
3313 2002-05-16 Fernando Perez <fperez@colorado.edu>
3308
3314
3309 * setup.py (docdirbase): make doc directory be just doc/IPython
3315 * setup.py (docdirbase): make doc directory be just doc/IPython
3310 without version numbers, it will reduce clutter for users.
3316 without version numbers, it will reduce clutter for users.
3311
3317
3312 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3318 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3313 execfile call to prevent possible memory leak. See for details:
3319 execfile call to prevent possible memory leak. See for details:
3314 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3320 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3315
3321
3316 2002-05-15 Fernando Perez <fperez@colorado.edu>
3322 2002-05-15 Fernando Perez <fperez@colorado.edu>
3317
3323
3318 * IPython/Magic.py (Magic.magic_psource): made the object
3324 * IPython/Magic.py (Magic.magic_psource): made the object
3319 introspection names be more standard: pdoc, pdef, pfile and
3325 introspection names be more standard: pdoc, pdef, pfile and
3320 psource. They all print/page their output, and it makes
3326 psource. They all print/page their output, and it makes
3321 remembering them easier. Kept old names for compatibility as
3327 remembering them easier. Kept old names for compatibility as
3322 aliases.
3328 aliases.
3323
3329
3324 2002-05-14 Fernando Perez <fperez@colorado.edu>
3330 2002-05-14 Fernando Perez <fperez@colorado.edu>
3325
3331
3326 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3332 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3327 what the mouse problem was. The trick is to use gnuplot with temp
3333 what the mouse problem was. The trick is to use gnuplot with temp
3328 files and NOT with pipes (for data communication), because having
3334 files and NOT with pipes (for data communication), because having
3329 both pipes and the mouse on is bad news.
3335 both pipes and the mouse on is bad news.
3330
3336
3331 2002-05-13 Fernando Perez <fperez@colorado.edu>
3337 2002-05-13 Fernando Perez <fperez@colorado.edu>
3332
3338
3333 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3339 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3334 bug. Information would be reported about builtins even when
3340 bug. Information would be reported about builtins even when
3335 user-defined functions overrode them.
3341 user-defined functions overrode them.
3336
3342
3337 2002-05-11 Fernando Perez <fperez@colorado.edu>
3343 2002-05-11 Fernando Perez <fperez@colorado.edu>
3338
3344
3339 * IPython/__init__.py (__all__): removed FlexCompleter from
3345 * IPython/__init__.py (__all__): removed FlexCompleter from
3340 __all__ so that things don't fail in platforms without readline.
3346 __all__ so that things don't fail in platforms without readline.
3341
3347
3342 2002-05-10 Fernando Perez <fperez@colorado.edu>
3348 2002-05-10 Fernando Perez <fperez@colorado.edu>
3343
3349
3344 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3350 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3345 it requires Numeric, effectively making Numeric a dependency for
3351 it requires Numeric, effectively making Numeric a dependency for
3346 IPython.
3352 IPython.
3347
3353
3348 * Released 0.2.13
3354 * Released 0.2.13
3349
3355
3350 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3356 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3351 profiler interface. Now all the major options from the profiler
3357 profiler interface. Now all the major options from the profiler
3352 module are directly supported in IPython, both for single
3358 module are directly supported in IPython, both for single
3353 expressions (@prun) and for full programs (@run -p).
3359 expressions (@prun) and for full programs (@run -p).
3354
3360
3355 2002-05-09 Fernando Perez <fperez@colorado.edu>
3361 2002-05-09 Fernando Perez <fperez@colorado.edu>
3356
3362
3357 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3363 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3358 magic properly formatted for screen.
3364 magic properly formatted for screen.
3359
3365
3360 * setup.py (make_shortcut): Changed things to put pdf version in
3366 * setup.py (make_shortcut): Changed things to put pdf version in
3361 doc/ instead of doc/manual (had to change lyxport a bit).
3367 doc/ instead of doc/manual (had to change lyxport a bit).
3362
3368
3363 * IPython/Magic.py (Profile.string_stats): made profile runs go
3369 * IPython/Magic.py (Profile.string_stats): made profile runs go
3364 through pager (they are long and a pager allows searching, saving,
3370 through pager (they are long and a pager allows searching, saving,
3365 etc.)
3371 etc.)
3366
3372
3367 2002-05-08 Fernando Perez <fperez@colorado.edu>
3373 2002-05-08 Fernando Perez <fperez@colorado.edu>
3368
3374
3369 * Released 0.2.12
3375 * Released 0.2.12
3370
3376
3371 2002-05-06 Fernando Perez <fperez@colorado.edu>
3377 2002-05-06 Fernando Perez <fperez@colorado.edu>
3372
3378
3373 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3379 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3374 introduced); 'hist n1 n2' was broken.
3380 introduced); 'hist n1 n2' was broken.
3375 (Magic.magic_pdb): added optional on/off arguments to @pdb
3381 (Magic.magic_pdb): added optional on/off arguments to @pdb
3376 (Magic.magic_run): added option -i to @run, which executes code in
3382 (Magic.magic_run): added option -i to @run, which executes code in
3377 the IPython namespace instead of a clean one. Also added @irun as
3383 the IPython namespace instead of a clean one. Also added @irun as
3378 an alias to @run -i.
3384 an alias to @run -i.
3379
3385
3380 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3386 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3381 fixed (it didn't really do anything, the namespaces were wrong).
3387 fixed (it didn't really do anything, the namespaces were wrong).
3382
3388
3383 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3389 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3384
3390
3385 * IPython/__init__.py (__all__): Fixed package namespace, now
3391 * IPython/__init__.py (__all__): Fixed package namespace, now
3386 'import IPython' does give access to IPython.<all> as
3392 'import IPython' does give access to IPython.<all> as
3387 expected. Also renamed __release__ to Release.
3393 expected. Also renamed __release__ to Release.
3388
3394
3389 * IPython/Debugger.py (__license__): created new Pdb class which
3395 * IPython/Debugger.py (__license__): created new Pdb class which
3390 functions like a drop-in for the normal pdb.Pdb but does NOT
3396 functions like a drop-in for the normal pdb.Pdb but does NOT
3391 import readline by default. This way it doesn't muck up IPython's
3397 import readline by default. This way it doesn't muck up IPython's
3392 readline handling, and now tab-completion finally works in the
3398 readline handling, and now tab-completion finally works in the
3393 debugger -- sort of. It completes things globally visible, but the
3399 debugger -- sort of. It completes things globally visible, but the
3394 completer doesn't track the stack as pdb walks it. That's a bit
3400 completer doesn't track the stack as pdb walks it. That's a bit
3395 tricky, and I'll have to implement it later.
3401 tricky, and I'll have to implement it later.
3396
3402
3397 2002-05-05 Fernando Perez <fperez@colorado.edu>
3403 2002-05-05 Fernando Perez <fperez@colorado.edu>
3398
3404
3399 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3405 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3400 magic docstrings when printed via ? (explicit \'s were being
3406 magic docstrings when printed via ? (explicit \'s were being
3401 printed).
3407 printed).
3402
3408
3403 * IPython/ipmaker.py (make_IPython): fixed namespace
3409 * IPython/ipmaker.py (make_IPython): fixed namespace
3404 identification bug. Now variables loaded via logs or command-line
3410 identification bug. Now variables loaded via logs or command-line
3405 files are recognized in the interactive namespace by @who.
3411 files are recognized in the interactive namespace by @who.
3406
3412
3407 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3413 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3408 log replay system stemming from the string form of Structs.
3414 log replay system stemming from the string form of Structs.
3409
3415
3410 * IPython/Magic.py (Macro.__init__): improved macros to properly
3416 * IPython/Magic.py (Macro.__init__): improved macros to properly
3411 handle magic commands in them.
3417 handle magic commands in them.
3412 (Magic.magic_logstart): usernames are now expanded so 'logstart
3418 (Magic.magic_logstart): usernames are now expanded so 'logstart
3413 ~/mylog' now works.
3419 ~/mylog' now works.
3414
3420
3415 * IPython/iplib.py (complete): fixed bug where paths starting with
3421 * IPython/iplib.py (complete): fixed bug where paths starting with
3416 '/' would be completed as magic names.
3422 '/' would be completed as magic names.
3417
3423
3418 2002-05-04 Fernando Perez <fperez@colorado.edu>
3424 2002-05-04 Fernando Perez <fperez@colorado.edu>
3419
3425
3420 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3426 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3421 allow running full programs under the profiler's control.
3427 allow running full programs under the profiler's control.
3422
3428
3423 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3429 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3424 mode to report exceptions verbosely but without formatting
3430 mode to report exceptions verbosely but without formatting
3425 variables. This addresses the issue of ipython 'freezing' (it's
3431 variables. This addresses the issue of ipython 'freezing' (it's
3426 not frozen, but caught in an expensive formatting loop) when huge
3432 not frozen, but caught in an expensive formatting loop) when huge
3427 variables are in the context of an exception.
3433 variables are in the context of an exception.
3428 (VerboseTB.text): Added '--->' markers at line where exception was
3434 (VerboseTB.text): Added '--->' markers at line where exception was
3429 triggered. Much clearer to read, especially in NoColor modes.
3435 triggered. Much clearer to read, especially in NoColor modes.
3430
3436
3431 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3437 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3432 implemented in reverse when changing to the new parse_options().
3438 implemented in reverse when changing to the new parse_options().
3433
3439
3434 2002-05-03 Fernando Perez <fperez@colorado.edu>
3440 2002-05-03 Fernando Perez <fperez@colorado.edu>
3435
3441
3436 * IPython/Magic.py (Magic.parse_options): new function so that
3442 * IPython/Magic.py (Magic.parse_options): new function so that
3437 magics can parse options easier.
3443 magics can parse options easier.
3438 (Magic.magic_prun): new function similar to profile.run(),
3444 (Magic.magic_prun): new function similar to profile.run(),
3439 suggested by Chris Hart.
3445 suggested by Chris Hart.
3440 (Magic.magic_cd): fixed behavior so that it only changes if
3446 (Magic.magic_cd): fixed behavior so that it only changes if
3441 directory actually is in history.
3447 directory actually is in history.
3442
3448
3443 * IPython/usage.py (__doc__): added information about potential
3449 * IPython/usage.py (__doc__): added information about potential
3444 slowness of Verbose exception mode when there are huge data
3450 slowness of Verbose exception mode when there are huge data
3445 structures to be formatted (thanks to Archie Paulson).
3451 structures to be formatted (thanks to Archie Paulson).
3446
3452
3447 * IPython/ipmaker.py (make_IPython): Changed default logging
3453 * IPython/ipmaker.py (make_IPython): Changed default logging
3448 (when simply called with -log) to use curr_dir/ipython.log in
3454 (when simply called with -log) to use curr_dir/ipython.log in
3449 rotate mode. Fixed crash which was occuring with -log before
3455 rotate mode. Fixed crash which was occuring with -log before
3450 (thanks to Jim Boyle).
3456 (thanks to Jim Boyle).
3451
3457
3452 2002-05-01 Fernando Perez <fperez@colorado.edu>
3458 2002-05-01 Fernando Perez <fperez@colorado.edu>
3453
3459
3454 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3460 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3455 was nasty -- though somewhat of a corner case).
3461 was nasty -- though somewhat of a corner case).
3456
3462
3457 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3463 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3458 text (was a bug).
3464 text (was a bug).
3459
3465
3460 2002-04-30 Fernando Perez <fperez@colorado.edu>
3466 2002-04-30 Fernando Perez <fperez@colorado.edu>
3461
3467
3462 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3468 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3463 a print after ^D or ^C from the user so that the In[] prompt
3469 a print after ^D or ^C from the user so that the In[] prompt
3464 doesn't over-run the gnuplot one.
3470 doesn't over-run the gnuplot one.
3465
3471
3466 2002-04-29 Fernando Perez <fperez@colorado.edu>
3472 2002-04-29 Fernando Perez <fperez@colorado.edu>
3467
3473
3468 * Released 0.2.10
3474 * Released 0.2.10
3469
3475
3470 * IPython/__release__.py (version): get date dynamically.
3476 * IPython/__release__.py (version): get date dynamically.
3471
3477
3472 * Misc. documentation updates thanks to Arnd's comments. Also ran
3478 * Misc. documentation updates thanks to Arnd's comments. Also ran
3473 a full spellcheck on the manual (hadn't been done in a while).
3479 a full spellcheck on the manual (hadn't been done in a while).
3474
3480
3475 2002-04-27 Fernando Perez <fperez@colorado.edu>
3481 2002-04-27 Fernando Perez <fperez@colorado.edu>
3476
3482
3477 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3483 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3478 starting a log in mid-session would reset the input history list.
3484 starting a log in mid-session would reset the input history list.
3479
3485
3480 2002-04-26 Fernando Perez <fperez@colorado.edu>
3486 2002-04-26 Fernando Perez <fperez@colorado.edu>
3481
3487
3482 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3488 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3483 all files were being included in an update. Now anything in
3489 all files were being included in an update. Now anything in
3484 UserConfig that matches [A-Za-z]*.py will go (this excludes
3490 UserConfig that matches [A-Za-z]*.py will go (this excludes
3485 __init__.py)
3491 __init__.py)
3486
3492
3487 2002-04-25 Fernando Perez <fperez@colorado.edu>
3493 2002-04-25 Fernando Perez <fperez@colorado.edu>
3488
3494
3489 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3495 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3490 to __builtins__ so that any form of embedded or imported code can
3496 to __builtins__ so that any form of embedded or imported code can
3491 test for being inside IPython.
3497 test for being inside IPython.
3492
3498
3493 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3499 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3494 changed to GnuplotMagic because it's now an importable module,
3500 changed to GnuplotMagic because it's now an importable module,
3495 this makes the name follow that of the standard Gnuplot module.
3501 this makes the name follow that of the standard Gnuplot module.
3496 GnuplotMagic can now be loaded at any time in mid-session.
3502 GnuplotMagic can now be loaded at any time in mid-session.
3497
3503
3498 2002-04-24 Fernando Perez <fperez@colorado.edu>
3504 2002-04-24 Fernando Perez <fperez@colorado.edu>
3499
3505
3500 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3506 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3501 the globals (IPython has its own namespace) and the
3507 the globals (IPython has its own namespace) and the
3502 PhysicalQuantity stuff is much better anyway.
3508 PhysicalQuantity stuff is much better anyway.
3503
3509
3504 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3510 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3505 embedding example to standard user directory for
3511 embedding example to standard user directory for
3506 distribution. Also put it in the manual.
3512 distribution. Also put it in the manual.
3507
3513
3508 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3514 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3509 instance as first argument (so it doesn't rely on some obscure
3515 instance as first argument (so it doesn't rely on some obscure
3510 hidden global).
3516 hidden global).
3511
3517
3512 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3518 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3513 delimiters. While it prevents ().TAB from working, it allows
3519 delimiters. While it prevents ().TAB from working, it allows
3514 completions in open (... expressions. This is by far a more common
3520 completions in open (... expressions. This is by far a more common
3515 case.
3521 case.
3516
3522
3517 2002-04-23 Fernando Perez <fperez@colorado.edu>
3523 2002-04-23 Fernando Perez <fperez@colorado.edu>
3518
3524
3519 * IPython/Extensions/InterpreterPasteInput.py: new
3525 * IPython/Extensions/InterpreterPasteInput.py: new
3520 syntax-processing module for pasting lines with >>> or ... at the
3526 syntax-processing module for pasting lines with >>> or ... at the
3521 start.
3527 start.
3522
3528
3523 * IPython/Extensions/PhysicalQ_Interactive.py
3529 * IPython/Extensions/PhysicalQ_Interactive.py
3524 (PhysicalQuantityInteractive.__int__): fixed to work with either
3530 (PhysicalQuantityInteractive.__int__): fixed to work with either
3525 Numeric or math.
3531 Numeric or math.
3526
3532
3527 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3533 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3528 provided profiles. Now we have:
3534 provided profiles. Now we have:
3529 -math -> math module as * and cmath with its own namespace.
3535 -math -> math module as * and cmath with its own namespace.
3530 -numeric -> Numeric as *, plus gnuplot & grace
3536 -numeric -> Numeric as *, plus gnuplot & grace
3531 -physics -> same as before
3537 -physics -> same as before
3532
3538
3533 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3539 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3534 user-defined magics wouldn't be found by @magic if they were
3540 user-defined magics wouldn't be found by @magic if they were
3535 defined as class methods. Also cleaned up the namespace search
3541 defined as class methods. Also cleaned up the namespace search
3536 logic and the string building (to use %s instead of many repeated
3542 logic and the string building (to use %s instead of many repeated
3537 string adds).
3543 string adds).
3538
3544
3539 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3545 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3540 of user-defined magics to operate with class methods (cleaner, in
3546 of user-defined magics to operate with class methods (cleaner, in
3541 line with the gnuplot code).
3547 line with the gnuplot code).
3542
3548
3543 2002-04-22 Fernando Perez <fperez@colorado.edu>
3549 2002-04-22 Fernando Perez <fperez@colorado.edu>
3544
3550
3545 * setup.py: updated dependency list so that manual is updated when
3551 * setup.py: updated dependency list so that manual is updated when
3546 all included files change.
3552 all included files change.
3547
3553
3548 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3554 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3549 the delimiter removal option (the fix is ugly right now).
3555 the delimiter removal option (the fix is ugly right now).
3550
3556
3551 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3557 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3552 all of the math profile (quicker loading, no conflict between
3558 all of the math profile (quicker loading, no conflict between
3553 g-9.8 and g-gnuplot).
3559 g-9.8 and g-gnuplot).
3554
3560
3555 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3561 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3556 name of post-mortem files to IPython_crash_report.txt.
3562 name of post-mortem files to IPython_crash_report.txt.
3557
3563
3558 * Cleanup/update of the docs. Added all the new readline info and
3564 * Cleanup/update of the docs. Added all the new readline info and
3559 formatted all lists as 'real lists'.
3565 formatted all lists as 'real lists'.
3560
3566
3561 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3567 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3562 tab-completion options, since the full readline parse_and_bind is
3568 tab-completion options, since the full readline parse_and_bind is
3563 now accessible.
3569 now accessible.
3564
3570
3565 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3571 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3566 handling of readline options. Now users can specify any string to
3572 handling of readline options. Now users can specify any string to
3567 be passed to parse_and_bind(), as well as the delimiters to be
3573 be passed to parse_and_bind(), as well as the delimiters to be
3568 removed.
3574 removed.
3569 (InteractiveShell.__init__): Added __name__ to the global
3575 (InteractiveShell.__init__): Added __name__ to the global
3570 namespace so that things like Itpl which rely on its existence
3576 namespace so that things like Itpl which rely on its existence
3571 don't crash.
3577 don't crash.
3572 (InteractiveShell._prefilter): Defined the default with a _ so
3578 (InteractiveShell._prefilter): Defined the default with a _ so
3573 that prefilter() is easier to override, while the default one
3579 that prefilter() is easier to override, while the default one
3574 remains available.
3580 remains available.
3575
3581
3576 2002-04-18 Fernando Perez <fperez@colorado.edu>
3582 2002-04-18 Fernando Perez <fperez@colorado.edu>
3577
3583
3578 * Added information about pdb in the docs.
3584 * Added information about pdb in the docs.
3579
3585
3580 2002-04-17 Fernando Perez <fperez@colorado.edu>
3586 2002-04-17 Fernando Perez <fperez@colorado.edu>
3581
3587
3582 * IPython/ipmaker.py (make_IPython): added rc_override option to
3588 * IPython/ipmaker.py (make_IPython): added rc_override option to
3583 allow passing config options at creation time which may override
3589 allow passing config options at creation time which may override
3584 anything set in the config files or command line. This is
3590 anything set in the config files or command line. This is
3585 particularly useful for configuring embedded instances.
3591 particularly useful for configuring embedded instances.
3586
3592
3587 2002-04-15 Fernando Perez <fperez@colorado.edu>
3593 2002-04-15 Fernando Perez <fperez@colorado.edu>
3588
3594
3589 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3595 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3590 crash embedded instances because of the input cache falling out of
3596 crash embedded instances because of the input cache falling out of
3591 sync with the output counter.
3597 sync with the output counter.
3592
3598
3593 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3599 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3594 mode which calls pdb after an uncaught exception in IPython itself.
3600 mode which calls pdb after an uncaught exception in IPython itself.
3595
3601
3596 2002-04-14 Fernando Perez <fperez@colorado.edu>
3602 2002-04-14 Fernando Perez <fperez@colorado.edu>
3597
3603
3598 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3604 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3599 readline, fix it back after each call.
3605 readline, fix it back after each call.
3600
3606
3601 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3607 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3602 method to force all access via __call__(), which guarantees that
3608 method to force all access via __call__(), which guarantees that
3603 traceback references are properly deleted.
3609 traceback references are properly deleted.
3604
3610
3605 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3611 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3606 improve printing when pprint is in use.
3612 improve printing when pprint is in use.
3607
3613
3608 2002-04-13 Fernando Perez <fperez@colorado.edu>
3614 2002-04-13 Fernando Perez <fperez@colorado.edu>
3609
3615
3610 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3616 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3611 exceptions aren't caught anymore. If the user triggers one, he
3617 exceptions aren't caught anymore. If the user triggers one, he
3612 should know why he's doing it and it should go all the way up,
3618 should know why he's doing it and it should go all the way up,
3613 just like any other exception. So now @abort will fully kill the
3619 just like any other exception. So now @abort will fully kill the
3614 embedded interpreter and the embedding code (unless that happens
3620 embedded interpreter and the embedding code (unless that happens
3615 to catch SystemExit).
3621 to catch SystemExit).
3616
3622
3617 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3623 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3618 and a debugger() method to invoke the interactive pdb debugger
3624 and a debugger() method to invoke the interactive pdb debugger
3619 after printing exception information. Also added the corresponding
3625 after printing exception information. Also added the corresponding
3620 -pdb option and @pdb magic to control this feature, and updated
3626 -pdb option and @pdb magic to control this feature, and updated
3621 the docs. After a suggestion from Christopher Hart
3627 the docs. After a suggestion from Christopher Hart
3622 (hart-AT-caltech.edu).
3628 (hart-AT-caltech.edu).
3623
3629
3624 2002-04-12 Fernando Perez <fperez@colorado.edu>
3630 2002-04-12 Fernando Perez <fperez@colorado.edu>
3625
3631
3626 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3632 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3627 the exception handlers defined by the user (not the CrashHandler)
3633 the exception handlers defined by the user (not the CrashHandler)
3628 so that user exceptions don't trigger an ipython bug report.
3634 so that user exceptions don't trigger an ipython bug report.
3629
3635
3630 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3636 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3631 configurable (it should have always been so).
3637 configurable (it should have always been so).
3632
3638
3633 2002-03-26 Fernando Perez <fperez@colorado.edu>
3639 2002-03-26 Fernando Perez <fperez@colorado.edu>
3634
3640
3635 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3641 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3636 and there to fix embedding namespace issues. This should all be
3642 and there to fix embedding namespace issues. This should all be
3637 done in a more elegant way.
3643 done in a more elegant way.
3638
3644
3639 2002-03-25 Fernando Perez <fperez@colorado.edu>
3645 2002-03-25 Fernando Perez <fperez@colorado.edu>
3640
3646
3641 * IPython/genutils.py (get_home_dir): Try to make it work under
3647 * IPython/genutils.py (get_home_dir): Try to make it work under
3642 win9x also.
3648 win9x also.
3643
3649
3644 2002-03-20 Fernando Perez <fperez@colorado.edu>
3650 2002-03-20 Fernando Perez <fperez@colorado.edu>
3645
3651
3646 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3652 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3647 sys.displayhook untouched upon __init__.
3653 sys.displayhook untouched upon __init__.
3648
3654
3649 2002-03-19 Fernando Perez <fperez@colorado.edu>
3655 2002-03-19 Fernando Perez <fperez@colorado.edu>
3650
3656
3651 * Released 0.2.9 (for embedding bug, basically).
3657 * Released 0.2.9 (for embedding bug, basically).
3652
3658
3653 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3659 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3654 exceptions so that enclosing shell's state can be restored.
3660 exceptions so that enclosing shell's state can be restored.
3655
3661
3656 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3662 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3657 naming conventions in the .ipython/ dir.
3663 naming conventions in the .ipython/ dir.
3658
3664
3659 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3665 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3660 from delimiters list so filenames with - in them get expanded.
3666 from delimiters list so filenames with - in them get expanded.
3661
3667
3662 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3668 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3663 sys.displayhook not being properly restored after an embedded call.
3669 sys.displayhook not being properly restored after an embedded call.
3664
3670
3665 2002-03-18 Fernando Perez <fperez@colorado.edu>
3671 2002-03-18 Fernando Perez <fperez@colorado.edu>
3666
3672
3667 * Released 0.2.8
3673 * Released 0.2.8
3668
3674
3669 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3675 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3670 some files weren't being included in a -upgrade.
3676 some files weren't being included in a -upgrade.
3671 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3677 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3672 on' so that the first tab completes.
3678 on' so that the first tab completes.
3673 (InteractiveShell.handle_magic): fixed bug with spaces around
3679 (InteractiveShell.handle_magic): fixed bug with spaces around
3674 quotes breaking many magic commands.
3680 quotes breaking many magic commands.
3675
3681
3676 * setup.py: added note about ignoring the syntax error messages at
3682 * setup.py: added note about ignoring the syntax error messages at
3677 installation.
3683 installation.
3678
3684
3679 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3685 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3680 streamlining the gnuplot interface, now there's only one magic @gp.
3686 streamlining the gnuplot interface, now there's only one magic @gp.
3681
3687
3682 2002-03-17 Fernando Perez <fperez@colorado.edu>
3688 2002-03-17 Fernando Perez <fperez@colorado.edu>
3683
3689
3684 * IPython/UserConfig/magic_gnuplot.py: new name for the
3690 * IPython/UserConfig/magic_gnuplot.py: new name for the
3685 example-magic_pm.py file. Much enhanced system, now with a shell
3691 example-magic_pm.py file. Much enhanced system, now with a shell
3686 for communicating directly with gnuplot, one command at a time.
3692 for communicating directly with gnuplot, one command at a time.
3687
3693
3688 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3694 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3689 setting __name__=='__main__'.
3695 setting __name__=='__main__'.
3690
3696
3691 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3697 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3692 mini-shell for accessing gnuplot from inside ipython. Should
3698 mini-shell for accessing gnuplot from inside ipython. Should
3693 extend it later for grace access too. Inspired by Arnd's
3699 extend it later for grace access too. Inspired by Arnd's
3694 suggestion.
3700 suggestion.
3695
3701
3696 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3702 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3697 calling magic functions with () in their arguments. Thanks to Arnd
3703 calling magic functions with () in their arguments. Thanks to Arnd
3698 Baecker for pointing this to me.
3704 Baecker for pointing this to me.
3699
3705
3700 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3706 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3701 infinitely for integer or complex arrays (only worked with floats).
3707 infinitely for integer or complex arrays (only worked with floats).
3702
3708
3703 2002-03-16 Fernando Perez <fperez@colorado.edu>
3709 2002-03-16 Fernando Perez <fperez@colorado.edu>
3704
3710
3705 * setup.py: Merged setup and setup_windows into a single script
3711 * setup.py: Merged setup and setup_windows into a single script
3706 which properly handles things for windows users.
3712 which properly handles things for windows users.
3707
3713
3708 2002-03-15 Fernando Perez <fperez@colorado.edu>
3714 2002-03-15 Fernando Perez <fperez@colorado.edu>
3709
3715
3710 * Big change to the manual: now the magics are all automatically
3716 * Big change to the manual: now the magics are all automatically
3711 documented. This information is generated from their docstrings
3717 documented. This information is generated from their docstrings
3712 and put in a latex file included by the manual lyx file. This way
3718 and put in a latex file included by the manual lyx file. This way
3713 we get always up to date information for the magics. The manual
3719 we get always up to date information for the magics. The manual
3714 now also has proper version information, also auto-synced.
3720 now also has proper version information, also auto-synced.
3715
3721
3716 For this to work, an undocumented --magic_docstrings option was added.
3722 For this to work, an undocumented --magic_docstrings option was added.
3717
3723
3718 2002-03-13 Fernando Perez <fperez@colorado.edu>
3724 2002-03-13 Fernando Perez <fperez@colorado.edu>
3719
3725
3720 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3726 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3721 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3727 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3722
3728
3723 2002-03-12 Fernando Perez <fperez@colorado.edu>
3729 2002-03-12 Fernando Perez <fperez@colorado.edu>
3724
3730
3725 * IPython/ultraTB.py (TermColors): changed color escapes again to
3731 * IPython/ultraTB.py (TermColors): changed color escapes again to
3726 fix the (old, reintroduced) line-wrapping bug. Basically, if
3732 fix the (old, reintroduced) line-wrapping bug. Basically, if
3727 \001..\002 aren't given in the color escapes, lines get wrapped
3733 \001..\002 aren't given in the color escapes, lines get wrapped
3728 weirdly. But giving those screws up old xterms and emacs terms. So
3734 weirdly. But giving those screws up old xterms and emacs terms. So
3729 I added some logic for emacs terms to be ok, but I can't identify old
3735 I added some logic for emacs terms to be ok, but I can't identify old
3730 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3736 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3731
3737
3732 2002-03-10 Fernando Perez <fperez@colorado.edu>
3738 2002-03-10 Fernando Perez <fperez@colorado.edu>
3733
3739
3734 * IPython/usage.py (__doc__): Various documentation cleanups and
3740 * IPython/usage.py (__doc__): Various documentation cleanups and
3735 updates, both in usage docstrings and in the manual.
3741 updates, both in usage docstrings and in the manual.
3736
3742
3737 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3743 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3738 handling of caching. Set minimum acceptabe value for having a
3744 handling of caching. Set minimum acceptabe value for having a
3739 cache at 20 values.
3745 cache at 20 values.
3740
3746
3741 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3747 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3742 install_first_time function to a method, renamed it and added an
3748 install_first_time function to a method, renamed it and added an
3743 'upgrade' mode. Now people can update their config directory with
3749 'upgrade' mode. Now people can update their config directory with
3744 a simple command line switch (-upgrade, also new).
3750 a simple command line switch (-upgrade, also new).
3745
3751
3746 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3752 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3747 @file (convenient for automagic users under Python >= 2.2).
3753 @file (convenient for automagic users under Python >= 2.2).
3748 Removed @files (it seemed more like a plural than an abbrev. of
3754 Removed @files (it seemed more like a plural than an abbrev. of
3749 'file show').
3755 'file show').
3750
3756
3751 * IPython/iplib.py (install_first_time): Fixed crash if there were
3757 * IPython/iplib.py (install_first_time): Fixed crash if there were
3752 backup files ('~') in .ipython/ install directory.
3758 backup files ('~') in .ipython/ install directory.
3753
3759
3754 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3760 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3755 system. Things look fine, but these changes are fairly
3761 system. Things look fine, but these changes are fairly
3756 intrusive. Test them for a few days.
3762 intrusive. Test them for a few days.
3757
3763
3758 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3764 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3759 the prompts system. Now all in/out prompt strings are user
3765 the prompts system. Now all in/out prompt strings are user
3760 controllable. This is particularly useful for embedding, as one
3766 controllable. This is particularly useful for embedding, as one
3761 can tag embedded instances with particular prompts.
3767 can tag embedded instances with particular prompts.
3762
3768
3763 Also removed global use of sys.ps1/2, which now allows nested
3769 Also removed global use of sys.ps1/2, which now allows nested
3764 embeddings without any problems. Added command-line options for
3770 embeddings without any problems. Added command-line options for
3765 the prompt strings.
3771 the prompt strings.
3766
3772
3767 2002-03-08 Fernando Perez <fperez@colorado.edu>
3773 2002-03-08 Fernando Perez <fperez@colorado.edu>
3768
3774
3769 * IPython/UserConfig/example-embed-short.py (ipshell): added
3775 * IPython/UserConfig/example-embed-short.py (ipshell): added
3770 example file with the bare minimum code for embedding.
3776 example file with the bare minimum code for embedding.
3771
3777
3772 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3778 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3773 functionality for the embeddable shell to be activated/deactivated
3779 functionality for the embeddable shell to be activated/deactivated
3774 either globally or at each call.
3780 either globally or at each call.
3775
3781
3776 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3782 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3777 rewriting the prompt with '--->' for auto-inputs with proper
3783 rewriting the prompt with '--->' for auto-inputs with proper
3778 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3784 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3779 this is handled by the prompts class itself, as it should.
3785 this is handled by the prompts class itself, as it should.
3780
3786
3781 2002-03-05 Fernando Perez <fperez@colorado.edu>
3787 2002-03-05 Fernando Perez <fperez@colorado.edu>
3782
3788
3783 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3789 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3784 @logstart to avoid name clashes with the math log function.
3790 @logstart to avoid name clashes with the math log function.
3785
3791
3786 * Big updates to X/Emacs section of the manual.
3792 * Big updates to X/Emacs section of the manual.
3787
3793
3788 * Removed ipython_emacs. Milan explained to me how to pass
3794 * Removed ipython_emacs. Milan explained to me how to pass
3789 arguments to ipython through Emacs. Some day I'm going to end up
3795 arguments to ipython through Emacs. Some day I'm going to end up
3790 learning some lisp...
3796 learning some lisp...
3791
3797
3792 2002-03-04 Fernando Perez <fperez@colorado.edu>
3798 2002-03-04 Fernando Perez <fperez@colorado.edu>
3793
3799
3794 * IPython/ipython_emacs: Created script to be used as the
3800 * IPython/ipython_emacs: Created script to be used as the
3795 py-python-command Emacs variable so we can pass IPython
3801 py-python-command Emacs variable so we can pass IPython
3796 parameters. I can't figure out how to tell Emacs directly to pass
3802 parameters. I can't figure out how to tell Emacs directly to pass
3797 parameters to IPython, so a dummy shell script will do it.
3803 parameters to IPython, so a dummy shell script will do it.
3798
3804
3799 Other enhancements made for things to work better under Emacs'
3805 Other enhancements made for things to work better under Emacs'
3800 various types of terminals. Many thanks to Milan Zamazal
3806 various types of terminals. Many thanks to Milan Zamazal
3801 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3807 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3802
3808
3803 2002-03-01 Fernando Perez <fperez@colorado.edu>
3809 2002-03-01 Fernando Perez <fperez@colorado.edu>
3804
3810
3805 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3811 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3806 that loading of readline is now optional. This gives better
3812 that loading of readline is now optional. This gives better
3807 control to emacs users.
3813 control to emacs users.
3808
3814
3809 * IPython/ultraTB.py (__date__): Modified color escape sequences
3815 * IPython/ultraTB.py (__date__): Modified color escape sequences
3810 and now things work fine under xterm and in Emacs' term buffers
3816 and now things work fine under xterm and in Emacs' term buffers
3811 (though not shell ones). Well, in emacs you get colors, but all
3817 (though not shell ones). Well, in emacs you get colors, but all
3812 seem to be 'light' colors (no difference between dark and light
3818 seem to be 'light' colors (no difference between dark and light
3813 ones). But the garbage chars are gone, and also in xterms. It
3819 ones). But the garbage chars are gone, and also in xterms. It
3814 seems that now I'm using 'cleaner' ansi sequences.
3820 seems that now I'm using 'cleaner' ansi sequences.
3815
3821
3816 2002-02-21 Fernando Perez <fperez@colorado.edu>
3822 2002-02-21 Fernando Perez <fperez@colorado.edu>
3817
3823
3818 * Released 0.2.7 (mainly to publish the scoping fix).
3824 * Released 0.2.7 (mainly to publish the scoping fix).
3819
3825
3820 * IPython/Logger.py (Logger.logstate): added. A corresponding
3826 * IPython/Logger.py (Logger.logstate): added. A corresponding
3821 @logstate magic was created.
3827 @logstate magic was created.
3822
3828
3823 * IPython/Magic.py: fixed nested scoping problem under Python
3829 * IPython/Magic.py: fixed nested scoping problem under Python
3824 2.1.x (automagic wasn't working).
3830 2.1.x (automagic wasn't working).
3825
3831
3826 2002-02-20 Fernando Perez <fperez@colorado.edu>
3832 2002-02-20 Fernando Perez <fperez@colorado.edu>
3827
3833
3828 * Released 0.2.6.
3834 * Released 0.2.6.
3829
3835
3830 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3836 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3831 option so that logs can come out without any headers at all.
3837 option so that logs can come out without any headers at all.
3832
3838
3833 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3839 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3834 SciPy.
3840 SciPy.
3835
3841
3836 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3842 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3837 that embedded IPython calls don't require vars() to be explicitly
3843 that embedded IPython calls don't require vars() to be explicitly
3838 passed. Now they are extracted from the caller's frame (code
3844 passed. Now they are extracted from the caller's frame (code
3839 snatched from Eric Jones' weave). Added better documentation to
3845 snatched from Eric Jones' weave). Added better documentation to
3840 the section on embedding and the example file.
3846 the section on embedding and the example file.
3841
3847
3842 * IPython/genutils.py (page): Changed so that under emacs, it just
3848 * IPython/genutils.py (page): Changed so that under emacs, it just
3843 prints the string. You can then page up and down in the emacs
3849 prints the string. You can then page up and down in the emacs
3844 buffer itself. This is how the builtin help() works.
3850 buffer itself. This is how the builtin help() works.
3845
3851
3846 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3852 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3847 macro scoping: macros need to be executed in the user's namespace
3853 macro scoping: macros need to be executed in the user's namespace
3848 to work as if they had been typed by the user.
3854 to work as if they had been typed by the user.
3849
3855
3850 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3856 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3851 execute automatically (no need to type 'exec...'). They then
3857 execute automatically (no need to type 'exec...'). They then
3852 behave like 'true macros'. The printing system was also modified
3858 behave like 'true macros'. The printing system was also modified
3853 for this to work.
3859 for this to work.
3854
3860
3855 2002-02-19 Fernando Perez <fperez@colorado.edu>
3861 2002-02-19 Fernando Perez <fperez@colorado.edu>
3856
3862
3857 * IPython/genutils.py (page_file): new function for paging files
3863 * IPython/genutils.py (page_file): new function for paging files
3858 in an OS-independent way. Also necessary for file viewing to work
3864 in an OS-independent way. Also necessary for file viewing to work
3859 well inside Emacs buffers.
3865 well inside Emacs buffers.
3860 (page): Added checks for being in an emacs buffer.
3866 (page): Added checks for being in an emacs buffer.
3861 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3867 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3862 same bug in iplib.
3868 same bug in iplib.
3863
3869
3864 2002-02-18 Fernando Perez <fperez@colorado.edu>
3870 2002-02-18 Fernando Perez <fperez@colorado.edu>
3865
3871
3866 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3872 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3867 of readline so that IPython can work inside an Emacs buffer.
3873 of readline so that IPython can work inside an Emacs buffer.
3868
3874
3869 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3875 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3870 method signatures (they weren't really bugs, but it looks cleaner
3876 method signatures (they weren't really bugs, but it looks cleaner
3871 and keeps PyChecker happy).
3877 and keeps PyChecker happy).
3872
3878
3873 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3879 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3874 for implementing various user-defined hooks. Currently only
3880 for implementing various user-defined hooks. Currently only
3875 display is done.
3881 display is done.
3876
3882
3877 * IPython/Prompts.py (CachedOutput._display): changed display
3883 * IPython/Prompts.py (CachedOutput._display): changed display
3878 functions so that they can be dynamically changed by users easily.
3884 functions so that they can be dynamically changed by users easily.
3879
3885
3880 * IPython/Extensions/numeric_formats.py (num_display): added an
3886 * IPython/Extensions/numeric_formats.py (num_display): added an
3881 extension for printing NumPy arrays in flexible manners. It
3887 extension for printing NumPy arrays in flexible manners. It
3882 doesn't do anything yet, but all the structure is in
3888 doesn't do anything yet, but all the structure is in
3883 place. Ultimately the plan is to implement output format control
3889 place. Ultimately the plan is to implement output format control
3884 like in Octave.
3890 like in Octave.
3885
3891
3886 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3892 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3887 methods are found at run-time by all the automatic machinery.
3893 methods are found at run-time by all the automatic machinery.
3888
3894
3889 2002-02-17 Fernando Perez <fperez@colorado.edu>
3895 2002-02-17 Fernando Perez <fperez@colorado.edu>
3890
3896
3891 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3897 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3892 whole file a little.
3898 whole file a little.
3893
3899
3894 * ToDo: closed this document. Now there's a new_design.lyx
3900 * ToDo: closed this document. Now there's a new_design.lyx
3895 document for all new ideas. Added making a pdf of it for the
3901 document for all new ideas. Added making a pdf of it for the
3896 end-user distro.
3902 end-user distro.
3897
3903
3898 * IPython/Logger.py (Logger.switch_log): Created this to replace
3904 * IPython/Logger.py (Logger.switch_log): Created this to replace
3899 logon() and logoff(). It also fixes a nasty crash reported by
3905 logon() and logoff(). It also fixes a nasty crash reported by
3900 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3906 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3901
3907
3902 * IPython/iplib.py (complete): got auto-completion to work with
3908 * IPython/iplib.py (complete): got auto-completion to work with
3903 automagic (I had wanted this for a long time).
3909 automagic (I had wanted this for a long time).
3904
3910
3905 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3911 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3906 to @file, since file() is now a builtin and clashes with automagic
3912 to @file, since file() is now a builtin and clashes with automagic
3907 for @file.
3913 for @file.
3908
3914
3909 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3915 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3910 of this was previously in iplib, which had grown to more than 2000
3916 of this was previously in iplib, which had grown to more than 2000
3911 lines, way too long. No new functionality, but it makes managing
3917 lines, way too long. No new functionality, but it makes managing
3912 the code a bit easier.
3918 the code a bit easier.
3913
3919
3914 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3920 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3915 information to crash reports.
3921 information to crash reports.
3916
3922
3917 2002-02-12 Fernando Perez <fperez@colorado.edu>
3923 2002-02-12 Fernando Perez <fperez@colorado.edu>
3918
3924
3919 * Released 0.2.5.
3925 * Released 0.2.5.
3920
3926
3921 2002-02-11 Fernando Perez <fperez@colorado.edu>
3927 2002-02-11 Fernando Perez <fperez@colorado.edu>
3922
3928
3923 * Wrote a relatively complete Windows installer. It puts
3929 * Wrote a relatively complete Windows installer. It puts
3924 everything in place, creates Start Menu entries and fixes the
3930 everything in place, creates Start Menu entries and fixes the
3925 color issues. Nothing fancy, but it works.
3931 color issues. Nothing fancy, but it works.
3926
3932
3927 2002-02-10 Fernando Perez <fperez@colorado.edu>
3933 2002-02-10 Fernando Perez <fperez@colorado.edu>
3928
3934
3929 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3935 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3930 os.path.expanduser() call so that we can type @run ~/myfile.py and
3936 os.path.expanduser() call so that we can type @run ~/myfile.py and
3931 have thigs work as expected.
3937 have thigs work as expected.
3932
3938
3933 * IPython/genutils.py (page): fixed exception handling so things
3939 * IPython/genutils.py (page): fixed exception handling so things
3934 work both in Unix and Windows correctly. Quitting a pager triggers
3940 work both in Unix and Windows correctly. Quitting a pager triggers
3935 an IOError/broken pipe in Unix, and in windows not finding a pager
3941 an IOError/broken pipe in Unix, and in windows not finding a pager
3936 is also an IOError, so I had to actually look at the return value
3942 is also an IOError, so I had to actually look at the return value
3937 of the exception, not just the exception itself. Should be ok now.
3943 of the exception, not just the exception itself. Should be ok now.
3938
3944
3939 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3945 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3940 modified to allow case-insensitive color scheme changes.
3946 modified to allow case-insensitive color scheme changes.
3941
3947
3942 2002-02-09 Fernando Perez <fperez@colorado.edu>
3948 2002-02-09 Fernando Perez <fperez@colorado.edu>
3943
3949
3944 * IPython/genutils.py (native_line_ends): new function to leave
3950 * IPython/genutils.py (native_line_ends): new function to leave
3945 user config files with os-native line-endings.
3951 user config files with os-native line-endings.
3946
3952
3947 * README and manual updates.
3953 * README and manual updates.
3948
3954
3949 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3955 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3950 instead of StringType to catch Unicode strings.
3956 instead of StringType to catch Unicode strings.
3951
3957
3952 * IPython/genutils.py (filefind): fixed bug for paths with
3958 * IPython/genutils.py (filefind): fixed bug for paths with
3953 embedded spaces (very common in Windows).
3959 embedded spaces (very common in Windows).
3954
3960
3955 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3961 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3956 files under Windows, so that they get automatically associated
3962 files under Windows, so that they get automatically associated
3957 with a text editor. Windows makes it a pain to handle
3963 with a text editor. Windows makes it a pain to handle
3958 extension-less files.
3964 extension-less files.
3959
3965
3960 * IPython/iplib.py (InteractiveShell.init_readline): Made the
3966 * IPython/iplib.py (InteractiveShell.init_readline): Made the
3961 warning about readline only occur for Posix. In Windows there's no
3967 warning about readline only occur for Posix. In Windows there's no
3962 way to get readline, so why bother with the warning.
3968 way to get readline, so why bother with the warning.
3963
3969
3964 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
3970 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
3965 for __str__ instead of dir(self), since dir() changed in 2.2.
3971 for __str__ instead of dir(self), since dir() changed in 2.2.
3966
3972
3967 * Ported to Windows! Tested on XP, I suspect it should work fine
3973 * Ported to Windows! Tested on XP, I suspect it should work fine
3968 on NT/2000, but I don't think it will work on 98 et al. That
3974 on NT/2000, but I don't think it will work on 98 et al. That
3969 series of Windows is such a piece of junk anyway that I won't try
3975 series of Windows is such a piece of junk anyway that I won't try
3970 porting it there. The XP port was straightforward, showed a few
3976 porting it there. The XP port was straightforward, showed a few
3971 bugs here and there (fixed all), in particular some string
3977 bugs here and there (fixed all), in particular some string
3972 handling stuff which required considering Unicode strings (which
3978 handling stuff which required considering Unicode strings (which
3973 Windows uses). This is good, but hasn't been too tested :) No
3979 Windows uses). This is good, but hasn't been too tested :) No
3974 fancy installer yet, I'll put a note in the manual so people at
3980 fancy installer yet, I'll put a note in the manual so people at
3975 least make manually a shortcut.
3981 least make manually a shortcut.
3976
3982
3977 * IPython/iplib.py (Magic.magic_colors): Unified the color options
3983 * IPython/iplib.py (Magic.magic_colors): Unified the color options
3978 into a single one, "colors". This now controls both prompt and
3984 into a single one, "colors". This now controls both prompt and
3979 exception color schemes, and can be changed both at startup
3985 exception color schemes, and can be changed both at startup
3980 (either via command-line switches or via ipythonrc files) and at
3986 (either via command-line switches or via ipythonrc files) and at
3981 runtime, with @colors.
3987 runtime, with @colors.
3982 (Magic.magic_run): renamed @prun to @run and removed the old
3988 (Magic.magic_run): renamed @prun to @run and removed the old
3983 @run. The two were too similar to warrant keeping both.
3989 @run. The two were too similar to warrant keeping both.
3984
3990
3985 2002-02-03 Fernando Perez <fperez@colorado.edu>
3991 2002-02-03 Fernando Perez <fperez@colorado.edu>
3986
3992
3987 * IPython/iplib.py (install_first_time): Added comment on how to
3993 * IPython/iplib.py (install_first_time): Added comment on how to
3988 configure the color options for first-time users. Put a <return>
3994 configure the color options for first-time users. Put a <return>
3989 request at the end so that small-terminal users get a chance to
3995 request at the end so that small-terminal users get a chance to
3990 read the startup info.
3996 read the startup info.
3991
3997
3992 2002-01-23 Fernando Perez <fperez@colorado.edu>
3998 2002-01-23 Fernando Perez <fperez@colorado.edu>
3993
3999
3994 * IPython/iplib.py (CachedOutput.update): Changed output memory
4000 * IPython/iplib.py (CachedOutput.update): Changed output memory
3995 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4001 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
3996 input history we still use _i. Did this b/c these variable are
4002 input history we still use _i. Did this b/c these variable are
3997 very commonly used in interactive work, so the less we need to
4003 very commonly used in interactive work, so the less we need to
3998 type the better off we are.
4004 type the better off we are.
3999 (Magic.magic_prun): updated @prun to better handle the namespaces
4005 (Magic.magic_prun): updated @prun to better handle the namespaces
4000 the file will run in, including a fix for __name__ not being set
4006 the file will run in, including a fix for __name__ not being set
4001 before.
4007 before.
4002
4008
4003 2002-01-20 Fernando Perez <fperez@colorado.edu>
4009 2002-01-20 Fernando Perez <fperez@colorado.edu>
4004
4010
4005 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4011 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4006 extra garbage for Python 2.2. Need to look more carefully into
4012 extra garbage for Python 2.2. Need to look more carefully into
4007 this later.
4013 this later.
4008
4014
4009 2002-01-19 Fernando Perez <fperez@colorado.edu>
4015 2002-01-19 Fernando Perez <fperez@colorado.edu>
4010
4016
4011 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4017 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4012 display SyntaxError exceptions properly formatted when they occur
4018 display SyntaxError exceptions properly formatted when they occur
4013 (they can be triggered by imported code).
4019 (they can be triggered by imported code).
4014
4020
4015 2002-01-18 Fernando Perez <fperez@colorado.edu>
4021 2002-01-18 Fernando Perez <fperez@colorado.edu>
4016
4022
4017 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4023 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4018 SyntaxError exceptions are reported nicely formatted, instead of
4024 SyntaxError exceptions are reported nicely formatted, instead of
4019 spitting out only offset information as before.
4025 spitting out only offset information as before.
4020 (Magic.magic_prun): Added the @prun function for executing
4026 (Magic.magic_prun): Added the @prun function for executing
4021 programs with command line args inside IPython.
4027 programs with command line args inside IPython.
4022
4028
4023 2002-01-16 Fernando Perez <fperez@colorado.edu>
4029 2002-01-16 Fernando Perez <fperez@colorado.edu>
4024
4030
4025 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4031 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4026 to *not* include the last item given in a range. This brings their
4032 to *not* include the last item given in a range. This brings their
4027 behavior in line with Python's slicing:
4033 behavior in line with Python's slicing:
4028 a[n1:n2] -> a[n1]...a[n2-1]
4034 a[n1:n2] -> a[n1]...a[n2-1]
4029 It may be a bit less convenient, but I prefer to stick to Python's
4035 It may be a bit less convenient, but I prefer to stick to Python's
4030 conventions *everywhere*, so users never have to wonder.
4036 conventions *everywhere*, so users never have to wonder.
4031 (Magic.magic_macro): Added @macro function to ease the creation of
4037 (Magic.magic_macro): Added @macro function to ease the creation of
4032 macros.
4038 macros.
4033
4039
4034 2002-01-05 Fernando Perez <fperez@colorado.edu>
4040 2002-01-05 Fernando Perez <fperez@colorado.edu>
4035
4041
4036 * Released 0.2.4.
4042 * Released 0.2.4.
4037
4043
4038 * IPython/iplib.py (Magic.magic_pdef):
4044 * IPython/iplib.py (Magic.magic_pdef):
4039 (InteractiveShell.safe_execfile): report magic lines and error
4045 (InteractiveShell.safe_execfile): report magic lines and error
4040 lines without line numbers so one can easily copy/paste them for
4046 lines without line numbers so one can easily copy/paste them for
4041 re-execution.
4047 re-execution.
4042
4048
4043 * Updated manual with recent changes.
4049 * Updated manual with recent changes.
4044
4050
4045 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4051 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4046 docstring printing when class? is called. Very handy for knowing
4052 docstring printing when class? is called. Very handy for knowing
4047 how to create class instances (as long as __init__ is well
4053 how to create class instances (as long as __init__ is well
4048 documented, of course :)
4054 documented, of course :)
4049 (Magic.magic_doc): print both class and constructor docstrings.
4055 (Magic.magic_doc): print both class and constructor docstrings.
4050 (Magic.magic_pdef): give constructor info if passed a class and
4056 (Magic.magic_pdef): give constructor info if passed a class and
4051 __call__ info for callable object instances.
4057 __call__ info for callable object instances.
4052
4058
4053 2002-01-04 Fernando Perez <fperez@colorado.edu>
4059 2002-01-04 Fernando Perez <fperez@colorado.edu>
4054
4060
4055 * Made deep_reload() off by default. It doesn't always work
4061 * Made deep_reload() off by default. It doesn't always work
4056 exactly as intended, so it's probably safer to have it off. It's
4062 exactly as intended, so it's probably safer to have it off. It's
4057 still available as dreload() anyway, so nothing is lost.
4063 still available as dreload() anyway, so nothing is lost.
4058
4064
4059 2002-01-02 Fernando Perez <fperez@colorado.edu>
4065 2002-01-02 Fernando Perez <fperez@colorado.edu>
4060
4066
4061 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4067 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4062 so I wanted an updated release).
4068 so I wanted an updated release).
4063
4069
4064 2001-12-27 Fernando Perez <fperez@colorado.edu>
4070 2001-12-27 Fernando Perez <fperez@colorado.edu>
4065
4071
4066 * IPython/iplib.py (InteractiveShell.interact): Added the original
4072 * IPython/iplib.py (InteractiveShell.interact): Added the original
4067 code from 'code.py' for this module in order to change the
4073 code from 'code.py' for this module in order to change the
4068 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4074 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4069 the history cache would break when the user hit Ctrl-C, and
4075 the history cache would break when the user hit Ctrl-C, and
4070 interact() offers no way to add any hooks to it.
4076 interact() offers no way to add any hooks to it.
4071
4077
4072 2001-12-23 Fernando Perez <fperez@colorado.edu>
4078 2001-12-23 Fernando Perez <fperez@colorado.edu>
4073
4079
4074 * setup.py: added check for 'MANIFEST' before trying to remove
4080 * setup.py: added check for 'MANIFEST' before trying to remove
4075 it. Thanks to Sean Reifschneider.
4081 it. Thanks to Sean Reifschneider.
4076
4082
4077 2001-12-22 Fernando Perez <fperez@colorado.edu>
4083 2001-12-22 Fernando Perez <fperez@colorado.edu>
4078
4084
4079 * Released 0.2.2.
4085 * Released 0.2.2.
4080
4086
4081 * Finished (reasonably) writing the manual. Later will add the
4087 * Finished (reasonably) writing the manual. Later will add the
4082 python-standard navigation stylesheets, but for the time being
4088 python-standard navigation stylesheets, but for the time being
4083 it's fairly complete. Distribution will include html and pdf
4089 it's fairly complete. Distribution will include html and pdf
4084 versions.
4090 versions.
4085
4091
4086 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4092 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4087 (MayaVi author).
4093 (MayaVi author).
4088
4094
4089 2001-12-21 Fernando Perez <fperez@colorado.edu>
4095 2001-12-21 Fernando Perez <fperez@colorado.edu>
4090
4096
4091 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4097 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4092 good public release, I think (with the manual and the distutils
4098 good public release, I think (with the manual and the distutils
4093 installer). The manual can use some work, but that can go
4099 installer). The manual can use some work, but that can go
4094 slowly. Otherwise I think it's quite nice for end users. Next
4100 slowly. Otherwise I think it's quite nice for end users. Next
4095 summer, rewrite the guts of it...
4101 summer, rewrite the guts of it...
4096
4102
4097 * Changed format of ipythonrc files to use whitespace as the
4103 * Changed format of ipythonrc files to use whitespace as the
4098 separator instead of an explicit '='. Cleaner.
4104 separator instead of an explicit '='. Cleaner.
4099
4105
4100 2001-12-20 Fernando Perez <fperez@colorado.edu>
4106 2001-12-20 Fernando Perez <fperez@colorado.edu>
4101
4107
4102 * Started a manual in LyX. For now it's just a quick merge of the
4108 * Started a manual in LyX. For now it's just a quick merge of the
4103 various internal docstrings and READMEs. Later it may grow into a
4109 various internal docstrings and READMEs. Later it may grow into a
4104 nice, full-blown manual.
4110 nice, full-blown manual.
4105
4111
4106 * Set up a distutils based installer. Installation should now be
4112 * Set up a distutils based installer. Installation should now be
4107 trivially simple for end-users.
4113 trivially simple for end-users.
4108
4114
4109 2001-12-11 Fernando Perez <fperez@colorado.edu>
4115 2001-12-11 Fernando Perez <fperez@colorado.edu>
4110
4116
4111 * Released 0.2.0. First public release, announced it at
4117 * Released 0.2.0. First public release, announced it at
4112 comp.lang.python. From now on, just bugfixes...
4118 comp.lang.python. From now on, just bugfixes...
4113
4119
4114 * Went through all the files, set copyright/license notices and
4120 * Went through all the files, set copyright/license notices and
4115 cleaned up things. Ready for release.
4121 cleaned up things. Ready for release.
4116
4122
4117 2001-12-10 Fernando Perez <fperez@colorado.edu>
4123 2001-12-10 Fernando Perez <fperez@colorado.edu>
4118
4124
4119 * Changed the first-time installer not to use tarfiles. It's more
4125 * Changed the first-time installer not to use tarfiles. It's more
4120 robust now and less unix-dependent. Also makes it easier for
4126 robust now and less unix-dependent. Also makes it easier for
4121 people to later upgrade versions.
4127 people to later upgrade versions.
4122
4128
4123 * Changed @exit to @abort to reflect the fact that it's pretty
4129 * Changed @exit to @abort to reflect the fact that it's pretty
4124 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4130 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4125 becomes significant only when IPyhton is embedded: in that case,
4131 becomes significant only when IPyhton is embedded: in that case,
4126 C-D closes IPython only, but @abort kills the enclosing program
4132 C-D closes IPython only, but @abort kills the enclosing program
4127 too (unless it had called IPython inside a try catching
4133 too (unless it had called IPython inside a try catching
4128 SystemExit).
4134 SystemExit).
4129
4135
4130 * Created Shell module which exposes the actuall IPython Shell
4136 * Created Shell module which exposes the actuall IPython Shell
4131 classes, currently the normal and the embeddable one. This at
4137 classes, currently the normal and the embeddable one. This at
4132 least offers a stable interface we won't need to change when
4138 least offers a stable interface we won't need to change when
4133 (later) the internals are rewritten. That rewrite will be confined
4139 (later) the internals are rewritten. That rewrite will be confined
4134 to iplib and ipmaker, but the Shell interface should remain as is.
4140 to iplib and ipmaker, but the Shell interface should remain as is.
4135
4141
4136 * Added embed module which offers an embeddable IPShell object,
4142 * Added embed module which offers an embeddable IPShell object,
4137 useful to fire up IPython *inside* a running program. Great for
4143 useful to fire up IPython *inside* a running program. Great for
4138 debugging or dynamical data analysis.
4144 debugging or dynamical data analysis.
4139
4145
4140 2001-12-08 Fernando Perez <fperez@colorado.edu>
4146 2001-12-08 Fernando Perez <fperez@colorado.edu>
4141
4147
4142 * Fixed small bug preventing seeing info from methods of defined
4148 * Fixed small bug preventing seeing info from methods of defined
4143 objects (incorrect namespace in _ofind()).
4149 objects (incorrect namespace in _ofind()).
4144
4150
4145 * Documentation cleanup. Moved the main usage docstrings to a
4151 * Documentation cleanup. Moved the main usage docstrings to a
4146 separate file, usage.py (cleaner to maintain, and hopefully in the
4152 separate file, usage.py (cleaner to maintain, and hopefully in the
4147 future some perlpod-like way of producing interactive, man and
4153 future some perlpod-like way of producing interactive, man and
4148 html docs out of it will be found).
4154 html docs out of it will be found).
4149
4155
4150 * Added @profile to see your profile at any time.
4156 * Added @profile to see your profile at any time.
4151
4157
4152 * Added @p as an alias for 'print'. It's especially convenient if
4158 * Added @p as an alias for 'print'. It's especially convenient if
4153 using automagic ('p x' prints x).
4159 using automagic ('p x' prints x).
4154
4160
4155 * Small cleanups and fixes after a pychecker run.
4161 * Small cleanups and fixes after a pychecker run.
4156
4162
4157 * Changed the @cd command to handle @cd - and @cd -<n> for
4163 * Changed the @cd command to handle @cd - and @cd -<n> for
4158 visiting any directory in _dh.
4164 visiting any directory in _dh.
4159
4165
4160 * Introduced _dh, a history of visited directories. @dhist prints
4166 * Introduced _dh, a history of visited directories. @dhist prints
4161 it out with numbers.
4167 it out with numbers.
4162
4168
4163 2001-12-07 Fernando Perez <fperez@colorado.edu>
4169 2001-12-07 Fernando Perez <fperez@colorado.edu>
4164
4170
4165 * Released 0.1.22
4171 * Released 0.1.22
4166
4172
4167 * Made initialization a bit more robust against invalid color
4173 * Made initialization a bit more robust against invalid color
4168 options in user input (exit, not traceback-crash).
4174 options in user input (exit, not traceback-crash).
4169
4175
4170 * Changed the bug crash reporter to write the report only in the
4176 * Changed the bug crash reporter to write the report only in the
4171 user's .ipython directory. That way IPython won't litter people's
4177 user's .ipython directory. That way IPython won't litter people's
4172 hard disks with crash files all over the place. Also print on
4178 hard disks with crash files all over the place. Also print on
4173 screen the necessary mail command.
4179 screen the necessary mail command.
4174
4180
4175 * With the new ultraTB, implemented LightBG color scheme for light
4181 * With the new ultraTB, implemented LightBG color scheme for light
4176 background terminals. A lot of people like white backgrounds, so I
4182 background terminals. A lot of people like white backgrounds, so I
4177 guess we should at least give them something readable.
4183 guess we should at least give them something readable.
4178
4184
4179 2001-12-06 Fernando Perez <fperez@colorado.edu>
4185 2001-12-06 Fernando Perez <fperez@colorado.edu>
4180
4186
4181 * Modified the structure of ultraTB. Now there's a proper class
4187 * Modified the structure of ultraTB. Now there's a proper class
4182 for tables of color schemes which allow adding schemes easily and
4188 for tables of color schemes which allow adding schemes easily and
4183 switching the active scheme without creating a new instance every
4189 switching the active scheme without creating a new instance every
4184 time (which was ridiculous). The syntax for creating new schemes
4190 time (which was ridiculous). The syntax for creating new schemes
4185 is also cleaner. I think ultraTB is finally done, with a clean
4191 is also cleaner. I think ultraTB is finally done, with a clean
4186 class structure. Names are also much cleaner (now there's proper
4192 class structure. Names are also much cleaner (now there's proper
4187 color tables, no need for every variable to also have 'color' in
4193 color tables, no need for every variable to also have 'color' in
4188 its name).
4194 its name).
4189
4195
4190 * Broke down genutils into separate files. Now genutils only
4196 * Broke down genutils into separate files. Now genutils only
4191 contains utility functions, and classes have been moved to their
4197 contains utility functions, and classes have been moved to their
4192 own files (they had enough independent functionality to warrant
4198 own files (they had enough independent functionality to warrant
4193 it): ConfigLoader, OutputTrap, Struct.
4199 it): ConfigLoader, OutputTrap, Struct.
4194
4200
4195 2001-12-05 Fernando Perez <fperez@colorado.edu>
4201 2001-12-05 Fernando Perez <fperez@colorado.edu>
4196
4202
4197 * IPython turns 21! Released version 0.1.21, as a candidate for
4203 * IPython turns 21! Released version 0.1.21, as a candidate for
4198 public consumption. If all goes well, release in a few days.
4204 public consumption. If all goes well, release in a few days.
4199
4205
4200 * Fixed path bug (files in Extensions/ directory wouldn't be found
4206 * Fixed path bug (files in Extensions/ directory wouldn't be found
4201 unless IPython/ was explicitly in sys.path).
4207 unless IPython/ was explicitly in sys.path).
4202
4208
4203 * Extended the FlexCompleter class as MagicCompleter to allow
4209 * Extended the FlexCompleter class as MagicCompleter to allow
4204 completion of @-starting lines.
4210 completion of @-starting lines.
4205
4211
4206 * Created __release__.py file as a central repository for release
4212 * Created __release__.py file as a central repository for release
4207 info that other files can read from.
4213 info that other files can read from.
4208
4214
4209 * Fixed small bug in logging: when logging was turned on in
4215 * Fixed small bug in logging: when logging was turned on in
4210 mid-session, old lines with special meanings (!@?) were being
4216 mid-session, old lines with special meanings (!@?) were being
4211 logged without the prepended comment, which is necessary since
4217 logged without the prepended comment, which is necessary since
4212 they are not truly valid python syntax. This should make session
4218 they are not truly valid python syntax. This should make session
4213 restores produce less errors.
4219 restores produce less errors.
4214
4220
4215 * The namespace cleanup forced me to make a FlexCompleter class
4221 * The namespace cleanup forced me to make a FlexCompleter class
4216 which is nothing but a ripoff of rlcompleter, but with selectable
4222 which is nothing but a ripoff of rlcompleter, but with selectable
4217 namespace (rlcompleter only works in __main__.__dict__). I'll try
4223 namespace (rlcompleter only works in __main__.__dict__). I'll try
4218 to submit a note to the authors to see if this change can be
4224 to submit a note to the authors to see if this change can be
4219 incorporated in future rlcompleter releases (Dec.6: done)
4225 incorporated in future rlcompleter releases (Dec.6: done)
4220
4226
4221 * More fixes to namespace handling. It was a mess! Now all
4227 * More fixes to namespace handling. It was a mess! Now all
4222 explicit references to __main__.__dict__ are gone (except when
4228 explicit references to __main__.__dict__ are gone (except when
4223 really needed) and everything is handled through the namespace
4229 really needed) and everything is handled through the namespace
4224 dicts in the IPython instance. We seem to be getting somewhere
4230 dicts in the IPython instance. We seem to be getting somewhere
4225 with this, finally...
4231 with this, finally...
4226
4232
4227 * Small documentation updates.
4233 * Small documentation updates.
4228
4234
4229 * Created the Extensions directory under IPython (with an
4235 * Created the Extensions directory under IPython (with an
4230 __init__.py). Put the PhysicalQ stuff there. This directory should
4236 __init__.py). Put the PhysicalQ stuff there. This directory should
4231 be used for all special-purpose extensions.
4237 be used for all special-purpose extensions.
4232
4238
4233 * File renaming:
4239 * File renaming:
4234 ipythonlib --> ipmaker
4240 ipythonlib --> ipmaker
4235 ipplib --> iplib
4241 ipplib --> iplib
4236 This makes a bit more sense in terms of what these files actually do.
4242 This makes a bit more sense in terms of what these files actually do.
4237
4243
4238 * Moved all the classes and functions in ipythonlib to ipplib, so
4244 * Moved all the classes and functions in ipythonlib to ipplib, so
4239 now ipythonlib only has make_IPython(). This will ease up its
4245 now ipythonlib only has make_IPython(). This will ease up its
4240 splitting in smaller functional chunks later.
4246 splitting in smaller functional chunks later.
4241
4247
4242 * Cleaned up (done, I think) output of @whos. Better column
4248 * Cleaned up (done, I think) output of @whos. Better column
4243 formatting, and now shows str(var) for as much as it can, which is
4249 formatting, and now shows str(var) for as much as it can, which is
4244 typically what one gets with a 'print var'.
4250 typically what one gets with a 'print var'.
4245
4251
4246 2001-12-04 Fernando Perez <fperez@colorado.edu>
4252 2001-12-04 Fernando Perez <fperez@colorado.edu>
4247
4253
4248 * Fixed namespace problems. Now builtin/IPyhton/user names get
4254 * Fixed namespace problems. Now builtin/IPyhton/user names get
4249 properly reported in their namespace. Internal namespace handling
4255 properly reported in their namespace. Internal namespace handling
4250 is finally getting decent (not perfect yet, but much better than
4256 is finally getting decent (not perfect yet, but much better than
4251 the ad-hoc mess we had).
4257 the ad-hoc mess we had).
4252
4258
4253 * Removed -exit option. If people just want to run a python
4259 * Removed -exit option. If people just want to run a python
4254 script, that's what the normal interpreter is for. Less
4260 script, that's what the normal interpreter is for. Less
4255 unnecessary options, less chances for bugs.
4261 unnecessary options, less chances for bugs.
4256
4262
4257 * Added a crash handler which generates a complete post-mortem if
4263 * Added a crash handler which generates a complete post-mortem if
4258 IPython crashes. This will help a lot in tracking bugs down the
4264 IPython crashes. This will help a lot in tracking bugs down the
4259 road.
4265 road.
4260
4266
4261 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4267 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4262 which were boud to functions being reassigned would bypass the
4268 which were boud to functions being reassigned would bypass the
4263 logger, breaking the sync of _il with the prompt counter. This
4269 logger, breaking the sync of _il with the prompt counter. This
4264 would then crash IPython later when a new line was logged.
4270 would then crash IPython later when a new line was logged.
4265
4271
4266 2001-12-02 Fernando Perez <fperez@colorado.edu>
4272 2001-12-02 Fernando Perez <fperez@colorado.edu>
4267
4273
4268 * Made IPython a package. This means people don't have to clutter
4274 * Made IPython a package. This means people don't have to clutter
4269 their sys.path with yet another directory. Changed the INSTALL
4275 their sys.path with yet another directory. Changed the INSTALL
4270 file accordingly.
4276 file accordingly.
4271
4277
4272 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4278 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4273 sorts its output (so @who shows it sorted) and @whos formats the
4279 sorts its output (so @who shows it sorted) and @whos formats the
4274 table according to the width of the first column. Nicer, easier to
4280 table according to the width of the first column. Nicer, easier to
4275 read. Todo: write a generic table_format() which takes a list of
4281 read. Todo: write a generic table_format() which takes a list of
4276 lists and prints it nicely formatted, with optional row/column
4282 lists and prints it nicely formatted, with optional row/column
4277 separators and proper padding and justification.
4283 separators and proper padding and justification.
4278
4284
4279 * Released 0.1.20
4285 * Released 0.1.20
4280
4286
4281 * Fixed bug in @log which would reverse the inputcache list (a
4287 * Fixed bug in @log which would reverse the inputcache list (a
4282 copy operation was missing).
4288 copy operation was missing).
4283
4289
4284 * Code cleanup. @config was changed to use page(). Better, since
4290 * Code cleanup. @config was changed to use page(). Better, since
4285 its output is always quite long.
4291 its output is always quite long.
4286
4292
4287 * Itpl is back as a dependency. I was having too many problems
4293 * Itpl is back as a dependency. I was having too many problems
4288 getting the parametric aliases to work reliably, and it's just
4294 getting the parametric aliases to work reliably, and it's just
4289 easier to code weird string operations with it than playing %()s
4295 easier to code weird string operations with it than playing %()s
4290 games. It's only ~6k, so I don't think it's too big a deal.
4296 games. It's only ~6k, so I don't think it's too big a deal.
4291
4297
4292 * Found (and fixed) a very nasty bug with history. !lines weren't
4298 * Found (and fixed) a very nasty bug with history. !lines weren't
4293 getting cached, and the out of sync caches would crash
4299 getting cached, and the out of sync caches would crash
4294 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4300 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4295 division of labor a bit better. Bug fixed, cleaner structure.
4301 division of labor a bit better. Bug fixed, cleaner structure.
4296
4302
4297 2001-12-01 Fernando Perez <fperez@colorado.edu>
4303 2001-12-01 Fernando Perez <fperez@colorado.edu>
4298
4304
4299 * Released 0.1.19
4305 * Released 0.1.19
4300
4306
4301 * Added option -n to @hist to prevent line number printing. Much
4307 * Added option -n to @hist to prevent line number printing. Much
4302 easier to copy/paste code this way.
4308 easier to copy/paste code this way.
4303
4309
4304 * Created global _il to hold the input list. Allows easy
4310 * Created global _il to hold the input list. Allows easy
4305 re-execution of blocks of code by slicing it (inspired by Janko's
4311 re-execution of blocks of code by slicing it (inspired by Janko's
4306 comment on 'macros').
4312 comment on 'macros').
4307
4313
4308 * Small fixes and doc updates.
4314 * Small fixes and doc updates.
4309
4315
4310 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4316 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4311 much too fragile with automagic. Handles properly multi-line
4317 much too fragile with automagic. Handles properly multi-line
4312 statements and takes parameters.
4318 statements and takes parameters.
4313
4319
4314 2001-11-30 Fernando Perez <fperez@colorado.edu>
4320 2001-11-30 Fernando Perez <fperez@colorado.edu>
4315
4321
4316 * Version 0.1.18 released.
4322 * Version 0.1.18 released.
4317
4323
4318 * Fixed nasty namespace bug in initial module imports.
4324 * Fixed nasty namespace bug in initial module imports.
4319
4325
4320 * Added copyright/license notes to all code files (except
4326 * Added copyright/license notes to all code files (except
4321 DPyGetOpt). For the time being, LGPL. That could change.
4327 DPyGetOpt). For the time being, LGPL. That could change.
4322
4328
4323 * Rewrote a much nicer README, updated INSTALL, cleaned up
4329 * Rewrote a much nicer README, updated INSTALL, cleaned up
4324 ipythonrc-* samples.
4330 ipythonrc-* samples.
4325
4331
4326 * Overall code/documentation cleanup. Basically ready for
4332 * Overall code/documentation cleanup. Basically ready for
4327 release. Only remaining thing: licence decision (LGPL?).
4333 release. Only remaining thing: licence decision (LGPL?).
4328
4334
4329 * Converted load_config to a class, ConfigLoader. Now recursion
4335 * Converted load_config to a class, ConfigLoader. Now recursion
4330 control is better organized. Doesn't include the same file twice.
4336 control is better organized. Doesn't include the same file twice.
4331
4337
4332 2001-11-29 Fernando Perez <fperez@colorado.edu>
4338 2001-11-29 Fernando Perez <fperez@colorado.edu>
4333
4339
4334 * Got input history working. Changed output history variables from
4340 * Got input history working. Changed output history variables from
4335 _p to _o so that _i is for input and _o for output. Just cleaner
4341 _p to _o so that _i is for input and _o for output. Just cleaner
4336 convention.
4342 convention.
4337
4343
4338 * Implemented parametric aliases. This pretty much allows the
4344 * Implemented parametric aliases. This pretty much allows the
4339 alias system to offer full-blown shell convenience, I think.
4345 alias system to offer full-blown shell convenience, I think.
4340
4346
4341 * Version 0.1.17 released, 0.1.18 opened.
4347 * Version 0.1.17 released, 0.1.18 opened.
4342
4348
4343 * dot_ipython/ipythonrc (alias): added documentation.
4349 * dot_ipython/ipythonrc (alias): added documentation.
4344 (xcolor): Fixed small bug (xcolors -> xcolor)
4350 (xcolor): Fixed small bug (xcolors -> xcolor)
4345
4351
4346 * Changed the alias system. Now alias is a magic command to define
4352 * Changed the alias system. Now alias is a magic command to define
4347 aliases just like the shell. Rationale: the builtin magics should
4353 aliases just like the shell. Rationale: the builtin magics should
4348 be there for things deeply connected to IPython's
4354 be there for things deeply connected to IPython's
4349 architecture. And this is a much lighter system for what I think
4355 architecture. And this is a much lighter system for what I think
4350 is the really important feature: allowing users to define quickly
4356 is the really important feature: allowing users to define quickly
4351 magics that will do shell things for them, so they can customize
4357 magics that will do shell things for them, so they can customize
4352 IPython easily to match their work habits. If someone is really
4358 IPython easily to match their work habits. If someone is really
4353 desperate to have another name for a builtin alias, they can
4359 desperate to have another name for a builtin alias, they can
4354 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4360 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4355 works.
4361 works.
4356
4362
4357 2001-11-28 Fernando Perez <fperez@colorado.edu>
4363 2001-11-28 Fernando Perez <fperez@colorado.edu>
4358
4364
4359 * Changed @file so that it opens the source file at the proper
4365 * Changed @file so that it opens the source file at the proper
4360 line. Since it uses less, if your EDITOR environment is
4366 line. Since it uses less, if your EDITOR environment is
4361 configured, typing v will immediately open your editor of choice
4367 configured, typing v will immediately open your editor of choice
4362 right at the line where the object is defined. Not as quick as
4368 right at the line where the object is defined. Not as quick as
4363 having a direct @edit command, but for all intents and purposes it
4369 having a direct @edit command, but for all intents and purposes it
4364 works. And I don't have to worry about writing @edit to deal with
4370 works. And I don't have to worry about writing @edit to deal with
4365 all the editors, less does that.
4371 all the editors, less does that.
4366
4372
4367 * Version 0.1.16 released, 0.1.17 opened.
4373 * Version 0.1.16 released, 0.1.17 opened.
4368
4374
4369 * Fixed some nasty bugs in the page/page_dumb combo that could
4375 * Fixed some nasty bugs in the page/page_dumb combo that could
4370 crash IPython.
4376 crash IPython.
4371
4377
4372 2001-11-27 Fernando Perez <fperez@colorado.edu>
4378 2001-11-27 Fernando Perez <fperez@colorado.edu>
4373
4379
4374 * Version 0.1.15 released, 0.1.16 opened.
4380 * Version 0.1.15 released, 0.1.16 opened.
4375
4381
4376 * Finally got ? and ?? to work for undefined things: now it's
4382 * Finally got ? and ?? to work for undefined things: now it's
4377 possible to type {}.get? and get information about the get method
4383 possible to type {}.get? and get information about the get method
4378 of dicts, or os.path? even if only os is defined (so technically
4384 of dicts, or os.path? even if only os is defined (so technically
4379 os.path isn't). Works at any level. For example, after import os,
4385 os.path isn't). Works at any level. For example, after import os,
4380 os?, os.path?, os.path.abspath? all work. This is great, took some
4386 os?, os.path?, os.path.abspath? all work. This is great, took some
4381 work in _ofind.
4387 work in _ofind.
4382
4388
4383 * Fixed more bugs with logging. The sanest way to do it was to add
4389 * Fixed more bugs with logging. The sanest way to do it was to add
4384 to @log a 'mode' parameter. Killed two in one shot (this mode
4390 to @log a 'mode' parameter. Killed two in one shot (this mode
4385 option was a request of Janko's). I think it's finally clean
4391 option was a request of Janko's). I think it's finally clean
4386 (famous last words).
4392 (famous last words).
4387
4393
4388 * Added a page_dumb() pager which does a decent job of paging on
4394 * Added a page_dumb() pager which does a decent job of paging on
4389 screen, if better things (like less) aren't available. One less
4395 screen, if better things (like less) aren't available. One less
4390 unix dependency (someday maybe somebody will port this to
4396 unix dependency (someday maybe somebody will port this to
4391 windows).
4397 windows).
4392
4398
4393 * Fixed problem in magic_log: would lock of logging out if log
4399 * Fixed problem in magic_log: would lock of logging out if log
4394 creation failed (because it would still think it had succeeded).
4400 creation failed (because it would still think it had succeeded).
4395
4401
4396 * Improved the page() function using curses to auto-detect screen
4402 * Improved the page() function using curses to auto-detect screen
4397 size. Now it can make a much better decision on whether to print
4403 size. Now it can make a much better decision on whether to print
4398 or page a string. Option screen_length was modified: a value 0
4404 or page a string. Option screen_length was modified: a value 0
4399 means auto-detect, and that's the default now.
4405 means auto-detect, and that's the default now.
4400
4406
4401 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4407 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4402 go out. I'll test it for a few days, then talk to Janko about
4408 go out. I'll test it for a few days, then talk to Janko about
4403 licences and announce it.
4409 licences and announce it.
4404
4410
4405 * Fixed the length of the auto-generated ---> prompt which appears
4411 * Fixed the length of the auto-generated ---> prompt which appears
4406 for auto-parens and auto-quotes. Getting this right isn't trivial,
4412 for auto-parens and auto-quotes. Getting this right isn't trivial,
4407 with all the color escapes, different prompt types and optional
4413 with all the color escapes, different prompt types and optional
4408 separators. But it seems to be working in all the combinations.
4414 separators. But it seems to be working in all the combinations.
4409
4415
4410 2001-11-26 Fernando Perez <fperez@colorado.edu>
4416 2001-11-26 Fernando Perez <fperez@colorado.edu>
4411
4417
4412 * Wrote a regexp filter to get option types from the option names
4418 * Wrote a regexp filter to get option types from the option names
4413 string. This eliminates the need to manually keep two duplicate
4419 string. This eliminates the need to manually keep two duplicate
4414 lists.
4420 lists.
4415
4421
4416 * Removed the unneeded check_option_names. Now options are handled
4422 * Removed the unneeded check_option_names. Now options are handled
4417 in a much saner manner and it's easy to visually check that things
4423 in a much saner manner and it's easy to visually check that things
4418 are ok.
4424 are ok.
4419
4425
4420 * Updated version numbers on all files I modified to carry a
4426 * Updated version numbers on all files I modified to carry a
4421 notice so Janko and Nathan have clear version markers.
4427 notice so Janko and Nathan have clear version markers.
4422
4428
4423 * Updated docstring for ultraTB with my changes. I should send
4429 * Updated docstring for ultraTB with my changes. I should send
4424 this to Nathan.
4430 this to Nathan.
4425
4431
4426 * Lots of small fixes. Ran everything through pychecker again.
4432 * Lots of small fixes. Ran everything through pychecker again.
4427
4433
4428 * Made loading of deep_reload an cmd line option. If it's not too
4434 * Made loading of deep_reload an cmd line option. If it's not too
4429 kosher, now people can just disable it. With -nodeep_reload it's
4435 kosher, now people can just disable it. With -nodeep_reload it's
4430 still available as dreload(), it just won't overwrite reload().
4436 still available as dreload(), it just won't overwrite reload().
4431
4437
4432 * Moved many options to the no| form (-opt and -noopt
4438 * Moved many options to the no| form (-opt and -noopt
4433 accepted). Cleaner.
4439 accepted). Cleaner.
4434
4440
4435 * Changed magic_log so that if called with no parameters, it uses
4441 * Changed magic_log so that if called with no parameters, it uses
4436 'rotate' mode. That way auto-generated logs aren't automatically
4442 'rotate' mode. That way auto-generated logs aren't automatically
4437 over-written. For normal logs, now a backup is made if it exists
4443 over-written. For normal logs, now a backup is made if it exists
4438 (only 1 level of backups). A new 'backup' mode was added to the
4444 (only 1 level of backups). A new 'backup' mode was added to the
4439 Logger class to support this. This was a request by Janko.
4445 Logger class to support this. This was a request by Janko.
4440
4446
4441 * Added @logoff/@logon to stop/restart an active log.
4447 * Added @logoff/@logon to stop/restart an active log.
4442
4448
4443 * Fixed a lot of bugs in log saving/replay. It was pretty
4449 * Fixed a lot of bugs in log saving/replay. It was pretty
4444 broken. Now special lines (!@,/) appear properly in the command
4450 broken. Now special lines (!@,/) appear properly in the command
4445 history after a log replay.
4451 history after a log replay.
4446
4452
4447 * Tried and failed to implement full session saving via pickle. My
4453 * Tried and failed to implement full session saving via pickle. My
4448 idea was to pickle __main__.__dict__, but modules can't be
4454 idea was to pickle __main__.__dict__, but modules can't be
4449 pickled. This would be a better alternative to replaying logs, but
4455 pickled. This would be a better alternative to replaying logs, but
4450 seems quite tricky to get to work. Changed -session to be called
4456 seems quite tricky to get to work. Changed -session to be called
4451 -logplay, which more accurately reflects what it does. And if we
4457 -logplay, which more accurately reflects what it does. And if we
4452 ever get real session saving working, -session is now available.
4458 ever get real session saving working, -session is now available.
4453
4459
4454 * Implemented color schemes for prompts also. As for tracebacks,
4460 * Implemented color schemes for prompts also. As for tracebacks,
4455 currently only NoColor and Linux are supported. But now the
4461 currently only NoColor and Linux are supported. But now the
4456 infrastructure is in place, based on a generic ColorScheme
4462 infrastructure is in place, based on a generic ColorScheme
4457 class. So writing and activating new schemes both for the prompts
4463 class. So writing and activating new schemes both for the prompts
4458 and the tracebacks should be straightforward.
4464 and the tracebacks should be straightforward.
4459
4465
4460 * Version 0.1.13 released, 0.1.14 opened.
4466 * Version 0.1.13 released, 0.1.14 opened.
4461
4467
4462 * Changed handling of options for output cache. Now counter is
4468 * Changed handling of options for output cache. Now counter is
4463 hardwired starting at 1 and one specifies the maximum number of
4469 hardwired starting at 1 and one specifies the maximum number of
4464 entries *in the outcache* (not the max prompt counter). This is
4470 entries *in the outcache* (not the max prompt counter). This is
4465 much better, since many statements won't increase the cache
4471 much better, since many statements won't increase the cache
4466 count. It also eliminated some confusing options, now there's only
4472 count. It also eliminated some confusing options, now there's only
4467 one: cache_size.
4473 one: cache_size.
4468
4474
4469 * Added 'alias' magic function and magic_alias option in the
4475 * Added 'alias' magic function and magic_alias option in the
4470 ipythonrc file. Now the user can easily define whatever names he
4476 ipythonrc file. Now the user can easily define whatever names he
4471 wants for the magic functions without having to play weird
4477 wants for the magic functions without having to play weird
4472 namespace games. This gives IPython a real shell-like feel.
4478 namespace games. This gives IPython a real shell-like feel.
4473
4479
4474 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4480 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4475 @ or not).
4481 @ or not).
4476
4482
4477 This was one of the last remaining 'visible' bugs (that I know
4483 This was one of the last remaining 'visible' bugs (that I know
4478 of). I think if I can clean up the session loading so it works
4484 of). I think if I can clean up the session loading so it works
4479 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4485 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4480 about licensing).
4486 about licensing).
4481
4487
4482 2001-11-25 Fernando Perez <fperez@colorado.edu>
4488 2001-11-25 Fernando Perez <fperez@colorado.edu>
4483
4489
4484 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4490 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4485 there's a cleaner distinction between what ? and ?? show.
4491 there's a cleaner distinction between what ? and ?? show.
4486
4492
4487 * Added screen_length option. Now the user can define his own
4493 * Added screen_length option. Now the user can define his own
4488 screen size for page() operations.
4494 screen size for page() operations.
4489
4495
4490 * Implemented magic shell-like functions with automatic code
4496 * Implemented magic shell-like functions with automatic code
4491 generation. Now adding another function is just a matter of adding
4497 generation. Now adding another function is just a matter of adding
4492 an entry to a dict, and the function is dynamically generated at
4498 an entry to a dict, and the function is dynamically generated at
4493 run-time. Python has some really cool features!
4499 run-time. Python has some really cool features!
4494
4500
4495 * Renamed many options to cleanup conventions a little. Now all
4501 * Renamed many options to cleanup conventions a little. Now all
4496 are lowercase, and only underscores where needed. Also in the code
4502 are lowercase, and only underscores where needed. Also in the code
4497 option name tables are clearer.
4503 option name tables are clearer.
4498
4504
4499 * Changed prompts a little. Now input is 'In [n]:' instead of
4505 * Changed prompts a little. Now input is 'In [n]:' instead of
4500 'In[n]:='. This allows it the numbers to be aligned with the
4506 'In[n]:='. This allows it the numbers to be aligned with the
4501 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4507 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4502 Python (it was a Mathematica thing). The '...' continuation prompt
4508 Python (it was a Mathematica thing). The '...' continuation prompt
4503 was also changed a little to align better.
4509 was also changed a little to align better.
4504
4510
4505 * Fixed bug when flushing output cache. Not all _p<n> variables
4511 * Fixed bug when flushing output cache. Not all _p<n> variables
4506 exist, so their deletion needs to be wrapped in a try:
4512 exist, so their deletion needs to be wrapped in a try:
4507
4513
4508 * Figured out how to properly use inspect.formatargspec() (it
4514 * Figured out how to properly use inspect.formatargspec() (it
4509 requires the args preceded by *). So I removed all the code from
4515 requires the args preceded by *). So I removed all the code from
4510 _get_pdef in Magic, which was just replicating that.
4516 _get_pdef in Magic, which was just replicating that.
4511
4517
4512 * Added test to prefilter to allow redefining magic function names
4518 * Added test to prefilter to allow redefining magic function names
4513 as variables. This is ok, since the @ form is always available,
4519 as variables. This is ok, since the @ form is always available,
4514 but whe should allow the user to define a variable called 'ls' if
4520 but whe should allow the user to define a variable called 'ls' if
4515 he needs it.
4521 he needs it.
4516
4522
4517 * Moved the ToDo information from README into a separate ToDo.
4523 * Moved the ToDo information from README into a separate ToDo.
4518
4524
4519 * General code cleanup and small bugfixes. I think it's close to a
4525 * General code cleanup and small bugfixes. I think it's close to a
4520 state where it can be released, obviously with a big 'beta'
4526 state where it can be released, obviously with a big 'beta'
4521 warning on it.
4527 warning on it.
4522
4528
4523 * Got the magic function split to work. Now all magics are defined
4529 * Got the magic function split to work. Now all magics are defined
4524 in a separate class. It just organizes things a bit, and now
4530 in a separate class. It just organizes things a bit, and now
4525 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4531 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4526 was too long).
4532 was too long).
4527
4533
4528 * Changed @clear to @reset to avoid potential confusions with
4534 * Changed @clear to @reset to avoid potential confusions with
4529 the shell command clear. Also renamed @cl to @clear, which does
4535 the shell command clear. Also renamed @cl to @clear, which does
4530 exactly what people expect it to from their shell experience.
4536 exactly what people expect it to from their shell experience.
4531
4537
4532 Added a check to the @reset command (since it's so
4538 Added a check to the @reset command (since it's so
4533 destructive, it's probably a good idea to ask for confirmation).
4539 destructive, it's probably a good idea to ask for confirmation).
4534 But now reset only works for full namespace resetting. Since the
4540 But now reset only works for full namespace resetting. Since the
4535 del keyword is already there for deleting a few specific
4541 del keyword is already there for deleting a few specific
4536 variables, I don't see the point of having a redundant magic
4542 variables, I don't see the point of having a redundant magic
4537 function for the same task.
4543 function for the same task.
4538
4544
4539 2001-11-24 Fernando Perez <fperez@colorado.edu>
4545 2001-11-24 Fernando Perez <fperez@colorado.edu>
4540
4546
4541 * Updated the builtin docs (esp. the ? ones).
4547 * Updated the builtin docs (esp. the ? ones).
4542
4548
4543 * Ran all the code through pychecker. Not terribly impressed with
4549 * Ran all the code through pychecker. Not terribly impressed with
4544 it: lots of spurious warnings and didn't really find anything of
4550 it: lots of spurious warnings and didn't really find anything of
4545 substance (just a few modules being imported and not used).
4551 substance (just a few modules being imported and not used).
4546
4552
4547 * Implemented the new ultraTB functionality into IPython. New
4553 * Implemented the new ultraTB functionality into IPython. New
4548 option: xcolors. This chooses color scheme. xmode now only selects
4554 option: xcolors. This chooses color scheme. xmode now only selects
4549 between Plain and Verbose. Better orthogonality.
4555 between Plain and Verbose. Better orthogonality.
4550
4556
4551 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4557 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4552 mode and color scheme for the exception handlers. Now it's
4558 mode and color scheme for the exception handlers. Now it's
4553 possible to have the verbose traceback with no coloring.
4559 possible to have the verbose traceback with no coloring.
4554
4560
4555 2001-11-23 Fernando Perez <fperez@colorado.edu>
4561 2001-11-23 Fernando Perez <fperez@colorado.edu>
4556
4562
4557 * Version 0.1.12 released, 0.1.13 opened.
4563 * Version 0.1.12 released, 0.1.13 opened.
4558
4564
4559 * Removed option to set auto-quote and auto-paren escapes by
4565 * Removed option to set auto-quote and auto-paren escapes by
4560 user. The chances of breaking valid syntax are just too high. If
4566 user. The chances of breaking valid syntax are just too high. If
4561 someone *really* wants, they can always dig into the code.
4567 someone *really* wants, they can always dig into the code.
4562
4568
4563 * Made prompt separators configurable.
4569 * Made prompt separators configurable.
4564
4570
4565 2001-11-22 Fernando Perez <fperez@colorado.edu>
4571 2001-11-22 Fernando Perez <fperez@colorado.edu>
4566
4572
4567 * Small bugfixes in many places.
4573 * Small bugfixes in many places.
4568
4574
4569 * Removed the MyCompleter class from ipplib. It seemed redundant
4575 * Removed the MyCompleter class from ipplib. It seemed redundant
4570 with the C-p,C-n history search functionality. Less code to
4576 with the C-p,C-n history search functionality. Less code to
4571 maintain.
4577 maintain.
4572
4578
4573 * Moved all the original ipython.py code into ipythonlib.py. Right
4579 * Moved all the original ipython.py code into ipythonlib.py. Right
4574 now it's just one big dump into a function called make_IPython, so
4580 now it's just one big dump into a function called make_IPython, so
4575 no real modularity has been gained. But at least it makes the
4581 no real modularity has been gained. But at least it makes the
4576 wrapper script tiny, and since ipythonlib is a module, it gets
4582 wrapper script tiny, and since ipythonlib is a module, it gets
4577 compiled and startup is much faster.
4583 compiled and startup is much faster.
4578
4584
4579 This is a reasobably 'deep' change, so we should test it for a
4585 This is a reasobably 'deep' change, so we should test it for a
4580 while without messing too much more with the code.
4586 while without messing too much more with the code.
4581
4587
4582 2001-11-21 Fernando Perez <fperez@colorado.edu>
4588 2001-11-21 Fernando Perez <fperez@colorado.edu>
4583
4589
4584 * Version 0.1.11 released, 0.1.12 opened for further work.
4590 * Version 0.1.11 released, 0.1.12 opened for further work.
4585
4591
4586 * Removed dependency on Itpl. It was only needed in one place. It
4592 * Removed dependency on Itpl. It was only needed in one place. It
4587 would be nice if this became part of python, though. It makes life
4593 would be nice if this became part of python, though. It makes life
4588 *a lot* easier in some cases.
4594 *a lot* easier in some cases.
4589
4595
4590 * Simplified the prefilter code a bit. Now all handlers are
4596 * Simplified the prefilter code a bit. Now all handlers are
4591 expected to explicitly return a value (at least a blank string).
4597 expected to explicitly return a value (at least a blank string).
4592
4598
4593 * Heavy edits in ipplib. Removed the help system altogether. Now
4599 * Heavy edits in ipplib. Removed the help system altogether. Now
4594 obj?/?? is used for inspecting objects, a magic @doc prints
4600 obj?/?? is used for inspecting objects, a magic @doc prints
4595 docstrings, and full-blown Python help is accessed via the 'help'
4601 docstrings, and full-blown Python help is accessed via the 'help'
4596 keyword. This cleans up a lot of code (less to maintain) and does
4602 keyword. This cleans up a lot of code (less to maintain) and does
4597 the job. Since 'help' is now a standard Python component, might as
4603 the job. Since 'help' is now a standard Python component, might as
4598 well use it and remove duplicate functionality.
4604 well use it and remove duplicate functionality.
4599
4605
4600 Also removed the option to use ipplib as a standalone program. By
4606 Also removed the option to use ipplib as a standalone program. By
4601 now it's too dependent on other parts of IPython to function alone.
4607 now it's too dependent on other parts of IPython to function alone.
4602
4608
4603 * Fixed bug in genutils.pager. It would crash if the pager was
4609 * Fixed bug in genutils.pager. It would crash if the pager was
4604 exited immediately after opening (broken pipe).
4610 exited immediately after opening (broken pipe).
4605
4611
4606 * Trimmed down the VerboseTB reporting a little. The header is
4612 * Trimmed down the VerboseTB reporting a little. The header is
4607 much shorter now and the repeated exception arguments at the end
4613 much shorter now and the repeated exception arguments at the end
4608 have been removed. For interactive use the old header seemed a bit
4614 have been removed. For interactive use the old header seemed a bit
4609 excessive.
4615 excessive.
4610
4616
4611 * Fixed small bug in output of @whos for variables with multi-word
4617 * Fixed small bug in output of @whos for variables with multi-word
4612 types (only first word was displayed).
4618 types (only first word was displayed).
4613
4619
4614 2001-11-17 Fernando Perez <fperez@colorado.edu>
4620 2001-11-17 Fernando Perez <fperez@colorado.edu>
4615
4621
4616 * Version 0.1.10 released, 0.1.11 opened for further work.
4622 * Version 0.1.10 released, 0.1.11 opened for further work.
4617
4623
4618 * Modified dirs and friends. dirs now *returns* the stack (not
4624 * Modified dirs and friends. dirs now *returns* the stack (not
4619 prints), so one can manipulate it as a variable. Convenient to
4625 prints), so one can manipulate it as a variable. Convenient to
4620 travel along many directories.
4626 travel along many directories.
4621
4627
4622 * Fixed bug in magic_pdef: would only work with functions with
4628 * Fixed bug in magic_pdef: would only work with functions with
4623 arguments with default values.
4629 arguments with default values.
4624
4630
4625 2001-11-14 Fernando Perez <fperez@colorado.edu>
4631 2001-11-14 Fernando Perez <fperez@colorado.edu>
4626
4632
4627 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4633 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4628 example with IPython. Various other minor fixes and cleanups.
4634 example with IPython. Various other minor fixes and cleanups.
4629
4635
4630 * Version 0.1.9 released, 0.1.10 opened for further work.
4636 * Version 0.1.9 released, 0.1.10 opened for further work.
4631
4637
4632 * Added sys.path to the list of directories searched in the
4638 * Added sys.path to the list of directories searched in the
4633 execfile= option. It used to be the current directory and the
4639 execfile= option. It used to be the current directory and the
4634 user's IPYTHONDIR only.
4640 user's IPYTHONDIR only.
4635
4641
4636 2001-11-13 Fernando Perez <fperez@colorado.edu>
4642 2001-11-13 Fernando Perez <fperez@colorado.edu>
4637
4643
4638 * Reinstated the raw_input/prefilter separation that Janko had
4644 * Reinstated the raw_input/prefilter separation that Janko had
4639 initially. This gives a more convenient setup for extending the
4645 initially. This gives a more convenient setup for extending the
4640 pre-processor from the outside: raw_input always gets a string,
4646 pre-processor from the outside: raw_input always gets a string,
4641 and prefilter has to process it. We can then redefine prefilter
4647 and prefilter has to process it. We can then redefine prefilter
4642 from the outside and implement extensions for special
4648 from the outside and implement extensions for special
4643 purposes.
4649 purposes.
4644
4650
4645 Today I got one for inputting PhysicalQuantity objects
4651 Today I got one for inputting PhysicalQuantity objects
4646 (from Scientific) without needing any function calls at
4652 (from Scientific) without needing any function calls at
4647 all. Extremely convenient, and it's all done as a user-level
4653 all. Extremely convenient, and it's all done as a user-level
4648 extension (no IPython code was touched). Now instead of:
4654 extension (no IPython code was touched). Now instead of:
4649 a = PhysicalQuantity(4.2,'m/s**2')
4655 a = PhysicalQuantity(4.2,'m/s**2')
4650 one can simply say
4656 one can simply say
4651 a = 4.2 m/s**2
4657 a = 4.2 m/s**2
4652 or even
4658 or even
4653 a = 4.2 m/s^2
4659 a = 4.2 m/s^2
4654
4660
4655 I use this, but it's also a proof of concept: IPython really is
4661 I use this, but it's also a proof of concept: IPython really is
4656 fully user-extensible, even at the level of the parsing of the
4662 fully user-extensible, even at the level of the parsing of the
4657 command line. It's not trivial, but it's perfectly doable.
4663 command line. It's not trivial, but it's perfectly doable.
4658
4664
4659 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4665 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4660 the problem of modules being loaded in the inverse order in which
4666 the problem of modules being loaded in the inverse order in which
4661 they were defined in
4667 they were defined in
4662
4668
4663 * Version 0.1.8 released, 0.1.9 opened for further work.
4669 * Version 0.1.8 released, 0.1.9 opened for further work.
4664
4670
4665 * Added magics pdef, source and file. They respectively show the
4671 * Added magics pdef, source and file. They respectively show the
4666 definition line ('prototype' in C), source code and full python
4672 definition line ('prototype' in C), source code and full python
4667 file for any callable object. The object inspector oinfo uses
4673 file for any callable object. The object inspector oinfo uses
4668 these to show the same information.
4674 these to show the same information.
4669
4675
4670 * Version 0.1.7 released, 0.1.8 opened for further work.
4676 * Version 0.1.7 released, 0.1.8 opened for further work.
4671
4677
4672 * Separated all the magic functions into a class called Magic. The
4678 * Separated all the magic functions into a class called Magic. The
4673 InteractiveShell class was becoming too big for Xemacs to handle
4679 InteractiveShell class was becoming too big for Xemacs to handle
4674 (de-indenting a line would lock it up for 10 seconds while it
4680 (de-indenting a line would lock it up for 10 seconds while it
4675 backtracked on the whole class!)
4681 backtracked on the whole class!)
4676
4682
4677 FIXME: didn't work. It can be done, but right now namespaces are
4683 FIXME: didn't work. It can be done, but right now namespaces are
4678 all messed up. Do it later (reverted it for now, so at least
4684 all messed up. Do it later (reverted it for now, so at least
4679 everything works as before).
4685 everything works as before).
4680
4686
4681 * Got the object introspection system (magic_oinfo) working! I
4687 * Got the object introspection system (magic_oinfo) working! I
4682 think this is pretty much ready for release to Janko, so he can
4688 think this is pretty much ready for release to Janko, so he can
4683 test it for a while and then announce it. Pretty much 100% of what
4689 test it for a while and then announce it. Pretty much 100% of what
4684 I wanted for the 'phase 1' release is ready. Happy, tired.
4690 I wanted for the 'phase 1' release is ready. Happy, tired.
4685
4691
4686 2001-11-12 Fernando Perez <fperez@colorado.edu>
4692 2001-11-12 Fernando Perez <fperez@colorado.edu>
4687
4693
4688 * Version 0.1.6 released, 0.1.7 opened for further work.
4694 * Version 0.1.6 released, 0.1.7 opened for further work.
4689
4695
4690 * Fixed bug in printing: it used to test for truth before
4696 * Fixed bug in printing: it used to test for truth before
4691 printing, so 0 wouldn't print. Now checks for None.
4697 printing, so 0 wouldn't print. Now checks for None.
4692
4698
4693 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4699 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4694 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4700 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4695 reaches by hand into the outputcache. Think of a better way to do
4701 reaches by hand into the outputcache. Think of a better way to do
4696 this later.
4702 this later.
4697
4703
4698 * Various small fixes thanks to Nathan's comments.
4704 * Various small fixes thanks to Nathan's comments.
4699
4705
4700 * Changed magic_pprint to magic_Pprint. This way it doesn't
4706 * Changed magic_pprint to magic_Pprint. This way it doesn't
4701 collide with pprint() and the name is consistent with the command
4707 collide with pprint() and the name is consistent with the command
4702 line option.
4708 line option.
4703
4709
4704 * Changed prompt counter behavior to be fully like
4710 * Changed prompt counter behavior to be fully like
4705 Mathematica's. That is, even input that doesn't return a result
4711 Mathematica's. That is, even input that doesn't return a result
4706 raises the prompt counter. The old behavior was kind of confusing
4712 raises the prompt counter. The old behavior was kind of confusing
4707 (getting the same prompt number several times if the operation
4713 (getting the same prompt number several times if the operation
4708 didn't return a result).
4714 didn't return a result).
4709
4715
4710 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4716 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4711
4717
4712 * Fixed -Classic mode (wasn't working anymore).
4718 * Fixed -Classic mode (wasn't working anymore).
4713
4719
4714 * Added colored prompts using Nathan's new code. Colors are
4720 * Added colored prompts using Nathan's new code. Colors are
4715 currently hardwired, they can be user-configurable. For
4721 currently hardwired, they can be user-configurable. For
4716 developers, they can be chosen in file ipythonlib.py, at the
4722 developers, they can be chosen in file ipythonlib.py, at the
4717 beginning of the CachedOutput class def.
4723 beginning of the CachedOutput class def.
4718
4724
4719 2001-11-11 Fernando Perez <fperez@colorado.edu>
4725 2001-11-11 Fernando Perez <fperez@colorado.edu>
4720
4726
4721 * Version 0.1.5 released, 0.1.6 opened for further work.
4727 * Version 0.1.5 released, 0.1.6 opened for further work.
4722
4728
4723 * Changed magic_env to *return* the environment as a dict (not to
4729 * Changed magic_env to *return* the environment as a dict (not to
4724 print it). This way it prints, but it can also be processed.
4730 print it). This way it prints, but it can also be processed.
4725
4731
4726 * Added Verbose exception reporting to interactive
4732 * Added Verbose exception reporting to interactive
4727 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4733 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4728 traceback. Had to make some changes to the ultraTB file. This is
4734 traceback. Had to make some changes to the ultraTB file. This is
4729 probably the last 'big' thing in my mental todo list. This ties
4735 probably the last 'big' thing in my mental todo list. This ties
4730 in with the next entry:
4736 in with the next entry:
4731
4737
4732 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4738 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4733 has to specify is Plain, Color or Verbose for all exception
4739 has to specify is Plain, Color or Verbose for all exception
4734 handling.
4740 handling.
4735
4741
4736 * Removed ShellServices option. All this can really be done via
4742 * Removed ShellServices option. All this can really be done via
4737 the magic system. It's easier to extend, cleaner and has automatic
4743 the magic system. It's easier to extend, cleaner and has automatic
4738 namespace protection and documentation.
4744 namespace protection and documentation.
4739
4745
4740 2001-11-09 Fernando Perez <fperez@colorado.edu>
4746 2001-11-09 Fernando Perez <fperez@colorado.edu>
4741
4747
4742 * Fixed bug in output cache flushing (missing parameter to
4748 * Fixed bug in output cache flushing (missing parameter to
4743 __init__). Other small bugs fixed (found using pychecker).
4749 __init__). Other small bugs fixed (found using pychecker).
4744
4750
4745 * Version 0.1.4 opened for bugfixing.
4751 * Version 0.1.4 opened for bugfixing.
4746
4752
4747 2001-11-07 Fernando Perez <fperez@colorado.edu>
4753 2001-11-07 Fernando Perez <fperez@colorado.edu>
4748
4754
4749 * Version 0.1.3 released, mainly because of the raw_input bug.
4755 * Version 0.1.3 released, mainly because of the raw_input bug.
4750
4756
4751 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4757 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4752 and when testing for whether things were callable, a call could
4758 and when testing for whether things were callable, a call could
4753 actually be made to certain functions. They would get called again
4759 actually be made to certain functions. They would get called again
4754 once 'really' executed, with a resulting double call. A disaster
4760 once 'really' executed, with a resulting double call. A disaster
4755 in many cases (list.reverse() would never work!).
4761 in many cases (list.reverse() would never work!).
4756
4762
4757 * Removed prefilter() function, moved its code to raw_input (which
4763 * Removed prefilter() function, moved its code to raw_input (which
4758 after all was just a near-empty caller for prefilter). This saves
4764 after all was just a near-empty caller for prefilter). This saves
4759 a function call on every prompt, and simplifies the class a tiny bit.
4765 a function call on every prompt, and simplifies the class a tiny bit.
4760
4766
4761 * Fix _ip to __ip name in magic example file.
4767 * Fix _ip to __ip name in magic example file.
4762
4768
4763 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4769 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4764 work with non-gnu versions of tar.
4770 work with non-gnu versions of tar.
4765
4771
4766 2001-11-06 Fernando Perez <fperez@colorado.edu>
4772 2001-11-06 Fernando Perez <fperez@colorado.edu>
4767
4773
4768 * Version 0.1.2. Just to keep track of the recent changes.
4774 * Version 0.1.2. Just to keep track of the recent changes.
4769
4775
4770 * Fixed nasty bug in output prompt routine. It used to check 'if
4776 * Fixed nasty bug in output prompt routine. It used to check 'if
4771 arg != None...'. Problem is, this fails if arg implements a
4777 arg != None...'. Problem is, this fails if arg implements a
4772 special comparison (__cmp__) which disallows comparing to
4778 special comparison (__cmp__) which disallows comparing to
4773 None. Found it when trying to use the PhysicalQuantity module from
4779 None. Found it when trying to use the PhysicalQuantity module from
4774 ScientificPython.
4780 ScientificPython.
4775
4781
4776 2001-11-05 Fernando Perez <fperez@colorado.edu>
4782 2001-11-05 Fernando Perez <fperez@colorado.edu>
4777
4783
4778 * Also added dirs. Now the pushd/popd/dirs family functions
4784 * Also added dirs. Now the pushd/popd/dirs family functions
4779 basically like the shell, with the added convenience of going home
4785 basically like the shell, with the added convenience of going home
4780 when called with no args.
4786 when called with no args.
4781
4787
4782 * pushd/popd slightly modified to mimic shell behavior more
4788 * pushd/popd slightly modified to mimic shell behavior more
4783 closely.
4789 closely.
4784
4790
4785 * Added env,pushd,popd from ShellServices as magic functions. I
4791 * Added env,pushd,popd from ShellServices as magic functions. I
4786 think the cleanest will be to port all desired functions from
4792 think the cleanest will be to port all desired functions from
4787 ShellServices as magics and remove ShellServices altogether. This
4793 ShellServices as magics and remove ShellServices altogether. This
4788 will provide a single, clean way of adding functionality
4794 will provide a single, clean way of adding functionality
4789 (shell-type or otherwise) to IP.
4795 (shell-type or otherwise) to IP.
4790
4796
4791 2001-11-04 Fernando Perez <fperez@colorado.edu>
4797 2001-11-04 Fernando Perez <fperez@colorado.edu>
4792
4798
4793 * Added .ipython/ directory to sys.path. This way users can keep
4799 * Added .ipython/ directory to sys.path. This way users can keep
4794 customizations there and access them via import.
4800 customizations there and access them via import.
4795
4801
4796 2001-11-03 Fernando Perez <fperez@colorado.edu>
4802 2001-11-03 Fernando Perez <fperez@colorado.edu>
4797
4803
4798 * Opened version 0.1.1 for new changes.
4804 * Opened version 0.1.1 for new changes.
4799
4805
4800 * Changed version number to 0.1.0: first 'public' release, sent to
4806 * Changed version number to 0.1.0: first 'public' release, sent to
4801 Nathan and Janko.
4807 Nathan and Janko.
4802
4808
4803 * Lots of small fixes and tweaks.
4809 * Lots of small fixes and tweaks.
4804
4810
4805 * Minor changes to whos format. Now strings are shown, snipped if
4811 * Minor changes to whos format. Now strings are shown, snipped if
4806 too long.
4812 too long.
4807
4813
4808 * Changed ShellServices to work on __main__ so they show up in @who
4814 * Changed ShellServices to work on __main__ so they show up in @who
4809
4815
4810 * Help also works with ? at the end of a line:
4816 * Help also works with ? at the end of a line:
4811 ?sin and sin?
4817 ?sin and sin?
4812 both produce the same effect. This is nice, as often I use the
4818 both produce the same effect. This is nice, as often I use the
4813 tab-complete to find the name of a method, but I used to then have
4819 tab-complete to find the name of a method, but I used to then have
4814 to go to the beginning of the line to put a ? if I wanted more
4820 to go to the beginning of the line to put a ? if I wanted more
4815 info. Now I can just add the ? and hit return. Convenient.
4821 info. Now I can just add the ? and hit return. Convenient.
4816
4822
4817 2001-11-02 Fernando Perez <fperez@colorado.edu>
4823 2001-11-02 Fernando Perez <fperez@colorado.edu>
4818
4824
4819 * Python version check (>=2.1) added.
4825 * Python version check (>=2.1) added.
4820
4826
4821 * Added LazyPython documentation. At this point the docs are quite
4827 * Added LazyPython documentation. At this point the docs are quite
4822 a mess. A cleanup is in order.
4828 a mess. A cleanup is in order.
4823
4829
4824 * Auto-installer created. For some bizarre reason, the zipfiles
4830 * Auto-installer created. For some bizarre reason, the zipfiles
4825 module isn't working on my system. So I made a tar version
4831 module isn't working on my system. So I made a tar version
4826 (hopefully the command line options in various systems won't kill
4832 (hopefully the command line options in various systems won't kill
4827 me).
4833 me).
4828
4834
4829 * Fixes to Struct in genutils. Now all dictionary-like methods are
4835 * Fixes to Struct in genutils. Now all dictionary-like methods are
4830 protected (reasonably).
4836 protected (reasonably).
4831
4837
4832 * Added pager function to genutils and changed ? to print usage
4838 * Added pager function to genutils and changed ? to print usage
4833 note through it (it was too long).
4839 note through it (it was too long).
4834
4840
4835 * Added the LazyPython functionality. Works great! I changed the
4841 * Added the LazyPython functionality. Works great! I changed the
4836 auto-quote escape to ';', it's on home row and next to '. But
4842 auto-quote escape to ';', it's on home row and next to '. But
4837 both auto-quote and auto-paren (still /) escapes are command-line
4843 both auto-quote and auto-paren (still /) escapes are command-line
4838 parameters.
4844 parameters.
4839
4845
4840
4846
4841 2001-11-01 Fernando Perez <fperez@colorado.edu>
4847 2001-11-01 Fernando Perez <fperez@colorado.edu>
4842
4848
4843 * Version changed to 0.0.7. Fairly large change: configuration now
4849 * Version changed to 0.0.7. Fairly large change: configuration now
4844 is all stored in a directory, by default .ipython. There, all
4850 is all stored in a directory, by default .ipython. There, all
4845 config files have normal looking names (not .names)
4851 config files have normal looking names (not .names)
4846
4852
4847 * Version 0.0.6 Released first to Lucas and Archie as a test
4853 * Version 0.0.6 Released first to Lucas and Archie as a test
4848 run. Since it's the first 'semi-public' release, change version to
4854 run. Since it's the first 'semi-public' release, change version to
4849 > 0.0.6 for any changes now.
4855 > 0.0.6 for any changes now.
4850
4856
4851 * Stuff I had put in the ipplib.py changelog:
4857 * Stuff I had put in the ipplib.py changelog:
4852
4858
4853 Changes to InteractiveShell:
4859 Changes to InteractiveShell:
4854
4860
4855 - Made the usage message a parameter.
4861 - Made the usage message a parameter.
4856
4862
4857 - Require the name of the shell variable to be given. It's a bit
4863 - Require the name of the shell variable to be given. It's a bit
4858 of a hack, but allows the name 'shell' not to be hardwire in the
4864 of a hack, but allows the name 'shell' not to be hardwire in the
4859 magic (@) handler, which is problematic b/c it requires
4865 magic (@) handler, which is problematic b/c it requires
4860 polluting the global namespace with 'shell'. This in turn is
4866 polluting the global namespace with 'shell'. This in turn is
4861 fragile: if a user redefines a variable called shell, things
4867 fragile: if a user redefines a variable called shell, things
4862 break.
4868 break.
4863
4869
4864 - magic @: all functions available through @ need to be defined
4870 - magic @: all functions available through @ need to be defined
4865 as magic_<name>, even though they can be called simply as
4871 as magic_<name>, even though they can be called simply as
4866 @<name>. This allows the special command @magic to gather
4872 @<name>. This allows the special command @magic to gather
4867 information automatically about all existing magic functions,
4873 information automatically about all existing magic functions,
4868 even if they are run-time user extensions, by parsing the shell
4874 even if they are run-time user extensions, by parsing the shell
4869 instance __dict__ looking for special magic_ names.
4875 instance __dict__ looking for special magic_ names.
4870
4876
4871 - mainloop: added *two* local namespace parameters. This allows
4877 - mainloop: added *two* local namespace parameters. This allows
4872 the class to differentiate between parameters which were there
4878 the class to differentiate between parameters which were there
4873 before and after command line initialization was processed. This
4879 before and after command line initialization was processed. This
4874 way, later @who can show things loaded at startup by the
4880 way, later @who can show things loaded at startup by the
4875 user. This trick was necessary to make session saving/reloading
4881 user. This trick was necessary to make session saving/reloading
4876 really work: ideally after saving/exiting/reloading a session,
4882 really work: ideally after saving/exiting/reloading a session,
4877 *everythin* should look the same, including the output of @who. I
4883 *everythin* should look the same, including the output of @who. I
4878 was only able to make this work with this double namespace
4884 was only able to make this work with this double namespace
4879 trick.
4885 trick.
4880
4886
4881 - added a header to the logfile which allows (almost) full
4887 - added a header to the logfile which allows (almost) full
4882 session restoring.
4888 session restoring.
4883
4889
4884 - prepend lines beginning with @ or !, with a and log
4890 - prepend lines beginning with @ or !, with a and log
4885 them. Why? !lines: may be useful to know what you did @lines:
4891 them. Why? !lines: may be useful to know what you did @lines:
4886 they may affect session state. So when restoring a session, at
4892 they may affect session state. So when restoring a session, at
4887 least inform the user of their presence. I couldn't quite get
4893 least inform the user of their presence. I couldn't quite get
4888 them to properly re-execute, but at least the user is warned.
4894 them to properly re-execute, but at least the user is warned.
4889
4895
4890 * Started ChangeLog.
4896 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now