##// END OF EJS Templates
Try to import pyreadline on win32
vivainio -
Show More
@@ -1,2271 +1,2285 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 IPython -- An enhanced Interactive Python
3 IPython -- An enhanced Interactive Python
4
4
5 Requires Python 2.3 or newer.
5 Requires Python 2.3 or newer.
6
6
7 This file contains all the classes and helper functions specific to IPython.
7 This file contains all the classes and helper functions specific to IPython.
8
8
9 $Id: iplib.py 1097 2006-01-28 20:22:13Z vivainio $
9 $Id: iplib.py 1098 2006-01-29 16:14:21Z vivainio $
10 """
10 """
11
11
12 #*****************************************************************************
12 #*****************************************************************************
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
15 #
15 #
16 # Distributed under the terms of the BSD License. The full license is in
16 # Distributed under the terms of the BSD License. The full license is in
17 # the file COPYING, distributed as part of this software.
17 # the file COPYING, distributed as part of this software.
18 #
18 #
19 # Note: this code originally subclassed code.InteractiveConsole from the
19 # Note: this code originally subclassed code.InteractiveConsole from the
20 # Python standard library. Over time, all of that class has been copied
20 # Python standard library. Over time, all of that class has been copied
21 # verbatim here for modifications which could not be accomplished by
21 # verbatim here for modifications which could not be accomplished by
22 # subclassing. At this point, there are no dependencies at all on the code
22 # subclassing. At this point, there are no dependencies at all on the code
23 # module anymore (it is not even imported). The Python License (sec. 2)
23 # module anymore (it is not even imported). The Python License (sec. 2)
24 # allows for this, but it's always nice to acknowledge credit where credit is
24 # allows for this, but it's always nice to acknowledge credit where credit is
25 # due.
25 # due.
26 #*****************************************************************************
26 #*****************************************************************************
27
27
28 #****************************************************************************
28 #****************************************************************************
29 # Modules and globals
29 # Modules and globals
30
30
31 from __future__ import generators # for 2.2 backwards-compatibility
31 from __future__ import generators # for 2.2 backwards-compatibility
32
32
33 from IPython import Release
33 from IPython import Release
34 __author__ = '%s <%s>\n%s <%s>' % \
34 __author__ = '%s <%s>\n%s <%s>' % \
35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
36 __license__ = Release.license
36 __license__ = Release.license
37 __version__ = Release.version
37 __version__ = Release.version
38
38
39 # Python standard modules
39 # Python standard modules
40 import __main__
40 import __main__
41 import __builtin__
41 import __builtin__
42 import StringIO
42 import StringIO
43 import bdb
43 import bdb
44 import cPickle as pickle
44 import cPickle as pickle
45 import codeop
45 import codeop
46 import exceptions
46 import exceptions
47 import glob
47 import glob
48 import inspect
48 import inspect
49 import keyword
49 import keyword
50 import new
50 import new
51 import os
51 import os
52 import pdb
52 import pdb
53 import pydoc
53 import pydoc
54 import re
54 import re
55 import shutil
55 import shutil
56 import string
56 import string
57 import sys
57 import sys
58 import tempfile
58 import tempfile
59 import traceback
59 import traceback
60 import types
60 import types
61
61
62 from pprint import pprint, pformat
62 from pprint import pprint, pformat
63
63
64 # IPython's own modules
64 # IPython's own modules
65 import IPython
65 import IPython
66 from IPython import OInspect,PyColorize,ultraTB
66 from IPython import OInspect,PyColorize,ultraTB
67 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
67 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
68 from IPython.FakeModule import FakeModule
68 from IPython.FakeModule import FakeModule
69 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
69 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
70 from IPython.Logger import Logger
70 from IPython.Logger import Logger
71 from IPython.Magic import Magic
71 from IPython.Magic import Magic
72 from IPython.Prompts import CachedOutput
72 from IPython.Prompts import CachedOutput
73 from IPython.ipstruct import Struct
73 from IPython.ipstruct import Struct
74 from IPython.background_jobs import BackgroundJobManager
74 from IPython.background_jobs import BackgroundJobManager
75 from IPython.usage import cmd_line_usage,interactive_usage
75 from IPython.usage import cmd_line_usage,interactive_usage
76 from IPython.genutils import *
76 from IPython.genutils import *
77 import IPython.ipapi
77 import IPython.ipapi
78
78
79 # Globals
79 # Globals
80
80
81 # store the builtin raw_input globally, and use this always, in case user code
81 # store the builtin raw_input globally, and use this always, in case user code
82 # overwrites it (like wx.py.PyShell does)
82 # overwrites it (like wx.py.PyShell does)
83 raw_input_original = raw_input
83 raw_input_original = raw_input
84
84
85 # compiled regexps for autoindent management
85 # compiled regexps for autoindent management
86 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
86 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
87
87
88
88
89 #****************************************************************************
89 #****************************************************************************
90 # Some utility function definitions
90 # Some utility function definitions
91
91
92 ini_spaces_re = re.compile(r'^(\s+)')
92 ini_spaces_re = re.compile(r'^(\s+)')
93
93
94 def num_ini_spaces(strng):
94 def num_ini_spaces(strng):
95 """Return the number of initial spaces in a string"""
95 """Return the number of initial spaces in a string"""
96
96
97 ini_spaces = ini_spaces_re.match(strng)
97 ini_spaces = ini_spaces_re.match(strng)
98 if ini_spaces:
98 if ini_spaces:
99 return ini_spaces.end()
99 return ini_spaces.end()
100 else:
100 else:
101 return 0
101 return 0
102
102
103 def softspace(file, newvalue):
103 def softspace(file, newvalue):
104 """Copied from code.py, to remove the dependency"""
104 """Copied from code.py, to remove the dependency"""
105
105
106 oldvalue = 0
106 oldvalue = 0
107 try:
107 try:
108 oldvalue = file.softspace
108 oldvalue = file.softspace
109 except AttributeError:
109 except AttributeError:
110 pass
110 pass
111 try:
111 try:
112 file.softspace = newvalue
112 file.softspace = newvalue
113 except (AttributeError, TypeError):
113 except (AttributeError, TypeError):
114 # "attribute-less object" or "read-only attributes"
114 # "attribute-less object" or "read-only attributes"
115 pass
115 pass
116 return oldvalue
116 return oldvalue
117
117
118
118
119 #****************************************************************************
119 #****************************************************************************
120 # Local use exceptions
120 # Local use exceptions
121 class SpaceInInput(exceptions.Exception): pass
121 class SpaceInInput(exceptions.Exception): pass
122
122
123
123
124 #****************************************************************************
124 #****************************************************************************
125 # Local use classes
125 # Local use classes
126 class Bunch: pass
126 class Bunch: pass
127
127
128 class Undefined: pass
128 class Undefined: pass
129
129
130 class InputList(list):
130 class InputList(list):
131 """Class to store user input.
131 """Class to store user input.
132
132
133 It's basically a list, but slices return a string instead of a list, thus
133 It's basically a list, but slices return a string instead of a list, thus
134 allowing things like (assuming 'In' is an instance):
134 allowing things like (assuming 'In' is an instance):
135
135
136 exec In[4:7]
136 exec In[4:7]
137
137
138 or
138 or
139
139
140 exec In[5:9] + In[14] + In[21:25]"""
140 exec In[5:9] + In[14] + In[21:25]"""
141
141
142 def __getslice__(self,i,j):
142 def __getslice__(self,i,j):
143 return ''.join(list.__getslice__(self,i,j))
143 return ''.join(list.__getslice__(self,i,j))
144
144
145 class SyntaxTB(ultraTB.ListTB):
145 class SyntaxTB(ultraTB.ListTB):
146 """Extension which holds some state: the last exception value"""
146 """Extension which holds some state: the last exception value"""
147
147
148 def __init__(self,color_scheme = 'NoColor'):
148 def __init__(self,color_scheme = 'NoColor'):
149 ultraTB.ListTB.__init__(self,color_scheme)
149 ultraTB.ListTB.__init__(self,color_scheme)
150 self.last_syntax_error = None
150 self.last_syntax_error = None
151
151
152 def __call__(self, etype, value, elist):
152 def __call__(self, etype, value, elist):
153 self.last_syntax_error = value
153 self.last_syntax_error = value
154 ultraTB.ListTB.__call__(self,etype,value,elist)
154 ultraTB.ListTB.__call__(self,etype,value,elist)
155
155
156 def clear_err_state(self):
156 def clear_err_state(self):
157 """Return the current error state and clear it"""
157 """Return the current error state and clear it"""
158 e = self.last_syntax_error
158 e = self.last_syntax_error
159 self.last_syntax_error = None
159 self.last_syntax_error = None
160 return e
160 return e
161
161
162 #****************************************************************************
162 #****************************************************************************
163 # Main IPython class
163 # Main IPython class
164
164
165 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
165 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
166 # until a full rewrite is made. I've cleaned all cross-class uses of
166 # until a full rewrite is made. I've cleaned all cross-class uses of
167 # attributes and methods, but too much user code out there relies on the
167 # attributes and methods, but too much user code out there relies on the
168 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
168 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
169 #
169 #
170 # But at least now, all the pieces have been separated and we could, in
170 # But at least now, all the pieces have been separated and we could, in
171 # principle, stop using the mixin. This will ease the transition to the
171 # principle, stop using the mixin. This will ease the transition to the
172 # chainsaw branch.
172 # chainsaw branch.
173
173
174 # For reference, the following is the list of 'self.foo' uses in the Magic
174 # For reference, the following is the list of 'self.foo' uses in the Magic
175 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
175 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
176 # class, to prevent clashes.
176 # class, to prevent clashes.
177
177
178 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
178 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
179 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
179 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
180 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
180 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
181 # 'self.value']
181 # 'self.value']
182
182
183 class InteractiveShell(object,Magic):
183 class InteractiveShell(object,Magic):
184 """An enhanced console for Python."""
184 """An enhanced console for Python."""
185
185
186 # class attribute to indicate whether the class supports threads or not.
186 # class attribute to indicate whether the class supports threads or not.
187 # Subclasses with thread support should override this as needed.
187 # Subclasses with thread support should override this as needed.
188 isthreaded = False
188 isthreaded = False
189
189
190 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
190 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
191 user_ns = None,user_global_ns=None,banner2='',
191 user_ns = None,user_global_ns=None,banner2='',
192 custom_exceptions=((),None),embedded=False):
192 custom_exceptions=((),None),embedded=False):
193
193
194 # log system
194 # log system
195 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
195 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
196
196
197 # Produce a public API instance
197 # Produce a public API instance
198
198
199 self.api = IPython.ipapi.IPApi(self)
199 self.api = IPython.ipapi.IPApi(self)
200
200
201 # some minimal strict typechecks. For some core data structures, I
201 # some minimal strict typechecks. For some core data structures, I
202 # want actual basic python types, not just anything that looks like
202 # want actual basic python types, not just anything that looks like
203 # one. This is especially true for namespaces.
203 # one. This is especially true for namespaces.
204 for ns in (user_ns,user_global_ns):
204 for ns in (user_ns,user_global_ns):
205 if ns is not None and type(ns) != types.DictType:
205 if ns is not None and type(ns) != types.DictType:
206 raise TypeError,'namespace must be a dictionary'
206 raise TypeError,'namespace must be a dictionary'
207
207
208 # Job manager (for jobs run as background threads)
208 # Job manager (for jobs run as background threads)
209 self.jobs = BackgroundJobManager()
209 self.jobs = BackgroundJobManager()
210
210
211 # track which builtins we add, so we can clean up later
211 # track which builtins we add, so we can clean up later
212 self.builtins_added = {}
212 self.builtins_added = {}
213 # This method will add the necessary builtins for operation, but
213 # This method will add the necessary builtins for operation, but
214 # tracking what it did via the builtins_added dict.
214 # tracking what it did via the builtins_added dict.
215 self.add_builtins()
215 self.add_builtins()
216
216
217 # Do the intuitively correct thing for quit/exit: we remove the
217 # Do the intuitively correct thing for quit/exit: we remove the
218 # builtins if they exist, and our own magics will deal with this
218 # builtins if they exist, and our own magics will deal with this
219 try:
219 try:
220 del __builtin__.exit, __builtin__.quit
220 del __builtin__.exit, __builtin__.quit
221 except AttributeError:
221 except AttributeError:
222 pass
222 pass
223
223
224 # Store the actual shell's name
224 # Store the actual shell's name
225 self.name = name
225 self.name = name
226
226
227 # We need to know whether the instance is meant for embedding, since
227 # We need to know whether the instance is meant for embedding, since
228 # global/local namespaces need to be handled differently in that case
228 # global/local namespaces need to be handled differently in that case
229 self.embedded = embedded
229 self.embedded = embedded
230
230
231 # command compiler
231 # command compiler
232 self.compile = codeop.CommandCompiler()
232 self.compile = codeop.CommandCompiler()
233
233
234 # User input buffer
234 # User input buffer
235 self.buffer = []
235 self.buffer = []
236
236
237 # Default name given in compilation of code
237 # Default name given in compilation of code
238 self.filename = '<ipython console>'
238 self.filename = '<ipython console>'
239
239
240 # Make an empty namespace, which extension writers can rely on both
240 # Make an empty namespace, which extension writers can rely on both
241 # existing and NEVER being used by ipython itself. This gives them a
241 # existing and NEVER being used by ipython itself. This gives them a
242 # convenient location for storing additional information and state
242 # convenient location for storing additional information and state
243 # their extensions may require, without fear of collisions with other
243 # their extensions may require, without fear of collisions with other
244 # ipython names that may develop later.
244 # ipython names that may develop later.
245 self.meta = Struct()
245 self.meta = Struct()
246
246
247 # Create the namespace where the user will operate. user_ns is
247 # Create the namespace where the user will operate. user_ns is
248 # normally the only one used, and it is passed to the exec calls as
248 # normally the only one used, and it is passed to the exec calls as
249 # the locals argument. But we do carry a user_global_ns namespace
249 # the locals argument. But we do carry a user_global_ns namespace
250 # given as the exec 'globals' argument, This is useful in embedding
250 # given as the exec 'globals' argument, This is useful in embedding
251 # situations where the ipython shell opens in a context where the
251 # situations where the ipython shell opens in a context where the
252 # distinction between locals and globals is meaningful.
252 # distinction between locals and globals is meaningful.
253
253
254 # FIXME. For some strange reason, __builtins__ is showing up at user
254 # FIXME. For some strange reason, __builtins__ is showing up at user
255 # level as a dict instead of a module. This is a manual fix, but I
255 # level as a dict instead of a module. This is a manual fix, but I
256 # should really track down where the problem is coming from. Alex
256 # should really track down where the problem is coming from. Alex
257 # Schmolck reported this problem first.
257 # Schmolck reported this problem first.
258
258
259 # A useful post by Alex Martelli on this topic:
259 # A useful post by Alex Martelli on this topic:
260 # Re: inconsistent value from __builtins__
260 # Re: inconsistent value from __builtins__
261 # Von: Alex Martelli <aleaxit@yahoo.com>
261 # Von: Alex Martelli <aleaxit@yahoo.com>
262 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
262 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
263 # Gruppen: comp.lang.python
263 # Gruppen: comp.lang.python
264
264
265 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
265 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
266 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
266 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
267 # > <type 'dict'>
267 # > <type 'dict'>
268 # > >>> print type(__builtins__)
268 # > >>> print type(__builtins__)
269 # > <type 'module'>
269 # > <type 'module'>
270 # > Is this difference in return value intentional?
270 # > Is this difference in return value intentional?
271
271
272 # Well, it's documented that '__builtins__' can be either a dictionary
272 # Well, it's documented that '__builtins__' can be either a dictionary
273 # or a module, and it's been that way for a long time. Whether it's
273 # or a module, and it's been that way for a long time. Whether it's
274 # intentional (or sensible), I don't know. In any case, the idea is
274 # intentional (or sensible), I don't know. In any case, the idea is
275 # that if you need to access the built-in namespace directly, you
275 # that if you need to access the built-in namespace directly, you
276 # should start with "import __builtin__" (note, no 's') which will
276 # should start with "import __builtin__" (note, no 's') which will
277 # definitely give you a module. Yeah, it's somewhat confusing:-(.
277 # definitely give you a module. Yeah, it's somewhat confusing:-(.
278
278
279 if user_ns is None:
279 if user_ns is None:
280 # Set __name__ to __main__ to better match the behavior of the
280 # Set __name__ to __main__ to better match the behavior of the
281 # normal interpreter.
281 # normal interpreter.
282 user_ns = {'__name__' :'__main__',
282 user_ns = {'__name__' :'__main__',
283 '__builtins__' : __builtin__,
283 '__builtins__' : __builtin__,
284 }
284 }
285
285
286 if user_global_ns is None:
286 if user_global_ns is None:
287 user_global_ns = {}
287 user_global_ns = {}
288
288
289 # Assign namespaces
289 # Assign namespaces
290 # This is the namespace where all normal user variables live
290 # This is the namespace where all normal user variables live
291 self.user_ns = user_ns
291 self.user_ns = user_ns
292 # Embedded instances require a separate namespace for globals.
292 # Embedded instances require a separate namespace for globals.
293 # Normally this one is unused by non-embedded instances.
293 # Normally this one is unused by non-embedded instances.
294 self.user_global_ns = user_global_ns
294 self.user_global_ns = user_global_ns
295 # A namespace to keep track of internal data structures to prevent
295 # A namespace to keep track of internal data structures to prevent
296 # them from cluttering user-visible stuff. Will be updated later
296 # them from cluttering user-visible stuff. Will be updated later
297 self.internal_ns = {}
297 self.internal_ns = {}
298
298
299 # Namespace of system aliases. Each entry in the alias
299 # Namespace of system aliases. Each entry in the alias
300 # table must be a 2-tuple of the form (N,name), where N is the number
300 # table must be a 2-tuple of the form (N,name), where N is the number
301 # of positional arguments of the alias.
301 # of positional arguments of the alias.
302 self.alias_table = {}
302 self.alias_table = {}
303
303
304 # A table holding all the namespaces IPython deals with, so that
304 # A table holding all the namespaces IPython deals with, so that
305 # introspection facilities can search easily.
305 # introspection facilities can search easily.
306 self.ns_table = {'user':user_ns,
306 self.ns_table = {'user':user_ns,
307 'user_global':user_global_ns,
307 'user_global':user_global_ns,
308 'alias':self.alias_table,
308 'alias':self.alias_table,
309 'internal':self.internal_ns,
309 'internal':self.internal_ns,
310 'builtin':__builtin__.__dict__
310 'builtin':__builtin__.__dict__
311 }
311 }
312
312
313 # The user namespace MUST have a pointer to the shell itself.
313 # The user namespace MUST have a pointer to the shell itself.
314 self.user_ns[name] = self
314 self.user_ns[name] = self
315
315
316 # We need to insert into sys.modules something that looks like a
316 # We need to insert into sys.modules something that looks like a
317 # module but which accesses the IPython namespace, for shelve and
317 # module but which accesses the IPython namespace, for shelve and
318 # pickle to work interactively. Normally they rely on getting
318 # pickle to work interactively. Normally they rely on getting
319 # everything out of __main__, but for embedding purposes each IPython
319 # everything out of __main__, but for embedding purposes each IPython
320 # instance has its own private namespace, so we can't go shoving
320 # instance has its own private namespace, so we can't go shoving
321 # everything into __main__.
321 # everything into __main__.
322
322
323 # note, however, that we should only do this for non-embedded
323 # note, however, that we should only do this for non-embedded
324 # ipythons, which really mimic the __main__.__dict__ with their own
324 # ipythons, which really mimic the __main__.__dict__ with their own
325 # namespace. Embedded instances, on the other hand, should not do
325 # namespace. Embedded instances, on the other hand, should not do
326 # this because they need to manage the user local/global namespaces
326 # this because they need to manage the user local/global namespaces
327 # only, but they live within a 'normal' __main__ (meaning, they
327 # only, but they live within a 'normal' __main__ (meaning, they
328 # shouldn't overtake the execution environment of the script they're
328 # shouldn't overtake the execution environment of the script they're
329 # embedded in).
329 # embedded in).
330
330
331 if not embedded:
331 if not embedded:
332 try:
332 try:
333 main_name = self.user_ns['__name__']
333 main_name = self.user_ns['__name__']
334 except KeyError:
334 except KeyError:
335 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
335 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
336 else:
336 else:
337 #print "pickle hack in place" # dbg
337 #print "pickle hack in place" # dbg
338 #print 'main_name:',main_name # dbg
338 #print 'main_name:',main_name # dbg
339 sys.modules[main_name] = FakeModule(self.user_ns)
339 sys.modules[main_name] = FakeModule(self.user_ns)
340
340
341 # List of input with multi-line handling.
341 # List of input with multi-line handling.
342 # Fill its zero entry, user counter starts at 1
342 # Fill its zero entry, user counter starts at 1
343 self.input_hist = InputList(['\n'])
343 self.input_hist = InputList(['\n'])
344 # This one will hold the 'raw' input history, without any
344 # This one will hold the 'raw' input history, without any
345 # pre-processing. This will allow users to retrieve the input just as
345 # pre-processing. This will allow users to retrieve the input just as
346 # it was exactly typed in by the user, with %hist -r.
346 # it was exactly typed in by the user, with %hist -r.
347 self.input_hist_raw = InputList(['\n'])
347 self.input_hist_raw = InputList(['\n'])
348
348
349 # list of visited directories
349 # list of visited directories
350 try:
350 try:
351 self.dir_hist = [os.getcwd()]
351 self.dir_hist = [os.getcwd()]
352 except IOError, e:
352 except IOError, e:
353 self.dir_hist = []
353 self.dir_hist = []
354
354
355 # dict of output history
355 # dict of output history
356 self.output_hist = {}
356 self.output_hist = {}
357
357
358 # dict of things NOT to alias (keywords, builtins and some magics)
358 # dict of things NOT to alias (keywords, builtins and some magics)
359 no_alias = {}
359 no_alias = {}
360 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
360 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
361 for key in keyword.kwlist + no_alias_magics:
361 for key in keyword.kwlist + no_alias_magics:
362 no_alias[key] = 1
362 no_alias[key] = 1
363 no_alias.update(__builtin__.__dict__)
363 no_alias.update(__builtin__.__dict__)
364 self.no_alias = no_alias
364 self.no_alias = no_alias
365
365
366 # make global variables for user access to these
366 # make global variables for user access to these
367 self.user_ns['_ih'] = self.input_hist
367 self.user_ns['_ih'] = self.input_hist
368 self.user_ns['_oh'] = self.output_hist
368 self.user_ns['_oh'] = self.output_hist
369 self.user_ns['_dh'] = self.dir_hist
369 self.user_ns['_dh'] = self.dir_hist
370
370
371 # user aliases to input and output histories
371 # user aliases to input and output histories
372 self.user_ns['In'] = self.input_hist
372 self.user_ns['In'] = self.input_hist
373 self.user_ns['Out'] = self.output_hist
373 self.user_ns['Out'] = self.output_hist
374
374
375 # Object variable to store code object waiting execution. This is
375 # Object variable to store code object waiting execution. This is
376 # used mainly by the multithreaded shells, but it can come in handy in
376 # used mainly by the multithreaded shells, but it can come in handy in
377 # other situations. No need to use a Queue here, since it's a single
377 # other situations. No need to use a Queue here, since it's a single
378 # item which gets cleared once run.
378 # item which gets cleared once run.
379 self.code_to_run = None
379 self.code_to_run = None
380
380
381 # escapes for automatic behavior on the command line
381 # escapes for automatic behavior on the command line
382 self.ESC_SHELL = '!'
382 self.ESC_SHELL = '!'
383 self.ESC_HELP = '?'
383 self.ESC_HELP = '?'
384 self.ESC_MAGIC = '%'
384 self.ESC_MAGIC = '%'
385 self.ESC_QUOTE = ','
385 self.ESC_QUOTE = ','
386 self.ESC_QUOTE2 = ';'
386 self.ESC_QUOTE2 = ';'
387 self.ESC_PAREN = '/'
387 self.ESC_PAREN = '/'
388
388
389 # And their associated handlers
389 # And their associated handlers
390 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
390 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
391 self.ESC_QUOTE : self.handle_auto,
391 self.ESC_QUOTE : self.handle_auto,
392 self.ESC_QUOTE2 : self.handle_auto,
392 self.ESC_QUOTE2 : self.handle_auto,
393 self.ESC_MAGIC : self.handle_magic,
393 self.ESC_MAGIC : self.handle_magic,
394 self.ESC_HELP : self.handle_help,
394 self.ESC_HELP : self.handle_help,
395 self.ESC_SHELL : self.handle_shell_escape,
395 self.ESC_SHELL : self.handle_shell_escape,
396 }
396 }
397
397
398 # class initializations
398 # class initializations
399 Magic.__init__(self,self)
399 Magic.__init__(self,self)
400
400
401 # Python source parser/formatter for syntax highlighting
401 # Python source parser/formatter for syntax highlighting
402 pyformat = PyColorize.Parser().format
402 pyformat = PyColorize.Parser().format
403 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
403 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
404
404
405 # hooks holds pointers used for user-side customizations
405 # hooks holds pointers used for user-side customizations
406 self.hooks = Struct()
406 self.hooks = Struct()
407
407
408 # Set all default hooks, defined in the IPython.hooks module.
408 # Set all default hooks, defined in the IPython.hooks module.
409 hooks = IPython.hooks
409 hooks = IPython.hooks
410 for hook_name in hooks.__all__:
410 for hook_name in hooks.__all__:
411 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
411 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
412 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
412 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
413 #print "bound hook",hook_name
413 #print "bound hook",hook_name
414
414
415 # Flag to mark unconditional exit
415 # Flag to mark unconditional exit
416 self.exit_now = False
416 self.exit_now = False
417
417
418 self.usage_min = """\
418 self.usage_min = """\
419 An enhanced console for Python.
419 An enhanced console for Python.
420 Some of its features are:
420 Some of its features are:
421 - Readline support if the readline library is present.
421 - Readline support if the readline library is present.
422 - Tab completion in the local namespace.
422 - Tab completion in the local namespace.
423 - Logging of input, see command-line options.
423 - Logging of input, see command-line options.
424 - System shell escape via ! , eg !ls.
424 - System shell escape via ! , eg !ls.
425 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
425 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
426 - Keeps track of locally defined variables via %who, %whos.
426 - Keeps track of locally defined variables via %who, %whos.
427 - Show object information with a ? eg ?x or x? (use ?? for more info).
427 - Show object information with a ? eg ?x or x? (use ?? for more info).
428 """
428 """
429 if usage: self.usage = usage
429 if usage: self.usage = usage
430 else: self.usage = self.usage_min
430 else: self.usage = self.usage_min
431
431
432 # Storage
432 # Storage
433 self.rc = rc # This will hold all configuration information
433 self.rc = rc # This will hold all configuration information
434 self.pager = 'less'
434 self.pager = 'less'
435 # temporary files used for various purposes. Deleted at exit.
435 # temporary files used for various purposes. Deleted at exit.
436 self.tempfiles = []
436 self.tempfiles = []
437
437
438 # Keep track of readline usage (later set by init_readline)
438 # Keep track of readline usage (later set by init_readline)
439 self.has_readline = False
439 self.has_readline = False
440
440
441 # template for logfile headers. It gets resolved at runtime by the
441 # template for logfile headers. It gets resolved at runtime by the
442 # logstart method.
442 # logstart method.
443 self.loghead_tpl = \
443 self.loghead_tpl = \
444 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
444 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
445 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
445 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
446 #log# opts = %s
446 #log# opts = %s
447 #log# args = %s
447 #log# args = %s
448 #log# It is safe to make manual edits below here.
448 #log# It is safe to make manual edits below here.
449 #log#-----------------------------------------------------------------------
449 #log#-----------------------------------------------------------------------
450 """
450 """
451 # for pushd/popd management
451 # for pushd/popd management
452 try:
452 try:
453 self.home_dir = get_home_dir()
453 self.home_dir = get_home_dir()
454 except HomeDirError,msg:
454 except HomeDirError,msg:
455 fatal(msg)
455 fatal(msg)
456
456
457 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
457 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
458
458
459 # Functions to call the underlying shell.
459 # Functions to call the underlying shell.
460
460
461 # utility to expand user variables via Itpl
461 # utility to expand user variables via Itpl
462 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
462 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
463 self.user_ns))
463 self.user_ns))
464 # The first is similar to os.system, but it doesn't return a value,
464 # The first is similar to os.system, but it doesn't return a value,
465 # and it allows interpolation of variables in the user's namespace.
465 # and it allows interpolation of variables in the user's namespace.
466 self.system = lambda cmd: shell(self.var_expand(cmd),
466 self.system = lambda cmd: shell(self.var_expand(cmd),
467 header='IPython system call: ',
467 header='IPython system call: ',
468 verbose=self.rc.system_verbose)
468 verbose=self.rc.system_verbose)
469 # These are for getoutput and getoutputerror:
469 # These are for getoutput and getoutputerror:
470 self.getoutput = lambda cmd: \
470 self.getoutput = lambda cmd: \
471 getoutput(self.var_expand(cmd),
471 getoutput(self.var_expand(cmd),
472 header='IPython system call: ',
472 header='IPython system call: ',
473 verbose=self.rc.system_verbose)
473 verbose=self.rc.system_verbose)
474 self.getoutputerror = lambda cmd: \
474 self.getoutputerror = lambda cmd: \
475 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
475 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
476 self.user_ns)),
476 self.user_ns)),
477 header='IPython system call: ',
477 header='IPython system call: ',
478 verbose=self.rc.system_verbose)
478 verbose=self.rc.system_verbose)
479
479
480 # RegExp for splitting line contents into pre-char//first
480 # RegExp for splitting line contents into pre-char//first
481 # word-method//rest. For clarity, each group in on one line.
481 # word-method//rest. For clarity, each group in on one line.
482
482
483 # WARNING: update the regexp if the above escapes are changed, as they
483 # WARNING: update the regexp if the above escapes are changed, as they
484 # are hardwired in.
484 # are hardwired in.
485
485
486 # Don't get carried away with trying to make the autocalling catch too
486 # Don't get carried away with trying to make the autocalling catch too
487 # much: it's better to be conservative rather than to trigger hidden
487 # much: it's better to be conservative rather than to trigger hidden
488 # evals() somewhere and end up causing side effects.
488 # evals() somewhere and end up causing side effects.
489
489
490 self.line_split = re.compile(r'^([\s*,;/])'
490 self.line_split = re.compile(r'^([\s*,;/])'
491 r'([\?\w\.]+\w*\s*)'
491 r'([\?\w\.]+\w*\s*)'
492 r'(\(?.*$)')
492 r'(\(?.*$)')
493
493
494 # Original re, keep around for a while in case changes break something
494 # Original re, keep around for a while in case changes break something
495 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
495 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
496 # r'(\s*[\?\w\.]+\w*\s*)'
496 # r'(\s*[\?\w\.]+\w*\s*)'
497 # r'(\(?.*$)')
497 # r'(\(?.*$)')
498
498
499 # RegExp to identify potential function names
499 # RegExp to identify potential function names
500 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
500 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
501
501
502 # RegExp to exclude strings with this start from autocalling. In
502 # RegExp to exclude strings with this start from autocalling. In
503 # particular, all binary operators should be excluded, so that if foo
503 # particular, all binary operators should be excluded, so that if foo
504 # is callable, foo OP bar doesn't become foo(OP bar), which is
504 # is callable, foo OP bar doesn't become foo(OP bar), which is
505 # invalid. The characters '!=()' don't need to be checked for, as the
505 # invalid. The characters '!=()' don't need to be checked for, as the
506 # _prefilter routine explicitely does so, to catch direct calls and
506 # _prefilter routine explicitely does so, to catch direct calls and
507 # rebindings of existing names.
507 # rebindings of existing names.
508
508
509 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
509 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
510 # it affects the rest of the group in square brackets.
510 # it affects the rest of the group in square brackets.
511 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
511 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
512 '|^is |^not |^in |^and |^or ')
512 '|^is |^not |^in |^and |^or ')
513
513
514 # try to catch also methods for stuff in lists/tuples/dicts: off
514 # try to catch also methods for stuff in lists/tuples/dicts: off
515 # (experimental). For this to work, the line_split regexp would need
515 # (experimental). For this to work, the line_split regexp would need
516 # to be modified so it wouldn't break things at '['. That line is
516 # to be modified so it wouldn't break things at '['. That line is
517 # nasty enough that I shouldn't change it until I can test it _well_.
517 # nasty enough that I shouldn't change it until I can test it _well_.
518 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
518 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
519
519
520 # keep track of where we started running (mainly for crash post-mortem)
520 # keep track of where we started running (mainly for crash post-mortem)
521 self.starting_dir = os.getcwd()
521 self.starting_dir = os.getcwd()
522
522
523 # Various switches which can be set
523 # Various switches which can be set
524 self.CACHELENGTH = 5000 # this is cheap, it's just text
524 self.CACHELENGTH = 5000 # this is cheap, it's just text
525 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
525 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
526 self.banner2 = banner2
526 self.banner2 = banner2
527
527
528 # TraceBack handlers:
528 # TraceBack handlers:
529
529
530 # Syntax error handler.
530 # Syntax error handler.
531 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
531 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
532
532
533 # The interactive one is initialized with an offset, meaning we always
533 # The interactive one is initialized with an offset, meaning we always
534 # want to remove the topmost item in the traceback, which is our own
534 # want to remove the topmost item in the traceback, which is our own
535 # internal code. Valid modes: ['Plain','Context','Verbose']
535 # internal code. Valid modes: ['Plain','Context','Verbose']
536 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
536 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
537 color_scheme='NoColor',
537 color_scheme='NoColor',
538 tb_offset = 1)
538 tb_offset = 1)
539
539
540 # IPython itself shouldn't crash. This will produce a detailed
540 # IPython itself shouldn't crash. This will produce a detailed
541 # post-mortem if it does. But we only install the crash handler for
541 # post-mortem if it does. But we only install the crash handler for
542 # non-threaded shells, the threaded ones use a normal verbose reporter
542 # non-threaded shells, the threaded ones use a normal verbose reporter
543 # and lose the crash handler. This is because exceptions in the main
543 # and lose the crash handler. This is because exceptions in the main
544 # thread (such as in GUI code) propagate directly to sys.excepthook,
544 # thread (such as in GUI code) propagate directly to sys.excepthook,
545 # and there's no point in printing crash dumps for every user exception.
545 # and there's no point in printing crash dumps for every user exception.
546 if self.isthreaded:
546 if self.isthreaded:
547 sys.excepthook = ultraTB.FormattedTB()
547 sys.excepthook = ultraTB.FormattedTB()
548 else:
548 else:
549 from IPython import CrashHandler
549 from IPython import CrashHandler
550 sys.excepthook = CrashHandler.CrashHandler(self)
550 sys.excepthook = CrashHandler.CrashHandler(self)
551
551
552 # The instance will store a pointer to this, so that runtime code
552 # The instance will store a pointer to this, so that runtime code
553 # (such as magics) can access it. This is because during the
553 # (such as magics) can access it. This is because during the
554 # read-eval loop, it gets temporarily overwritten (to deal with GUI
554 # read-eval loop, it gets temporarily overwritten (to deal with GUI
555 # frameworks).
555 # frameworks).
556 self.sys_excepthook = sys.excepthook
556 self.sys_excepthook = sys.excepthook
557
557
558 # and add any custom exception handlers the user may have specified
558 # and add any custom exception handlers the user may have specified
559 self.set_custom_exc(*custom_exceptions)
559 self.set_custom_exc(*custom_exceptions)
560
560
561 # Object inspector
561 # Object inspector
562 self.inspector = OInspect.Inspector(OInspect.InspectColors,
562 self.inspector = OInspect.Inspector(OInspect.InspectColors,
563 PyColorize.ANSICodeColors,
563 PyColorize.ANSICodeColors,
564 'NoColor')
564 'NoColor')
565 # indentation management
565 # indentation management
566 self.autoindent = False
566 self.autoindent = False
567 self.indent_current_nsp = 0
567 self.indent_current_nsp = 0
568
568
569 # Make some aliases automatically
569 # Make some aliases automatically
570 # Prepare list of shell aliases to auto-define
570 # Prepare list of shell aliases to auto-define
571 if os.name == 'posix':
571 if os.name == 'posix':
572 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
572 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
573 'mv mv -i','rm rm -i','cp cp -i',
573 'mv mv -i','rm rm -i','cp cp -i',
574 'cat cat','less less','clear clear',
574 'cat cat','less less','clear clear',
575 # a better ls
575 # a better ls
576 'ls ls -F',
576 'ls ls -F',
577 # long ls
577 # long ls
578 'll ls -lF',
578 'll ls -lF',
579 # color ls
579 # color ls
580 'lc ls -F -o --color',
580 'lc ls -F -o --color',
581 # ls normal files only
581 # ls normal files only
582 'lf ls -F -o --color %l | grep ^-',
582 'lf ls -F -o --color %l | grep ^-',
583 # ls symbolic links
583 # ls symbolic links
584 'lk ls -F -o --color %l | grep ^l',
584 'lk ls -F -o --color %l | grep ^l',
585 # directories or links to directories,
585 # directories or links to directories,
586 'ldir ls -F -o --color %l | grep /$',
586 'ldir ls -F -o --color %l | grep /$',
587 # things which are executable
587 # things which are executable
588 'lx ls -F -o --color %l | grep ^-..x',
588 'lx ls -F -o --color %l | grep ^-..x',
589 )
589 )
590 elif os.name in ['nt','dos']:
590 elif os.name in ['nt','dos']:
591 auto_alias = ('dir dir /on', 'ls dir /on',
591 auto_alias = ('dir dir /on', 'ls dir /on',
592 'ddir dir /ad /on', 'ldir dir /ad /on',
592 'ddir dir /ad /on', 'ldir dir /ad /on',
593 'mkdir mkdir','rmdir rmdir','echo echo',
593 'mkdir mkdir','rmdir rmdir','echo echo',
594 'ren ren','cls cls','copy copy')
594 'ren ren','cls cls','copy copy')
595 else:
595 else:
596 auto_alias = ()
596 auto_alias = ()
597 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
597 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
598 # Call the actual (public) initializer
598 # Call the actual (public) initializer
599 self.init_auto_alias()
599 self.init_auto_alias()
600 # end __init__
600 # end __init__
601
601
602 def post_config_initialization(self):
602 def post_config_initialization(self):
603 """Post configuration init method
603 """Post configuration init method
604
604
605 This is called after the configuration files have been processed to
605 This is called after the configuration files have been processed to
606 'finalize' the initialization."""
606 'finalize' the initialization."""
607
607
608 rc = self.rc
608 rc = self.rc
609
609
610 # Load readline proper
610 # Load readline proper
611 if rc.readline:
611 if rc.readline:
612 self.init_readline()
612 self.init_readline()
613
613
614 # local shortcut, this is used a LOT
614 # local shortcut, this is used a LOT
615 self.log = self.logger.log
615 self.log = self.logger.log
616
616
617 # Initialize cache, set in/out prompts and printing system
617 # Initialize cache, set in/out prompts and printing system
618 self.outputcache = CachedOutput(self,
618 self.outputcache = CachedOutput(self,
619 rc.cache_size,
619 rc.cache_size,
620 rc.pprint,
620 rc.pprint,
621 input_sep = rc.separate_in,
621 input_sep = rc.separate_in,
622 output_sep = rc.separate_out,
622 output_sep = rc.separate_out,
623 output_sep2 = rc.separate_out2,
623 output_sep2 = rc.separate_out2,
624 ps1 = rc.prompt_in1,
624 ps1 = rc.prompt_in1,
625 ps2 = rc.prompt_in2,
625 ps2 = rc.prompt_in2,
626 ps_out = rc.prompt_out,
626 ps_out = rc.prompt_out,
627 pad_left = rc.prompts_pad_left)
627 pad_left = rc.prompts_pad_left)
628
628
629 # user may have over-ridden the default print hook:
629 # user may have over-ridden the default print hook:
630 try:
630 try:
631 self.outputcache.__class__.display = self.hooks.display
631 self.outputcache.__class__.display = self.hooks.display
632 except AttributeError:
632 except AttributeError:
633 pass
633 pass
634
634
635 # I don't like assigning globally to sys, because it means when embedding
635 # I don't like assigning globally to sys, because it means when embedding
636 # instances, each embedded instance overrides the previous choice. But
636 # instances, each embedded instance overrides the previous choice. But
637 # sys.displayhook seems to be called internally by exec, so I don't see a
637 # sys.displayhook seems to be called internally by exec, so I don't see a
638 # way around it.
638 # way around it.
639 sys.displayhook = self.outputcache
639 sys.displayhook = self.outputcache
640
640
641 # Set user colors (don't do it in the constructor above so that it
641 # Set user colors (don't do it in the constructor above so that it
642 # doesn't crash if colors option is invalid)
642 # doesn't crash if colors option is invalid)
643 self.magic_colors(rc.colors)
643 self.magic_colors(rc.colors)
644
644
645 # Set calling of pdb on exceptions
645 # Set calling of pdb on exceptions
646 self.call_pdb = rc.pdb
646 self.call_pdb = rc.pdb
647
647
648 # Load user aliases
648 # Load user aliases
649 for alias in rc.alias:
649 for alias in rc.alias:
650 self.magic_alias(alias)
650 self.magic_alias(alias)
651
651
652 # dynamic data that survives through sessions
652 # dynamic data that survives through sessions
653 # XXX make the filename a config option?
653 # XXX make the filename a config option?
654 persist_base = 'persist'
654 persist_base = 'persist'
655 if rc.profile:
655 if rc.profile:
656 persist_base += '_%s' % rc.profile
656 persist_base += '_%s' % rc.profile
657 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
657 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
658
658
659 try:
659 try:
660 self.persist = pickle.load(file(self.persist_fname))
660 self.persist = pickle.load(file(self.persist_fname))
661 except:
661 except:
662 self.persist = {}
662 self.persist = {}
663
663
664
664
665 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
665 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
666 try:
666 try:
667 obj = pickle.loads(value)
667 obj = pickle.loads(value)
668 except:
668 except:
669
669
670 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
670 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
671 print "The error was:",sys.exc_info()[0]
671 print "The error was:",sys.exc_info()[0]
672 continue
672 continue
673
673
674
674
675 self.user_ns[key] = obj
675 self.user_ns[key] = obj
676
676
677 def add_builtins(self):
677 def add_builtins(self):
678 """Store ipython references into the builtin namespace.
678 """Store ipython references into the builtin namespace.
679
679
680 Some parts of ipython operate via builtins injected here, which hold a
680 Some parts of ipython operate via builtins injected here, which hold a
681 reference to IPython itself."""
681 reference to IPython itself."""
682
682
683 # TODO: deprecate all except _ip; 'jobs' should be installed
683 # TODO: deprecate all except _ip; 'jobs' should be installed
684 # by an extension and the rest are under _ip
684 # by an extension and the rest are under _ip
685 builtins_new = dict(__IPYTHON__ = self,
685 builtins_new = dict(__IPYTHON__ = self,
686 ip_set_hook = self.set_hook,
686 ip_set_hook = self.set_hook,
687 jobs = self.jobs,
687 jobs = self.jobs,
688 ipmagic = self.ipmagic,
688 ipmagic = self.ipmagic,
689 ipalias = self.ipalias,
689 ipalias = self.ipalias,
690 ipsystem = self.ipsystem,
690 ipsystem = self.ipsystem,
691 _ip = self.api
691 _ip = self.api
692 )
692 )
693 for biname,bival in builtins_new.items():
693 for biname,bival in builtins_new.items():
694 try:
694 try:
695 # store the orignal value so we can restore it
695 # store the orignal value so we can restore it
696 self.builtins_added[biname] = __builtin__.__dict__[biname]
696 self.builtins_added[biname] = __builtin__.__dict__[biname]
697 except KeyError:
697 except KeyError:
698 # or mark that it wasn't defined, and we'll just delete it at
698 # or mark that it wasn't defined, and we'll just delete it at
699 # cleanup
699 # cleanup
700 self.builtins_added[biname] = Undefined
700 self.builtins_added[biname] = Undefined
701 __builtin__.__dict__[biname] = bival
701 __builtin__.__dict__[biname] = bival
702
702
703 # Keep in the builtins a flag for when IPython is active. We set it
703 # Keep in the builtins a flag for when IPython is active. We set it
704 # with setdefault so that multiple nested IPythons don't clobber one
704 # with setdefault so that multiple nested IPythons don't clobber one
705 # another. Each will increase its value by one upon being activated,
705 # another. Each will increase its value by one upon being activated,
706 # which also gives us a way to determine the nesting level.
706 # which also gives us a way to determine the nesting level.
707 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
707 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
708
708
709 def clean_builtins(self):
709 def clean_builtins(self):
710 """Remove any builtins which might have been added by add_builtins, or
710 """Remove any builtins which might have been added by add_builtins, or
711 restore overwritten ones to their previous values."""
711 restore overwritten ones to their previous values."""
712 for biname,bival in self.builtins_added.items():
712 for biname,bival in self.builtins_added.items():
713 if bival is Undefined:
713 if bival is Undefined:
714 del __builtin__.__dict__[biname]
714 del __builtin__.__dict__[biname]
715 else:
715 else:
716 __builtin__.__dict__[biname] = bival
716 __builtin__.__dict__[biname] = bival
717 self.builtins_added.clear()
717 self.builtins_added.clear()
718
718
719 def set_hook(self,name,hook, priority = 50):
719 def set_hook(self,name,hook, priority = 50):
720 """set_hook(name,hook) -> sets an internal IPython hook.
720 """set_hook(name,hook) -> sets an internal IPython hook.
721
721
722 IPython exposes some of its internal API as user-modifiable hooks. By
722 IPython exposes some of its internal API as user-modifiable hooks. By
723 adding your function to one of these hooks, you can modify IPython's
723 adding your function to one of these hooks, you can modify IPython's
724 behavior to call at runtime your own routines."""
724 behavior to call at runtime your own routines."""
725
725
726 # At some point in the future, this should validate the hook before it
726 # At some point in the future, this should validate the hook before it
727 # accepts it. Probably at least check that the hook takes the number
727 # accepts it. Probably at least check that the hook takes the number
728 # of args it's supposed to.
728 # of args it's supposed to.
729 dp = getattr(self.hooks, name, None)
729 dp = getattr(self.hooks, name, None)
730 if name not in IPython.hooks.__all__:
730 if name not in IPython.hooks.__all__:
731 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
731 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
732 if not dp:
732 if not dp:
733 dp = IPython.hooks.CommandChainDispatcher()
733 dp = IPython.hooks.CommandChainDispatcher()
734
734
735 f = new.instancemethod(hook,self,self.__class__)
735 f = new.instancemethod(hook,self,self.__class__)
736 try:
736 try:
737 dp.add(f,priority)
737 dp.add(f,priority)
738 except AttributeError:
738 except AttributeError:
739 # it was not commandchain, plain old func - replace
739 # it was not commandchain, plain old func - replace
740 dp = f
740 dp = f
741
741
742 setattr(self.hooks,name, dp)
742 setattr(self.hooks,name, dp)
743
743
744
744
745 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
745 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
746
746
747 def set_custom_exc(self,exc_tuple,handler):
747 def set_custom_exc(self,exc_tuple,handler):
748 """set_custom_exc(exc_tuple,handler)
748 """set_custom_exc(exc_tuple,handler)
749
749
750 Set a custom exception handler, which will be called if any of the
750 Set a custom exception handler, which will be called if any of the
751 exceptions in exc_tuple occur in the mainloop (specifically, in the
751 exceptions in exc_tuple occur in the mainloop (specifically, in the
752 runcode() method.
752 runcode() method.
753
753
754 Inputs:
754 Inputs:
755
755
756 - exc_tuple: a *tuple* of valid exceptions to call the defined
756 - exc_tuple: a *tuple* of valid exceptions to call the defined
757 handler for. It is very important that you use a tuple, and NOT A
757 handler for. It is very important that you use a tuple, and NOT A
758 LIST here, because of the way Python's except statement works. If
758 LIST here, because of the way Python's except statement works. If
759 you only want to trap a single exception, use a singleton tuple:
759 you only want to trap a single exception, use a singleton tuple:
760
760
761 exc_tuple == (MyCustomException,)
761 exc_tuple == (MyCustomException,)
762
762
763 - handler: this must be defined as a function with the following
763 - handler: this must be defined as a function with the following
764 basic interface: def my_handler(self,etype,value,tb).
764 basic interface: def my_handler(self,etype,value,tb).
765
765
766 This will be made into an instance method (via new.instancemethod)
766 This will be made into an instance method (via new.instancemethod)
767 of IPython itself, and it will be called if any of the exceptions
767 of IPython itself, and it will be called if any of the exceptions
768 listed in the exc_tuple are caught. If the handler is None, an
768 listed in the exc_tuple are caught. If the handler is None, an
769 internal basic one is used, which just prints basic info.
769 internal basic one is used, which just prints basic info.
770
770
771 WARNING: by putting in your own exception handler into IPython's main
771 WARNING: by putting in your own exception handler into IPython's main
772 execution loop, you run a very good chance of nasty crashes. This
772 execution loop, you run a very good chance of nasty crashes. This
773 facility should only be used if you really know what you are doing."""
773 facility should only be used if you really know what you are doing."""
774
774
775 assert type(exc_tuple)==type(()) , \
775 assert type(exc_tuple)==type(()) , \
776 "The custom exceptions must be given AS A TUPLE."
776 "The custom exceptions must be given AS A TUPLE."
777
777
778 def dummy_handler(self,etype,value,tb):
778 def dummy_handler(self,etype,value,tb):
779 print '*** Simple custom exception handler ***'
779 print '*** Simple custom exception handler ***'
780 print 'Exception type :',etype
780 print 'Exception type :',etype
781 print 'Exception value:',value
781 print 'Exception value:',value
782 print 'Traceback :',tb
782 print 'Traceback :',tb
783 print 'Source code :','\n'.join(self.buffer)
783 print 'Source code :','\n'.join(self.buffer)
784
784
785 if handler is None: handler = dummy_handler
785 if handler is None: handler = dummy_handler
786
786
787 self.CustomTB = new.instancemethod(handler,self,self.__class__)
787 self.CustomTB = new.instancemethod(handler,self,self.__class__)
788 self.custom_exceptions = exc_tuple
788 self.custom_exceptions = exc_tuple
789
789
790 def set_custom_completer(self,completer,pos=0):
790 def set_custom_completer(self,completer,pos=0):
791 """set_custom_completer(completer,pos=0)
791 """set_custom_completer(completer,pos=0)
792
792
793 Adds a new custom completer function.
793 Adds a new custom completer function.
794
794
795 The position argument (defaults to 0) is the index in the completers
795 The position argument (defaults to 0) is the index in the completers
796 list where you want the completer to be inserted."""
796 list where you want the completer to be inserted."""
797
797
798 newcomp = new.instancemethod(completer,self.Completer,
798 newcomp = new.instancemethod(completer,self.Completer,
799 self.Completer.__class__)
799 self.Completer.__class__)
800 self.Completer.matchers.insert(pos,newcomp)
800 self.Completer.matchers.insert(pos,newcomp)
801
801
802 def _get_call_pdb(self):
802 def _get_call_pdb(self):
803 return self._call_pdb
803 return self._call_pdb
804
804
805 def _set_call_pdb(self,val):
805 def _set_call_pdb(self,val):
806
806
807 if val not in (0,1,False,True):
807 if val not in (0,1,False,True):
808 raise ValueError,'new call_pdb value must be boolean'
808 raise ValueError,'new call_pdb value must be boolean'
809
809
810 # store value in instance
810 # store value in instance
811 self._call_pdb = val
811 self._call_pdb = val
812
812
813 # notify the actual exception handlers
813 # notify the actual exception handlers
814 self.InteractiveTB.call_pdb = val
814 self.InteractiveTB.call_pdb = val
815 if self.isthreaded:
815 if self.isthreaded:
816 try:
816 try:
817 self.sys_excepthook.call_pdb = val
817 self.sys_excepthook.call_pdb = val
818 except:
818 except:
819 warn('Failed to activate pdb for threaded exception handler')
819 warn('Failed to activate pdb for threaded exception handler')
820
820
821 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
821 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
822 'Control auto-activation of pdb at exceptions')
822 'Control auto-activation of pdb at exceptions')
823
823
824
824
825 # These special functions get installed in the builtin namespace, to
825 # These special functions get installed in the builtin namespace, to
826 # provide programmatic (pure python) access to magics, aliases and system
826 # provide programmatic (pure python) access to magics, aliases and system
827 # calls. This is important for logging, user scripting, and more.
827 # calls. This is important for logging, user scripting, and more.
828
828
829 # We are basically exposing, via normal python functions, the three
829 # We are basically exposing, via normal python functions, the three
830 # mechanisms in which ipython offers special call modes (magics for
830 # mechanisms in which ipython offers special call modes (magics for
831 # internal control, aliases for direct system access via pre-selected
831 # internal control, aliases for direct system access via pre-selected
832 # names, and !cmd for calling arbitrary system commands).
832 # names, and !cmd for calling arbitrary system commands).
833
833
834 def ipmagic(self,arg_s):
834 def ipmagic(self,arg_s):
835 """Call a magic function by name.
835 """Call a magic function by name.
836
836
837 Input: a string containing the name of the magic function to call and any
837 Input: a string containing the name of the magic function to call and any
838 additional arguments to be passed to the magic.
838 additional arguments to be passed to the magic.
839
839
840 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
840 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
841 prompt:
841 prompt:
842
842
843 In[1]: %name -opt foo bar
843 In[1]: %name -opt foo bar
844
844
845 To call a magic without arguments, simply use ipmagic('name').
845 To call a magic without arguments, simply use ipmagic('name').
846
846
847 This provides a proper Python function to call IPython's magics in any
847 This provides a proper Python function to call IPython's magics in any
848 valid Python code you can type at the interpreter, including loops and
848 valid Python code you can type at the interpreter, including loops and
849 compound statements. It is added by IPython to the Python builtin
849 compound statements. It is added by IPython to the Python builtin
850 namespace upon initialization."""
850 namespace upon initialization."""
851
851
852 args = arg_s.split(' ',1)
852 args = arg_s.split(' ',1)
853 magic_name = args[0]
853 magic_name = args[0]
854 magic_name = magic_name.lstrip(self.ESC_MAGIC)
854 magic_name = magic_name.lstrip(self.ESC_MAGIC)
855
855
856 try:
856 try:
857 magic_args = args[1]
857 magic_args = args[1]
858 except IndexError:
858 except IndexError:
859 magic_args = ''
859 magic_args = ''
860 fn = getattr(self,'magic_'+magic_name,None)
860 fn = getattr(self,'magic_'+magic_name,None)
861 if fn is None:
861 if fn is None:
862 error("Magic function `%s` not found." % magic_name)
862 error("Magic function `%s` not found." % magic_name)
863 else:
863 else:
864 magic_args = self.var_expand(magic_args)
864 magic_args = self.var_expand(magic_args)
865 return fn(magic_args)
865 return fn(magic_args)
866
866
867 def ipalias(self,arg_s):
867 def ipalias(self,arg_s):
868 """Call an alias by name.
868 """Call an alias by name.
869
869
870 Input: a string containing the name of the alias to call and any
870 Input: a string containing the name of the alias to call and any
871 additional arguments to be passed to the magic.
871 additional arguments to be passed to the magic.
872
872
873 ipalias('name -opt foo bar') is equivalent to typing at the ipython
873 ipalias('name -opt foo bar') is equivalent to typing at the ipython
874 prompt:
874 prompt:
875
875
876 In[1]: name -opt foo bar
876 In[1]: name -opt foo bar
877
877
878 To call an alias without arguments, simply use ipalias('name').
878 To call an alias without arguments, simply use ipalias('name').
879
879
880 This provides a proper Python function to call IPython's aliases in any
880 This provides a proper Python function to call IPython's aliases in any
881 valid Python code you can type at the interpreter, including loops and
881 valid Python code you can type at the interpreter, including loops and
882 compound statements. It is added by IPython to the Python builtin
882 compound statements. It is added by IPython to the Python builtin
883 namespace upon initialization."""
883 namespace upon initialization."""
884
884
885 args = arg_s.split(' ',1)
885 args = arg_s.split(' ',1)
886 alias_name = args[0]
886 alias_name = args[0]
887 try:
887 try:
888 alias_args = args[1]
888 alias_args = args[1]
889 except IndexError:
889 except IndexError:
890 alias_args = ''
890 alias_args = ''
891 if alias_name in self.alias_table:
891 if alias_name in self.alias_table:
892 self.call_alias(alias_name,alias_args)
892 self.call_alias(alias_name,alias_args)
893 else:
893 else:
894 error("Alias `%s` not found." % alias_name)
894 error("Alias `%s` not found." % alias_name)
895
895
896 def ipsystem(self,arg_s):
896 def ipsystem(self,arg_s):
897 """Make a system call, using IPython."""
897 """Make a system call, using IPython."""
898
898
899 self.system(arg_s)
899 self.system(arg_s)
900
900
901 def complete(self,text):
901 def complete(self,text):
902 """Return a sorted list of all possible completions on text.
902 """Return a sorted list of all possible completions on text.
903
903
904 Inputs:
904 Inputs:
905
905
906 - text: a string of text to be completed on.
906 - text: a string of text to be completed on.
907
907
908 This is a wrapper around the completion mechanism, similar to what
908 This is a wrapper around the completion mechanism, similar to what
909 readline does at the command line when the TAB key is hit. By
909 readline does at the command line when the TAB key is hit. By
910 exposing it as a method, it can be used by other non-readline
910 exposing it as a method, it can be used by other non-readline
911 environments (such as GUIs) for text completion.
911 environments (such as GUIs) for text completion.
912
912
913 Simple usage example:
913 Simple usage example:
914
914
915 In [1]: x = 'hello'
915 In [1]: x = 'hello'
916
916
917 In [2]: __IP.complete('x.l')
917 In [2]: __IP.complete('x.l')
918 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
918 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
919
919
920 complete = self.Completer.complete
920 complete = self.Completer.complete
921 state = 0
921 state = 0
922 # use a dict so we get unique keys, since ipyhton's multiple
922 # use a dict so we get unique keys, since ipyhton's multiple
923 # completers can return duplicates.
923 # completers can return duplicates.
924 comps = {}
924 comps = {}
925 while True:
925 while True:
926 newcomp = complete(text,state)
926 newcomp = complete(text,state)
927 if newcomp is None:
927 if newcomp is None:
928 break
928 break
929 comps[newcomp] = 1
929 comps[newcomp] = 1
930 state += 1
930 state += 1
931 outcomps = comps.keys()
931 outcomps = comps.keys()
932 outcomps.sort()
932 outcomps.sort()
933 return outcomps
933 return outcomps
934
934
935 def set_completer_frame(self, frame=None):
935 def set_completer_frame(self, frame=None):
936 if frame:
936 if frame:
937 self.Completer.namespace = frame.f_locals
937 self.Completer.namespace = frame.f_locals
938 self.Completer.global_namespace = frame.f_globals
938 self.Completer.global_namespace = frame.f_globals
939 else:
939 else:
940 self.Completer.namespace = self.user_ns
940 self.Completer.namespace = self.user_ns
941 self.Completer.global_namespace = self.user_global_ns
941 self.Completer.global_namespace = self.user_global_ns
942
942
943 def init_auto_alias(self):
943 def init_auto_alias(self):
944 """Define some aliases automatically.
944 """Define some aliases automatically.
945
945
946 These are ALL parameter-less aliases"""
946 These are ALL parameter-less aliases"""
947
947
948 for alias,cmd in self.auto_alias:
948 for alias,cmd in self.auto_alias:
949 self.alias_table[alias] = (0,cmd)
949 self.alias_table[alias] = (0,cmd)
950
950
951 def alias_table_validate(self,verbose=0):
951 def alias_table_validate(self,verbose=0):
952 """Update information about the alias table.
952 """Update information about the alias table.
953
953
954 In particular, make sure no Python keywords/builtins are in it."""
954 In particular, make sure no Python keywords/builtins are in it."""
955
955
956 no_alias = self.no_alias
956 no_alias = self.no_alias
957 for k in self.alias_table.keys():
957 for k in self.alias_table.keys():
958 if k in no_alias:
958 if k in no_alias:
959 del self.alias_table[k]
959 del self.alias_table[k]
960 if verbose:
960 if verbose:
961 print ("Deleting alias <%s>, it's a Python "
961 print ("Deleting alias <%s>, it's a Python "
962 "keyword or builtin." % k)
962 "keyword or builtin." % k)
963
963
964 def set_autoindent(self,value=None):
964 def set_autoindent(self,value=None):
965 """Set the autoindent flag, checking for readline support.
965 """Set the autoindent flag, checking for readline support.
966
966
967 If called with no arguments, it acts as a toggle."""
967 If called with no arguments, it acts as a toggle."""
968
968
969 if not self.has_readline:
969 if not self.has_readline:
970 if os.name == 'posix':
970 if os.name == 'posix':
971 warn("The auto-indent feature requires the readline library")
971 warn("The auto-indent feature requires the readline library")
972 self.autoindent = 0
972 self.autoindent = 0
973 return
973 return
974 if value is None:
974 if value is None:
975 self.autoindent = not self.autoindent
975 self.autoindent = not self.autoindent
976 else:
976 else:
977 self.autoindent = value
977 self.autoindent = value
978
978
979 def rc_set_toggle(self,rc_field,value=None):
979 def rc_set_toggle(self,rc_field,value=None):
980 """Set or toggle a field in IPython's rc config. structure.
980 """Set or toggle a field in IPython's rc config. structure.
981
981
982 If called with no arguments, it acts as a toggle.
982 If called with no arguments, it acts as a toggle.
983
983
984 If called with a non-existent field, the resulting AttributeError
984 If called with a non-existent field, the resulting AttributeError
985 exception will propagate out."""
985 exception will propagate out."""
986
986
987 rc_val = getattr(self.rc,rc_field)
987 rc_val = getattr(self.rc,rc_field)
988 if value is None:
988 if value is None:
989 value = not rc_val
989 value = not rc_val
990 setattr(self.rc,rc_field,value)
990 setattr(self.rc,rc_field,value)
991
991
992 def user_setup(self,ipythondir,rc_suffix,mode='install'):
992 def user_setup(self,ipythondir,rc_suffix,mode='install'):
993 """Install the user configuration directory.
993 """Install the user configuration directory.
994
994
995 Can be called when running for the first time or to upgrade the user's
995 Can be called when running for the first time or to upgrade the user's
996 .ipython/ directory with the mode parameter. Valid modes are 'install'
996 .ipython/ directory with the mode parameter. Valid modes are 'install'
997 and 'upgrade'."""
997 and 'upgrade'."""
998
998
999 def wait():
999 def wait():
1000 try:
1000 try:
1001 raw_input("Please press <RETURN> to start IPython.")
1001 raw_input("Please press <RETURN> to start IPython.")
1002 except EOFError:
1002 except EOFError:
1003 print >> Term.cout
1003 print >> Term.cout
1004 print '*'*70
1004 print '*'*70
1005
1005
1006 cwd = os.getcwd() # remember where we started
1006 cwd = os.getcwd() # remember where we started
1007 glb = glob.glob
1007 glb = glob.glob
1008 print '*'*70
1008 print '*'*70
1009 if mode == 'install':
1009 if mode == 'install':
1010 print \
1010 print \
1011 """Welcome to IPython. I will try to create a personal configuration directory
1011 """Welcome to IPython. I will try to create a personal configuration directory
1012 where you can customize many aspects of IPython's functionality in:\n"""
1012 where you can customize many aspects of IPython's functionality in:\n"""
1013 else:
1013 else:
1014 print 'I am going to upgrade your configuration in:'
1014 print 'I am going to upgrade your configuration in:'
1015
1015
1016 print ipythondir
1016 print ipythondir
1017
1017
1018 rcdirend = os.path.join('IPython','UserConfig')
1018 rcdirend = os.path.join('IPython','UserConfig')
1019 cfg = lambda d: os.path.join(d,rcdirend)
1019 cfg = lambda d: os.path.join(d,rcdirend)
1020 try:
1020 try:
1021 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1021 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1022 except IOError:
1022 except IOError:
1023 warning = """
1023 warning = """
1024 Installation error. IPython's directory was not found.
1024 Installation error. IPython's directory was not found.
1025
1025
1026 Check the following:
1026 Check the following:
1027
1027
1028 The ipython/IPython directory should be in a directory belonging to your
1028 The ipython/IPython directory should be in a directory belonging to your
1029 PYTHONPATH environment variable (that is, it should be in a directory
1029 PYTHONPATH environment variable (that is, it should be in a directory
1030 belonging to sys.path). You can copy it explicitly there or just link to it.
1030 belonging to sys.path). You can copy it explicitly there or just link to it.
1031
1031
1032 IPython will proceed with builtin defaults.
1032 IPython will proceed with builtin defaults.
1033 """
1033 """
1034 warn(warning)
1034 warn(warning)
1035 wait()
1035 wait()
1036 return
1036 return
1037
1037
1038 if mode == 'install':
1038 if mode == 'install':
1039 try:
1039 try:
1040 shutil.copytree(rcdir,ipythondir)
1040 shutil.copytree(rcdir,ipythondir)
1041 os.chdir(ipythondir)
1041 os.chdir(ipythondir)
1042 rc_files = glb("ipythonrc*")
1042 rc_files = glb("ipythonrc*")
1043 for rc_file in rc_files:
1043 for rc_file in rc_files:
1044 os.rename(rc_file,rc_file+rc_suffix)
1044 os.rename(rc_file,rc_file+rc_suffix)
1045 except:
1045 except:
1046 warning = """
1046 warning = """
1047
1047
1048 There was a problem with the installation:
1048 There was a problem with the installation:
1049 %s
1049 %s
1050 Try to correct it or contact the developers if you think it's a bug.
1050 Try to correct it or contact the developers if you think it's a bug.
1051 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1051 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1052 warn(warning)
1052 warn(warning)
1053 wait()
1053 wait()
1054 return
1054 return
1055
1055
1056 elif mode == 'upgrade':
1056 elif mode == 'upgrade':
1057 try:
1057 try:
1058 os.chdir(ipythondir)
1058 os.chdir(ipythondir)
1059 except:
1059 except:
1060 print """
1060 print """
1061 Can not upgrade: changing to directory %s failed. Details:
1061 Can not upgrade: changing to directory %s failed. Details:
1062 %s
1062 %s
1063 """ % (ipythondir,sys.exc_info()[1])
1063 """ % (ipythondir,sys.exc_info()[1])
1064 wait()
1064 wait()
1065 return
1065 return
1066 else:
1066 else:
1067 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1067 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1068 for new_full_path in sources:
1068 for new_full_path in sources:
1069 new_filename = os.path.basename(new_full_path)
1069 new_filename = os.path.basename(new_full_path)
1070 if new_filename.startswith('ipythonrc'):
1070 if new_filename.startswith('ipythonrc'):
1071 new_filename = new_filename + rc_suffix
1071 new_filename = new_filename + rc_suffix
1072 # The config directory should only contain files, skip any
1072 # The config directory should only contain files, skip any
1073 # directories which may be there (like CVS)
1073 # directories which may be there (like CVS)
1074 if os.path.isdir(new_full_path):
1074 if os.path.isdir(new_full_path):
1075 continue
1075 continue
1076 if os.path.exists(new_filename):
1076 if os.path.exists(new_filename):
1077 old_file = new_filename+'.old'
1077 old_file = new_filename+'.old'
1078 if os.path.exists(old_file):
1078 if os.path.exists(old_file):
1079 os.remove(old_file)
1079 os.remove(old_file)
1080 os.rename(new_filename,old_file)
1080 os.rename(new_filename,old_file)
1081 shutil.copy(new_full_path,new_filename)
1081 shutil.copy(new_full_path,new_filename)
1082 else:
1082 else:
1083 raise ValueError,'unrecognized mode for install:',`mode`
1083 raise ValueError,'unrecognized mode for install:',`mode`
1084
1084
1085 # Fix line-endings to those native to each platform in the config
1085 # Fix line-endings to those native to each platform in the config
1086 # directory.
1086 # directory.
1087 try:
1087 try:
1088 os.chdir(ipythondir)
1088 os.chdir(ipythondir)
1089 except:
1089 except:
1090 print """
1090 print """
1091 Problem: changing to directory %s failed.
1091 Problem: changing to directory %s failed.
1092 Details:
1092 Details:
1093 %s
1093 %s
1094
1094
1095 Some configuration files may have incorrect line endings. This should not
1095 Some configuration files may have incorrect line endings. This should not
1096 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1096 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1097 wait()
1097 wait()
1098 else:
1098 else:
1099 for fname in glb('ipythonrc*'):
1099 for fname in glb('ipythonrc*'):
1100 try:
1100 try:
1101 native_line_ends(fname,backup=0)
1101 native_line_ends(fname,backup=0)
1102 except IOError:
1102 except IOError:
1103 pass
1103 pass
1104
1104
1105 if mode == 'install':
1105 if mode == 'install':
1106 print """
1106 print """
1107 Successful installation!
1107 Successful installation!
1108
1108
1109 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1109 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1110 IPython manual (there are both HTML and PDF versions supplied with the
1110 IPython manual (there are both HTML and PDF versions supplied with the
1111 distribution) to make sure that your system environment is properly configured
1111 distribution) to make sure that your system environment is properly configured
1112 to take advantage of IPython's features.
1112 to take advantage of IPython's features.
1113
1113
1114 Important note: the configuration system has changed! The old system is
1114 Important note: the configuration system has changed! The old system is
1115 still in place, but its setting may be partly overridden by the settings in
1115 still in place, but its setting may be partly overridden by the settings in
1116 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1116 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1117 if some of the new settings bother you.
1117 if some of the new settings bother you.
1118
1118
1119 """
1119 """
1120 else:
1120 else:
1121 print """
1121 print """
1122 Successful upgrade!
1122 Successful upgrade!
1123
1123
1124 All files in your directory:
1124 All files in your directory:
1125 %(ipythondir)s
1125 %(ipythondir)s
1126 which would have been overwritten by the upgrade were backed up with a .old
1126 which would have been overwritten by the upgrade were backed up with a .old
1127 extension. If you had made particular customizations in those files you may
1127 extension. If you had made particular customizations in those files you may
1128 want to merge them back into the new files.""" % locals()
1128 want to merge them back into the new files.""" % locals()
1129 wait()
1129 wait()
1130 os.chdir(cwd)
1130 os.chdir(cwd)
1131 # end user_setup()
1131 # end user_setup()
1132
1132
1133 def atexit_operations(self):
1133 def atexit_operations(self):
1134 """This will be executed at the time of exit.
1134 """This will be executed at the time of exit.
1135
1135
1136 Saving of persistent data should be performed here. """
1136 Saving of persistent data should be performed here. """
1137
1137
1138 #print '*** IPython exit cleanup ***' # dbg
1138 #print '*** IPython exit cleanup ***' # dbg
1139 # input history
1139 # input history
1140 self.savehist()
1140 self.savehist()
1141
1141
1142 # Cleanup all tempfiles left around
1142 # Cleanup all tempfiles left around
1143 for tfile in self.tempfiles:
1143 for tfile in self.tempfiles:
1144 try:
1144 try:
1145 os.unlink(tfile)
1145 os.unlink(tfile)
1146 except OSError:
1146 except OSError:
1147 pass
1147 pass
1148
1148
1149 # save the "persistent data" catch-all dictionary
1149 # save the "persistent data" catch-all dictionary
1150 try:
1150 try:
1151 pickle.dump(self.persist, open(self.persist_fname,"w"))
1151 pickle.dump(self.persist, open(self.persist_fname,"w"))
1152 except:
1152 except:
1153 print "*** ERROR *** persistent data saving failed."
1153 print "*** ERROR *** persistent data saving failed."
1154
1154
1155 def savehist(self):
1155 def savehist(self):
1156 """Save input history to a file (via readline library)."""
1156 """Save input history to a file (via readline library)."""
1157 try:
1157 try:
1158 self.readline.write_history_file(self.histfile)
1158 self.readline.write_history_file(self.histfile)
1159 except:
1159 except:
1160 print 'Unable to save IPython command history to file: ' + \
1160 print 'Unable to save IPython command history to file: ' + \
1161 `self.histfile`
1161 `self.histfile`
1162
1162
1163 def pre_readline(self):
1163 def pre_readline(self):
1164 """readline hook to be used at the start of each line.
1164 """readline hook to be used at the start of each line.
1165
1165
1166 Currently it handles auto-indent only."""
1166 Currently it handles auto-indent only."""
1167
1167
1168 #debugx('self.indent_current_nsp','pre_readline:')
1168 #debugx('self.indent_current_nsp','pre_readline:')
1169 self.readline.insert_text(self.indent_current_str())
1169 self.readline.insert_text(self.indent_current_str())
1170
1170
1171 def init_readline(self):
1171 def init_readline(self):
1172 """Command history completion/saving/reloading."""
1172 """Command history completion/saving/reloading."""
1173
1174 using_pyreadline = False
1175 if sys.platform == 'win32':
1176 try:
1177 import pyreadline as readline
1178 using_pyrl = True
1179 print "Using the new pyreadline (thanks for participating in the testing!)"
1180 except ImportError:
1181 print "The IPython team recommends the new pyreadline for Windows use, it wasn't found."
1182 print "Try installing it with 'easy_install pyreadline (ctypes is required) or"
1183 print "svn co http://ipython.scipy.org/svn/ipython/pyreadline/trunk pyreadline"
1184 print "Trying 'old' windows readline."
1185
1186
1173 try:
1187 try:
1174 import readline
1188 if not using_pyreadline:
1189 import readline
1175 except ImportError:
1190 except ImportError:
1176 self.has_readline = 0
1191 self.has_readline = 0
1177 self.readline = None
1192 self.readline = None
1178 # no point in bugging windows users with this every time:
1193 # no point in bugging windows users with this every time:
1179 if os.name == 'posix':
1194 warn('Readline services not available on this platform.')
1180 warn('Readline services not available on this platform.')
1181 else:
1195 else:
1182 import atexit
1196 import atexit
1183 from IPython.completer import IPCompleter
1197 from IPython.completer import IPCompleter
1184 self.Completer = IPCompleter(self,
1198 self.Completer = IPCompleter(self,
1185 self.user_ns,
1199 self.user_ns,
1186 self.user_global_ns,
1200 self.user_global_ns,
1187 self.rc.readline_omit__names,
1201 self.rc.readline_omit__names,
1188 self.alias_table)
1202 self.alias_table)
1189
1203
1190 # Platform-specific configuration
1204 # Platform-specific configuration
1191 if os.name == 'nt':
1205 if os.name == 'nt':
1192 self.readline_startup_hook = readline.set_pre_input_hook
1206 self.readline_startup_hook = readline.set_pre_input_hook
1193 else:
1207 else:
1194 self.readline_startup_hook = readline.set_startup_hook
1208 self.readline_startup_hook = readline.set_startup_hook
1195
1209
1196 # Load user's initrc file (readline config)
1210 # Load user's initrc file (readline config)
1197 inputrc_name = os.environ.get('INPUTRC')
1211 inputrc_name = os.environ.get('INPUTRC')
1198 if inputrc_name is None:
1212 if inputrc_name is None:
1199 home_dir = get_home_dir()
1213 home_dir = get_home_dir()
1200 if home_dir is not None:
1214 if home_dir is not None:
1201 inputrc_name = os.path.join(home_dir,'.inputrc')
1215 inputrc_name = os.path.join(home_dir,'.inputrc')
1202 if os.path.isfile(inputrc_name):
1216 if os.path.isfile(inputrc_name):
1203 try:
1217 try:
1204 readline.read_init_file(inputrc_name)
1218 readline.read_init_file(inputrc_name)
1205 except:
1219 except:
1206 warn('Problems reading readline initialization file <%s>'
1220 warn('Problems reading readline initialization file <%s>'
1207 % inputrc_name)
1221 % inputrc_name)
1208
1222
1209 self.has_readline = 1
1223 self.has_readline = 1
1210 self.readline = readline
1224 self.readline = readline
1211 # save this in sys so embedded copies can restore it properly
1225 # save this in sys so embedded copies can restore it properly
1212 sys.ipcompleter = self.Completer.complete
1226 sys.ipcompleter = self.Completer.complete
1213 readline.set_completer(self.Completer.complete)
1227 readline.set_completer(self.Completer.complete)
1214
1228
1215 # Configure readline according to user's prefs
1229 # Configure readline according to user's prefs
1216 for rlcommand in self.rc.readline_parse_and_bind:
1230 for rlcommand in self.rc.readline_parse_and_bind:
1217 readline.parse_and_bind(rlcommand)
1231 readline.parse_and_bind(rlcommand)
1218
1232
1219 # remove some chars from the delimiters list
1233 # remove some chars from the delimiters list
1220 delims = readline.get_completer_delims()
1234 delims = readline.get_completer_delims()
1221 delims = delims.translate(string._idmap,
1235 delims = delims.translate(string._idmap,
1222 self.rc.readline_remove_delims)
1236 self.rc.readline_remove_delims)
1223 readline.set_completer_delims(delims)
1237 readline.set_completer_delims(delims)
1224 # otherwise we end up with a monster history after a while:
1238 # otherwise we end up with a monster history after a while:
1225 readline.set_history_length(1000)
1239 readline.set_history_length(1000)
1226 try:
1240 try:
1227 #print '*** Reading readline history' # dbg
1241 #print '*** Reading readline history' # dbg
1228 readline.read_history_file(self.histfile)
1242 readline.read_history_file(self.histfile)
1229 except IOError:
1243 except IOError:
1230 pass # It doesn't exist yet.
1244 pass # It doesn't exist yet.
1231
1245
1232 atexit.register(self.atexit_operations)
1246 atexit.register(self.atexit_operations)
1233 del atexit
1247 del atexit
1234
1248
1235 # Configure auto-indent for all platforms
1249 # Configure auto-indent for all platforms
1236 self.set_autoindent(self.rc.autoindent)
1250 self.set_autoindent(self.rc.autoindent)
1237
1251
1238 def _should_recompile(self,e):
1252 def _should_recompile(self,e):
1239 """Utility routine for edit_syntax_error"""
1253 """Utility routine for edit_syntax_error"""
1240
1254
1241 if e.filename in ('<ipython console>','<input>','<string>',
1255 if e.filename in ('<ipython console>','<input>','<string>',
1242 '<console>',None):
1256 '<console>',None):
1243
1257
1244 return False
1258 return False
1245 try:
1259 try:
1246 if (self.rc.autoedit_syntax != 2 and
1260 if (self.rc.autoedit_syntax != 2 and
1247 not ask_yes_no('Return to editor to correct syntax error? '
1261 not ask_yes_no('Return to editor to correct syntax error? '
1248 '[Y/n] ','y')):
1262 '[Y/n] ','y')):
1249 return False
1263 return False
1250 except EOFError:
1264 except EOFError:
1251 return False
1265 return False
1252
1266
1253 def int0(x):
1267 def int0(x):
1254 try:
1268 try:
1255 return int(x)
1269 return int(x)
1256 except TypeError:
1270 except TypeError:
1257 return 0
1271 return 0
1258 # always pass integer line and offset values to editor hook
1272 # always pass integer line and offset values to editor hook
1259 self.hooks.fix_error_editor(e.filename,
1273 self.hooks.fix_error_editor(e.filename,
1260 int0(e.lineno),int0(e.offset),e.msg)
1274 int0(e.lineno),int0(e.offset),e.msg)
1261 return True
1275 return True
1262
1276
1263 def edit_syntax_error(self):
1277 def edit_syntax_error(self):
1264 """The bottom half of the syntax error handler called in the main loop.
1278 """The bottom half of the syntax error handler called in the main loop.
1265
1279
1266 Loop until syntax error is fixed or user cancels.
1280 Loop until syntax error is fixed or user cancels.
1267 """
1281 """
1268
1282
1269 while self.SyntaxTB.last_syntax_error:
1283 while self.SyntaxTB.last_syntax_error:
1270 # copy and clear last_syntax_error
1284 # copy and clear last_syntax_error
1271 err = self.SyntaxTB.clear_err_state()
1285 err = self.SyntaxTB.clear_err_state()
1272 if not self._should_recompile(err):
1286 if not self._should_recompile(err):
1273 return
1287 return
1274 try:
1288 try:
1275 # may set last_syntax_error again if a SyntaxError is raised
1289 # may set last_syntax_error again if a SyntaxError is raised
1276 self.safe_execfile(err.filename,self.shell.user_ns)
1290 self.safe_execfile(err.filename,self.shell.user_ns)
1277 except:
1291 except:
1278 self.showtraceback()
1292 self.showtraceback()
1279 else:
1293 else:
1280 f = file(err.filename)
1294 f = file(err.filename)
1281 try:
1295 try:
1282 sys.displayhook(f.read())
1296 sys.displayhook(f.read())
1283 finally:
1297 finally:
1284 f.close()
1298 f.close()
1285
1299
1286 def showsyntaxerror(self, filename=None):
1300 def showsyntaxerror(self, filename=None):
1287 """Display the syntax error that just occurred.
1301 """Display the syntax error that just occurred.
1288
1302
1289 This doesn't display a stack trace because there isn't one.
1303 This doesn't display a stack trace because there isn't one.
1290
1304
1291 If a filename is given, it is stuffed in the exception instead
1305 If a filename is given, it is stuffed in the exception instead
1292 of what was there before (because Python's parser always uses
1306 of what was there before (because Python's parser always uses
1293 "<string>" when reading from a string).
1307 "<string>" when reading from a string).
1294 """
1308 """
1295 etype, value, last_traceback = sys.exc_info()
1309 etype, value, last_traceback = sys.exc_info()
1296 if filename and etype is SyntaxError:
1310 if filename and etype is SyntaxError:
1297 # Work hard to stuff the correct filename in the exception
1311 # Work hard to stuff the correct filename in the exception
1298 try:
1312 try:
1299 msg, (dummy_filename, lineno, offset, line) = value
1313 msg, (dummy_filename, lineno, offset, line) = value
1300 except:
1314 except:
1301 # Not the format we expect; leave it alone
1315 # Not the format we expect; leave it alone
1302 pass
1316 pass
1303 else:
1317 else:
1304 # Stuff in the right filename
1318 # Stuff in the right filename
1305 try:
1319 try:
1306 # Assume SyntaxError is a class exception
1320 # Assume SyntaxError is a class exception
1307 value = SyntaxError(msg, (filename, lineno, offset, line))
1321 value = SyntaxError(msg, (filename, lineno, offset, line))
1308 except:
1322 except:
1309 # If that failed, assume SyntaxError is a string
1323 # If that failed, assume SyntaxError is a string
1310 value = msg, (filename, lineno, offset, line)
1324 value = msg, (filename, lineno, offset, line)
1311 self.SyntaxTB(etype,value,[])
1325 self.SyntaxTB(etype,value,[])
1312
1326
1313 def debugger(self):
1327 def debugger(self):
1314 """Call the pdb debugger."""
1328 """Call the pdb debugger."""
1315
1329
1316 if not self.rc.pdb:
1330 if not self.rc.pdb:
1317 return
1331 return
1318 pdb.pm()
1332 pdb.pm()
1319
1333
1320 def showtraceback(self,exc_tuple = None,filename=None):
1334 def showtraceback(self,exc_tuple = None,filename=None):
1321 """Display the exception that just occurred."""
1335 """Display the exception that just occurred."""
1322
1336
1323 # Though this won't be called by syntax errors in the input line,
1337 # Though this won't be called by syntax errors in the input line,
1324 # there may be SyntaxError cases whith imported code.
1338 # there may be SyntaxError cases whith imported code.
1325 if exc_tuple is None:
1339 if exc_tuple is None:
1326 type, value, tb = sys.exc_info()
1340 type, value, tb = sys.exc_info()
1327 else:
1341 else:
1328 type, value, tb = exc_tuple
1342 type, value, tb = exc_tuple
1329 if type is SyntaxError:
1343 if type is SyntaxError:
1330 self.showsyntaxerror(filename)
1344 self.showsyntaxerror(filename)
1331 else:
1345 else:
1332 self.InteractiveTB()
1346 self.InteractiveTB()
1333 if self.InteractiveTB.call_pdb and self.has_readline:
1347 if self.InteractiveTB.call_pdb and self.has_readline:
1334 # pdb mucks up readline, fix it back
1348 # pdb mucks up readline, fix it back
1335 self.readline.set_completer(self.Completer.complete)
1349 self.readline.set_completer(self.Completer.complete)
1336
1350
1337 def mainloop(self,banner=None):
1351 def mainloop(self,banner=None):
1338 """Creates the local namespace and starts the mainloop.
1352 """Creates the local namespace and starts the mainloop.
1339
1353
1340 If an optional banner argument is given, it will override the
1354 If an optional banner argument is given, it will override the
1341 internally created default banner."""
1355 internally created default banner."""
1342
1356
1343 if self.rc.c: # Emulate Python's -c option
1357 if self.rc.c: # Emulate Python's -c option
1344 self.exec_init_cmd()
1358 self.exec_init_cmd()
1345 if banner is None:
1359 if banner is None:
1346 if self.rc.banner:
1360 if self.rc.banner:
1347 banner = self.BANNER+self.banner2
1361 banner = self.BANNER+self.banner2
1348 else:
1362 else:
1349 banner = ''
1363 banner = ''
1350 self.interact(banner)
1364 self.interact(banner)
1351
1365
1352 def exec_init_cmd(self):
1366 def exec_init_cmd(self):
1353 """Execute a command given at the command line.
1367 """Execute a command given at the command line.
1354
1368
1355 This emulates Python's -c option."""
1369 This emulates Python's -c option."""
1356
1370
1357 #sys.argv = ['-c']
1371 #sys.argv = ['-c']
1358 self.push(self.rc.c)
1372 self.push(self.rc.c)
1359
1373
1360 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1374 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1361 """Embeds IPython into a running python program.
1375 """Embeds IPython into a running python program.
1362
1376
1363 Input:
1377 Input:
1364
1378
1365 - header: An optional header message can be specified.
1379 - header: An optional header message can be specified.
1366
1380
1367 - local_ns, global_ns: working namespaces. If given as None, the
1381 - local_ns, global_ns: working namespaces. If given as None, the
1368 IPython-initialized one is updated with __main__.__dict__, so that
1382 IPython-initialized one is updated with __main__.__dict__, so that
1369 program variables become visible but user-specific configuration
1383 program variables become visible but user-specific configuration
1370 remains possible.
1384 remains possible.
1371
1385
1372 - stack_depth: specifies how many levels in the stack to go to
1386 - stack_depth: specifies how many levels in the stack to go to
1373 looking for namespaces (when local_ns and global_ns are None). This
1387 looking for namespaces (when local_ns and global_ns are None). This
1374 allows an intermediate caller to make sure that this function gets
1388 allows an intermediate caller to make sure that this function gets
1375 the namespace from the intended level in the stack. By default (0)
1389 the namespace from the intended level in the stack. By default (0)
1376 it will get its locals and globals from the immediate caller.
1390 it will get its locals and globals from the immediate caller.
1377
1391
1378 Warning: it's possible to use this in a program which is being run by
1392 Warning: it's possible to use this in a program which is being run by
1379 IPython itself (via %run), but some funny things will happen (a few
1393 IPython itself (via %run), but some funny things will happen (a few
1380 globals get overwritten). In the future this will be cleaned up, as
1394 globals get overwritten). In the future this will be cleaned up, as
1381 there is no fundamental reason why it can't work perfectly."""
1395 there is no fundamental reason why it can't work perfectly."""
1382
1396
1383 # Get locals and globals from caller
1397 # Get locals and globals from caller
1384 if local_ns is None or global_ns is None:
1398 if local_ns is None or global_ns is None:
1385 call_frame = sys._getframe(stack_depth).f_back
1399 call_frame = sys._getframe(stack_depth).f_back
1386
1400
1387 if local_ns is None:
1401 if local_ns is None:
1388 local_ns = call_frame.f_locals
1402 local_ns = call_frame.f_locals
1389 if global_ns is None:
1403 if global_ns is None:
1390 global_ns = call_frame.f_globals
1404 global_ns = call_frame.f_globals
1391
1405
1392 # Update namespaces and fire up interpreter
1406 # Update namespaces and fire up interpreter
1393
1407
1394 # The global one is easy, we can just throw it in
1408 # The global one is easy, we can just throw it in
1395 self.user_global_ns = global_ns
1409 self.user_global_ns = global_ns
1396
1410
1397 # but the user/local one is tricky: ipython needs it to store internal
1411 # but the user/local one is tricky: ipython needs it to store internal
1398 # data, but we also need the locals. We'll copy locals in the user
1412 # data, but we also need the locals. We'll copy locals in the user
1399 # one, but will track what got copied so we can delete them at exit.
1413 # one, but will track what got copied so we can delete them at exit.
1400 # This is so that a later embedded call doesn't see locals from a
1414 # This is so that a later embedded call doesn't see locals from a
1401 # previous call (which most likely existed in a separate scope).
1415 # previous call (which most likely existed in a separate scope).
1402 local_varnames = local_ns.keys()
1416 local_varnames = local_ns.keys()
1403 self.user_ns.update(local_ns)
1417 self.user_ns.update(local_ns)
1404
1418
1405 # Patch for global embedding to make sure that things don't overwrite
1419 # Patch for global embedding to make sure that things don't overwrite
1406 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1420 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1407 # FIXME. Test this a bit more carefully (the if.. is new)
1421 # FIXME. Test this a bit more carefully (the if.. is new)
1408 if local_ns is None and global_ns is None:
1422 if local_ns is None and global_ns is None:
1409 self.user_global_ns.update(__main__.__dict__)
1423 self.user_global_ns.update(__main__.__dict__)
1410
1424
1411 # make sure the tab-completer has the correct frame information, so it
1425 # make sure the tab-completer has the correct frame information, so it
1412 # actually completes using the frame's locals/globals
1426 # actually completes using the frame's locals/globals
1413 self.set_completer_frame()
1427 self.set_completer_frame()
1414
1428
1415 # before activating the interactive mode, we need to make sure that
1429 # before activating the interactive mode, we need to make sure that
1416 # all names in the builtin namespace needed by ipython point to
1430 # all names in the builtin namespace needed by ipython point to
1417 # ourselves, and not to other instances.
1431 # ourselves, and not to other instances.
1418 self.add_builtins()
1432 self.add_builtins()
1419
1433
1420 self.interact(header)
1434 self.interact(header)
1421
1435
1422 # now, purge out the user namespace from anything we might have added
1436 # now, purge out the user namespace from anything we might have added
1423 # from the caller's local namespace
1437 # from the caller's local namespace
1424 delvar = self.user_ns.pop
1438 delvar = self.user_ns.pop
1425 for var in local_varnames:
1439 for var in local_varnames:
1426 delvar(var,None)
1440 delvar(var,None)
1427 # and clean builtins we may have overridden
1441 # and clean builtins we may have overridden
1428 self.clean_builtins()
1442 self.clean_builtins()
1429
1443
1430 def interact(self, banner=None):
1444 def interact(self, banner=None):
1431 """Closely emulate the interactive Python console.
1445 """Closely emulate the interactive Python console.
1432
1446
1433 The optional banner argument specify the banner to print
1447 The optional banner argument specify the banner to print
1434 before the first interaction; by default it prints a banner
1448 before the first interaction; by default it prints a banner
1435 similar to the one printed by the real Python interpreter,
1449 similar to the one printed by the real Python interpreter,
1436 followed by the current class name in parentheses (so as not
1450 followed by the current class name in parentheses (so as not
1437 to confuse this with the real interpreter -- since it's so
1451 to confuse this with the real interpreter -- since it's so
1438 close!).
1452 close!).
1439
1453
1440 """
1454 """
1441 cprt = 'Type "copyright", "credits" or "license" for more information.'
1455 cprt = 'Type "copyright", "credits" or "license" for more information.'
1442 if banner is None:
1456 if banner is None:
1443 self.write("Python %s on %s\n%s\n(%s)\n" %
1457 self.write("Python %s on %s\n%s\n(%s)\n" %
1444 (sys.version, sys.platform, cprt,
1458 (sys.version, sys.platform, cprt,
1445 self.__class__.__name__))
1459 self.__class__.__name__))
1446 else:
1460 else:
1447 self.write(banner)
1461 self.write(banner)
1448
1462
1449 more = 0
1463 more = 0
1450
1464
1451 # Mark activity in the builtins
1465 # Mark activity in the builtins
1452 __builtin__.__dict__['__IPYTHON__active'] += 1
1466 __builtin__.__dict__['__IPYTHON__active'] += 1
1453
1467
1454 # exit_now is set by a call to %Exit or %Quit
1468 # exit_now is set by a call to %Exit or %Quit
1455 self.exit_now = False
1469 self.exit_now = False
1456 while not self.exit_now:
1470 while not self.exit_now:
1457
1471
1458 try:
1472 try:
1459 if more:
1473 if more:
1460 prompt = self.outputcache.prompt2
1474 prompt = self.outputcache.prompt2
1461 if self.autoindent:
1475 if self.autoindent:
1462 self.readline_startup_hook(self.pre_readline)
1476 self.readline_startup_hook(self.pre_readline)
1463 else:
1477 else:
1464 prompt = self.outputcache.prompt1
1478 prompt = self.outputcache.prompt1
1465 try:
1479 try:
1466 line = self.raw_input(prompt,more)
1480 line = self.raw_input(prompt,more)
1467 if self.autoindent:
1481 if self.autoindent:
1468 self.readline_startup_hook(None)
1482 self.readline_startup_hook(None)
1469 except EOFError:
1483 except EOFError:
1470 if self.autoindent:
1484 if self.autoindent:
1471 self.readline_startup_hook(None)
1485 self.readline_startup_hook(None)
1472 self.write("\n")
1486 self.write("\n")
1473 self.exit()
1487 self.exit()
1474 except:
1488 except:
1475 # exceptions here are VERY RARE, but they can be triggered
1489 # exceptions here are VERY RARE, but they can be triggered
1476 # asynchronously by signal handlers, for example.
1490 # asynchronously by signal handlers, for example.
1477 self.showtraceback()
1491 self.showtraceback()
1478 else:
1492 else:
1479 more = self.push(line)
1493 more = self.push(line)
1480
1494
1481 if (self.SyntaxTB.last_syntax_error and
1495 if (self.SyntaxTB.last_syntax_error and
1482 self.rc.autoedit_syntax):
1496 self.rc.autoedit_syntax):
1483 self.edit_syntax_error()
1497 self.edit_syntax_error()
1484
1498
1485 except KeyboardInterrupt:
1499 except KeyboardInterrupt:
1486 self.write("\nKeyboardInterrupt\n")
1500 self.write("\nKeyboardInterrupt\n")
1487 self.resetbuffer()
1501 self.resetbuffer()
1488 more = 0
1502 more = 0
1489 # keep cache in sync with the prompt counter:
1503 # keep cache in sync with the prompt counter:
1490 self.outputcache.prompt_count -= 1
1504 self.outputcache.prompt_count -= 1
1491
1505
1492 if self.autoindent:
1506 if self.autoindent:
1493 self.indent_current_nsp = 0
1507 self.indent_current_nsp = 0
1494
1508
1495 except bdb.BdbQuit:
1509 except bdb.BdbQuit:
1496 warn("The Python debugger has exited with a BdbQuit exception.\n"
1510 warn("The Python debugger has exited with a BdbQuit exception.\n"
1497 "Because of how pdb handles the stack, it is impossible\n"
1511 "Because of how pdb handles the stack, it is impossible\n"
1498 "for IPython to properly format this particular exception.\n"
1512 "for IPython to properly format this particular exception.\n"
1499 "IPython will resume normal operation.")
1513 "IPython will resume normal operation.")
1500
1514
1501 # We are off again...
1515 # We are off again...
1502 __builtin__.__dict__['__IPYTHON__active'] -= 1
1516 __builtin__.__dict__['__IPYTHON__active'] -= 1
1503
1517
1504 def excepthook(self, type, value, tb):
1518 def excepthook(self, type, value, tb):
1505 """One more defense for GUI apps that call sys.excepthook.
1519 """One more defense for GUI apps that call sys.excepthook.
1506
1520
1507 GUI frameworks like wxPython trap exceptions and call
1521 GUI frameworks like wxPython trap exceptions and call
1508 sys.excepthook themselves. I guess this is a feature that
1522 sys.excepthook themselves. I guess this is a feature that
1509 enables them to keep running after exceptions that would
1523 enables them to keep running after exceptions that would
1510 otherwise kill their mainloop. This is a bother for IPython
1524 otherwise kill their mainloop. This is a bother for IPython
1511 which excepts to catch all of the program exceptions with a try:
1525 which excepts to catch all of the program exceptions with a try:
1512 except: statement.
1526 except: statement.
1513
1527
1514 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1528 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1515 any app directly invokes sys.excepthook, it will look to the user like
1529 any app directly invokes sys.excepthook, it will look to the user like
1516 IPython crashed. In order to work around this, we can disable the
1530 IPython crashed. In order to work around this, we can disable the
1517 CrashHandler and replace it with this excepthook instead, which prints a
1531 CrashHandler and replace it with this excepthook instead, which prints a
1518 regular traceback using our InteractiveTB. In this fashion, apps which
1532 regular traceback using our InteractiveTB. In this fashion, apps which
1519 call sys.excepthook will generate a regular-looking exception from
1533 call sys.excepthook will generate a regular-looking exception from
1520 IPython, and the CrashHandler will only be triggered by real IPython
1534 IPython, and the CrashHandler will only be triggered by real IPython
1521 crashes.
1535 crashes.
1522
1536
1523 This hook should be used sparingly, only in places which are not likely
1537 This hook should be used sparingly, only in places which are not likely
1524 to be true IPython errors.
1538 to be true IPython errors.
1525 """
1539 """
1526
1540
1527 self.InteractiveTB(type, value, tb, tb_offset=0)
1541 self.InteractiveTB(type, value, tb, tb_offset=0)
1528 if self.InteractiveTB.call_pdb and self.has_readline:
1542 if self.InteractiveTB.call_pdb and self.has_readline:
1529 self.readline.set_completer(self.Completer.complete)
1543 self.readline.set_completer(self.Completer.complete)
1530
1544
1531 def call_alias(self,alias,rest=''):
1545 def call_alias(self,alias,rest=''):
1532 """Call an alias given its name and the rest of the line.
1546 """Call an alias given its name and the rest of the line.
1533
1547
1534 This function MUST be given a proper alias, because it doesn't make
1548 This function MUST be given a proper alias, because it doesn't make
1535 any checks when looking up into the alias table. The caller is
1549 any checks when looking up into the alias table. The caller is
1536 responsible for invoking it only with a valid alias."""
1550 responsible for invoking it only with a valid alias."""
1537
1551
1538 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1552 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1539 nargs,cmd = self.alias_table[alias]
1553 nargs,cmd = self.alias_table[alias]
1540 # Expand the %l special to be the user's input line
1554 # Expand the %l special to be the user's input line
1541 if cmd.find('%l') >= 0:
1555 if cmd.find('%l') >= 0:
1542 cmd = cmd.replace('%l',rest)
1556 cmd = cmd.replace('%l',rest)
1543 rest = ''
1557 rest = ''
1544 if nargs==0:
1558 if nargs==0:
1545 # Simple, argument-less aliases
1559 # Simple, argument-less aliases
1546 cmd = '%s %s' % (cmd,rest)
1560 cmd = '%s %s' % (cmd,rest)
1547 else:
1561 else:
1548 # Handle aliases with positional arguments
1562 # Handle aliases with positional arguments
1549 args = rest.split(None,nargs)
1563 args = rest.split(None,nargs)
1550 if len(args)< nargs:
1564 if len(args)< nargs:
1551 error('Alias <%s> requires %s arguments, %s given.' %
1565 error('Alias <%s> requires %s arguments, %s given.' %
1552 (alias,nargs,len(args)))
1566 (alias,nargs,len(args)))
1553 return
1567 return
1554 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1568 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1555 # Now call the macro, evaluating in the user's namespace
1569 # Now call the macro, evaluating in the user's namespace
1556 try:
1570 try:
1557 self.system(cmd)
1571 self.system(cmd)
1558 except:
1572 except:
1559 self.showtraceback()
1573 self.showtraceback()
1560
1574
1561 def indent_current_str(self):
1575 def indent_current_str(self):
1562 """return the current level of indentation as a string"""
1576 """return the current level of indentation as a string"""
1563 return self.indent_current_nsp * ' '
1577 return self.indent_current_nsp * ' '
1564
1578
1565 def autoindent_update(self,line):
1579 def autoindent_update(self,line):
1566 """Keep track of the indent level."""
1580 """Keep track of the indent level."""
1567
1581
1568 #debugx('line')
1582 #debugx('line')
1569 #debugx('self.indent_current_nsp')
1583 #debugx('self.indent_current_nsp')
1570 if self.autoindent:
1584 if self.autoindent:
1571 if line:
1585 if line:
1572 inisp = num_ini_spaces(line)
1586 inisp = num_ini_spaces(line)
1573 if inisp < self.indent_current_nsp:
1587 if inisp < self.indent_current_nsp:
1574 self.indent_current_nsp = inisp
1588 self.indent_current_nsp = inisp
1575
1589
1576 if line[-1] == ':':
1590 if line[-1] == ':':
1577 self.indent_current_nsp += 4
1591 self.indent_current_nsp += 4
1578 elif dedent_re.match(line):
1592 elif dedent_re.match(line):
1579 self.indent_current_nsp -= 4
1593 self.indent_current_nsp -= 4
1580 else:
1594 else:
1581 self.indent_current_nsp = 0
1595 self.indent_current_nsp = 0
1582
1596
1583 def runlines(self,lines):
1597 def runlines(self,lines):
1584 """Run a string of one or more lines of source.
1598 """Run a string of one or more lines of source.
1585
1599
1586 This method is capable of running a string containing multiple source
1600 This method is capable of running a string containing multiple source
1587 lines, as if they had been entered at the IPython prompt. Since it
1601 lines, as if they had been entered at the IPython prompt. Since it
1588 exposes IPython's processing machinery, the given strings can contain
1602 exposes IPython's processing machinery, the given strings can contain
1589 magic calls (%magic), special shell access (!cmd), etc."""
1603 magic calls (%magic), special shell access (!cmd), etc."""
1590
1604
1591 # We must start with a clean buffer, in case this is run from an
1605 # We must start with a clean buffer, in case this is run from an
1592 # interactive IPython session (via a magic, for example).
1606 # interactive IPython session (via a magic, for example).
1593 self.resetbuffer()
1607 self.resetbuffer()
1594 lines = lines.split('\n')
1608 lines = lines.split('\n')
1595 more = 0
1609 more = 0
1596 for line in lines:
1610 for line in lines:
1597 # skip blank lines so we don't mess up the prompt counter, but do
1611 # skip blank lines so we don't mess up the prompt counter, but do
1598 # NOT skip even a blank line if we are in a code block (more is
1612 # NOT skip even a blank line if we are in a code block (more is
1599 # true)
1613 # true)
1600 if line or more:
1614 if line or more:
1601 more = self.push(self.prefilter(line,more))
1615 more = self.push(self.prefilter(line,more))
1602 # IPython's runsource returns None if there was an error
1616 # IPython's runsource returns None if there was an error
1603 # compiling the code. This allows us to stop processing right
1617 # compiling the code. This allows us to stop processing right
1604 # away, so the user gets the error message at the right place.
1618 # away, so the user gets the error message at the right place.
1605 if more is None:
1619 if more is None:
1606 break
1620 break
1607 # final newline in case the input didn't have it, so that the code
1621 # final newline in case the input didn't have it, so that the code
1608 # actually does get executed
1622 # actually does get executed
1609 if more:
1623 if more:
1610 self.push('\n')
1624 self.push('\n')
1611
1625
1612 def runsource(self, source, filename='<input>', symbol='single'):
1626 def runsource(self, source, filename='<input>', symbol='single'):
1613 """Compile and run some source in the interpreter.
1627 """Compile and run some source in the interpreter.
1614
1628
1615 Arguments are as for compile_command().
1629 Arguments are as for compile_command().
1616
1630
1617 One several things can happen:
1631 One several things can happen:
1618
1632
1619 1) The input is incorrect; compile_command() raised an
1633 1) The input is incorrect; compile_command() raised an
1620 exception (SyntaxError or OverflowError). A syntax traceback
1634 exception (SyntaxError or OverflowError). A syntax traceback
1621 will be printed by calling the showsyntaxerror() method.
1635 will be printed by calling the showsyntaxerror() method.
1622
1636
1623 2) The input is incomplete, and more input is required;
1637 2) The input is incomplete, and more input is required;
1624 compile_command() returned None. Nothing happens.
1638 compile_command() returned None. Nothing happens.
1625
1639
1626 3) The input is complete; compile_command() returned a code
1640 3) The input is complete; compile_command() returned a code
1627 object. The code is executed by calling self.runcode() (which
1641 object. The code is executed by calling self.runcode() (which
1628 also handles run-time exceptions, except for SystemExit).
1642 also handles run-time exceptions, except for SystemExit).
1629
1643
1630 The return value is:
1644 The return value is:
1631
1645
1632 - True in case 2
1646 - True in case 2
1633
1647
1634 - False in the other cases, unless an exception is raised, where
1648 - False in the other cases, unless an exception is raised, where
1635 None is returned instead. This can be used by external callers to
1649 None is returned instead. This can be used by external callers to
1636 know whether to continue feeding input or not.
1650 know whether to continue feeding input or not.
1637
1651
1638 The return value can be used to decide whether to use sys.ps1 or
1652 The return value can be used to decide whether to use sys.ps1 or
1639 sys.ps2 to prompt the next line."""
1653 sys.ps2 to prompt the next line."""
1640
1654
1641 try:
1655 try:
1642 code = self.compile(source,filename,symbol)
1656 code = self.compile(source,filename,symbol)
1643 except (OverflowError, SyntaxError, ValueError):
1657 except (OverflowError, SyntaxError, ValueError):
1644 # Case 1
1658 # Case 1
1645 self.showsyntaxerror(filename)
1659 self.showsyntaxerror(filename)
1646 return None
1660 return None
1647
1661
1648 if code is None:
1662 if code is None:
1649 # Case 2
1663 # Case 2
1650 return True
1664 return True
1651
1665
1652 # Case 3
1666 # Case 3
1653 # We store the code object so that threaded shells and
1667 # We store the code object so that threaded shells and
1654 # custom exception handlers can access all this info if needed.
1668 # custom exception handlers can access all this info if needed.
1655 # The source corresponding to this can be obtained from the
1669 # The source corresponding to this can be obtained from the
1656 # buffer attribute as '\n'.join(self.buffer).
1670 # buffer attribute as '\n'.join(self.buffer).
1657 self.code_to_run = code
1671 self.code_to_run = code
1658 # now actually execute the code object
1672 # now actually execute the code object
1659 if self.runcode(code) == 0:
1673 if self.runcode(code) == 0:
1660 return False
1674 return False
1661 else:
1675 else:
1662 return None
1676 return None
1663
1677
1664 def runcode(self,code_obj):
1678 def runcode(self,code_obj):
1665 """Execute a code object.
1679 """Execute a code object.
1666
1680
1667 When an exception occurs, self.showtraceback() is called to display a
1681 When an exception occurs, self.showtraceback() is called to display a
1668 traceback.
1682 traceback.
1669
1683
1670 Return value: a flag indicating whether the code to be run completed
1684 Return value: a flag indicating whether the code to be run completed
1671 successfully:
1685 successfully:
1672
1686
1673 - 0: successful execution.
1687 - 0: successful execution.
1674 - 1: an error occurred.
1688 - 1: an error occurred.
1675 """
1689 """
1676
1690
1677 # Set our own excepthook in case the user code tries to call it
1691 # Set our own excepthook in case the user code tries to call it
1678 # directly, so that the IPython crash handler doesn't get triggered
1692 # directly, so that the IPython crash handler doesn't get triggered
1679 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1693 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1680
1694
1681 # we save the original sys.excepthook in the instance, in case config
1695 # we save the original sys.excepthook in the instance, in case config
1682 # code (such as magics) needs access to it.
1696 # code (such as magics) needs access to it.
1683 self.sys_excepthook = old_excepthook
1697 self.sys_excepthook = old_excepthook
1684 outflag = 1 # happens in more places, so it's easier as default
1698 outflag = 1 # happens in more places, so it's easier as default
1685 try:
1699 try:
1686 try:
1700 try:
1687 # Embedded instances require separate global/local namespaces
1701 # Embedded instances require separate global/local namespaces
1688 # so they can see both the surrounding (local) namespace and
1702 # so they can see both the surrounding (local) namespace and
1689 # the module-level globals when called inside another function.
1703 # the module-level globals when called inside another function.
1690 if self.embedded:
1704 if self.embedded:
1691 exec code_obj in self.user_global_ns, self.user_ns
1705 exec code_obj in self.user_global_ns, self.user_ns
1692 # Normal (non-embedded) instances should only have a single
1706 # Normal (non-embedded) instances should only have a single
1693 # namespace for user code execution, otherwise functions won't
1707 # namespace for user code execution, otherwise functions won't
1694 # see interactive top-level globals.
1708 # see interactive top-level globals.
1695 else:
1709 else:
1696 exec code_obj in self.user_ns
1710 exec code_obj in self.user_ns
1697 finally:
1711 finally:
1698 # Reset our crash handler in place
1712 # Reset our crash handler in place
1699 sys.excepthook = old_excepthook
1713 sys.excepthook = old_excepthook
1700 except SystemExit:
1714 except SystemExit:
1701 self.resetbuffer()
1715 self.resetbuffer()
1702 self.showtraceback()
1716 self.showtraceback()
1703 warn("Type exit or quit to exit IPython "
1717 warn("Type exit or quit to exit IPython "
1704 "(%Exit or %Quit do so unconditionally).",level=1)
1718 "(%Exit or %Quit do so unconditionally).",level=1)
1705 except self.custom_exceptions:
1719 except self.custom_exceptions:
1706 etype,value,tb = sys.exc_info()
1720 etype,value,tb = sys.exc_info()
1707 self.CustomTB(etype,value,tb)
1721 self.CustomTB(etype,value,tb)
1708 except:
1722 except:
1709 self.showtraceback()
1723 self.showtraceback()
1710 else:
1724 else:
1711 outflag = 0
1725 outflag = 0
1712 if softspace(sys.stdout, 0):
1726 if softspace(sys.stdout, 0):
1713 print
1727 print
1714 # Flush out code object which has been run (and source)
1728 # Flush out code object which has been run (and source)
1715 self.code_to_run = None
1729 self.code_to_run = None
1716 return outflag
1730 return outflag
1717
1731
1718 def push(self, line):
1732 def push(self, line):
1719 """Push a line to the interpreter.
1733 """Push a line to the interpreter.
1720
1734
1721 The line should not have a trailing newline; it may have
1735 The line should not have a trailing newline; it may have
1722 internal newlines. The line is appended to a buffer and the
1736 internal newlines. The line is appended to a buffer and the
1723 interpreter's runsource() method is called with the
1737 interpreter's runsource() method is called with the
1724 concatenated contents of the buffer as source. If this
1738 concatenated contents of the buffer as source. If this
1725 indicates that the command was executed or invalid, the buffer
1739 indicates that the command was executed or invalid, the buffer
1726 is reset; otherwise, the command is incomplete, and the buffer
1740 is reset; otherwise, the command is incomplete, and the buffer
1727 is left as it was after the line was appended. The return
1741 is left as it was after the line was appended. The return
1728 value is 1 if more input is required, 0 if the line was dealt
1742 value is 1 if more input is required, 0 if the line was dealt
1729 with in some way (this is the same as runsource()).
1743 with in some way (this is the same as runsource()).
1730 """
1744 """
1731
1745
1732 # autoindent management should be done here, and not in the
1746 # autoindent management should be done here, and not in the
1733 # interactive loop, since that one is only seen by keyboard input. We
1747 # interactive loop, since that one is only seen by keyboard input. We
1734 # need this done correctly even for code run via runlines (which uses
1748 # need this done correctly even for code run via runlines (which uses
1735 # push).
1749 # push).
1736
1750
1737 #print 'push line: <%s>' % line # dbg
1751 #print 'push line: <%s>' % line # dbg
1738 self.autoindent_update(line)
1752 self.autoindent_update(line)
1739
1753
1740 self.buffer.append(line)
1754 self.buffer.append(line)
1741 more = self.runsource('\n'.join(self.buffer), self.filename)
1755 more = self.runsource('\n'.join(self.buffer), self.filename)
1742 if not more:
1756 if not more:
1743 self.resetbuffer()
1757 self.resetbuffer()
1744 return more
1758 return more
1745
1759
1746 def resetbuffer(self):
1760 def resetbuffer(self):
1747 """Reset the input buffer."""
1761 """Reset the input buffer."""
1748 self.buffer[:] = []
1762 self.buffer[:] = []
1749
1763
1750 def raw_input(self,prompt='',continue_prompt=False):
1764 def raw_input(self,prompt='',continue_prompt=False):
1751 """Write a prompt and read a line.
1765 """Write a prompt and read a line.
1752
1766
1753 The returned line does not include the trailing newline.
1767 The returned line does not include the trailing newline.
1754 When the user enters the EOF key sequence, EOFError is raised.
1768 When the user enters the EOF key sequence, EOFError is raised.
1755
1769
1756 Optional inputs:
1770 Optional inputs:
1757
1771
1758 - prompt(''): a string to be printed to prompt the user.
1772 - prompt(''): a string to be printed to prompt the user.
1759
1773
1760 - continue_prompt(False): whether this line is the first one or a
1774 - continue_prompt(False): whether this line is the first one or a
1761 continuation in a sequence of inputs.
1775 continuation in a sequence of inputs.
1762 """
1776 """
1763
1777
1764 line = raw_input_original(prompt)
1778 line = raw_input_original(prompt)
1765 # Try to be reasonably smart about not re-indenting pasted input more
1779 # Try to be reasonably smart about not re-indenting pasted input more
1766 # than necessary. We do this by trimming out the auto-indent initial
1780 # than necessary. We do this by trimming out the auto-indent initial
1767 # spaces, if the user's actual input started itself with whitespace.
1781 # spaces, if the user's actual input started itself with whitespace.
1768 #debugx('self.buffer[-1]')
1782 #debugx('self.buffer[-1]')
1769
1783
1770 if self.autoindent:
1784 if self.autoindent:
1771 if num_ini_spaces(line) > self.indent_current_nsp:
1785 if num_ini_spaces(line) > self.indent_current_nsp:
1772 line = line[self.indent_current_nsp:]
1786 line = line[self.indent_current_nsp:]
1773 self.indent_current_nsp = 0
1787 self.indent_current_nsp = 0
1774
1788
1775 # store the unfiltered input before the user has any chance to modify
1789 # store the unfiltered input before the user has any chance to modify
1776 # it.
1790 # it.
1777 if line.strip():
1791 if line.strip():
1778 if continue_prompt:
1792 if continue_prompt:
1779 self.input_hist_raw[-1] += '%s\n' % line
1793 self.input_hist_raw[-1] += '%s\n' % line
1780 else:
1794 else:
1781 self.input_hist_raw.append('%s\n' % line)
1795 self.input_hist_raw.append('%s\n' % line)
1782
1796
1783 lineout = self.prefilter(line,continue_prompt)
1797 lineout = self.prefilter(line,continue_prompt)
1784 return lineout
1798 return lineout
1785
1799
1786 def split_user_input(self,line):
1800 def split_user_input(self,line):
1787 """Split user input into pre-char, function part and rest."""
1801 """Split user input into pre-char, function part and rest."""
1788
1802
1789 lsplit = self.line_split.match(line)
1803 lsplit = self.line_split.match(line)
1790 if lsplit is None: # no regexp match returns None
1804 if lsplit is None: # no regexp match returns None
1791 try:
1805 try:
1792 iFun,theRest = line.split(None,1)
1806 iFun,theRest = line.split(None,1)
1793 except ValueError:
1807 except ValueError:
1794 iFun,theRest = line,''
1808 iFun,theRest = line,''
1795 pre = re.match('^(\s*)(.*)',line).groups()[0]
1809 pre = re.match('^(\s*)(.*)',line).groups()[0]
1796 else:
1810 else:
1797 pre,iFun,theRest = lsplit.groups()
1811 pre,iFun,theRest = lsplit.groups()
1798
1812
1799 #print 'line:<%s>' % line # dbg
1813 #print 'line:<%s>' % line # dbg
1800 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1814 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1801 return pre,iFun.strip(),theRest
1815 return pre,iFun.strip(),theRest
1802
1816
1803 def _prefilter(self, line, continue_prompt):
1817 def _prefilter(self, line, continue_prompt):
1804 """Calls different preprocessors, depending on the form of line."""
1818 """Calls different preprocessors, depending on the form of line."""
1805
1819
1806 # All handlers *must* return a value, even if it's blank ('').
1820 # All handlers *must* return a value, even if it's blank ('').
1807
1821
1808 # Lines are NOT logged here. Handlers should process the line as
1822 # Lines are NOT logged here. Handlers should process the line as
1809 # needed, update the cache AND log it (so that the input cache array
1823 # needed, update the cache AND log it (so that the input cache array
1810 # stays synced).
1824 # stays synced).
1811
1825
1812 # This function is _very_ delicate, and since it's also the one which
1826 # This function is _very_ delicate, and since it's also the one which
1813 # determines IPython's response to user input, it must be as efficient
1827 # determines IPython's response to user input, it must be as efficient
1814 # as possible. For this reason it has _many_ returns in it, trying
1828 # as possible. For this reason it has _many_ returns in it, trying
1815 # always to exit as quickly as it can figure out what it needs to do.
1829 # always to exit as quickly as it can figure out what it needs to do.
1816
1830
1817 # This function is the main responsible for maintaining IPython's
1831 # This function is the main responsible for maintaining IPython's
1818 # behavior respectful of Python's semantics. So be _very_ careful if
1832 # behavior respectful of Python's semantics. So be _very_ careful if
1819 # making changes to anything here.
1833 # making changes to anything here.
1820
1834
1821 #.....................................................................
1835 #.....................................................................
1822 # Code begins
1836 # Code begins
1823
1837
1824 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1838 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1825
1839
1826 # save the line away in case we crash, so the post-mortem handler can
1840 # save the line away in case we crash, so the post-mortem handler can
1827 # record it
1841 # record it
1828 self._last_input_line = line
1842 self._last_input_line = line
1829
1843
1830 #print '***line: <%s>' % line # dbg
1844 #print '***line: <%s>' % line # dbg
1831
1845
1832 # the input history needs to track even empty lines
1846 # the input history needs to track even empty lines
1833 stripped = line.strip()
1847 stripped = line.strip()
1834
1848
1835 if not stripped:
1849 if not stripped:
1836 if not continue_prompt:
1850 if not continue_prompt:
1837 self.outputcache.prompt_count -= 1
1851 self.outputcache.prompt_count -= 1
1838 return self.handle_normal(line,continue_prompt)
1852 return self.handle_normal(line,continue_prompt)
1839 #return self.handle_normal('',continue_prompt)
1853 #return self.handle_normal('',continue_prompt)
1840
1854
1841 # print '***cont',continue_prompt # dbg
1855 # print '***cont',continue_prompt # dbg
1842 # special handlers are only allowed for single line statements
1856 # special handlers are only allowed for single line statements
1843 if continue_prompt and not self.rc.multi_line_specials:
1857 if continue_prompt and not self.rc.multi_line_specials:
1844 return self.handle_normal(line,continue_prompt)
1858 return self.handle_normal(line,continue_prompt)
1845
1859
1846
1860
1847 # For the rest, we need the structure of the input
1861 # For the rest, we need the structure of the input
1848 pre,iFun,theRest = self.split_user_input(line)
1862 pre,iFun,theRest = self.split_user_input(line)
1849
1863
1850 # See whether any pre-existing handler can take care of it
1864 # See whether any pre-existing handler can take care of it
1851
1865
1852 rewritten = self.hooks.input_prefilter(stripped)
1866 rewritten = self.hooks.input_prefilter(stripped)
1853 if rewritten != stripped: # ok, some prefilter did something
1867 if rewritten != stripped: # ok, some prefilter did something
1854 rewritten = pre + rewritten # add indentation
1868 rewritten = pre + rewritten # add indentation
1855 return self.handle_normal(rewritten)
1869 return self.handle_normal(rewritten)
1856
1870
1857
1871
1858
1872
1859
1873
1860 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1874 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1861
1875
1862 # First check for explicit escapes in the last/first character
1876 # First check for explicit escapes in the last/first character
1863 handler = None
1877 handler = None
1864 if line[-1] == self.ESC_HELP:
1878 if line[-1] == self.ESC_HELP:
1865 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1879 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1866 if handler is None:
1880 if handler is None:
1867 # look at the first character of iFun, NOT of line, so we skip
1881 # look at the first character of iFun, NOT of line, so we skip
1868 # leading whitespace in multiline input
1882 # leading whitespace in multiline input
1869 handler = self.esc_handlers.get(iFun[0:1])
1883 handler = self.esc_handlers.get(iFun[0:1])
1870 if handler is not None:
1884 if handler is not None:
1871 return handler(line,continue_prompt,pre,iFun,theRest)
1885 return handler(line,continue_prompt,pre,iFun,theRest)
1872 # Emacs ipython-mode tags certain input lines
1886 # Emacs ipython-mode tags certain input lines
1873 if line.endswith('# PYTHON-MODE'):
1887 if line.endswith('# PYTHON-MODE'):
1874 return self.handle_emacs(line,continue_prompt)
1888 return self.handle_emacs(line,continue_prompt)
1875
1889
1876 # Next, check if we can automatically execute this thing
1890 # Next, check if we can automatically execute this thing
1877
1891
1878 # Allow ! in multi-line statements if multi_line_specials is on:
1892 # Allow ! in multi-line statements if multi_line_specials is on:
1879 if continue_prompt and self.rc.multi_line_specials and \
1893 if continue_prompt and self.rc.multi_line_specials and \
1880 iFun.startswith(self.ESC_SHELL):
1894 iFun.startswith(self.ESC_SHELL):
1881 return self.handle_shell_escape(line,continue_prompt,
1895 return self.handle_shell_escape(line,continue_prompt,
1882 pre=pre,iFun=iFun,
1896 pre=pre,iFun=iFun,
1883 theRest=theRest)
1897 theRest=theRest)
1884
1898
1885 # Let's try to find if the input line is a magic fn
1899 # Let's try to find if the input line is a magic fn
1886 oinfo = None
1900 oinfo = None
1887 if hasattr(self,'magic_'+iFun):
1901 if hasattr(self,'magic_'+iFun):
1888 # WARNING: _ofind uses getattr(), so it can consume generators and
1902 # WARNING: _ofind uses getattr(), so it can consume generators and
1889 # cause other side effects.
1903 # cause other side effects.
1890 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1904 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1891 if oinfo['ismagic']:
1905 if oinfo['ismagic']:
1892 # Be careful not to call magics when a variable assignment is
1906 # Be careful not to call magics when a variable assignment is
1893 # being made (ls='hi', for example)
1907 # being made (ls='hi', for example)
1894 if self.rc.automagic and \
1908 if self.rc.automagic and \
1895 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1909 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1896 (self.rc.multi_line_specials or not continue_prompt):
1910 (self.rc.multi_line_specials or not continue_prompt):
1897 return self.handle_magic(line,continue_prompt,
1911 return self.handle_magic(line,continue_prompt,
1898 pre,iFun,theRest)
1912 pre,iFun,theRest)
1899 else:
1913 else:
1900 return self.handle_normal(line,continue_prompt)
1914 return self.handle_normal(line,continue_prompt)
1901
1915
1902 # If the rest of the line begins with an (in)equality, assginment or
1916 # If the rest of the line begins with an (in)equality, assginment or
1903 # function call, we should not call _ofind but simply execute it.
1917 # function call, we should not call _ofind but simply execute it.
1904 # This avoids spurious geattr() accesses on objects upon assignment.
1918 # This avoids spurious geattr() accesses on objects upon assignment.
1905 #
1919 #
1906 # It also allows users to assign to either alias or magic names true
1920 # It also allows users to assign to either alias or magic names true
1907 # python variables (the magic/alias systems always take second seat to
1921 # python variables (the magic/alias systems always take second seat to
1908 # true python code).
1922 # true python code).
1909 if theRest and theRest[0] in '!=()':
1923 if theRest and theRest[0] in '!=()':
1910 return self.handle_normal(line,continue_prompt)
1924 return self.handle_normal(line,continue_prompt)
1911
1925
1912 if oinfo is None:
1926 if oinfo is None:
1913 # let's try to ensure that _oinfo is ONLY called when autocall is
1927 # let's try to ensure that _oinfo is ONLY called when autocall is
1914 # on. Since it has inevitable potential side effects, at least
1928 # on. Since it has inevitable potential side effects, at least
1915 # having autocall off should be a guarantee to the user that no
1929 # having autocall off should be a guarantee to the user that no
1916 # weird things will happen.
1930 # weird things will happen.
1917
1931
1918 if self.rc.autocall:
1932 if self.rc.autocall:
1919 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1933 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1920 else:
1934 else:
1921 # in this case, all that's left is either an alias or
1935 # in this case, all that's left is either an alias or
1922 # processing the line normally.
1936 # processing the line normally.
1923 if iFun in self.alias_table:
1937 if iFun in self.alias_table:
1924 return self.handle_alias(line,continue_prompt,
1938 return self.handle_alias(line,continue_prompt,
1925 pre,iFun,theRest)
1939 pre,iFun,theRest)
1926
1940
1927 else:
1941 else:
1928 return self.handle_normal(line,continue_prompt)
1942 return self.handle_normal(line,continue_prompt)
1929
1943
1930 if not oinfo['found']:
1944 if not oinfo['found']:
1931 return self.handle_normal(line,continue_prompt)
1945 return self.handle_normal(line,continue_prompt)
1932 else:
1946 else:
1933 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1947 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1934 if oinfo['isalias']:
1948 if oinfo['isalias']:
1935 return self.handle_alias(line,continue_prompt,
1949 return self.handle_alias(line,continue_prompt,
1936 pre,iFun,theRest)
1950 pre,iFun,theRest)
1937
1951
1938 if (self.rc.autocall
1952 if (self.rc.autocall
1939 and
1953 and
1940 (
1954 (
1941 #only consider exclusion re if not "," or ";" autoquoting
1955 #only consider exclusion re if not "," or ";" autoquoting
1942 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
1956 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
1943 or pre == self.ESC_PAREN) or
1957 or pre == self.ESC_PAREN) or
1944 (not self.re_exclude_auto.match(theRest)))
1958 (not self.re_exclude_auto.match(theRest)))
1945 and
1959 and
1946 self.re_fun_name.match(iFun) and
1960 self.re_fun_name.match(iFun) and
1947 callable(oinfo['obj'])) :
1961 callable(oinfo['obj'])) :
1948 #print 'going auto' # dbg
1962 #print 'going auto' # dbg
1949 return self.handle_auto(line,continue_prompt,
1963 return self.handle_auto(line,continue_prompt,
1950 pre,iFun,theRest,oinfo['obj'])
1964 pre,iFun,theRest,oinfo['obj'])
1951 else:
1965 else:
1952 #print 'was callable?', callable(oinfo['obj']) # dbg
1966 #print 'was callable?', callable(oinfo['obj']) # dbg
1953 return self.handle_normal(line,continue_prompt)
1967 return self.handle_normal(line,continue_prompt)
1954
1968
1955 # If we get here, we have a normal Python line. Log and return.
1969 # If we get here, we have a normal Python line. Log and return.
1956 return self.handle_normal(line,continue_prompt)
1970 return self.handle_normal(line,continue_prompt)
1957
1971
1958 def _prefilter_dumb(self, line, continue_prompt):
1972 def _prefilter_dumb(self, line, continue_prompt):
1959 """simple prefilter function, for debugging"""
1973 """simple prefilter function, for debugging"""
1960 return self.handle_normal(line,continue_prompt)
1974 return self.handle_normal(line,continue_prompt)
1961
1975
1962 # Set the default prefilter() function (this can be user-overridden)
1976 # Set the default prefilter() function (this can be user-overridden)
1963 prefilter = _prefilter
1977 prefilter = _prefilter
1964
1978
1965 def handle_normal(self,line,continue_prompt=None,
1979 def handle_normal(self,line,continue_prompt=None,
1966 pre=None,iFun=None,theRest=None):
1980 pre=None,iFun=None,theRest=None):
1967 """Handle normal input lines. Use as a template for handlers."""
1981 """Handle normal input lines. Use as a template for handlers."""
1968
1982
1969 # With autoindent on, we need some way to exit the input loop, and I
1983 # With autoindent on, we need some way to exit the input loop, and I
1970 # don't want to force the user to have to backspace all the way to
1984 # don't want to force the user to have to backspace all the way to
1971 # clear the line. The rule will be in this case, that either two
1985 # clear the line. The rule will be in this case, that either two
1972 # lines of pure whitespace in a row, or a line of pure whitespace but
1986 # lines of pure whitespace in a row, or a line of pure whitespace but
1973 # of a size different to the indent level, will exit the input loop.
1987 # of a size different to the indent level, will exit the input loop.
1974
1988
1975 if (continue_prompt and self.autoindent and line.isspace() and
1989 if (continue_prompt and self.autoindent and line.isspace() and
1976 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
1990 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
1977 (self.buffer[-1]).isspace() )):
1991 (self.buffer[-1]).isspace() )):
1978 line = ''
1992 line = ''
1979
1993
1980 self.log(line,continue_prompt)
1994 self.log(line,continue_prompt)
1981 return line
1995 return line
1982
1996
1983 def handle_alias(self,line,continue_prompt=None,
1997 def handle_alias(self,line,continue_prompt=None,
1984 pre=None,iFun=None,theRest=None):
1998 pre=None,iFun=None,theRest=None):
1985 """Handle alias input lines. """
1999 """Handle alias input lines. """
1986
2000
1987 # pre is needed, because it carries the leading whitespace. Otherwise
2001 # pre is needed, because it carries the leading whitespace. Otherwise
1988 # aliases won't work in indented sections.
2002 # aliases won't work in indented sections.
1989 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2003 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1990 self.log(line_out,continue_prompt)
2004 self.log(line_out,continue_prompt)
1991 return line_out
2005 return line_out
1992
2006
1993 def handle_shell_escape(self, line, continue_prompt=None,
2007 def handle_shell_escape(self, line, continue_prompt=None,
1994 pre=None,iFun=None,theRest=None):
2008 pre=None,iFun=None,theRest=None):
1995 """Execute the line in a shell, empty return value"""
2009 """Execute the line in a shell, empty return value"""
1996
2010
1997 #print 'line in :', `line` # dbg
2011 #print 'line in :', `line` # dbg
1998 # Example of a special handler. Others follow a similar pattern.
2012 # Example of a special handler. Others follow a similar pattern.
1999 if line.lstrip().startswith('!!'):
2013 if line.lstrip().startswith('!!'):
2000 # rewrite iFun/theRest to properly hold the call to %sx and
2014 # rewrite iFun/theRest to properly hold the call to %sx and
2001 # the actual command to be executed, so handle_magic can work
2015 # the actual command to be executed, so handle_magic can work
2002 # correctly
2016 # correctly
2003 theRest = '%s %s' % (iFun[2:],theRest)
2017 theRest = '%s %s' % (iFun[2:],theRest)
2004 iFun = 'sx'
2018 iFun = 'sx'
2005 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2019 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2006 line.lstrip()[2:]),
2020 line.lstrip()[2:]),
2007 continue_prompt,pre,iFun,theRest)
2021 continue_prompt,pre,iFun,theRest)
2008 else:
2022 else:
2009 cmd=line.lstrip().lstrip('!')
2023 cmd=line.lstrip().lstrip('!')
2010 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2024 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2011 # update cache/log and return
2025 # update cache/log and return
2012 self.log(line_out,continue_prompt)
2026 self.log(line_out,continue_prompt)
2013 return line_out
2027 return line_out
2014
2028
2015 def handle_magic(self, line, continue_prompt=None,
2029 def handle_magic(self, line, continue_prompt=None,
2016 pre=None,iFun=None,theRest=None):
2030 pre=None,iFun=None,theRest=None):
2017 """Execute magic functions."""
2031 """Execute magic functions."""
2018
2032
2019
2033
2020 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2034 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2021 self.log(cmd,continue_prompt)
2035 self.log(cmd,continue_prompt)
2022 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2036 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2023 return cmd
2037 return cmd
2024
2038
2025 def handle_auto(self, line, continue_prompt=None,
2039 def handle_auto(self, line, continue_prompt=None,
2026 pre=None,iFun=None,theRest=None,obj=None):
2040 pre=None,iFun=None,theRest=None,obj=None):
2027 """Hande lines which can be auto-executed, quoting if requested."""
2041 """Hande lines which can be auto-executed, quoting if requested."""
2028
2042
2029 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2043 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2030
2044
2031 # This should only be active for single-line input!
2045 # This should only be active for single-line input!
2032 if continue_prompt:
2046 if continue_prompt:
2033 self.log(line,continue_prompt)
2047 self.log(line,continue_prompt)
2034 return line
2048 return line
2035
2049
2036 auto_rewrite = True
2050 auto_rewrite = True
2037
2051
2038 if pre == self.ESC_QUOTE:
2052 if pre == self.ESC_QUOTE:
2039 # Auto-quote splitting on whitespace
2053 # Auto-quote splitting on whitespace
2040 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2054 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2041 elif pre == self.ESC_QUOTE2:
2055 elif pre == self.ESC_QUOTE2:
2042 # Auto-quote whole string
2056 # Auto-quote whole string
2043 newcmd = '%s("%s")' % (iFun,theRest)
2057 newcmd = '%s("%s")' % (iFun,theRest)
2044 elif pre == self.ESC_PAREN:
2058 elif pre == self.ESC_PAREN:
2045 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2059 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2046 else:
2060 else:
2047 # Auto-paren.
2061 # Auto-paren.
2048 # We only apply it to argument-less calls if the autocall
2062 # We only apply it to argument-less calls if the autocall
2049 # parameter is set to 2. We only need to check that autocall is <
2063 # parameter is set to 2. We only need to check that autocall is <
2050 # 2, since this function isn't called unless it's at least 1.
2064 # 2, since this function isn't called unless it's at least 1.
2051 if not theRest and (self.rc.autocall < 2):
2065 if not theRest and (self.rc.autocall < 2):
2052 newcmd = '%s %s' % (iFun,theRest)
2066 newcmd = '%s %s' % (iFun,theRest)
2053 auto_rewrite = False
2067 auto_rewrite = False
2054 else:
2068 else:
2055 if theRest.startswith('['):
2069 if theRest.startswith('['):
2056 if hasattr(obj,'__getitem__'):
2070 if hasattr(obj,'__getitem__'):
2057 # Don't autocall in this case: item access for an object
2071 # Don't autocall in this case: item access for an object
2058 # which is BOTH callable and implements __getitem__.
2072 # which is BOTH callable and implements __getitem__.
2059 newcmd = '%s %s' % (iFun,theRest)
2073 newcmd = '%s %s' % (iFun,theRest)
2060 auto_rewrite = False
2074 auto_rewrite = False
2061 else:
2075 else:
2062 # if the object doesn't support [] access, go ahead and
2076 # if the object doesn't support [] access, go ahead and
2063 # autocall
2077 # autocall
2064 newcmd = '%s(%s)' % (iFun.rstrip(),",".join(theRest.split()))
2078 newcmd = '%s(%s)' % (iFun.rstrip(),",".join(theRest.split()))
2065 elif theRest.endswith(';'):
2079 elif theRest.endswith(';'):
2066 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2080 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2067 else:
2081 else:
2068 newcmd = '%s(%s)' % (iFun.rstrip(),",".join(theRest.split()))
2082 newcmd = '%s(%s)' % (iFun.rstrip(),",".join(theRest.split()))
2069
2083
2070 if auto_rewrite:
2084 if auto_rewrite:
2071 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2085 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2072 # log what is now valid Python, not the actual user input (without the
2086 # log what is now valid Python, not the actual user input (without the
2073 # final newline)
2087 # final newline)
2074 self.log(newcmd,continue_prompt)
2088 self.log(newcmd,continue_prompt)
2075 return newcmd
2089 return newcmd
2076
2090
2077 def handle_help(self, line, continue_prompt=None,
2091 def handle_help(self, line, continue_prompt=None,
2078 pre=None,iFun=None,theRest=None):
2092 pre=None,iFun=None,theRest=None):
2079 """Try to get some help for the object.
2093 """Try to get some help for the object.
2080
2094
2081 obj? or ?obj -> basic information.
2095 obj? or ?obj -> basic information.
2082 obj?? or ??obj -> more details.
2096 obj?? or ??obj -> more details.
2083 """
2097 """
2084
2098
2085 # We need to make sure that we don't process lines which would be
2099 # We need to make sure that we don't process lines which would be
2086 # otherwise valid python, such as "x=1 # what?"
2100 # otherwise valid python, such as "x=1 # what?"
2087 try:
2101 try:
2088 codeop.compile_command(line)
2102 codeop.compile_command(line)
2089 except SyntaxError:
2103 except SyntaxError:
2090 # We should only handle as help stuff which is NOT valid syntax
2104 # We should only handle as help stuff which is NOT valid syntax
2091 if line[0]==self.ESC_HELP:
2105 if line[0]==self.ESC_HELP:
2092 line = line[1:]
2106 line = line[1:]
2093 elif line[-1]==self.ESC_HELP:
2107 elif line[-1]==self.ESC_HELP:
2094 line = line[:-1]
2108 line = line[:-1]
2095 self.log('#?'+line)
2109 self.log('#?'+line)
2096 if line:
2110 if line:
2097 self.magic_pinfo(line)
2111 self.magic_pinfo(line)
2098 else:
2112 else:
2099 page(self.usage,screen_lines=self.rc.screen_length)
2113 page(self.usage,screen_lines=self.rc.screen_length)
2100 return '' # Empty string is needed here!
2114 return '' # Empty string is needed here!
2101 except:
2115 except:
2102 # Pass any other exceptions through to the normal handler
2116 # Pass any other exceptions through to the normal handler
2103 return self.handle_normal(line,continue_prompt)
2117 return self.handle_normal(line,continue_prompt)
2104 else:
2118 else:
2105 # If the code compiles ok, we should handle it normally
2119 # If the code compiles ok, we should handle it normally
2106 return self.handle_normal(line,continue_prompt)
2120 return self.handle_normal(line,continue_prompt)
2107
2121
2108 def getapi(self):
2122 def getapi(self):
2109 """ Get an IPApi object for this shell instance
2123 """ Get an IPApi object for this shell instance
2110
2124
2111 Getting an IPApi object is always preferable to accessing the shell
2125 Getting an IPApi object is always preferable to accessing the shell
2112 directly, but this holds true especially for extensions.
2126 directly, but this holds true especially for extensions.
2113
2127
2114 It should always be possible to implement an extension with IPApi
2128 It should always be possible to implement an extension with IPApi
2115 alone. If not, contact maintainer to request an addition.
2129 alone. If not, contact maintainer to request an addition.
2116
2130
2117 """
2131 """
2118 return self.api
2132 return self.api
2119
2133
2120 def handle_emacs(self,line,continue_prompt=None,
2134 def handle_emacs(self,line,continue_prompt=None,
2121 pre=None,iFun=None,theRest=None):
2135 pre=None,iFun=None,theRest=None):
2122 """Handle input lines marked by python-mode."""
2136 """Handle input lines marked by python-mode."""
2123
2137
2124 # Currently, nothing is done. Later more functionality can be added
2138 # Currently, nothing is done. Later more functionality can be added
2125 # here if needed.
2139 # here if needed.
2126
2140
2127 # The input cache shouldn't be updated
2141 # The input cache shouldn't be updated
2128
2142
2129 return line
2143 return line
2130
2144
2131 def mktempfile(self,data=None):
2145 def mktempfile(self,data=None):
2132 """Make a new tempfile and return its filename.
2146 """Make a new tempfile and return its filename.
2133
2147
2134 This makes a call to tempfile.mktemp, but it registers the created
2148 This makes a call to tempfile.mktemp, but it registers the created
2135 filename internally so ipython cleans it up at exit time.
2149 filename internally so ipython cleans it up at exit time.
2136
2150
2137 Optional inputs:
2151 Optional inputs:
2138
2152
2139 - data(None): if data is given, it gets written out to the temp file
2153 - data(None): if data is given, it gets written out to the temp file
2140 immediately, and the file is closed again."""
2154 immediately, and the file is closed again."""
2141
2155
2142 filename = tempfile.mktemp('.py','ipython_edit_')
2156 filename = tempfile.mktemp('.py','ipython_edit_')
2143 self.tempfiles.append(filename)
2157 self.tempfiles.append(filename)
2144
2158
2145 if data:
2159 if data:
2146 tmp_file = open(filename,'w')
2160 tmp_file = open(filename,'w')
2147 tmp_file.write(data)
2161 tmp_file.write(data)
2148 tmp_file.close()
2162 tmp_file.close()
2149 return filename
2163 return filename
2150
2164
2151 def write(self,data):
2165 def write(self,data):
2152 """Write a string to the default output"""
2166 """Write a string to the default output"""
2153 Term.cout.write(data)
2167 Term.cout.write(data)
2154
2168
2155 def write_err(self,data):
2169 def write_err(self,data):
2156 """Write a string to the default error output"""
2170 """Write a string to the default error output"""
2157 Term.cerr.write(data)
2171 Term.cerr.write(data)
2158
2172
2159 def exit(self):
2173 def exit(self):
2160 """Handle interactive exit.
2174 """Handle interactive exit.
2161
2175
2162 This method sets the exit_now attribute."""
2176 This method sets the exit_now attribute."""
2163
2177
2164 if self.rc.confirm_exit:
2178 if self.rc.confirm_exit:
2165 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2179 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2166 self.exit_now = True
2180 self.exit_now = True
2167 else:
2181 else:
2168 self.exit_now = True
2182 self.exit_now = True
2169 return self.exit_now
2183 return self.exit_now
2170
2184
2171 def safe_execfile(self,fname,*where,**kw):
2185 def safe_execfile(self,fname,*where,**kw):
2172 fname = os.path.expanduser(fname)
2186 fname = os.path.expanduser(fname)
2173
2187
2174 # find things also in current directory
2188 # find things also in current directory
2175 dname = os.path.dirname(fname)
2189 dname = os.path.dirname(fname)
2176 if not sys.path.count(dname):
2190 if not sys.path.count(dname):
2177 sys.path.append(dname)
2191 sys.path.append(dname)
2178
2192
2179 try:
2193 try:
2180 xfile = open(fname)
2194 xfile = open(fname)
2181 except:
2195 except:
2182 print >> Term.cerr, \
2196 print >> Term.cerr, \
2183 'Could not open file <%s> for safe execution.' % fname
2197 'Could not open file <%s> for safe execution.' % fname
2184 return None
2198 return None
2185
2199
2186 kw.setdefault('islog',0)
2200 kw.setdefault('islog',0)
2187 kw.setdefault('quiet',1)
2201 kw.setdefault('quiet',1)
2188 kw.setdefault('exit_ignore',0)
2202 kw.setdefault('exit_ignore',0)
2189 first = xfile.readline()
2203 first = xfile.readline()
2190 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2204 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2191 xfile.close()
2205 xfile.close()
2192 # line by line execution
2206 # line by line execution
2193 if first.startswith(loghead) or kw['islog']:
2207 if first.startswith(loghead) or kw['islog']:
2194 print 'Loading log file <%s> one line at a time...' % fname
2208 print 'Loading log file <%s> one line at a time...' % fname
2195 if kw['quiet']:
2209 if kw['quiet']:
2196 stdout_save = sys.stdout
2210 stdout_save = sys.stdout
2197 sys.stdout = StringIO.StringIO()
2211 sys.stdout = StringIO.StringIO()
2198 try:
2212 try:
2199 globs,locs = where[0:2]
2213 globs,locs = where[0:2]
2200 except:
2214 except:
2201 try:
2215 try:
2202 globs = locs = where[0]
2216 globs = locs = where[0]
2203 except:
2217 except:
2204 globs = locs = globals()
2218 globs = locs = globals()
2205 badblocks = []
2219 badblocks = []
2206
2220
2207 # we also need to identify indented blocks of code when replaying
2221 # we also need to identify indented blocks of code when replaying
2208 # logs and put them together before passing them to an exec
2222 # logs and put them together before passing them to an exec
2209 # statement. This takes a bit of regexp and look-ahead work in the
2223 # statement. This takes a bit of regexp and look-ahead work in the
2210 # file. It's easiest if we swallow the whole thing in memory
2224 # file. It's easiest if we swallow the whole thing in memory
2211 # first, and manually walk through the lines list moving the
2225 # first, and manually walk through the lines list moving the
2212 # counter ourselves.
2226 # counter ourselves.
2213 indent_re = re.compile('\s+\S')
2227 indent_re = re.compile('\s+\S')
2214 xfile = open(fname)
2228 xfile = open(fname)
2215 filelines = xfile.readlines()
2229 filelines = xfile.readlines()
2216 xfile.close()
2230 xfile.close()
2217 nlines = len(filelines)
2231 nlines = len(filelines)
2218 lnum = 0
2232 lnum = 0
2219 while lnum < nlines:
2233 while lnum < nlines:
2220 line = filelines[lnum]
2234 line = filelines[lnum]
2221 lnum += 1
2235 lnum += 1
2222 # don't re-insert logger status info into cache
2236 # don't re-insert logger status info into cache
2223 if line.startswith('#log#'):
2237 if line.startswith('#log#'):
2224 continue
2238 continue
2225 else:
2239 else:
2226 # build a block of code (maybe a single line) for execution
2240 # build a block of code (maybe a single line) for execution
2227 block = line
2241 block = line
2228 try:
2242 try:
2229 next = filelines[lnum] # lnum has already incremented
2243 next = filelines[lnum] # lnum has already incremented
2230 except:
2244 except:
2231 next = None
2245 next = None
2232 while next and indent_re.match(next):
2246 while next and indent_re.match(next):
2233 block += next
2247 block += next
2234 lnum += 1
2248 lnum += 1
2235 try:
2249 try:
2236 next = filelines[lnum]
2250 next = filelines[lnum]
2237 except:
2251 except:
2238 next = None
2252 next = None
2239 # now execute the block of one or more lines
2253 # now execute the block of one or more lines
2240 try:
2254 try:
2241 exec block in globs,locs
2255 exec block in globs,locs
2242 except SystemExit:
2256 except SystemExit:
2243 pass
2257 pass
2244 except:
2258 except:
2245 badblocks.append(block.rstrip())
2259 badblocks.append(block.rstrip())
2246 if kw['quiet']: # restore stdout
2260 if kw['quiet']: # restore stdout
2247 sys.stdout.close()
2261 sys.stdout.close()
2248 sys.stdout = stdout_save
2262 sys.stdout = stdout_save
2249 print 'Finished replaying log file <%s>' % fname
2263 print 'Finished replaying log file <%s>' % fname
2250 if badblocks:
2264 if badblocks:
2251 print >> sys.stderr, ('\nThe following lines/blocks in file '
2265 print >> sys.stderr, ('\nThe following lines/blocks in file '
2252 '<%s> reported errors:' % fname)
2266 '<%s> reported errors:' % fname)
2253
2267
2254 for badline in badblocks:
2268 for badline in badblocks:
2255 print >> sys.stderr, badline
2269 print >> sys.stderr, badline
2256 else: # regular file execution
2270 else: # regular file execution
2257 try:
2271 try:
2258 execfile(fname,*where)
2272 execfile(fname,*where)
2259 except SyntaxError:
2273 except SyntaxError:
2260 etype,evalue = sys.exc_info()[:2]
2274 etype,evalue = sys.exc_info()[:2]
2261 self.SyntaxTB(etype,evalue,[])
2275 self.SyntaxTB(etype,evalue,[])
2262 warn('Failure executing file: <%s>' % fname)
2276 warn('Failure executing file: <%s>' % fname)
2263 except SystemExit,status:
2277 except SystemExit,status:
2264 if not kw['exit_ignore']:
2278 if not kw['exit_ignore']:
2265 self.InteractiveTB()
2279 self.InteractiveTB()
2266 warn('Failure executing file: <%s>' % fname)
2280 warn('Failure executing file: <%s>' % fname)
2267 except:
2281 except:
2268 self.InteractiveTB()
2282 self.InteractiveTB()
2269 warn('Failure executing file: <%s>' % fname)
2283 warn('Failure executing file: <%s>' % fname)
2270
2284
2271 #************************* end of file <iplib.py> *****************************
2285 #************************* end of file <iplib.py> *****************************
@@ -1,5116 +1,5120 b''
1 2006-01-29 Ville Vainio <vivainio@gmail.com>
2
3 * iplib.py: Try to import pyreadline on Windows.
4
1 2006-01-27 Ville Vainio <vivainio@gmail.com>
5 2006-01-27 Ville Vainio <vivainio@gmail.com>
2
6
3 * iplib.py: Expose ipapi as _ip in builtin namespace.
7 * iplib.py: Expose ipapi as _ip in builtin namespace.
4 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
8 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
5 and ip_set_hook (-> _ip.set_hook) redundant. % and !
9 and ip_set_hook (-> _ip.set_hook) redundant. % and !
6 syntax now produce _ip.* variant of the commands.
10 syntax now produce _ip.* variant of the commands.
7
11
8 * "_ip.options().autoedit_syntax = 2" automatically throws
12 * "_ip.options().autoedit_syntax = 2" automatically throws
9 user to editor for syntax error correction without prompting.
13 user to editor for syntax error correction without prompting.
10
14
11 2006-01-27 Ville Vainio <vivainio@gmail.com>
15 2006-01-27 Ville Vainio <vivainio@gmail.com>
12
16
13 * ipmaker.py: Give "realistic" sys.argv for scripts (without
17 * ipmaker.py: Give "realistic" sys.argv for scripts (without
14 'ipython' at argv[0]) executed through command line.
18 'ipython' at argv[0]) executed through command line.
15 NOTE: this DEPRECATES calling ipython with multiple scripts
19 NOTE: this DEPRECATES calling ipython with multiple scripts
16 ("ipython a.py b.py c.py")
20 ("ipython a.py b.py c.py")
17
21
18 * iplib.py, hooks.py: Added configurable input prefilter,
22 * iplib.py, hooks.py: Added configurable input prefilter,
19 named 'input_prefilter'. See ext_rescapture.py for example
23 named 'input_prefilter'. See ext_rescapture.py for example
20 usage.
24 usage.
21
25
22 * ext_rescapture.py, Magic.py: Better system command output capture
26 * ext_rescapture.py, Magic.py: Better system command output capture
23 through 'var = !ls' (deprecates user-visible %sc). Same notation
27 through 'var = !ls' (deprecates user-visible %sc). Same notation
24 applies for magics, 'var = %alias' assigns alias list to var.
28 applies for magics, 'var = %alias' assigns alias list to var.
25
29
26 * ipapi.py: added meta() for accessing extension-usable data store.
30 * ipapi.py: added meta() for accessing extension-usable data store.
27
31
28 * iplib.py: added InteractiveShell.getapi(). New magics should be
32 * iplib.py: added InteractiveShell.getapi(). New magics should be
29 written doing self.getapi() instead of using the shell directly.
33 written doing self.getapi() instead of using the shell directly.
30
34
31 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
35 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
32 %store foo >> ~/myfoo.txt to store variables to files (in clean
36 %store foo >> ~/myfoo.txt to store variables to files (in clean
33 textual form, not a restorable pickle).
37 textual form, not a restorable pickle).
34
38
35 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
39 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
36
40
37 * usage.py, Magic.py: added %quickref
41 * usage.py, Magic.py: added %quickref
38
42
39 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
43 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
40
44
41 * GetoptErrors when invoking magics etc. with wrong args
45 * GetoptErrors when invoking magics etc. with wrong args
42 are now more helpful:
46 are now more helpful:
43 GetoptError: option -l not recognized (allowed: "qb" )
47 GetoptError: option -l not recognized (allowed: "qb" )
44
48
45 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
49 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
46
50
47 * IPython/demo.py (Demo.show): Flush stdout after each block, so
51 * IPython/demo.py (Demo.show): Flush stdout after each block, so
48 computationally intensive blocks don't appear to stall the demo.
52 computationally intensive blocks don't appear to stall the demo.
49
53
50 2006-01-24 Ville Vainio <vivainio@gmail.com>
54 2006-01-24 Ville Vainio <vivainio@gmail.com>
51
55
52 * iplib.py, hooks.py: 'result_display' hook can return a non-None
56 * iplib.py, hooks.py: 'result_display' hook can return a non-None
53 value to manipulate resulting history entry.
57 value to manipulate resulting history entry.
54
58
55 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
59 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
56 to instance methods of IPApi class, to make extending an embedded
60 to instance methods of IPApi class, to make extending an embedded
57 IPython feasible. See ext_rehashdir.py for example usage.
61 IPython feasible. See ext_rehashdir.py for example usage.
58
62
59 * Merged 1071-1076 from banches/0.7.1
63 * Merged 1071-1076 from banches/0.7.1
60
64
61
65
62 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
66 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
63
67
64 * tools/release (daystamp): Fix build tools to use the new
68 * tools/release (daystamp): Fix build tools to use the new
65 eggsetup.py script to build lightweight eggs.
69 eggsetup.py script to build lightweight eggs.
66
70
67 * Applied changesets 1062 and 1064 before 0.7.1 release.
71 * Applied changesets 1062 and 1064 before 0.7.1 release.
68
72
69 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
73 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
70 see the raw input history (without conversions like %ls ->
74 see the raw input history (without conversions like %ls ->
71 ipmagic("ls")). After a request from W. Stein, SAGE
75 ipmagic("ls")). After a request from W. Stein, SAGE
72 (http://modular.ucsd.edu/sage) developer. This information is
76 (http://modular.ucsd.edu/sage) developer. This information is
73 stored in the input_hist_raw attribute of the IPython instance, so
77 stored in the input_hist_raw attribute of the IPython instance, so
74 developers can access it if needed (it's an InputList instance).
78 developers can access it if needed (it's an InputList instance).
75
79
76 * Versionstring = 0.7.2.svn
80 * Versionstring = 0.7.2.svn
77
81
78 * eggsetup.py: A separate script for constructing eggs, creates
82 * eggsetup.py: A separate script for constructing eggs, creates
79 proper launch scripts even on Windows (an .exe file in
83 proper launch scripts even on Windows (an .exe file in
80 \python24\scripts).
84 \python24\scripts).
81
85
82 * ipapi.py: launch_new_instance, launch entry point needed for the
86 * ipapi.py: launch_new_instance, launch entry point needed for the
83 egg.
87 egg.
84
88
85 2006-01-23 Ville Vainio <vivainio@gmail.com>
89 2006-01-23 Ville Vainio <vivainio@gmail.com>
86
90
87 * Added %cpaste magic for pasting python code
91 * Added %cpaste magic for pasting python code
88
92
89 2006-01-22 Ville Vainio <vivainio@gmail.com>
93 2006-01-22 Ville Vainio <vivainio@gmail.com>
90
94
91 * Merge from branches/0.7.1 into trunk, revs 1052-1057
95 * Merge from branches/0.7.1 into trunk, revs 1052-1057
92
96
93 * Versionstring = 0.7.2.svn
97 * Versionstring = 0.7.2.svn
94
98
95 * eggsetup.py: A separate script for constructing eggs, creates
99 * eggsetup.py: A separate script for constructing eggs, creates
96 proper launch scripts even on Windows (an .exe file in
100 proper launch scripts even on Windows (an .exe file in
97 \python24\scripts).
101 \python24\scripts).
98
102
99 * ipapi.py: launch_new_instance, launch entry point needed for the
103 * ipapi.py: launch_new_instance, launch entry point needed for the
100 egg.
104 egg.
101
105
102 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
106 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
103
107
104 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
108 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
105 %pfile foo would print the file for foo even if it was a binary.
109 %pfile foo would print the file for foo even if it was a binary.
106 Now, extensions '.so' and '.dll' are skipped.
110 Now, extensions '.so' and '.dll' are skipped.
107
111
108 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
112 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
109 bug, where macros would fail in all threaded modes. I'm not 100%
113 bug, where macros would fail in all threaded modes. I'm not 100%
110 sure, so I'm going to put out an rc instead of making a release
114 sure, so I'm going to put out an rc instead of making a release
111 today, and wait for feedback for at least a few days.
115 today, and wait for feedback for at least a few days.
112
116
113 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
117 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
114 it...) the handling of pasting external code with autoindent on.
118 it...) the handling of pasting external code with autoindent on.
115 To get out of a multiline input, the rule will appear for most
119 To get out of a multiline input, the rule will appear for most
116 users unchanged: two blank lines or change the indent level
120 users unchanged: two blank lines or change the indent level
117 proposed by IPython. But there is a twist now: you can
121 proposed by IPython. But there is a twist now: you can
118 add/subtract only *one or two spaces*. If you add/subtract three
122 add/subtract only *one or two spaces*. If you add/subtract three
119 or more (unless you completely delete the line), IPython will
123 or more (unless you completely delete the line), IPython will
120 accept that line, and you'll need to enter a second one of pure
124 accept that line, and you'll need to enter a second one of pure
121 whitespace. I know it sounds complicated, but I can't find a
125 whitespace. I know it sounds complicated, but I can't find a
122 different solution that covers all the cases, with the right
126 different solution that covers all the cases, with the right
123 heuristics. Hopefully in actual use, nobody will really notice
127 heuristics. Hopefully in actual use, nobody will really notice
124 all these strange rules and things will 'just work'.
128 all these strange rules and things will 'just work'.
125
129
126 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
130 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
127
131
128 * IPython/iplib.py (interact): catch exceptions which can be
132 * IPython/iplib.py (interact): catch exceptions which can be
129 triggered asynchronously by signal handlers. Thanks to an
133 triggered asynchronously by signal handlers. Thanks to an
130 automatic crash report, submitted by Colin Kingsley
134 automatic crash report, submitted by Colin Kingsley
131 <tercel-AT-gentoo.org>.
135 <tercel-AT-gentoo.org>.
132
136
133 2006-01-20 Ville Vainio <vivainio@gmail.com>
137 2006-01-20 Ville Vainio <vivainio@gmail.com>
134
138
135 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
139 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
136 (%rehashdir, very useful, try it out) of how to extend ipython
140 (%rehashdir, very useful, try it out) of how to extend ipython
137 with new magics. Also added Extensions dir to pythonpath to make
141 with new magics. Also added Extensions dir to pythonpath to make
138 importing extensions easy.
142 importing extensions easy.
139
143
140 * %store now complains when trying to store interactively declared
144 * %store now complains when trying to store interactively declared
141 classes / instances of those classes.
145 classes / instances of those classes.
142
146
143 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
147 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
144 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
148 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
145 if they exist, and ipy_user_conf.py with some defaults is created for
149 if they exist, and ipy_user_conf.py with some defaults is created for
146 the user.
150 the user.
147
151
148 * Startup rehashing done by the config file, not InterpreterExec.
152 * Startup rehashing done by the config file, not InterpreterExec.
149 This means system commands are available even without selecting the
153 This means system commands are available even without selecting the
150 pysh profile. It's the sensible default after all.
154 pysh profile. It's the sensible default after all.
151
155
152 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
156 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
153
157
154 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
158 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
155 multiline code with autoindent on working. But I am really not
159 multiline code with autoindent on working. But I am really not
156 sure, so this needs more testing. Will commit a debug-enabled
160 sure, so this needs more testing. Will commit a debug-enabled
157 version for now, while I test it some more, so that Ville and
161 version for now, while I test it some more, so that Ville and
158 others may also catch any problems. Also made
162 others may also catch any problems. Also made
159 self.indent_current_str() a method, to ensure that there's no
163 self.indent_current_str() a method, to ensure that there's no
160 chance of the indent space count and the corresponding string
164 chance of the indent space count and the corresponding string
161 falling out of sync. All code needing the string should just call
165 falling out of sync. All code needing the string should just call
162 the method.
166 the method.
163
167
164 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
168 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
165
169
166 * IPython/Magic.py (magic_edit): fix check for when users don't
170 * IPython/Magic.py (magic_edit): fix check for when users don't
167 save their output files, the try/except was in the wrong section.
171 save their output files, the try/except was in the wrong section.
168
172
169 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
173 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
170
174
171 * IPython/Magic.py (magic_run): fix __file__ global missing from
175 * IPython/Magic.py (magic_run): fix __file__ global missing from
172 script's namespace when executed via %run. After a report by
176 script's namespace when executed via %run. After a report by
173 Vivian.
177 Vivian.
174
178
175 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
179 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
176 when using python 2.4. The parent constructor changed in 2.4, and
180 when using python 2.4. The parent constructor changed in 2.4, and
177 we need to track it directly (we can't call it, as it messes up
181 we need to track it directly (we can't call it, as it messes up
178 readline and tab-completion inside our pdb would stop working).
182 readline and tab-completion inside our pdb would stop working).
179 After a bug report by R. Bernstein <rocky-AT-panix.com>.
183 After a bug report by R. Bernstein <rocky-AT-panix.com>.
180
184
181 2006-01-16 Ville Vainio <vivainio@gmail.com>
185 2006-01-16 Ville Vainio <vivainio@gmail.com>
182
186
183 * Ipython/magic.py:Reverted back to old %edit functionality
187 * Ipython/magic.py:Reverted back to old %edit functionality
184 that returns file contents on exit.
188 that returns file contents on exit.
185
189
186 * IPython/path.py: Added Jason Orendorff's "path" module to
190 * IPython/path.py: Added Jason Orendorff's "path" module to
187 IPython tree, http://www.jorendorff.com/articles/python/path/.
191 IPython tree, http://www.jorendorff.com/articles/python/path/.
188 You can get path objects conveniently through %sc, and !!, e.g.:
192 You can get path objects conveniently through %sc, and !!, e.g.:
189 sc files=ls
193 sc files=ls
190 for p in files.paths: # or files.p
194 for p in files.paths: # or files.p
191 print p,p.mtime
195 print p,p.mtime
192
196
193 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
197 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
194 now work again without considering the exclusion regexp -
198 now work again without considering the exclusion regexp -
195 hence, things like ',foo my/path' turn to 'foo("my/path")'
199 hence, things like ',foo my/path' turn to 'foo("my/path")'
196 instead of syntax error.
200 instead of syntax error.
197
201
198
202
199 2006-01-14 Ville Vainio <vivainio@gmail.com>
203 2006-01-14 Ville Vainio <vivainio@gmail.com>
200
204
201 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
205 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
202 ipapi decorators for python 2.4 users, options() provides access to rc
206 ipapi decorators for python 2.4 users, options() provides access to rc
203 data.
207 data.
204
208
205 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
209 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
206 as path separators (even on Linux ;-). Space character after
210 as path separators (even on Linux ;-). Space character after
207 backslash (as yielded by tab completer) is still space;
211 backslash (as yielded by tab completer) is still space;
208 "%cd long\ name" works as expected.
212 "%cd long\ name" works as expected.
209
213
210 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
214 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
211 as "chain of command", with priority. API stays the same,
215 as "chain of command", with priority. API stays the same,
212 TryNext exception raised by a hook function signals that
216 TryNext exception raised by a hook function signals that
213 current hook failed and next hook should try handling it, as
217 current hook failed and next hook should try handling it, as
214 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
218 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
215 requested configurable display hook, which is now implemented.
219 requested configurable display hook, which is now implemented.
216
220
217 2006-01-13 Ville Vainio <vivainio@gmail.com>
221 2006-01-13 Ville Vainio <vivainio@gmail.com>
218
222
219 * IPython/platutils*.py: platform specific utility functions,
223 * IPython/platutils*.py: platform specific utility functions,
220 so far only set_term_title is implemented (change terminal
224 so far only set_term_title is implemented (change terminal
221 label in windowing systems). %cd now changes the title to
225 label in windowing systems). %cd now changes the title to
222 current dir.
226 current dir.
223
227
224 * IPython/Release.py: Added myself to "authors" list,
228 * IPython/Release.py: Added myself to "authors" list,
225 had to create new files.
229 had to create new files.
226
230
227 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
231 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
228 shell escape; not a known bug but had potential to be one in the
232 shell escape; not a known bug but had potential to be one in the
229 future.
233 future.
230
234
231 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
235 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
232 extension API for IPython! See the module for usage example. Fix
236 extension API for IPython! See the module for usage example. Fix
233 OInspect for docstring-less magic functions.
237 OInspect for docstring-less magic functions.
234
238
235
239
236 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
240 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
237
241
238 * IPython/iplib.py (raw_input): temporarily deactivate all
242 * IPython/iplib.py (raw_input): temporarily deactivate all
239 attempts at allowing pasting of code with autoindent on. It
243 attempts at allowing pasting of code with autoindent on. It
240 introduced bugs (reported by Prabhu) and I can't seem to find a
244 introduced bugs (reported by Prabhu) and I can't seem to find a
241 robust combination which works in all cases. Will have to revisit
245 robust combination which works in all cases. Will have to revisit
242 later.
246 later.
243
247
244 * IPython/genutils.py: remove isspace() function. We've dropped
248 * IPython/genutils.py: remove isspace() function. We've dropped
245 2.2 compatibility, so it's OK to use the string method.
249 2.2 compatibility, so it's OK to use the string method.
246
250
247 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
251 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
248
252
249 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
253 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
250 matching what NOT to autocall on, to include all python binary
254 matching what NOT to autocall on, to include all python binary
251 operators (including things like 'and', 'or', 'is' and 'in').
255 operators (including things like 'and', 'or', 'is' and 'in').
252 Prompted by a bug report on 'foo & bar', but I realized we had
256 Prompted by a bug report on 'foo & bar', but I realized we had
253 many more potential bug cases with other operators. The regexp is
257 many more potential bug cases with other operators. The regexp is
254 self.re_exclude_auto, it's fairly commented.
258 self.re_exclude_auto, it's fairly commented.
255
259
256 2006-01-12 Ville Vainio <vivainio@gmail.com>
260 2006-01-12 Ville Vainio <vivainio@gmail.com>
257
261
258 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
262 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
259 Prettified and hardened string/backslash quoting with ipsystem(),
263 Prettified and hardened string/backslash quoting with ipsystem(),
260 ipalias() and ipmagic(). Now even \ characters are passed to
264 ipalias() and ipmagic(). Now even \ characters are passed to
261 %magics, !shell escapes and aliases exactly as they are in the
265 %magics, !shell escapes and aliases exactly as they are in the
262 ipython command line. Should improve backslash experience,
266 ipython command line. Should improve backslash experience,
263 particularly in Windows (path delimiter for some commands that
267 particularly in Windows (path delimiter for some commands that
264 won't understand '/'), but Unix benefits as well (regexps). %cd
268 won't understand '/'), but Unix benefits as well (regexps). %cd
265 magic still doesn't support backslash path delimiters, though. Also
269 magic still doesn't support backslash path delimiters, though. Also
266 deleted all pretense of supporting multiline command strings in
270 deleted all pretense of supporting multiline command strings in
267 !system or %magic commands. Thanks to Jerry McRae for suggestions.
271 !system or %magic commands. Thanks to Jerry McRae for suggestions.
268
272
269 * doc/build_doc_instructions.txt added. Documentation on how to
273 * doc/build_doc_instructions.txt added. Documentation on how to
270 use doc/update_manual.py, added yesterday. Both files contributed
274 use doc/update_manual.py, added yesterday. Both files contributed
271 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
275 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
272 doc/*.sh for deprecation at a later date.
276 doc/*.sh for deprecation at a later date.
273
277
274 * /ipython.py Added ipython.py to root directory for
278 * /ipython.py Added ipython.py to root directory for
275 zero-installation (tar xzvf ipython.tgz; cd ipython; python
279 zero-installation (tar xzvf ipython.tgz; cd ipython; python
276 ipython.py) and development convenience (no need to kee doing
280 ipython.py) and development convenience (no need to kee doing
277 "setup.py install" between changes).
281 "setup.py install" between changes).
278
282
279 * Made ! and !! shell escapes work (again) in multiline expressions:
283 * Made ! and !! shell escapes work (again) in multiline expressions:
280 if 1:
284 if 1:
281 !ls
285 !ls
282 !!ls
286 !!ls
283
287
284 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
288 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
285
289
286 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
290 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
287 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
291 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
288 module in case-insensitive installation. Was causing crashes
292 module in case-insensitive installation. Was causing crashes
289 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
293 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
290
294
291 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
295 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
292 <marienz-AT-gentoo.org>, closes
296 <marienz-AT-gentoo.org>, closes
293 http://www.scipy.net/roundup/ipython/issue51.
297 http://www.scipy.net/roundup/ipython/issue51.
294
298
295 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
299 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
296
300
297 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
301 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
298 problem of excessive CPU usage under *nix and keyboard lag under
302 problem of excessive CPU usage under *nix and keyboard lag under
299 win32.
303 win32.
300
304
301 2006-01-10 *** Released version 0.7.0
305 2006-01-10 *** Released version 0.7.0
302
306
303 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
307 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
304
308
305 * IPython/Release.py (revision): tag version number to 0.7.0,
309 * IPython/Release.py (revision): tag version number to 0.7.0,
306 ready for release.
310 ready for release.
307
311
308 * IPython/Magic.py (magic_edit): Add print statement to %edit so
312 * IPython/Magic.py (magic_edit): Add print statement to %edit so
309 it informs the user of the name of the temp. file used. This can
313 it informs the user of the name of the temp. file used. This can
310 help if you decide later to reuse that same file, so you know
314 help if you decide later to reuse that same file, so you know
311 where to copy the info from.
315 where to copy the info from.
312
316
313 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
317 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
314
318
315 * setup_bdist_egg.py: little script to build an egg. Added
319 * setup_bdist_egg.py: little script to build an egg. Added
316 support in the release tools as well.
320 support in the release tools as well.
317
321
318 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
322 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
319
323
320 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
324 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
321 version selection (new -wxversion command line and ipythonrc
325 version selection (new -wxversion command line and ipythonrc
322 parameter). Patch contributed by Arnd Baecker
326 parameter). Patch contributed by Arnd Baecker
323 <arnd.baecker-AT-web.de>.
327 <arnd.baecker-AT-web.de>.
324
328
325 * IPython/iplib.py (embed_mainloop): fix tab-completion in
329 * IPython/iplib.py (embed_mainloop): fix tab-completion in
326 embedded instances, for variables defined at the interactive
330 embedded instances, for variables defined at the interactive
327 prompt of the embedded ipython. Reported by Arnd.
331 prompt of the embedded ipython. Reported by Arnd.
328
332
329 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
333 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
330 it can be used as a (stateful) toggle, or with a direct parameter.
334 it can be used as a (stateful) toggle, or with a direct parameter.
331
335
332 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
336 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
333 could be triggered in certain cases and cause the traceback
337 could be triggered in certain cases and cause the traceback
334 printer not to work.
338 printer not to work.
335
339
336 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
340 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
337
341
338 * IPython/iplib.py (_should_recompile): Small fix, closes
342 * IPython/iplib.py (_should_recompile): Small fix, closes
339 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
343 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
340
344
341 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
345 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
342
346
343 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
347 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
344 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
348 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
345 Moad for help with tracking it down.
349 Moad for help with tracking it down.
346
350
347 * IPython/iplib.py (handle_auto): fix autocall handling for
351 * IPython/iplib.py (handle_auto): fix autocall handling for
348 objects which support BOTH __getitem__ and __call__ (so that f [x]
352 objects which support BOTH __getitem__ and __call__ (so that f [x]
349 is left alone, instead of becoming f([x]) automatically).
353 is left alone, instead of becoming f([x]) automatically).
350
354
351 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
355 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
352 Ville's patch.
356 Ville's patch.
353
357
354 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
358 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
355
359
356 * IPython/iplib.py (handle_auto): changed autocall semantics to
360 * IPython/iplib.py (handle_auto): changed autocall semantics to
357 include 'smart' mode, where the autocall transformation is NOT
361 include 'smart' mode, where the autocall transformation is NOT
358 applied if there are no arguments on the line. This allows you to
362 applied if there are no arguments on the line. This allows you to
359 just type 'foo' if foo is a callable to see its internal form,
363 just type 'foo' if foo is a callable to see its internal form,
360 instead of having it called with no arguments (typically a
364 instead of having it called with no arguments (typically a
361 mistake). The old 'full' autocall still exists: for that, you
365 mistake). The old 'full' autocall still exists: for that, you
362 need to set the 'autocall' parameter to 2 in your ipythonrc file.
366 need to set the 'autocall' parameter to 2 in your ipythonrc file.
363
367
364 * IPython/completer.py (Completer.attr_matches): add
368 * IPython/completer.py (Completer.attr_matches): add
365 tab-completion support for Enthoughts' traits. After a report by
369 tab-completion support for Enthoughts' traits. After a report by
366 Arnd and a patch by Prabhu.
370 Arnd and a patch by Prabhu.
367
371
368 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
372 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
369
373
370 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
374 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
371 Schmolck's patch to fix inspect.getinnerframes().
375 Schmolck's patch to fix inspect.getinnerframes().
372
376
373 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
377 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
374 for embedded instances, regarding handling of namespaces and items
378 for embedded instances, regarding handling of namespaces and items
375 added to the __builtin__ one. Multiple embedded instances and
379 added to the __builtin__ one. Multiple embedded instances and
376 recursive embeddings should work better now (though I'm not sure
380 recursive embeddings should work better now (though I'm not sure
377 I've got all the corner cases fixed, that code is a bit of a brain
381 I've got all the corner cases fixed, that code is a bit of a brain
378 twister).
382 twister).
379
383
380 * IPython/Magic.py (magic_edit): added support to edit in-memory
384 * IPython/Magic.py (magic_edit): added support to edit in-memory
381 macros (automatically creates the necessary temp files). %edit
385 macros (automatically creates the necessary temp files). %edit
382 also doesn't return the file contents anymore, it's just noise.
386 also doesn't return the file contents anymore, it's just noise.
383
387
384 * IPython/completer.py (Completer.attr_matches): revert change to
388 * IPython/completer.py (Completer.attr_matches): revert change to
385 complete only on attributes listed in __all__. I realized it
389 complete only on attributes listed in __all__. I realized it
386 cripples the tab-completion system as a tool for exploring the
390 cripples the tab-completion system as a tool for exploring the
387 internals of unknown libraries (it renders any non-__all__
391 internals of unknown libraries (it renders any non-__all__
388 attribute off-limits). I got bit by this when trying to see
392 attribute off-limits). I got bit by this when trying to see
389 something inside the dis module.
393 something inside the dis module.
390
394
391 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
395 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
392
396
393 * IPython/iplib.py (InteractiveShell.__init__): add .meta
397 * IPython/iplib.py (InteractiveShell.__init__): add .meta
394 namespace for users and extension writers to hold data in. This
398 namespace for users and extension writers to hold data in. This
395 follows the discussion in
399 follows the discussion in
396 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
400 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
397
401
398 * IPython/completer.py (IPCompleter.complete): small patch to help
402 * IPython/completer.py (IPCompleter.complete): small patch to help
399 tab-completion under Emacs, after a suggestion by John Barnard
403 tab-completion under Emacs, after a suggestion by John Barnard
400 <barnarj-AT-ccf.org>.
404 <barnarj-AT-ccf.org>.
401
405
402 * IPython/Magic.py (Magic.extract_input_slices): added support for
406 * IPython/Magic.py (Magic.extract_input_slices): added support for
403 the slice notation in magics to use N-M to represent numbers N...M
407 the slice notation in magics to use N-M to represent numbers N...M
404 (closed endpoints). This is used by %macro and %save.
408 (closed endpoints). This is used by %macro and %save.
405
409
406 * IPython/completer.py (Completer.attr_matches): for modules which
410 * IPython/completer.py (Completer.attr_matches): for modules which
407 define __all__, complete only on those. After a patch by Jeffrey
411 define __all__, complete only on those. After a patch by Jeffrey
408 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
412 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
409 speed up this routine.
413 speed up this routine.
410
414
411 * IPython/Logger.py (Logger.log): fix a history handling bug. I
415 * IPython/Logger.py (Logger.log): fix a history handling bug. I
412 don't know if this is the end of it, but the behavior now is
416 don't know if this is the end of it, but the behavior now is
413 certainly much more correct. Note that coupled with macros,
417 certainly much more correct. Note that coupled with macros,
414 slightly surprising (at first) behavior may occur: a macro will in
418 slightly surprising (at first) behavior may occur: a macro will in
415 general expand to multiple lines of input, so upon exiting, the
419 general expand to multiple lines of input, so upon exiting, the
416 in/out counters will both be bumped by the corresponding amount
420 in/out counters will both be bumped by the corresponding amount
417 (as if the macro's contents had been typed interactively). Typing
421 (as if the macro's contents had been typed interactively). Typing
418 %hist will reveal the intermediate (silently processed) lines.
422 %hist will reveal the intermediate (silently processed) lines.
419
423
420 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
424 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
421 pickle to fail (%run was overwriting __main__ and not restoring
425 pickle to fail (%run was overwriting __main__ and not restoring
422 it, but pickle relies on __main__ to operate).
426 it, but pickle relies on __main__ to operate).
423
427
424 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
428 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
425 using properties, but forgot to make the main InteractiveShell
429 using properties, but forgot to make the main InteractiveShell
426 class a new-style class. Properties fail silently, and
430 class a new-style class. Properties fail silently, and
427 misteriously, with old-style class (getters work, but
431 misteriously, with old-style class (getters work, but
428 setters don't do anything).
432 setters don't do anything).
429
433
430 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
434 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
431
435
432 * IPython/Magic.py (magic_history): fix history reporting bug (I
436 * IPython/Magic.py (magic_history): fix history reporting bug (I
433 know some nasties are still there, I just can't seem to find a
437 know some nasties are still there, I just can't seem to find a
434 reproducible test case to track them down; the input history is
438 reproducible test case to track them down; the input history is
435 falling out of sync...)
439 falling out of sync...)
436
440
437 * IPython/iplib.py (handle_shell_escape): fix bug where both
441 * IPython/iplib.py (handle_shell_escape): fix bug where both
438 aliases and system accesses where broken for indented code (such
442 aliases and system accesses where broken for indented code (such
439 as loops).
443 as loops).
440
444
441 * IPython/genutils.py (shell): fix small but critical bug for
445 * IPython/genutils.py (shell): fix small but critical bug for
442 win32 system access.
446 win32 system access.
443
447
444 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
448 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
445
449
446 * IPython/iplib.py (showtraceback): remove use of the
450 * IPython/iplib.py (showtraceback): remove use of the
447 sys.last_{type/value/traceback} structures, which are non
451 sys.last_{type/value/traceback} structures, which are non
448 thread-safe.
452 thread-safe.
449 (_prefilter): change control flow to ensure that we NEVER
453 (_prefilter): change control flow to ensure that we NEVER
450 introspect objects when autocall is off. This will guarantee that
454 introspect objects when autocall is off. This will guarantee that
451 having an input line of the form 'x.y', where access to attribute
455 having an input line of the form 'x.y', where access to attribute
452 'y' has side effects, doesn't trigger the side effect TWICE. It
456 'y' has side effects, doesn't trigger the side effect TWICE. It
453 is important to note that, with autocall on, these side effects
457 is important to note that, with autocall on, these side effects
454 can still happen.
458 can still happen.
455 (ipsystem): new builtin, to complete the ip{magic/alias/system}
459 (ipsystem): new builtin, to complete the ip{magic/alias/system}
456 trio. IPython offers these three kinds of special calls which are
460 trio. IPython offers these three kinds of special calls which are
457 not python code, and it's a good thing to have their call method
461 not python code, and it's a good thing to have their call method
458 be accessible as pure python functions (not just special syntax at
462 be accessible as pure python functions (not just special syntax at
459 the command line). It gives us a better internal implementation
463 the command line). It gives us a better internal implementation
460 structure, as well as exposing these for user scripting more
464 structure, as well as exposing these for user scripting more
461 cleanly.
465 cleanly.
462
466
463 * IPython/macro.py (Macro.__init__): moved macros to a standalone
467 * IPython/macro.py (Macro.__init__): moved macros to a standalone
464 file. Now that they'll be more likely to be used with the
468 file. Now that they'll be more likely to be used with the
465 persistance system (%store), I want to make sure their module path
469 persistance system (%store), I want to make sure their module path
466 doesn't change in the future, so that we don't break things for
470 doesn't change in the future, so that we don't break things for
467 users' persisted data.
471 users' persisted data.
468
472
469 * IPython/iplib.py (autoindent_update): move indentation
473 * IPython/iplib.py (autoindent_update): move indentation
470 management into the _text_ processing loop, not the keyboard
474 management into the _text_ processing loop, not the keyboard
471 interactive one. This is necessary to correctly process non-typed
475 interactive one. This is necessary to correctly process non-typed
472 multiline input (such as macros).
476 multiline input (such as macros).
473
477
474 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
478 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
475 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
479 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
476 which was producing problems in the resulting manual.
480 which was producing problems in the resulting manual.
477 (magic_whos): improve reporting of instances (show their class,
481 (magic_whos): improve reporting of instances (show their class,
478 instead of simply printing 'instance' which isn't terribly
482 instead of simply printing 'instance' which isn't terribly
479 informative).
483 informative).
480
484
481 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
485 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
482 (minor mods) to support network shares under win32.
486 (minor mods) to support network shares under win32.
483
487
484 * IPython/winconsole.py (get_console_size): add new winconsole
488 * IPython/winconsole.py (get_console_size): add new winconsole
485 module and fixes to page_dumb() to improve its behavior under
489 module and fixes to page_dumb() to improve its behavior under
486 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
490 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
487
491
488 * IPython/Magic.py (Macro): simplified Macro class to just
492 * IPython/Magic.py (Macro): simplified Macro class to just
489 subclass list. We've had only 2.2 compatibility for a very long
493 subclass list. We've had only 2.2 compatibility for a very long
490 time, yet I was still avoiding subclassing the builtin types. No
494 time, yet I was still avoiding subclassing the builtin types. No
491 more (I'm also starting to use properties, though I won't shift to
495 more (I'm also starting to use properties, though I won't shift to
492 2.3-specific features quite yet).
496 2.3-specific features quite yet).
493 (magic_store): added Ville's patch for lightweight variable
497 (magic_store): added Ville's patch for lightweight variable
494 persistence, after a request on the user list by Matt Wilkie
498 persistence, after a request on the user list by Matt Wilkie
495 <maphew-AT-gmail.com>. The new %store magic's docstring has full
499 <maphew-AT-gmail.com>. The new %store magic's docstring has full
496 details.
500 details.
497
501
498 * IPython/iplib.py (InteractiveShell.post_config_initialization):
502 * IPython/iplib.py (InteractiveShell.post_config_initialization):
499 changed the default logfile name from 'ipython.log' to
503 changed the default logfile name from 'ipython.log' to
500 'ipython_log.py'. These logs are real python files, and now that
504 'ipython_log.py'. These logs are real python files, and now that
501 we have much better multiline support, people are more likely to
505 we have much better multiline support, people are more likely to
502 want to use them as such. Might as well name them correctly.
506 want to use them as such. Might as well name them correctly.
503
507
504 * IPython/Magic.py: substantial cleanup. While we can't stop
508 * IPython/Magic.py: substantial cleanup. While we can't stop
505 using magics as mixins, due to the existing customizations 'out
509 using magics as mixins, due to the existing customizations 'out
506 there' which rely on the mixin naming conventions, at least I
510 there' which rely on the mixin naming conventions, at least I
507 cleaned out all cross-class name usage. So once we are OK with
511 cleaned out all cross-class name usage. So once we are OK with
508 breaking compatibility, the two systems can be separated.
512 breaking compatibility, the two systems can be separated.
509
513
510 * IPython/Logger.py: major cleanup. This one is NOT a mixin
514 * IPython/Logger.py: major cleanup. This one is NOT a mixin
511 anymore, and the class is a fair bit less hideous as well. New
515 anymore, and the class is a fair bit less hideous as well. New
512 features were also introduced: timestamping of input, and logging
516 features were also introduced: timestamping of input, and logging
513 of output results. These are user-visible with the -t and -o
517 of output results. These are user-visible with the -t and -o
514 options to %logstart. Closes
518 options to %logstart. Closes
515 http://www.scipy.net/roundup/ipython/issue11 and a request by
519 http://www.scipy.net/roundup/ipython/issue11 and a request by
516 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
520 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
517
521
518 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
522 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
519
523
520 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
524 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
521 better hadnle backslashes in paths. See the thread 'More Windows
525 better hadnle backslashes in paths. See the thread 'More Windows
522 questions part 2 - \/ characters revisited' on the iypthon user
526 questions part 2 - \/ characters revisited' on the iypthon user
523 list:
527 list:
524 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
528 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
525
529
526 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
530 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
527
531
528 (InteractiveShell.__init__): change threaded shells to not use the
532 (InteractiveShell.__init__): change threaded shells to not use the
529 ipython crash handler. This was causing more problems than not,
533 ipython crash handler. This was causing more problems than not,
530 as exceptions in the main thread (GUI code, typically) would
534 as exceptions in the main thread (GUI code, typically) would
531 always show up as a 'crash', when they really weren't.
535 always show up as a 'crash', when they really weren't.
532
536
533 The colors and exception mode commands (%colors/%xmode) have been
537 The colors and exception mode commands (%colors/%xmode) have been
534 synchronized to also take this into account, so users can get
538 synchronized to also take this into account, so users can get
535 verbose exceptions for their threaded code as well. I also added
539 verbose exceptions for their threaded code as well. I also added
536 support for activating pdb inside this exception handler as well,
540 support for activating pdb inside this exception handler as well,
537 so now GUI authors can use IPython's enhanced pdb at runtime.
541 so now GUI authors can use IPython's enhanced pdb at runtime.
538
542
539 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
543 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
540 true by default, and add it to the shipped ipythonrc file. Since
544 true by default, and add it to the shipped ipythonrc file. Since
541 this asks the user before proceeding, I think it's OK to make it
545 this asks the user before proceeding, I think it's OK to make it
542 true by default.
546 true by default.
543
547
544 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
548 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
545 of the previous special-casing of input in the eval loop. I think
549 of the previous special-casing of input in the eval loop. I think
546 this is cleaner, as they really are commands and shouldn't have
550 this is cleaner, as they really are commands and shouldn't have
547 a special role in the middle of the core code.
551 a special role in the middle of the core code.
548
552
549 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
553 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
550
554
551 * IPython/iplib.py (edit_syntax_error): added support for
555 * IPython/iplib.py (edit_syntax_error): added support for
552 automatically reopening the editor if the file had a syntax error
556 automatically reopening the editor if the file had a syntax error
553 in it. Thanks to scottt who provided the patch at:
557 in it. Thanks to scottt who provided the patch at:
554 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
558 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
555 version committed).
559 version committed).
556
560
557 * IPython/iplib.py (handle_normal): add suport for multi-line
561 * IPython/iplib.py (handle_normal): add suport for multi-line
558 input with emtpy lines. This fixes
562 input with emtpy lines. This fixes
559 http://www.scipy.net/roundup/ipython/issue43 and a similar
563 http://www.scipy.net/roundup/ipython/issue43 and a similar
560 discussion on the user list.
564 discussion on the user list.
561
565
562 WARNING: a behavior change is necessarily introduced to support
566 WARNING: a behavior change is necessarily introduced to support
563 blank lines: now a single blank line with whitespace does NOT
567 blank lines: now a single blank line with whitespace does NOT
564 break the input loop, which means that when autoindent is on, by
568 break the input loop, which means that when autoindent is on, by
565 default hitting return on the next (indented) line does NOT exit.
569 default hitting return on the next (indented) line does NOT exit.
566
570
567 Instead, to exit a multiline input you can either have:
571 Instead, to exit a multiline input you can either have:
568
572
569 - TWO whitespace lines (just hit return again), or
573 - TWO whitespace lines (just hit return again), or
570 - a single whitespace line of a different length than provided
574 - a single whitespace line of a different length than provided
571 by the autoindent (add or remove a space).
575 by the autoindent (add or remove a space).
572
576
573 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
577 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
574 module to better organize all readline-related functionality.
578 module to better organize all readline-related functionality.
575 I've deleted FlexCompleter and put all completion clases here.
579 I've deleted FlexCompleter and put all completion clases here.
576
580
577 * IPython/iplib.py (raw_input): improve indentation management.
581 * IPython/iplib.py (raw_input): improve indentation management.
578 It is now possible to paste indented code with autoindent on, and
582 It is now possible to paste indented code with autoindent on, and
579 the code is interpreted correctly (though it still looks bad on
583 the code is interpreted correctly (though it still looks bad on
580 screen, due to the line-oriented nature of ipython).
584 screen, due to the line-oriented nature of ipython).
581 (MagicCompleter.complete): change behavior so that a TAB key on an
585 (MagicCompleter.complete): change behavior so that a TAB key on an
582 otherwise empty line actually inserts a tab, instead of completing
586 otherwise empty line actually inserts a tab, instead of completing
583 on the entire global namespace. This makes it easier to use the
587 on the entire global namespace. This makes it easier to use the
584 TAB key for indentation. After a request by Hans Meine
588 TAB key for indentation. After a request by Hans Meine
585 <hans_meine-AT-gmx.net>
589 <hans_meine-AT-gmx.net>
586 (_prefilter): add support so that typing plain 'exit' or 'quit'
590 (_prefilter): add support so that typing plain 'exit' or 'quit'
587 does a sensible thing. Originally I tried to deviate as little as
591 does a sensible thing. Originally I tried to deviate as little as
588 possible from the default python behavior, but even that one may
592 possible from the default python behavior, but even that one may
589 change in this direction (thread on python-dev to that effect).
593 change in this direction (thread on python-dev to that effect).
590 Regardless, ipython should do the right thing even if CPython's
594 Regardless, ipython should do the right thing even if CPython's
591 '>>>' prompt doesn't.
595 '>>>' prompt doesn't.
592 (InteractiveShell): removed subclassing code.InteractiveConsole
596 (InteractiveShell): removed subclassing code.InteractiveConsole
593 class. By now we'd overridden just about all of its methods: I've
597 class. By now we'd overridden just about all of its methods: I've
594 copied the remaining two over, and now ipython is a standalone
598 copied the remaining two over, and now ipython is a standalone
595 class. This will provide a clearer picture for the chainsaw
599 class. This will provide a clearer picture for the chainsaw
596 branch refactoring.
600 branch refactoring.
597
601
598 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
602 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
599
603
600 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
604 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
601 failures for objects which break when dir() is called on them.
605 failures for objects which break when dir() is called on them.
602
606
603 * IPython/FlexCompleter.py (Completer.__init__): Added support for
607 * IPython/FlexCompleter.py (Completer.__init__): Added support for
604 distinct local and global namespaces in the completer API. This
608 distinct local and global namespaces in the completer API. This
605 change allows us top properly handle completion with distinct
609 change allows us top properly handle completion with distinct
606 scopes, including in embedded instances (this had never really
610 scopes, including in embedded instances (this had never really
607 worked correctly).
611 worked correctly).
608
612
609 Note: this introduces a change in the constructor for
613 Note: this introduces a change in the constructor for
610 MagicCompleter, as a new global_namespace parameter is now the
614 MagicCompleter, as a new global_namespace parameter is now the
611 second argument (the others were bumped one position).
615 second argument (the others were bumped one position).
612
616
613 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
617 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
614
618
615 * IPython/iplib.py (embed_mainloop): fix tab-completion in
619 * IPython/iplib.py (embed_mainloop): fix tab-completion in
616 embedded instances (which can be done now thanks to Vivian's
620 embedded instances (which can be done now thanks to Vivian's
617 frame-handling fixes for pdb).
621 frame-handling fixes for pdb).
618 (InteractiveShell.__init__): Fix namespace handling problem in
622 (InteractiveShell.__init__): Fix namespace handling problem in
619 embedded instances. We were overwriting __main__ unconditionally,
623 embedded instances. We were overwriting __main__ unconditionally,
620 and this should only be done for 'full' (non-embedded) IPython;
624 and this should only be done for 'full' (non-embedded) IPython;
621 embedded instances must respect the caller's __main__. Thanks to
625 embedded instances must respect the caller's __main__. Thanks to
622 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
626 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
623
627
624 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
628 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
625
629
626 * setup.py: added download_url to setup(). This registers the
630 * setup.py: added download_url to setup(). This registers the
627 download address at PyPI, which is not only useful to humans
631 download address at PyPI, which is not only useful to humans
628 browsing the site, but is also picked up by setuptools (the Eggs
632 browsing the site, but is also picked up by setuptools (the Eggs
629 machinery). Thanks to Ville and R. Kern for the info/discussion
633 machinery). Thanks to Ville and R. Kern for the info/discussion
630 on this.
634 on this.
631
635
632 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
636 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
633
637
634 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
638 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
635 This brings a lot of nice functionality to the pdb mode, which now
639 This brings a lot of nice functionality to the pdb mode, which now
636 has tab-completion, syntax highlighting, and better stack handling
640 has tab-completion, syntax highlighting, and better stack handling
637 than before. Many thanks to Vivian De Smedt
641 than before. Many thanks to Vivian De Smedt
638 <vivian-AT-vdesmedt.com> for the original patches.
642 <vivian-AT-vdesmedt.com> for the original patches.
639
643
640 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
644 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
641
645
642 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
646 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
643 sequence to consistently accept the banner argument. The
647 sequence to consistently accept the banner argument. The
644 inconsistency was tripping SAGE, thanks to Gary Zablackis
648 inconsistency was tripping SAGE, thanks to Gary Zablackis
645 <gzabl-AT-yahoo.com> for the report.
649 <gzabl-AT-yahoo.com> for the report.
646
650
647 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
651 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
648
652
649 * IPython/iplib.py (InteractiveShell.post_config_initialization):
653 * IPython/iplib.py (InteractiveShell.post_config_initialization):
650 Fix bug where a naked 'alias' call in the ipythonrc file would
654 Fix bug where a naked 'alias' call in the ipythonrc file would
651 cause a crash. Bug reported by Jorgen Stenarson.
655 cause a crash. Bug reported by Jorgen Stenarson.
652
656
653 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
657 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
654
658
655 * IPython/ipmaker.py (make_IPython): cleanups which should improve
659 * IPython/ipmaker.py (make_IPython): cleanups which should improve
656 startup time.
660 startup time.
657
661
658 * IPython/iplib.py (runcode): my globals 'fix' for embedded
662 * IPython/iplib.py (runcode): my globals 'fix' for embedded
659 instances had introduced a bug with globals in normal code. Now
663 instances had introduced a bug with globals in normal code. Now
660 it's working in all cases.
664 it's working in all cases.
661
665
662 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
666 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
663 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
667 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
664 has been introduced to set the default case sensitivity of the
668 has been introduced to set the default case sensitivity of the
665 searches. Users can still select either mode at runtime on a
669 searches. Users can still select either mode at runtime on a
666 per-search basis.
670 per-search basis.
667
671
668 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
672 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
669
673
670 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
674 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
671 attributes in wildcard searches for subclasses. Modified version
675 attributes in wildcard searches for subclasses. Modified version
672 of a patch by Jorgen.
676 of a patch by Jorgen.
673
677
674 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
678 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
675
679
676 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
680 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
677 embedded instances. I added a user_global_ns attribute to the
681 embedded instances. I added a user_global_ns attribute to the
678 InteractiveShell class to handle this.
682 InteractiveShell class to handle this.
679
683
680 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
684 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
681
685
682 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
686 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
683 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
687 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
684 (reported under win32, but may happen also in other platforms).
688 (reported under win32, but may happen also in other platforms).
685 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
689 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
686
690
687 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
691 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
688
692
689 * IPython/Magic.py (magic_psearch): new support for wildcard
693 * IPython/Magic.py (magic_psearch): new support for wildcard
690 patterns. Now, typing ?a*b will list all names which begin with a
694 patterns. Now, typing ?a*b will list all names which begin with a
691 and end in b, for example. The %psearch magic has full
695 and end in b, for example. The %psearch magic has full
692 docstrings. Many thanks to JΓΆrgen Stenarson
696 docstrings. Many thanks to JΓΆrgen Stenarson
693 <jorgen.stenarson-AT-bostream.nu>, author of the patches
697 <jorgen.stenarson-AT-bostream.nu>, author of the patches
694 implementing this functionality.
698 implementing this functionality.
695
699
696 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
700 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
697
701
698 * Manual: fixed long-standing annoyance of double-dashes (as in
702 * Manual: fixed long-standing annoyance of double-dashes (as in
699 --prefix=~, for example) being stripped in the HTML version. This
703 --prefix=~, for example) being stripped in the HTML version. This
700 is a latex2html bug, but a workaround was provided. Many thanks
704 is a latex2html bug, but a workaround was provided. Many thanks
701 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
705 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
702 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
706 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
703 rolling. This seemingly small issue had tripped a number of users
707 rolling. This seemingly small issue had tripped a number of users
704 when first installing, so I'm glad to see it gone.
708 when first installing, so I'm glad to see it gone.
705
709
706 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
710 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
707
711
708 * IPython/Extensions/numeric_formats.py: fix missing import,
712 * IPython/Extensions/numeric_formats.py: fix missing import,
709 reported by Stephen Walton.
713 reported by Stephen Walton.
710
714
711 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
715 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
712
716
713 * IPython/demo.py: finish demo module, fully documented now.
717 * IPython/demo.py: finish demo module, fully documented now.
714
718
715 * IPython/genutils.py (file_read): simple little utility to read a
719 * IPython/genutils.py (file_read): simple little utility to read a
716 file and ensure it's closed afterwards.
720 file and ensure it's closed afterwards.
717
721
718 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
722 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
719
723
720 * IPython/demo.py (Demo.__init__): added support for individually
724 * IPython/demo.py (Demo.__init__): added support for individually
721 tagging blocks for automatic execution.
725 tagging blocks for automatic execution.
722
726
723 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
727 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
724 syntax-highlighted python sources, requested by John.
728 syntax-highlighted python sources, requested by John.
725
729
726 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
730 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
727
731
728 * IPython/demo.py (Demo.again): fix bug where again() blocks after
732 * IPython/demo.py (Demo.again): fix bug where again() blocks after
729 finishing.
733 finishing.
730
734
731 * IPython/genutils.py (shlex_split): moved from Magic to here,
735 * IPython/genutils.py (shlex_split): moved from Magic to here,
732 where all 2.2 compatibility stuff lives. I needed it for demo.py.
736 where all 2.2 compatibility stuff lives. I needed it for demo.py.
733
737
734 * IPython/demo.py (Demo.__init__): added support for silent
738 * IPython/demo.py (Demo.__init__): added support for silent
735 blocks, improved marks as regexps, docstrings written.
739 blocks, improved marks as regexps, docstrings written.
736 (Demo.__init__): better docstring, added support for sys.argv.
740 (Demo.__init__): better docstring, added support for sys.argv.
737
741
738 * IPython/genutils.py (marquee): little utility used by the demo
742 * IPython/genutils.py (marquee): little utility used by the demo
739 code, handy in general.
743 code, handy in general.
740
744
741 * IPython/demo.py (Demo.__init__): new class for interactive
745 * IPython/demo.py (Demo.__init__): new class for interactive
742 demos. Not documented yet, I just wrote it in a hurry for
746 demos. Not documented yet, I just wrote it in a hurry for
743 scipy'05. Will docstring later.
747 scipy'05. Will docstring later.
744
748
745 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
749 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
746
750
747 * IPython/Shell.py (sigint_handler): Drastic simplification which
751 * IPython/Shell.py (sigint_handler): Drastic simplification which
748 also seems to make Ctrl-C work correctly across threads! This is
752 also seems to make Ctrl-C work correctly across threads! This is
749 so simple, that I can't beleive I'd missed it before. Needs more
753 so simple, that I can't beleive I'd missed it before. Needs more
750 testing, though.
754 testing, though.
751 (KBINT): Never mind, revert changes. I'm sure I'd tried something
755 (KBINT): Never mind, revert changes. I'm sure I'd tried something
752 like this before...
756 like this before...
753
757
754 * IPython/genutils.py (get_home_dir): add protection against
758 * IPython/genutils.py (get_home_dir): add protection against
755 non-dirs in win32 registry.
759 non-dirs in win32 registry.
756
760
757 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
761 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
758 bug where dict was mutated while iterating (pysh crash).
762 bug where dict was mutated while iterating (pysh crash).
759
763
760 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
764 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
761
765
762 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
766 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
763 spurious newlines added by this routine. After a report by
767 spurious newlines added by this routine. After a report by
764 F. Mantegazza.
768 F. Mantegazza.
765
769
766 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
770 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
767
771
768 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
772 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
769 calls. These were a leftover from the GTK 1.x days, and can cause
773 calls. These were a leftover from the GTK 1.x days, and can cause
770 problems in certain cases (after a report by John Hunter).
774 problems in certain cases (after a report by John Hunter).
771
775
772 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
776 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
773 os.getcwd() fails at init time. Thanks to patch from David Remahl
777 os.getcwd() fails at init time. Thanks to patch from David Remahl
774 <chmod007-AT-mac.com>.
778 <chmod007-AT-mac.com>.
775 (InteractiveShell.__init__): prevent certain special magics from
779 (InteractiveShell.__init__): prevent certain special magics from
776 being shadowed by aliases. Closes
780 being shadowed by aliases. Closes
777 http://www.scipy.net/roundup/ipython/issue41.
781 http://www.scipy.net/roundup/ipython/issue41.
778
782
779 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
783 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
780
784
781 * IPython/iplib.py (InteractiveShell.complete): Added new
785 * IPython/iplib.py (InteractiveShell.complete): Added new
782 top-level completion method to expose the completion mechanism
786 top-level completion method to expose the completion mechanism
783 beyond readline-based environments.
787 beyond readline-based environments.
784
788
785 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
789 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
786
790
787 * tools/ipsvnc (svnversion): fix svnversion capture.
791 * tools/ipsvnc (svnversion): fix svnversion capture.
788
792
789 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
793 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
790 attribute to self, which was missing. Before, it was set by a
794 attribute to self, which was missing. Before, it was set by a
791 routine which in certain cases wasn't being called, so the
795 routine which in certain cases wasn't being called, so the
792 instance could end up missing the attribute. This caused a crash.
796 instance could end up missing the attribute. This caused a crash.
793 Closes http://www.scipy.net/roundup/ipython/issue40.
797 Closes http://www.scipy.net/roundup/ipython/issue40.
794
798
795 2005-08-16 Fernando Perez <fperez@colorado.edu>
799 2005-08-16 Fernando Perez <fperez@colorado.edu>
796
800
797 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
801 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
798 contains non-string attribute. Closes
802 contains non-string attribute. Closes
799 http://www.scipy.net/roundup/ipython/issue38.
803 http://www.scipy.net/roundup/ipython/issue38.
800
804
801 2005-08-14 Fernando Perez <fperez@colorado.edu>
805 2005-08-14 Fernando Perez <fperez@colorado.edu>
802
806
803 * tools/ipsvnc: Minor improvements, to add changeset info.
807 * tools/ipsvnc: Minor improvements, to add changeset info.
804
808
805 2005-08-12 Fernando Perez <fperez@colorado.edu>
809 2005-08-12 Fernando Perez <fperez@colorado.edu>
806
810
807 * IPython/iplib.py (runsource): remove self.code_to_run_src
811 * IPython/iplib.py (runsource): remove self.code_to_run_src
808 attribute. I realized this is nothing more than
812 attribute. I realized this is nothing more than
809 '\n'.join(self.buffer), and having the same data in two different
813 '\n'.join(self.buffer), and having the same data in two different
810 places is just asking for synchronization bugs. This may impact
814 places is just asking for synchronization bugs. This may impact
811 people who have custom exception handlers, so I need to warn
815 people who have custom exception handlers, so I need to warn
812 ipython-dev about it (F. Mantegazza may use them).
816 ipython-dev about it (F. Mantegazza may use them).
813
817
814 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
818 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
815
819
816 * IPython/genutils.py: fix 2.2 compatibility (generators)
820 * IPython/genutils.py: fix 2.2 compatibility (generators)
817
821
818 2005-07-18 Fernando Perez <fperez@colorado.edu>
822 2005-07-18 Fernando Perez <fperez@colorado.edu>
819
823
820 * IPython/genutils.py (get_home_dir): fix to help users with
824 * IPython/genutils.py (get_home_dir): fix to help users with
821 invalid $HOME under win32.
825 invalid $HOME under win32.
822
826
823 2005-07-17 Fernando Perez <fperez@colorado.edu>
827 2005-07-17 Fernando Perez <fperez@colorado.edu>
824
828
825 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
829 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
826 some old hacks and clean up a bit other routines; code should be
830 some old hacks and clean up a bit other routines; code should be
827 simpler and a bit faster.
831 simpler and a bit faster.
828
832
829 * IPython/iplib.py (interact): removed some last-resort attempts
833 * IPython/iplib.py (interact): removed some last-resort attempts
830 to survive broken stdout/stderr. That code was only making it
834 to survive broken stdout/stderr. That code was only making it
831 harder to abstract out the i/o (necessary for gui integration),
835 harder to abstract out the i/o (necessary for gui integration),
832 and the crashes it could prevent were extremely rare in practice
836 and the crashes it could prevent were extremely rare in practice
833 (besides being fully user-induced in a pretty violent manner).
837 (besides being fully user-induced in a pretty violent manner).
834
838
835 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
839 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
836 Nothing major yet, but the code is simpler to read; this should
840 Nothing major yet, but the code is simpler to read; this should
837 make it easier to do more serious modifications in the future.
841 make it easier to do more serious modifications in the future.
838
842
839 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
843 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
840 which broke in .15 (thanks to a report by Ville).
844 which broke in .15 (thanks to a report by Ville).
841
845
842 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
846 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
843 be quite correct, I know next to nothing about unicode). This
847 be quite correct, I know next to nothing about unicode). This
844 will allow unicode strings to be used in prompts, amongst other
848 will allow unicode strings to be used in prompts, amongst other
845 cases. It also will prevent ipython from crashing when unicode
849 cases. It also will prevent ipython from crashing when unicode
846 shows up unexpectedly in many places. If ascii encoding fails, we
850 shows up unexpectedly in many places. If ascii encoding fails, we
847 assume utf_8. Currently the encoding is not a user-visible
851 assume utf_8. Currently the encoding is not a user-visible
848 setting, though it could be made so if there is demand for it.
852 setting, though it could be made so if there is demand for it.
849
853
850 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
854 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
851
855
852 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
856 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
853
857
854 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
858 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
855
859
856 * IPython/genutils.py: Add 2.2 compatibility here, so all other
860 * IPython/genutils.py: Add 2.2 compatibility here, so all other
857 code can work transparently for 2.2/2.3.
861 code can work transparently for 2.2/2.3.
858
862
859 2005-07-16 Fernando Perez <fperez@colorado.edu>
863 2005-07-16 Fernando Perez <fperez@colorado.edu>
860
864
861 * IPython/ultraTB.py (ExceptionColors): Make a global variable
865 * IPython/ultraTB.py (ExceptionColors): Make a global variable
862 out of the color scheme table used for coloring exception
866 out of the color scheme table used for coloring exception
863 tracebacks. This allows user code to add new schemes at runtime.
867 tracebacks. This allows user code to add new schemes at runtime.
864 This is a minimally modified version of the patch at
868 This is a minimally modified version of the patch at
865 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
869 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
866 for the contribution.
870 for the contribution.
867
871
868 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
872 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
869 slightly modified version of the patch in
873 slightly modified version of the patch in
870 http://www.scipy.net/roundup/ipython/issue34, which also allows me
874 http://www.scipy.net/roundup/ipython/issue34, which also allows me
871 to remove the previous try/except solution (which was costlier).
875 to remove the previous try/except solution (which was costlier).
872 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
876 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
873
877
874 2005-06-08 Fernando Perez <fperez@colorado.edu>
878 2005-06-08 Fernando Perez <fperez@colorado.edu>
875
879
876 * IPython/iplib.py (write/write_err): Add methods to abstract all
880 * IPython/iplib.py (write/write_err): Add methods to abstract all
877 I/O a bit more.
881 I/O a bit more.
878
882
879 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
883 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
880 warning, reported by Aric Hagberg, fix by JD Hunter.
884 warning, reported by Aric Hagberg, fix by JD Hunter.
881
885
882 2005-06-02 *** Released version 0.6.15
886 2005-06-02 *** Released version 0.6.15
883
887
884 2005-06-01 Fernando Perez <fperez@colorado.edu>
888 2005-06-01 Fernando Perez <fperez@colorado.edu>
885
889
886 * IPython/iplib.py (MagicCompleter.file_matches): Fix
890 * IPython/iplib.py (MagicCompleter.file_matches): Fix
887 tab-completion of filenames within open-quoted strings. Note that
891 tab-completion of filenames within open-quoted strings. Note that
888 this requires that in ~/.ipython/ipythonrc, users change the
892 this requires that in ~/.ipython/ipythonrc, users change the
889 readline delimiters configuration to read:
893 readline delimiters configuration to read:
890
894
891 readline_remove_delims -/~
895 readline_remove_delims -/~
892
896
893
897
894 2005-05-31 *** Released version 0.6.14
898 2005-05-31 *** Released version 0.6.14
895
899
896 2005-05-29 Fernando Perez <fperez@colorado.edu>
900 2005-05-29 Fernando Perez <fperez@colorado.edu>
897
901
898 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
902 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
899 with files not on the filesystem. Reported by Eliyahu Sandler
903 with files not on the filesystem. Reported by Eliyahu Sandler
900 <eli@gondolin.net>
904 <eli@gondolin.net>
901
905
902 2005-05-22 Fernando Perez <fperez@colorado.edu>
906 2005-05-22 Fernando Perez <fperez@colorado.edu>
903
907
904 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
908 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
905 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
909 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
906
910
907 2005-05-19 Fernando Perez <fperez@colorado.edu>
911 2005-05-19 Fernando Perez <fperez@colorado.edu>
908
912
909 * IPython/iplib.py (safe_execfile): close a file which could be
913 * IPython/iplib.py (safe_execfile): close a file which could be
910 left open (causing problems in win32, which locks open files).
914 left open (causing problems in win32, which locks open files).
911 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
915 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
912
916
913 2005-05-18 Fernando Perez <fperez@colorado.edu>
917 2005-05-18 Fernando Perez <fperez@colorado.edu>
914
918
915 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
919 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
916 keyword arguments correctly to safe_execfile().
920 keyword arguments correctly to safe_execfile().
917
921
918 2005-05-13 Fernando Perez <fperez@colorado.edu>
922 2005-05-13 Fernando Perez <fperez@colorado.edu>
919
923
920 * ipython.1: Added info about Qt to manpage, and threads warning
924 * ipython.1: Added info about Qt to manpage, and threads warning
921 to usage page (invoked with --help).
925 to usage page (invoked with --help).
922
926
923 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
927 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
924 new matcher (it goes at the end of the priority list) to do
928 new matcher (it goes at the end of the priority list) to do
925 tab-completion on named function arguments. Submitted by George
929 tab-completion on named function arguments. Submitted by George
926 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
930 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
927 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
931 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
928 for more details.
932 for more details.
929
933
930 * IPython/Magic.py (magic_run): Added new -e flag to ignore
934 * IPython/Magic.py (magic_run): Added new -e flag to ignore
931 SystemExit exceptions in the script being run. Thanks to a report
935 SystemExit exceptions in the script being run. Thanks to a report
932 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
936 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
933 producing very annoying behavior when running unit tests.
937 producing very annoying behavior when running unit tests.
934
938
935 2005-05-12 Fernando Perez <fperez@colorado.edu>
939 2005-05-12 Fernando Perez <fperez@colorado.edu>
936
940
937 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
941 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
938 which I'd broken (again) due to a changed regexp. In the process,
942 which I'd broken (again) due to a changed regexp. In the process,
939 added ';' as an escape to auto-quote the whole line without
943 added ';' as an escape to auto-quote the whole line without
940 splitting its arguments. Thanks to a report by Jerry McRae
944 splitting its arguments. Thanks to a report by Jerry McRae
941 <qrs0xyc02-AT-sneakemail.com>.
945 <qrs0xyc02-AT-sneakemail.com>.
942
946
943 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
947 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
944 possible crashes caused by a TokenError. Reported by Ed Schofield
948 possible crashes caused by a TokenError. Reported by Ed Schofield
945 <schofield-AT-ftw.at>.
949 <schofield-AT-ftw.at>.
946
950
947 2005-05-06 Fernando Perez <fperez@colorado.edu>
951 2005-05-06 Fernando Perez <fperez@colorado.edu>
948
952
949 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
953 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
950
954
951 2005-04-29 Fernando Perez <fperez@colorado.edu>
955 2005-04-29 Fernando Perez <fperez@colorado.edu>
952
956
953 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
957 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
954 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
958 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
955 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
959 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
956 which provides support for Qt interactive usage (similar to the
960 which provides support for Qt interactive usage (similar to the
957 existing one for WX and GTK). This had been often requested.
961 existing one for WX and GTK). This had been often requested.
958
962
959 2005-04-14 *** Released version 0.6.13
963 2005-04-14 *** Released version 0.6.13
960
964
961 2005-04-08 Fernando Perez <fperez@colorado.edu>
965 2005-04-08 Fernando Perez <fperez@colorado.edu>
962
966
963 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
967 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
964 from _ofind, which gets called on almost every input line. Now,
968 from _ofind, which gets called on almost every input line. Now,
965 we only try to get docstrings if they are actually going to be
969 we only try to get docstrings if they are actually going to be
966 used (the overhead of fetching unnecessary docstrings can be
970 used (the overhead of fetching unnecessary docstrings can be
967 noticeable for certain objects, such as Pyro proxies).
971 noticeable for certain objects, such as Pyro proxies).
968
972
969 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
973 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
970 for completers. For some reason I had been passing them the state
974 for completers. For some reason I had been passing them the state
971 variable, which completers never actually need, and was in
975 variable, which completers never actually need, and was in
972 conflict with the rlcompleter API. Custom completers ONLY need to
976 conflict with the rlcompleter API. Custom completers ONLY need to
973 take the text parameter.
977 take the text parameter.
974
978
975 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
979 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
976 work correctly in pysh. I've also moved all the logic which used
980 work correctly in pysh. I've also moved all the logic which used
977 to be in pysh.py here, which will prevent problems with future
981 to be in pysh.py here, which will prevent problems with future
978 upgrades. However, this time I must warn users to update their
982 upgrades. However, this time I must warn users to update their
979 pysh profile to include the line
983 pysh profile to include the line
980
984
981 import_all IPython.Extensions.InterpreterExec
985 import_all IPython.Extensions.InterpreterExec
982
986
983 because otherwise things won't work for them. They MUST also
987 because otherwise things won't work for them. They MUST also
984 delete pysh.py and the line
988 delete pysh.py and the line
985
989
986 execfile pysh.py
990 execfile pysh.py
987
991
988 from their ipythonrc-pysh.
992 from their ipythonrc-pysh.
989
993
990 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
994 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
991 robust in the face of objects whose dir() returns non-strings
995 robust in the face of objects whose dir() returns non-strings
992 (which it shouldn't, but some broken libs like ITK do). Thanks to
996 (which it shouldn't, but some broken libs like ITK do). Thanks to
993 a patch by John Hunter (implemented differently, though). Also
997 a patch by John Hunter (implemented differently, though). Also
994 minor improvements by using .extend instead of + on lists.
998 minor improvements by using .extend instead of + on lists.
995
999
996 * pysh.py:
1000 * pysh.py:
997
1001
998 2005-04-06 Fernando Perez <fperez@colorado.edu>
1002 2005-04-06 Fernando Perez <fperez@colorado.edu>
999
1003
1000 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1004 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1001 by default, so that all users benefit from it. Those who don't
1005 by default, so that all users benefit from it. Those who don't
1002 want it can still turn it off.
1006 want it can still turn it off.
1003
1007
1004 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1008 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1005 config file, I'd forgotten about this, so users were getting it
1009 config file, I'd forgotten about this, so users were getting it
1006 off by default.
1010 off by default.
1007
1011
1008 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1012 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1009 consistency. Now magics can be called in multiline statements,
1013 consistency. Now magics can be called in multiline statements,
1010 and python variables can be expanded in magic calls via $var.
1014 and python variables can be expanded in magic calls via $var.
1011 This makes the magic system behave just like aliases or !system
1015 This makes the magic system behave just like aliases or !system
1012 calls.
1016 calls.
1013
1017
1014 2005-03-28 Fernando Perez <fperez@colorado.edu>
1018 2005-03-28 Fernando Perez <fperez@colorado.edu>
1015
1019
1016 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1020 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1017 expensive string additions for building command. Add support for
1021 expensive string additions for building command. Add support for
1018 trailing ';' when autocall is used.
1022 trailing ';' when autocall is used.
1019
1023
1020 2005-03-26 Fernando Perez <fperez@colorado.edu>
1024 2005-03-26 Fernando Perez <fperez@colorado.edu>
1021
1025
1022 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1026 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1023 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1027 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1024 ipython.el robust against prompts with any number of spaces
1028 ipython.el robust against prompts with any number of spaces
1025 (including 0) after the ':' character.
1029 (including 0) after the ':' character.
1026
1030
1027 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1031 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1028 continuation prompt, which misled users to think the line was
1032 continuation prompt, which misled users to think the line was
1029 already indented. Closes debian Bug#300847, reported to me by
1033 already indented. Closes debian Bug#300847, reported to me by
1030 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1034 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1031
1035
1032 2005-03-23 Fernando Perez <fperez@colorado.edu>
1036 2005-03-23 Fernando Perez <fperez@colorado.edu>
1033
1037
1034 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1038 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1035 properly aligned if they have embedded newlines.
1039 properly aligned if they have embedded newlines.
1036
1040
1037 * IPython/iplib.py (runlines): Add a public method to expose
1041 * IPython/iplib.py (runlines): Add a public method to expose
1038 IPython's code execution machinery, so that users can run strings
1042 IPython's code execution machinery, so that users can run strings
1039 as if they had been typed at the prompt interactively.
1043 as if they had been typed at the prompt interactively.
1040 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1044 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1041 methods which can call the system shell, but with python variable
1045 methods which can call the system shell, but with python variable
1042 expansion. The three such methods are: __IPYTHON__.system,
1046 expansion. The three such methods are: __IPYTHON__.system,
1043 .getoutput and .getoutputerror. These need to be documented in a
1047 .getoutput and .getoutputerror. These need to be documented in a
1044 'public API' section (to be written) of the manual.
1048 'public API' section (to be written) of the manual.
1045
1049
1046 2005-03-20 Fernando Perez <fperez@colorado.edu>
1050 2005-03-20 Fernando Perez <fperez@colorado.edu>
1047
1051
1048 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1052 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1049 for custom exception handling. This is quite powerful, and it
1053 for custom exception handling. This is quite powerful, and it
1050 allows for user-installable exception handlers which can trap
1054 allows for user-installable exception handlers which can trap
1051 custom exceptions at runtime and treat them separately from
1055 custom exceptions at runtime and treat them separately from
1052 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1056 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1053 Mantegazza <mantegazza-AT-ill.fr>.
1057 Mantegazza <mantegazza-AT-ill.fr>.
1054 (InteractiveShell.set_custom_completer): public API function to
1058 (InteractiveShell.set_custom_completer): public API function to
1055 add new completers at runtime.
1059 add new completers at runtime.
1056
1060
1057 2005-03-19 Fernando Perez <fperez@colorado.edu>
1061 2005-03-19 Fernando Perez <fperez@colorado.edu>
1058
1062
1059 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1063 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1060 allow objects which provide their docstrings via non-standard
1064 allow objects which provide their docstrings via non-standard
1061 mechanisms (like Pyro proxies) to still be inspected by ipython's
1065 mechanisms (like Pyro proxies) to still be inspected by ipython's
1062 ? system.
1066 ? system.
1063
1067
1064 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1068 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1065 automatic capture system. I tried quite hard to make it work
1069 automatic capture system. I tried quite hard to make it work
1066 reliably, and simply failed. I tried many combinations with the
1070 reliably, and simply failed. I tried many combinations with the
1067 subprocess module, but eventually nothing worked in all needed
1071 subprocess module, but eventually nothing worked in all needed
1068 cases (not blocking stdin for the child, duplicating stdout
1072 cases (not blocking stdin for the child, duplicating stdout
1069 without blocking, etc). The new %sc/%sx still do capture to these
1073 without blocking, etc). The new %sc/%sx still do capture to these
1070 magical list/string objects which make shell use much more
1074 magical list/string objects which make shell use much more
1071 conveninent, so not all is lost.
1075 conveninent, so not all is lost.
1072
1076
1073 XXX - FIX MANUAL for the change above!
1077 XXX - FIX MANUAL for the change above!
1074
1078
1075 (runsource): I copied code.py's runsource() into ipython to modify
1079 (runsource): I copied code.py's runsource() into ipython to modify
1076 it a bit. Now the code object and source to be executed are
1080 it a bit. Now the code object and source to be executed are
1077 stored in ipython. This makes this info accessible to third-party
1081 stored in ipython. This makes this info accessible to third-party
1078 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1082 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1079 Mantegazza <mantegazza-AT-ill.fr>.
1083 Mantegazza <mantegazza-AT-ill.fr>.
1080
1084
1081 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1085 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1082 history-search via readline (like C-p/C-n). I'd wanted this for a
1086 history-search via readline (like C-p/C-n). I'd wanted this for a
1083 long time, but only recently found out how to do it. For users
1087 long time, but only recently found out how to do it. For users
1084 who already have their ipythonrc files made and want this, just
1088 who already have their ipythonrc files made and want this, just
1085 add:
1089 add:
1086
1090
1087 readline_parse_and_bind "\e[A": history-search-backward
1091 readline_parse_and_bind "\e[A": history-search-backward
1088 readline_parse_and_bind "\e[B": history-search-forward
1092 readline_parse_and_bind "\e[B": history-search-forward
1089
1093
1090 2005-03-18 Fernando Perez <fperez@colorado.edu>
1094 2005-03-18 Fernando Perez <fperez@colorado.edu>
1091
1095
1092 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1096 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1093 LSString and SList classes which allow transparent conversions
1097 LSString and SList classes which allow transparent conversions
1094 between list mode and whitespace-separated string.
1098 between list mode and whitespace-separated string.
1095 (magic_r): Fix recursion problem in %r.
1099 (magic_r): Fix recursion problem in %r.
1096
1100
1097 * IPython/genutils.py (LSString): New class to be used for
1101 * IPython/genutils.py (LSString): New class to be used for
1098 automatic storage of the results of all alias/system calls in _o
1102 automatic storage of the results of all alias/system calls in _o
1099 and _e (stdout/err). These provide a .l/.list attribute which
1103 and _e (stdout/err). These provide a .l/.list attribute which
1100 does automatic splitting on newlines. This means that for most
1104 does automatic splitting on newlines. This means that for most
1101 uses, you'll never need to do capturing of output with %sc/%sx
1105 uses, you'll never need to do capturing of output with %sc/%sx
1102 anymore, since ipython keeps this always done for you. Note that
1106 anymore, since ipython keeps this always done for you. Note that
1103 only the LAST results are stored, the _o/e variables are
1107 only the LAST results are stored, the _o/e variables are
1104 overwritten on each call. If you need to save their contents
1108 overwritten on each call. If you need to save their contents
1105 further, simply bind them to any other name.
1109 further, simply bind them to any other name.
1106
1110
1107 2005-03-17 Fernando Perez <fperez@colorado.edu>
1111 2005-03-17 Fernando Perez <fperez@colorado.edu>
1108
1112
1109 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1113 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1110 prompt namespace handling.
1114 prompt namespace handling.
1111
1115
1112 2005-03-16 Fernando Perez <fperez@colorado.edu>
1116 2005-03-16 Fernando Perez <fperez@colorado.edu>
1113
1117
1114 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1118 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1115 classic prompts to be '>>> ' (final space was missing, and it
1119 classic prompts to be '>>> ' (final space was missing, and it
1116 trips the emacs python mode).
1120 trips the emacs python mode).
1117 (BasePrompt.__str__): Added safe support for dynamic prompt
1121 (BasePrompt.__str__): Added safe support for dynamic prompt
1118 strings. Now you can set your prompt string to be '$x', and the
1122 strings. Now you can set your prompt string to be '$x', and the
1119 value of x will be printed from your interactive namespace. The
1123 value of x will be printed from your interactive namespace. The
1120 interpolation syntax includes the full Itpl support, so
1124 interpolation syntax includes the full Itpl support, so
1121 ${foo()+x+bar()} is a valid prompt string now, and the function
1125 ${foo()+x+bar()} is a valid prompt string now, and the function
1122 calls will be made at runtime.
1126 calls will be made at runtime.
1123
1127
1124 2005-03-15 Fernando Perez <fperez@colorado.edu>
1128 2005-03-15 Fernando Perez <fperez@colorado.edu>
1125
1129
1126 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1130 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1127 avoid name clashes in pylab. %hist still works, it just forwards
1131 avoid name clashes in pylab. %hist still works, it just forwards
1128 the call to %history.
1132 the call to %history.
1129
1133
1130 2005-03-02 *** Released version 0.6.12
1134 2005-03-02 *** Released version 0.6.12
1131
1135
1132 2005-03-02 Fernando Perez <fperez@colorado.edu>
1136 2005-03-02 Fernando Perez <fperez@colorado.edu>
1133
1137
1134 * IPython/iplib.py (handle_magic): log magic calls properly as
1138 * IPython/iplib.py (handle_magic): log magic calls properly as
1135 ipmagic() function calls.
1139 ipmagic() function calls.
1136
1140
1137 * IPython/Magic.py (magic_time): Improved %time to support
1141 * IPython/Magic.py (magic_time): Improved %time to support
1138 statements and provide wall-clock as well as CPU time.
1142 statements and provide wall-clock as well as CPU time.
1139
1143
1140 2005-02-27 Fernando Perez <fperez@colorado.edu>
1144 2005-02-27 Fernando Perez <fperez@colorado.edu>
1141
1145
1142 * IPython/hooks.py: New hooks module, to expose user-modifiable
1146 * IPython/hooks.py: New hooks module, to expose user-modifiable
1143 IPython functionality in a clean manner. For now only the editor
1147 IPython functionality in a clean manner. For now only the editor
1144 hook is actually written, and other thigns which I intend to turn
1148 hook is actually written, and other thigns which I intend to turn
1145 into proper hooks aren't yet there. The display and prefilter
1149 into proper hooks aren't yet there. The display and prefilter
1146 stuff, for example, should be hooks. But at least now the
1150 stuff, for example, should be hooks. But at least now the
1147 framework is in place, and the rest can be moved here with more
1151 framework is in place, and the rest can be moved here with more
1148 time later. IPython had had a .hooks variable for a long time for
1152 time later. IPython had had a .hooks variable for a long time for
1149 this purpose, but I'd never actually used it for anything.
1153 this purpose, but I'd never actually used it for anything.
1150
1154
1151 2005-02-26 Fernando Perez <fperez@colorado.edu>
1155 2005-02-26 Fernando Perez <fperez@colorado.edu>
1152
1156
1153 * IPython/ipmaker.py (make_IPython): make the default ipython
1157 * IPython/ipmaker.py (make_IPython): make the default ipython
1154 directory be called _ipython under win32, to follow more the
1158 directory be called _ipython under win32, to follow more the
1155 naming peculiarities of that platform (where buggy software like
1159 naming peculiarities of that platform (where buggy software like
1156 Visual Sourcesafe breaks with .named directories). Reported by
1160 Visual Sourcesafe breaks with .named directories). Reported by
1157 Ville Vainio.
1161 Ville Vainio.
1158
1162
1159 2005-02-23 Fernando Perez <fperez@colorado.edu>
1163 2005-02-23 Fernando Perez <fperez@colorado.edu>
1160
1164
1161 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1165 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1162 auto_aliases for win32 which were causing problems. Users can
1166 auto_aliases for win32 which were causing problems. Users can
1163 define the ones they personally like.
1167 define the ones they personally like.
1164
1168
1165 2005-02-21 Fernando Perez <fperez@colorado.edu>
1169 2005-02-21 Fernando Perez <fperez@colorado.edu>
1166
1170
1167 * IPython/Magic.py (magic_time): new magic to time execution of
1171 * IPython/Magic.py (magic_time): new magic to time execution of
1168 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1172 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1169
1173
1170 2005-02-19 Fernando Perez <fperez@colorado.edu>
1174 2005-02-19 Fernando Perez <fperez@colorado.edu>
1171
1175
1172 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1176 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1173 into keys (for prompts, for example).
1177 into keys (for prompts, for example).
1174
1178
1175 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1179 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1176 prompts in case users want them. This introduces a small behavior
1180 prompts in case users want them. This introduces a small behavior
1177 change: ipython does not automatically add a space to all prompts
1181 change: ipython does not automatically add a space to all prompts
1178 anymore. To get the old prompts with a space, users should add it
1182 anymore. To get the old prompts with a space, users should add it
1179 manually to their ipythonrc file, so for example prompt_in1 should
1183 manually to their ipythonrc file, so for example prompt_in1 should
1180 now read 'In [\#]: ' instead of 'In [\#]:'.
1184 now read 'In [\#]: ' instead of 'In [\#]:'.
1181 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1185 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1182 file) to control left-padding of secondary prompts.
1186 file) to control left-padding of secondary prompts.
1183
1187
1184 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1188 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1185 the profiler can't be imported. Fix for Debian, which removed
1189 the profiler can't be imported. Fix for Debian, which removed
1186 profile.py because of License issues. I applied a slightly
1190 profile.py because of License issues. I applied a slightly
1187 modified version of the original Debian patch at
1191 modified version of the original Debian patch at
1188 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1192 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1189
1193
1190 2005-02-17 Fernando Perez <fperez@colorado.edu>
1194 2005-02-17 Fernando Perez <fperez@colorado.edu>
1191
1195
1192 * IPython/genutils.py (native_line_ends): Fix bug which would
1196 * IPython/genutils.py (native_line_ends): Fix bug which would
1193 cause improper line-ends under win32 b/c I was not opening files
1197 cause improper line-ends under win32 b/c I was not opening files
1194 in binary mode. Bug report and fix thanks to Ville.
1198 in binary mode. Bug report and fix thanks to Ville.
1195
1199
1196 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1200 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1197 trying to catch spurious foo[1] autocalls. My fix actually broke
1201 trying to catch spurious foo[1] autocalls. My fix actually broke
1198 ',/' autoquote/call with explicit escape (bad regexp).
1202 ',/' autoquote/call with explicit escape (bad regexp).
1199
1203
1200 2005-02-15 *** Released version 0.6.11
1204 2005-02-15 *** Released version 0.6.11
1201
1205
1202 2005-02-14 Fernando Perez <fperez@colorado.edu>
1206 2005-02-14 Fernando Perez <fperez@colorado.edu>
1203
1207
1204 * IPython/background_jobs.py: New background job management
1208 * IPython/background_jobs.py: New background job management
1205 subsystem. This is implemented via a new set of classes, and
1209 subsystem. This is implemented via a new set of classes, and
1206 IPython now provides a builtin 'jobs' object for background job
1210 IPython now provides a builtin 'jobs' object for background job
1207 execution. A convenience %bg magic serves as a lightweight
1211 execution. A convenience %bg magic serves as a lightweight
1208 frontend for starting the more common type of calls. This was
1212 frontend for starting the more common type of calls. This was
1209 inspired by discussions with B. Granger and the BackgroundCommand
1213 inspired by discussions with B. Granger and the BackgroundCommand
1210 class described in the book Python Scripting for Computational
1214 class described in the book Python Scripting for Computational
1211 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1215 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1212 (although ultimately no code from this text was used, as IPython's
1216 (although ultimately no code from this text was used, as IPython's
1213 system is a separate implementation).
1217 system is a separate implementation).
1214
1218
1215 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1219 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1216 to control the completion of single/double underscore names
1220 to control the completion of single/double underscore names
1217 separately. As documented in the example ipytonrc file, the
1221 separately. As documented in the example ipytonrc file, the
1218 readline_omit__names variable can now be set to 2, to omit even
1222 readline_omit__names variable can now be set to 2, to omit even
1219 single underscore names. Thanks to a patch by Brian Wong
1223 single underscore names. Thanks to a patch by Brian Wong
1220 <BrianWong-AT-AirgoNetworks.Com>.
1224 <BrianWong-AT-AirgoNetworks.Com>.
1221 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1225 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1222 be autocalled as foo([1]) if foo were callable. A problem for
1226 be autocalled as foo([1]) if foo were callable. A problem for
1223 things which are both callable and implement __getitem__.
1227 things which are both callable and implement __getitem__.
1224 (init_readline): Fix autoindentation for win32. Thanks to a patch
1228 (init_readline): Fix autoindentation for win32. Thanks to a patch
1225 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1229 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1226
1230
1227 2005-02-12 Fernando Perez <fperez@colorado.edu>
1231 2005-02-12 Fernando Perez <fperez@colorado.edu>
1228
1232
1229 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1233 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1230 which I had written long ago to sort out user error messages which
1234 which I had written long ago to sort out user error messages which
1231 may occur during startup. This seemed like a good idea initially,
1235 may occur during startup. This seemed like a good idea initially,
1232 but it has proven a disaster in retrospect. I don't want to
1236 but it has proven a disaster in retrospect. I don't want to
1233 change much code for now, so my fix is to set the internal 'debug'
1237 change much code for now, so my fix is to set the internal 'debug'
1234 flag to true everywhere, whose only job was precisely to control
1238 flag to true everywhere, whose only job was precisely to control
1235 this subsystem. This closes issue 28 (as well as avoiding all
1239 this subsystem. This closes issue 28 (as well as avoiding all
1236 sorts of strange hangups which occur from time to time).
1240 sorts of strange hangups which occur from time to time).
1237
1241
1238 2005-02-07 Fernando Perez <fperez@colorado.edu>
1242 2005-02-07 Fernando Perez <fperez@colorado.edu>
1239
1243
1240 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1244 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1241 previous call produced a syntax error.
1245 previous call produced a syntax error.
1242
1246
1243 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1247 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1244 classes without constructor.
1248 classes without constructor.
1245
1249
1246 2005-02-06 Fernando Perez <fperez@colorado.edu>
1250 2005-02-06 Fernando Perez <fperez@colorado.edu>
1247
1251
1248 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1252 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1249 completions with the results of each matcher, so we return results
1253 completions with the results of each matcher, so we return results
1250 to the user from all namespaces. This breaks with ipython
1254 to the user from all namespaces. This breaks with ipython
1251 tradition, but I think it's a nicer behavior. Now you get all
1255 tradition, but I think it's a nicer behavior. Now you get all
1252 possible completions listed, from all possible namespaces (python,
1256 possible completions listed, from all possible namespaces (python,
1253 filesystem, magics...) After a request by John Hunter
1257 filesystem, magics...) After a request by John Hunter
1254 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1258 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1255
1259
1256 2005-02-05 Fernando Perez <fperez@colorado.edu>
1260 2005-02-05 Fernando Perez <fperez@colorado.edu>
1257
1261
1258 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1262 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1259 the call had quote characters in it (the quotes were stripped).
1263 the call had quote characters in it (the quotes were stripped).
1260
1264
1261 2005-01-31 Fernando Perez <fperez@colorado.edu>
1265 2005-01-31 Fernando Perez <fperez@colorado.edu>
1262
1266
1263 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1267 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1264 Itpl.itpl() to make the code more robust against psyco
1268 Itpl.itpl() to make the code more robust against psyco
1265 optimizations.
1269 optimizations.
1266
1270
1267 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1271 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1268 of causing an exception. Quicker, cleaner.
1272 of causing an exception. Quicker, cleaner.
1269
1273
1270 2005-01-28 Fernando Perez <fperez@colorado.edu>
1274 2005-01-28 Fernando Perez <fperez@colorado.edu>
1271
1275
1272 * scripts/ipython_win_post_install.py (install): hardcode
1276 * scripts/ipython_win_post_install.py (install): hardcode
1273 sys.prefix+'python.exe' as the executable path. It turns out that
1277 sys.prefix+'python.exe' as the executable path. It turns out that
1274 during the post-installation run, sys.executable resolves to the
1278 during the post-installation run, sys.executable resolves to the
1275 name of the binary installer! I should report this as a distutils
1279 name of the binary installer! I should report this as a distutils
1276 bug, I think. I updated the .10 release with this tiny fix, to
1280 bug, I think. I updated the .10 release with this tiny fix, to
1277 avoid annoying the lists further.
1281 avoid annoying the lists further.
1278
1282
1279 2005-01-27 *** Released version 0.6.10
1283 2005-01-27 *** Released version 0.6.10
1280
1284
1281 2005-01-27 Fernando Perez <fperez@colorado.edu>
1285 2005-01-27 Fernando Perez <fperez@colorado.edu>
1282
1286
1283 * IPython/numutils.py (norm): Added 'inf' as optional name for
1287 * IPython/numutils.py (norm): Added 'inf' as optional name for
1284 L-infinity norm, included references to mathworld.com for vector
1288 L-infinity norm, included references to mathworld.com for vector
1285 norm definitions.
1289 norm definitions.
1286 (amin/amax): added amin/amax for array min/max. Similar to what
1290 (amin/amax): added amin/amax for array min/max. Similar to what
1287 pylab ships with after the recent reorganization of names.
1291 pylab ships with after the recent reorganization of names.
1288 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1292 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1289
1293
1290 * ipython.el: committed Alex's recent fixes and improvements.
1294 * ipython.el: committed Alex's recent fixes and improvements.
1291 Tested with python-mode from CVS, and it looks excellent. Since
1295 Tested with python-mode from CVS, and it looks excellent. Since
1292 python-mode hasn't released anything in a while, I'm temporarily
1296 python-mode hasn't released anything in a while, I'm temporarily
1293 putting a copy of today's CVS (v 4.70) of python-mode in:
1297 putting a copy of today's CVS (v 4.70) of python-mode in:
1294 http://ipython.scipy.org/tmp/python-mode.el
1298 http://ipython.scipy.org/tmp/python-mode.el
1295
1299
1296 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1300 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1297 sys.executable for the executable name, instead of assuming it's
1301 sys.executable for the executable name, instead of assuming it's
1298 called 'python.exe' (the post-installer would have produced broken
1302 called 'python.exe' (the post-installer would have produced broken
1299 setups on systems with a differently named python binary).
1303 setups on systems with a differently named python binary).
1300
1304
1301 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1305 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1302 references to os.linesep, to make the code more
1306 references to os.linesep, to make the code more
1303 platform-independent. This is also part of the win32 coloring
1307 platform-independent. This is also part of the win32 coloring
1304 fixes.
1308 fixes.
1305
1309
1306 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1310 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1307 lines, which actually cause coloring bugs because the length of
1311 lines, which actually cause coloring bugs because the length of
1308 the line is very difficult to correctly compute with embedded
1312 the line is very difficult to correctly compute with embedded
1309 escapes. This was the source of all the coloring problems under
1313 escapes. This was the source of all the coloring problems under
1310 Win32. I think that _finally_, Win32 users have a properly
1314 Win32. I think that _finally_, Win32 users have a properly
1311 working ipython in all respects. This would never have happened
1315 working ipython in all respects. This would never have happened
1312 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1316 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1313
1317
1314 2005-01-26 *** Released version 0.6.9
1318 2005-01-26 *** Released version 0.6.9
1315
1319
1316 2005-01-25 Fernando Perez <fperez@colorado.edu>
1320 2005-01-25 Fernando Perez <fperez@colorado.edu>
1317
1321
1318 * setup.py: finally, we have a true Windows installer, thanks to
1322 * setup.py: finally, we have a true Windows installer, thanks to
1319 the excellent work of Viktor Ransmayr
1323 the excellent work of Viktor Ransmayr
1320 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1324 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1321 Windows users. The setup routine is quite a bit cleaner thanks to
1325 Windows users. The setup routine is quite a bit cleaner thanks to
1322 this, and the post-install script uses the proper functions to
1326 this, and the post-install script uses the proper functions to
1323 allow a clean de-installation using the standard Windows Control
1327 allow a clean de-installation using the standard Windows Control
1324 Panel.
1328 Panel.
1325
1329
1326 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1330 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1327 environment variable under all OSes (including win32) if
1331 environment variable under all OSes (including win32) if
1328 available. This will give consistency to win32 users who have set
1332 available. This will give consistency to win32 users who have set
1329 this variable for any reason. If os.environ['HOME'] fails, the
1333 this variable for any reason. If os.environ['HOME'] fails, the
1330 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1334 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1331
1335
1332 2005-01-24 Fernando Perez <fperez@colorado.edu>
1336 2005-01-24 Fernando Perez <fperez@colorado.edu>
1333
1337
1334 * IPython/numutils.py (empty_like): add empty_like(), similar to
1338 * IPython/numutils.py (empty_like): add empty_like(), similar to
1335 zeros_like() but taking advantage of the new empty() Numeric routine.
1339 zeros_like() but taking advantage of the new empty() Numeric routine.
1336
1340
1337 2005-01-23 *** Released version 0.6.8
1341 2005-01-23 *** Released version 0.6.8
1338
1342
1339 2005-01-22 Fernando Perez <fperez@colorado.edu>
1343 2005-01-22 Fernando Perez <fperez@colorado.edu>
1340
1344
1341 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1345 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1342 automatic show() calls. After discussing things with JDH, it
1346 automatic show() calls. After discussing things with JDH, it
1343 turns out there are too many corner cases where this can go wrong.
1347 turns out there are too many corner cases where this can go wrong.
1344 It's best not to try to be 'too smart', and simply have ipython
1348 It's best not to try to be 'too smart', and simply have ipython
1345 reproduce as much as possible the default behavior of a normal
1349 reproduce as much as possible the default behavior of a normal
1346 python shell.
1350 python shell.
1347
1351
1348 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1352 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1349 line-splitting regexp and _prefilter() to avoid calling getattr()
1353 line-splitting regexp and _prefilter() to avoid calling getattr()
1350 on assignments. This closes
1354 on assignments. This closes
1351 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1355 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1352 readline uses getattr(), so a simple <TAB> keypress is still
1356 readline uses getattr(), so a simple <TAB> keypress is still
1353 enough to trigger getattr() calls on an object.
1357 enough to trigger getattr() calls on an object.
1354
1358
1355 2005-01-21 Fernando Perez <fperez@colorado.edu>
1359 2005-01-21 Fernando Perez <fperez@colorado.edu>
1356
1360
1357 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1361 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1358 docstring under pylab so it doesn't mask the original.
1362 docstring under pylab so it doesn't mask the original.
1359
1363
1360 2005-01-21 *** Released version 0.6.7
1364 2005-01-21 *** Released version 0.6.7
1361
1365
1362 2005-01-21 Fernando Perez <fperez@colorado.edu>
1366 2005-01-21 Fernando Perez <fperez@colorado.edu>
1363
1367
1364 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1368 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1365 signal handling for win32 users in multithreaded mode.
1369 signal handling for win32 users in multithreaded mode.
1366
1370
1367 2005-01-17 Fernando Perez <fperez@colorado.edu>
1371 2005-01-17 Fernando Perez <fperez@colorado.edu>
1368
1372
1369 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1373 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1370 instances with no __init__. After a crash report by Norbert Nemec
1374 instances with no __init__. After a crash report by Norbert Nemec
1371 <Norbert-AT-nemec-online.de>.
1375 <Norbert-AT-nemec-online.de>.
1372
1376
1373 2005-01-14 Fernando Perez <fperez@colorado.edu>
1377 2005-01-14 Fernando Perez <fperez@colorado.edu>
1374
1378
1375 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1379 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1376 names for verbose exceptions, when multiple dotted names and the
1380 names for verbose exceptions, when multiple dotted names and the
1377 'parent' object were present on the same line.
1381 'parent' object were present on the same line.
1378
1382
1379 2005-01-11 Fernando Perez <fperez@colorado.edu>
1383 2005-01-11 Fernando Perez <fperez@colorado.edu>
1380
1384
1381 * IPython/genutils.py (flag_calls): new utility to trap and flag
1385 * IPython/genutils.py (flag_calls): new utility to trap and flag
1382 calls in functions. I need it to clean up matplotlib support.
1386 calls in functions. I need it to clean up matplotlib support.
1383 Also removed some deprecated code in genutils.
1387 Also removed some deprecated code in genutils.
1384
1388
1385 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1389 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1386 that matplotlib scripts called with %run, which don't call show()
1390 that matplotlib scripts called with %run, which don't call show()
1387 themselves, still have their plotting windows open.
1391 themselves, still have their plotting windows open.
1388
1392
1389 2005-01-05 Fernando Perez <fperez@colorado.edu>
1393 2005-01-05 Fernando Perez <fperez@colorado.edu>
1390
1394
1391 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1395 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1392 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1396 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1393
1397
1394 2004-12-19 Fernando Perez <fperez@colorado.edu>
1398 2004-12-19 Fernando Perez <fperez@colorado.edu>
1395
1399
1396 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1400 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1397 parent_runcode, which was an eyesore. The same result can be
1401 parent_runcode, which was an eyesore. The same result can be
1398 obtained with Python's regular superclass mechanisms.
1402 obtained with Python's regular superclass mechanisms.
1399
1403
1400 2004-12-17 Fernando Perez <fperez@colorado.edu>
1404 2004-12-17 Fernando Perez <fperez@colorado.edu>
1401
1405
1402 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1406 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1403 reported by Prabhu.
1407 reported by Prabhu.
1404 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1408 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1405 sys.stderr) instead of explicitly calling sys.stderr. This helps
1409 sys.stderr) instead of explicitly calling sys.stderr. This helps
1406 maintain our I/O abstractions clean, for future GUI embeddings.
1410 maintain our I/O abstractions clean, for future GUI embeddings.
1407
1411
1408 * IPython/genutils.py (info): added new utility for sys.stderr
1412 * IPython/genutils.py (info): added new utility for sys.stderr
1409 unified info message handling (thin wrapper around warn()).
1413 unified info message handling (thin wrapper around warn()).
1410
1414
1411 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1415 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1412 composite (dotted) names on verbose exceptions.
1416 composite (dotted) names on verbose exceptions.
1413 (VerboseTB.nullrepr): harden against another kind of errors which
1417 (VerboseTB.nullrepr): harden against another kind of errors which
1414 Python's inspect module can trigger, and which were crashing
1418 Python's inspect module can trigger, and which were crashing
1415 IPython. Thanks to a report by Marco Lombardi
1419 IPython. Thanks to a report by Marco Lombardi
1416 <mlombard-AT-ma010192.hq.eso.org>.
1420 <mlombard-AT-ma010192.hq.eso.org>.
1417
1421
1418 2004-12-13 *** Released version 0.6.6
1422 2004-12-13 *** Released version 0.6.6
1419
1423
1420 2004-12-12 Fernando Perez <fperez@colorado.edu>
1424 2004-12-12 Fernando Perez <fperez@colorado.edu>
1421
1425
1422 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1426 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1423 generated by pygtk upon initialization if it was built without
1427 generated by pygtk upon initialization if it was built without
1424 threads (for matplotlib users). After a crash reported by
1428 threads (for matplotlib users). After a crash reported by
1425 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1429 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1426
1430
1427 * IPython/ipmaker.py (make_IPython): fix small bug in the
1431 * IPython/ipmaker.py (make_IPython): fix small bug in the
1428 import_some parameter for multiple imports.
1432 import_some parameter for multiple imports.
1429
1433
1430 * IPython/iplib.py (ipmagic): simplified the interface of
1434 * IPython/iplib.py (ipmagic): simplified the interface of
1431 ipmagic() to take a single string argument, just as it would be
1435 ipmagic() to take a single string argument, just as it would be
1432 typed at the IPython cmd line.
1436 typed at the IPython cmd line.
1433 (ipalias): Added new ipalias() with an interface identical to
1437 (ipalias): Added new ipalias() with an interface identical to
1434 ipmagic(). This completes exposing a pure python interface to the
1438 ipmagic(). This completes exposing a pure python interface to the
1435 alias and magic system, which can be used in loops or more complex
1439 alias and magic system, which can be used in loops or more complex
1436 code where IPython's automatic line mangling is not active.
1440 code where IPython's automatic line mangling is not active.
1437
1441
1438 * IPython/genutils.py (timing): changed interface of timing to
1442 * IPython/genutils.py (timing): changed interface of timing to
1439 simply run code once, which is the most common case. timings()
1443 simply run code once, which is the most common case. timings()
1440 remains unchanged, for the cases where you want multiple runs.
1444 remains unchanged, for the cases where you want multiple runs.
1441
1445
1442 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1446 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1443 bug where Python2.2 crashes with exec'ing code which does not end
1447 bug where Python2.2 crashes with exec'ing code which does not end
1444 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1448 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1445 before.
1449 before.
1446
1450
1447 2004-12-10 Fernando Perez <fperez@colorado.edu>
1451 2004-12-10 Fernando Perez <fperez@colorado.edu>
1448
1452
1449 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1453 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1450 -t to -T, to accomodate the new -t flag in %run (the %run and
1454 -t to -T, to accomodate the new -t flag in %run (the %run and
1451 %prun options are kind of intermixed, and it's not easy to change
1455 %prun options are kind of intermixed, and it's not easy to change
1452 this with the limitations of python's getopt).
1456 this with the limitations of python's getopt).
1453
1457
1454 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1458 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1455 the execution of scripts. It's not as fine-tuned as timeit.py,
1459 the execution of scripts. It's not as fine-tuned as timeit.py,
1456 but it works from inside ipython (and under 2.2, which lacks
1460 but it works from inside ipython (and under 2.2, which lacks
1457 timeit.py). Optionally a number of runs > 1 can be given for
1461 timeit.py). Optionally a number of runs > 1 can be given for
1458 timing very short-running code.
1462 timing very short-running code.
1459
1463
1460 * IPython/genutils.py (uniq_stable): new routine which returns a
1464 * IPython/genutils.py (uniq_stable): new routine which returns a
1461 list of unique elements in any iterable, but in stable order of
1465 list of unique elements in any iterable, but in stable order of
1462 appearance. I needed this for the ultraTB fixes, and it's a handy
1466 appearance. I needed this for the ultraTB fixes, and it's a handy
1463 utility.
1467 utility.
1464
1468
1465 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1469 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1466 dotted names in Verbose exceptions. This had been broken since
1470 dotted names in Verbose exceptions. This had been broken since
1467 the very start, now x.y will properly be printed in a Verbose
1471 the very start, now x.y will properly be printed in a Verbose
1468 traceback, instead of x being shown and y appearing always as an
1472 traceback, instead of x being shown and y appearing always as an
1469 'undefined global'. Getting this to work was a bit tricky,
1473 'undefined global'. Getting this to work was a bit tricky,
1470 because by default python tokenizers are stateless. Saved by
1474 because by default python tokenizers are stateless. Saved by
1471 python's ability to easily add a bit of state to an arbitrary
1475 python's ability to easily add a bit of state to an arbitrary
1472 function (without needing to build a full-blown callable object).
1476 function (without needing to build a full-blown callable object).
1473
1477
1474 Also big cleanup of this code, which had horrendous runtime
1478 Also big cleanup of this code, which had horrendous runtime
1475 lookups of zillions of attributes for colorization. Moved all
1479 lookups of zillions of attributes for colorization. Moved all
1476 this code into a few templates, which make it cleaner and quicker.
1480 this code into a few templates, which make it cleaner and quicker.
1477
1481
1478 Printout quality was also improved for Verbose exceptions: one
1482 Printout quality was also improved for Verbose exceptions: one
1479 variable per line, and memory addresses are printed (this can be
1483 variable per line, and memory addresses are printed (this can be
1480 quite handy in nasty debugging situations, which is what Verbose
1484 quite handy in nasty debugging situations, which is what Verbose
1481 is for).
1485 is for).
1482
1486
1483 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1487 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1484 the command line as scripts to be loaded by embedded instances.
1488 the command line as scripts to be loaded by embedded instances.
1485 Doing so has the potential for an infinite recursion if there are
1489 Doing so has the potential for an infinite recursion if there are
1486 exceptions thrown in the process. This fixes a strange crash
1490 exceptions thrown in the process. This fixes a strange crash
1487 reported by Philippe MULLER <muller-AT-irit.fr>.
1491 reported by Philippe MULLER <muller-AT-irit.fr>.
1488
1492
1489 2004-12-09 Fernando Perez <fperez@colorado.edu>
1493 2004-12-09 Fernando Perez <fperez@colorado.edu>
1490
1494
1491 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1495 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1492 to reflect new names in matplotlib, which now expose the
1496 to reflect new names in matplotlib, which now expose the
1493 matlab-compatible interface via a pylab module instead of the
1497 matlab-compatible interface via a pylab module instead of the
1494 'matlab' name. The new code is backwards compatible, so users of
1498 'matlab' name. The new code is backwards compatible, so users of
1495 all matplotlib versions are OK. Patch by J. Hunter.
1499 all matplotlib versions are OK. Patch by J. Hunter.
1496
1500
1497 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1501 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1498 of __init__ docstrings for instances (class docstrings are already
1502 of __init__ docstrings for instances (class docstrings are already
1499 automatically printed). Instances with customized docstrings
1503 automatically printed). Instances with customized docstrings
1500 (indep. of the class) are also recognized and all 3 separate
1504 (indep. of the class) are also recognized and all 3 separate
1501 docstrings are printed (instance, class, constructor). After some
1505 docstrings are printed (instance, class, constructor). After some
1502 comments/suggestions by J. Hunter.
1506 comments/suggestions by J. Hunter.
1503
1507
1504 2004-12-05 Fernando Perez <fperez@colorado.edu>
1508 2004-12-05 Fernando Perez <fperez@colorado.edu>
1505
1509
1506 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1510 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1507 warnings when tab-completion fails and triggers an exception.
1511 warnings when tab-completion fails and triggers an exception.
1508
1512
1509 2004-12-03 Fernando Perez <fperez@colorado.edu>
1513 2004-12-03 Fernando Perez <fperez@colorado.edu>
1510
1514
1511 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1515 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1512 be triggered when using 'run -p'. An incorrect option flag was
1516 be triggered when using 'run -p'. An incorrect option flag was
1513 being set ('d' instead of 'D').
1517 being set ('d' instead of 'D').
1514 (manpage): fix missing escaped \- sign.
1518 (manpage): fix missing escaped \- sign.
1515
1519
1516 2004-11-30 *** Released version 0.6.5
1520 2004-11-30 *** Released version 0.6.5
1517
1521
1518 2004-11-30 Fernando Perez <fperez@colorado.edu>
1522 2004-11-30 Fernando Perez <fperez@colorado.edu>
1519
1523
1520 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1524 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1521 setting with -d option.
1525 setting with -d option.
1522
1526
1523 * setup.py (docfiles): Fix problem where the doc glob I was using
1527 * setup.py (docfiles): Fix problem where the doc glob I was using
1524 was COMPLETELY BROKEN. It was giving the right files by pure
1528 was COMPLETELY BROKEN. It was giving the right files by pure
1525 accident, but failed once I tried to include ipython.el. Note:
1529 accident, but failed once I tried to include ipython.el. Note:
1526 glob() does NOT allow you to do exclusion on multiple endings!
1530 glob() does NOT allow you to do exclusion on multiple endings!
1527
1531
1528 2004-11-29 Fernando Perez <fperez@colorado.edu>
1532 2004-11-29 Fernando Perez <fperez@colorado.edu>
1529
1533
1530 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1534 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1531 the manpage as the source. Better formatting & consistency.
1535 the manpage as the source. Better formatting & consistency.
1532
1536
1533 * IPython/Magic.py (magic_run): Added new -d option, to run
1537 * IPython/Magic.py (magic_run): Added new -d option, to run
1534 scripts under the control of the python pdb debugger. Note that
1538 scripts under the control of the python pdb debugger. Note that
1535 this required changing the %prun option -d to -D, to avoid a clash
1539 this required changing the %prun option -d to -D, to avoid a clash
1536 (since %run must pass options to %prun, and getopt is too dumb to
1540 (since %run must pass options to %prun, and getopt is too dumb to
1537 handle options with string values with embedded spaces). Thanks
1541 handle options with string values with embedded spaces). Thanks
1538 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1542 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1539 (magic_who_ls): added type matching to %who and %whos, so that one
1543 (magic_who_ls): added type matching to %who and %whos, so that one
1540 can filter their output to only include variables of certain
1544 can filter their output to only include variables of certain
1541 types. Another suggestion by Matthew.
1545 types. Another suggestion by Matthew.
1542 (magic_whos): Added memory summaries in kb and Mb for arrays.
1546 (magic_whos): Added memory summaries in kb and Mb for arrays.
1543 (magic_who): Improve formatting (break lines every 9 vars).
1547 (magic_who): Improve formatting (break lines every 9 vars).
1544
1548
1545 2004-11-28 Fernando Perez <fperez@colorado.edu>
1549 2004-11-28 Fernando Perez <fperez@colorado.edu>
1546
1550
1547 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1551 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1548 cache when empty lines were present.
1552 cache when empty lines were present.
1549
1553
1550 2004-11-24 Fernando Perez <fperez@colorado.edu>
1554 2004-11-24 Fernando Perez <fperez@colorado.edu>
1551
1555
1552 * IPython/usage.py (__doc__): document the re-activated threading
1556 * IPython/usage.py (__doc__): document the re-activated threading
1553 options for WX and GTK.
1557 options for WX and GTK.
1554
1558
1555 2004-11-23 Fernando Perez <fperez@colorado.edu>
1559 2004-11-23 Fernando Perez <fperez@colorado.edu>
1556
1560
1557 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1561 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1558 the -wthread and -gthread options, along with a new -tk one to try
1562 the -wthread and -gthread options, along with a new -tk one to try
1559 and coordinate Tk threading with wx/gtk. The tk support is very
1563 and coordinate Tk threading with wx/gtk. The tk support is very
1560 platform dependent, since it seems to require Tcl and Tk to be
1564 platform dependent, since it seems to require Tcl and Tk to be
1561 built with threads (Fedora1/2 appears NOT to have it, but in
1565 built with threads (Fedora1/2 appears NOT to have it, but in
1562 Prabhu's Debian boxes it works OK). But even with some Tk
1566 Prabhu's Debian boxes it works OK). But even with some Tk
1563 limitations, this is a great improvement.
1567 limitations, this is a great improvement.
1564
1568
1565 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1569 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1566 info in user prompts. Patch by Prabhu.
1570 info in user prompts. Patch by Prabhu.
1567
1571
1568 2004-11-18 Fernando Perez <fperez@colorado.edu>
1572 2004-11-18 Fernando Perez <fperez@colorado.edu>
1569
1573
1570 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1574 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1571 EOFErrors and bail, to avoid infinite loops if a non-terminating
1575 EOFErrors and bail, to avoid infinite loops if a non-terminating
1572 file is fed into ipython. Patch submitted in issue 19 by user,
1576 file is fed into ipython. Patch submitted in issue 19 by user,
1573 many thanks.
1577 many thanks.
1574
1578
1575 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1579 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1576 autoquote/parens in continuation prompts, which can cause lots of
1580 autoquote/parens in continuation prompts, which can cause lots of
1577 problems. Closes roundup issue 20.
1581 problems. Closes roundup issue 20.
1578
1582
1579 2004-11-17 Fernando Perez <fperez@colorado.edu>
1583 2004-11-17 Fernando Perez <fperez@colorado.edu>
1580
1584
1581 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1585 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1582 reported as debian bug #280505. I'm not sure my local changelog
1586 reported as debian bug #280505. I'm not sure my local changelog
1583 entry has the proper debian format (Jack?).
1587 entry has the proper debian format (Jack?).
1584
1588
1585 2004-11-08 *** Released version 0.6.4
1589 2004-11-08 *** Released version 0.6.4
1586
1590
1587 2004-11-08 Fernando Perez <fperez@colorado.edu>
1591 2004-11-08 Fernando Perez <fperez@colorado.edu>
1588
1592
1589 * IPython/iplib.py (init_readline): Fix exit message for Windows
1593 * IPython/iplib.py (init_readline): Fix exit message for Windows
1590 when readline is active. Thanks to a report by Eric Jones
1594 when readline is active. Thanks to a report by Eric Jones
1591 <eric-AT-enthought.com>.
1595 <eric-AT-enthought.com>.
1592
1596
1593 2004-11-07 Fernando Perez <fperez@colorado.edu>
1597 2004-11-07 Fernando Perez <fperez@colorado.edu>
1594
1598
1595 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1599 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1596 sometimes seen by win2k/cygwin users.
1600 sometimes seen by win2k/cygwin users.
1597
1601
1598 2004-11-06 Fernando Perez <fperez@colorado.edu>
1602 2004-11-06 Fernando Perez <fperez@colorado.edu>
1599
1603
1600 * IPython/iplib.py (interact): Change the handling of %Exit from
1604 * IPython/iplib.py (interact): Change the handling of %Exit from
1601 trying to propagate a SystemExit to an internal ipython flag.
1605 trying to propagate a SystemExit to an internal ipython flag.
1602 This is less elegant than using Python's exception mechanism, but
1606 This is less elegant than using Python's exception mechanism, but
1603 I can't get that to work reliably with threads, so under -pylab
1607 I can't get that to work reliably with threads, so under -pylab
1604 %Exit was hanging IPython. Cross-thread exception handling is
1608 %Exit was hanging IPython. Cross-thread exception handling is
1605 really a bitch. Thaks to a bug report by Stephen Walton
1609 really a bitch. Thaks to a bug report by Stephen Walton
1606 <stephen.walton-AT-csun.edu>.
1610 <stephen.walton-AT-csun.edu>.
1607
1611
1608 2004-11-04 Fernando Perez <fperez@colorado.edu>
1612 2004-11-04 Fernando Perez <fperez@colorado.edu>
1609
1613
1610 * IPython/iplib.py (raw_input_original): store a pointer to the
1614 * IPython/iplib.py (raw_input_original): store a pointer to the
1611 true raw_input to harden against code which can modify it
1615 true raw_input to harden against code which can modify it
1612 (wx.py.PyShell does this and would otherwise crash ipython).
1616 (wx.py.PyShell does this and would otherwise crash ipython).
1613 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1617 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1614
1618
1615 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1619 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1616 Ctrl-C problem, which does not mess up the input line.
1620 Ctrl-C problem, which does not mess up the input line.
1617
1621
1618 2004-11-03 Fernando Perez <fperez@colorado.edu>
1622 2004-11-03 Fernando Perez <fperez@colorado.edu>
1619
1623
1620 * IPython/Release.py: Changed licensing to BSD, in all files.
1624 * IPython/Release.py: Changed licensing to BSD, in all files.
1621 (name): lowercase name for tarball/RPM release.
1625 (name): lowercase name for tarball/RPM release.
1622
1626
1623 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1627 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1624 use throughout ipython.
1628 use throughout ipython.
1625
1629
1626 * IPython/Magic.py (Magic._ofind): Switch to using the new
1630 * IPython/Magic.py (Magic._ofind): Switch to using the new
1627 OInspect.getdoc() function.
1631 OInspect.getdoc() function.
1628
1632
1629 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1633 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1630 of the line currently being canceled via Ctrl-C. It's extremely
1634 of the line currently being canceled via Ctrl-C. It's extremely
1631 ugly, but I don't know how to do it better (the problem is one of
1635 ugly, but I don't know how to do it better (the problem is one of
1632 handling cross-thread exceptions).
1636 handling cross-thread exceptions).
1633
1637
1634 2004-10-28 Fernando Perez <fperez@colorado.edu>
1638 2004-10-28 Fernando Perez <fperez@colorado.edu>
1635
1639
1636 * IPython/Shell.py (signal_handler): add signal handlers to trap
1640 * IPython/Shell.py (signal_handler): add signal handlers to trap
1637 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1641 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1638 report by Francesc Alted.
1642 report by Francesc Alted.
1639
1643
1640 2004-10-21 Fernando Perez <fperez@colorado.edu>
1644 2004-10-21 Fernando Perez <fperez@colorado.edu>
1641
1645
1642 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1646 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1643 to % for pysh syntax extensions.
1647 to % for pysh syntax extensions.
1644
1648
1645 2004-10-09 Fernando Perez <fperez@colorado.edu>
1649 2004-10-09 Fernando Perez <fperez@colorado.edu>
1646
1650
1647 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1651 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1648 arrays to print a more useful summary, without calling str(arr).
1652 arrays to print a more useful summary, without calling str(arr).
1649 This avoids the problem of extremely lengthy computations which
1653 This avoids the problem of extremely lengthy computations which
1650 occur if arr is large, and appear to the user as a system lockup
1654 occur if arr is large, and appear to the user as a system lockup
1651 with 100% cpu activity. After a suggestion by Kristian Sandberg
1655 with 100% cpu activity. After a suggestion by Kristian Sandberg
1652 <Kristian.Sandberg@colorado.edu>.
1656 <Kristian.Sandberg@colorado.edu>.
1653 (Magic.__init__): fix bug in global magic escapes not being
1657 (Magic.__init__): fix bug in global magic escapes not being
1654 correctly set.
1658 correctly set.
1655
1659
1656 2004-10-08 Fernando Perez <fperez@colorado.edu>
1660 2004-10-08 Fernando Perez <fperez@colorado.edu>
1657
1661
1658 * IPython/Magic.py (__license__): change to absolute imports of
1662 * IPython/Magic.py (__license__): change to absolute imports of
1659 ipython's own internal packages, to start adapting to the absolute
1663 ipython's own internal packages, to start adapting to the absolute
1660 import requirement of PEP-328.
1664 import requirement of PEP-328.
1661
1665
1662 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1666 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1663 files, and standardize author/license marks through the Release
1667 files, and standardize author/license marks through the Release
1664 module instead of having per/file stuff (except for files with
1668 module instead of having per/file stuff (except for files with
1665 particular licenses, like the MIT/PSF-licensed codes).
1669 particular licenses, like the MIT/PSF-licensed codes).
1666
1670
1667 * IPython/Debugger.py: remove dead code for python 2.1
1671 * IPython/Debugger.py: remove dead code for python 2.1
1668
1672
1669 2004-10-04 Fernando Perez <fperez@colorado.edu>
1673 2004-10-04 Fernando Perez <fperez@colorado.edu>
1670
1674
1671 * IPython/iplib.py (ipmagic): New function for accessing magics
1675 * IPython/iplib.py (ipmagic): New function for accessing magics
1672 via a normal python function call.
1676 via a normal python function call.
1673
1677
1674 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1678 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1675 from '@' to '%', to accomodate the new @decorator syntax of python
1679 from '@' to '%', to accomodate the new @decorator syntax of python
1676 2.4.
1680 2.4.
1677
1681
1678 2004-09-29 Fernando Perez <fperez@colorado.edu>
1682 2004-09-29 Fernando Perez <fperez@colorado.edu>
1679
1683
1680 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1684 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1681 matplotlib.use to prevent running scripts which try to switch
1685 matplotlib.use to prevent running scripts which try to switch
1682 interactive backends from within ipython. This will just crash
1686 interactive backends from within ipython. This will just crash
1683 the python interpreter, so we can't allow it (but a detailed error
1687 the python interpreter, so we can't allow it (but a detailed error
1684 is given to the user).
1688 is given to the user).
1685
1689
1686 2004-09-28 Fernando Perez <fperez@colorado.edu>
1690 2004-09-28 Fernando Perez <fperez@colorado.edu>
1687
1691
1688 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1692 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1689 matplotlib-related fixes so that using @run with non-matplotlib
1693 matplotlib-related fixes so that using @run with non-matplotlib
1690 scripts doesn't pop up spurious plot windows. This requires
1694 scripts doesn't pop up spurious plot windows. This requires
1691 matplotlib >= 0.63, where I had to make some changes as well.
1695 matplotlib >= 0.63, where I had to make some changes as well.
1692
1696
1693 * IPython/ipmaker.py (make_IPython): update version requirement to
1697 * IPython/ipmaker.py (make_IPython): update version requirement to
1694 python 2.2.
1698 python 2.2.
1695
1699
1696 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1700 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1697 banner arg for embedded customization.
1701 banner arg for embedded customization.
1698
1702
1699 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1703 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1700 explicit uses of __IP as the IPython's instance name. Now things
1704 explicit uses of __IP as the IPython's instance name. Now things
1701 are properly handled via the shell.name value. The actual code
1705 are properly handled via the shell.name value. The actual code
1702 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1706 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1703 is much better than before. I'll clean things completely when the
1707 is much better than before. I'll clean things completely when the
1704 magic stuff gets a real overhaul.
1708 magic stuff gets a real overhaul.
1705
1709
1706 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1710 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1707 minor changes to debian dir.
1711 minor changes to debian dir.
1708
1712
1709 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1713 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1710 pointer to the shell itself in the interactive namespace even when
1714 pointer to the shell itself in the interactive namespace even when
1711 a user-supplied dict is provided. This is needed for embedding
1715 a user-supplied dict is provided. This is needed for embedding
1712 purposes (found by tests with Michel Sanner).
1716 purposes (found by tests with Michel Sanner).
1713
1717
1714 2004-09-27 Fernando Perez <fperez@colorado.edu>
1718 2004-09-27 Fernando Perez <fperez@colorado.edu>
1715
1719
1716 * IPython/UserConfig/ipythonrc: remove []{} from
1720 * IPython/UserConfig/ipythonrc: remove []{} from
1717 readline_remove_delims, so that things like [modname.<TAB> do
1721 readline_remove_delims, so that things like [modname.<TAB> do
1718 proper completion. This disables [].TAB, but that's a less common
1722 proper completion. This disables [].TAB, but that's a less common
1719 case than module names in list comprehensions, for example.
1723 case than module names in list comprehensions, for example.
1720 Thanks to a report by Andrea Riciputi.
1724 Thanks to a report by Andrea Riciputi.
1721
1725
1722 2004-09-09 Fernando Perez <fperez@colorado.edu>
1726 2004-09-09 Fernando Perez <fperez@colorado.edu>
1723
1727
1724 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1728 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1725 blocking problems in win32 and osx. Fix by John.
1729 blocking problems in win32 and osx. Fix by John.
1726
1730
1727 2004-09-08 Fernando Perez <fperez@colorado.edu>
1731 2004-09-08 Fernando Perez <fperez@colorado.edu>
1728
1732
1729 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1733 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1730 for Win32 and OSX. Fix by John Hunter.
1734 for Win32 and OSX. Fix by John Hunter.
1731
1735
1732 2004-08-30 *** Released version 0.6.3
1736 2004-08-30 *** Released version 0.6.3
1733
1737
1734 2004-08-30 Fernando Perez <fperez@colorado.edu>
1738 2004-08-30 Fernando Perez <fperez@colorado.edu>
1735
1739
1736 * setup.py (isfile): Add manpages to list of dependent files to be
1740 * setup.py (isfile): Add manpages to list of dependent files to be
1737 updated.
1741 updated.
1738
1742
1739 2004-08-27 Fernando Perez <fperez@colorado.edu>
1743 2004-08-27 Fernando Perez <fperez@colorado.edu>
1740
1744
1741 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1745 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1742 for now. They don't really work with standalone WX/GTK code
1746 for now. They don't really work with standalone WX/GTK code
1743 (though matplotlib IS working fine with both of those backends).
1747 (though matplotlib IS working fine with both of those backends).
1744 This will neeed much more testing. I disabled most things with
1748 This will neeed much more testing. I disabled most things with
1745 comments, so turning it back on later should be pretty easy.
1749 comments, so turning it back on later should be pretty easy.
1746
1750
1747 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1751 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1748 autocalling of expressions like r'foo', by modifying the line
1752 autocalling of expressions like r'foo', by modifying the line
1749 split regexp. Closes
1753 split regexp. Closes
1750 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1754 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1751 Riley <ipythonbugs-AT-sabi.net>.
1755 Riley <ipythonbugs-AT-sabi.net>.
1752 (InteractiveShell.mainloop): honor --nobanner with banner
1756 (InteractiveShell.mainloop): honor --nobanner with banner
1753 extensions.
1757 extensions.
1754
1758
1755 * IPython/Shell.py: Significant refactoring of all classes, so
1759 * IPython/Shell.py: Significant refactoring of all classes, so
1756 that we can really support ALL matplotlib backends and threading
1760 that we can really support ALL matplotlib backends and threading
1757 models (John spotted a bug with Tk which required this). Now we
1761 models (John spotted a bug with Tk which required this). Now we
1758 should support single-threaded, WX-threads and GTK-threads, both
1762 should support single-threaded, WX-threads and GTK-threads, both
1759 for generic code and for matplotlib.
1763 for generic code and for matplotlib.
1760
1764
1761 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1765 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1762 -pylab, to simplify things for users. Will also remove the pylab
1766 -pylab, to simplify things for users. Will also remove the pylab
1763 profile, since now all of matplotlib configuration is directly
1767 profile, since now all of matplotlib configuration is directly
1764 handled here. This also reduces startup time.
1768 handled here. This also reduces startup time.
1765
1769
1766 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1770 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1767 shell wasn't being correctly called. Also in IPShellWX.
1771 shell wasn't being correctly called. Also in IPShellWX.
1768
1772
1769 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1773 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1770 fine-tune banner.
1774 fine-tune banner.
1771
1775
1772 * IPython/numutils.py (spike): Deprecate these spike functions,
1776 * IPython/numutils.py (spike): Deprecate these spike functions,
1773 delete (long deprecated) gnuplot_exec handler.
1777 delete (long deprecated) gnuplot_exec handler.
1774
1778
1775 2004-08-26 Fernando Perez <fperez@colorado.edu>
1779 2004-08-26 Fernando Perez <fperez@colorado.edu>
1776
1780
1777 * ipython.1: Update for threading options, plus some others which
1781 * ipython.1: Update for threading options, plus some others which
1778 were missing.
1782 were missing.
1779
1783
1780 * IPython/ipmaker.py (__call__): Added -wthread option for
1784 * IPython/ipmaker.py (__call__): Added -wthread option for
1781 wxpython thread handling. Make sure threading options are only
1785 wxpython thread handling. Make sure threading options are only
1782 valid at the command line.
1786 valid at the command line.
1783
1787
1784 * scripts/ipython: moved shell selection into a factory function
1788 * scripts/ipython: moved shell selection into a factory function
1785 in Shell.py, to keep the starter script to a minimum.
1789 in Shell.py, to keep the starter script to a minimum.
1786
1790
1787 2004-08-25 Fernando Perez <fperez@colorado.edu>
1791 2004-08-25 Fernando Perez <fperez@colorado.edu>
1788
1792
1789 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1793 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1790 John. Along with some recent changes he made to matplotlib, the
1794 John. Along with some recent changes he made to matplotlib, the
1791 next versions of both systems should work very well together.
1795 next versions of both systems should work very well together.
1792
1796
1793 2004-08-24 Fernando Perez <fperez@colorado.edu>
1797 2004-08-24 Fernando Perez <fperez@colorado.edu>
1794
1798
1795 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1799 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1796 tried to switch the profiling to using hotshot, but I'm getting
1800 tried to switch the profiling to using hotshot, but I'm getting
1797 strange errors from prof.runctx() there. I may be misreading the
1801 strange errors from prof.runctx() there. I may be misreading the
1798 docs, but it looks weird. For now the profiling code will
1802 docs, but it looks weird. For now the profiling code will
1799 continue to use the standard profiler.
1803 continue to use the standard profiler.
1800
1804
1801 2004-08-23 Fernando Perez <fperez@colorado.edu>
1805 2004-08-23 Fernando Perez <fperez@colorado.edu>
1802
1806
1803 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1807 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1804 threaded shell, by John Hunter. It's not quite ready yet, but
1808 threaded shell, by John Hunter. It's not quite ready yet, but
1805 close.
1809 close.
1806
1810
1807 2004-08-22 Fernando Perez <fperez@colorado.edu>
1811 2004-08-22 Fernando Perez <fperez@colorado.edu>
1808
1812
1809 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1813 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1810 in Magic and ultraTB.
1814 in Magic and ultraTB.
1811
1815
1812 * ipython.1: document threading options in manpage.
1816 * ipython.1: document threading options in manpage.
1813
1817
1814 * scripts/ipython: Changed name of -thread option to -gthread,
1818 * scripts/ipython: Changed name of -thread option to -gthread,
1815 since this is GTK specific. I want to leave the door open for a
1819 since this is GTK specific. I want to leave the door open for a
1816 -wthread option for WX, which will most likely be necessary. This
1820 -wthread option for WX, which will most likely be necessary. This
1817 change affects usage and ipmaker as well.
1821 change affects usage and ipmaker as well.
1818
1822
1819 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1823 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1820 handle the matplotlib shell issues. Code by John Hunter
1824 handle the matplotlib shell issues. Code by John Hunter
1821 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1825 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1822 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1826 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1823 broken (and disabled for end users) for now, but it puts the
1827 broken (and disabled for end users) for now, but it puts the
1824 infrastructure in place.
1828 infrastructure in place.
1825
1829
1826 2004-08-21 Fernando Perez <fperez@colorado.edu>
1830 2004-08-21 Fernando Perez <fperez@colorado.edu>
1827
1831
1828 * ipythonrc-pylab: Add matplotlib support.
1832 * ipythonrc-pylab: Add matplotlib support.
1829
1833
1830 * matplotlib_config.py: new files for matplotlib support, part of
1834 * matplotlib_config.py: new files for matplotlib support, part of
1831 the pylab profile.
1835 the pylab profile.
1832
1836
1833 * IPython/usage.py (__doc__): documented the threading options.
1837 * IPython/usage.py (__doc__): documented the threading options.
1834
1838
1835 2004-08-20 Fernando Perez <fperez@colorado.edu>
1839 2004-08-20 Fernando Perez <fperez@colorado.edu>
1836
1840
1837 * ipython: Modified the main calling routine to handle the -thread
1841 * ipython: Modified the main calling routine to handle the -thread
1838 and -mpthread options. This needs to be done as a top-level hack,
1842 and -mpthread options. This needs to be done as a top-level hack,
1839 because it determines which class to instantiate for IPython
1843 because it determines which class to instantiate for IPython
1840 itself.
1844 itself.
1841
1845
1842 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1846 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1843 classes to support multithreaded GTK operation without blocking,
1847 classes to support multithreaded GTK operation without blocking,
1844 and matplotlib with all backends. This is a lot of still very
1848 and matplotlib with all backends. This is a lot of still very
1845 experimental code, and threads are tricky. So it may still have a
1849 experimental code, and threads are tricky. So it may still have a
1846 few rough edges... This code owes a lot to
1850 few rough edges... This code owes a lot to
1847 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1851 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1848 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1852 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1849 to John Hunter for all the matplotlib work.
1853 to John Hunter for all the matplotlib work.
1850
1854
1851 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1855 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1852 options for gtk thread and matplotlib support.
1856 options for gtk thread and matplotlib support.
1853
1857
1854 2004-08-16 Fernando Perez <fperez@colorado.edu>
1858 2004-08-16 Fernando Perez <fperez@colorado.edu>
1855
1859
1856 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1860 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1857 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1861 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1858 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1862 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1859
1863
1860 2004-08-11 Fernando Perez <fperez@colorado.edu>
1864 2004-08-11 Fernando Perez <fperez@colorado.edu>
1861
1865
1862 * setup.py (isfile): Fix build so documentation gets updated for
1866 * setup.py (isfile): Fix build so documentation gets updated for
1863 rpms (it was only done for .tgz builds).
1867 rpms (it was only done for .tgz builds).
1864
1868
1865 2004-08-10 Fernando Perez <fperez@colorado.edu>
1869 2004-08-10 Fernando Perez <fperez@colorado.edu>
1866
1870
1867 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1871 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1868
1872
1869 * iplib.py : Silence syntax error exceptions in tab-completion.
1873 * iplib.py : Silence syntax error exceptions in tab-completion.
1870
1874
1871 2004-08-05 Fernando Perez <fperez@colorado.edu>
1875 2004-08-05 Fernando Perez <fperez@colorado.edu>
1872
1876
1873 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1877 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1874 'color off' mark for continuation prompts. This was causing long
1878 'color off' mark for continuation prompts. This was causing long
1875 continuation lines to mis-wrap.
1879 continuation lines to mis-wrap.
1876
1880
1877 2004-08-01 Fernando Perez <fperez@colorado.edu>
1881 2004-08-01 Fernando Perez <fperez@colorado.edu>
1878
1882
1879 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1883 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1880 for building ipython to be a parameter. All this is necessary
1884 for building ipython to be a parameter. All this is necessary
1881 right now to have a multithreaded version, but this insane
1885 right now to have a multithreaded version, but this insane
1882 non-design will be cleaned up soon. For now, it's a hack that
1886 non-design will be cleaned up soon. For now, it's a hack that
1883 works.
1887 works.
1884
1888
1885 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1889 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1886 args in various places. No bugs so far, but it's a dangerous
1890 args in various places. No bugs so far, but it's a dangerous
1887 practice.
1891 practice.
1888
1892
1889 2004-07-31 Fernando Perez <fperez@colorado.edu>
1893 2004-07-31 Fernando Perez <fperez@colorado.edu>
1890
1894
1891 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1895 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1892 fix completion of files with dots in their names under most
1896 fix completion of files with dots in their names under most
1893 profiles (pysh was OK because the completion order is different).
1897 profiles (pysh was OK because the completion order is different).
1894
1898
1895 2004-07-27 Fernando Perez <fperez@colorado.edu>
1899 2004-07-27 Fernando Perez <fperez@colorado.edu>
1896
1900
1897 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1901 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1898 keywords manually, b/c the one in keyword.py was removed in python
1902 keywords manually, b/c the one in keyword.py was removed in python
1899 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1903 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1900 This is NOT a bug under python 2.3 and earlier.
1904 This is NOT a bug under python 2.3 and earlier.
1901
1905
1902 2004-07-26 Fernando Perez <fperez@colorado.edu>
1906 2004-07-26 Fernando Perez <fperez@colorado.edu>
1903
1907
1904 * IPython/ultraTB.py (VerboseTB.text): Add another
1908 * IPython/ultraTB.py (VerboseTB.text): Add another
1905 linecache.checkcache() call to try to prevent inspect.py from
1909 linecache.checkcache() call to try to prevent inspect.py from
1906 crashing under python 2.3. I think this fixes
1910 crashing under python 2.3. I think this fixes
1907 http://www.scipy.net/roundup/ipython/issue17.
1911 http://www.scipy.net/roundup/ipython/issue17.
1908
1912
1909 2004-07-26 *** Released version 0.6.2
1913 2004-07-26 *** Released version 0.6.2
1910
1914
1911 2004-07-26 Fernando Perez <fperez@colorado.edu>
1915 2004-07-26 Fernando Perez <fperez@colorado.edu>
1912
1916
1913 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1917 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1914 fail for any number.
1918 fail for any number.
1915 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1919 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1916 empty bookmarks.
1920 empty bookmarks.
1917
1921
1918 2004-07-26 *** Released version 0.6.1
1922 2004-07-26 *** Released version 0.6.1
1919
1923
1920 2004-07-26 Fernando Perez <fperez@colorado.edu>
1924 2004-07-26 Fernando Perez <fperez@colorado.edu>
1921
1925
1922 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1926 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1923
1927
1924 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1928 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1925 escaping '()[]{}' in filenames.
1929 escaping '()[]{}' in filenames.
1926
1930
1927 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1931 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1928 Python 2.2 users who lack a proper shlex.split.
1932 Python 2.2 users who lack a proper shlex.split.
1929
1933
1930 2004-07-19 Fernando Perez <fperez@colorado.edu>
1934 2004-07-19 Fernando Perez <fperez@colorado.edu>
1931
1935
1932 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1936 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1933 for reading readline's init file. I follow the normal chain:
1937 for reading readline's init file. I follow the normal chain:
1934 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1938 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1935 report by Mike Heeter. This closes
1939 report by Mike Heeter. This closes
1936 http://www.scipy.net/roundup/ipython/issue16.
1940 http://www.scipy.net/roundup/ipython/issue16.
1937
1941
1938 2004-07-18 Fernando Perez <fperez@colorado.edu>
1942 2004-07-18 Fernando Perez <fperez@colorado.edu>
1939
1943
1940 * IPython/iplib.py (__init__): Add better handling of '\' under
1944 * IPython/iplib.py (__init__): Add better handling of '\' under
1941 Win32 for filenames. After a patch by Ville.
1945 Win32 for filenames. After a patch by Ville.
1942
1946
1943 2004-07-17 Fernando Perez <fperez@colorado.edu>
1947 2004-07-17 Fernando Perez <fperez@colorado.edu>
1944
1948
1945 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1949 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1946 autocalling would be triggered for 'foo is bar' if foo is
1950 autocalling would be triggered for 'foo is bar' if foo is
1947 callable. I also cleaned up the autocall detection code to use a
1951 callable. I also cleaned up the autocall detection code to use a
1948 regexp, which is faster. Bug reported by Alexander Schmolck.
1952 regexp, which is faster. Bug reported by Alexander Schmolck.
1949
1953
1950 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1954 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1951 '?' in them would confuse the help system. Reported by Alex
1955 '?' in them would confuse the help system. Reported by Alex
1952 Schmolck.
1956 Schmolck.
1953
1957
1954 2004-07-16 Fernando Perez <fperez@colorado.edu>
1958 2004-07-16 Fernando Perez <fperez@colorado.edu>
1955
1959
1956 * IPython/GnuplotInteractive.py (__all__): added plot2.
1960 * IPython/GnuplotInteractive.py (__all__): added plot2.
1957
1961
1958 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1962 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1959 plotting dictionaries, lists or tuples of 1d arrays.
1963 plotting dictionaries, lists or tuples of 1d arrays.
1960
1964
1961 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1965 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1962 optimizations.
1966 optimizations.
1963
1967
1964 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1968 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1965 the information which was there from Janko's original IPP code:
1969 the information which was there from Janko's original IPP code:
1966
1970
1967 03.05.99 20:53 porto.ifm.uni-kiel.de
1971 03.05.99 20:53 porto.ifm.uni-kiel.de
1968 --Started changelog.
1972 --Started changelog.
1969 --make clear do what it say it does
1973 --make clear do what it say it does
1970 --added pretty output of lines from inputcache
1974 --added pretty output of lines from inputcache
1971 --Made Logger a mixin class, simplifies handling of switches
1975 --Made Logger a mixin class, simplifies handling of switches
1972 --Added own completer class. .string<TAB> expands to last history
1976 --Added own completer class. .string<TAB> expands to last history
1973 line which starts with string. The new expansion is also present
1977 line which starts with string. The new expansion is also present
1974 with Ctrl-r from the readline library. But this shows, who this
1978 with Ctrl-r from the readline library. But this shows, who this
1975 can be done for other cases.
1979 can be done for other cases.
1976 --Added convention that all shell functions should accept a
1980 --Added convention that all shell functions should accept a
1977 parameter_string This opens the door for different behaviour for
1981 parameter_string This opens the door for different behaviour for
1978 each function. @cd is a good example of this.
1982 each function. @cd is a good example of this.
1979
1983
1980 04.05.99 12:12 porto.ifm.uni-kiel.de
1984 04.05.99 12:12 porto.ifm.uni-kiel.de
1981 --added logfile rotation
1985 --added logfile rotation
1982 --added new mainloop method which freezes first the namespace
1986 --added new mainloop method which freezes first the namespace
1983
1987
1984 07.05.99 21:24 porto.ifm.uni-kiel.de
1988 07.05.99 21:24 porto.ifm.uni-kiel.de
1985 --added the docreader classes. Now there is a help system.
1989 --added the docreader classes. Now there is a help system.
1986 -This is only a first try. Currently it's not easy to put new
1990 -This is only a first try. Currently it's not easy to put new
1987 stuff in the indices. But this is the way to go. Info would be
1991 stuff in the indices. But this is the way to go. Info would be
1988 better, but HTML is every where and not everybody has an info
1992 better, but HTML is every where and not everybody has an info
1989 system installed and it's not so easy to change html-docs to info.
1993 system installed and it's not so easy to change html-docs to info.
1990 --added global logfile option
1994 --added global logfile option
1991 --there is now a hook for object inspection method pinfo needs to
1995 --there is now a hook for object inspection method pinfo needs to
1992 be provided for this. Can be reached by two '??'.
1996 be provided for this. Can be reached by two '??'.
1993
1997
1994 08.05.99 20:51 porto.ifm.uni-kiel.de
1998 08.05.99 20:51 porto.ifm.uni-kiel.de
1995 --added a README
1999 --added a README
1996 --bug in rc file. Something has changed so functions in the rc
2000 --bug in rc file. Something has changed so functions in the rc
1997 file need to reference the shell and not self. Not clear if it's a
2001 file need to reference the shell and not self. Not clear if it's a
1998 bug or feature.
2002 bug or feature.
1999 --changed rc file for new behavior
2003 --changed rc file for new behavior
2000
2004
2001 2004-07-15 Fernando Perez <fperez@colorado.edu>
2005 2004-07-15 Fernando Perez <fperez@colorado.edu>
2002
2006
2003 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2007 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2004 cache was falling out of sync in bizarre manners when multi-line
2008 cache was falling out of sync in bizarre manners when multi-line
2005 input was present. Minor optimizations and cleanup.
2009 input was present. Minor optimizations and cleanup.
2006
2010
2007 (Logger): Remove old Changelog info for cleanup. This is the
2011 (Logger): Remove old Changelog info for cleanup. This is the
2008 information which was there from Janko's original code:
2012 information which was there from Janko's original code:
2009
2013
2010 Changes to Logger: - made the default log filename a parameter
2014 Changes to Logger: - made the default log filename a parameter
2011
2015
2012 - put a check for lines beginning with !@? in log(). Needed
2016 - put a check for lines beginning with !@? in log(). Needed
2013 (even if the handlers properly log their lines) for mid-session
2017 (even if the handlers properly log their lines) for mid-session
2014 logging activation to work properly. Without this, lines logged
2018 logging activation to work properly. Without this, lines logged
2015 in mid session, which get read from the cache, would end up
2019 in mid session, which get read from the cache, would end up
2016 'bare' (with !@? in the open) in the log. Now they are caught
2020 'bare' (with !@? in the open) in the log. Now they are caught
2017 and prepended with a #.
2021 and prepended with a #.
2018
2022
2019 * IPython/iplib.py (InteractiveShell.init_readline): added check
2023 * IPython/iplib.py (InteractiveShell.init_readline): added check
2020 in case MagicCompleter fails to be defined, so we don't crash.
2024 in case MagicCompleter fails to be defined, so we don't crash.
2021
2025
2022 2004-07-13 Fernando Perez <fperez@colorado.edu>
2026 2004-07-13 Fernando Perez <fperez@colorado.edu>
2023
2027
2024 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2028 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2025 of EPS if the requested filename ends in '.eps'.
2029 of EPS if the requested filename ends in '.eps'.
2026
2030
2027 2004-07-04 Fernando Perez <fperez@colorado.edu>
2031 2004-07-04 Fernando Perez <fperez@colorado.edu>
2028
2032
2029 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2033 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2030 escaping of quotes when calling the shell.
2034 escaping of quotes when calling the shell.
2031
2035
2032 2004-07-02 Fernando Perez <fperez@colorado.edu>
2036 2004-07-02 Fernando Perez <fperez@colorado.edu>
2033
2037
2034 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2038 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2035 gettext not working because we were clobbering '_'. Fixes
2039 gettext not working because we were clobbering '_'. Fixes
2036 http://www.scipy.net/roundup/ipython/issue6.
2040 http://www.scipy.net/roundup/ipython/issue6.
2037
2041
2038 2004-07-01 Fernando Perez <fperez@colorado.edu>
2042 2004-07-01 Fernando Perez <fperez@colorado.edu>
2039
2043
2040 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2044 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2041 into @cd. Patch by Ville.
2045 into @cd. Patch by Ville.
2042
2046
2043 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2047 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2044 new function to store things after ipmaker runs. Patch by Ville.
2048 new function to store things after ipmaker runs. Patch by Ville.
2045 Eventually this will go away once ipmaker is removed and the class
2049 Eventually this will go away once ipmaker is removed and the class
2046 gets cleaned up, but for now it's ok. Key functionality here is
2050 gets cleaned up, but for now it's ok. Key functionality here is
2047 the addition of the persistent storage mechanism, a dict for
2051 the addition of the persistent storage mechanism, a dict for
2048 keeping data across sessions (for now just bookmarks, but more can
2052 keeping data across sessions (for now just bookmarks, but more can
2049 be implemented later).
2053 be implemented later).
2050
2054
2051 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2055 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2052 persistent across sections. Patch by Ville, I modified it
2056 persistent across sections. Patch by Ville, I modified it
2053 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2057 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2054 added a '-l' option to list all bookmarks.
2058 added a '-l' option to list all bookmarks.
2055
2059
2056 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2060 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2057 center for cleanup. Registered with atexit.register(). I moved
2061 center for cleanup. Registered with atexit.register(). I moved
2058 here the old exit_cleanup(). After a patch by Ville.
2062 here the old exit_cleanup(). After a patch by Ville.
2059
2063
2060 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2064 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2061 characters in the hacked shlex_split for python 2.2.
2065 characters in the hacked shlex_split for python 2.2.
2062
2066
2063 * IPython/iplib.py (file_matches): more fixes to filenames with
2067 * IPython/iplib.py (file_matches): more fixes to filenames with
2064 whitespace in them. It's not perfect, but limitations in python's
2068 whitespace in them. It's not perfect, but limitations in python's
2065 readline make it impossible to go further.
2069 readline make it impossible to go further.
2066
2070
2067 2004-06-29 Fernando Perez <fperez@colorado.edu>
2071 2004-06-29 Fernando Perez <fperez@colorado.edu>
2068
2072
2069 * IPython/iplib.py (file_matches): escape whitespace correctly in
2073 * IPython/iplib.py (file_matches): escape whitespace correctly in
2070 filename completions. Bug reported by Ville.
2074 filename completions. Bug reported by Ville.
2071
2075
2072 2004-06-28 Fernando Perez <fperez@colorado.edu>
2076 2004-06-28 Fernando Perez <fperez@colorado.edu>
2073
2077
2074 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2078 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2075 the history file will be called 'history-PROFNAME' (or just
2079 the history file will be called 'history-PROFNAME' (or just
2076 'history' if no profile is loaded). I was getting annoyed at
2080 'history' if no profile is loaded). I was getting annoyed at
2077 getting my Numerical work history clobbered by pysh sessions.
2081 getting my Numerical work history clobbered by pysh sessions.
2078
2082
2079 * IPython/iplib.py (InteractiveShell.__init__): Internal
2083 * IPython/iplib.py (InteractiveShell.__init__): Internal
2080 getoutputerror() function so that we can honor the system_verbose
2084 getoutputerror() function so that we can honor the system_verbose
2081 flag for _all_ system calls. I also added escaping of #
2085 flag for _all_ system calls. I also added escaping of #
2082 characters here to avoid confusing Itpl.
2086 characters here to avoid confusing Itpl.
2083
2087
2084 * IPython/Magic.py (shlex_split): removed call to shell in
2088 * IPython/Magic.py (shlex_split): removed call to shell in
2085 parse_options and replaced it with shlex.split(). The annoying
2089 parse_options and replaced it with shlex.split(). The annoying
2086 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2090 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2087 to backport it from 2.3, with several frail hacks (the shlex
2091 to backport it from 2.3, with several frail hacks (the shlex
2088 module is rather limited in 2.2). Thanks to a suggestion by Ville
2092 module is rather limited in 2.2). Thanks to a suggestion by Ville
2089 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2093 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2090 problem.
2094 problem.
2091
2095
2092 (Magic.magic_system_verbose): new toggle to print the actual
2096 (Magic.magic_system_verbose): new toggle to print the actual
2093 system calls made by ipython. Mainly for debugging purposes.
2097 system calls made by ipython. Mainly for debugging purposes.
2094
2098
2095 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2099 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2096 doesn't support persistence. Reported (and fix suggested) by
2100 doesn't support persistence. Reported (and fix suggested) by
2097 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2101 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2098
2102
2099 2004-06-26 Fernando Perez <fperez@colorado.edu>
2103 2004-06-26 Fernando Perez <fperez@colorado.edu>
2100
2104
2101 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2105 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2102 continue prompts.
2106 continue prompts.
2103
2107
2104 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2108 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2105 function (basically a big docstring) and a few more things here to
2109 function (basically a big docstring) and a few more things here to
2106 speedup startup. pysh.py is now very lightweight. We want because
2110 speedup startup. pysh.py is now very lightweight. We want because
2107 it gets execfile'd, while InterpreterExec gets imported, so
2111 it gets execfile'd, while InterpreterExec gets imported, so
2108 byte-compilation saves time.
2112 byte-compilation saves time.
2109
2113
2110 2004-06-25 Fernando Perez <fperez@colorado.edu>
2114 2004-06-25 Fernando Perez <fperez@colorado.edu>
2111
2115
2112 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2116 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2113 -NUM', which was recently broken.
2117 -NUM', which was recently broken.
2114
2118
2115 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2119 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2116 in multi-line input (but not !!, which doesn't make sense there).
2120 in multi-line input (but not !!, which doesn't make sense there).
2117
2121
2118 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2122 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2119 It's just too useful, and people can turn it off in the less
2123 It's just too useful, and people can turn it off in the less
2120 common cases where it's a problem.
2124 common cases where it's a problem.
2121
2125
2122 2004-06-24 Fernando Perez <fperez@colorado.edu>
2126 2004-06-24 Fernando Perez <fperez@colorado.edu>
2123
2127
2124 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2128 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2125 special syntaxes (like alias calling) is now allied in multi-line
2129 special syntaxes (like alias calling) is now allied in multi-line
2126 input. This is still _very_ experimental, but it's necessary for
2130 input. This is still _very_ experimental, but it's necessary for
2127 efficient shell usage combining python looping syntax with system
2131 efficient shell usage combining python looping syntax with system
2128 calls. For now it's restricted to aliases, I don't think it
2132 calls. For now it's restricted to aliases, I don't think it
2129 really even makes sense to have this for magics.
2133 really even makes sense to have this for magics.
2130
2134
2131 2004-06-23 Fernando Perez <fperez@colorado.edu>
2135 2004-06-23 Fernando Perez <fperez@colorado.edu>
2132
2136
2133 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2137 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2134 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2138 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2135
2139
2136 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2140 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2137 extensions under Windows (after code sent by Gary Bishop). The
2141 extensions under Windows (after code sent by Gary Bishop). The
2138 extensions considered 'executable' are stored in IPython's rc
2142 extensions considered 'executable' are stored in IPython's rc
2139 structure as win_exec_ext.
2143 structure as win_exec_ext.
2140
2144
2141 * IPython/genutils.py (shell): new function, like system() but
2145 * IPython/genutils.py (shell): new function, like system() but
2142 without return value. Very useful for interactive shell work.
2146 without return value. Very useful for interactive shell work.
2143
2147
2144 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2148 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2145 delete aliases.
2149 delete aliases.
2146
2150
2147 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2151 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2148 sure that the alias table doesn't contain python keywords.
2152 sure that the alias table doesn't contain python keywords.
2149
2153
2150 2004-06-21 Fernando Perez <fperez@colorado.edu>
2154 2004-06-21 Fernando Perez <fperez@colorado.edu>
2151
2155
2152 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2156 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2153 non-existent items are found in $PATH. Reported by Thorsten.
2157 non-existent items are found in $PATH. Reported by Thorsten.
2154
2158
2155 2004-06-20 Fernando Perez <fperez@colorado.edu>
2159 2004-06-20 Fernando Perez <fperez@colorado.edu>
2156
2160
2157 * IPython/iplib.py (complete): modified the completer so that the
2161 * IPython/iplib.py (complete): modified the completer so that the
2158 order of priorities can be easily changed at runtime.
2162 order of priorities can be easily changed at runtime.
2159
2163
2160 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2164 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2161 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2165 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2162
2166
2163 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2167 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2164 expand Python variables prepended with $ in all system calls. The
2168 expand Python variables prepended with $ in all system calls. The
2165 same was done to InteractiveShell.handle_shell_escape. Now all
2169 same was done to InteractiveShell.handle_shell_escape. Now all
2166 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2170 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2167 expansion of python variables and expressions according to the
2171 expansion of python variables and expressions according to the
2168 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2172 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2169
2173
2170 Though PEP-215 has been rejected, a similar (but simpler) one
2174 Though PEP-215 has been rejected, a similar (but simpler) one
2171 seems like it will go into Python 2.4, PEP-292 -
2175 seems like it will go into Python 2.4, PEP-292 -
2172 http://www.python.org/peps/pep-0292.html.
2176 http://www.python.org/peps/pep-0292.html.
2173
2177
2174 I'll keep the full syntax of PEP-215, since IPython has since the
2178 I'll keep the full syntax of PEP-215, since IPython has since the
2175 start used Ka-Ping Yee's reference implementation discussed there
2179 start used Ka-Ping Yee's reference implementation discussed there
2176 (Itpl), and I actually like the powerful semantics it offers.
2180 (Itpl), and I actually like the powerful semantics it offers.
2177
2181
2178 In order to access normal shell variables, the $ has to be escaped
2182 In order to access normal shell variables, the $ has to be escaped
2179 via an extra $. For example:
2183 via an extra $. For example:
2180
2184
2181 In [7]: PATH='a python variable'
2185 In [7]: PATH='a python variable'
2182
2186
2183 In [8]: !echo $PATH
2187 In [8]: !echo $PATH
2184 a python variable
2188 a python variable
2185
2189
2186 In [9]: !echo $$PATH
2190 In [9]: !echo $$PATH
2187 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2191 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2188
2192
2189 (Magic.parse_options): escape $ so the shell doesn't evaluate
2193 (Magic.parse_options): escape $ so the shell doesn't evaluate
2190 things prematurely.
2194 things prematurely.
2191
2195
2192 * IPython/iplib.py (InteractiveShell.call_alias): added the
2196 * IPython/iplib.py (InteractiveShell.call_alias): added the
2193 ability for aliases to expand python variables via $.
2197 ability for aliases to expand python variables via $.
2194
2198
2195 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2199 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2196 system, now there's a @rehash/@rehashx pair of magics. These work
2200 system, now there's a @rehash/@rehashx pair of magics. These work
2197 like the csh rehash command, and can be invoked at any time. They
2201 like the csh rehash command, and can be invoked at any time. They
2198 build a table of aliases to everything in the user's $PATH
2202 build a table of aliases to everything in the user's $PATH
2199 (@rehash uses everything, @rehashx is slower but only adds
2203 (@rehash uses everything, @rehashx is slower but only adds
2200 executable files). With this, the pysh.py-based shell profile can
2204 executable files). With this, the pysh.py-based shell profile can
2201 now simply call rehash upon startup, and full access to all
2205 now simply call rehash upon startup, and full access to all
2202 programs in the user's path is obtained.
2206 programs in the user's path is obtained.
2203
2207
2204 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2208 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2205 functionality is now fully in place. I removed the old dynamic
2209 functionality is now fully in place. I removed the old dynamic
2206 code generation based approach, in favor of a much lighter one
2210 code generation based approach, in favor of a much lighter one
2207 based on a simple dict. The advantage is that this allows me to
2211 based on a simple dict. The advantage is that this allows me to
2208 now have thousands of aliases with negligible cost (unthinkable
2212 now have thousands of aliases with negligible cost (unthinkable
2209 with the old system).
2213 with the old system).
2210
2214
2211 2004-06-19 Fernando Perez <fperez@colorado.edu>
2215 2004-06-19 Fernando Perez <fperez@colorado.edu>
2212
2216
2213 * IPython/iplib.py (__init__): extended MagicCompleter class to
2217 * IPython/iplib.py (__init__): extended MagicCompleter class to
2214 also complete (last in priority) on user aliases.
2218 also complete (last in priority) on user aliases.
2215
2219
2216 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2220 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2217 call to eval.
2221 call to eval.
2218 (ItplNS.__init__): Added a new class which functions like Itpl,
2222 (ItplNS.__init__): Added a new class which functions like Itpl,
2219 but allows configuring the namespace for the evaluation to occur
2223 but allows configuring the namespace for the evaluation to occur
2220 in.
2224 in.
2221
2225
2222 2004-06-18 Fernando Perez <fperez@colorado.edu>
2226 2004-06-18 Fernando Perez <fperez@colorado.edu>
2223
2227
2224 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2228 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2225 better message when 'exit' or 'quit' are typed (a common newbie
2229 better message when 'exit' or 'quit' are typed (a common newbie
2226 confusion).
2230 confusion).
2227
2231
2228 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2232 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2229 check for Windows users.
2233 check for Windows users.
2230
2234
2231 * IPython/iplib.py (InteractiveShell.user_setup): removed
2235 * IPython/iplib.py (InteractiveShell.user_setup): removed
2232 disabling of colors for Windows. I'll test at runtime and issue a
2236 disabling of colors for Windows. I'll test at runtime and issue a
2233 warning if Gary's readline isn't found, as to nudge users to
2237 warning if Gary's readline isn't found, as to nudge users to
2234 download it.
2238 download it.
2235
2239
2236 2004-06-16 Fernando Perez <fperez@colorado.edu>
2240 2004-06-16 Fernando Perez <fperez@colorado.edu>
2237
2241
2238 * IPython/genutils.py (Stream.__init__): changed to print errors
2242 * IPython/genutils.py (Stream.__init__): changed to print errors
2239 to sys.stderr. I had a circular dependency here. Now it's
2243 to sys.stderr. I had a circular dependency here. Now it's
2240 possible to run ipython as IDLE's shell (consider this pre-alpha,
2244 possible to run ipython as IDLE's shell (consider this pre-alpha,
2241 since true stdout things end up in the starting terminal instead
2245 since true stdout things end up in the starting terminal instead
2242 of IDLE's out).
2246 of IDLE's out).
2243
2247
2244 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2248 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2245 users who haven't # updated their prompt_in2 definitions. Remove
2249 users who haven't # updated their prompt_in2 definitions. Remove
2246 eventually.
2250 eventually.
2247 (multiple_replace): added credit to original ASPN recipe.
2251 (multiple_replace): added credit to original ASPN recipe.
2248
2252
2249 2004-06-15 Fernando Perez <fperez@colorado.edu>
2253 2004-06-15 Fernando Perez <fperez@colorado.edu>
2250
2254
2251 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2255 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2252 list of auto-defined aliases.
2256 list of auto-defined aliases.
2253
2257
2254 2004-06-13 Fernando Perez <fperez@colorado.edu>
2258 2004-06-13 Fernando Perez <fperez@colorado.edu>
2255
2259
2256 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2260 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2257 install was really requested (so setup.py can be used for other
2261 install was really requested (so setup.py can be used for other
2258 things under Windows).
2262 things under Windows).
2259
2263
2260 2004-06-10 Fernando Perez <fperez@colorado.edu>
2264 2004-06-10 Fernando Perez <fperez@colorado.edu>
2261
2265
2262 * IPython/Logger.py (Logger.create_log): Manually remove any old
2266 * IPython/Logger.py (Logger.create_log): Manually remove any old
2263 backup, since os.remove may fail under Windows. Fixes bug
2267 backup, since os.remove may fail under Windows. Fixes bug
2264 reported by Thorsten.
2268 reported by Thorsten.
2265
2269
2266 2004-06-09 Fernando Perez <fperez@colorado.edu>
2270 2004-06-09 Fernando Perez <fperez@colorado.edu>
2267
2271
2268 * examples/example-embed.py: fixed all references to %n (replaced
2272 * examples/example-embed.py: fixed all references to %n (replaced
2269 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2273 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2270 for all examples and the manual as well.
2274 for all examples and the manual as well.
2271
2275
2272 2004-06-08 Fernando Perez <fperez@colorado.edu>
2276 2004-06-08 Fernando Perez <fperez@colorado.edu>
2273
2277
2274 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2278 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2275 alignment and color management. All 3 prompt subsystems now
2279 alignment and color management. All 3 prompt subsystems now
2276 inherit from BasePrompt.
2280 inherit from BasePrompt.
2277
2281
2278 * tools/release: updates for windows installer build and tag rpms
2282 * tools/release: updates for windows installer build and tag rpms
2279 with python version (since paths are fixed).
2283 with python version (since paths are fixed).
2280
2284
2281 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2285 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2282 which will become eventually obsolete. Also fixed the default
2286 which will become eventually obsolete. Also fixed the default
2283 prompt_in2 to use \D, so at least new users start with the correct
2287 prompt_in2 to use \D, so at least new users start with the correct
2284 defaults.
2288 defaults.
2285 WARNING: Users with existing ipythonrc files will need to apply
2289 WARNING: Users with existing ipythonrc files will need to apply
2286 this fix manually!
2290 this fix manually!
2287
2291
2288 * setup.py: make windows installer (.exe). This is finally the
2292 * setup.py: make windows installer (.exe). This is finally the
2289 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2293 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2290 which I hadn't included because it required Python 2.3 (or recent
2294 which I hadn't included because it required Python 2.3 (or recent
2291 distutils).
2295 distutils).
2292
2296
2293 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2297 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2294 usage of new '\D' escape.
2298 usage of new '\D' escape.
2295
2299
2296 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2300 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2297 lacks os.getuid())
2301 lacks os.getuid())
2298 (CachedOutput.set_colors): Added the ability to turn coloring
2302 (CachedOutput.set_colors): Added the ability to turn coloring
2299 on/off with @colors even for manually defined prompt colors. It
2303 on/off with @colors even for manually defined prompt colors. It
2300 uses a nasty global, but it works safely and via the generic color
2304 uses a nasty global, but it works safely and via the generic color
2301 handling mechanism.
2305 handling mechanism.
2302 (Prompt2.__init__): Introduced new escape '\D' for continuation
2306 (Prompt2.__init__): Introduced new escape '\D' for continuation
2303 prompts. It represents the counter ('\#') as dots.
2307 prompts. It represents the counter ('\#') as dots.
2304 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2308 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2305 need to update their ipythonrc files and replace '%n' with '\D' in
2309 need to update their ipythonrc files and replace '%n' with '\D' in
2306 their prompt_in2 settings everywhere. Sorry, but there's
2310 their prompt_in2 settings everywhere. Sorry, but there's
2307 otherwise no clean way to get all prompts to properly align. The
2311 otherwise no clean way to get all prompts to properly align. The
2308 ipythonrc shipped with IPython has been updated.
2312 ipythonrc shipped with IPython has been updated.
2309
2313
2310 2004-06-07 Fernando Perez <fperez@colorado.edu>
2314 2004-06-07 Fernando Perez <fperez@colorado.edu>
2311
2315
2312 * setup.py (isfile): Pass local_icons option to latex2html, so the
2316 * setup.py (isfile): Pass local_icons option to latex2html, so the
2313 resulting HTML file is self-contained. Thanks to
2317 resulting HTML file is self-contained. Thanks to
2314 dryice-AT-liu.com.cn for the tip.
2318 dryice-AT-liu.com.cn for the tip.
2315
2319
2316 * pysh.py: I created a new profile 'shell', which implements a
2320 * pysh.py: I created a new profile 'shell', which implements a
2317 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2321 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2318 system shell, nor will it become one anytime soon. It's mainly
2322 system shell, nor will it become one anytime soon. It's mainly
2319 meant to illustrate the use of the new flexible bash-like prompts.
2323 meant to illustrate the use of the new flexible bash-like prompts.
2320 I guess it could be used by hardy souls for true shell management,
2324 I guess it could be used by hardy souls for true shell management,
2321 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2325 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2322 profile. This uses the InterpreterExec extension provided by
2326 profile. This uses the InterpreterExec extension provided by
2323 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2327 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2324
2328
2325 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2329 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2326 auto-align itself with the length of the previous input prompt
2330 auto-align itself with the length of the previous input prompt
2327 (taking into account the invisible color escapes).
2331 (taking into account the invisible color escapes).
2328 (CachedOutput.__init__): Large restructuring of this class. Now
2332 (CachedOutput.__init__): Large restructuring of this class. Now
2329 all three prompts (primary1, primary2, output) are proper objects,
2333 all three prompts (primary1, primary2, output) are proper objects,
2330 managed by the 'parent' CachedOutput class. The code is still a
2334 managed by the 'parent' CachedOutput class. The code is still a
2331 bit hackish (all prompts share state via a pointer to the cache),
2335 bit hackish (all prompts share state via a pointer to the cache),
2332 but it's overall far cleaner than before.
2336 but it's overall far cleaner than before.
2333
2337
2334 * IPython/genutils.py (getoutputerror): modified to add verbose,
2338 * IPython/genutils.py (getoutputerror): modified to add verbose,
2335 debug and header options. This makes the interface of all getout*
2339 debug and header options. This makes the interface of all getout*
2336 functions uniform.
2340 functions uniform.
2337 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2341 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2338
2342
2339 * IPython/Magic.py (Magic.default_option): added a function to
2343 * IPython/Magic.py (Magic.default_option): added a function to
2340 allow registering default options for any magic command. This
2344 allow registering default options for any magic command. This
2341 makes it easy to have profiles which customize the magics globally
2345 makes it easy to have profiles which customize the magics globally
2342 for a certain use. The values set through this function are
2346 for a certain use. The values set through this function are
2343 picked up by the parse_options() method, which all magics should
2347 picked up by the parse_options() method, which all magics should
2344 use to parse their options.
2348 use to parse their options.
2345
2349
2346 * IPython/genutils.py (warn): modified the warnings framework to
2350 * IPython/genutils.py (warn): modified the warnings framework to
2347 use the Term I/O class. I'm trying to slowly unify all of
2351 use the Term I/O class. I'm trying to slowly unify all of
2348 IPython's I/O operations to pass through Term.
2352 IPython's I/O operations to pass through Term.
2349
2353
2350 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2354 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2351 the secondary prompt to correctly match the length of the primary
2355 the secondary prompt to correctly match the length of the primary
2352 one for any prompt. Now multi-line code will properly line up
2356 one for any prompt. Now multi-line code will properly line up
2353 even for path dependent prompts, such as the new ones available
2357 even for path dependent prompts, such as the new ones available
2354 via the prompt_specials.
2358 via the prompt_specials.
2355
2359
2356 2004-06-06 Fernando Perez <fperez@colorado.edu>
2360 2004-06-06 Fernando Perez <fperez@colorado.edu>
2357
2361
2358 * IPython/Prompts.py (prompt_specials): Added the ability to have
2362 * IPython/Prompts.py (prompt_specials): Added the ability to have
2359 bash-like special sequences in the prompts, which get
2363 bash-like special sequences in the prompts, which get
2360 automatically expanded. Things like hostname, current working
2364 automatically expanded. Things like hostname, current working
2361 directory and username are implemented already, but it's easy to
2365 directory and username are implemented already, but it's easy to
2362 add more in the future. Thanks to a patch by W.J. van der Laan
2366 add more in the future. Thanks to a patch by W.J. van der Laan
2363 <gnufnork-AT-hetdigitalegat.nl>
2367 <gnufnork-AT-hetdigitalegat.nl>
2364 (prompt_specials): Added color support for prompt strings, so
2368 (prompt_specials): Added color support for prompt strings, so
2365 users can define arbitrary color setups for their prompts.
2369 users can define arbitrary color setups for their prompts.
2366
2370
2367 2004-06-05 Fernando Perez <fperez@colorado.edu>
2371 2004-06-05 Fernando Perez <fperez@colorado.edu>
2368
2372
2369 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2373 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2370 code to load Gary Bishop's readline and configure it
2374 code to load Gary Bishop's readline and configure it
2371 automatically. Thanks to Gary for help on this.
2375 automatically. Thanks to Gary for help on this.
2372
2376
2373 2004-06-01 Fernando Perez <fperez@colorado.edu>
2377 2004-06-01 Fernando Perez <fperez@colorado.edu>
2374
2378
2375 * IPython/Logger.py (Logger.create_log): fix bug for logging
2379 * IPython/Logger.py (Logger.create_log): fix bug for logging
2376 with no filename (previous fix was incomplete).
2380 with no filename (previous fix was incomplete).
2377
2381
2378 2004-05-25 Fernando Perez <fperez@colorado.edu>
2382 2004-05-25 Fernando Perez <fperez@colorado.edu>
2379
2383
2380 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2384 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2381 parens would get passed to the shell.
2385 parens would get passed to the shell.
2382
2386
2383 2004-05-20 Fernando Perez <fperez@colorado.edu>
2387 2004-05-20 Fernando Perez <fperez@colorado.edu>
2384
2388
2385 * IPython/Magic.py (Magic.magic_prun): changed default profile
2389 * IPython/Magic.py (Magic.magic_prun): changed default profile
2386 sort order to 'time' (the more common profiling need).
2390 sort order to 'time' (the more common profiling need).
2387
2391
2388 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2392 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2389 so that source code shown is guaranteed in sync with the file on
2393 so that source code shown is guaranteed in sync with the file on
2390 disk (also changed in psource). Similar fix to the one for
2394 disk (also changed in psource). Similar fix to the one for
2391 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2395 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2392 <yann.ledu-AT-noos.fr>.
2396 <yann.ledu-AT-noos.fr>.
2393
2397
2394 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2398 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2395 with a single option would not be correctly parsed. Closes
2399 with a single option would not be correctly parsed. Closes
2396 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2400 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2397 introduced in 0.6.0 (on 2004-05-06).
2401 introduced in 0.6.0 (on 2004-05-06).
2398
2402
2399 2004-05-13 *** Released version 0.6.0
2403 2004-05-13 *** Released version 0.6.0
2400
2404
2401 2004-05-13 Fernando Perez <fperez@colorado.edu>
2405 2004-05-13 Fernando Perez <fperez@colorado.edu>
2402
2406
2403 * debian/: Added debian/ directory to CVS, so that debian support
2407 * debian/: Added debian/ directory to CVS, so that debian support
2404 is publicly accessible. The debian package is maintained by Jack
2408 is publicly accessible. The debian package is maintained by Jack
2405 Moffit <jack-AT-xiph.org>.
2409 Moffit <jack-AT-xiph.org>.
2406
2410
2407 * Documentation: included the notes about an ipython-based system
2411 * Documentation: included the notes about an ipython-based system
2408 shell (the hypothetical 'pysh') into the new_design.pdf document,
2412 shell (the hypothetical 'pysh') into the new_design.pdf document,
2409 so that these ideas get distributed to users along with the
2413 so that these ideas get distributed to users along with the
2410 official documentation.
2414 official documentation.
2411
2415
2412 2004-05-10 Fernando Perez <fperez@colorado.edu>
2416 2004-05-10 Fernando Perez <fperez@colorado.edu>
2413
2417
2414 * IPython/Logger.py (Logger.create_log): fix recently introduced
2418 * IPython/Logger.py (Logger.create_log): fix recently introduced
2415 bug (misindented line) where logstart would fail when not given an
2419 bug (misindented line) where logstart would fail when not given an
2416 explicit filename.
2420 explicit filename.
2417
2421
2418 2004-05-09 Fernando Perez <fperez@colorado.edu>
2422 2004-05-09 Fernando Perez <fperez@colorado.edu>
2419
2423
2420 * IPython/Magic.py (Magic.parse_options): skip system call when
2424 * IPython/Magic.py (Magic.parse_options): skip system call when
2421 there are no options to look for. Faster, cleaner for the common
2425 there are no options to look for. Faster, cleaner for the common
2422 case.
2426 case.
2423
2427
2424 * Documentation: many updates to the manual: describing Windows
2428 * Documentation: many updates to the manual: describing Windows
2425 support better, Gnuplot updates, credits, misc small stuff. Also
2429 support better, Gnuplot updates, credits, misc small stuff. Also
2426 updated the new_design doc a bit.
2430 updated the new_design doc a bit.
2427
2431
2428 2004-05-06 *** Released version 0.6.0.rc1
2432 2004-05-06 *** Released version 0.6.0.rc1
2429
2433
2430 2004-05-06 Fernando Perez <fperez@colorado.edu>
2434 2004-05-06 Fernando Perez <fperez@colorado.edu>
2431
2435
2432 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2436 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2433 operations to use the vastly more efficient list/''.join() method.
2437 operations to use the vastly more efficient list/''.join() method.
2434 (FormattedTB.text): Fix
2438 (FormattedTB.text): Fix
2435 http://www.scipy.net/roundup/ipython/issue12 - exception source
2439 http://www.scipy.net/roundup/ipython/issue12 - exception source
2436 extract not updated after reload. Thanks to Mike Salib
2440 extract not updated after reload. Thanks to Mike Salib
2437 <msalib-AT-mit.edu> for pinning the source of the problem.
2441 <msalib-AT-mit.edu> for pinning the source of the problem.
2438 Fortunately, the solution works inside ipython and doesn't require
2442 Fortunately, the solution works inside ipython and doesn't require
2439 any changes to python proper.
2443 any changes to python proper.
2440
2444
2441 * IPython/Magic.py (Magic.parse_options): Improved to process the
2445 * IPython/Magic.py (Magic.parse_options): Improved to process the
2442 argument list as a true shell would (by actually using the
2446 argument list as a true shell would (by actually using the
2443 underlying system shell). This way, all @magics automatically get
2447 underlying system shell). This way, all @magics automatically get
2444 shell expansion for variables. Thanks to a comment by Alex
2448 shell expansion for variables. Thanks to a comment by Alex
2445 Schmolck.
2449 Schmolck.
2446
2450
2447 2004-04-04 Fernando Perez <fperez@colorado.edu>
2451 2004-04-04 Fernando Perez <fperez@colorado.edu>
2448
2452
2449 * IPython/iplib.py (InteractiveShell.interact): Added a special
2453 * IPython/iplib.py (InteractiveShell.interact): Added a special
2450 trap for a debugger quit exception, which is basically impossible
2454 trap for a debugger quit exception, which is basically impossible
2451 to handle by normal mechanisms, given what pdb does to the stack.
2455 to handle by normal mechanisms, given what pdb does to the stack.
2452 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2456 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2453
2457
2454 2004-04-03 Fernando Perez <fperez@colorado.edu>
2458 2004-04-03 Fernando Perez <fperez@colorado.edu>
2455
2459
2456 * IPython/genutils.py (Term): Standardized the names of the Term
2460 * IPython/genutils.py (Term): Standardized the names of the Term
2457 class streams to cin/cout/cerr, following C++ naming conventions
2461 class streams to cin/cout/cerr, following C++ naming conventions
2458 (I can't use in/out/err because 'in' is not a valid attribute
2462 (I can't use in/out/err because 'in' is not a valid attribute
2459 name).
2463 name).
2460
2464
2461 * IPython/iplib.py (InteractiveShell.interact): don't increment
2465 * IPython/iplib.py (InteractiveShell.interact): don't increment
2462 the prompt if there's no user input. By Daniel 'Dang' Griffith
2466 the prompt if there's no user input. By Daniel 'Dang' Griffith
2463 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2467 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2464 Francois Pinard.
2468 Francois Pinard.
2465
2469
2466 2004-04-02 Fernando Perez <fperez@colorado.edu>
2470 2004-04-02 Fernando Perez <fperez@colorado.edu>
2467
2471
2468 * IPython/genutils.py (Stream.__init__): Modified to survive at
2472 * IPython/genutils.py (Stream.__init__): Modified to survive at
2469 least importing in contexts where stdin/out/err aren't true file
2473 least importing in contexts where stdin/out/err aren't true file
2470 objects, such as PyCrust (they lack fileno() and mode). However,
2474 objects, such as PyCrust (they lack fileno() and mode). However,
2471 the recovery facilities which rely on these things existing will
2475 the recovery facilities which rely on these things existing will
2472 not work.
2476 not work.
2473
2477
2474 2004-04-01 Fernando Perez <fperez@colorado.edu>
2478 2004-04-01 Fernando Perez <fperez@colorado.edu>
2475
2479
2476 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2480 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2477 use the new getoutputerror() function, so it properly
2481 use the new getoutputerror() function, so it properly
2478 distinguishes stdout/err.
2482 distinguishes stdout/err.
2479
2483
2480 * IPython/genutils.py (getoutputerror): added a function to
2484 * IPython/genutils.py (getoutputerror): added a function to
2481 capture separately the standard output and error of a command.
2485 capture separately the standard output and error of a command.
2482 After a comment from dang on the mailing lists. This code is
2486 After a comment from dang on the mailing lists. This code is
2483 basically a modified version of commands.getstatusoutput(), from
2487 basically a modified version of commands.getstatusoutput(), from
2484 the standard library.
2488 the standard library.
2485
2489
2486 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2490 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2487 '!!' as a special syntax (shorthand) to access @sx.
2491 '!!' as a special syntax (shorthand) to access @sx.
2488
2492
2489 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2493 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2490 command and return its output as a list split on '\n'.
2494 command and return its output as a list split on '\n'.
2491
2495
2492 2004-03-31 Fernando Perez <fperez@colorado.edu>
2496 2004-03-31 Fernando Perez <fperez@colorado.edu>
2493
2497
2494 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2498 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2495 method to dictionaries used as FakeModule instances if they lack
2499 method to dictionaries used as FakeModule instances if they lack
2496 it. At least pydoc in python2.3 breaks for runtime-defined
2500 it. At least pydoc in python2.3 breaks for runtime-defined
2497 functions without this hack. At some point I need to _really_
2501 functions without this hack. At some point I need to _really_
2498 understand what FakeModule is doing, because it's a gross hack.
2502 understand what FakeModule is doing, because it's a gross hack.
2499 But it solves Arnd's problem for now...
2503 But it solves Arnd's problem for now...
2500
2504
2501 2004-02-27 Fernando Perez <fperez@colorado.edu>
2505 2004-02-27 Fernando Perez <fperez@colorado.edu>
2502
2506
2503 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2507 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2504 mode would behave erratically. Also increased the number of
2508 mode would behave erratically. Also increased the number of
2505 possible logs in rotate mod to 999. Thanks to Rod Holland
2509 possible logs in rotate mod to 999. Thanks to Rod Holland
2506 <rhh@StructureLABS.com> for the report and fixes.
2510 <rhh@StructureLABS.com> for the report and fixes.
2507
2511
2508 2004-02-26 Fernando Perez <fperez@colorado.edu>
2512 2004-02-26 Fernando Perez <fperez@colorado.edu>
2509
2513
2510 * IPython/genutils.py (page): Check that the curses module really
2514 * IPython/genutils.py (page): Check that the curses module really
2511 has the initscr attribute before trying to use it. For some
2515 has the initscr attribute before trying to use it. For some
2512 reason, the Solaris curses module is missing this. I think this
2516 reason, the Solaris curses module is missing this. I think this
2513 should be considered a Solaris python bug, but I'm not sure.
2517 should be considered a Solaris python bug, but I'm not sure.
2514
2518
2515 2004-01-17 Fernando Perez <fperez@colorado.edu>
2519 2004-01-17 Fernando Perez <fperez@colorado.edu>
2516
2520
2517 * IPython/genutils.py (Stream.__init__): Changes to try to make
2521 * IPython/genutils.py (Stream.__init__): Changes to try to make
2518 ipython robust against stdin/out/err being closed by the user.
2522 ipython robust against stdin/out/err being closed by the user.
2519 This is 'user error' (and blocks a normal python session, at least
2523 This is 'user error' (and blocks a normal python session, at least
2520 the stdout case). However, Ipython should be able to survive such
2524 the stdout case). However, Ipython should be able to survive such
2521 instances of abuse as gracefully as possible. To simplify the
2525 instances of abuse as gracefully as possible. To simplify the
2522 coding and maintain compatibility with Gary Bishop's Term
2526 coding and maintain compatibility with Gary Bishop's Term
2523 contributions, I've made use of classmethods for this. I think
2527 contributions, I've made use of classmethods for this. I think
2524 this introduces a dependency on python 2.2.
2528 this introduces a dependency on python 2.2.
2525
2529
2526 2004-01-13 Fernando Perez <fperez@colorado.edu>
2530 2004-01-13 Fernando Perez <fperez@colorado.edu>
2527
2531
2528 * IPython/numutils.py (exp_safe): simplified the code a bit and
2532 * IPython/numutils.py (exp_safe): simplified the code a bit and
2529 removed the need for importing the kinds module altogether.
2533 removed the need for importing the kinds module altogether.
2530
2534
2531 2004-01-06 Fernando Perez <fperez@colorado.edu>
2535 2004-01-06 Fernando Perez <fperez@colorado.edu>
2532
2536
2533 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2537 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2534 a magic function instead, after some community feedback. No
2538 a magic function instead, after some community feedback. No
2535 special syntax will exist for it, but its name is deliberately
2539 special syntax will exist for it, but its name is deliberately
2536 very short.
2540 very short.
2537
2541
2538 2003-12-20 Fernando Perez <fperez@colorado.edu>
2542 2003-12-20 Fernando Perez <fperez@colorado.edu>
2539
2543
2540 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2544 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2541 new functionality, to automagically assign the result of a shell
2545 new functionality, to automagically assign the result of a shell
2542 command to a variable. I'll solicit some community feedback on
2546 command to a variable. I'll solicit some community feedback on
2543 this before making it permanent.
2547 this before making it permanent.
2544
2548
2545 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2549 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2546 requested about callables for which inspect couldn't obtain a
2550 requested about callables for which inspect couldn't obtain a
2547 proper argspec. Thanks to a crash report sent by Etienne
2551 proper argspec. Thanks to a crash report sent by Etienne
2548 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2552 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2549
2553
2550 2003-12-09 Fernando Perez <fperez@colorado.edu>
2554 2003-12-09 Fernando Perez <fperez@colorado.edu>
2551
2555
2552 * IPython/genutils.py (page): patch for the pager to work across
2556 * IPython/genutils.py (page): patch for the pager to work across
2553 various versions of Windows. By Gary Bishop.
2557 various versions of Windows. By Gary Bishop.
2554
2558
2555 2003-12-04 Fernando Perez <fperez@colorado.edu>
2559 2003-12-04 Fernando Perez <fperez@colorado.edu>
2556
2560
2557 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2561 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2558 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2562 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2559 While I tested this and it looks ok, there may still be corner
2563 While I tested this and it looks ok, there may still be corner
2560 cases I've missed.
2564 cases I've missed.
2561
2565
2562 2003-12-01 Fernando Perez <fperez@colorado.edu>
2566 2003-12-01 Fernando Perez <fperez@colorado.edu>
2563
2567
2564 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2568 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2565 where a line like 'p,q=1,2' would fail because the automagic
2569 where a line like 'p,q=1,2' would fail because the automagic
2566 system would be triggered for @p.
2570 system would be triggered for @p.
2567
2571
2568 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2572 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2569 cleanups, code unmodified.
2573 cleanups, code unmodified.
2570
2574
2571 * IPython/genutils.py (Term): added a class for IPython to handle
2575 * IPython/genutils.py (Term): added a class for IPython to handle
2572 output. In most cases it will just be a proxy for stdout/err, but
2576 output. In most cases it will just be a proxy for stdout/err, but
2573 having this allows modifications to be made for some platforms,
2577 having this allows modifications to be made for some platforms,
2574 such as handling color escapes under Windows. All of this code
2578 such as handling color escapes under Windows. All of this code
2575 was contributed by Gary Bishop, with minor modifications by me.
2579 was contributed by Gary Bishop, with minor modifications by me.
2576 The actual changes affect many files.
2580 The actual changes affect many files.
2577
2581
2578 2003-11-30 Fernando Perez <fperez@colorado.edu>
2582 2003-11-30 Fernando Perez <fperez@colorado.edu>
2579
2583
2580 * IPython/iplib.py (file_matches): new completion code, courtesy
2584 * IPython/iplib.py (file_matches): new completion code, courtesy
2581 of Jeff Collins. This enables filename completion again under
2585 of Jeff Collins. This enables filename completion again under
2582 python 2.3, which disabled it at the C level.
2586 python 2.3, which disabled it at the C level.
2583
2587
2584 2003-11-11 Fernando Perez <fperez@colorado.edu>
2588 2003-11-11 Fernando Perez <fperez@colorado.edu>
2585
2589
2586 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2590 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2587 for Numeric.array(map(...)), but often convenient.
2591 for Numeric.array(map(...)), but often convenient.
2588
2592
2589 2003-11-05 Fernando Perez <fperez@colorado.edu>
2593 2003-11-05 Fernando Perez <fperez@colorado.edu>
2590
2594
2591 * IPython/numutils.py (frange): Changed a call from int() to
2595 * IPython/numutils.py (frange): Changed a call from int() to
2592 int(round()) to prevent a problem reported with arange() in the
2596 int(round()) to prevent a problem reported with arange() in the
2593 numpy list.
2597 numpy list.
2594
2598
2595 2003-10-06 Fernando Perez <fperez@colorado.edu>
2599 2003-10-06 Fernando Perez <fperez@colorado.edu>
2596
2600
2597 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2601 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2598 prevent crashes if sys lacks an argv attribute (it happens with
2602 prevent crashes if sys lacks an argv attribute (it happens with
2599 embedded interpreters which build a bare-bones sys module).
2603 embedded interpreters which build a bare-bones sys module).
2600 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2604 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2601
2605
2602 2003-09-24 Fernando Perez <fperez@colorado.edu>
2606 2003-09-24 Fernando Perez <fperez@colorado.edu>
2603
2607
2604 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2608 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2605 to protect against poorly written user objects where __getattr__
2609 to protect against poorly written user objects where __getattr__
2606 raises exceptions other than AttributeError. Thanks to a bug
2610 raises exceptions other than AttributeError. Thanks to a bug
2607 report by Oliver Sander <osander-AT-gmx.de>.
2611 report by Oliver Sander <osander-AT-gmx.de>.
2608
2612
2609 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2613 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2610 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2614 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2611
2615
2612 2003-09-09 Fernando Perez <fperez@colorado.edu>
2616 2003-09-09 Fernando Perez <fperez@colorado.edu>
2613
2617
2614 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2618 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2615 unpacking a list whith a callable as first element would
2619 unpacking a list whith a callable as first element would
2616 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2620 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2617 Collins.
2621 Collins.
2618
2622
2619 2003-08-25 *** Released version 0.5.0
2623 2003-08-25 *** Released version 0.5.0
2620
2624
2621 2003-08-22 Fernando Perez <fperez@colorado.edu>
2625 2003-08-22 Fernando Perez <fperez@colorado.edu>
2622
2626
2623 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2627 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2624 improperly defined user exceptions. Thanks to feedback from Mark
2628 improperly defined user exceptions. Thanks to feedback from Mark
2625 Russell <mrussell-AT-verio.net>.
2629 Russell <mrussell-AT-verio.net>.
2626
2630
2627 2003-08-20 Fernando Perez <fperez@colorado.edu>
2631 2003-08-20 Fernando Perez <fperez@colorado.edu>
2628
2632
2629 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2633 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2630 printing so that it would print multi-line string forms starting
2634 printing so that it would print multi-line string forms starting
2631 with a new line. This way the formatting is better respected for
2635 with a new line. This way the formatting is better respected for
2632 objects which work hard to make nice string forms.
2636 objects which work hard to make nice string forms.
2633
2637
2634 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2638 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2635 autocall would overtake data access for objects with both
2639 autocall would overtake data access for objects with both
2636 __getitem__ and __call__.
2640 __getitem__ and __call__.
2637
2641
2638 2003-08-19 *** Released version 0.5.0-rc1
2642 2003-08-19 *** Released version 0.5.0-rc1
2639
2643
2640 2003-08-19 Fernando Perez <fperez@colorado.edu>
2644 2003-08-19 Fernando Perez <fperez@colorado.edu>
2641
2645
2642 * IPython/deep_reload.py (load_tail): single tiny change here
2646 * IPython/deep_reload.py (load_tail): single tiny change here
2643 seems to fix the long-standing bug of dreload() failing to work
2647 seems to fix the long-standing bug of dreload() failing to work
2644 for dotted names. But this module is pretty tricky, so I may have
2648 for dotted names. But this module is pretty tricky, so I may have
2645 missed some subtlety. Needs more testing!.
2649 missed some subtlety. Needs more testing!.
2646
2650
2647 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2651 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2648 exceptions which have badly implemented __str__ methods.
2652 exceptions which have badly implemented __str__ methods.
2649 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2653 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2650 which I've been getting reports about from Python 2.3 users. I
2654 which I've been getting reports about from Python 2.3 users. I
2651 wish I had a simple test case to reproduce the problem, so I could
2655 wish I had a simple test case to reproduce the problem, so I could
2652 either write a cleaner workaround or file a bug report if
2656 either write a cleaner workaround or file a bug report if
2653 necessary.
2657 necessary.
2654
2658
2655 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2659 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2656 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2660 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2657 a bug report by Tjabo Kloppenburg.
2661 a bug report by Tjabo Kloppenburg.
2658
2662
2659 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2663 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2660 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2664 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2661 seems rather unstable. Thanks to a bug report by Tjabo
2665 seems rather unstable. Thanks to a bug report by Tjabo
2662 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2666 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2663
2667
2664 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2668 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2665 this out soon because of the critical fixes in the inner loop for
2669 this out soon because of the critical fixes in the inner loop for
2666 generators.
2670 generators.
2667
2671
2668 * IPython/Magic.py (Magic.getargspec): removed. This (and
2672 * IPython/Magic.py (Magic.getargspec): removed. This (and
2669 _get_def) have been obsoleted by OInspect for a long time, I
2673 _get_def) have been obsoleted by OInspect for a long time, I
2670 hadn't noticed that they were dead code.
2674 hadn't noticed that they were dead code.
2671 (Magic._ofind): restored _ofind functionality for a few literals
2675 (Magic._ofind): restored _ofind functionality for a few literals
2672 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2676 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2673 for things like "hello".capitalize?, since that would require a
2677 for things like "hello".capitalize?, since that would require a
2674 potentially dangerous eval() again.
2678 potentially dangerous eval() again.
2675
2679
2676 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2680 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2677 logic a bit more to clean up the escapes handling and minimize the
2681 logic a bit more to clean up the escapes handling and minimize the
2678 use of _ofind to only necessary cases. The interactive 'feel' of
2682 use of _ofind to only necessary cases. The interactive 'feel' of
2679 IPython should have improved quite a bit with the changes in
2683 IPython should have improved quite a bit with the changes in
2680 _prefilter and _ofind (besides being far safer than before).
2684 _prefilter and _ofind (besides being far safer than before).
2681
2685
2682 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2686 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2683 obscure, never reported). Edit would fail to find the object to
2687 obscure, never reported). Edit would fail to find the object to
2684 edit under some circumstances.
2688 edit under some circumstances.
2685 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2689 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2686 which were causing double-calling of generators. Those eval calls
2690 which were causing double-calling of generators. Those eval calls
2687 were _very_ dangerous, since code with side effects could be
2691 were _very_ dangerous, since code with side effects could be
2688 triggered. As they say, 'eval is evil'... These were the
2692 triggered. As they say, 'eval is evil'... These were the
2689 nastiest evals in IPython. Besides, _ofind is now far simpler,
2693 nastiest evals in IPython. Besides, _ofind is now far simpler,
2690 and it should also be quite a bit faster. Its use of inspect is
2694 and it should also be quite a bit faster. Its use of inspect is
2691 also safer, so perhaps some of the inspect-related crashes I've
2695 also safer, so perhaps some of the inspect-related crashes I've
2692 seen lately with Python 2.3 might be taken care of. That will
2696 seen lately with Python 2.3 might be taken care of. That will
2693 need more testing.
2697 need more testing.
2694
2698
2695 2003-08-17 Fernando Perez <fperez@colorado.edu>
2699 2003-08-17 Fernando Perez <fperez@colorado.edu>
2696
2700
2697 * IPython/iplib.py (InteractiveShell._prefilter): significant
2701 * IPython/iplib.py (InteractiveShell._prefilter): significant
2698 simplifications to the logic for handling user escapes. Faster
2702 simplifications to the logic for handling user escapes. Faster
2699 and simpler code.
2703 and simpler code.
2700
2704
2701 2003-08-14 Fernando Perez <fperez@colorado.edu>
2705 2003-08-14 Fernando Perez <fperez@colorado.edu>
2702
2706
2703 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2707 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2704 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2708 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2705 but it should be quite a bit faster. And the recursive version
2709 but it should be quite a bit faster. And the recursive version
2706 generated O(log N) intermediate storage for all rank>1 arrays,
2710 generated O(log N) intermediate storage for all rank>1 arrays,
2707 even if they were contiguous.
2711 even if they were contiguous.
2708 (l1norm): Added this function.
2712 (l1norm): Added this function.
2709 (norm): Added this function for arbitrary norms (including
2713 (norm): Added this function for arbitrary norms (including
2710 l-infinity). l1 and l2 are still special cases for convenience
2714 l-infinity). l1 and l2 are still special cases for convenience
2711 and speed.
2715 and speed.
2712
2716
2713 2003-08-03 Fernando Perez <fperez@colorado.edu>
2717 2003-08-03 Fernando Perez <fperez@colorado.edu>
2714
2718
2715 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2719 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2716 exceptions, which now raise PendingDeprecationWarnings in Python
2720 exceptions, which now raise PendingDeprecationWarnings in Python
2717 2.3. There were some in Magic and some in Gnuplot2.
2721 2.3. There were some in Magic and some in Gnuplot2.
2718
2722
2719 2003-06-30 Fernando Perez <fperez@colorado.edu>
2723 2003-06-30 Fernando Perez <fperez@colorado.edu>
2720
2724
2721 * IPython/genutils.py (page): modified to call curses only for
2725 * IPython/genutils.py (page): modified to call curses only for
2722 terminals where TERM=='xterm'. After problems under many other
2726 terminals where TERM=='xterm'. After problems under many other
2723 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2727 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2724
2728
2725 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2729 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2726 would be triggered when readline was absent. This was just an old
2730 would be triggered when readline was absent. This was just an old
2727 debugging statement I'd forgotten to take out.
2731 debugging statement I'd forgotten to take out.
2728
2732
2729 2003-06-20 Fernando Perez <fperez@colorado.edu>
2733 2003-06-20 Fernando Perez <fperez@colorado.edu>
2730
2734
2731 * IPython/genutils.py (clock): modified to return only user time
2735 * IPython/genutils.py (clock): modified to return only user time
2732 (not counting system time), after a discussion on scipy. While
2736 (not counting system time), after a discussion on scipy. While
2733 system time may be a useful quantity occasionally, it may much
2737 system time may be a useful quantity occasionally, it may much
2734 more easily be skewed by occasional swapping or other similar
2738 more easily be skewed by occasional swapping or other similar
2735 activity.
2739 activity.
2736
2740
2737 2003-06-05 Fernando Perez <fperez@colorado.edu>
2741 2003-06-05 Fernando Perez <fperez@colorado.edu>
2738
2742
2739 * IPython/numutils.py (identity): new function, for building
2743 * IPython/numutils.py (identity): new function, for building
2740 arbitrary rank Kronecker deltas (mostly backwards compatible with
2744 arbitrary rank Kronecker deltas (mostly backwards compatible with
2741 Numeric.identity)
2745 Numeric.identity)
2742
2746
2743 2003-06-03 Fernando Perez <fperez@colorado.edu>
2747 2003-06-03 Fernando Perez <fperez@colorado.edu>
2744
2748
2745 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2749 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2746 arguments passed to magics with spaces, to allow trailing '\' to
2750 arguments passed to magics with spaces, to allow trailing '\' to
2747 work normally (mainly for Windows users).
2751 work normally (mainly for Windows users).
2748
2752
2749 2003-05-29 Fernando Perez <fperez@colorado.edu>
2753 2003-05-29 Fernando Perez <fperez@colorado.edu>
2750
2754
2751 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2755 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2752 instead of pydoc.help. This fixes a bizarre behavior where
2756 instead of pydoc.help. This fixes a bizarre behavior where
2753 printing '%s' % locals() would trigger the help system. Now
2757 printing '%s' % locals() would trigger the help system. Now
2754 ipython behaves like normal python does.
2758 ipython behaves like normal python does.
2755
2759
2756 Note that if one does 'from pydoc import help', the bizarre
2760 Note that if one does 'from pydoc import help', the bizarre
2757 behavior returns, but this will also happen in normal python, so
2761 behavior returns, but this will also happen in normal python, so
2758 it's not an ipython bug anymore (it has to do with how pydoc.help
2762 it's not an ipython bug anymore (it has to do with how pydoc.help
2759 is implemented).
2763 is implemented).
2760
2764
2761 2003-05-22 Fernando Perez <fperez@colorado.edu>
2765 2003-05-22 Fernando Perez <fperez@colorado.edu>
2762
2766
2763 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2767 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2764 return [] instead of None when nothing matches, also match to end
2768 return [] instead of None when nothing matches, also match to end
2765 of line. Patch by Gary Bishop.
2769 of line. Patch by Gary Bishop.
2766
2770
2767 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2771 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2768 protection as before, for files passed on the command line. This
2772 protection as before, for files passed on the command line. This
2769 prevents the CrashHandler from kicking in if user files call into
2773 prevents the CrashHandler from kicking in if user files call into
2770 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2774 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2771 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2775 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2772
2776
2773 2003-05-20 *** Released version 0.4.0
2777 2003-05-20 *** Released version 0.4.0
2774
2778
2775 2003-05-20 Fernando Perez <fperez@colorado.edu>
2779 2003-05-20 Fernando Perez <fperez@colorado.edu>
2776
2780
2777 * setup.py: added support for manpages. It's a bit hackish b/c of
2781 * setup.py: added support for manpages. It's a bit hackish b/c of
2778 a bug in the way the bdist_rpm distutils target handles gzipped
2782 a bug in the way the bdist_rpm distutils target handles gzipped
2779 manpages, but it works. After a patch by Jack.
2783 manpages, but it works. After a patch by Jack.
2780
2784
2781 2003-05-19 Fernando Perez <fperez@colorado.edu>
2785 2003-05-19 Fernando Perez <fperez@colorado.edu>
2782
2786
2783 * IPython/numutils.py: added a mockup of the kinds module, since
2787 * IPython/numutils.py: added a mockup of the kinds module, since
2784 it was recently removed from Numeric. This way, numutils will
2788 it was recently removed from Numeric. This way, numutils will
2785 work for all users even if they are missing kinds.
2789 work for all users even if they are missing kinds.
2786
2790
2787 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2791 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2788 failure, which can occur with SWIG-wrapped extensions. After a
2792 failure, which can occur with SWIG-wrapped extensions. After a
2789 crash report from Prabhu.
2793 crash report from Prabhu.
2790
2794
2791 2003-05-16 Fernando Perez <fperez@colorado.edu>
2795 2003-05-16 Fernando Perez <fperez@colorado.edu>
2792
2796
2793 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2797 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2794 protect ipython from user code which may call directly
2798 protect ipython from user code which may call directly
2795 sys.excepthook (this looks like an ipython crash to the user, even
2799 sys.excepthook (this looks like an ipython crash to the user, even
2796 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2800 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2797 This is especially important to help users of WxWindows, but may
2801 This is especially important to help users of WxWindows, but may
2798 also be useful in other cases.
2802 also be useful in other cases.
2799
2803
2800 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2804 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2801 an optional tb_offset to be specified, and to preserve exception
2805 an optional tb_offset to be specified, and to preserve exception
2802 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2806 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2803
2807
2804 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2808 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2805
2809
2806 2003-05-15 Fernando Perez <fperez@colorado.edu>
2810 2003-05-15 Fernando Perez <fperez@colorado.edu>
2807
2811
2808 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2812 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2809 installing for a new user under Windows.
2813 installing for a new user under Windows.
2810
2814
2811 2003-05-12 Fernando Perez <fperez@colorado.edu>
2815 2003-05-12 Fernando Perez <fperez@colorado.edu>
2812
2816
2813 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2817 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2814 handler for Emacs comint-based lines. Currently it doesn't do
2818 handler for Emacs comint-based lines. Currently it doesn't do
2815 much (but importantly, it doesn't update the history cache). In
2819 much (but importantly, it doesn't update the history cache). In
2816 the future it may be expanded if Alex needs more functionality
2820 the future it may be expanded if Alex needs more functionality
2817 there.
2821 there.
2818
2822
2819 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2823 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2820 info to crash reports.
2824 info to crash reports.
2821
2825
2822 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2826 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2823 just like Python's -c. Also fixed crash with invalid -color
2827 just like Python's -c. Also fixed crash with invalid -color
2824 option value at startup. Thanks to Will French
2828 option value at startup. Thanks to Will French
2825 <wfrench-AT-bestweb.net> for the bug report.
2829 <wfrench-AT-bestweb.net> for the bug report.
2826
2830
2827 2003-05-09 Fernando Perez <fperez@colorado.edu>
2831 2003-05-09 Fernando Perez <fperez@colorado.edu>
2828
2832
2829 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2833 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2830 to EvalDict (it's a mapping, after all) and simplified its code
2834 to EvalDict (it's a mapping, after all) and simplified its code
2831 quite a bit, after a nice discussion on c.l.py where Gustavo
2835 quite a bit, after a nice discussion on c.l.py where Gustavo
2832 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2836 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2833
2837
2834 2003-04-30 Fernando Perez <fperez@colorado.edu>
2838 2003-04-30 Fernando Perez <fperez@colorado.edu>
2835
2839
2836 * IPython/genutils.py (timings_out): modified it to reduce its
2840 * IPython/genutils.py (timings_out): modified it to reduce its
2837 overhead in the common reps==1 case.
2841 overhead in the common reps==1 case.
2838
2842
2839 2003-04-29 Fernando Perez <fperez@colorado.edu>
2843 2003-04-29 Fernando Perez <fperez@colorado.edu>
2840
2844
2841 * IPython/genutils.py (timings_out): Modified to use the resource
2845 * IPython/genutils.py (timings_out): Modified to use the resource
2842 module, which avoids the wraparound problems of time.clock().
2846 module, which avoids the wraparound problems of time.clock().
2843
2847
2844 2003-04-17 *** Released version 0.2.15pre4
2848 2003-04-17 *** Released version 0.2.15pre4
2845
2849
2846 2003-04-17 Fernando Perez <fperez@colorado.edu>
2850 2003-04-17 Fernando Perez <fperez@colorado.edu>
2847
2851
2848 * setup.py (scriptfiles): Split windows-specific stuff over to a
2852 * setup.py (scriptfiles): Split windows-specific stuff over to a
2849 separate file, in an attempt to have a Windows GUI installer.
2853 separate file, in an attempt to have a Windows GUI installer.
2850 That didn't work, but part of the groundwork is done.
2854 That didn't work, but part of the groundwork is done.
2851
2855
2852 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2856 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2853 indent/unindent with 4 spaces. Particularly useful in combination
2857 indent/unindent with 4 spaces. Particularly useful in combination
2854 with the new auto-indent option.
2858 with the new auto-indent option.
2855
2859
2856 2003-04-16 Fernando Perez <fperez@colorado.edu>
2860 2003-04-16 Fernando Perez <fperez@colorado.edu>
2857
2861
2858 * IPython/Magic.py: various replacements of self.rc for
2862 * IPython/Magic.py: various replacements of self.rc for
2859 self.shell.rc. A lot more remains to be done to fully disentangle
2863 self.shell.rc. A lot more remains to be done to fully disentangle
2860 this class from the main Shell class.
2864 this class from the main Shell class.
2861
2865
2862 * IPython/GnuplotRuntime.py: added checks for mouse support so
2866 * IPython/GnuplotRuntime.py: added checks for mouse support so
2863 that we don't try to enable it if the current gnuplot doesn't
2867 that we don't try to enable it if the current gnuplot doesn't
2864 really support it. Also added checks so that we don't try to
2868 really support it. Also added checks so that we don't try to
2865 enable persist under Windows (where Gnuplot doesn't recognize the
2869 enable persist under Windows (where Gnuplot doesn't recognize the
2866 option).
2870 option).
2867
2871
2868 * IPython/iplib.py (InteractiveShell.interact): Added optional
2872 * IPython/iplib.py (InteractiveShell.interact): Added optional
2869 auto-indenting code, after a patch by King C. Shu
2873 auto-indenting code, after a patch by King C. Shu
2870 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2874 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2871 get along well with pasting indented code. If I ever figure out
2875 get along well with pasting indented code. If I ever figure out
2872 how to make that part go well, it will become on by default.
2876 how to make that part go well, it will become on by default.
2873
2877
2874 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2878 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2875 crash ipython if there was an unmatched '%' in the user's prompt
2879 crash ipython if there was an unmatched '%' in the user's prompt
2876 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2880 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2877
2881
2878 * IPython/iplib.py (InteractiveShell.interact): removed the
2882 * IPython/iplib.py (InteractiveShell.interact): removed the
2879 ability to ask the user whether he wants to crash or not at the
2883 ability to ask the user whether he wants to crash or not at the
2880 'last line' exception handler. Calling functions at that point
2884 'last line' exception handler. Calling functions at that point
2881 changes the stack, and the error reports would have incorrect
2885 changes the stack, and the error reports would have incorrect
2882 tracebacks.
2886 tracebacks.
2883
2887
2884 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2888 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2885 pass through a peger a pretty-printed form of any object. After a
2889 pass through a peger a pretty-printed form of any object. After a
2886 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2890 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2887
2891
2888 2003-04-14 Fernando Perez <fperez@colorado.edu>
2892 2003-04-14 Fernando Perez <fperez@colorado.edu>
2889
2893
2890 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2894 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2891 all files in ~ would be modified at first install (instead of
2895 all files in ~ would be modified at first install (instead of
2892 ~/.ipython). This could be potentially disastrous, as the
2896 ~/.ipython). This could be potentially disastrous, as the
2893 modification (make line-endings native) could damage binary files.
2897 modification (make line-endings native) could damage binary files.
2894
2898
2895 2003-04-10 Fernando Perez <fperez@colorado.edu>
2899 2003-04-10 Fernando Perez <fperez@colorado.edu>
2896
2900
2897 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2901 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2898 handle only lines which are invalid python. This now means that
2902 handle only lines which are invalid python. This now means that
2899 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2903 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2900 for the bug report.
2904 for the bug report.
2901
2905
2902 2003-04-01 Fernando Perez <fperez@colorado.edu>
2906 2003-04-01 Fernando Perez <fperez@colorado.edu>
2903
2907
2904 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2908 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2905 where failing to set sys.last_traceback would crash pdb.pm().
2909 where failing to set sys.last_traceback would crash pdb.pm().
2906 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2910 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2907 report.
2911 report.
2908
2912
2909 2003-03-25 Fernando Perez <fperez@colorado.edu>
2913 2003-03-25 Fernando Perez <fperez@colorado.edu>
2910
2914
2911 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2915 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2912 before printing it (it had a lot of spurious blank lines at the
2916 before printing it (it had a lot of spurious blank lines at the
2913 end).
2917 end).
2914
2918
2915 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2919 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2916 output would be sent 21 times! Obviously people don't use this
2920 output would be sent 21 times! Obviously people don't use this
2917 too often, or I would have heard about it.
2921 too often, or I would have heard about it.
2918
2922
2919 2003-03-24 Fernando Perez <fperez@colorado.edu>
2923 2003-03-24 Fernando Perez <fperez@colorado.edu>
2920
2924
2921 * setup.py (scriptfiles): renamed the data_files parameter from
2925 * setup.py (scriptfiles): renamed the data_files parameter from
2922 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2926 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2923 for the patch.
2927 for the patch.
2924
2928
2925 2003-03-20 Fernando Perez <fperez@colorado.edu>
2929 2003-03-20 Fernando Perez <fperez@colorado.edu>
2926
2930
2927 * IPython/genutils.py (error): added error() and fatal()
2931 * IPython/genutils.py (error): added error() and fatal()
2928 functions.
2932 functions.
2929
2933
2930 2003-03-18 *** Released version 0.2.15pre3
2934 2003-03-18 *** Released version 0.2.15pre3
2931
2935
2932 2003-03-18 Fernando Perez <fperez@colorado.edu>
2936 2003-03-18 Fernando Perez <fperez@colorado.edu>
2933
2937
2934 * setupext/install_data_ext.py
2938 * setupext/install_data_ext.py
2935 (install_data_ext.initialize_options): Class contributed by Jack
2939 (install_data_ext.initialize_options): Class contributed by Jack
2936 Moffit for fixing the old distutils hack. He is sending this to
2940 Moffit for fixing the old distutils hack. He is sending this to
2937 the distutils folks so in the future we may not need it as a
2941 the distutils folks so in the future we may not need it as a
2938 private fix.
2942 private fix.
2939
2943
2940 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2944 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2941 changes for Debian packaging. See his patch for full details.
2945 changes for Debian packaging. See his patch for full details.
2942 The old distutils hack of making the ipythonrc* files carry a
2946 The old distutils hack of making the ipythonrc* files carry a
2943 bogus .py extension is gone, at last. Examples were moved to a
2947 bogus .py extension is gone, at last. Examples were moved to a
2944 separate subdir under doc/, and the separate executable scripts
2948 separate subdir under doc/, and the separate executable scripts
2945 now live in their own directory. Overall a great cleanup. The
2949 now live in their own directory. Overall a great cleanup. The
2946 manual was updated to use the new files, and setup.py has been
2950 manual was updated to use the new files, and setup.py has been
2947 fixed for this setup.
2951 fixed for this setup.
2948
2952
2949 * IPython/PyColorize.py (Parser.usage): made non-executable and
2953 * IPython/PyColorize.py (Parser.usage): made non-executable and
2950 created a pycolor wrapper around it to be included as a script.
2954 created a pycolor wrapper around it to be included as a script.
2951
2955
2952 2003-03-12 *** Released version 0.2.15pre2
2956 2003-03-12 *** Released version 0.2.15pre2
2953
2957
2954 2003-03-12 Fernando Perez <fperez@colorado.edu>
2958 2003-03-12 Fernando Perez <fperez@colorado.edu>
2955
2959
2956 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2960 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2957 long-standing problem with garbage characters in some terminals.
2961 long-standing problem with garbage characters in some terminals.
2958 The issue was really that the \001 and \002 escapes must _only_ be
2962 The issue was really that the \001 and \002 escapes must _only_ be
2959 passed to input prompts (which call readline), but _never_ to
2963 passed to input prompts (which call readline), but _never_ to
2960 normal text to be printed on screen. I changed ColorANSI to have
2964 normal text to be printed on screen. I changed ColorANSI to have
2961 two classes: TermColors and InputTermColors, each with the
2965 two classes: TermColors and InputTermColors, each with the
2962 appropriate escapes for input prompts or normal text. The code in
2966 appropriate escapes for input prompts or normal text. The code in
2963 Prompts.py got slightly more complicated, but this very old and
2967 Prompts.py got slightly more complicated, but this very old and
2964 annoying bug is finally fixed.
2968 annoying bug is finally fixed.
2965
2969
2966 All the credit for nailing down the real origin of this problem
2970 All the credit for nailing down the real origin of this problem
2967 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2971 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2968 *Many* thanks to him for spending quite a bit of effort on this.
2972 *Many* thanks to him for spending quite a bit of effort on this.
2969
2973
2970 2003-03-05 *** Released version 0.2.15pre1
2974 2003-03-05 *** Released version 0.2.15pre1
2971
2975
2972 2003-03-03 Fernando Perez <fperez@colorado.edu>
2976 2003-03-03 Fernando Perez <fperez@colorado.edu>
2973
2977
2974 * IPython/FakeModule.py: Moved the former _FakeModule to a
2978 * IPython/FakeModule.py: Moved the former _FakeModule to a
2975 separate file, because it's also needed by Magic (to fix a similar
2979 separate file, because it's also needed by Magic (to fix a similar
2976 pickle-related issue in @run).
2980 pickle-related issue in @run).
2977
2981
2978 2003-03-02 Fernando Perez <fperez@colorado.edu>
2982 2003-03-02 Fernando Perez <fperez@colorado.edu>
2979
2983
2980 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2984 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2981 the autocall option at runtime.
2985 the autocall option at runtime.
2982 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2986 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2983 across Magic.py to start separating Magic from InteractiveShell.
2987 across Magic.py to start separating Magic from InteractiveShell.
2984 (Magic._ofind): Fixed to return proper namespace for dotted
2988 (Magic._ofind): Fixed to return proper namespace for dotted
2985 names. Before, a dotted name would always return 'not currently
2989 names. Before, a dotted name would always return 'not currently
2986 defined', because it would find the 'parent'. s.x would be found,
2990 defined', because it would find the 'parent'. s.x would be found,
2987 but since 'x' isn't defined by itself, it would get confused.
2991 but since 'x' isn't defined by itself, it would get confused.
2988 (Magic.magic_run): Fixed pickling problems reported by Ralf
2992 (Magic.magic_run): Fixed pickling problems reported by Ralf
2989 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2993 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2990 that I'd used when Mike Heeter reported similar issues at the
2994 that I'd used when Mike Heeter reported similar issues at the
2991 top-level, but now for @run. It boils down to injecting the
2995 top-level, but now for @run. It boils down to injecting the
2992 namespace where code is being executed with something that looks
2996 namespace where code is being executed with something that looks
2993 enough like a module to fool pickle.dump(). Since a pickle stores
2997 enough like a module to fool pickle.dump(). Since a pickle stores
2994 a named reference to the importing module, we need this for
2998 a named reference to the importing module, we need this for
2995 pickles to save something sensible.
2999 pickles to save something sensible.
2996
3000
2997 * IPython/ipmaker.py (make_IPython): added an autocall option.
3001 * IPython/ipmaker.py (make_IPython): added an autocall option.
2998
3002
2999 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3003 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3000 the auto-eval code. Now autocalling is an option, and the code is
3004 the auto-eval code. Now autocalling is an option, and the code is
3001 also vastly safer. There is no more eval() involved at all.
3005 also vastly safer. There is no more eval() involved at all.
3002
3006
3003 2003-03-01 Fernando Perez <fperez@colorado.edu>
3007 2003-03-01 Fernando Perez <fperez@colorado.edu>
3004
3008
3005 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3009 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3006 dict with named keys instead of a tuple.
3010 dict with named keys instead of a tuple.
3007
3011
3008 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3012 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3009
3013
3010 * setup.py (make_shortcut): Fixed message about directories
3014 * setup.py (make_shortcut): Fixed message about directories
3011 created during Windows installation (the directories were ok, just
3015 created during Windows installation (the directories were ok, just
3012 the printed message was misleading). Thanks to Chris Liechti
3016 the printed message was misleading). Thanks to Chris Liechti
3013 <cliechti-AT-gmx.net> for the heads up.
3017 <cliechti-AT-gmx.net> for the heads up.
3014
3018
3015 2003-02-21 Fernando Perez <fperez@colorado.edu>
3019 2003-02-21 Fernando Perez <fperez@colorado.edu>
3016
3020
3017 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3021 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3018 of ValueError exception when checking for auto-execution. This
3022 of ValueError exception when checking for auto-execution. This
3019 one is raised by things like Numeric arrays arr.flat when the
3023 one is raised by things like Numeric arrays arr.flat when the
3020 array is non-contiguous.
3024 array is non-contiguous.
3021
3025
3022 2003-01-31 Fernando Perez <fperez@colorado.edu>
3026 2003-01-31 Fernando Perez <fperez@colorado.edu>
3023
3027
3024 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3028 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3025 not return any value at all (even though the command would get
3029 not return any value at all (even though the command would get
3026 executed).
3030 executed).
3027 (xsys): Flush stdout right after printing the command to ensure
3031 (xsys): Flush stdout right after printing the command to ensure
3028 proper ordering of commands and command output in the total
3032 proper ordering of commands and command output in the total
3029 output.
3033 output.
3030 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3034 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3031 system/getoutput as defaults. The old ones are kept for
3035 system/getoutput as defaults. The old ones are kept for
3032 compatibility reasons, so no code which uses this library needs
3036 compatibility reasons, so no code which uses this library needs
3033 changing.
3037 changing.
3034
3038
3035 2003-01-27 *** Released version 0.2.14
3039 2003-01-27 *** Released version 0.2.14
3036
3040
3037 2003-01-25 Fernando Perez <fperez@colorado.edu>
3041 2003-01-25 Fernando Perez <fperez@colorado.edu>
3038
3042
3039 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3043 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3040 functions defined in previous edit sessions could not be re-edited
3044 functions defined in previous edit sessions could not be re-edited
3041 (because the temp files were immediately removed). Now temp files
3045 (because the temp files were immediately removed). Now temp files
3042 are removed only at IPython's exit.
3046 are removed only at IPython's exit.
3043 (Magic.magic_run): Improved @run to perform shell-like expansions
3047 (Magic.magic_run): Improved @run to perform shell-like expansions
3044 on its arguments (~users and $VARS). With this, @run becomes more
3048 on its arguments (~users and $VARS). With this, @run becomes more
3045 like a normal command-line.
3049 like a normal command-line.
3046
3050
3047 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3051 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3048 bugs related to embedding and cleaned up that code. A fairly
3052 bugs related to embedding and cleaned up that code. A fairly
3049 important one was the impossibility to access the global namespace
3053 important one was the impossibility to access the global namespace
3050 through the embedded IPython (only local variables were visible).
3054 through the embedded IPython (only local variables were visible).
3051
3055
3052 2003-01-14 Fernando Perez <fperez@colorado.edu>
3056 2003-01-14 Fernando Perez <fperez@colorado.edu>
3053
3057
3054 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3058 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3055 auto-calling to be a bit more conservative. Now it doesn't get
3059 auto-calling to be a bit more conservative. Now it doesn't get
3056 triggered if any of '!=()<>' are in the rest of the input line, to
3060 triggered if any of '!=()<>' are in the rest of the input line, to
3057 allow comparing callables. Thanks to Alex for the heads up.
3061 allow comparing callables. Thanks to Alex for the heads up.
3058
3062
3059 2003-01-07 Fernando Perez <fperez@colorado.edu>
3063 2003-01-07 Fernando Perez <fperez@colorado.edu>
3060
3064
3061 * IPython/genutils.py (page): fixed estimation of the number of
3065 * IPython/genutils.py (page): fixed estimation of the number of
3062 lines in a string to be paged to simply count newlines. This
3066 lines in a string to be paged to simply count newlines. This
3063 prevents over-guessing due to embedded escape sequences. A better
3067 prevents over-guessing due to embedded escape sequences. A better
3064 long-term solution would involve stripping out the control chars
3068 long-term solution would involve stripping out the control chars
3065 for the count, but it's potentially so expensive I just don't
3069 for the count, but it's potentially so expensive I just don't
3066 think it's worth doing.
3070 think it's worth doing.
3067
3071
3068 2002-12-19 *** Released version 0.2.14pre50
3072 2002-12-19 *** Released version 0.2.14pre50
3069
3073
3070 2002-12-19 Fernando Perez <fperez@colorado.edu>
3074 2002-12-19 Fernando Perez <fperez@colorado.edu>
3071
3075
3072 * tools/release (version): Changed release scripts to inform
3076 * tools/release (version): Changed release scripts to inform
3073 Andrea and build a NEWS file with a list of recent changes.
3077 Andrea and build a NEWS file with a list of recent changes.
3074
3078
3075 * IPython/ColorANSI.py (__all__): changed terminal detection
3079 * IPython/ColorANSI.py (__all__): changed terminal detection
3076 code. Seems to work better for xterms without breaking
3080 code. Seems to work better for xterms without breaking
3077 konsole. Will need more testing to determine if WinXP and Mac OSX
3081 konsole. Will need more testing to determine if WinXP and Mac OSX
3078 also work ok.
3082 also work ok.
3079
3083
3080 2002-12-18 *** Released version 0.2.14pre49
3084 2002-12-18 *** Released version 0.2.14pre49
3081
3085
3082 2002-12-18 Fernando Perez <fperez@colorado.edu>
3086 2002-12-18 Fernando Perez <fperez@colorado.edu>
3083
3087
3084 * Docs: added new info about Mac OSX, from Andrea.
3088 * Docs: added new info about Mac OSX, from Andrea.
3085
3089
3086 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3090 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3087 allow direct plotting of python strings whose format is the same
3091 allow direct plotting of python strings whose format is the same
3088 of gnuplot data files.
3092 of gnuplot data files.
3089
3093
3090 2002-12-16 Fernando Perez <fperez@colorado.edu>
3094 2002-12-16 Fernando Perez <fperez@colorado.edu>
3091
3095
3092 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3096 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3093 value of exit question to be acknowledged.
3097 value of exit question to be acknowledged.
3094
3098
3095 2002-12-03 Fernando Perez <fperez@colorado.edu>
3099 2002-12-03 Fernando Perez <fperez@colorado.edu>
3096
3100
3097 * IPython/ipmaker.py: removed generators, which had been added
3101 * IPython/ipmaker.py: removed generators, which had been added
3098 by mistake in an earlier debugging run. This was causing trouble
3102 by mistake in an earlier debugging run. This was causing trouble
3099 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3103 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3100 for pointing this out.
3104 for pointing this out.
3101
3105
3102 2002-11-17 Fernando Perez <fperez@colorado.edu>
3106 2002-11-17 Fernando Perez <fperez@colorado.edu>
3103
3107
3104 * Manual: updated the Gnuplot section.
3108 * Manual: updated the Gnuplot section.
3105
3109
3106 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3110 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3107 a much better split of what goes in Runtime and what goes in
3111 a much better split of what goes in Runtime and what goes in
3108 Interactive.
3112 Interactive.
3109
3113
3110 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3114 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3111 being imported from iplib.
3115 being imported from iplib.
3112
3116
3113 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3117 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3114 for command-passing. Now the global Gnuplot instance is called
3118 for command-passing. Now the global Gnuplot instance is called
3115 'gp' instead of 'g', which was really a far too fragile and
3119 'gp' instead of 'g', which was really a far too fragile and
3116 common name.
3120 common name.
3117
3121
3118 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3122 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3119 bounding boxes generated by Gnuplot for square plots.
3123 bounding boxes generated by Gnuplot for square plots.
3120
3124
3121 * IPython/genutils.py (popkey): new function added. I should
3125 * IPython/genutils.py (popkey): new function added. I should
3122 suggest this on c.l.py as a dict method, it seems useful.
3126 suggest this on c.l.py as a dict method, it seems useful.
3123
3127
3124 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3128 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3125 to transparently handle PostScript generation. MUCH better than
3129 to transparently handle PostScript generation. MUCH better than
3126 the previous plot_eps/replot_eps (which I removed now). The code
3130 the previous plot_eps/replot_eps (which I removed now). The code
3127 is also fairly clean and well documented now (including
3131 is also fairly clean and well documented now (including
3128 docstrings).
3132 docstrings).
3129
3133
3130 2002-11-13 Fernando Perez <fperez@colorado.edu>
3134 2002-11-13 Fernando Perez <fperez@colorado.edu>
3131
3135
3132 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3136 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3133 (inconsistent with options).
3137 (inconsistent with options).
3134
3138
3135 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3139 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3136 manually disabled, I don't know why. Fixed it.
3140 manually disabled, I don't know why. Fixed it.
3137 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3141 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3138 eps output.
3142 eps output.
3139
3143
3140 2002-11-12 Fernando Perez <fperez@colorado.edu>
3144 2002-11-12 Fernando Perez <fperez@colorado.edu>
3141
3145
3142 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3146 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3143 don't propagate up to caller. Fixes crash reported by François
3147 don't propagate up to caller. Fixes crash reported by François
3144 Pinard.
3148 Pinard.
3145
3149
3146 2002-11-09 Fernando Perez <fperez@colorado.edu>
3150 2002-11-09 Fernando Perez <fperez@colorado.edu>
3147
3151
3148 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3152 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3149 history file for new users.
3153 history file for new users.
3150 (make_IPython): fixed bug where initial install would leave the
3154 (make_IPython): fixed bug where initial install would leave the
3151 user running in the .ipython dir.
3155 user running in the .ipython dir.
3152 (make_IPython): fixed bug where config dir .ipython would be
3156 (make_IPython): fixed bug where config dir .ipython would be
3153 created regardless of the given -ipythondir option. Thanks to Cory
3157 created regardless of the given -ipythondir option. Thanks to Cory
3154 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3158 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3155
3159
3156 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3160 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3157 type confirmations. Will need to use it in all of IPython's code
3161 type confirmations. Will need to use it in all of IPython's code
3158 consistently.
3162 consistently.
3159
3163
3160 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3164 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3161 context to print 31 lines instead of the default 5. This will make
3165 context to print 31 lines instead of the default 5. This will make
3162 the crash reports extremely detailed in case the problem is in
3166 the crash reports extremely detailed in case the problem is in
3163 libraries I don't have access to.
3167 libraries I don't have access to.
3164
3168
3165 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3169 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3166 line of defense' code to still crash, but giving users fair
3170 line of defense' code to still crash, but giving users fair
3167 warning. I don't want internal errors to go unreported: if there's
3171 warning. I don't want internal errors to go unreported: if there's
3168 an internal problem, IPython should crash and generate a full
3172 an internal problem, IPython should crash and generate a full
3169 report.
3173 report.
3170
3174
3171 2002-11-08 Fernando Perez <fperez@colorado.edu>
3175 2002-11-08 Fernando Perez <fperez@colorado.edu>
3172
3176
3173 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3177 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3174 otherwise uncaught exceptions which can appear if people set
3178 otherwise uncaught exceptions which can appear if people set
3175 sys.stdout to something badly broken. Thanks to a crash report
3179 sys.stdout to something badly broken. Thanks to a crash report
3176 from henni-AT-mail.brainbot.com.
3180 from henni-AT-mail.brainbot.com.
3177
3181
3178 2002-11-04 Fernando Perez <fperez@colorado.edu>
3182 2002-11-04 Fernando Perez <fperez@colorado.edu>
3179
3183
3180 * IPython/iplib.py (InteractiveShell.interact): added
3184 * IPython/iplib.py (InteractiveShell.interact): added
3181 __IPYTHON__active to the builtins. It's a flag which goes on when
3185 __IPYTHON__active to the builtins. It's a flag which goes on when
3182 the interaction starts and goes off again when it stops. This
3186 the interaction starts and goes off again when it stops. This
3183 allows embedding code to detect being inside IPython. Before this
3187 allows embedding code to detect being inside IPython. Before this
3184 was done via __IPYTHON__, but that only shows that an IPython
3188 was done via __IPYTHON__, but that only shows that an IPython
3185 instance has been created.
3189 instance has been created.
3186
3190
3187 * IPython/Magic.py (Magic.magic_env): I realized that in a
3191 * IPython/Magic.py (Magic.magic_env): I realized that in a
3188 UserDict, instance.data holds the data as a normal dict. So I
3192 UserDict, instance.data holds the data as a normal dict. So I
3189 modified @env to return os.environ.data instead of rebuilding a
3193 modified @env to return os.environ.data instead of rebuilding a
3190 dict by hand.
3194 dict by hand.
3191
3195
3192 2002-11-02 Fernando Perez <fperez@colorado.edu>
3196 2002-11-02 Fernando Perez <fperez@colorado.edu>
3193
3197
3194 * IPython/genutils.py (warn): changed so that level 1 prints no
3198 * IPython/genutils.py (warn): changed so that level 1 prints no
3195 header. Level 2 is now the default (with 'WARNING' header, as
3199 header. Level 2 is now the default (with 'WARNING' header, as
3196 before). I think I tracked all places where changes were needed in
3200 before). I think I tracked all places where changes were needed in
3197 IPython, but outside code using the old level numbering may have
3201 IPython, but outside code using the old level numbering may have
3198 broken.
3202 broken.
3199
3203
3200 * IPython/iplib.py (InteractiveShell.runcode): added this to
3204 * IPython/iplib.py (InteractiveShell.runcode): added this to
3201 handle the tracebacks in SystemExit traps correctly. The previous
3205 handle the tracebacks in SystemExit traps correctly. The previous
3202 code (through interact) was printing more of the stack than
3206 code (through interact) was printing more of the stack than
3203 necessary, showing IPython internal code to the user.
3207 necessary, showing IPython internal code to the user.
3204
3208
3205 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3209 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3206 default. Now that the default at the confirmation prompt is yes,
3210 default. Now that the default at the confirmation prompt is yes,
3207 it's not so intrusive. François' argument that ipython sessions
3211 it's not so intrusive. François' argument that ipython sessions
3208 tend to be complex enough not to lose them from an accidental C-d,
3212 tend to be complex enough not to lose them from an accidental C-d,
3209 is a valid one.
3213 is a valid one.
3210
3214
3211 * IPython/iplib.py (InteractiveShell.interact): added a
3215 * IPython/iplib.py (InteractiveShell.interact): added a
3212 showtraceback() call to the SystemExit trap, and modified the exit
3216 showtraceback() call to the SystemExit trap, and modified the exit
3213 confirmation to have yes as the default.
3217 confirmation to have yes as the default.
3214
3218
3215 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3219 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3216 this file. It's been gone from the code for a long time, this was
3220 this file. It's been gone from the code for a long time, this was
3217 simply leftover junk.
3221 simply leftover junk.
3218
3222
3219 2002-11-01 Fernando Perez <fperez@colorado.edu>
3223 2002-11-01 Fernando Perez <fperez@colorado.edu>
3220
3224
3221 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3225 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3222 added. If set, IPython now traps EOF and asks for
3226 added. If set, IPython now traps EOF and asks for
3223 confirmation. After a request by François Pinard.
3227 confirmation. After a request by François Pinard.
3224
3228
3225 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3229 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3226 of @abort, and with a new (better) mechanism for handling the
3230 of @abort, and with a new (better) mechanism for handling the
3227 exceptions.
3231 exceptions.
3228
3232
3229 2002-10-27 Fernando Perez <fperez@colorado.edu>
3233 2002-10-27 Fernando Perez <fperez@colorado.edu>
3230
3234
3231 * IPython/usage.py (__doc__): updated the --help information and
3235 * IPython/usage.py (__doc__): updated the --help information and
3232 the ipythonrc file to indicate that -log generates
3236 the ipythonrc file to indicate that -log generates
3233 ./ipython.log. Also fixed the corresponding info in @logstart.
3237 ./ipython.log. Also fixed the corresponding info in @logstart.
3234 This and several other fixes in the manuals thanks to reports by
3238 This and several other fixes in the manuals thanks to reports by
3235 François Pinard <pinard-AT-iro.umontreal.ca>.
3239 François Pinard <pinard-AT-iro.umontreal.ca>.
3236
3240
3237 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3241 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3238 refer to @logstart (instead of @log, which doesn't exist).
3242 refer to @logstart (instead of @log, which doesn't exist).
3239
3243
3240 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3244 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3241 AttributeError crash. Thanks to Christopher Armstrong
3245 AttributeError crash. Thanks to Christopher Armstrong
3242 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3246 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3243 introduced recently (in 0.2.14pre37) with the fix to the eval
3247 introduced recently (in 0.2.14pre37) with the fix to the eval
3244 problem mentioned below.
3248 problem mentioned below.
3245
3249
3246 2002-10-17 Fernando Perez <fperez@colorado.edu>
3250 2002-10-17 Fernando Perez <fperez@colorado.edu>
3247
3251
3248 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3252 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3249 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3253 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3250
3254
3251 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3255 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3252 this function to fix a problem reported by Alex Schmolck. He saw
3256 this function to fix a problem reported by Alex Schmolck. He saw
3253 it with list comprehensions and generators, which were getting
3257 it with list comprehensions and generators, which were getting
3254 called twice. The real problem was an 'eval' call in testing for
3258 called twice. The real problem was an 'eval' call in testing for
3255 automagic which was evaluating the input line silently.
3259 automagic which was evaluating the input line silently.
3256
3260
3257 This is a potentially very nasty bug, if the input has side
3261 This is a potentially very nasty bug, if the input has side
3258 effects which must not be repeated. The code is much cleaner now,
3262 effects which must not be repeated. The code is much cleaner now,
3259 without any blanket 'except' left and with a regexp test for
3263 without any blanket 'except' left and with a regexp test for
3260 actual function names.
3264 actual function names.
3261
3265
3262 But an eval remains, which I'm not fully comfortable with. I just
3266 But an eval remains, which I'm not fully comfortable with. I just
3263 don't know how to find out if an expression could be a callable in
3267 don't know how to find out if an expression could be a callable in
3264 the user's namespace without doing an eval on the string. However
3268 the user's namespace without doing an eval on the string. However
3265 that string is now much more strictly checked so that no code
3269 that string is now much more strictly checked so that no code
3266 slips by, so the eval should only happen for things that can
3270 slips by, so the eval should only happen for things that can
3267 really be only function/method names.
3271 really be only function/method names.
3268
3272
3269 2002-10-15 Fernando Perez <fperez@colorado.edu>
3273 2002-10-15 Fernando Perez <fperez@colorado.edu>
3270
3274
3271 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3275 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3272 OSX information to main manual, removed README_Mac_OSX file from
3276 OSX information to main manual, removed README_Mac_OSX file from
3273 distribution. Also updated credits for recent additions.
3277 distribution. Also updated credits for recent additions.
3274
3278
3275 2002-10-10 Fernando Perez <fperez@colorado.edu>
3279 2002-10-10 Fernando Perez <fperez@colorado.edu>
3276
3280
3277 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3281 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3278 terminal-related issues. Many thanks to Andrea Riciputi
3282 terminal-related issues. Many thanks to Andrea Riciputi
3279 <andrea.riciputi-AT-libero.it> for writing it.
3283 <andrea.riciputi-AT-libero.it> for writing it.
3280
3284
3281 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3285 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3282 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3286 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3283
3287
3284 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3288 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3285 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3289 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3286 <syver-en-AT-online.no> who both submitted patches for this problem.
3290 <syver-en-AT-online.no> who both submitted patches for this problem.
3287
3291
3288 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3292 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3289 global embedding to make sure that things don't overwrite user
3293 global embedding to make sure that things don't overwrite user
3290 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3294 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3291
3295
3292 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3296 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3293 compatibility. Thanks to Hayden Callow
3297 compatibility. Thanks to Hayden Callow
3294 <h.callow-AT-elec.canterbury.ac.nz>
3298 <h.callow-AT-elec.canterbury.ac.nz>
3295
3299
3296 2002-10-04 Fernando Perez <fperez@colorado.edu>
3300 2002-10-04 Fernando Perez <fperez@colorado.edu>
3297
3301
3298 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3302 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3299 Gnuplot.File objects.
3303 Gnuplot.File objects.
3300
3304
3301 2002-07-23 Fernando Perez <fperez@colorado.edu>
3305 2002-07-23 Fernando Perez <fperez@colorado.edu>
3302
3306
3303 * IPython/genutils.py (timing): Added timings() and timing() for
3307 * IPython/genutils.py (timing): Added timings() and timing() for
3304 quick access to the most commonly needed data, the execution
3308 quick access to the most commonly needed data, the execution
3305 times. Old timing() renamed to timings_out().
3309 times. Old timing() renamed to timings_out().
3306
3310
3307 2002-07-18 Fernando Perez <fperez@colorado.edu>
3311 2002-07-18 Fernando Perez <fperez@colorado.edu>
3308
3312
3309 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3313 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3310 bug with nested instances disrupting the parent's tab completion.
3314 bug with nested instances disrupting the parent's tab completion.
3311
3315
3312 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3316 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3313 all_completions code to begin the emacs integration.
3317 all_completions code to begin the emacs integration.
3314
3318
3315 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3319 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3316 argument to allow titling individual arrays when plotting.
3320 argument to allow titling individual arrays when plotting.
3317
3321
3318 2002-07-15 Fernando Perez <fperez@colorado.edu>
3322 2002-07-15 Fernando Perez <fperez@colorado.edu>
3319
3323
3320 * setup.py (make_shortcut): changed to retrieve the value of
3324 * setup.py (make_shortcut): changed to retrieve the value of
3321 'Program Files' directory from the registry (this value changes in
3325 'Program Files' directory from the registry (this value changes in
3322 non-english versions of Windows). Thanks to Thomas Fanslau
3326 non-english versions of Windows). Thanks to Thomas Fanslau
3323 <tfanslau-AT-gmx.de> for the report.
3327 <tfanslau-AT-gmx.de> for the report.
3324
3328
3325 2002-07-10 Fernando Perez <fperez@colorado.edu>
3329 2002-07-10 Fernando Perez <fperez@colorado.edu>
3326
3330
3327 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3331 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3328 a bug in pdb, which crashes if a line with only whitespace is
3332 a bug in pdb, which crashes if a line with only whitespace is
3329 entered. Bug report submitted to sourceforge.
3333 entered. Bug report submitted to sourceforge.
3330
3334
3331 2002-07-09 Fernando Perez <fperez@colorado.edu>
3335 2002-07-09 Fernando Perez <fperez@colorado.edu>
3332
3336
3333 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3337 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3334 reporting exceptions (it's a bug in inspect.py, I just set a
3338 reporting exceptions (it's a bug in inspect.py, I just set a
3335 workaround).
3339 workaround).
3336
3340
3337 2002-07-08 Fernando Perez <fperez@colorado.edu>
3341 2002-07-08 Fernando Perez <fperez@colorado.edu>
3338
3342
3339 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3343 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3340 __IPYTHON__ in __builtins__ to show up in user_ns.
3344 __IPYTHON__ in __builtins__ to show up in user_ns.
3341
3345
3342 2002-07-03 Fernando Perez <fperez@colorado.edu>
3346 2002-07-03 Fernando Perez <fperez@colorado.edu>
3343
3347
3344 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3348 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3345 name from @gp_set_instance to @gp_set_default.
3349 name from @gp_set_instance to @gp_set_default.
3346
3350
3347 * IPython/ipmaker.py (make_IPython): default editor value set to
3351 * IPython/ipmaker.py (make_IPython): default editor value set to
3348 '0' (a string), to match the rc file. Otherwise will crash when
3352 '0' (a string), to match the rc file. Otherwise will crash when
3349 .strip() is called on it.
3353 .strip() is called on it.
3350
3354
3351
3355
3352 2002-06-28 Fernando Perez <fperez@colorado.edu>
3356 2002-06-28 Fernando Perez <fperez@colorado.edu>
3353
3357
3354 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3358 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3355 of files in current directory when a file is executed via
3359 of files in current directory when a file is executed via
3356 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3360 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3357
3361
3358 * setup.py (manfiles): fix for rpm builds, submitted by RA
3362 * setup.py (manfiles): fix for rpm builds, submitted by RA
3359 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3363 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3360
3364
3361 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3365 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3362 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3366 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3363 string!). A. Schmolck caught this one.
3367 string!). A. Schmolck caught this one.
3364
3368
3365 2002-06-27 Fernando Perez <fperez@colorado.edu>
3369 2002-06-27 Fernando Perez <fperez@colorado.edu>
3366
3370
3367 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3371 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3368 defined files at the cmd line. __name__ wasn't being set to
3372 defined files at the cmd line. __name__ wasn't being set to
3369 __main__.
3373 __main__.
3370
3374
3371 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3375 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3372 regular lists and tuples besides Numeric arrays.
3376 regular lists and tuples besides Numeric arrays.
3373
3377
3374 * IPython/Prompts.py (CachedOutput.__call__): Added output
3378 * IPython/Prompts.py (CachedOutput.__call__): Added output
3375 supression for input ending with ';'. Similar to Mathematica and
3379 supression for input ending with ';'. Similar to Mathematica and
3376 Matlab. The _* vars and Out[] list are still updated, just like
3380 Matlab. The _* vars and Out[] list are still updated, just like
3377 Mathematica behaves.
3381 Mathematica behaves.
3378
3382
3379 2002-06-25 Fernando Perez <fperez@colorado.edu>
3383 2002-06-25 Fernando Perez <fperez@colorado.edu>
3380
3384
3381 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3385 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3382 .ini extensions for profiels under Windows.
3386 .ini extensions for profiels under Windows.
3383
3387
3384 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3388 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3385 string form. Fix contributed by Alexander Schmolck
3389 string form. Fix contributed by Alexander Schmolck
3386 <a.schmolck-AT-gmx.net>
3390 <a.schmolck-AT-gmx.net>
3387
3391
3388 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3392 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3389 pre-configured Gnuplot instance.
3393 pre-configured Gnuplot instance.
3390
3394
3391 2002-06-21 Fernando Perez <fperez@colorado.edu>
3395 2002-06-21 Fernando Perez <fperez@colorado.edu>
3392
3396
3393 * IPython/numutils.py (exp_safe): new function, works around the
3397 * IPython/numutils.py (exp_safe): new function, works around the
3394 underflow problems in Numeric.
3398 underflow problems in Numeric.
3395 (log2): New fn. Safe log in base 2: returns exact integer answer
3399 (log2): New fn. Safe log in base 2: returns exact integer answer
3396 for exact integer powers of 2.
3400 for exact integer powers of 2.
3397
3401
3398 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3402 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3399 properly.
3403 properly.
3400
3404
3401 2002-06-20 Fernando Perez <fperez@colorado.edu>
3405 2002-06-20 Fernando Perez <fperez@colorado.edu>
3402
3406
3403 * IPython/genutils.py (timing): new function like
3407 * IPython/genutils.py (timing): new function like
3404 Mathematica's. Similar to time_test, but returns more info.
3408 Mathematica's. Similar to time_test, but returns more info.
3405
3409
3406 2002-06-18 Fernando Perez <fperez@colorado.edu>
3410 2002-06-18 Fernando Perez <fperez@colorado.edu>
3407
3411
3408 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3412 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3409 according to Mike Heeter's suggestions.
3413 according to Mike Heeter's suggestions.
3410
3414
3411 2002-06-16 Fernando Perez <fperez@colorado.edu>
3415 2002-06-16 Fernando Perez <fperez@colorado.edu>
3412
3416
3413 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3417 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3414 system. GnuplotMagic is gone as a user-directory option. New files
3418 system. GnuplotMagic is gone as a user-directory option. New files
3415 make it easier to use all the gnuplot stuff both from external
3419 make it easier to use all the gnuplot stuff both from external
3416 programs as well as from IPython. Had to rewrite part of
3420 programs as well as from IPython. Had to rewrite part of
3417 hardcopy() b/c of a strange bug: often the ps files simply don't
3421 hardcopy() b/c of a strange bug: often the ps files simply don't
3418 get created, and require a repeat of the command (often several
3422 get created, and require a repeat of the command (often several
3419 times).
3423 times).
3420
3424
3421 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3425 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3422 resolve output channel at call time, so that if sys.stderr has
3426 resolve output channel at call time, so that if sys.stderr has
3423 been redirected by user this gets honored.
3427 been redirected by user this gets honored.
3424
3428
3425 2002-06-13 Fernando Perez <fperez@colorado.edu>
3429 2002-06-13 Fernando Perez <fperez@colorado.edu>
3426
3430
3427 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3431 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3428 IPShell. Kept a copy with the old names to avoid breaking people's
3432 IPShell. Kept a copy with the old names to avoid breaking people's
3429 embedded code.
3433 embedded code.
3430
3434
3431 * IPython/ipython: simplified it to the bare minimum after
3435 * IPython/ipython: simplified it to the bare minimum after
3432 Holger's suggestions. Added info about how to use it in
3436 Holger's suggestions. Added info about how to use it in
3433 PYTHONSTARTUP.
3437 PYTHONSTARTUP.
3434
3438
3435 * IPython/Shell.py (IPythonShell): changed the options passing
3439 * IPython/Shell.py (IPythonShell): changed the options passing
3436 from a string with funky %s replacements to a straight list. Maybe
3440 from a string with funky %s replacements to a straight list. Maybe
3437 a bit more typing, but it follows sys.argv conventions, so there's
3441 a bit more typing, but it follows sys.argv conventions, so there's
3438 less special-casing to remember.
3442 less special-casing to remember.
3439
3443
3440 2002-06-12 Fernando Perez <fperez@colorado.edu>
3444 2002-06-12 Fernando Perez <fperez@colorado.edu>
3441
3445
3442 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3446 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3443 command. Thanks to a suggestion by Mike Heeter.
3447 command. Thanks to a suggestion by Mike Heeter.
3444 (Magic.magic_pfile): added behavior to look at filenames if given
3448 (Magic.magic_pfile): added behavior to look at filenames if given
3445 arg is not a defined object.
3449 arg is not a defined object.
3446 (Magic.magic_save): New @save function to save code snippets. Also
3450 (Magic.magic_save): New @save function to save code snippets. Also
3447 a Mike Heeter idea.
3451 a Mike Heeter idea.
3448
3452
3449 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3453 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3450 plot() and replot(). Much more convenient now, especially for
3454 plot() and replot(). Much more convenient now, especially for
3451 interactive use.
3455 interactive use.
3452
3456
3453 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3457 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3454 filenames.
3458 filenames.
3455
3459
3456 2002-06-02 Fernando Perez <fperez@colorado.edu>
3460 2002-06-02 Fernando Perez <fperez@colorado.edu>
3457
3461
3458 * IPython/Struct.py (Struct.__init__): modified to admit
3462 * IPython/Struct.py (Struct.__init__): modified to admit
3459 initialization via another struct.
3463 initialization via another struct.
3460
3464
3461 * IPython/genutils.py (SystemExec.__init__): New stateful
3465 * IPython/genutils.py (SystemExec.__init__): New stateful
3462 interface to xsys and bq. Useful for writing system scripts.
3466 interface to xsys and bq. Useful for writing system scripts.
3463
3467
3464 2002-05-30 Fernando Perez <fperez@colorado.edu>
3468 2002-05-30 Fernando Perez <fperez@colorado.edu>
3465
3469
3466 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3470 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3467 documents. This will make the user download smaller (it's getting
3471 documents. This will make the user download smaller (it's getting
3468 too big).
3472 too big).
3469
3473
3470 2002-05-29 Fernando Perez <fperez@colorado.edu>
3474 2002-05-29 Fernando Perez <fperez@colorado.edu>
3471
3475
3472 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3476 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3473 fix problems with shelve and pickle. Seems to work, but I don't
3477 fix problems with shelve and pickle. Seems to work, but I don't
3474 know if corner cases break it. Thanks to Mike Heeter
3478 know if corner cases break it. Thanks to Mike Heeter
3475 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3479 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3476
3480
3477 2002-05-24 Fernando Perez <fperez@colorado.edu>
3481 2002-05-24 Fernando Perez <fperez@colorado.edu>
3478
3482
3479 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3483 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3480 macros having broken.
3484 macros having broken.
3481
3485
3482 2002-05-21 Fernando Perez <fperez@colorado.edu>
3486 2002-05-21 Fernando Perez <fperez@colorado.edu>
3483
3487
3484 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3488 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3485 introduced logging bug: all history before logging started was
3489 introduced logging bug: all history before logging started was
3486 being written one character per line! This came from the redesign
3490 being written one character per line! This came from the redesign
3487 of the input history as a special list which slices to strings,
3491 of the input history as a special list which slices to strings,
3488 not to lists.
3492 not to lists.
3489
3493
3490 2002-05-20 Fernando Perez <fperez@colorado.edu>
3494 2002-05-20 Fernando Perez <fperez@colorado.edu>
3491
3495
3492 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3496 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3493 be an attribute of all classes in this module. The design of these
3497 be an attribute of all classes in this module. The design of these
3494 classes needs some serious overhauling.
3498 classes needs some serious overhauling.
3495
3499
3496 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3500 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3497 which was ignoring '_' in option names.
3501 which was ignoring '_' in option names.
3498
3502
3499 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3503 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3500 'Verbose_novars' to 'Context' and made it the new default. It's a
3504 'Verbose_novars' to 'Context' and made it the new default. It's a
3501 bit more readable and also safer than verbose.
3505 bit more readable and also safer than verbose.
3502
3506
3503 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3507 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3504 triple-quoted strings.
3508 triple-quoted strings.
3505
3509
3506 * IPython/OInspect.py (__all__): new module exposing the object
3510 * IPython/OInspect.py (__all__): new module exposing the object
3507 introspection facilities. Now the corresponding magics are dummy
3511 introspection facilities. Now the corresponding magics are dummy
3508 wrappers around this. Having this module will make it much easier
3512 wrappers around this. Having this module will make it much easier
3509 to put these functions into our modified pdb.
3513 to put these functions into our modified pdb.
3510 This new object inspector system uses the new colorizing module,
3514 This new object inspector system uses the new colorizing module,
3511 so source code and other things are nicely syntax highlighted.
3515 so source code and other things are nicely syntax highlighted.
3512
3516
3513 2002-05-18 Fernando Perez <fperez@colorado.edu>
3517 2002-05-18 Fernando Perez <fperez@colorado.edu>
3514
3518
3515 * IPython/ColorANSI.py: Split the coloring tools into a separate
3519 * IPython/ColorANSI.py: Split the coloring tools into a separate
3516 module so I can use them in other code easier (they were part of
3520 module so I can use them in other code easier (they were part of
3517 ultraTB).
3521 ultraTB).
3518
3522
3519 2002-05-17 Fernando Perez <fperez@colorado.edu>
3523 2002-05-17 Fernando Perez <fperez@colorado.edu>
3520
3524
3521 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3525 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3522 fixed it to set the global 'g' also to the called instance, as
3526 fixed it to set the global 'g' also to the called instance, as
3523 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3527 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3524 user's 'g' variables).
3528 user's 'g' variables).
3525
3529
3526 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3530 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3527 global variables (aliases to _ih,_oh) so that users which expect
3531 global variables (aliases to _ih,_oh) so that users which expect
3528 In[5] or Out[7] to work aren't unpleasantly surprised.
3532 In[5] or Out[7] to work aren't unpleasantly surprised.
3529 (InputList.__getslice__): new class to allow executing slices of
3533 (InputList.__getslice__): new class to allow executing slices of
3530 input history directly. Very simple class, complements the use of
3534 input history directly. Very simple class, complements the use of
3531 macros.
3535 macros.
3532
3536
3533 2002-05-16 Fernando Perez <fperez@colorado.edu>
3537 2002-05-16 Fernando Perez <fperez@colorado.edu>
3534
3538
3535 * setup.py (docdirbase): make doc directory be just doc/IPython
3539 * setup.py (docdirbase): make doc directory be just doc/IPython
3536 without version numbers, it will reduce clutter for users.
3540 without version numbers, it will reduce clutter for users.
3537
3541
3538 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3542 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3539 execfile call to prevent possible memory leak. See for details:
3543 execfile call to prevent possible memory leak. See for details:
3540 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3544 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3541
3545
3542 2002-05-15 Fernando Perez <fperez@colorado.edu>
3546 2002-05-15 Fernando Perez <fperez@colorado.edu>
3543
3547
3544 * IPython/Magic.py (Magic.magic_psource): made the object
3548 * IPython/Magic.py (Magic.magic_psource): made the object
3545 introspection names be more standard: pdoc, pdef, pfile and
3549 introspection names be more standard: pdoc, pdef, pfile and
3546 psource. They all print/page their output, and it makes
3550 psource. They all print/page their output, and it makes
3547 remembering them easier. Kept old names for compatibility as
3551 remembering them easier. Kept old names for compatibility as
3548 aliases.
3552 aliases.
3549
3553
3550 2002-05-14 Fernando Perez <fperez@colorado.edu>
3554 2002-05-14 Fernando Perez <fperez@colorado.edu>
3551
3555
3552 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3556 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3553 what the mouse problem was. The trick is to use gnuplot with temp
3557 what the mouse problem was. The trick is to use gnuplot with temp
3554 files and NOT with pipes (for data communication), because having
3558 files and NOT with pipes (for data communication), because having
3555 both pipes and the mouse on is bad news.
3559 both pipes and the mouse on is bad news.
3556
3560
3557 2002-05-13 Fernando Perez <fperez@colorado.edu>
3561 2002-05-13 Fernando Perez <fperez@colorado.edu>
3558
3562
3559 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3563 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3560 bug. Information would be reported about builtins even when
3564 bug. Information would be reported about builtins even when
3561 user-defined functions overrode them.
3565 user-defined functions overrode them.
3562
3566
3563 2002-05-11 Fernando Perez <fperez@colorado.edu>
3567 2002-05-11 Fernando Perez <fperez@colorado.edu>
3564
3568
3565 * IPython/__init__.py (__all__): removed FlexCompleter from
3569 * IPython/__init__.py (__all__): removed FlexCompleter from
3566 __all__ so that things don't fail in platforms without readline.
3570 __all__ so that things don't fail in platforms without readline.
3567
3571
3568 2002-05-10 Fernando Perez <fperez@colorado.edu>
3572 2002-05-10 Fernando Perez <fperez@colorado.edu>
3569
3573
3570 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3574 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3571 it requires Numeric, effectively making Numeric a dependency for
3575 it requires Numeric, effectively making Numeric a dependency for
3572 IPython.
3576 IPython.
3573
3577
3574 * Released 0.2.13
3578 * Released 0.2.13
3575
3579
3576 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3580 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3577 profiler interface. Now all the major options from the profiler
3581 profiler interface. Now all the major options from the profiler
3578 module are directly supported in IPython, both for single
3582 module are directly supported in IPython, both for single
3579 expressions (@prun) and for full programs (@run -p).
3583 expressions (@prun) and for full programs (@run -p).
3580
3584
3581 2002-05-09 Fernando Perez <fperez@colorado.edu>
3585 2002-05-09 Fernando Perez <fperez@colorado.edu>
3582
3586
3583 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3587 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3584 magic properly formatted for screen.
3588 magic properly formatted for screen.
3585
3589
3586 * setup.py (make_shortcut): Changed things to put pdf version in
3590 * setup.py (make_shortcut): Changed things to put pdf version in
3587 doc/ instead of doc/manual (had to change lyxport a bit).
3591 doc/ instead of doc/manual (had to change lyxport a bit).
3588
3592
3589 * IPython/Magic.py (Profile.string_stats): made profile runs go
3593 * IPython/Magic.py (Profile.string_stats): made profile runs go
3590 through pager (they are long and a pager allows searching, saving,
3594 through pager (they are long and a pager allows searching, saving,
3591 etc.)
3595 etc.)
3592
3596
3593 2002-05-08 Fernando Perez <fperez@colorado.edu>
3597 2002-05-08 Fernando Perez <fperez@colorado.edu>
3594
3598
3595 * Released 0.2.12
3599 * Released 0.2.12
3596
3600
3597 2002-05-06 Fernando Perez <fperez@colorado.edu>
3601 2002-05-06 Fernando Perez <fperez@colorado.edu>
3598
3602
3599 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3603 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3600 introduced); 'hist n1 n2' was broken.
3604 introduced); 'hist n1 n2' was broken.
3601 (Magic.magic_pdb): added optional on/off arguments to @pdb
3605 (Magic.magic_pdb): added optional on/off arguments to @pdb
3602 (Magic.magic_run): added option -i to @run, which executes code in
3606 (Magic.magic_run): added option -i to @run, which executes code in
3603 the IPython namespace instead of a clean one. Also added @irun as
3607 the IPython namespace instead of a clean one. Also added @irun as
3604 an alias to @run -i.
3608 an alias to @run -i.
3605
3609
3606 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3610 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3607 fixed (it didn't really do anything, the namespaces were wrong).
3611 fixed (it didn't really do anything, the namespaces were wrong).
3608
3612
3609 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3613 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3610
3614
3611 * IPython/__init__.py (__all__): Fixed package namespace, now
3615 * IPython/__init__.py (__all__): Fixed package namespace, now
3612 'import IPython' does give access to IPython.<all> as
3616 'import IPython' does give access to IPython.<all> as
3613 expected. Also renamed __release__ to Release.
3617 expected. Also renamed __release__ to Release.
3614
3618
3615 * IPython/Debugger.py (__license__): created new Pdb class which
3619 * IPython/Debugger.py (__license__): created new Pdb class which
3616 functions like a drop-in for the normal pdb.Pdb but does NOT
3620 functions like a drop-in for the normal pdb.Pdb but does NOT
3617 import readline by default. This way it doesn't muck up IPython's
3621 import readline by default. This way it doesn't muck up IPython's
3618 readline handling, and now tab-completion finally works in the
3622 readline handling, and now tab-completion finally works in the
3619 debugger -- sort of. It completes things globally visible, but the
3623 debugger -- sort of. It completes things globally visible, but the
3620 completer doesn't track the stack as pdb walks it. That's a bit
3624 completer doesn't track the stack as pdb walks it. That's a bit
3621 tricky, and I'll have to implement it later.
3625 tricky, and I'll have to implement it later.
3622
3626
3623 2002-05-05 Fernando Perez <fperez@colorado.edu>
3627 2002-05-05 Fernando Perez <fperez@colorado.edu>
3624
3628
3625 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3629 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3626 magic docstrings when printed via ? (explicit \'s were being
3630 magic docstrings when printed via ? (explicit \'s were being
3627 printed).
3631 printed).
3628
3632
3629 * IPython/ipmaker.py (make_IPython): fixed namespace
3633 * IPython/ipmaker.py (make_IPython): fixed namespace
3630 identification bug. Now variables loaded via logs or command-line
3634 identification bug. Now variables loaded via logs or command-line
3631 files are recognized in the interactive namespace by @who.
3635 files are recognized in the interactive namespace by @who.
3632
3636
3633 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3637 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3634 log replay system stemming from the string form of Structs.
3638 log replay system stemming from the string form of Structs.
3635
3639
3636 * IPython/Magic.py (Macro.__init__): improved macros to properly
3640 * IPython/Magic.py (Macro.__init__): improved macros to properly
3637 handle magic commands in them.
3641 handle magic commands in them.
3638 (Magic.magic_logstart): usernames are now expanded so 'logstart
3642 (Magic.magic_logstart): usernames are now expanded so 'logstart
3639 ~/mylog' now works.
3643 ~/mylog' now works.
3640
3644
3641 * IPython/iplib.py (complete): fixed bug where paths starting with
3645 * IPython/iplib.py (complete): fixed bug where paths starting with
3642 '/' would be completed as magic names.
3646 '/' would be completed as magic names.
3643
3647
3644 2002-05-04 Fernando Perez <fperez@colorado.edu>
3648 2002-05-04 Fernando Perez <fperez@colorado.edu>
3645
3649
3646 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3650 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3647 allow running full programs under the profiler's control.
3651 allow running full programs under the profiler's control.
3648
3652
3649 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3653 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3650 mode to report exceptions verbosely but without formatting
3654 mode to report exceptions verbosely but without formatting
3651 variables. This addresses the issue of ipython 'freezing' (it's
3655 variables. This addresses the issue of ipython 'freezing' (it's
3652 not frozen, but caught in an expensive formatting loop) when huge
3656 not frozen, but caught in an expensive formatting loop) when huge
3653 variables are in the context of an exception.
3657 variables are in the context of an exception.
3654 (VerboseTB.text): Added '--->' markers at line where exception was
3658 (VerboseTB.text): Added '--->' markers at line where exception was
3655 triggered. Much clearer to read, especially in NoColor modes.
3659 triggered. Much clearer to read, especially in NoColor modes.
3656
3660
3657 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3661 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3658 implemented in reverse when changing to the new parse_options().
3662 implemented in reverse when changing to the new parse_options().
3659
3663
3660 2002-05-03 Fernando Perez <fperez@colorado.edu>
3664 2002-05-03 Fernando Perez <fperez@colorado.edu>
3661
3665
3662 * IPython/Magic.py (Magic.parse_options): new function so that
3666 * IPython/Magic.py (Magic.parse_options): new function so that
3663 magics can parse options easier.
3667 magics can parse options easier.
3664 (Magic.magic_prun): new function similar to profile.run(),
3668 (Magic.magic_prun): new function similar to profile.run(),
3665 suggested by Chris Hart.
3669 suggested by Chris Hart.
3666 (Magic.magic_cd): fixed behavior so that it only changes if
3670 (Magic.magic_cd): fixed behavior so that it only changes if
3667 directory actually is in history.
3671 directory actually is in history.
3668
3672
3669 * IPython/usage.py (__doc__): added information about potential
3673 * IPython/usage.py (__doc__): added information about potential
3670 slowness of Verbose exception mode when there are huge data
3674 slowness of Verbose exception mode when there are huge data
3671 structures to be formatted (thanks to Archie Paulson).
3675 structures to be formatted (thanks to Archie Paulson).
3672
3676
3673 * IPython/ipmaker.py (make_IPython): Changed default logging
3677 * IPython/ipmaker.py (make_IPython): Changed default logging
3674 (when simply called with -log) to use curr_dir/ipython.log in
3678 (when simply called with -log) to use curr_dir/ipython.log in
3675 rotate mode. Fixed crash which was occuring with -log before
3679 rotate mode. Fixed crash which was occuring with -log before
3676 (thanks to Jim Boyle).
3680 (thanks to Jim Boyle).
3677
3681
3678 2002-05-01 Fernando Perez <fperez@colorado.edu>
3682 2002-05-01 Fernando Perez <fperez@colorado.edu>
3679
3683
3680 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3684 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3681 was nasty -- though somewhat of a corner case).
3685 was nasty -- though somewhat of a corner case).
3682
3686
3683 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3687 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3684 text (was a bug).
3688 text (was a bug).
3685
3689
3686 2002-04-30 Fernando Perez <fperez@colorado.edu>
3690 2002-04-30 Fernando Perez <fperez@colorado.edu>
3687
3691
3688 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3692 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3689 a print after ^D or ^C from the user so that the In[] prompt
3693 a print after ^D or ^C from the user so that the In[] prompt
3690 doesn't over-run the gnuplot one.
3694 doesn't over-run the gnuplot one.
3691
3695
3692 2002-04-29 Fernando Perez <fperez@colorado.edu>
3696 2002-04-29 Fernando Perez <fperez@colorado.edu>
3693
3697
3694 * Released 0.2.10
3698 * Released 0.2.10
3695
3699
3696 * IPython/__release__.py (version): get date dynamically.
3700 * IPython/__release__.py (version): get date dynamically.
3697
3701
3698 * Misc. documentation updates thanks to Arnd's comments. Also ran
3702 * Misc. documentation updates thanks to Arnd's comments. Also ran
3699 a full spellcheck on the manual (hadn't been done in a while).
3703 a full spellcheck on the manual (hadn't been done in a while).
3700
3704
3701 2002-04-27 Fernando Perez <fperez@colorado.edu>
3705 2002-04-27 Fernando Perez <fperez@colorado.edu>
3702
3706
3703 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3707 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3704 starting a log in mid-session would reset the input history list.
3708 starting a log in mid-session would reset the input history list.
3705
3709
3706 2002-04-26 Fernando Perez <fperez@colorado.edu>
3710 2002-04-26 Fernando Perez <fperez@colorado.edu>
3707
3711
3708 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3712 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3709 all files were being included in an update. Now anything in
3713 all files were being included in an update. Now anything in
3710 UserConfig that matches [A-Za-z]*.py will go (this excludes
3714 UserConfig that matches [A-Za-z]*.py will go (this excludes
3711 __init__.py)
3715 __init__.py)
3712
3716
3713 2002-04-25 Fernando Perez <fperez@colorado.edu>
3717 2002-04-25 Fernando Perez <fperez@colorado.edu>
3714
3718
3715 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3719 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3716 to __builtins__ so that any form of embedded or imported code can
3720 to __builtins__ so that any form of embedded or imported code can
3717 test for being inside IPython.
3721 test for being inside IPython.
3718
3722
3719 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3723 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3720 changed to GnuplotMagic because it's now an importable module,
3724 changed to GnuplotMagic because it's now an importable module,
3721 this makes the name follow that of the standard Gnuplot module.
3725 this makes the name follow that of the standard Gnuplot module.
3722 GnuplotMagic can now be loaded at any time in mid-session.
3726 GnuplotMagic can now be loaded at any time in mid-session.
3723
3727
3724 2002-04-24 Fernando Perez <fperez@colorado.edu>
3728 2002-04-24 Fernando Perez <fperez@colorado.edu>
3725
3729
3726 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3730 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3727 the globals (IPython has its own namespace) and the
3731 the globals (IPython has its own namespace) and the
3728 PhysicalQuantity stuff is much better anyway.
3732 PhysicalQuantity stuff is much better anyway.
3729
3733
3730 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3734 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3731 embedding example to standard user directory for
3735 embedding example to standard user directory for
3732 distribution. Also put it in the manual.
3736 distribution. Also put it in the manual.
3733
3737
3734 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3738 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3735 instance as first argument (so it doesn't rely on some obscure
3739 instance as first argument (so it doesn't rely on some obscure
3736 hidden global).
3740 hidden global).
3737
3741
3738 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3742 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3739 delimiters. While it prevents ().TAB from working, it allows
3743 delimiters. While it prevents ().TAB from working, it allows
3740 completions in open (... expressions. This is by far a more common
3744 completions in open (... expressions. This is by far a more common
3741 case.
3745 case.
3742
3746
3743 2002-04-23 Fernando Perez <fperez@colorado.edu>
3747 2002-04-23 Fernando Perez <fperez@colorado.edu>
3744
3748
3745 * IPython/Extensions/InterpreterPasteInput.py: new
3749 * IPython/Extensions/InterpreterPasteInput.py: new
3746 syntax-processing module for pasting lines with >>> or ... at the
3750 syntax-processing module for pasting lines with >>> or ... at the
3747 start.
3751 start.
3748
3752
3749 * IPython/Extensions/PhysicalQ_Interactive.py
3753 * IPython/Extensions/PhysicalQ_Interactive.py
3750 (PhysicalQuantityInteractive.__int__): fixed to work with either
3754 (PhysicalQuantityInteractive.__int__): fixed to work with either
3751 Numeric or math.
3755 Numeric or math.
3752
3756
3753 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3757 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3754 provided profiles. Now we have:
3758 provided profiles. Now we have:
3755 -math -> math module as * and cmath with its own namespace.
3759 -math -> math module as * and cmath with its own namespace.
3756 -numeric -> Numeric as *, plus gnuplot & grace
3760 -numeric -> Numeric as *, plus gnuplot & grace
3757 -physics -> same as before
3761 -physics -> same as before
3758
3762
3759 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3763 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3760 user-defined magics wouldn't be found by @magic if they were
3764 user-defined magics wouldn't be found by @magic if they were
3761 defined as class methods. Also cleaned up the namespace search
3765 defined as class methods. Also cleaned up the namespace search
3762 logic and the string building (to use %s instead of many repeated
3766 logic and the string building (to use %s instead of many repeated
3763 string adds).
3767 string adds).
3764
3768
3765 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3769 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3766 of user-defined magics to operate with class methods (cleaner, in
3770 of user-defined magics to operate with class methods (cleaner, in
3767 line with the gnuplot code).
3771 line with the gnuplot code).
3768
3772
3769 2002-04-22 Fernando Perez <fperez@colorado.edu>
3773 2002-04-22 Fernando Perez <fperez@colorado.edu>
3770
3774
3771 * setup.py: updated dependency list so that manual is updated when
3775 * setup.py: updated dependency list so that manual is updated when
3772 all included files change.
3776 all included files change.
3773
3777
3774 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3778 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3775 the delimiter removal option (the fix is ugly right now).
3779 the delimiter removal option (the fix is ugly right now).
3776
3780
3777 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3781 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3778 all of the math profile (quicker loading, no conflict between
3782 all of the math profile (quicker loading, no conflict between
3779 g-9.8 and g-gnuplot).
3783 g-9.8 and g-gnuplot).
3780
3784
3781 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3785 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3782 name of post-mortem files to IPython_crash_report.txt.
3786 name of post-mortem files to IPython_crash_report.txt.
3783
3787
3784 * Cleanup/update of the docs. Added all the new readline info and
3788 * Cleanup/update of the docs. Added all the new readline info and
3785 formatted all lists as 'real lists'.
3789 formatted all lists as 'real lists'.
3786
3790
3787 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3791 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3788 tab-completion options, since the full readline parse_and_bind is
3792 tab-completion options, since the full readline parse_and_bind is
3789 now accessible.
3793 now accessible.
3790
3794
3791 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3795 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3792 handling of readline options. Now users can specify any string to
3796 handling of readline options. Now users can specify any string to
3793 be passed to parse_and_bind(), as well as the delimiters to be
3797 be passed to parse_and_bind(), as well as the delimiters to be
3794 removed.
3798 removed.
3795 (InteractiveShell.__init__): Added __name__ to the global
3799 (InteractiveShell.__init__): Added __name__ to the global
3796 namespace so that things like Itpl which rely on its existence
3800 namespace so that things like Itpl which rely on its existence
3797 don't crash.
3801 don't crash.
3798 (InteractiveShell._prefilter): Defined the default with a _ so
3802 (InteractiveShell._prefilter): Defined the default with a _ so
3799 that prefilter() is easier to override, while the default one
3803 that prefilter() is easier to override, while the default one
3800 remains available.
3804 remains available.
3801
3805
3802 2002-04-18 Fernando Perez <fperez@colorado.edu>
3806 2002-04-18 Fernando Perez <fperez@colorado.edu>
3803
3807
3804 * Added information about pdb in the docs.
3808 * Added information about pdb in the docs.
3805
3809
3806 2002-04-17 Fernando Perez <fperez@colorado.edu>
3810 2002-04-17 Fernando Perez <fperez@colorado.edu>
3807
3811
3808 * IPython/ipmaker.py (make_IPython): added rc_override option to
3812 * IPython/ipmaker.py (make_IPython): added rc_override option to
3809 allow passing config options at creation time which may override
3813 allow passing config options at creation time which may override
3810 anything set in the config files or command line. This is
3814 anything set in the config files or command line. This is
3811 particularly useful for configuring embedded instances.
3815 particularly useful for configuring embedded instances.
3812
3816
3813 2002-04-15 Fernando Perez <fperez@colorado.edu>
3817 2002-04-15 Fernando Perez <fperez@colorado.edu>
3814
3818
3815 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3819 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3816 crash embedded instances because of the input cache falling out of
3820 crash embedded instances because of the input cache falling out of
3817 sync with the output counter.
3821 sync with the output counter.
3818
3822
3819 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3823 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3820 mode which calls pdb after an uncaught exception in IPython itself.
3824 mode which calls pdb after an uncaught exception in IPython itself.
3821
3825
3822 2002-04-14 Fernando Perez <fperez@colorado.edu>
3826 2002-04-14 Fernando Perez <fperez@colorado.edu>
3823
3827
3824 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3828 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3825 readline, fix it back after each call.
3829 readline, fix it back after each call.
3826
3830
3827 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3831 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3828 method to force all access via __call__(), which guarantees that
3832 method to force all access via __call__(), which guarantees that
3829 traceback references are properly deleted.
3833 traceback references are properly deleted.
3830
3834
3831 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3835 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3832 improve printing when pprint is in use.
3836 improve printing when pprint is in use.
3833
3837
3834 2002-04-13 Fernando Perez <fperez@colorado.edu>
3838 2002-04-13 Fernando Perez <fperez@colorado.edu>
3835
3839
3836 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3840 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3837 exceptions aren't caught anymore. If the user triggers one, he
3841 exceptions aren't caught anymore. If the user triggers one, he
3838 should know why he's doing it and it should go all the way up,
3842 should know why he's doing it and it should go all the way up,
3839 just like any other exception. So now @abort will fully kill the
3843 just like any other exception. So now @abort will fully kill the
3840 embedded interpreter and the embedding code (unless that happens
3844 embedded interpreter and the embedding code (unless that happens
3841 to catch SystemExit).
3845 to catch SystemExit).
3842
3846
3843 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3847 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3844 and a debugger() method to invoke the interactive pdb debugger
3848 and a debugger() method to invoke the interactive pdb debugger
3845 after printing exception information. Also added the corresponding
3849 after printing exception information. Also added the corresponding
3846 -pdb option and @pdb magic to control this feature, and updated
3850 -pdb option and @pdb magic to control this feature, and updated
3847 the docs. After a suggestion from Christopher Hart
3851 the docs. After a suggestion from Christopher Hart
3848 (hart-AT-caltech.edu).
3852 (hart-AT-caltech.edu).
3849
3853
3850 2002-04-12 Fernando Perez <fperez@colorado.edu>
3854 2002-04-12 Fernando Perez <fperez@colorado.edu>
3851
3855
3852 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3856 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3853 the exception handlers defined by the user (not the CrashHandler)
3857 the exception handlers defined by the user (not the CrashHandler)
3854 so that user exceptions don't trigger an ipython bug report.
3858 so that user exceptions don't trigger an ipython bug report.
3855
3859
3856 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3860 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3857 configurable (it should have always been so).
3861 configurable (it should have always been so).
3858
3862
3859 2002-03-26 Fernando Perez <fperez@colorado.edu>
3863 2002-03-26 Fernando Perez <fperez@colorado.edu>
3860
3864
3861 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3865 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3862 and there to fix embedding namespace issues. This should all be
3866 and there to fix embedding namespace issues. This should all be
3863 done in a more elegant way.
3867 done in a more elegant way.
3864
3868
3865 2002-03-25 Fernando Perez <fperez@colorado.edu>
3869 2002-03-25 Fernando Perez <fperez@colorado.edu>
3866
3870
3867 * IPython/genutils.py (get_home_dir): Try to make it work under
3871 * IPython/genutils.py (get_home_dir): Try to make it work under
3868 win9x also.
3872 win9x also.
3869
3873
3870 2002-03-20 Fernando Perez <fperez@colorado.edu>
3874 2002-03-20 Fernando Perez <fperez@colorado.edu>
3871
3875
3872 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3876 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3873 sys.displayhook untouched upon __init__.
3877 sys.displayhook untouched upon __init__.
3874
3878
3875 2002-03-19 Fernando Perez <fperez@colorado.edu>
3879 2002-03-19 Fernando Perez <fperez@colorado.edu>
3876
3880
3877 * Released 0.2.9 (for embedding bug, basically).
3881 * Released 0.2.9 (for embedding bug, basically).
3878
3882
3879 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3883 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3880 exceptions so that enclosing shell's state can be restored.
3884 exceptions so that enclosing shell's state can be restored.
3881
3885
3882 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3886 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3883 naming conventions in the .ipython/ dir.
3887 naming conventions in the .ipython/ dir.
3884
3888
3885 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3889 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3886 from delimiters list so filenames with - in them get expanded.
3890 from delimiters list so filenames with - in them get expanded.
3887
3891
3888 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3892 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3889 sys.displayhook not being properly restored after an embedded call.
3893 sys.displayhook not being properly restored after an embedded call.
3890
3894
3891 2002-03-18 Fernando Perez <fperez@colorado.edu>
3895 2002-03-18 Fernando Perez <fperez@colorado.edu>
3892
3896
3893 * Released 0.2.8
3897 * Released 0.2.8
3894
3898
3895 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3899 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3896 some files weren't being included in a -upgrade.
3900 some files weren't being included in a -upgrade.
3897 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3901 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3898 on' so that the first tab completes.
3902 on' so that the first tab completes.
3899 (InteractiveShell.handle_magic): fixed bug with spaces around
3903 (InteractiveShell.handle_magic): fixed bug with spaces around
3900 quotes breaking many magic commands.
3904 quotes breaking many magic commands.
3901
3905
3902 * setup.py: added note about ignoring the syntax error messages at
3906 * setup.py: added note about ignoring the syntax error messages at
3903 installation.
3907 installation.
3904
3908
3905 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3909 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3906 streamlining the gnuplot interface, now there's only one magic @gp.
3910 streamlining the gnuplot interface, now there's only one magic @gp.
3907
3911
3908 2002-03-17 Fernando Perez <fperez@colorado.edu>
3912 2002-03-17 Fernando Perez <fperez@colorado.edu>
3909
3913
3910 * IPython/UserConfig/magic_gnuplot.py: new name for the
3914 * IPython/UserConfig/magic_gnuplot.py: new name for the
3911 example-magic_pm.py file. Much enhanced system, now with a shell
3915 example-magic_pm.py file. Much enhanced system, now with a shell
3912 for communicating directly with gnuplot, one command at a time.
3916 for communicating directly with gnuplot, one command at a time.
3913
3917
3914 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3918 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3915 setting __name__=='__main__'.
3919 setting __name__=='__main__'.
3916
3920
3917 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3921 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3918 mini-shell for accessing gnuplot from inside ipython. Should
3922 mini-shell for accessing gnuplot from inside ipython. Should
3919 extend it later for grace access too. Inspired by Arnd's
3923 extend it later for grace access too. Inspired by Arnd's
3920 suggestion.
3924 suggestion.
3921
3925
3922 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3926 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3923 calling magic functions with () in their arguments. Thanks to Arnd
3927 calling magic functions with () in their arguments. Thanks to Arnd
3924 Baecker for pointing this to me.
3928 Baecker for pointing this to me.
3925
3929
3926 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3930 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3927 infinitely for integer or complex arrays (only worked with floats).
3931 infinitely for integer or complex arrays (only worked with floats).
3928
3932
3929 2002-03-16 Fernando Perez <fperez@colorado.edu>
3933 2002-03-16 Fernando Perez <fperez@colorado.edu>
3930
3934
3931 * setup.py: Merged setup and setup_windows into a single script
3935 * setup.py: Merged setup and setup_windows into a single script
3932 which properly handles things for windows users.
3936 which properly handles things for windows users.
3933
3937
3934 2002-03-15 Fernando Perez <fperez@colorado.edu>
3938 2002-03-15 Fernando Perez <fperez@colorado.edu>
3935
3939
3936 * Big change to the manual: now the magics are all automatically
3940 * Big change to the manual: now the magics are all automatically
3937 documented. This information is generated from their docstrings
3941 documented. This information is generated from their docstrings
3938 and put in a latex file included by the manual lyx file. This way
3942 and put in a latex file included by the manual lyx file. This way
3939 we get always up to date information for the magics. The manual
3943 we get always up to date information for the magics. The manual
3940 now also has proper version information, also auto-synced.
3944 now also has proper version information, also auto-synced.
3941
3945
3942 For this to work, an undocumented --magic_docstrings option was added.
3946 For this to work, an undocumented --magic_docstrings option was added.
3943
3947
3944 2002-03-13 Fernando Perez <fperez@colorado.edu>
3948 2002-03-13 Fernando Perez <fperez@colorado.edu>
3945
3949
3946 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3950 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3947 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3951 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3948
3952
3949 2002-03-12 Fernando Perez <fperez@colorado.edu>
3953 2002-03-12 Fernando Perez <fperez@colorado.edu>
3950
3954
3951 * IPython/ultraTB.py (TermColors): changed color escapes again to
3955 * IPython/ultraTB.py (TermColors): changed color escapes again to
3952 fix the (old, reintroduced) line-wrapping bug. Basically, if
3956 fix the (old, reintroduced) line-wrapping bug. Basically, if
3953 \001..\002 aren't given in the color escapes, lines get wrapped
3957 \001..\002 aren't given in the color escapes, lines get wrapped
3954 weirdly. But giving those screws up old xterms and emacs terms. So
3958 weirdly. But giving those screws up old xterms and emacs terms. So
3955 I added some logic for emacs terms to be ok, but I can't identify old
3959 I added some logic for emacs terms to be ok, but I can't identify old
3956 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3960 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3957
3961
3958 2002-03-10 Fernando Perez <fperez@colorado.edu>
3962 2002-03-10 Fernando Perez <fperez@colorado.edu>
3959
3963
3960 * IPython/usage.py (__doc__): Various documentation cleanups and
3964 * IPython/usage.py (__doc__): Various documentation cleanups and
3961 updates, both in usage docstrings and in the manual.
3965 updates, both in usage docstrings and in the manual.
3962
3966
3963 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3967 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3964 handling of caching. Set minimum acceptabe value for having a
3968 handling of caching. Set minimum acceptabe value for having a
3965 cache at 20 values.
3969 cache at 20 values.
3966
3970
3967 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3971 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3968 install_first_time function to a method, renamed it and added an
3972 install_first_time function to a method, renamed it and added an
3969 'upgrade' mode. Now people can update their config directory with
3973 'upgrade' mode. Now people can update their config directory with
3970 a simple command line switch (-upgrade, also new).
3974 a simple command line switch (-upgrade, also new).
3971
3975
3972 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3976 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3973 @file (convenient for automagic users under Python >= 2.2).
3977 @file (convenient for automagic users under Python >= 2.2).
3974 Removed @files (it seemed more like a plural than an abbrev. of
3978 Removed @files (it seemed more like a plural than an abbrev. of
3975 'file show').
3979 'file show').
3976
3980
3977 * IPython/iplib.py (install_first_time): Fixed crash if there were
3981 * IPython/iplib.py (install_first_time): Fixed crash if there were
3978 backup files ('~') in .ipython/ install directory.
3982 backup files ('~') in .ipython/ install directory.
3979
3983
3980 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3984 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3981 system. Things look fine, but these changes are fairly
3985 system. Things look fine, but these changes are fairly
3982 intrusive. Test them for a few days.
3986 intrusive. Test them for a few days.
3983
3987
3984 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3988 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3985 the prompts system. Now all in/out prompt strings are user
3989 the prompts system. Now all in/out prompt strings are user
3986 controllable. This is particularly useful for embedding, as one
3990 controllable. This is particularly useful for embedding, as one
3987 can tag embedded instances with particular prompts.
3991 can tag embedded instances with particular prompts.
3988
3992
3989 Also removed global use of sys.ps1/2, which now allows nested
3993 Also removed global use of sys.ps1/2, which now allows nested
3990 embeddings without any problems. Added command-line options for
3994 embeddings without any problems. Added command-line options for
3991 the prompt strings.
3995 the prompt strings.
3992
3996
3993 2002-03-08 Fernando Perez <fperez@colorado.edu>
3997 2002-03-08 Fernando Perez <fperez@colorado.edu>
3994
3998
3995 * IPython/UserConfig/example-embed-short.py (ipshell): added
3999 * IPython/UserConfig/example-embed-short.py (ipshell): added
3996 example file with the bare minimum code for embedding.
4000 example file with the bare minimum code for embedding.
3997
4001
3998 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4002 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3999 functionality for the embeddable shell to be activated/deactivated
4003 functionality for the embeddable shell to be activated/deactivated
4000 either globally or at each call.
4004 either globally or at each call.
4001
4005
4002 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4006 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4003 rewriting the prompt with '--->' for auto-inputs with proper
4007 rewriting the prompt with '--->' for auto-inputs with proper
4004 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4008 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4005 this is handled by the prompts class itself, as it should.
4009 this is handled by the prompts class itself, as it should.
4006
4010
4007 2002-03-05 Fernando Perez <fperez@colorado.edu>
4011 2002-03-05 Fernando Perez <fperez@colorado.edu>
4008
4012
4009 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4013 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4010 @logstart to avoid name clashes with the math log function.
4014 @logstart to avoid name clashes with the math log function.
4011
4015
4012 * Big updates to X/Emacs section of the manual.
4016 * Big updates to X/Emacs section of the manual.
4013
4017
4014 * Removed ipython_emacs. Milan explained to me how to pass
4018 * Removed ipython_emacs. Milan explained to me how to pass
4015 arguments to ipython through Emacs. Some day I'm going to end up
4019 arguments to ipython through Emacs. Some day I'm going to end up
4016 learning some lisp...
4020 learning some lisp...
4017
4021
4018 2002-03-04 Fernando Perez <fperez@colorado.edu>
4022 2002-03-04 Fernando Perez <fperez@colorado.edu>
4019
4023
4020 * IPython/ipython_emacs: Created script to be used as the
4024 * IPython/ipython_emacs: Created script to be used as the
4021 py-python-command Emacs variable so we can pass IPython
4025 py-python-command Emacs variable so we can pass IPython
4022 parameters. I can't figure out how to tell Emacs directly to pass
4026 parameters. I can't figure out how to tell Emacs directly to pass
4023 parameters to IPython, so a dummy shell script will do it.
4027 parameters to IPython, so a dummy shell script will do it.
4024
4028
4025 Other enhancements made for things to work better under Emacs'
4029 Other enhancements made for things to work better under Emacs'
4026 various types of terminals. Many thanks to Milan Zamazal
4030 various types of terminals. Many thanks to Milan Zamazal
4027 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4031 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4028
4032
4029 2002-03-01 Fernando Perez <fperez@colorado.edu>
4033 2002-03-01 Fernando Perez <fperez@colorado.edu>
4030
4034
4031 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4035 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4032 that loading of readline is now optional. This gives better
4036 that loading of readline is now optional. This gives better
4033 control to emacs users.
4037 control to emacs users.
4034
4038
4035 * IPython/ultraTB.py (__date__): Modified color escape sequences
4039 * IPython/ultraTB.py (__date__): Modified color escape sequences
4036 and now things work fine under xterm and in Emacs' term buffers
4040 and now things work fine under xterm and in Emacs' term buffers
4037 (though not shell ones). Well, in emacs you get colors, but all
4041 (though not shell ones). Well, in emacs you get colors, but all
4038 seem to be 'light' colors (no difference between dark and light
4042 seem to be 'light' colors (no difference between dark and light
4039 ones). But the garbage chars are gone, and also in xterms. It
4043 ones). But the garbage chars are gone, and also in xterms. It
4040 seems that now I'm using 'cleaner' ansi sequences.
4044 seems that now I'm using 'cleaner' ansi sequences.
4041
4045
4042 2002-02-21 Fernando Perez <fperez@colorado.edu>
4046 2002-02-21 Fernando Perez <fperez@colorado.edu>
4043
4047
4044 * Released 0.2.7 (mainly to publish the scoping fix).
4048 * Released 0.2.7 (mainly to publish the scoping fix).
4045
4049
4046 * IPython/Logger.py (Logger.logstate): added. A corresponding
4050 * IPython/Logger.py (Logger.logstate): added. A corresponding
4047 @logstate magic was created.
4051 @logstate magic was created.
4048
4052
4049 * IPython/Magic.py: fixed nested scoping problem under Python
4053 * IPython/Magic.py: fixed nested scoping problem under Python
4050 2.1.x (automagic wasn't working).
4054 2.1.x (automagic wasn't working).
4051
4055
4052 2002-02-20 Fernando Perez <fperez@colorado.edu>
4056 2002-02-20 Fernando Perez <fperez@colorado.edu>
4053
4057
4054 * Released 0.2.6.
4058 * Released 0.2.6.
4055
4059
4056 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4060 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4057 option so that logs can come out without any headers at all.
4061 option so that logs can come out without any headers at all.
4058
4062
4059 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4063 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4060 SciPy.
4064 SciPy.
4061
4065
4062 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4066 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4063 that embedded IPython calls don't require vars() to be explicitly
4067 that embedded IPython calls don't require vars() to be explicitly
4064 passed. Now they are extracted from the caller's frame (code
4068 passed. Now they are extracted from the caller's frame (code
4065 snatched from Eric Jones' weave). Added better documentation to
4069 snatched from Eric Jones' weave). Added better documentation to
4066 the section on embedding and the example file.
4070 the section on embedding and the example file.
4067
4071
4068 * IPython/genutils.py (page): Changed so that under emacs, it just
4072 * IPython/genutils.py (page): Changed so that under emacs, it just
4069 prints the string. You can then page up and down in the emacs
4073 prints the string. You can then page up and down in the emacs
4070 buffer itself. This is how the builtin help() works.
4074 buffer itself. This is how the builtin help() works.
4071
4075
4072 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4076 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4073 macro scoping: macros need to be executed in the user's namespace
4077 macro scoping: macros need to be executed in the user's namespace
4074 to work as if they had been typed by the user.
4078 to work as if they had been typed by the user.
4075
4079
4076 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4080 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4077 execute automatically (no need to type 'exec...'). They then
4081 execute automatically (no need to type 'exec...'). They then
4078 behave like 'true macros'. The printing system was also modified
4082 behave like 'true macros'. The printing system was also modified
4079 for this to work.
4083 for this to work.
4080
4084
4081 2002-02-19 Fernando Perez <fperez@colorado.edu>
4085 2002-02-19 Fernando Perez <fperez@colorado.edu>
4082
4086
4083 * IPython/genutils.py (page_file): new function for paging files
4087 * IPython/genutils.py (page_file): new function for paging files
4084 in an OS-independent way. Also necessary for file viewing to work
4088 in an OS-independent way. Also necessary for file viewing to work
4085 well inside Emacs buffers.
4089 well inside Emacs buffers.
4086 (page): Added checks for being in an emacs buffer.
4090 (page): Added checks for being in an emacs buffer.
4087 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4091 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4088 same bug in iplib.
4092 same bug in iplib.
4089
4093
4090 2002-02-18 Fernando Perez <fperez@colorado.edu>
4094 2002-02-18 Fernando Perez <fperez@colorado.edu>
4091
4095
4092 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4096 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4093 of readline so that IPython can work inside an Emacs buffer.
4097 of readline so that IPython can work inside an Emacs buffer.
4094
4098
4095 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4099 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4096 method signatures (they weren't really bugs, but it looks cleaner
4100 method signatures (they weren't really bugs, but it looks cleaner
4097 and keeps PyChecker happy).
4101 and keeps PyChecker happy).
4098
4102
4099 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4103 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4100 for implementing various user-defined hooks. Currently only
4104 for implementing various user-defined hooks. Currently only
4101 display is done.
4105 display is done.
4102
4106
4103 * IPython/Prompts.py (CachedOutput._display): changed display
4107 * IPython/Prompts.py (CachedOutput._display): changed display
4104 functions so that they can be dynamically changed by users easily.
4108 functions so that they can be dynamically changed by users easily.
4105
4109
4106 * IPython/Extensions/numeric_formats.py (num_display): added an
4110 * IPython/Extensions/numeric_formats.py (num_display): added an
4107 extension for printing NumPy arrays in flexible manners. It
4111 extension for printing NumPy arrays in flexible manners. It
4108 doesn't do anything yet, but all the structure is in
4112 doesn't do anything yet, but all the structure is in
4109 place. Ultimately the plan is to implement output format control
4113 place. Ultimately the plan is to implement output format control
4110 like in Octave.
4114 like in Octave.
4111
4115
4112 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4116 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4113 methods are found at run-time by all the automatic machinery.
4117 methods are found at run-time by all the automatic machinery.
4114
4118
4115 2002-02-17 Fernando Perez <fperez@colorado.edu>
4119 2002-02-17 Fernando Perez <fperez@colorado.edu>
4116
4120
4117 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4121 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4118 whole file a little.
4122 whole file a little.
4119
4123
4120 * ToDo: closed this document. Now there's a new_design.lyx
4124 * ToDo: closed this document. Now there's a new_design.lyx
4121 document for all new ideas. Added making a pdf of it for the
4125 document for all new ideas. Added making a pdf of it for the
4122 end-user distro.
4126 end-user distro.
4123
4127
4124 * IPython/Logger.py (Logger.switch_log): Created this to replace
4128 * IPython/Logger.py (Logger.switch_log): Created this to replace
4125 logon() and logoff(). It also fixes a nasty crash reported by
4129 logon() and logoff(). It also fixes a nasty crash reported by
4126 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4130 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4127
4131
4128 * IPython/iplib.py (complete): got auto-completion to work with
4132 * IPython/iplib.py (complete): got auto-completion to work with
4129 automagic (I had wanted this for a long time).
4133 automagic (I had wanted this for a long time).
4130
4134
4131 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4135 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4132 to @file, since file() is now a builtin and clashes with automagic
4136 to @file, since file() is now a builtin and clashes with automagic
4133 for @file.
4137 for @file.
4134
4138
4135 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4139 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4136 of this was previously in iplib, which had grown to more than 2000
4140 of this was previously in iplib, which had grown to more than 2000
4137 lines, way too long. No new functionality, but it makes managing
4141 lines, way too long. No new functionality, but it makes managing
4138 the code a bit easier.
4142 the code a bit easier.
4139
4143
4140 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4144 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4141 information to crash reports.
4145 information to crash reports.
4142
4146
4143 2002-02-12 Fernando Perez <fperez@colorado.edu>
4147 2002-02-12 Fernando Perez <fperez@colorado.edu>
4144
4148
4145 * Released 0.2.5.
4149 * Released 0.2.5.
4146
4150
4147 2002-02-11 Fernando Perez <fperez@colorado.edu>
4151 2002-02-11 Fernando Perez <fperez@colorado.edu>
4148
4152
4149 * Wrote a relatively complete Windows installer. It puts
4153 * Wrote a relatively complete Windows installer. It puts
4150 everything in place, creates Start Menu entries and fixes the
4154 everything in place, creates Start Menu entries and fixes the
4151 color issues. Nothing fancy, but it works.
4155 color issues. Nothing fancy, but it works.
4152
4156
4153 2002-02-10 Fernando Perez <fperez@colorado.edu>
4157 2002-02-10 Fernando Perez <fperez@colorado.edu>
4154
4158
4155 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4159 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4156 os.path.expanduser() call so that we can type @run ~/myfile.py and
4160 os.path.expanduser() call so that we can type @run ~/myfile.py and
4157 have thigs work as expected.
4161 have thigs work as expected.
4158
4162
4159 * IPython/genutils.py (page): fixed exception handling so things
4163 * IPython/genutils.py (page): fixed exception handling so things
4160 work both in Unix and Windows correctly. Quitting a pager triggers
4164 work both in Unix and Windows correctly. Quitting a pager triggers
4161 an IOError/broken pipe in Unix, and in windows not finding a pager
4165 an IOError/broken pipe in Unix, and in windows not finding a pager
4162 is also an IOError, so I had to actually look at the return value
4166 is also an IOError, so I had to actually look at the return value
4163 of the exception, not just the exception itself. Should be ok now.
4167 of the exception, not just the exception itself. Should be ok now.
4164
4168
4165 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4169 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4166 modified to allow case-insensitive color scheme changes.
4170 modified to allow case-insensitive color scheme changes.
4167
4171
4168 2002-02-09 Fernando Perez <fperez@colorado.edu>
4172 2002-02-09 Fernando Perez <fperez@colorado.edu>
4169
4173
4170 * IPython/genutils.py (native_line_ends): new function to leave
4174 * IPython/genutils.py (native_line_ends): new function to leave
4171 user config files with os-native line-endings.
4175 user config files with os-native line-endings.
4172
4176
4173 * README and manual updates.
4177 * README and manual updates.
4174
4178
4175 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4179 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4176 instead of StringType to catch Unicode strings.
4180 instead of StringType to catch Unicode strings.
4177
4181
4178 * IPython/genutils.py (filefind): fixed bug for paths with
4182 * IPython/genutils.py (filefind): fixed bug for paths with
4179 embedded spaces (very common in Windows).
4183 embedded spaces (very common in Windows).
4180
4184
4181 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4185 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4182 files under Windows, so that they get automatically associated
4186 files under Windows, so that they get automatically associated
4183 with a text editor. Windows makes it a pain to handle
4187 with a text editor. Windows makes it a pain to handle
4184 extension-less files.
4188 extension-less files.
4185
4189
4186 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4190 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4187 warning about readline only occur for Posix. In Windows there's no
4191 warning about readline only occur for Posix. In Windows there's no
4188 way to get readline, so why bother with the warning.
4192 way to get readline, so why bother with the warning.
4189
4193
4190 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4194 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4191 for __str__ instead of dir(self), since dir() changed in 2.2.
4195 for __str__ instead of dir(self), since dir() changed in 2.2.
4192
4196
4193 * Ported to Windows! Tested on XP, I suspect it should work fine
4197 * Ported to Windows! Tested on XP, I suspect it should work fine
4194 on NT/2000, but I don't think it will work on 98 et al. That
4198 on NT/2000, but I don't think it will work on 98 et al. That
4195 series of Windows is such a piece of junk anyway that I won't try
4199 series of Windows is such a piece of junk anyway that I won't try
4196 porting it there. The XP port was straightforward, showed a few
4200 porting it there. The XP port was straightforward, showed a few
4197 bugs here and there (fixed all), in particular some string
4201 bugs here and there (fixed all), in particular some string
4198 handling stuff which required considering Unicode strings (which
4202 handling stuff which required considering Unicode strings (which
4199 Windows uses). This is good, but hasn't been too tested :) No
4203 Windows uses). This is good, but hasn't been too tested :) No
4200 fancy installer yet, I'll put a note in the manual so people at
4204 fancy installer yet, I'll put a note in the manual so people at
4201 least make manually a shortcut.
4205 least make manually a shortcut.
4202
4206
4203 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4207 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4204 into a single one, "colors". This now controls both prompt and
4208 into a single one, "colors". This now controls both prompt and
4205 exception color schemes, and can be changed both at startup
4209 exception color schemes, and can be changed both at startup
4206 (either via command-line switches or via ipythonrc files) and at
4210 (either via command-line switches or via ipythonrc files) and at
4207 runtime, with @colors.
4211 runtime, with @colors.
4208 (Magic.magic_run): renamed @prun to @run and removed the old
4212 (Magic.magic_run): renamed @prun to @run and removed the old
4209 @run. The two were too similar to warrant keeping both.
4213 @run. The two were too similar to warrant keeping both.
4210
4214
4211 2002-02-03 Fernando Perez <fperez@colorado.edu>
4215 2002-02-03 Fernando Perez <fperez@colorado.edu>
4212
4216
4213 * IPython/iplib.py (install_first_time): Added comment on how to
4217 * IPython/iplib.py (install_first_time): Added comment on how to
4214 configure the color options for first-time users. Put a <return>
4218 configure the color options for first-time users. Put a <return>
4215 request at the end so that small-terminal users get a chance to
4219 request at the end so that small-terminal users get a chance to
4216 read the startup info.
4220 read the startup info.
4217
4221
4218 2002-01-23 Fernando Perez <fperez@colorado.edu>
4222 2002-01-23 Fernando Perez <fperez@colorado.edu>
4219
4223
4220 * IPython/iplib.py (CachedOutput.update): Changed output memory
4224 * IPython/iplib.py (CachedOutput.update): Changed output memory
4221 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4225 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4222 input history we still use _i. Did this b/c these variable are
4226 input history we still use _i. Did this b/c these variable are
4223 very commonly used in interactive work, so the less we need to
4227 very commonly used in interactive work, so the less we need to
4224 type the better off we are.
4228 type the better off we are.
4225 (Magic.magic_prun): updated @prun to better handle the namespaces
4229 (Magic.magic_prun): updated @prun to better handle the namespaces
4226 the file will run in, including a fix for __name__ not being set
4230 the file will run in, including a fix for __name__ not being set
4227 before.
4231 before.
4228
4232
4229 2002-01-20 Fernando Perez <fperez@colorado.edu>
4233 2002-01-20 Fernando Perez <fperez@colorado.edu>
4230
4234
4231 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4235 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4232 extra garbage for Python 2.2. Need to look more carefully into
4236 extra garbage for Python 2.2. Need to look more carefully into
4233 this later.
4237 this later.
4234
4238
4235 2002-01-19 Fernando Perez <fperez@colorado.edu>
4239 2002-01-19 Fernando Perez <fperez@colorado.edu>
4236
4240
4237 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4241 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4238 display SyntaxError exceptions properly formatted when they occur
4242 display SyntaxError exceptions properly formatted when they occur
4239 (they can be triggered by imported code).
4243 (they can be triggered by imported code).
4240
4244
4241 2002-01-18 Fernando Perez <fperez@colorado.edu>
4245 2002-01-18 Fernando Perez <fperez@colorado.edu>
4242
4246
4243 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4247 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4244 SyntaxError exceptions are reported nicely formatted, instead of
4248 SyntaxError exceptions are reported nicely formatted, instead of
4245 spitting out only offset information as before.
4249 spitting out only offset information as before.
4246 (Magic.magic_prun): Added the @prun function for executing
4250 (Magic.magic_prun): Added the @prun function for executing
4247 programs with command line args inside IPython.
4251 programs with command line args inside IPython.
4248
4252
4249 2002-01-16 Fernando Perez <fperez@colorado.edu>
4253 2002-01-16 Fernando Perez <fperez@colorado.edu>
4250
4254
4251 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4255 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4252 to *not* include the last item given in a range. This brings their
4256 to *not* include the last item given in a range. This brings their
4253 behavior in line with Python's slicing:
4257 behavior in line with Python's slicing:
4254 a[n1:n2] -> a[n1]...a[n2-1]
4258 a[n1:n2] -> a[n1]...a[n2-1]
4255 It may be a bit less convenient, but I prefer to stick to Python's
4259 It may be a bit less convenient, but I prefer to stick to Python's
4256 conventions *everywhere*, so users never have to wonder.
4260 conventions *everywhere*, so users never have to wonder.
4257 (Magic.magic_macro): Added @macro function to ease the creation of
4261 (Magic.magic_macro): Added @macro function to ease the creation of
4258 macros.
4262 macros.
4259
4263
4260 2002-01-05 Fernando Perez <fperez@colorado.edu>
4264 2002-01-05 Fernando Perez <fperez@colorado.edu>
4261
4265
4262 * Released 0.2.4.
4266 * Released 0.2.4.
4263
4267
4264 * IPython/iplib.py (Magic.magic_pdef):
4268 * IPython/iplib.py (Magic.magic_pdef):
4265 (InteractiveShell.safe_execfile): report magic lines and error
4269 (InteractiveShell.safe_execfile): report magic lines and error
4266 lines without line numbers so one can easily copy/paste them for
4270 lines without line numbers so one can easily copy/paste them for
4267 re-execution.
4271 re-execution.
4268
4272
4269 * Updated manual with recent changes.
4273 * Updated manual with recent changes.
4270
4274
4271 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4275 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4272 docstring printing when class? is called. Very handy for knowing
4276 docstring printing when class? is called. Very handy for knowing
4273 how to create class instances (as long as __init__ is well
4277 how to create class instances (as long as __init__ is well
4274 documented, of course :)
4278 documented, of course :)
4275 (Magic.magic_doc): print both class and constructor docstrings.
4279 (Magic.magic_doc): print both class and constructor docstrings.
4276 (Magic.magic_pdef): give constructor info if passed a class and
4280 (Magic.magic_pdef): give constructor info if passed a class and
4277 __call__ info for callable object instances.
4281 __call__ info for callable object instances.
4278
4282
4279 2002-01-04 Fernando Perez <fperez@colorado.edu>
4283 2002-01-04 Fernando Perez <fperez@colorado.edu>
4280
4284
4281 * Made deep_reload() off by default. It doesn't always work
4285 * Made deep_reload() off by default. It doesn't always work
4282 exactly as intended, so it's probably safer to have it off. It's
4286 exactly as intended, so it's probably safer to have it off. It's
4283 still available as dreload() anyway, so nothing is lost.
4287 still available as dreload() anyway, so nothing is lost.
4284
4288
4285 2002-01-02 Fernando Perez <fperez@colorado.edu>
4289 2002-01-02 Fernando Perez <fperez@colorado.edu>
4286
4290
4287 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4291 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4288 so I wanted an updated release).
4292 so I wanted an updated release).
4289
4293
4290 2001-12-27 Fernando Perez <fperez@colorado.edu>
4294 2001-12-27 Fernando Perez <fperez@colorado.edu>
4291
4295
4292 * IPython/iplib.py (InteractiveShell.interact): Added the original
4296 * IPython/iplib.py (InteractiveShell.interact): Added the original
4293 code from 'code.py' for this module in order to change the
4297 code from 'code.py' for this module in order to change the
4294 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4298 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4295 the history cache would break when the user hit Ctrl-C, and
4299 the history cache would break when the user hit Ctrl-C, and
4296 interact() offers no way to add any hooks to it.
4300 interact() offers no way to add any hooks to it.
4297
4301
4298 2001-12-23 Fernando Perez <fperez@colorado.edu>
4302 2001-12-23 Fernando Perez <fperez@colorado.edu>
4299
4303
4300 * setup.py: added check for 'MANIFEST' before trying to remove
4304 * setup.py: added check for 'MANIFEST' before trying to remove
4301 it. Thanks to Sean Reifschneider.
4305 it. Thanks to Sean Reifschneider.
4302
4306
4303 2001-12-22 Fernando Perez <fperez@colorado.edu>
4307 2001-12-22 Fernando Perez <fperez@colorado.edu>
4304
4308
4305 * Released 0.2.2.
4309 * Released 0.2.2.
4306
4310
4307 * Finished (reasonably) writing the manual. Later will add the
4311 * Finished (reasonably) writing the manual. Later will add the
4308 python-standard navigation stylesheets, but for the time being
4312 python-standard navigation stylesheets, but for the time being
4309 it's fairly complete. Distribution will include html and pdf
4313 it's fairly complete. Distribution will include html and pdf
4310 versions.
4314 versions.
4311
4315
4312 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4316 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4313 (MayaVi author).
4317 (MayaVi author).
4314
4318
4315 2001-12-21 Fernando Perez <fperez@colorado.edu>
4319 2001-12-21 Fernando Perez <fperez@colorado.edu>
4316
4320
4317 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4321 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4318 good public release, I think (with the manual and the distutils
4322 good public release, I think (with the manual and the distutils
4319 installer). The manual can use some work, but that can go
4323 installer). The manual can use some work, but that can go
4320 slowly. Otherwise I think it's quite nice for end users. Next
4324 slowly. Otherwise I think it's quite nice for end users. Next
4321 summer, rewrite the guts of it...
4325 summer, rewrite the guts of it...
4322
4326
4323 * Changed format of ipythonrc files to use whitespace as the
4327 * Changed format of ipythonrc files to use whitespace as the
4324 separator instead of an explicit '='. Cleaner.
4328 separator instead of an explicit '='. Cleaner.
4325
4329
4326 2001-12-20 Fernando Perez <fperez@colorado.edu>
4330 2001-12-20 Fernando Perez <fperez@colorado.edu>
4327
4331
4328 * Started a manual in LyX. For now it's just a quick merge of the
4332 * Started a manual in LyX. For now it's just a quick merge of the
4329 various internal docstrings and READMEs. Later it may grow into a
4333 various internal docstrings and READMEs. Later it may grow into a
4330 nice, full-blown manual.
4334 nice, full-blown manual.
4331
4335
4332 * Set up a distutils based installer. Installation should now be
4336 * Set up a distutils based installer. Installation should now be
4333 trivially simple for end-users.
4337 trivially simple for end-users.
4334
4338
4335 2001-12-11 Fernando Perez <fperez@colorado.edu>
4339 2001-12-11 Fernando Perez <fperez@colorado.edu>
4336
4340
4337 * Released 0.2.0. First public release, announced it at
4341 * Released 0.2.0. First public release, announced it at
4338 comp.lang.python. From now on, just bugfixes...
4342 comp.lang.python. From now on, just bugfixes...
4339
4343
4340 * Went through all the files, set copyright/license notices and
4344 * Went through all the files, set copyright/license notices and
4341 cleaned up things. Ready for release.
4345 cleaned up things. Ready for release.
4342
4346
4343 2001-12-10 Fernando Perez <fperez@colorado.edu>
4347 2001-12-10 Fernando Perez <fperez@colorado.edu>
4344
4348
4345 * Changed the first-time installer not to use tarfiles. It's more
4349 * Changed the first-time installer not to use tarfiles. It's more
4346 robust now and less unix-dependent. Also makes it easier for
4350 robust now and less unix-dependent. Also makes it easier for
4347 people to later upgrade versions.
4351 people to later upgrade versions.
4348
4352
4349 * Changed @exit to @abort to reflect the fact that it's pretty
4353 * Changed @exit to @abort to reflect the fact that it's pretty
4350 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4354 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4351 becomes significant only when IPyhton is embedded: in that case,
4355 becomes significant only when IPyhton is embedded: in that case,
4352 C-D closes IPython only, but @abort kills the enclosing program
4356 C-D closes IPython only, but @abort kills the enclosing program
4353 too (unless it had called IPython inside a try catching
4357 too (unless it had called IPython inside a try catching
4354 SystemExit).
4358 SystemExit).
4355
4359
4356 * Created Shell module which exposes the actuall IPython Shell
4360 * Created Shell module which exposes the actuall IPython Shell
4357 classes, currently the normal and the embeddable one. This at
4361 classes, currently the normal and the embeddable one. This at
4358 least offers a stable interface we won't need to change when
4362 least offers a stable interface we won't need to change when
4359 (later) the internals are rewritten. That rewrite will be confined
4363 (later) the internals are rewritten. That rewrite will be confined
4360 to iplib and ipmaker, but the Shell interface should remain as is.
4364 to iplib and ipmaker, but the Shell interface should remain as is.
4361
4365
4362 * Added embed module which offers an embeddable IPShell object,
4366 * Added embed module which offers an embeddable IPShell object,
4363 useful to fire up IPython *inside* a running program. Great for
4367 useful to fire up IPython *inside* a running program. Great for
4364 debugging or dynamical data analysis.
4368 debugging or dynamical data analysis.
4365
4369
4366 2001-12-08 Fernando Perez <fperez@colorado.edu>
4370 2001-12-08 Fernando Perez <fperez@colorado.edu>
4367
4371
4368 * Fixed small bug preventing seeing info from methods of defined
4372 * Fixed small bug preventing seeing info from methods of defined
4369 objects (incorrect namespace in _ofind()).
4373 objects (incorrect namespace in _ofind()).
4370
4374
4371 * Documentation cleanup. Moved the main usage docstrings to a
4375 * Documentation cleanup. Moved the main usage docstrings to a
4372 separate file, usage.py (cleaner to maintain, and hopefully in the
4376 separate file, usage.py (cleaner to maintain, and hopefully in the
4373 future some perlpod-like way of producing interactive, man and
4377 future some perlpod-like way of producing interactive, man and
4374 html docs out of it will be found).
4378 html docs out of it will be found).
4375
4379
4376 * Added @profile to see your profile at any time.
4380 * Added @profile to see your profile at any time.
4377
4381
4378 * Added @p as an alias for 'print'. It's especially convenient if
4382 * Added @p as an alias for 'print'. It's especially convenient if
4379 using automagic ('p x' prints x).
4383 using automagic ('p x' prints x).
4380
4384
4381 * Small cleanups and fixes after a pychecker run.
4385 * Small cleanups and fixes after a pychecker run.
4382
4386
4383 * Changed the @cd command to handle @cd - and @cd -<n> for
4387 * Changed the @cd command to handle @cd - and @cd -<n> for
4384 visiting any directory in _dh.
4388 visiting any directory in _dh.
4385
4389
4386 * Introduced _dh, a history of visited directories. @dhist prints
4390 * Introduced _dh, a history of visited directories. @dhist prints
4387 it out with numbers.
4391 it out with numbers.
4388
4392
4389 2001-12-07 Fernando Perez <fperez@colorado.edu>
4393 2001-12-07 Fernando Perez <fperez@colorado.edu>
4390
4394
4391 * Released 0.1.22
4395 * Released 0.1.22
4392
4396
4393 * Made initialization a bit more robust against invalid color
4397 * Made initialization a bit more robust against invalid color
4394 options in user input (exit, not traceback-crash).
4398 options in user input (exit, not traceback-crash).
4395
4399
4396 * Changed the bug crash reporter to write the report only in the
4400 * Changed the bug crash reporter to write the report only in the
4397 user's .ipython directory. That way IPython won't litter people's
4401 user's .ipython directory. That way IPython won't litter people's
4398 hard disks with crash files all over the place. Also print on
4402 hard disks with crash files all over the place. Also print on
4399 screen the necessary mail command.
4403 screen the necessary mail command.
4400
4404
4401 * With the new ultraTB, implemented LightBG color scheme for light
4405 * With the new ultraTB, implemented LightBG color scheme for light
4402 background terminals. A lot of people like white backgrounds, so I
4406 background terminals. A lot of people like white backgrounds, so I
4403 guess we should at least give them something readable.
4407 guess we should at least give them something readable.
4404
4408
4405 2001-12-06 Fernando Perez <fperez@colorado.edu>
4409 2001-12-06 Fernando Perez <fperez@colorado.edu>
4406
4410
4407 * Modified the structure of ultraTB. Now there's a proper class
4411 * Modified the structure of ultraTB. Now there's a proper class
4408 for tables of color schemes which allow adding schemes easily and
4412 for tables of color schemes which allow adding schemes easily and
4409 switching the active scheme without creating a new instance every
4413 switching the active scheme without creating a new instance every
4410 time (which was ridiculous). The syntax for creating new schemes
4414 time (which was ridiculous). The syntax for creating new schemes
4411 is also cleaner. I think ultraTB is finally done, with a clean
4415 is also cleaner. I think ultraTB is finally done, with a clean
4412 class structure. Names are also much cleaner (now there's proper
4416 class structure. Names are also much cleaner (now there's proper
4413 color tables, no need for every variable to also have 'color' in
4417 color tables, no need for every variable to also have 'color' in
4414 its name).
4418 its name).
4415
4419
4416 * Broke down genutils into separate files. Now genutils only
4420 * Broke down genutils into separate files. Now genutils only
4417 contains utility functions, and classes have been moved to their
4421 contains utility functions, and classes have been moved to their
4418 own files (they had enough independent functionality to warrant
4422 own files (they had enough independent functionality to warrant
4419 it): ConfigLoader, OutputTrap, Struct.
4423 it): ConfigLoader, OutputTrap, Struct.
4420
4424
4421 2001-12-05 Fernando Perez <fperez@colorado.edu>
4425 2001-12-05 Fernando Perez <fperez@colorado.edu>
4422
4426
4423 * IPython turns 21! Released version 0.1.21, as a candidate for
4427 * IPython turns 21! Released version 0.1.21, as a candidate for
4424 public consumption. If all goes well, release in a few days.
4428 public consumption. If all goes well, release in a few days.
4425
4429
4426 * Fixed path bug (files in Extensions/ directory wouldn't be found
4430 * Fixed path bug (files in Extensions/ directory wouldn't be found
4427 unless IPython/ was explicitly in sys.path).
4431 unless IPython/ was explicitly in sys.path).
4428
4432
4429 * Extended the FlexCompleter class as MagicCompleter to allow
4433 * Extended the FlexCompleter class as MagicCompleter to allow
4430 completion of @-starting lines.
4434 completion of @-starting lines.
4431
4435
4432 * Created __release__.py file as a central repository for release
4436 * Created __release__.py file as a central repository for release
4433 info that other files can read from.
4437 info that other files can read from.
4434
4438
4435 * Fixed small bug in logging: when logging was turned on in
4439 * Fixed small bug in logging: when logging was turned on in
4436 mid-session, old lines with special meanings (!@?) were being
4440 mid-session, old lines with special meanings (!@?) were being
4437 logged without the prepended comment, which is necessary since
4441 logged without the prepended comment, which is necessary since
4438 they are not truly valid python syntax. This should make session
4442 they are not truly valid python syntax. This should make session
4439 restores produce less errors.
4443 restores produce less errors.
4440
4444
4441 * The namespace cleanup forced me to make a FlexCompleter class
4445 * The namespace cleanup forced me to make a FlexCompleter class
4442 which is nothing but a ripoff of rlcompleter, but with selectable
4446 which is nothing but a ripoff of rlcompleter, but with selectable
4443 namespace (rlcompleter only works in __main__.__dict__). I'll try
4447 namespace (rlcompleter only works in __main__.__dict__). I'll try
4444 to submit a note to the authors to see if this change can be
4448 to submit a note to the authors to see if this change can be
4445 incorporated in future rlcompleter releases (Dec.6: done)
4449 incorporated in future rlcompleter releases (Dec.6: done)
4446
4450
4447 * More fixes to namespace handling. It was a mess! Now all
4451 * More fixes to namespace handling. It was a mess! Now all
4448 explicit references to __main__.__dict__ are gone (except when
4452 explicit references to __main__.__dict__ are gone (except when
4449 really needed) and everything is handled through the namespace
4453 really needed) and everything is handled through the namespace
4450 dicts in the IPython instance. We seem to be getting somewhere
4454 dicts in the IPython instance. We seem to be getting somewhere
4451 with this, finally...
4455 with this, finally...
4452
4456
4453 * Small documentation updates.
4457 * Small documentation updates.
4454
4458
4455 * Created the Extensions directory under IPython (with an
4459 * Created the Extensions directory under IPython (with an
4456 __init__.py). Put the PhysicalQ stuff there. This directory should
4460 __init__.py). Put the PhysicalQ stuff there. This directory should
4457 be used for all special-purpose extensions.
4461 be used for all special-purpose extensions.
4458
4462
4459 * File renaming:
4463 * File renaming:
4460 ipythonlib --> ipmaker
4464 ipythonlib --> ipmaker
4461 ipplib --> iplib
4465 ipplib --> iplib
4462 This makes a bit more sense in terms of what these files actually do.
4466 This makes a bit more sense in terms of what these files actually do.
4463
4467
4464 * Moved all the classes and functions in ipythonlib to ipplib, so
4468 * Moved all the classes and functions in ipythonlib to ipplib, so
4465 now ipythonlib only has make_IPython(). This will ease up its
4469 now ipythonlib only has make_IPython(). This will ease up its
4466 splitting in smaller functional chunks later.
4470 splitting in smaller functional chunks later.
4467
4471
4468 * Cleaned up (done, I think) output of @whos. Better column
4472 * Cleaned up (done, I think) output of @whos. Better column
4469 formatting, and now shows str(var) for as much as it can, which is
4473 formatting, and now shows str(var) for as much as it can, which is
4470 typically what one gets with a 'print var'.
4474 typically what one gets with a 'print var'.
4471
4475
4472 2001-12-04 Fernando Perez <fperez@colorado.edu>
4476 2001-12-04 Fernando Perez <fperez@colorado.edu>
4473
4477
4474 * Fixed namespace problems. Now builtin/IPyhton/user names get
4478 * Fixed namespace problems. Now builtin/IPyhton/user names get
4475 properly reported in their namespace. Internal namespace handling
4479 properly reported in their namespace. Internal namespace handling
4476 is finally getting decent (not perfect yet, but much better than
4480 is finally getting decent (not perfect yet, but much better than
4477 the ad-hoc mess we had).
4481 the ad-hoc mess we had).
4478
4482
4479 * Removed -exit option. If people just want to run a python
4483 * Removed -exit option. If people just want to run a python
4480 script, that's what the normal interpreter is for. Less
4484 script, that's what the normal interpreter is for. Less
4481 unnecessary options, less chances for bugs.
4485 unnecessary options, less chances for bugs.
4482
4486
4483 * Added a crash handler which generates a complete post-mortem if
4487 * Added a crash handler which generates a complete post-mortem if
4484 IPython crashes. This will help a lot in tracking bugs down the
4488 IPython crashes. This will help a lot in tracking bugs down the
4485 road.
4489 road.
4486
4490
4487 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4491 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4488 which were boud to functions being reassigned would bypass the
4492 which were boud to functions being reassigned would bypass the
4489 logger, breaking the sync of _il with the prompt counter. This
4493 logger, breaking the sync of _il with the prompt counter. This
4490 would then crash IPython later when a new line was logged.
4494 would then crash IPython later when a new line was logged.
4491
4495
4492 2001-12-02 Fernando Perez <fperez@colorado.edu>
4496 2001-12-02 Fernando Perez <fperez@colorado.edu>
4493
4497
4494 * Made IPython a package. This means people don't have to clutter
4498 * Made IPython a package. This means people don't have to clutter
4495 their sys.path with yet another directory. Changed the INSTALL
4499 their sys.path with yet another directory. Changed the INSTALL
4496 file accordingly.
4500 file accordingly.
4497
4501
4498 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4502 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4499 sorts its output (so @who shows it sorted) and @whos formats the
4503 sorts its output (so @who shows it sorted) and @whos formats the
4500 table according to the width of the first column. Nicer, easier to
4504 table according to the width of the first column. Nicer, easier to
4501 read. Todo: write a generic table_format() which takes a list of
4505 read. Todo: write a generic table_format() which takes a list of
4502 lists and prints it nicely formatted, with optional row/column
4506 lists and prints it nicely formatted, with optional row/column
4503 separators and proper padding and justification.
4507 separators and proper padding and justification.
4504
4508
4505 * Released 0.1.20
4509 * Released 0.1.20
4506
4510
4507 * Fixed bug in @log which would reverse the inputcache list (a
4511 * Fixed bug in @log which would reverse the inputcache list (a
4508 copy operation was missing).
4512 copy operation was missing).
4509
4513
4510 * Code cleanup. @config was changed to use page(). Better, since
4514 * Code cleanup. @config was changed to use page(). Better, since
4511 its output is always quite long.
4515 its output is always quite long.
4512
4516
4513 * Itpl is back as a dependency. I was having too many problems
4517 * Itpl is back as a dependency. I was having too many problems
4514 getting the parametric aliases to work reliably, and it's just
4518 getting the parametric aliases to work reliably, and it's just
4515 easier to code weird string operations with it than playing %()s
4519 easier to code weird string operations with it than playing %()s
4516 games. It's only ~6k, so I don't think it's too big a deal.
4520 games. It's only ~6k, so I don't think it's too big a deal.
4517
4521
4518 * Found (and fixed) a very nasty bug with history. !lines weren't
4522 * Found (and fixed) a very nasty bug with history. !lines weren't
4519 getting cached, and the out of sync caches would crash
4523 getting cached, and the out of sync caches would crash
4520 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4524 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4521 division of labor a bit better. Bug fixed, cleaner structure.
4525 division of labor a bit better. Bug fixed, cleaner structure.
4522
4526
4523 2001-12-01 Fernando Perez <fperez@colorado.edu>
4527 2001-12-01 Fernando Perez <fperez@colorado.edu>
4524
4528
4525 * Released 0.1.19
4529 * Released 0.1.19
4526
4530
4527 * Added option -n to @hist to prevent line number printing. Much
4531 * Added option -n to @hist to prevent line number printing. Much
4528 easier to copy/paste code this way.
4532 easier to copy/paste code this way.
4529
4533
4530 * Created global _il to hold the input list. Allows easy
4534 * Created global _il to hold the input list. Allows easy
4531 re-execution of blocks of code by slicing it (inspired by Janko's
4535 re-execution of blocks of code by slicing it (inspired by Janko's
4532 comment on 'macros').
4536 comment on 'macros').
4533
4537
4534 * Small fixes and doc updates.
4538 * Small fixes and doc updates.
4535
4539
4536 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4540 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4537 much too fragile with automagic. Handles properly multi-line
4541 much too fragile with automagic. Handles properly multi-line
4538 statements and takes parameters.
4542 statements and takes parameters.
4539
4543
4540 2001-11-30 Fernando Perez <fperez@colorado.edu>
4544 2001-11-30 Fernando Perez <fperez@colorado.edu>
4541
4545
4542 * Version 0.1.18 released.
4546 * Version 0.1.18 released.
4543
4547
4544 * Fixed nasty namespace bug in initial module imports.
4548 * Fixed nasty namespace bug in initial module imports.
4545
4549
4546 * Added copyright/license notes to all code files (except
4550 * Added copyright/license notes to all code files (except
4547 DPyGetOpt). For the time being, LGPL. That could change.
4551 DPyGetOpt). For the time being, LGPL. That could change.
4548
4552
4549 * Rewrote a much nicer README, updated INSTALL, cleaned up
4553 * Rewrote a much nicer README, updated INSTALL, cleaned up
4550 ipythonrc-* samples.
4554 ipythonrc-* samples.
4551
4555
4552 * Overall code/documentation cleanup. Basically ready for
4556 * Overall code/documentation cleanup. Basically ready for
4553 release. Only remaining thing: licence decision (LGPL?).
4557 release. Only remaining thing: licence decision (LGPL?).
4554
4558
4555 * Converted load_config to a class, ConfigLoader. Now recursion
4559 * Converted load_config to a class, ConfigLoader. Now recursion
4556 control is better organized. Doesn't include the same file twice.
4560 control is better organized. Doesn't include the same file twice.
4557
4561
4558 2001-11-29 Fernando Perez <fperez@colorado.edu>
4562 2001-11-29 Fernando Perez <fperez@colorado.edu>
4559
4563
4560 * Got input history working. Changed output history variables from
4564 * Got input history working. Changed output history variables from
4561 _p to _o so that _i is for input and _o for output. Just cleaner
4565 _p to _o so that _i is for input and _o for output. Just cleaner
4562 convention.
4566 convention.
4563
4567
4564 * Implemented parametric aliases. This pretty much allows the
4568 * Implemented parametric aliases. This pretty much allows the
4565 alias system to offer full-blown shell convenience, I think.
4569 alias system to offer full-blown shell convenience, I think.
4566
4570
4567 * Version 0.1.17 released, 0.1.18 opened.
4571 * Version 0.1.17 released, 0.1.18 opened.
4568
4572
4569 * dot_ipython/ipythonrc (alias): added documentation.
4573 * dot_ipython/ipythonrc (alias): added documentation.
4570 (xcolor): Fixed small bug (xcolors -> xcolor)
4574 (xcolor): Fixed small bug (xcolors -> xcolor)
4571
4575
4572 * Changed the alias system. Now alias is a magic command to define
4576 * Changed the alias system. Now alias is a magic command to define
4573 aliases just like the shell. Rationale: the builtin magics should
4577 aliases just like the shell. Rationale: the builtin magics should
4574 be there for things deeply connected to IPython's
4578 be there for things deeply connected to IPython's
4575 architecture. And this is a much lighter system for what I think
4579 architecture. And this is a much lighter system for what I think
4576 is the really important feature: allowing users to define quickly
4580 is the really important feature: allowing users to define quickly
4577 magics that will do shell things for them, so they can customize
4581 magics that will do shell things for them, so they can customize
4578 IPython easily to match their work habits. If someone is really
4582 IPython easily to match their work habits. If someone is really
4579 desperate to have another name for a builtin alias, they can
4583 desperate to have another name for a builtin alias, they can
4580 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4584 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4581 works.
4585 works.
4582
4586
4583 2001-11-28 Fernando Perez <fperez@colorado.edu>
4587 2001-11-28 Fernando Perez <fperez@colorado.edu>
4584
4588
4585 * Changed @file so that it opens the source file at the proper
4589 * Changed @file so that it opens the source file at the proper
4586 line. Since it uses less, if your EDITOR environment is
4590 line. Since it uses less, if your EDITOR environment is
4587 configured, typing v will immediately open your editor of choice
4591 configured, typing v will immediately open your editor of choice
4588 right at the line where the object is defined. Not as quick as
4592 right at the line where the object is defined. Not as quick as
4589 having a direct @edit command, but for all intents and purposes it
4593 having a direct @edit command, but for all intents and purposes it
4590 works. And I don't have to worry about writing @edit to deal with
4594 works. And I don't have to worry about writing @edit to deal with
4591 all the editors, less does that.
4595 all the editors, less does that.
4592
4596
4593 * Version 0.1.16 released, 0.1.17 opened.
4597 * Version 0.1.16 released, 0.1.17 opened.
4594
4598
4595 * Fixed some nasty bugs in the page/page_dumb combo that could
4599 * Fixed some nasty bugs in the page/page_dumb combo that could
4596 crash IPython.
4600 crash IPython.
4597
4601
4598 2001-11-27 Fernando Perez <fperez@colorado.edu>
4602 2001-11-27 Fernando Perez <fperez@colorado.edu>
4599
4603
4600 * Version 0.1.15 released, 0.1.16 opened.
4604 * Version 0.1.15 released, 0.1.16 opened.
4601
4605
4602 * Finally got ? and ?? to work for undefined things: now it's
4606 * Finally got ? and ?? to work for undefined things: now it's
4603 possible to type {}.get? and get information about the get method
4607 possible to type {}.get? and get information about the get method
4604 of dicts, or os.path? even if only os is defined (so technically
4608 of dicts, or os.path? even if only os is defined (so technically
4605 os.path isn't). Works at any level. For example, after import os,
4609 os.path isn't). Works at any level. For example, after import os,
4606 os?, os.path?, os.path.abspath? all work. This is great, took some
4610 os?, os.path?, os.path.abspath? all work. This is great, took some
4607 work in _ofind.
4611 work in _ofind.
4608
4612
4609 * Fixed more bugs with logging. The sanest way to do it was to add
4613 * Fixed more bugs with logging. The sanest way to do it was to add
4610 to @log a 'mode' parameter. Killed two in one shot (this mode
4614 to @log a 'mode' parameter. Killed two in one shot (this mode
4611 option was a request of Janko's). I think it's finally clean
4615 option was a request of Janko's). I think it's finally clean
4612 (famous last words).
4616 (famous last words).
4613
4617
4614 * Added a page_dumb() pager which does a decent job of paging on
4618 * Added a page_dumb() pager which does a decent job of paging on
4615 screen, if better things (like less) aren't available. One less
4619 screen, if better things (like less) aren't available. One less
4616 unix dependency (someday maybe somebody will port this to
4620 unix dependency (someday maybe somebody will port this to
4617 windows).
4621 windows).
4618
4622
4619 * Fixed problem in magic_log: would lock of logging out if log
4623 * Fixed problem in magic_log: would lock of logging out if log
4620 creation failed (because it would still think it had succeeded).
4624 creation failed (because it would still think it had succeeded).
4621
4625
4622 * Improved the page() function using curses to auto-detect screen
4626 * Improved the page() function using curses to auto-detect screen
4623 size. Now it can make a much better decision on whether to print
4627 size. Now it can make a much better decision on whether to print
4624 or page a string. Option screen_length was modified: a value 0
4628 or page a string. Option screen_length was modified: a value 0
4625 means auto-detect, and that's the default now.
4629 means auto-detect, and that's the default now.
4626
4630
4627 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4631 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4628 go out. I'll test it for a few days, then talk to Janko about
4632 go out. I'll test it for a few days, then talk to Janko about
4629 licences and announce it.
4633 licences and announce it.
4630
4634
4631 * Fixed the length of the auto-generated ---> prompt which appears
4635 * Fixed the length of the auto-generated ---> prompt which appears
4632 for auto-parens and auto-quotes. Getting this right isn't trivial,
4636 for auto-parens and auto-quotes. Getting this right isn't trivial,
4633 with all the color escapes, different prompt types and optional
4637 with all the color escapes, different prompt types and optional
4634 separators. But it seems to be working in all the combinations.
4638 separators. But it seems to be working in all the combinations.
4635
4639
4636 2001-11-26 Fernando Perez <fperez@colorado.edu>
4640 2001-11-26 Fernando Perez <fperez@colorado.edu>
4637
4641
4638 * Wrote a regexp filter to get option types from the option names
4642 * Wrote a regexp filter to get option types from the option names
4639 string. This eliminates the need to manually keep two duplicate
4643 string. This eliminates the need to manually keep two duplicate
4640 lists.
4644 lists.
4641
4645
4642 * Removed the unneeded check_option_names. Now options are handled
4646 * Removed the unneeded check_option_names. Now options are handled
4643 in a much saner manner and it's easy to visually check that things
4647 in a much saner manner and it's easy to visually check that things
4644 are ok.
4648 are ok.
4645
4649
4646 * Updated version numbers on all files I modified to carry a
4650 * Updated version numbers on all files I modified to carry a
4647 notice so Janko and Nathan have clear version markers.
4651 notice so Janko and Nathan have clear version markers.
4648
4652
4649 * Updated docstring for ultraTB with my changes. I should send
4653 * Updated docstring for ultraTB with my changes. I should send
4650 this to Nathan.
4654 this to Nathan.
4651
4655
4652 * Lots of small fixes. Ran everything through pychecker again.
4656 * Lots of small fixes. Ran everything through pychecker again.
4653
4657
4654 * Made loading of deep_reload an cmd line option. If it's not too
4658 * Made loading of deep_reload an cmd line option. If it's not too
4655 kosher, now people can just disable it. With -nodeep_reload it's
4659 kosher, now people can just disable it. With -nodeep_reload it's
4656 still available as dreload(), it just won't overwrite reload().
4660 still available as dreload(), it just won't overwrite reload().
4657
4661
4658 * Moved many options to the no| form (-opt and -noopt
4662 * Moved many options to the no| form (-opt and -noopt
4659 accepted). Cleaner.
4663 accepted). Cleaner.
4660
4664
4661 * Changed magic_log so that if called with no parameters, it uses
4665 * Changed magic_log so that if called with no parameters, it uses
4662 'rotate' mode. That way auto-generated logs aren't automatically
4666 'rotate' mode. That way auto-generated logs aren't automatically
4663 over-written. For normal logs, now a backup is made if it exists
4667 over-written. For normal logs, now a backup is made if it exists
4664 (only 1 level of backups). A new 'backup' mode was added to the
4668 (only 1 level of backups). A new 'backup' mode was added to the
4665 Logger class to support this. This was a request by Janko.
4669 Logger class to support this. This was a request by Janko.
4666
4670
4667 * Added @logoff/@logon to stop/restart an active log.
4671 * Added @logoff/@logon to stop/restart an active log.
4668
4672
4669 * Fixed a lot of bugs in log saving/replay. It was pretty
4673 * Fixed a lot of bugs in log saving/replay. It was pretty
4670 broken. Now special lines (!@,/) appear properly in the command
4674 broken. Now special lines (!@,/) appear properly in the command
4671 history after a log replay.
4675 history after a log replay.
4672
4676
4673 * Tried and failed to implement full session saving via pickle. My
4677 * Tried and failed to implement full session saving via pickle. My
4674 idea was to pickle __main__.__dict__, but modules can't be
4678 idea was to pickle __main__.__dict__, but modules can't be
4675 pickled. This would be a better alternative to replaying logs, but
4679 pickled. This would be a better alternative to replaying logs, but
4676 seems quite tricky to get to work. Changed -session to be called
4680 seems quite tricky to get to work. Changed -session to be called
4677 -logplay, which more accurately reflects what it does. And if we
4681 -logplay, which more accurately reflects what it does. And if we
4678 ever get real session saving working, -session is now available.
4682 ever get real session saving working, -session is now available.
4679
4683
4680 * Implemented color schemes for prompts also. As for tracebacks,
4684 * Implemented color schemes for prompts also. As for tracebacks,
4681 currently only NoColor and Linux are supported. But now the
4685 currently only NoColor and Linux are supported. But now the
4682 infrastructure is in place, based on a generic ColorScheme
4686 infrastructure is in place, based on a generic ColorScheme
4683 class. So writing and activating new schemes both for the prompts
4687 class. So writing and activating new schemes both for the prompts
4684 and the tracebacks should be straightforward.
4688 and the tracebacks should be straightforward.
4685
4689
4686 * Version 0.1.13 released, 0.1.14 opened.
4690 * Version 0.1.13 released, 0.1.14 opened.
4687
4691
4688 * Changed handling of options for output cache. Now counter is
4692 * Changed handling of options for output cache. Now counter is
4689 hardwired starting at 1 and one specifies the maximum number of
4693 hardwired starting at 1 and one specifies the maximum number of
4690 entries *in the outcache* (not the max prompt counter). This is
4694 entries *in the outcache* (not the max prompt counter). This is
4691 much better, since many statements won't increase the cache
4695 much better, since many statements won't increase the cache
4692 count. It also eliminated some confusing options, now there's only
4696 count. It also eliminated some confusing options, now there's only
4693 one: cache_size.
4697 one: cache_size.
4694
4698
4695 * Added 'alias' magic function and magic_alias option in the
4699 * Added 'alias' magic function and magic_alias option in the
4696 ipythonrc file. Now the user can easily define whatever names he
4700 ipythonrc file. Now the user can easily define whatever names he
4697 wants for the magic functions without having to play weird
4701 wants for the magic functions without having to play weird
4698 namespace games. This gives IPython a real shell-like feel.
4702 namespace games. This gives IPython a real shell-like feel.
4699
4703
4700 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4704 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4701 @ or not).
4705 @ or not).
4702
4706
4703 This was one of the last remaining 'visible' bugs (that I know
4707 This was one of the last remaining 'visible' bugs (that I know
4704 of). I think if I can clean up the session loading so it works
4708 of). I think if I can clean up the session loading so it works
4705 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4709 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4706 about licensing).
4710 about licensing).
4707
4711
4708 2001-11-25 Fernando Perez <fperez@colorado.edu>
4712 2001-11-25 Fernando Perez <fperez@colorado.edu>
4709
4713
4710 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4714 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4711 there's a cleaner distinction between what ? and ?? show.
4715 there's a cleaner distinction between what ? and ?? show.
4712
4716
4713 * Added screen_length option. Now the user can define his own
4717 * Added screen_length option. Now the user can define his own
4714 screen size for page() operations.
4718 screen size for page() operations.
4715
4719
4716 * Implemented magic shell-like functions with automatic code
4720 * Implemented magic shell-like functions with automatic code
4717 generation. Now adding another function is just a matter of adding
4721 generation. Now adding another function is just a matter of adding
4718 an entry to a dict, and the function is dynamically generated at
4722 an entry to a dict, and the function is dynamically generated at
4719 run-time. Python has some really cool features!
4723 run-time. Python has some really cool features!
4720
4724
4721 * Renamed many options to cleanup conventions a little. Now all
4725 * Renamed many options to cleanup conventions a little. Now all
4722 are lowercase, and only underscores where needed. Also in the code
4726 are lowercase, and only underscores where needed. Also in the code
4723 option name tables are clearer.
4727 option name tables are clearer.
4724
4728
4725 * Changed prompts a little. Now input is 'In [n]:' instead of
4729 * Changed prompts a little. Now input is 'In [n]:' instead of
4726 'In[n]:='. This allows it the numbers to be aligned with the
4730 'In[n]:='. This allows it the numbers to be aligned with the
4727 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4731 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4728 Python (it was a Mathematica thing). The '...' continuation prompt
4732 Python (it was a Mathematica thing). The '...' continuation prompt
4729 was also changed a little to align better.
4733 was also changed a little to align better.
4730
4734
4731 * Fixed bug when flushing output cache. Not all _p<n> variables
4735 * Fixed bug when flushing output cache. Not all _p<n> variables
4732 exist, so their deletion needs to be wrapped in a try:
4736 exist, so their deletion needs to be wrapped in a try:
4733
4737
4734 * Figured out how to properly use inspect.formatargspec() (it
4738 * Figured out how to properly use inspect.formatargspec() (it
4735 requires the args preceded by *). So I removed all the code from
4739 requires the args preceded by *). So I removed all the code from
4736 _get_pdef in Magic, which was just replicating that.
4740 _get_pdef in Magic, which was just replicating that.
4737
4741
4738 * Added test to prefilter to allow redefining magic function names
4742 * Added test to prefilter to allow redefining magic function names
4739 as variables. This is ok, since the @ form is always available,
4743 as variables. This is ok, since the @ form is always available,
4740 but whe should allow the user to define a variable called 'ls' if
4744 but whe should allow the user to define a variable called 'ls' if
4741 he needs it.
4745 he needs it.
4742
4746
4743 * Moved the ToDo information from README into a separate ToDo.
4747 * Moved the ToDo information from README into a separate ToDo.
4744
4748
4745 * General code cleanup and small bugfixes. I think it's close to a
4749 * General code cleanup and small bugfixes. I think it's close to a
4746 state where it can be released, obviously with a big 'beta'
4750 state where it can be released, obviously with a big 'beta'
4747 warning on it.
4751 warning on it.
4748
4752
4749 * Got the magic function split to work. Now all magics are defined
4753 * Got the magic function split to work. Now all magics are defined
4750 in a separate class. It just organizes things a bit, and now
4754 in a separate class. It just organizes things a bit, and now
4751 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4755 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4752 was too long).
4756 was too long).
4753
4757
4754 * Changed @clear to @reset to avoid potential confusions with
4758 * Changed @clear to @reset to avoid potential confusions with
4755 the shell command clear. Also renamed @cl to @clear, which does
4759 the shell command clear. Also renamed @cl to @clear, which does
4756 exactly what people expect it to from their shell experience.
4760 exactly what people expect it to from their shell experience.
4757
4761
4758 Added a check to the @reset command (since it's so
4762 Added a check to the @reset command (since it's so
4759 destructive, it's probably a good idea to ask for confirmation).
4763 destructive, it's probably a good idea to ask for confirmation).
4760 But now reset only works for full namespace resetting. Since the
4764 But now reset only works for full namespace resetting. Since the
4761 del keyword is already there for deleting a few specific
4765 del keyword is already there for deleting a few specific
4762 variables, I don't see the point of having a redundant magic
4766 variables, I don't see the point of having a redundant magic
4763 function for the same task.
4767 function for the same task.
4764
4768
4765 2001-11-24 Fernando Perez <fperez@colorado.edu>
4769 2001-11-24 Fernando Perez <fperez@colorado.edu>
4766
4770
4767 * Updated the builtin docs (esp. the ? ones).
4771 * Updated the builtin docs (esp. the ? ones).
4768
4772
4769 * Ran all the code through pychecker. Not terribly impressed with
4773 * Ran all the code through pychecker. Not terribly impressed with
4770 it: lots of spurious warnings and didn't really find anything of
4774 it: lots of spurious warnings and didn't really find anything of
4771 substance (just a few modules being imported and not used).
4775 substance (just a few modules being imported and not used).
4772
4776
4773 * Implemented the new ultraTB functionality into IPython. New
4777 * Implemented the new ultraTB functionality into IPython. New
4774 option: xcolors. This chooses color scheme. xmode now only selects
4778 option: xcolors. This chooses color scheme. xmode now only selects
4775 between Plain and Verbose. Better orthogonality.
4779 between Plain and Verbose. Better orthogonality.
4776
4780
4777 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4781 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4778 mode and color scheme for the exception handlers. Now it's
4782 mode and color scheme for the exception handlers. Now it's
4779 possible to have the verbose traceback with no coloring.
4783 possible to have the verbose traceback with no coloring.
4780
4784
4781 2001-11-23 Fernando Perez <fperez@colorado.edu>
4785 2001-11-23 Fernando Perez <fperez@colorado.edu>
4782
4786
4783 * Version 0.1.12 released, 0.1.13 opened.
4787 * Version 0.1.12 released, 0.1.13 opened.
4784
4788
4785 * Removed option to set auto-quote and auto-paren escapes by
4789 * Removed option to set auto-quote and auto-paren escapes by
4786 user. The chances of breaking valid syntax are just too high. If
4790 user. The chances of breaking valid syntax are just too high. If
4787 someone *really* wants, they can always dig into the code.
4791 someone *really* wants, they can always dig into the code.
4788
4792
4789 * Made prompt separators configurable.
4793 * Made prompt separators configurable.
4790
4794
4791 2001-11-22 Fernando Perez <fperez@colorado.edu>
4795 2001-11-22 Fernando Perez <fperez@colorado.edu>
4792
4796
4793 * Small bugfixes in many places.
4797 * Small bugfixes in many places.
4794
4798
4795 * Removed the MyCompleter class from ipplib. It seemed redundant
4799 * Removed the MyCompleter class from ipplib. It seemed redundant
4796 with the C-p,C-n history search functionality. Less code to
4800 with the C-p,C-n history search functionality. Less code to
4797 maintain.
4801 maintain.
4798
4802
4799 * Moved all the original ipython.py code into ipythonlib.py. Right
4803 * Moved all the original ipython.py code into ipythonlib.py. Right
4800 now it's just one big dump into a function called make_IPython, so
4804 now it's just one big dump into a function called make_IPython, so
4801 no real modularity has been gained. But at least it makes the
4805 no real modularity has been gained. But at least it makes the
4802 wrapper script tiny, and since ipythonlib is a module, it gets
4806 wrapper script tiny, and since ipythonlib is a module, it gets
4803 compiled and startup is much faster.
4807 compiled and startup is much faster.
4804
4808
4805 This is a reasobably 'deep' change, so we should test it for a
4809 This is a reasobably 'deep' change, so we should test it for a
4806 while without messing too much more with the code.
4810 while without messing too much more with the code.
4807
4811
4808 2001-11-21 Fernando Perez <fperez@colorado.edu>
4812 2001-11-21 Fernando Perez <fperez@colorado.edu>
4809
4813
4810 * Version 0.1.11 released, 0.1.12 opened for further work.
4814 * Version 0.1.11 released, 0.1.12 opened for further work.
4811
4815
4812 * Removed dependency on Itpl. It was only needed in one place. It
4816 * Removed dependency on Itpl. It was only needed in one place. It
4813 would be nice if this became part of python, though. It makes life
4817 would be nice if this became part of python, though. It makes life
4814 *a lot* easier in some cases.
4818 *a lot* easier in some cases.
4815
4819
4816 * Simplified the prefilter code a bit. Now all handlers are
4820 * Simplified the prefilter code a bit. Now all handlers are
4817 expected to explicitly return a value (at least a blank string).
4821 expected to explicitly return a value (at least a blank string).
4818
4822
4819 * Heavy edits in ipplib. Removed the help system altogether. Now
4823 * Heavy edits in ipplib. Removed the help system altogether. Now
4820 obj?/?? is used for inspecting objects, a magic @doc prints
4824 obj?/?? is used for inspecting objects, a magic @doc prints
4821 docstrings, and full-blown Python help is accessed via the 'help'
4825 docstrings, and full-blown Python help is accessed via the 'help'
4822 keyword. This cleans up a lot of code (less to maintain) and does
4826 keyword. This cleans up a lot of code (less to maintain) and does
4823 the job. Since 'help' is now a standard Python component, might as
4827 the job. Since 'help' is now a standard Python component, might as
4824 well use it and remove duplicate functionality.
4828 well use it and remove duplicate functionality.
4825
4829
4826 Also removed the option to use ipplib as a standalone program. By
4830 Also removed the option to use ipplib as a standalone program. By
4827 now it's too dependent on other parts of IPython to function alone.
4831 now it's too dependent on other parts of IPython to function alone.
4828
4832
4829 * Fixed bug in genutils.pager. It would crash if the pager was
4833 * Fixed bug in genutils.pager. It would crash if the pager was
4830 exited immediately after opening (broken pipe).
4834 exited immediately after opening (broken pipe).
4831
4835
4832 * Trimmed down the VerboseTB reporting a little. The header is
4836 * Trimmed down the VerboseTB reporting a little. The header is
4833 much shorter now and the repeated exception arguments at the end
4837 much shorter now and the repeated exception arguments at the end
4834 have been removed. For interactive use the old header seemed a bit
4838 have been removed. For interactive use the old header seemed a bit
4835 excessive.
4839 excessive.
4836
4840
4837 * Fixed small bug in output of @whos for variables with multi-word
4841 * Fixed small bug in output of @whos for variables with multi-word
4838 types (only first word was displayed).
4842 types (only first word was displayed).
4839
4843
4840 2001-11-17 Fernando Perez <fperez@colorado.edu>
4844 2001-11-17 Fernando Perez <fperez@colorado.edu>
4841
4845
4842 * Version 0.1.10 released, 0.1.11 opened for further work.
4846 * Version 0.1.10 released, 0.1.11 opened for further work.
4843
4847
4844 * Modified dirs and friends. dirs now *returns* the stack (not
4848 * Modified dirs and friends. dirs now *returns* the stack (not
4845 prints), so one can manipulate it as a variable. Convenient to
4849 prints), so one can manipulate it as a variable. Convenient to
4846 travel along many directories.
4850 travel along many directories.
4847
4851
4848 * Fixed bug in magic_pdef: would only work with functions with
4852 * Fixed bug in magic_pdef: would only work with functions with
4849 arguments with default values.
4853 arguments with default values.
4850
4854
4851 2001-11-14 Fernando Perez <fperez@colorado.edu>
4855 2001-11-14 Fernando Perez <fperez@colorado.edu>
4852
4856
4853 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4857 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4854 example with IPython. Various other minor fixes and cleanups.
4858 example with IPython. Various other minor fixes and cleanups.
4855
4859
4856 * Version 0.1.9 released, 0.1.10 opened for further work.
4860 * Version 0.1.9 released, 0.1.10 opened for further work.
4857
4861
4858 * Added sys.path to the list of directories searched in the
4862 * Added sys.path to the list of directories searched in the
4859 execfile= option. It used to be the current directory and the
4863 execfile= option. It used to be the current directory and the
4860 user's IPYTHONDIR only.
4864 user's IPYTHONDIR only.
4861
4865
4862 2001-11-13 Fernando Perez <fperez@colorado.edu>
4866 2001-11-13 Fernando Perez <fperez@colorado.edu>
4863
4867
4864 * Reinstated the raw_input/prefilter separation that Janko had
4868 * Reinstated the raw_input/prefilter separation that Janko had
4865 initially. This gives a more convenient setup for extending the
4869 initially. This gives a more convenient setup for extending the
4866 pre-processor from the outside: raw_input always gets a string,
4870 pre-processor from the outside: raw_input always gets a string,
4867 and prefilter has to process it. We can then redefine prefilter
4871 and prefilter has to process it. We can then redefine prefilter
4868 from the outside and implement extensions for special
4872 from the outside and implement extensions for special
4869 purposes.
4873 purposes.
4870
4874
4871 Today I got one for inputting PhysicalQuantity objects
4875 Today I got one for inputting PhysicalQuantity objects
4872 (from Scientific) without needing any function calls at
4876 (from Scientific) without needing any function calls at
4873 all. Extremely convenient, and it's all done as a user-level
4877 all. Extremely convenient, and it's all done as a user-level
4874 extension (no IPython code was touched). Now instead of:
4878 extension (no IPython code was touched). Now instead of:
4875 a = PhysicalQuantity(4.2,'m/s**2')
4879 a = PhysicalQuantity(4.2,'m/s**2')
4876 one can simply say
4880 one can simply say
4877 a = 4.2 m/s**2
4881 a = 4.2 m/s**2
4878 or even
4882 or even
4879 a = 4.2 m/s^2
4883 a = 4.2 m/s^2
4880
4884
4881 I use this, but it's also a proof of concept: IPython really is
4885 I use this, but it's also a proof of concept: IPython really is
4882 fully user-extensible, even at the level of the parsing of the
4886 fully user-extensible, even at the level of the parsing of the
4883 command line. It's not trivial, but it's perfectly doable.
4887 command line. It's not trivial, but it's perfectly doable.
4884
4888
4885 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4889 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4886 the problem of modules being loaded in the inverse order in which
4890 the problem of modules being loaded in the inverse order in which
4887 they were defined in
4891 they were defined in
4888
4892
4889 * Version 0.1.8 released, 0.1.9 opened for further work.
4893 * Version 0.1.8 released, 0.1.9 opened for further work.
4890
4894
4891 * Added magics pdef, source and file. They respectively show the
4895 * Added magics pdef, source and file. They respectively show the
4892 definition line ('prototype' in C), source code and full python
4896 definition line ('prototype' in C), source code and full python
4893 file for any callable object. The object inspector oinfo uses
4897 file for any callable object. The object inspector oinfo uses
4894 these to show the same information.
4898 these to show the same information.
4895
4899
4896 * Version 0.1.7 released, 0.1.8 opened for further work.
4900 * Version 0.1.7 released, 0.1.8 opened for further work.
4897
4901
4898 * Separated all the magic functions into a class called Magic. The
4902 * Separated all the magic functions into a class called Magic. The
4899 InteractiveShell class was becoming too big for Xemacs to handle
4903 InteractiveShell class was becoming too big for Xemacs to handle
4900 (de-indenting a line would lock it up for 10 seconds while it
4904 (de-indenting a line would lock it up for 10 seconds while it
4901 backtracked on the whole class!)
4905 backtracked on the whole class!)
4902
4906
4903 FIXME: didn't work. It can be done, but right now namespaces are
4907 FIXME: didn't work. It can be done, but right now namespaces are
4904 all messed up. Do it later (reverted it for now, so at least
4908 all messed up. Do it later (reverted it for now, so at least
4905 everything works as before).
4909 everything works as before).
4906
4910
4907 * Got the object introspection system (magic_oinfo) working! I
4911 * Got the object introspection system (magic_oinfo) working! I
4908 think this is pretty much ready for release to Janko, so he can
4912 think this is pretty much ready for release to Janko, so he can
4909 test it for a while and then announce it. Pretty much 100% of what
4913 test it for a while and then announce it. Pretty much 100% of what
4910 I wanted for the 'phase 1' release is ready. Happy, tired.
4914 I wanted for the 'phase 1' release is ready. Happy, tired.
4911
4915
4912 2001-11-12 Fernando Perez <fperez@colorado.edu>
4916 2001-11-12 Fernando Perez <fperez@colorado.edu>
4913
4917
4914 * Version 0.1.6 released, 0.1.7 opened for further work.
4918 * Version 0.1.6 released, 0.1.7 opened for further work.
4915
4919
4916 * Fixed bug in printing: it used to test for truth before
4920 * Fixed bug in printing: it used to test for truth before
4917 printing, so 0 wouldn't print. Now checks for None.
4921 printing, so 0 wouldn't print. Now checks for None.
4918
4922
4919 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4923 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4920 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4924 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4921 reaches by hand into the outputcache. Think of a better way to do
4925 reaches by hand into the outputcache. Think of a better way to do
4922 this later.
4926 this later.
4923
4927
4924 * Various small fixes thanks to Nathan's comments.
4928 * Various small fixes thanks to Nathan's comments.
4925
4929
4926 * Changed magic_pprint to magic_Pprint. This way it doesn't
4930 * Changed magic_pprint to magic_Pprint. This way it doesn't
4927 collide with pprint() and the name is consistent with the command
4931 collide with pprint() and the name is consistent with the command
4928 line option.
4932 line option.
4929
4933
4930 * Changed prompt counter behavior to be fully like
4934 * Changed prompt counter behavior to be fully like
4931 Mathematica's. That is, even input that doesn't return a result
4935 Mathematica's. That is, even input that doesn't return a result
4932 raises the prompt counter. The old behavior was kind of confusing
4936 raises the prompt counter. The old behavior was kind of confusing
4933 (getting the same prompt number several times if the operation
4937 (getting the same prompt number several times if the operation
4934 didn't return a result).
4938 didn't return a result).
4935
4939
4936 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4940 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4937
4941
4938 * Fixed -Classic mode (wasn't working anymore).
4942 * Fixed -Classic mode (wasn't working anymore).
4939
4943
4940 * Added colored prompts using Nathan's new code. Colors are
4944 * Added colored prompts using Nathan's new code. Colors are
4941 currently hardwired, they can be user-configurable. For
4945 currently hardwired, they can be user-configurable. For
4942 developers, they can be chosen in file ipythonlib.py, at the
4946 developers, they can be chosen in file ipythonlib.py, at the
4943 beginning of the CachedOutput class def.
4947 beginning of the CachedOutput class def.
4944
4948
4945 2001-11-11 Fernando Perez <fperez@colorado.edu>
4949 2001-11-11 Fernando Perez <fperez@colorado.edu>
4946
4950
4947 * Version 0.1.5 released, 0.1.6 opened for further work.
4951 * Version 0.1.5 released, 0.1.6 opened for further work.
4948
4952
4949 * Changed magic_env to *return* the environment as a dict (not to
4953 * Changed magic_env to *return* the environment as a dict (not to
4950 print it). This way it prints, but it can also be processed.
4954 print it). This way it prints, but it can also be processed.
4951
4955
4952 * Added Verbose exception reporting to interactive
4956 * Added Verbose exception reporting to interactive
4953 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4957 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4954 traceback. Had to make some changes to the ultraTB file. This is
4958 traceback. Had to make some changes to the ultraTB file. This is
4955 probably the last 'big' thing in my mental todo list. This ties
4959 probably the last 'big' thing in my mental todo list. This ties
4956 in with the next entry:
4960 in with the next entry:
4957
4961
4958 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4962 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4959 has to specify is Plain, Color or Verbose for all exception
4963 has to specify is Plain, Color or Verbose for all exception
4960 handling.
4964 handling.
4961
4965
4962 * Removed ShellServices option. All this can really be done via
4966 * Removed ShellServices option. All this can really be done via
4963 the magic system. It's easier to extend, cleaner and has automatic
4967 the magic system. It's easier to extend, cleaner and has automatic
4964 namespace protection and documentation.
4968 namespace protection and documentation.
4965
4969
4966 2001-11-09 Fernando Perez <fperez@colorado.edu>
4970 2001-11-09 Fernando Perez <fperez@colorado.edu>
4967
4971
4968 * Fixed bug in output cache flushing (missing parameter to
4972 * Fixed bug in output cache flushing (missing parameter to
4969 __init__). Other small bugs fixed (found using pychecker).
4973 __init__). Other small bugs fixed (found using pychecker).
4970
4974
4971 * Version 0.1.4 opened for bugfixing.
4975 * Version 0.1.4 opened for bugfixing.
4972
4976
4973 2001-11-07 Fernando Perez <fperez@colorado.edu>
4977 2001-11-07 Fernando Perez <fperez@colorado.edu>
4974
4978
4975 * Version 0.1.3 released, mainly because of the raw_input bug.
4979 * Version 0.1.3 released, mainly because of the raw_input bug.
4976
4980
4977 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4981 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4978 and when testing for whether things were callable, a call could
4982 and when testing for whether things were callable, a call could
4979 actually be made to certain functions. They would get called again
4983 actually be made to certain functions. They would get called again
4980 once 'really' executed, with a resulting double call. A disaster
4984 once 'really' executed, with a resulting double call. A disaster
4981 in many cases (list.reverse() would never work!).
4985 in many cases (list.reverse() would never work!).
4982
4986
4983 * Removed prefilter() function, moved its code to raw_input (which
4987 * Removed prefilter() function, moved its code to raw_input (which
4984 after all was just a near-empty caller for prefilter). This saves
4988 after all was just a near-empty caller for prefilter). This saves
4985 a function call on every prompt, and simplifies the class a tiny bit.
4989 a function call on every prompt, and simplifies the class a tiny bit.
4986
4990
4987 * Fix _ip to __ip name in magic example file.
4991 * Fix _ip to __ip name in magic example file.
4988
4992
4989 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4993 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4990 work with non-gnu versions of tar.
4994 work with non-gnu versions of tar.
4991
4995
4992 2001-11-06 Fernando Perez <fperez@colorado.edu>
4996 2001-11-06 Fernando Perez <fperez@colorado.edu>
4993
4997
4994 * Version 0.1.2. Just to keep track of the recent changes.
4998 * Version 0.1.2. Just to keep track of the recent changes.
4995
4999
4996 * Fixed nasty bug in output prompt routine. It used to check 'if
5000 * Fixed nasty bug in output prompt routine. It used to check 'if
4997 arg != None...'. Problem is, this fails if arg implements a
5001 arg != None...'. Problem is, this fails if arg implements a
4998 special comparison (__cmp__) which disallows comparing to
5002 special comparison (__cmp__) which disallows comparing to
4999 None. Found it when trying to use the PhysicalQuantity module from
5003 None. Found it when trying to use the PhysicalQuantity module from
5000 ScientificPython.
5004 ScientificPython.
5001
5005
5002 2001-11-05 Fernando Perez <fperez@colorado.edu>
5006 2001-11-05 Fernando Perez <fperez@colorado.edu>
5003
5007
5004 * Also added dirs. Now the pushd/popd/dirs family functions
5008 * Also added dirs. Now the pushd/popd/dirs family functions
5005 basically like the shell, with the added convenience of going home
5009 basically like the shell, with the added convenience of going home
5006 when called with no args.
5010 when called with no args.
5007
5011
5008 * pushd/popd slightly modified to mimic shell behavior more
5012 * pushd/popd slightly modified to mimic shell behavior more
5009 closely.
5013 closely.
5010
5014
5011 * Added env,pushd,popd from ShellServices as magic functions. I
5015 * Added env,pushd,popd from ShellServices as magic functions. I
5012 think the cleanest will be to port all desired functions from
5016 think the cleanest will be to port all desired functions from
5013 ShellServices as magics and remove ShellServices altogether. This
5017 ShellServices as magics and remove ShellServices altogether. This
5014 will provide a single, clean way of adding functionality
5018 will provide a single, clean way of adding functionality
5015 (shell-type or otherwise) to IP.
5019 (shell-type or otherwise) to IP.
5016
5020
5017 2001-11-04 Fernando Perez <fperez@colorado.edu>
5021 2001-11-04 Fernando Perez <fperez@colorado.edu>
5018
5022
5019 * Added .ipython/ directory to sys.path. This way users can keep
5023 * Added .ipython/ directory to sys.path. This way users can keep
5020 customizations there and access them via import.
5024 customizations there and access them via import.
5021
5025
5022 2001-11-03 Fernando Perez <fperez@colorado.edu>
5026 2001-11-03 Fernando Perez <fperez@colorado.edu>
5023
5027
5024 * Opened version 0.1.1 for new changes.
5028 * Opened version 0.1.1 for new changes.
5025
5029
5026 * Changed version number to 0.1.0: first 'public' release, sent to
5030 * Changed version number to 0.1.0: first 'public' release, sent to
5027 Nathan and Janko.
5031 Nathan and Janko.
5028
5032
5029 * Lots of small fixes and tweaks.
5033 * Lots of small fixes and tweaks.
5030
5034
5031 * Minor changes to whos format. Now strings are shown, snipped if
5035 * Minor changes to whos format. Now strings are shown, snipped if
5032 too long.
5036 too long.
5033
5037
5034 * Changed ShellServices to work on __main__ so they show up in @who
5038 * Changed ShellServices to work on __main__ so they show up in @who
5035
5039
5036 * Help also works with ? at the end of a line:
5040 * Help also works with ? at the end of a line:
5037 ?sin and sin?
5041 ?sin and sin?
5038 both produce the same effect. This is nice, as often I use the
5042 both produce the same effect. This is nice, as often I use the
5039 tab-complete to find the name of a method, but I used to then have
5043 tab-complete to find the name of a method, but I used to then have
5040 to go to the beginning of the line to put a ? if I wanted more
5044 to go to the beginning of the line to put a ? if I wanted more
5041 info. Now I can just add the ? and hit return. Convenient.
5045 info. Now I can just add the ? and hit return. Convenient.
5042
5046
5043 2001-11-02 Fernando Perez <fperez@colorado.edu>
5047 2001-11-02 Fernando Perez <fperez@colorado.edu>
5044
5048
5045 * Python version check (>=2.1) added.
5049 * Python version check (>=2.1) added.
5046
5050
5047 * Added LazyPython documentation. At this point the docs are quite
5051 * Added LazyPython documentation. At this point the docs are quite
5048 a mess. A cleanup is in order.
5052 a mess. A cleanup is in order.
5049
5053
5050 * Auto-installer created. For some bizarre reason, the zipfiles
5054 * Auto-installer created. For some bizarre reason, the zipfiles
5051 module isn't working on my system. So I made a tar version
5055 module isn't working on my system. So I made a tar version
5052 (hopefully the command line options in various systems won't kill
5056 (hopefully the command line options in various systems won't kill
5053 me).
5057 me).
5054
5058
5055 * Fixes to Struct in genutils. Now all dictionary-like methods are
5059 * Fixes to Struct in genutils. Now all dictionary-like methods are
5056 protected (reasonably).
5060 protected (reasonably).
5057
5061
5058 * Added pager function to genutils and changed ? to print usage
5062 * Added pager function to genutils and changed ? to print usage
5059 note through it (it was too long).
5063 note through it (it was too long).
5060
5064
5061 * Added the LazyPython functionality. Works great! I changed the
5065 * Added the LazyPython functionality. Works great! I changed the
5062 auto-quote escape to ';', it's on home row and next to '. But
5066 auto-quote escape to ';', it's on home row and next to '. But
5063 both auto-quote and auto-paren (still /) escapes are command-line
5067 both auto-quote and auto-paren (still /) escapes are command-line
5064 parameters.
5068 parameters.
5065
5069
5066
5070
5067 2001-11-01 Fernando Perez <fperez@colorado.edu>
5071 2001-11-01 Fernando Perez <fperez@colorado.edu>
5068
5072
5069 * Version changed to 0.0.7. Fairly large change: configuration now
5073 * Version changed to 0.0.7. Fairly large change: configuration now
5070 is all stored in a directory, by default .ipython. There, all
5074 is all stored in a directory, by default .ipython. There, all
5071 config files have normal looking names (not .names)
5075 config files have normal looking names (not .names)
5072
5076
5073 * Version 0.0.6 Released first to Lucas and Archie as a test
5077 * Version 0.0.6 Released first to Lucas and Archie as a test
5074 run. Since it's the first 'semi-public' release, change version to
5078 run. Since it's the first 'semi-public' release, change version to
5075 > 0.0.6 for any changes now.
5079 > 0.0.6 for any changes now.
5076
5080
5077 * Stuff I had put in the ipplib.py changelog:
5081 * Stuff I had put in the ipplib.py changelog:
5078
5082
5079 Changes to InteractiveShell:
5083 Changes to InteractiveShell:
5080
5084
5081 - Made the usage message a parameter.
5085 - Made the usage message a parameter.
5082
5086
5083 - Require the name of the shell variable to be given. It's a bit
5087 - Require the name of the shell variable to be given. It's a bit
5084 of a hack, but allows the name 'shell' not to be hardwire in the
5088 of a hack, but allows the name 'shell' not to be hardwire in the
5085 magic (@) handler, which is problematic b/c it requires
5089 magic (@) handler, which is problematic b/c it requires
5086 polluting the global namespace with 'shell'. This in turn is
5090 polluting the global namespace with 'shell'. This in turn is
5087 fragile: if a user redefines a variable called shell, things
5091 fragile: if a user redefines a variable called shell, things
5088 break.
5092 break.
5089
5093
5090 - magic @: all functions available through @ need to be defined
5094 - magic @: all functions available through @ need to be defined
5091 as magic_<name>, even though they can be called simply as
5095 as magic_<name>, even though they can be called simply as
5092 @<name>. This allows the special command @magic to gather
5096 @<name>. This allows the special command @magic to gather
5093 information automatically about all existing magic functions,
5097 information automatically about all existing magic functions,
5094 even if they are run-time user extensions, by parsing the shell
5098 even if they are run-time user extensions, by parsing the shell
5095 instance __dict__ looking for special magic_ names.
5099 instance __dict__ looking for special magic_ names.
5096
5100
5097 - mainloop: added *two* local namespace parameters. This allows
5101 - mainloop: added *two* local namespace parameters. This allows
5098 the class to differentiate between parameters which were there
5102 the class to differentiate between parameters which were there
5099 before and after command line initialization was processed. This
5103 before and after command line initialization was processed. This
5100 way, later @who can show things loaded at startup by the
5104 way, later @who can show things loaded at startup by the
5101 user. This trick was necessary to make session saving/reloading
5105 user. This trick was necessary to make session saving/reloading
5102 really work: ideally after saving/exiting/reloading a session,
5106 really work: ideally after saving/exiting/reloading a session,
5103 *everythin* should look the same, including the output of @who. I
5107 *everythin* should look the same, including the output of @who. I
5104 was only able to make this work with this double namespace
5108 was only able to make this work with this double namespace
5105 trick.
5109 trick.
5106
5110
5107 - added a header to the logfile which allows (almost) full
5111 - added a header to the logfile which allows (almost) full
5108 session restoring.
5112 session restoring.
5109
5113
5110 - prepend lines beginning with @ or !, with a and log
5114 - prepend lines beginning with @ or !, with a and log
5111 them. Why? !lines: may be useful to know what you did @lines:
5115 them. Why? !lines: may be useful to know what you did @lines:
5112 they may affect session state. So when restoring a session, at
5116 they may affect session state. So when restoring a session, at
5113 least inform the user of their presence. I couldn't quite get
5117 least inform the user of their presence. I couldn't quite get
5114 them to properly re-execute, but at least the user is warned.
5118 them to properly re-execute, but at least the user is warned.
5115
5119
5116 * Started ChangeLog.
5120 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now