##// END OF EJS Templates
Fix KeyboardInterrupt trapping (Ctrl-C), which I think I recently broke.
fperez -
Show More
@@ -1,2271 +1,2267 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 1099 2006-01-29 21:05:57Z vivainio $
9 $Id: iplib.py 1102 2006-01-30 06:08:16Z fperez $
10 """
10 """
11
11
12 #*****************************************************************************
12 #*****************************************************************************
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
14 # Copyright (C) 2001-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
1173
1174 import IPython.rlineimpl as readline
1174 import IPython.rlineimpl as readline
1175 if not readline.have_readline:
1175 if not readline.have_readline:
1176 self.has_readline = 0
1176 self.has_readline = 0
1177 self.readline = None
1177 self.readline = None
1178 # no point in bugging windows users with this every time:
1178 # no point in bugging windows users with this every time:
1179 warn('Readline services not available on this platform.')
1179 warn('Readline services not available on this platform.')
1180 else:
1180 else:
1181 sys.modules['readline'] = readline
1181 sys.modules['readline'] = readline
1182 import atexit
1182 import atexit
1183 from IPython.completer import IPCompleter
1183 from IPython.completer import IPCompleter
1184 self.Completer = IPCompleter(self,
1184 self.Completer = IPCompleter(self,
1185 self.user_ns,
1185 self.user_ns,
1186 self.user_global_ns,
1186 self.user_global_ns,
1187 self.rc.readline_omit__names,
1187 self.rc.readline_omit__names,
1188 self.alias_table)
1188 self.alias_table)
1189
1189
1190 # Platform-specific configuration
1190 # Platform-specific configuration
1191 if os.name == 'nt':
1191 if os.name == 'nt':
1192 self.readline_startup_hook = readline.set_pre_input_hook
1192 self.readline_startup_hook = readline.set_pre_input_hook
1193 else:
1193 else:
1194 self.readline_startup_hook = readline.set_startup_hook
1194 self.readline_startup_hook = readline.set_startup_hook
1195
1195
1196 # Load user's initrc file (readline config)
1196 # Load user's initrc file (readline config)
1197 inputrc_name = os.environ.get('INPUTRC')
1197 inputrc_name = os.environ.get('INPUTRC')
1198 if inputrc_name is None:
1198 if inputrc_name is None:
1199 home_dir = get_home_dir()
1199 home_dir = get_home_dir()
1200 if home_dir is not None:
1200 if home_dir is not None:
1201 inputrc_name = os.path.join(home_dir,'.inputrc')
1201 inputrc_name = os.path.join(home_dir,'.inputrc')
1202 if os.path.isfile(inputrc_name):
1202 if os.path.isfile(inputrc_name):
1203 try:
1203 try:
1204 readline.read_init_file(inputrc_name)
1204 readline.read_init_file(inputrc_name)
1205 except:
1205 except:
1206 warn('Problems reading readline initialization file <%s>'
1206 warn('Problems reading readline initialization file <%s>'
1207 % inputrc_name)
1207 % inputrc_name)
1208
1208
1209 self.has_readline = 1
1209 self.has_readline = 1
1210 self.readline = readline
1210 self.readline = readline
1211 # save this in sys so embedded copies can restore it properly
1211 # save this in sys so embedded copies can restore it properly
1212 sys.ipcompleter = self.Completer.complete
1212 sys.ipcompleter = self.Completer.complete
1213 readline.set_completer(self.Completer.complete)
1213 readline.set_completer(self.Completer.complete)
1214
1214
1215 # Configure readline according to user's prefs
1215 # Configure readline according to user's prefs
1216 for rlcommand in self.rc.readline_parse_and_bind:
1216 for rlcommand in self.rc.readline_parse_and_bind:
1217 readline.parse_and_bind(rlcommand)
1217 readline.parse_and_bind(rlcommand)
1218
1218
1219 # remove some chars from the delimiters list
1219 # remove some chars from the delimiters list
1220 delims = readline.get_completer_delims()
1220 delims = readline.get_completer_delims()
1221 delims = delims.translate(string._idmap,
1221 delims = delims.translate(string._idmap,
1222 self.rc.readline_remove_delims)
1222 self.rc.readline_remove_delims)
1223 readline.set_completer_delims(delims)
1223 readline.set_completer_delims(delims)
1224 # otherwise we end up with a monster history after a while:
1224 # otherwise we end up with a monster history after a while:
1225 readline.set_history_length(1000)
1225 readline.set_history_length(1000)
1226 try:
1226 try:
1227 #print '*** Reading readline history' # dbg
1227 #print '*** Reading readline history' # dbg
1228 readline.read_history_file(self.histfile)
1228 readline.read_history_file(self.histfile)
1229 except IOError:
1229 except IOError:
1230 pass # It doesn't exist yet.
1230 pass # It doesn't exist yet.
1231
1231
1232 atexit.register(self.atexit_operations)
1232 atexit.register(self.atexit_operations)
1233 del atexit
1233 del atexit
1234
1234
1235 # Configure auto-indent for all platforms
1235 # Configure auto-indent for all platforms
1236 self.set_autoindent(self.rc.autoindent)
1236 self.set_autoindent(self.rc.autoindent)
1237
1237
1238 def _should_recompile(self,e):
1238 def _should_recompile(self,e):
1239 """Utility routine for edit_syntax_error"""
1239 """Utility routine for edit_syntax_error"""
1240
1240
1241 if e.filename in ('<ipython console>','<input>','<string>',
1241 if e.filename in ('<ipython console>','<input>','<string>',
1242 '<console>',None):
1242 '<console>',None):
1243
1243
1244 return False
1244 return False
1245 try:
1245 try:
1246 if (self.rc.autoedit_syntax != 2 and
1246 if (self.rc.autoedit_syntax != 2 and
1247 not ask_yes_no('Return to editor to correct syntax error? '
1247 not ask_yes_no('Return to editor to correct syntax error? '
1248 '[Y/n] ','y')):
1248 '[Y/n] ','y')):
1249 return False
1249 return False
1250 except EOFError:
1250 except EOFError:
1251 return False
1251 return False
1252
1252
1253 def int0(x):
1253 def int0(x):
1254 try:
1254 try:
1255 return int(x)
1255 return int(x)
1256 except TypeError:
1256 except TypeError:
1257 return 0
1257 return 0
1258 # always pass integer line and offset values to editor hook
1258 # always pass integer line and offset values to editor hook
1259 self.hooks.fix_error_editor(e.filename,
1259 self.hooks.fix_error_editor(e.filename,
1260 int0(e.lineno),int0(e.offset),e.msg)
1260 int0(e.lineno),int0(e.offset),e.msg)
1261 return True
1261 return True
1262
1262
1263 def edit_syntax_error(self):
1263 def edit_syntax_error(self):
1264 """The bottom half of the syntax error handler called in the main loop.
1264 """The bottom half of the syntax error handler called in the main loop.
1265
1265
1266 Loop until syntax error is fixed or user cancels.
1266 Loop until syntax error is fixed or user cancels.
1267 """
1267 """
1268
1268
1269 while self.SyntaxTB.last_syntax_error:
1269 while self.SyntaxTB.last_syntax_error:
1270 # copy and clear last_syntax_error
1270 # copy and clear last_syntax_error
1271 err = self.SyntaxTB.clear_err_state()
1271 err = self.SyntaxTB.clear_err_state()
1272 if not self._should_recompile(err):
1272 if not self._should_recompile(err):
1273 return
1273 return
1274 try:
1274 try:
1275 # may set last_syntax_error again if a SyntaxError is raised
1275 # may set last_syntax_error again if a SyntaxError is raised
1276 self.safe_execfile(err.filename,self.shell.user_ns)
1276 self.safe_execfile(err.filename,self.shell.user_ns)
1277 except:
1277 except:
1278 self.showtraceback()
1278 self.showtraceback()
1279 else:
1279 else:
1280 f = file(err.filename)
1280 f = file(err.filename)
1281 try:
1281 try:
1282 sys.displayhook(f.read())
1282 sys.displayhook(f.read())
1283 finally:
1283 finally:
1284 f.close()
1284 f.close()
1285
1285
1286 def showsyntaxerror(self, filename=None):
1286 def showsyntaxerror(self, filename=None):
1287 """Display the syntax error that just occurred.
1287 """Display the syntax error that just occurred.
1288
1288
1289 This doesn't display a stack trace because there isn't one.
1289 This doesn't display a stack trace because there isn't one.
1290
1290
1291 If a filename is given, it is stuffed in the exception instead
1291 If a filename is given, it is stuffed in the exception instead
1292 of what was there before (because Python's parser always uses
1292 of what was there before (because Python's parser always uses
1293 "<string>" when reading from a string).
1293 "<string>" when reading from a string).
1294 """
1294 """
1295 etype, value, last_traceback = sys.exc_info()
1295 etype, value, last_traceback = sys.exc_info()
1296 if filename and etype is SyntaxError:
1296 if filename and etype is SyntaxError:
1297 # Work hard to stuff the correct filename in the exception
1297 # Work hard to stuff the correct filename in the exception
1298 try:
1298 try:
1299 msg, (dummy_filename, lineno, offset, line) = value
1299 msg, (dummy_filename, lineno, offset, line) = value
1300 except:
1300 except:
1301 # Not the format we expect; leave it alone
1301 # Not the format we expect; leave it alone
1302 pass
1302 pass
1303 else:
1303 else:
1304 # Stuff in the right filename
1304 # Stuff in the right filename
1305 try:
1305 try:
1306 # Assume SyntaxError is a class exception
1306 # Assume SyntaxError is a class exception
1307 value = SyntaxError(msg, (filename, lineno, offset, line))
1307 value = SyntaxError(msg, (filename, lineno, offset, line))
1308 except:
1308 except:
1309 # If that failed, assume SyntaxError is a string
1309 # If that failed, assume SyntaxError is a string
1310 value = msg, (filename, lineno, offset, line)
1310 value = msg, (filename, lineno, offset, line)
1311 self.SyntaxTB(etype,value,[])
1311 self.SyntaxTB(etype,value,[])
1312
1312
1313 def debugger(self):
1313 def debugger(self):
1314 """Call the pdb debugger."""
1314 """Call the pdb debugger."""
1315
1315
1316 if not self.rc.pdb:
1316 if not self.rc.pdb:
1317 return
1317 return
1318 pdb.pm()
1318 pdb.pm()
1319
1319
1320 def showtraceback(self,exc_tuple = None,filename=None):
1320 def showtraceback(self,exc_tuple = None,filename=None):
1321 """Display the exception that just occurred."""
1321 """Display the exception that just occurred."""
1322
1322
1323 # Though this won't be called by syntax errors in the input line,
1323 # Though this won't be called by syntax errors in the input line,
1324 # there may be SyntaxError cases whith imported code.
1324 # there may be SyntaxError cases whith imported code.
1325 if exc_tuple is None:
1325 if exc_tuple is None:
1326 type, value, tb = sys.exc_info()
1326 type, value, tb = sys.exc_info()
1327 else:
1327 else:
1328 type, value, tb = exc_tuple
1328 type, value, tb = exc_tuple
1329 if type is SyntaxError:
1329 if type is SyntaxError:
1330 self.showsyntaxerror(filename)
1330 self.showsyntaxerror(filename)
1331 else:
1331 else:
1332 self.InteractiveTB()
1332 self.InteractiveTB()
1333 if self.InteractiveTB.call_pdb and self.has_readline:
1333 if self.InteractiveTB.call_pdb and self.has_readline:
1334 # pdb mucks up readline, fix it back
1334 # pdb mucks up readline, fix it back
1335 self.readline.set_completer(self.Completer.complete)
1335 self.readline.set_completer(self.Completer.complete)
1336
1336
1337 def mainloop(self,banner=None):
1337 def mainloop(self,banner=None):
1338 """Creates the local namespace and starts the mainloop.
1338 """Creates the local namespace and starts the mainloop.
1339
1339
1340 If an optional banner argument is given, it will override the
1340 If an optional banner argument is given, it will override the
1341 internally created default banner."""
1341 internally created default banner."""
1342
1342
1343 if self.rc.c: # Emulate Python's -c option
1343 if self.rc.c: # Emulate Python's -c option
1344 self.exec_init_cmd()
1344 self.exec_init_cmd()
1345 if banner is None:
1345 if banner is None:
1346 if self.rc.banner:
1346 if self.rc.banner:
1347 banner = self.BANNER+self.banner2
1347 banner = self.BANNER+self.banner2
1348 else:
1348 else:
1349 banner = ''
1349 banner = ''
1350 self.interact(banner)
1350 self.interact(banner)
1351
1351
1352 def exec_init_cmd(self):
1352 def exec_init_cmd(self):
1353 """Execute a command given at the command line.
1353 """Execute a command given at the command line.
1354
1354
1355 This emulates Python's -c option."""
1355 This emulates Python's -c option."""
1356
1356
1357 #sys.argv = ['-c']
1357 #sys.argv = ['-c']
1358 self.push(self.rc.c)
1358 self.push(self.rc.c)
1359
1359
1360 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1360 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1361 """Embeds IPython into a running python program.
1361 """Embeds IPython into a running python program.
1362
1362
1363 Input:
1363 Input:
1364
1364
1365 - header: An optional header message can be specified.
1365 - header: An optional header message can be specified.
1366
1366
1367 - local_ns, global_ns: working namespaces. If given as None, the
1367 - local_ns, global_ns: working namespaces. If given as None, the
1368 IPython-initialized one is updated with __main__.__dict__, so that
1368 IPython-initialized one is updated with __main__.__dict__, so that
1369 program variables become visible but user-specific configuration
1369 program variables become visible but user-specific configuration
1370 remains possible.
1370 remains possible.
1371
1371
1372 - stack_depth: specifies how many levels in the stack to go to
1372 - 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
1373 looking for namespaces (when local_ns and global_ns are None). This
1374 allows an intermediate caller to make sure that this function gets
1374 allows an intermediate caller to make sure that this function gets
1375 the namespace from the intended level in the stack. By default (0)
1375 the namespace from the intended level in the stack. By default (0)
1376 it will get its locals and globals from the immediate caller.
1376 it will get its locals and globals from the immediate caller.
1377
1377
1378 Warning: it's possible to use this in a program which is being run by
1378 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
1379 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
1380 globals get overwritten). In the future this will be cleaned up, as
1381 there is no fundamental reason why it can't work perfectly."""
1381 there is no fundamental reason why it can't work perfectly."""
1382
1382
1383 # Get locals and globals from caller
1383 # Get locals and globals from caller
1384 if local_ns is None or global_ns is None:
1384 if local_ns is None or global_ns is None:
1385 call_frame = sys._getframe(stack_depth).f_back
1385 call_frame = sys._getframe(stack_depth).f_back
1386
1386
1387 if local_ns is None:
1387 if local_ns is None:
1388 local_ns = call_frame.f_locals
1388 local_ns = call_frame.f_locals
1389 if global_ns is None:
1389 if global_ns is None:
1390 global_ns = call_frame.f_globals
1390 global_ns = call_frame.f_globals
1391
1391
1392 # Update namespaces and fire up interpreter
1392 # Update namespaces and fire up interpreter
1393
1393
1394 # The global one is easy, we can just throw it in
1394 # The global one is easy, we can just throw it in
1395 self.user_global_ns = global_ns
1395 self.user_global_ns = global_ns
1396
1396
1397 # but the user/local one is tricky: ipython needs it to store internal
1397 # 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
1398 # 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.
1399 # 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
1400 # 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).
1401 # previous call (which most likely existed in a separate scope).
1402 local_varnames = local_ns.keys()
1402 local_varnames = local_ns.keys()
1403 self.user_ns.update(local_ns)
1403 self.user_ns.update(local_ns)
1404
1404
1405 # Patch for global embedding to make sure that things don't overwrite
1405 # Patch for global embedding to make sure that things don't overwrite
1406 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1406 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1407 # FIXME. Test this a bit more carefully (the if.. is new)
1407 # FIXME. Test this a bit more carefully (the if.. is new)
1408 if local_ns is None and global_ns is None:
1408 if local_ns is None and global_ns is None:
1409 self.user_global_ns.update(__main__.__dict__)
1409 self.user_global_ns.update(__main__.__dict__)
1410
1410
1411 # make sure the tab-completer has the correct frame information, so it
1411 # make sure the tab-completer has the correct frame information, so it
1412 # actually completes using the frame's locals/globals
1412 # actually completes using the frame's locals/globals
1413 self.set_completer_frame()
1413 self.set_completer_frame()
1414
1414
1415 # before activating the interactive mode, we need to make sure that
1415 # before activating the interactive mode, we need to make sure that
1416 # all names in the builtin namespace needed by ipython point to
1416 # all names in the builtin namespace needed by ipython point to
1417 # ourselves, and not to other instances.
1417 # ourselves, and not to other instances.
1418 self.add_builtins()
1418 self.add_builtins()
1419
1419
1420 self.interact(header)
1420 self.interact(header)
1421
1421
1422 # now, purge out the user namespace from anything we might have added
1422 # now, purge out the user namespace from anything we might have added
1423 # from the caller's local namespace
1423 # from the caller's local namespace
1424 delvar = self.user_ns.pop
1424 delvar = self.user_ns.pop
1425 for var in local_varnames:
1425 for var in local_varnames:
1426 delvar(var,None)
1426 delvar(var,None)
1427 # and clean builtins we may have overridden
1427 # and clean builtins we may have overridden
1428 self.clean_builtins()
1428 self.clean_builtins()
1429
1429
1430 def interact(self, banner=None):
1430 def interact(self, banner=None):
1431 """Closely emulate the interactive Python console.
1431 """Closely emulate the interactive Python console.
1432
1432
1433 The optional banner argument specify the banner to print
1433 The optional banner argument specify the banner to print
1434 before the first interaction; by default it prints a banner
1434 before the first interaction; by default it prints a banner
1435 similar to the one printed by the real Python interpreter,
1435 similar to the one printed by the real Python interpreter,
1436 followed by the current class name in parentheses (so as not
1436 followed by the current class name in parentheses (so as not
1437 to confuse this with the real interpreter -- since it's so
1437 to confuse this with the real interpreter -- since it's so
1438 close!).
1438 close!).
1439
1439
1440 """
1440 """
1441 cprt = 'Type "copyright", "credits" or "license" for more information.'
1441 cprt = 'Type "copyright", "credits" or "license" for more information.'
1442 if banner is None:
1442 if banner is None:
1443 self.write("Python %s on %s\n%s\n(%s)\n" %
1443 self.write("Python %s on %s\n%s\n(%s)\n" %
1444 (sys.version, sys.platform, cprt,
1444 (sys.version, sys.platform, cprt,
1445 self.__class__.__name__))
1445 self.__class__.__name__))
1446 else:
1446 else:
1447 self.write(banner)
1447 self.write(banner)
1448
1448
1449 more = 0
1449 more = 0
1450
1450
1451 # Mark activity in the builtins
1451 # Mark activity in the builtins
1452 __builtin__.__dict__['__IPYTHON__active'] += 1
1452 __builtin__.__dict__['__IPYTHON__active'] += 1
1453
1453
1454 # exit_now is set by a call to %Exit or %Quit
1454 # exit_now is set by a call to %Exit or %Quit
1455 self.exit_now = False
1455 self.exit_now = False
1456 while not self.exit_now:
1456 while not self.exit_now:
1457
1457 if more:
1458 prompt = self.outputcache.prompt2
1459 if self.autoindent:
1460 self.readline_startup_hook(self.pre_readline)
1461 else:
1462 prompt = self.outputcache.prompt1
1458 try:
1463 try:
1459 if more:
1464 line = self.raw_input(prompt,more)
1460 prompt = self.outputcache.prompt2
1465 if self.autoindent:
1461 if self.autoindent:
1466 self.readline_startup_hook(None)
1462 self.readline_startup_hook(self.pre_readline)
1463 else:
1464 prompt = self.outputcache.prompt1
1465 try:
1466 line = self.raw_input(prompt,more)
1467 if self.autoindent:
1468 self.readline_startup_hook(None)
1469 except EOFError:
1470 if self.autoindent:
1471 self.readline_startup_hook(None)
1472 self.write("\n")
1473 self.exit()
1474 except:
1475 # exceptions here are VERY RARE, but they can be triggered
1476 # asynchronously by signal handlers, for example.
1477 self.showtraceback()
1478 else:
1479 more = self.push(line)
1480
1481 if (self.SyntaxTB.last_syntax_error and
1482 self.rc.autoedit_syntax):
1483 self.edit_syntax_error()
1484
1485 except KeyboardInterrupt:
1467 except KeyboardInterrupt:
1486 self.write("\nKeyboardInterrupt\n")
1468 self.write('\nKeyboardInterrupt\n')
1487 self.resetbuffer()
1469 self.resetbuffer()
1488 more = 0
1489 # keep cache in sync with the prompt counter:
1470 # keep cache in sync with the prompt counter:
1490 self.outputcache.prompt_count -= 1
1471 self.outputcache.prompt_count -= 1
1491
1472
1492 if self.autoindent:
1473 if self.autoindent:
1493 self.indent_current_nsp = 0
1474 self.indent_current_nsp = 0
1494
1475 more = 0
1476 except EOFError:
1477 if self.autoindent:
1478 self.readline_startup_hook(None)
1479 self.write('\n')
1480 self.exit()
1495 except bdb.BdbQuit:
1481 except bdb.BdbQuit:
1496 warn("The Python debugger has exited with a BdbQuit exception.\n"
1482 warn('The Python debugger has exited with a BdbQuit exception.\n'
1497 "Because of how pdb handles the stack, it is impossible\n"
1483 'Because of how pdb handles the stack, it is impossible\n'
1498 "for IPython to properly format this particular exception.\n"
1484 'for IPython to properly format this particular exception.\n'
1499 "IPython will resume normal operation.")
1485 'IPython will resume normal operation.')
1486 except:
1487 # exceptions here are VERY RARE, but they can be triggered
1488 # asynchronously by signal handlers, for example.
1489 self.showtraceback()
1490 else:
1491 more = self.push(line)
1492 if (self.SyntaxTB.last_syntax_error and
1493 self.rc.autoedit_syntax):
1494 self.edit_syntax_error()
1500
1495
1501 # We are off again...
1496 # We are off again...
1502 __builtin__.__dict__['__IPYTHON__active'] -= 1
1497 __builtin__.__dict__['__IPYTHON__active'] -= 1
1503
1498
1504 def excepthook(self, type, value, tb):
1499 def excepthook(self, type, value, tb):
1505 """One more defense for GUI apps that call sys.excepthook.
1500 """One more defense for GUI apps that call sys.excepthook.
1506
1501
1507 GUI frameworks like wxPython trap exceptions and call
1502 GUI frameworks like wxPython trap exceptions and call
1508 sys.excepthook themselves. I guess this is a feature that
1503 sys.excepthook themselves. I guess this is a feature that
1509 enables them to keep running after exceptions that would
1504 enables them to keep running after exceptions that would
1510 otherwise kill their mainloop. This is a bother for IPython
1505 otherwise kill their mainloop. This is a bother for IPython
1511 which excepts to catch all of the program exceptions with a try:
1506 which excepts to catch all of the program exceptions with a try:
1512 except: statement.
1507 except: statement.
1513
1508
1514 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1509 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
1510 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
1511 IPython crashed. In order to work around this, we can disable the
1517 CrashHandler and replace it with this excepthook instead, which prints a
1512 CrashHandler and replace it with this excepthook instead, which prints a
1518 regular traceback using our InteractiveTB. In this fashion, apps which
1513 regular traceback using our InteractiveTB. In this fashion, apps which
1519 call sys.excepthook will generate a regular-looking exception from
1514 call sys.excepthook will generate a regular-looking exception from
1520 IPython, and the CrashHandler will only be triggered by real IPython
1515 IPython, and the CrashHandler will only be triggered by real IPython
1521 crashes.
1516 crashes.
1522
1517
1523 This hook should be used sparingly, only in places which are not likely
1518 This hook should be used sparingly, only in places which are not likely
1524 to be true IPython errors.
1519 to be true IPython errors.
1525 """
1520 """
1526
1521
1527 self.InteractiveTB(type, value, tb, tb_offset=0)
1522 self.InteractiveTB(type, value, tb, tb_offset=0)
1528 if self.InteractiveTB.call_pdb and self.has_readline:
1523 if self.InteractiveTB.call_pdb and self.has_readline:
1529 self.readline.set_completer(self.Completer.complete)
1524 self.readline.set_completer(self.Completer.complete)
1530
1525
1531 def call_alias(self,alias,rest=''):
1526 def call_alias(self,alias,rest=''):
1532 """Call an alias given its name and the rest of the line.
1527 """Call an alias given its name and the rest of the line.
1533
1528
1534 This function MUST be given a proper alias, because it doesn't make
1529 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
1530 any checks when looking up into the alias table. The caller is
1536 responsible for invoking it only with a valid alias."""
1531 responsible for invoking it only with a valid alias."""
1537
1532
1538 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1533 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1539 nargs,cmd = self.alias_table[alias]
1534 nargs,cmd = self.alias_table[alias]
1540 # Expand the %l special to be the user's input line
1535 # Expand the %l special to be the user's input line
1541 if cmd.find('%l') >= 0:
1536 if cmd.find('%l') >= 0:
1542 cmd = cmd.replace('%l',rest)
1537 cmd = cmd.replace('%l',rest)
1543 rest = ''
1538 rest = ''
1544 if nargs==0:
1539 if nargs==0:
1545 # Simple, argument-less aliases
1540 # Simple, argument-less aliases
1546 cmd = '%s %s' % (cmd,rest)
1541 cmd = '%s %s' % (cmd,rest)
1547 else:
1542 else:
1548 # Handle aliases with positional arguments
1543 # Handle aliases with positional arguments
1549 args = rest.split(None,nargs)
1544 args = rest.split(None,nargs)
1550 if len(args)< nargs:
1545 if len(args)< nargs:
1551 error('Alias <%s> requires %s arguments, %s given.' %
1546 error('Alias <%s> requires %s arguments, %s given.' %
1552 (alias,nargs,len(args)))
1547 (alias,nargs,len(args)))
1553 return
1548 return
1554 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1549 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1555 # Now call the macro, evaluating in the user's namespace
1550 # Now call the macro, evaluating in the user's namespace
1556 try:
1551 try:
1557 self.system(cmd)
1552 self.system(cmd)
1558 except:
1553 except:
1559 self.showtraceback()
1554 self.showtraceback()
1560
1555
1561 def indent_current_str(self):
1556 def indent_current_str(self):
1562 """return the current level of indentation as a string"""
1557 """return the current level of indentation as a string"""
1563 return self.indent_current_nsp * ' '
1558 return self.indent_current_nsp * ' '
1564
1559
1565 def autoindent_update(self,line):
1560 def autoindent_update(self,line):
1566 """Keep track of the indent level."""
1561 """Keep track of the indent level."""
1567
1562
1568 #debugx('line')
1563 #debugx('line')
1569 #debugx('self.indent_current_nsp')
1564 #debugx('self.indent_current_nsp')
1570 if self.autoindent:
1565 if self.autoindent:
1571 if line:
1566 if line:
1572 inisp = num_ini_spaces(line)
1567 inisp = num_ini_spaces(line)
1573 if inisp < self.indent_current_nsp:
1568 if inisp < self.indent_current_nsp:
1574 self.indent_current_nsp = inisp
1569 self.indent_current_nsp = inisp
1575
1570
1576 if line[-1] == ':':
1571 if line[-1] == ':':
1577 self.indent_current_nsp += 4
1572 self.indent_current_nsp += 4
1578 elif dedent_re.match(line):
1573 elif dedent_re.match(line):
1579 self.indent_current_nsp -= 4
1574 self.indent_current_nsp -= 4
1580 else:
1575 else:
1581 self.indent_current_nsp = 0
1576 self.indent_current_nsp = 0
1582
1577
1583 def runlines(self,lines):
1578 def runlines(self,lines):
1584 """Run a string of one or more lines of source.
1579 """Run a string of one or more lines of source.
1585
1580
1586 This method is capable of running a string containing multiple source
1581 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
1582 lines, as if they had been entered at the IPython prompt. Since it
1588 exposes IPython's processing machinery, the given strings can contain
1583 exposes IPython's processing machinery, the given strings can contain
1589 magic calls (%magic), special shell access (!cmd), etc."""
1584 magic calls (%magic), special shell access (!cmd), etc."""
1590
1585
1591 # We must start with a clean buffer, in case this is run from an
1586 # We must start with a clean buffer, in case this is run from an
1592 # interactive IPython session (via a magic, for example).
1587 # interactive IPython session (via a magic, for example).
1593 self.resetbuffer()
1588 self.resetbuffer()
1594 lines = lines.split('\n')
1589 lines = lines.split('\n')
1595 more = 0
1590 more = 0
1596 for line in lines:
1591 for line in lines:
1597 # skip blank lines so we don't mess up the prompt counter, but do
1592 # 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
1593 # NOT skip even a blank line if we are in a code block (more is
1599 # true)
1594 # true)
1600 if line or more:
1595 if line or more:
1601 more = self.push(self.prefilter(line,more))
1596 more = self.push(self.prefilter(line,more))
1602 # IPython's runsource returns None if there was an error
1597 # IPython's runsource returns None if there was an error
1603 # compiling the code. This allows us to stop processing right
1598 # compiling the code. This allows us to stop processing right
1604 # away, so the user gets the error message at the right place.
1599 # away, so the user gets the error message at the right place.
1605 if more is None:
1600 if more is None:
1606 break
1601 break
1607 # final newline in case the input didn't have it, so that the code
1602 # final newline in case the input didn't have it, so that the code
1608 # actually does get executed
1603 # actually does get executed
1609 if more:
1604 if more:
1610 self.push('\n')
1605 self.push('\n')
1611
1606
1612 def runsource(self, source, filename='<input>', symbol='single'):
1607 def runsource(self, source, filename='<input>', symbol='single'):
1613 """Compile and run some source in the interpreter.
1608 """Compile and run some source in the interpreter.
1614
1609
1615 Arguments are as for compile_command().
1610 Arguments are as for compile_command().
1616
1611
1617 One several things can happen:
1612 One several things can happen:
1618
1613
1619 1) The input is incorrect; compile_command() raised an
1614 1) The input is incorrect; compile_command() raised an
1620 exception (SyntaxError or OverflowError). A syntax traceback
1615 exception (SyntaxError or OverflowError). A syntax traceback
1621 will be printed by calling the showsyntaxerror() method.
1616 will be printed by calling the showsyntaxerror() method.
1622
1617
1623 2) The input is incomplete, and more input is required;
1618 2) The input is incomplete, and more input is required;
1624 compile_command() returned None. Nothing happens.
1619 compile_command() returned None. Nothing happens.
1625
1620
1626 3) The input is complete; compile_command() returned a code
1621 3) The input is complete; compile_command() returned a code
1627 object. The code is executed by calling self.runcode() (which
1622 object. The code is executed by calling self.runcode() (which
1628 also handles run-time exceptions, except for SystemExit).
1623 also handles run-time exceptions, except for SystemExit).
1629
1624
1630 The return value is:
1625 The return value is:
1631
1626
1632 - True in case 2
1627 - True in case 2
1633
1628
1634 - False in the other cases, unless an exception is raised, where
1629 - False in the other cases, unless an exception is raised, where
1635 None is returned instead. This can be used by external callers to
1630 None is returned instead. This can be used by external callers to
1636 know whether to continue feeding input or not.
1631 know whether to continue feeding input or not.
1637
1632
1638 The return value can be used to decide whether to use sys.ps1 or
1633 The return value can be used to decide whether to use sys.ps1 or
1639 sys.ps2 to prompt the next line."""
1634 sys.ps2 to prompt the next line."""
1640
1635
1641 try:
1636 try:
1642 code = self.compile(source,filename,symbol)
1637 code = self.compile(source,filename,symbol)
1643 except (OverflowError, SyntaxError, ValueError):
1638 except (OverflowError, SyntaxError, ValueError):
1644 # Case 1
1639 # Case 1
1645 self.showsyntaxerror(filename)
1640 self.showsyntaxerror(filename)
1646 return None
1641 return None
1647
1642
1648 if code is None:
1643 if code is None:
1649 # Case 2
1644 # Case 2
1650 return True
1645 return True
1651
1646
1652 # Case 3
1647 # Case 3
1653 # We store the code object so that threaded shells and
1648 # We store the code object so that threaded shells and
1654 # custom exception handlers can access all this info if needed.
1649 # custom exception handlers can access all this info if needed.
1655 # The source corresponding to this can be obtained from the
1650 # The source corresponding to this can be obtained from the
1656 # buffer attribute as '\n'.join(self.buffer).
1651 # buffer attribute as '\n'.join(self.buffer).
1657 self.code_to_run = code
1652 self.code_to_run = code
1658 # now actually execute the code object
1653 # now actually execute the code object
1659 if self.runcode(code) == 0:
1654 if self.runcode(code) == 0:
1660 return False
1655 return False
1661 else:
1656 else:
1662 return None
1657 return None
1663
1658
1664 def runcode(self,code_obj):
1659 def runcode(self,code_obj):
1665 """Execute a code object.
1660 """Execute a code object.
1666
1661
1667 When an exception occurs, self.showtraceback() is called to display a
1662 When an exception occurs, self.showtraceback() is called to display a
1668 traceback.
1663 traceback.
1669
1664
1670 Return value: a flag indicating whether the code to be run completed
1665 Return value: a flag indicating whether the code to be run completed
1671 successfully:
1666 successfully:
1672
1667
1673 - 0: successful execution.
1668 - 0: successful execution.
1674 - 1: an error occurred.
1669 - 1: an error occurred.
1675 """
1670 """
1676
1671
1677 # Set our own excepthook in case the user code tries to call it
1672 # 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
1673 # directly, so that the IPython crash handler doesn't get triggered
1679 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1674 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1680
1675
1681 # we save the original sys.excepthook in the instance, in case config
1676 # we save the original sys.excepthook in the instance, in case config
1682 # code (such as magics) needs access to it.
1677 # code (such as magics) needs access to it.
1683 self.sys_excepthook = old_excepthook
1678 self.sys_excepthook = old_excepthook
1684 outflag = 1 # happens in more places, so it's easier as default
1679 outflag = 1 # happens in more places, so it's easier as default
1685 try:
1680 try:
1686 try:
1681 try:
1687 # Embedded instances require separate global/local namespaces
1682 # Embedded instances require separate global/local namespaces
1688 # so they can see both the surrounding (local) namespace and
1683 # so they can see both the surrounding (local) namespace and
1689 # the module-level globals when called inside another function.
1684 # the module-level globals when called inside another function.
1690 if self.embedded:
1685 if self.embedded:
1691 exec code_obj in self.user_global_ns, self.user_ns
1686 exec code_obj in self.user_global_ns, self.user_ns
1692 # Normal (non-embedded) instances should only have a single
1687 # Normal (non-embedded) instances should only have a single
1693 # namespace for user code execution, otherwise functions won't
1688 # namespace for user code execution, otherwise functions won't
1694 # see interactive top-level globals.
1689 # see interactive top-level globals.
1695 else:
1690 else:
1696 exec code_obj in self.user_ns
1691 exec code_obj in self.user_ns
1697 finally:
1692 finally:
1698 # Reset our crash handler in place
1693 # Reset our crash handler in place
1699 sys.excepthook = old_excepthook
1694 sys.excepthook = old_excepthook
1700 except SystemExit:
1695 except SystemExit:
1701 self.resetbuffer()
1696 self.resetbuffer()
1702 self.showtraceback()
1697 self.showtraceback()
1703 warn("Type exit or quit to exit IPython "
1698 warn("Type exit or quit to exit IPython "
1704 "(%Exit or %Quit do so unconditionally).",level=1)
1699 "(%Exit or %Quit do so unconditionally).",level=1)
1705 except self.custom_exceptions:
1700 except self.custom_exceptions:
1706 etype,value,tb = sys.exc_info()
1701 etype,value,tb = sys.exc_info()
1707 self.CustomTB(etype,value,tb)
1702 self.CustomTB(etype,value,tb)
1708 except:
1703 except:
1709 self.showtraceback()
1704 self.showtraceback()
1710 else:
1705 else:
1711 outflag = 0
1706 outflag = 0
1712 if softspace(sys.stdout, 0):
1707 if softspace(sys.stdout, 0):
1713 print
1708 print
1714 # Flush out code object which has been run (and source)
1709 # Flush out code object which has been run (and source)
1715 self.code_to_run = None
1710 self.code_to_run = None
1716 return outflag
1711 return outflag
1717
1712
1718 def push(self, line):
1713 def push(self, line):
1719 """Push a line to the interpreter.
1714 """Push a line to the interpreter.
1720
1715
1721 The line should not have a trailing newline; it may have
1716 The line should not have a trailing newline; it may have
1722 internal newlines. The line is appended to a buffer and the
1717 internal newlines. The line is appended to a buffer and the
1723 interpreter's runsource() method is called with the
1718 interpreter's runsource() method is called with the
1724 concatenated contents of the buffer as source. If this
1719 concatenated contents of the buffer as source. If this
1725 indicates that the command was executed or invalid, the buffer
1720 indicates that the command was executed or invalid, the buffer
1726 is reset; otherwise, the command is incomplete, and the buffer
1721 is reset; otherwise, the command is incomplete, and the buffer
1727 is left as it was after the line was appended. The return
1722 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
1723 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()).
1724 with in some way (this is the same as runsource()).
1730 """
1725 """
1731
1726
1732 # autoindent management should be done here, and not in the
1727 # autoindent management should be done here, and not in the
1733 # interactive loop, since that one is only seen by keyboard input. We
1728 # 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
1729 # need this done correctly even for code run via runlines (which uses
1735 # push).
1730 # push).
1736
1731
1737 #print 'push line: <%s>' % line # dbg
1732 #print 'push line: <%s>' % line # dbg
1738 self.autoindent_update(line)
1733 self.autoindent_update(line)
1739
1734
1740 self.buffer.append(line)
1735 self.buffer.append(line)
1741 more = self.runsource('\n'.join(self.buffer), self.filename)
1736 more = self.runsource('\n'.join(self.buffer), self.filename)
1742 if not more:
1737 if not more:
1743 self.resetbuffer()
1738 self.resetbuffer()
1744 return more
1739 return more
1745
1740
1746 def resetbuffer(self):
1741 def resetbuffer(self):
1747 """Reset the input buffer."""
1742 """Reset the input buffer."""
1748 self.buffer[:] = []
1743 self.buffer[:] = []
1749
1744
1750 def raw_input(self,prompt='',continue_prompt=False):
1745 def raw_input(self,prompt='',continue_prompt=False):
1751 """Write a prompt and read a line.
1746 """Write a prompt and read a line.
1752
1747
1753 The returned line does not include the trailing newline.
1748 The returned line does not include the trailing newline.
1754 When the user enters the EOF key sequence, EOFError is raised.
1749 When the user enters the EOF key sequence, EOFError is raised.
1755
1750
1756 Optional inputs:
1751 Optional inputs:
1757
1752
1758 - prompt(''): a string to be printed to prompt the user.
1753 - prompt(''): a string to be printed to prompt the user.
1759
1754
1760 - continue_prompt(False): whether this line is the first one or a
1755 - continue_prompt(False): whether this line is the first one or a
1761 continuation in a sequence of inputs.
1756 continuation in a sequence of inputs.
1762 """
1757 """
1763
1758
1764 line = raw_input_original(prompt)
1759 line = raw_input_original(prompt)
1760
1765 # Try to be reasonably smart about not re-indenting pasted input more
1761 # 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
1762 # than necessary. We do this by trimming out the auto-indent initial
1767 # spaces, if the user's actual input started itself with whitespace.
1763 # spaces, if the user's actual input started itself with whitespace.
1768 #debugx('self.buffer[-1]')
1764 #debugx('self.buffer[-1]')
1769
1765
1770 if self.autoindent:
1766 if self.autoindent:
1771 if num_ini_spaces(line) > self.indent_current_nsp:
1767 if num_ini_spaces(line) > self.indent_current_nsp:
1772 line = line[self.indent_current_nsp:]
1768 line = line[self.indent_current_nsp:]
1773 self.indent_current_nsp = 0
1769 self.indent_current_nsp = 0
1774
1770
1775 # store the unfiltered input before the user has any chance to modify
1771 # store the unfiltered input before the user has any chance to modify
1776 # it.
1772 # it.
1777 if line.strip():
1773 if line.strip():
1778 if continue_prompt:
1774 if continue_prompt:
1779 self.input_hist_raw[-1] += '%s\n' % line
1775 self.input_hist_raw[-1] += '%s\n' % line
1780 else:
1776 else:
1781 self.input_hist_raw.append('%s\n' % line)
1777 self.input_hist_raw.append('%s\n' % line)
1782
1778
1783 lineout = self.prefilter(line,continue_prompt)
1779 lineout = self.prefilter(line,continue_prompt)
1784 return lineout
1780 return lineout
1785
1781
1786 def split_user_input(self,line):
1782 def split_user_input(self,line):
1787 """Split user input into pre-char, function part and rest."""
1783 """Split user input into pre-char, function part and rest."""
1788
1784
1789 lsplit = self.line_split.match(line)
1785 lsplit = self.line_split.match(line)
1790 if lsplit is None: # no regexp match returns None
1786 if lsplit is None: # no regexp match returns None
1791 try:
1787 try:
1792 iFun,theRest = line.split(None,1)
1788 iFun,theRest = line.split(None,1)
1793 except ValueError:
1789 except ValueError:
1794 iFun,theRest = line,''
1790 iFun,theRest = line,''
1795 pre = re.match('^(\s*)(.*)',line).groups()[0]
1791 pre = re.match('^(\s*)(.*)',line).groups()[0]
1796 else:
1792 else:
1797 pre,iFun,theRest = lsplit.groups()
1793 pre,iFun,theRest = lsplit.groups()
1798
1794
1799 #print 'line:<%s>' % line # dbg
1795 #print 'line:<%s>' % line # dbg
1800 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1796 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1801 return pre,iFun.strip(),theRest
1797 return pre,iFun.strip(),theRest
1802
1798
1803 def _prefilter(self, line, continue_prompt):
1799 def _prefilter(self, line, continue_prompt):
1804 """Calls different preprocessors, depending on the form of line."""
1800 """Calls different preprocessors, depending on the form of line."""
1805
1801
1806 # All handlers *must* return a value, even if it's blank ('').
1802 # All handlers *must* return a value, even if it's blank ('').
1807
1803
1808 # Lines are NOT logged here. Handlers should process the line as
1804 # 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
1805 # needed, update the cache AND log it (so that the input cache array
1810 # stays synced).
1806 # stays synced).
1811
1807
1812 # This function is _very_ delicate, and since it's also the one which
1808 # 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
1809 # 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
1810 # 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.
1811 # always to exit as quickly as it can figure out what it needs to do.
1816
1812
1817 # This function is the main responsible for maintaining IPython's
1813 # This function is the main responsible for maintaining IPython's
1818 # behavior respectful of Python's semantics. So be _very_ careful if
1814 # behavior respectful of Python's semantics. So be _very_ careful if
1819 # making changes to anything here.
1815 # making changes to anything here.
1820
1816
1821 #.....................................................................
1817 #.....................................................................
1822 # Code begins
1818 # Code begins
1823
1819
1824 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1820 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1825
1821
1826 # save the line away in case we crash, so the post-mortem handler can
1822 # save the line away in case we crash, so the post-mortem handler can
1827 # record it
1823 # record it
1828 self._last_input_line = line
1824 self._last_input_line = line
1829
1825
1830 #print '***line: <%s>' % line # dbg
1826 #print '***line: <%s>' % line # dbg
1831
1827
1832 # the input history needs to track even empty lines
1828 # the input history needs to track even empty lines
1833 stripped = line.strip()
1829 stripped = line.strip()
1834
1830
1835 if not stripped:
1831 if not stripped:
1836 if not continue_prompt:
1832 if not continue_prompt:
1837 self.outputcache.prompt_count -= 1
1833 self.outputcache.prompt_count -= 1
1838 return self.handle_normal(line,continue_prompt)
1834 return self.handle_normal(line,continue_prompt)
1839 #return self.handle_normal('',continue_prompt)
1835 #return self.handle_normal('',continue_prompt)
1840
1836
1841 # print '***cont',continue_prompt # dbg
1837 # print '***cont',continue_prompt # dbg
1842 # special handlers are only allowed for single line statements
1838 # special handlers are only allowed for single line statements
1843 if continue_prompt and not self.rc.multi_line_specials:
1839 if continue_prompt and not self.rc.multi_line_specials:
1844 return self.handle_normal(line,continue_prompt)
1840 return self.handle_normal(line,continue_prompt)
1845
1841
1846
1842
1847 # For the rest, we need the structure of the input
1843 # For the rest, we need the structure of the input
1848 pre,iFun,theRest = self.split_user_input(line)
1844 pre,iFun,theRest = self.split_user_input(line)
1849
1845
1850 # See whether any pre-existing handler can take care of it
1846 # See whether any pre-existing handler can take care of it
1851
1847
1852 rewritten = self.hooks.input_prefilter(stripped)
1848 rewritten = self.hooks.input_prefilter(stripped)
1853 if rewritten != stripped: # ok, some prefilter did something
1849 if rewritten != stripped: # ok, some prefilter did something
1854 rewritten = pre + rewritten # add indentation
1850 rewritten = pre + rewritten # add indentation
1855 return self.handle_normal(rewritten)
1851 return self.handle_normal(rewritten)
1856
1852
1857
1853
1858
1854
1859
1855
1860 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1856 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1861
1857
1862 # First check for explicit escapes in the last/first character
1858 # First check for explicit escapes in the last/first character
1863 handler = None
1859 handler = None
1864 if line[-1] == self.ESC_HELP:
1860 if line[-1] == self.ESC_HELP:
1865 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1861 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1866 if handler is None:
1862 if handler is None:
1867 # look at the first character of iFun, NOT of line, so we skip
1863 # look at the first character of iFun, NOT of line, so we skip
1868 # leading whitespace in multiline input
1864 # leading whitespace in multiline input
1869 handler = self.esc_handlers.get(iFun[0:1])
1865 handler = self.esc_handlers.get(iFun[0:1])
1870 if handler is not None:
1866 if handler is not None:
1871 return handler(line,continue_prompt,pre,iFun,theRest)
1867 return handler(line,continue_prompt,pre,iFun,theRest)
1872 # Emacs ipython-mode tags certain input lines
1868 # Emacs ipython-mode tags certain input lines
1873 if line.endswith('# PYTHON-MODE'):
1869 if line.endswith('# PYTHON-MODE'):
1874 return self.handle_emacs(line,continue_prompt)
1870 return self.handle_emacs(line,continue_prompt)
1875
1871
1876 # Next, check if we can automatically execute this thing
1872 # Next, check if we can automatically execute this thing
1877
1873
1878 # Allow ! in multi-line statements if multi_line_specials is on:
1874 # Allow ! in multi-line statements if multi_line_specials is on:
1879 if continue_prompt and self.rc.multi_line_specials and \
1875 if continue_prompt and self.rc.multi_line_specials and \
1880 iFun.startswith(self.ESC_SHELL):
1876 iFun.startswith(self.ESC_SHELL):
1881 return self.handle_shell_escape(line,continue_prompt,
1877 return self.handle_shell_escape(line,continue_prompt,
1882 pre=pre,iFun=iFun,
1878 pre=pre,iFun=iFun,
1883 theRest=theRest)
1879 theRest=theRest)
1884
1880
1885 # Let's try to find if the input line is a magic fn
1881 # Let's try to find if the input line is a magic fn
1886 oinfo = None
1882 oinfo = None
1887 if hasattr(self,'magic_'+iFun):
1883 if hasattr(self,'magic_'+iFun):
1888 # WARNING: _ofind uses getattr(), so it can consume generators and
1884 # WARNING: _ofind uses getattr(), so it can consume generators and
1889 # cause other side effects.
1885 # cause other side effects.
1890 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1886 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1891 if oinfo['ismagic']:
1887 if oinfo['ismagic']:
1892 # Be careful not to call magics when a variable assignment is
1888 # Be careful not to call magics when a variable assignment is
1893 # being made (ls='hi', for example)
1889 # being made (ls='hi', for example)
1894 if self.rc.automagic and \
1890 if self.rc.automagic and \
1895 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1891 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1896 (self.rc.multi_line_specials or not continue_prompt):
1892 (self.rc.multi_line_specials or not continue_prompt):
1897 return self.handle_magic(line,continue_prompt,
1893 return self.handle_magic(line,continue_prompt,
1898 pre,iFun,theRest)
1894 pre,iFun,theRest)
1899 else:
1895 else:
1900 return self.handle_normal(line,continue_prompt)
1896 return self.handle_normal(line,continue_prompt)
1901
1897
1902 # If the rest of the line begins with an (in)equality, assginment or
1898 # 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.
1899 # function call, we should not call _ofind but simply execute it.
1904 # This avoids spurious geattr() accesses on objects upon assignment.
1900 # This avoids spurious geattr() accesses on objects upon assignment.
1905 #
1901 #
1906 # It also allows users to assign to either alias or magic names true
1902 # 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
1903 # python variables (the magic/alias systems always take second seat to
1908 # true python code).
1904 # true python code).
1909 if theRest and theRest[0] in '!=()':
1905 if theRest and theRest[0] in '!=()':
1910 return self.handle_normal(line,continue_prompt)
1906 return self.handle_normal(line,continue_prompt)
1911
1907
1912 if oinfo is None:
1908 if oinfo is None:
1913 # let's try to ensure that _oinfo is ONLY called when autocall is
1909 # let's try to ensure that _oinfo is ONLY called when autocall is
1914 # on. Since it has inevitable potential side effects, at least
1910 # on. Since it has inevitable potential side effects, at least
1915 # having autocall off should be a guarantee to the user that no
1911 # having autocall off should be a guarantee to the user that no
1916 # weird things will happen.
1912 # weird things will happen.
1917
1913
1918 if self.rc.autocall:
1914 if self.rc.autocall:
1919 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1915 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1920 else:
1916 else:
1921 # in this case, all that's left is either an alias or
1917 # in this case, all that's left is either an alias or
1922 # processing the line normally.
1918 # processing the line normally.
1923 if iFun in self.alias_table:
1919 if iFun in self.alias_table:
1924 return self.handle_alias(line,continue_prompt,
1920 return self.handle_alias(line,continue_prompt,
1925 pre,iFun,theRest)
1921 pre,iFun,theRest)
1926
1922
1927 else:
1923 else:
1928 return self.handle_normal(line,continue_prompt)
1924 return self.handle_normal(line,continue_prompt)
1929
1925
1930 if not oinfo['found']:
1926 if not oinfo['found']:
1931 return self.handle_normal(line,continue_prompt)
1927 return self.handle_normal(line,continue_prompt)
1932 else:
1928 else:
1933 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1929 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1934 if oinfo['isalias']:
1930 if oinfo['isalias']:
1935 return self.handle_alias(line,continue_prompt,
1931 return self.handle_alias(line,continue_prompt,
1936 pre,iFun,theRest)
1932 pre,iFun,theRest)
1937
1933
1938 if (self.rc.autocall
1934 if (self.rc.autocall
1939 and
1935 and
1940 (
1936 (
1941 #only consider exclusion re if not "," or ";" autoquoting
1937 #only consider exclusion re if not "," or ";" autoquoting
1942 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
1938 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
1943 or pre == self.ESC_PAREN) or
1939 or pre == self.ESC_PAREN) or
1944 (not self.re_exclude_auto.match(theRest)))
1940 (not self.re_exclude_auto.match(theRest)))
1945 and
1941 and
1946 self.re_fun_name.match(iFun) and
1942 self.re_fun_name.match(iFun) and
1947 callable(oinfo['obj'])) :
1943 callable(oinfo['obj'])) :
1948 #print 'going auto' # dbg
1944 #print 'going auto' # dbg
1949 return self.handle_auto(line,continue_prompt,
1945 return self.handle_auto(line,continue_prompt,
1950 pre,iFun,theRest,oinfo['obj'])
1946 pre,iFun,theRest,oinfo['obj'])
1951 else:
1947 else:
1952 #print 'was callable?', callable(oinfo['obj']) # dbg
1948 #print 'was callable?', callable(oinfo['obj']) # dbg
1953 return self.handle_normal(line,continue_prompt)
1949 return self.handle_normal(line,continue_prompt)
1954
1950
1955 # If we get here, we have a normal Python line. Log and return.
1951 # If we get here, we have a normal Python line. Log and return.
1956 return self.handle_normal(line,continue_prompt)
1952 return self.handle_normal(line,continue_prompt)
1957
1953
1958 def _prefilter_dumb(self, line, continue_prompt):
1954 def _prefilter_dumb(self, line, continue_prompt):
1959 """simple prefilter function, for debugging"""
1955 """simple prefilter function, for debugging"""
1960 return self.handle_normal(line,continue_prompt)
1956 return self.handle_normal(line,continue_prompt)
1961
1957
1962 # Set the default prefilter() function (this can be user-overridden)
1958 # Set the default prefilter() function (this can be user-overridden)
1963 prefilter = _prefilter
1959 prefilter = _prefilter
1964
1960
1965 def handle_normal(self,line,continue_prompt=None,
1961 def handle_normal(self,line,continue_prompt=None,
1966 pre=None,iFun=None,theRest=None):
1962 pre=None,iFun=None,theRest=None):
1967 """Handle normal input lines. Use as a template for handlers."""
1963 """Handle normal input lines. Use as a template for handlers."""
1968
1964
1969 # With autoindent on, we need some way to exit the input loop, and I
1965 # 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
1966 # 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
1967 # 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
1968 # 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.
1969 # of a size different to the indent level, will exit the input loop.
1974
1970
1975 if (continue_prompt and self.autoindent and line.isspace() and
1971 if (continue_prompt and self.autoindent and line.isspace() and
1976 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
1972 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
1977 (self.buffer[-1]).isspace() )):
1973 (self.buffer[-1]).isspace() )):
1978 line = ''
1974 line = ''
1979
1975
1980 self.log(line,continue_prompt)
1976 self.log(line,continue_prompt)
1981 return line
1977 return line
1982
1978
1983 def handle_alias(self,line,continue_prompt=None,
1979 def handle_alias(self,line,continue_prompt=None,
1984 pre=None,iFun=None,theRest=None):
1980 pre=None,iFun=None,theRest=None):
1985 """Handle alias input lines. """
1981 """Handle alias input lines. """
1986
1982
1987 # pre is needed, because it carries the leading whitespace. Otherwise
1983 # pre is needed, because it carries the leading whitespace. Otherwise
1988 # aliases won't work in indented sections.
1984 # aliases won't work in indented sections.
1989 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1985 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1990 self.log(line_out,continue_prompt)
1986 self.log(line_out,continue_prompt)
1991 return line_out
1987 return line_out
1992
1988
1993 def handle_shell_escape(self, line, continue_prompt=None,
1989 def handle_shell_escape(self, line, continue_prompt=None,
1994 pre=None,iFun=None,theRest=None):
1990 pre=None,iFun=None,theRest=None):
1995 """Execute the line in a shell, empty return value"""
1991 """Execute the line in a shell, empty return value"""
1996
1992
1997 #print 'line in :', `line` # dbg
1993 #print 'line in :', `line` # dbg
1998 # Example of a special handler. Others follow a similar pattern.
1994 # Example of a special handler. Others follow a similar pattern.
1999 if line.lstrip().startswith('!!'):
1995 if line.lstrip().startswith('!!'):
2000 # rewrite iFun/theRest to properly hold the call to %sx and
1996 # rewrite iFun/theRest to properly hold the call to %sx and
2001 # the actual command to be executed, so handle_magic can work
1997 # the actual command to be executed, so handle_magic can work
2002 # correctly
1998 # correctly
2003 theRest = '%s %s' % (iFun[2:],theRest)
1999 theRest = '%s %s' % (iFun[2:],theRest)
2004 iFun = 'sx'
2000 iFun = 'sx'
2005 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2001 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2006 line.lstrip()[2:]),
2002 line.lstrip()[2:]),
2007 continue_prompt,pre,iFun,theRest)
2003 continue_prompt,pre,iFun,theRest)
2008 else:
2004 else:
2009 cmd=line.lstrip().lstrip('!')
2005 cmd=line.lstrip().lstrip('!')
2010 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2006 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2011 # update cache/log and return
2007 # update cache/log and return
2012 self.log(line_out,continue_prompt)
2008 self.log(line_out,continue_prompt)
2013 return line_out
2009 return line_out
2014
2010
2015 def handle_magic(self, line, continue_prompt=None,
2011 def handle_magic(self, line, continue_prompt=None,
2016 pre=None,iFun=None,theRest=None):
2012 pre=None,iFun=None,theRest=None):
2017 """Execute magic functions."""
2013 """Execute magic functions."""
2018
2014
2019
2015
2020 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2016 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2021 self.log(cmd,continue_prompt)
2017 self.log(cmd,continue_prompt)
2022 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2018 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2023 return cmd
2019 return cmd
2024
2020
2025 def handle_auto(self, line, continue_prompt=None,
2021 def handle_auto(self, line, continue_prompt=None,
2026 pre=None,iFun=None,theRest=None,obj=None):
2022 pre=None,iFun=None,theRest=None,obj=None):
2027 """Hande lines which can be auto-executed, quoting if requested."""
2023 """Hande lines which can be auto-executed, quoting if requested."""
2028
2024
2029 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2025 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2030
2026
2031 # This should only be active for single-line input!
2027 # This should only be active for single-line input!
2032 if continue_prompt:
2028 if continue_prompt:
2033 self.log(line,continue_prompt)
2029 self.log(line,continue_prompt)
2034 return line
2030 return line
2035
2031
2036 auto_rewrite = True
2032 auto_rewrite = True
2037
2033
2038 if pre == self.ESC_QUOTE:
2034 if pre == self.ESC_QUOTE:
2039 # Auto-quote splitting on whitespace
2035 # Auto-quote splitting on whitespace
2040 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2036 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2041 elif pre == self.ESC_QUOTE2:
2037 elif pre == self.ESC_QUOTE2:
2042 # Auto-quote whole string
2038 # Auto-quote whole string
2043 newcmd = '%s("%s")' % (iFun,theRest)
2039 newcmd = '%s("%s")' % (iFun,theRest)
2044 elif pre == self.ESC_PAREN:
2040 elif pre == self.ESC_PAREN:
2045 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2041 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2046 else:
2042 else:
2047 # Auto-paren.
2043 # Auto-paren.
2048 # We only apply it to argument-less calls if the autocall
2044 # 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 <
2045 # 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.
2046 # 2, since this function isn't called unless it's at least 1.
2051 if not theRest and (self.rc.autocall < 2):
2047 if not theRest and (self.rc.autocall < 2):
2052 newcmd = '%s %s' % (iFun,theRest)
2048 newcmd = '%s %s' % (iFun,theRest)
2053 auto_rewrite = False
2049 auto_rewrite = False
2054 else:
2050 else:
2055 if theRest.startswith('['):
2051 if theRest.startswith('['):
2056 if hasattr(obj,'__getitem__'):
2052 if hasattr(obj,'__getitem__'):
2057 # Don't autocall in this case: item access for an object
2053 # Don't autocall in this case: item access for an object
2058 # which is BOTH callable and implements __getitem__.
2054 # which is BOTH callable and implements __getitem__.
2059 newcmd = '%s %s' % (iFun,theRest)
2055 newcmd = '%s %s' % (iFun,theRest)
2060 auto_rewrite = False
2056 auto_rewrite = False
2061 else:
2057 else:
2062 # if the object doesn't support [] access, go ahead and
2058 # if the object doesn't support [] access, go ahead and
2063 # autocall
2059 # autocall
2064 newcmd = '%s(%s)' % (iFun.rstrip(),",".join(theRest.split()))
2060 newcmd = '%s(%s)' % (iFun.rstrip(),",".join(theRest.split()))
2065 elif theRest.endswith(';'):
2061 elif theRest.endswith(';'):
2066 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2062 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2067 else:
2063 else:
2068 newcmd = '%s(%s)' % (iFun.rstrip(),",".join(theRest.split()))
2064 newcmd = '%s(%s)' % (iFun.rstrip(),",".join(theRest.split()))
2069
2065
2070 if auto_rewrite:
2066 if auto_rewrite:
2071 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2067 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2072 # log what is now valid Python, not the actual user input (without the
2068 # log what is now valid Python, not the actual user input (without the
2073 # final newline)
2069 # final newline)
2074 self.log(newcmd,continue_prompt)
2070 self.log(newcmd,continue_prompt)
2075 return newcmd
2071 return newcmd
2076
2072
2077 def handle_help(self, line, continue_prompt=None,
2073 def handle_help(self, line, continue_prompt=None,
2078 pre=None,iFun=None,theRest=None):
2074 pre=None,iFun=None,theRest=None):
2079 """Try to get some help for the object.
2075 """Try to get some help for the object.
2080
2076
2081 obj? or ?obj -> basic information.
2077 obj? or ?obj -> basic information.
2082 obj?? or ??obj -> more details.
2078 obj?? or ??obj -> more details.
2083 """
2079 """
2084
2080
2085 # We need to make sure that we don't process lines which would be
2081 # We need to make sure that we don't process lines which would be
2086 # otherwise valid python, such as "x=1 # what?"
2082 # otherwise valid python, such as "x=1 # what?"
2087 try:
2083 try:
2088 codeop.compile_command(line)
2084 codeop.compile_command(line)
2089 except SyntaxError:
2085 except SyntaxError:
2090 # We should only handle as help stuff which is NOT valid syntax
2086 # We should only handle as help stuff which is NOT valid syntax
2091 if line[0]==self.ESC_HELP:
2087 if line[0]==self.ESC_HELP:
2092 line = line[1:]
2088 line = line[1:]
2093 elif line[-1]==self.ESC_HELP:
2089 elif line[-1]==self.ESC_HELP:
2094 line = line[:-1]
2090 line = line[:-1]
2095 self.log('#?'+line)
2091 self.log('#?'+line)
2096 if line:
2092 if line:
2097 self.magic_pinfo(line)
2093 self.magic_pinfo(line)
2098 else:
2094 else:
2099 page(self.usage,screen_lines=self.rc.screen_length)
2095 page(self.usage,screen_lines=self.rc.screen_length)
2100 return '' # Empty string is needed here!
2096 return '' # Empty string is needed here!
2101 except:
2097 except:
2102 # Pass any other exceptions through to the normal handler
2098 # Pass any other exceptions through to the normal handler
2103 return self.handle_normal(line,continue_prompt)
2099 return self.handle_normal(line,continue_prompt)
2104 else:
2100 else:
2105 # If the code compiles ok, we should handle it normally
2101 # If the code compiles ok, we should handle it normally
2106 return self.handle_normal(line,continue_prompt)
2102 return self.handle_normal(line,continue_prompt)
2107
2103
2108 def getapi(self):
2104 def getapi(self):
2109 """ Get an IPApi object for this shell instance
2105 """ Get an IPApi object for this shell instance
2110
2106
2111 Getting an IPApi object is always preferable to accessing the shell
2107 Getting an IPApi object is always preferable to accessing the shell
2112 directly, but this holds true especially for extensions.
2108 directly, but this holds true especially for extensions.
2113
2109
2114 It should always be possible to implement an extension with IPApi
2110 It should always be possible to implement an extension with IPApi
2115 alone. If not, contact maintainer to request an addition.
2111 alone. If not, contact maintainer to request an addition.
2116
2112
2117 """
2113 """
2118 return self.api
2114 return self.api
2119
2115
2120 def handle_emacs(self,line,continue_prompt=None,
2116 def handle_emacs(self,line,continue_prompt=None,
2121 pre=None,iFun=None,theRest=None):
2117 pre=None,iFun=None,theRest=None):
2122 """Handle input lines marked by python-mode."""
2118 """Handle input lines marked by python-mode."""
2123
2119
2124 # Currently, nothing is done. Later more functionality can be added
2120 # Currently, nothing is done. Later more functionality can be added
2125 # here if needed.
2121 # here if needed.
2126
2122
2127 # The input cache shouldn't be updated
2123 # The input cache shouldn't be updated
2128
2124
2129 return line
2125 return line
2130
2126
2131 def mktempfile(self,data=None):
2127 def mktempfile(self,data=None):
2132 """Make a new tempfile and return its filename.
2128 """Make a new tempfile and return its filename.
2133
2129
2134 This makes a call to tempfile.mktemp, but it registers the created
2130 This makes a call to tempfile.mktemp, but it registers the created
2135 filename internally so ipython cleans it up at exit time.
2131 filename internally so ipython cleans it up at exit time.
2136
2132
2137 Optional inputs:
2133 Optional inputs:
2138
2134
2139 - data(None): if data is given, it gets written out to the temp file
2135 - data(None): if data is given, it gets written out to the temp file
2140 immediately, and the file is closed again."""
2136 immediately, and the file is closed again."""
2141
2137
2142 filename = tempfile.mktemp('.py','ipython_edit_')
2138 filename = tempfile.mktemp('.py','ipython_edit_')
2143 self.tempfiles.append(filename)
2139 self.tempfiles.append(filename)
2144
2140
2145 if data:
2141 if data:
2146 tmp_file = open(filename,'w')
2142 tmp_file = open(filename,'w')
2147 tmp_file.write(data)
2143 tmp_file.write(data)
2148 tmp_file.close()
2144 tmp_file.close()
2149 return filename
2145 return filename
2150
2146
2151 def write(self,data):
2147 def write(self,data):
2152 """Write a string to the default output"""
2148 """Write a string to the default output"""
2153 Term.cout.write(data)
2149 Term.cout.write(data)
2154
2150
2155 def write_err(self,data):
2151 def write_err(self,data):
2156 """Write a string to the default error output"""
2152 """Write a string to the default error output"""
2157 Term.cerr.write(data)
2153 Term.cerr.write(data)
2158
2154
2159 def exit(self):
2155 def exit(self):
2160 """Handle interactive exit.
2156 """Handle interactive exit.
2161
2157
2162 This method sets the exit_now attribute."""
2158 This method sets the exit_now attribute."""
2163
2159
2164 if self.rc.confirm_exit:
2160 if self.rc.confirm_exit:
2165 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2161 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2166 self.exit_now = True
2162 self.exit_now = True
2167 else:
2163 else:
2168 self.exit_now = True
2164 self.exit_now = True
2169 return self.exit_now
2165 return self.exit_now
2170
2166
2171 def safe_execfile(self,fname,*where,**kw):
2167 def safe_execfile(self,fname,*where,**kw):
2172 fname = os.path.expanduser(fname)
2168 fname = os.path.expanduser(fname)
2173
2169
2174 # find things also in current directory
2170 # find things also in current directory
2175 dname = os.path.dirname(fname)
2171 dname = os.path.dirname(fname)
2176 if not sys.path.count(dname):
2172 if not sys.path.count(dname):
2177 sys.path.append(dname)
2173 sys.path.append(dname)
2178
2174
2179 try:
2175 try:
2180 xfile = open(fname)
2176 xfile = open(fname)
2181 except:
2177 except:
2182 print >> Term.cerr, \
2178 print >> Term.cerr, \
2183 'Could not open file <%s> for safe execution.' % fname
2179 'Could not open file <%s> for safe execution.' % fname
2184 return None
2180 return None
2185
2181
2186 kw.setdefault('islog',0)
2182 kw.setdefault('islog',0)
2187 kw.setdefault('quiet',1)
2183 kw.setdefault('quiet',1)
2188 kw.setdefault('exit_ignore',0)
2184 kw.setdefault('exit_ignore',0)
2189 first = xfile.readline()
2185 first = xfile.readline()
2190 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2186 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2191 xfile.close()
2187 xfile.close()
2192 # line by line execution
2188 # line by line execution
2193 if first.startswith(loghead) or kw['islog']:
2189 if first.startswith(loghead) or kw['islog']:
2194 print 'Loading log file <%s> one line at a time...' % fname
2190 print 'Loading log file <%s> one line at a time...' % fname
2195 if kw['quiet']:
2191 if kw['quiet']:
2196 stdout_save = sys.stdout
2192 stdout_save = sys.stdout
2197 sys.stdout = StringIO.StringIO()
2193 sys.stdout = StringIO.StringIO()
2198 try:
2194 try:
2199 globs,locs = where[0:2]
2195 globs,locs = where[0:2]
2200 except:
2196 except:
2201 try:
2197 try:
2202 globs = locs = where[0]
2198 globs = locs = where[0]
2203 except:
2199 except:
2204 globs = locs = globals()
2200 globs = locs = globals()
2205 badblocks = []
2201 badblocks = []
2206
2202
2207 # we also need to identify indented blocks of code when replaying
2203 # we also need to identify indented blocks of code when replaying
2208 # logs and put them together before passing them to an exec
2204 # 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
2205 # 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
2206 # file. It's easiest if we swallow the whole thing in memory
2211 # first, and manually walk through the lines list moving the
2207 # first, and manually walk through the lines list moving the
2212 # counter ourselves.
2208 # counter ourselves.
2213 indent_re = re.compile('\s+\S')
2209 indent_re = re.compile('\s+\S')
2214 xfile = open(fname)
2210 xfile = open(fname)
2215 filelines = xfile.readlines()
2211 filelines = xfile.readlines()
2216 xfile.close()
2212 xfile.close()
2217 nlines = len(filelines)
2213 nlines = len(filelines)
2218 lnum = 0
2214 lnum = 0
2219 while lnum < nlines:
2215 while lnum < nlines:
2220 line = filelines[lnum]
2216 line = filelines[lnum]
2221 lnum += 1
2217 lnum += 1
2222 # don't re-insert logger status info into cache
2218 # don't re-insert logger status info into cache
2223 if line.startswith('#log#'):
2219 if line.startswith('#log#'):
2224 continue
2220 continue
2225 else:
2221 else:
2226 # build a block of code (maybe a single line) for execution
2222 # build a block of code (maybe a single line) for execution
2227 block = line
2223 block = line
2228 try:
2224 try:
2229 next = filelines[lnum] # lnum has already incremented
2225 next = filelines[lnum] # lnum has already incremented
2230 except:
2226 except:
2231 next = None
2227 next = None
2232 while next and indent_re.match(next):
2228 while next and indent_re.match(next):
2233 block += next
2229 block += next
2234 lnum += 1
2230 lnum += 1
2235 try:
2231 try:
2236 next = filelines[lnum]
2232 next = filelines[lnum]
2237 except:
2233 except:
2238 next = None
2234 next = None
2239 # now execute the block of one or more lines
2235 # now execute the block of one or more lines
2240 try:
2236 try:
2241 exec block in globs,locs
2237 exec block in globs,locs
2242 except SystemExit:
2238 except SystemExit:
2243 pass
2239 pass
2244 except:
2240 except:
2245 badblocks.append(block.rstrip())
2241 badblocks.append(block.rstrip())
2246 if kw['quiet']: # restore stdout
2242 if kw['quiet']: # restore stdout
2247 sys.stdout.close()
2243 sys.stdout.close()
2248 sys.stdout = stdout_save
2244 sys.stdout = stdout_save
2249 print 'Finished replaying log file <%s>' % fname
2245 print 'Finished replaying log file <%s>' % fname
2250 if badblocks:
2246 if badblocks:
2251 print >> sys.stderr, ('\nThe following lines/blocks in file '
2247 print >> sys.stderr, ('\nThe following lines/blocks in file '
2252 '<%s> reported errors:' % fname)
2248 '<%s> reported errors:' % fname)
2253
2249
2254 for badline in badblocks:
2250 for badline in badblocks:
2255 print >> sys.stderr, badline
2251 print >> sys.stderr, badline
2256 else: # regular file execution
2252 else: # regular file execution
2257 try:
2253 try:
2258 execfile(fname,*where)
2254 execfile(fname,*where)
2259 except SyntaxError:
2255 except SyntaxError:
2260 etype,evalue = sys.exc_info()[:2]
2256 etype,evalue = sys.exc_info()[:2]
2261 self.SyntaxTB(etype,evalue,[])
2257 self.SyntaxTB(etype,evalue,[])
2262 warn('Failure executing file: <%s>' % fname)
2258 warn('Failure executing file: <%s>' % fname)
2263 except SystemExit,status:
2259 except SystemExit,status:
2264 if not kw['exit_ignore']:
2260 if not kw['exit_ignore']:
2265 self.InteractiveTB()
2261 self.InteractiveTB()
2266 warn('Failure executing file: <%s>' % fname)
2262 warn('Failure executing file: <%s>' % fname)
2267 except:
2263 except:
2268 self.InteractiveTB()
2264 self.InteractiveTB()
2269 warn('Failure executing file: <%s>' % fname)
2265 warn('Failure executing file: <%s>' % fname)
2270
2266
2271 #************************* end of file <iplib.py> *****************************
2267 #************************* end of file <iplib.py> *****************************
@@ -1,5120 +1,5126 b''
1 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
2
3 * IPython/iplib.py (interact): Fix that we were not catching
4 KeyboardInterrupt exceptions properly. I'm not quite sure why the
5 logic here had to change, but it's fixed now.
6
1 2006-01-29 Ville Vainio <vivainio@gmail.com>
7 2006-01-29 Ville Vainio <vivainio@gmail.com>
2
8
3 * iplib.py: Try to import pyreadline on Windows.
9 * iplib.py: Try to import pyreadline on Windows.
4
10
5 2006-01-27 Ville Vainio <vivainio@gmail.com>
11 2006-01-27 Ville Vainio <vivainio@gmail.com>
6
12
7 * iplib.py: Expose ipapi as _ip in builtin namespace.
13 * iplib.py: Expose ipapi as _ip in builtin namespace.
8 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
14 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
9 and ip_set_hook (-> _ip.set_hook) redundant. % and !
15 and ip_set_hook (-> _ip.set_hook) redundant. % and !
10 syntax now produce _ip.* variant of the commands.
16 syntax now produce _ip.* variant of the commands.
11
17
12 * "_ip.options().autoedit_syntax = 2" automatically throws
18 * "_ip.options().autoedit_syntax = 2" automatically throws
13 user to editor for syntax error correction without prompting.
19 user to editor for syntax error correction without prompting.
14
20
15 2006-01-27 Ville Vainio <vivainio@gmail.com>
21 2006-01-27 Ville Vainio <vivainio@gmail.com>
16
22
17 * ipmaker.py: Give "realistic" sys.argv for scripts (without
23 * ipmaker.py: Give "realistic" sys.argv for scripts (without
18 'ipython' at argv[0]) executed through command line.
24 'ipython' at argv[0]) executed through command line.
19 NOTE: this DEPRECATES calling ipython with multiple scripts
25 NOTE: this DEPRECATES calling ipython with multiple scripts
20 ("ipython a.py b.py c.py")
26 ("ipython a.py b.py c.py")
21
27
22 * iplib.py, hooks.py: Added configurable input prefilter,
28 * iplib.py, hooks.py: Added configurable input prefilter,
23 named 'input_prefilter'. See ext_rescapture.py for example
29 named 'input_prefilter'. See ext_rescapture.py for example
24 usage.
30 usage.
25
31
26 * ext_rescapture.py, Magic.py: Better system command output capture
32 * ext_rescapture.py, Magic.py: Better system command output capture
27 through 'var = !ls' (deprecates user-visible %sc). Same notation
33 through 'var = !ls' (deprecates user-visible %sc). Same notation
28 applies for magics, 'var = %alias' assigns alias list to var.
34 applies for magics, 'var = %alias' assigns alias list to var.
29
35
30 * ipapi.py: added meta() for accessing extension-usable data store.
36 * ipapi.py: added meta() for accessing extension-usable data store.
31
37
32 * iplib.py: added InteractiveShell.getapi(). New magics should be
38 * iplib.py: added InteractiveShell.getapi(). New magics should be
33 written doing self.getapi() instead of using the shell directly.
39 written doing self.getapi() instead of using the shell directly.
34
40
35 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
41 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
36 %store foo >> ~/myfoo.txt to store variables to files (in clean
42 %store foo >> ~/myfoo.txt to store variables to files (in clean
37 textual form, not a restorable pickle).
43 textual form, not a restorable pickle).
38
44
39 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
45 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
40
46
41 * usage.py, Magic.py: added %quickref
47 * usage.py, Magic.py: added %quickref
42
48
43 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
49 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
44
50
45 * GetoptErrors when invoking magics etc. with wrong args
51 * GetoptErrors when invoking magics etc. with wrong args
46 are now more helpful:
52 are now more helpful:
47 GetoptError: option -l not recognized (allowed: "qb" )
53 GetoptError: option -l not recognized (allowed: "qb" )
48
54
49 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
55 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
50
56
51 * IPython/demo.py (Demo.show): Flush stdout after each block, so
57 * IPython/demo.py (Demo.show): Flush stdout after each block, so
52 computationally intensive blocks don't appear to stall the demo.
58 computationally intensive blocks don't appear to stall the demo.
53
59
54 2006-01-24 Ville Vainio <vivainio@gmail.com>
60 2006-01-24 Ville Vainio <vivainio@gmail.com>
55
61
56 * iplib.py, hooks.py: 'result_display' hook can return a non-None
62 * iplib.py, hooks.py: 'result_display' hook can return a non-None
57 value to manipulate resulting history entry.
63 value to manipulate resulting history entry.
58
64
59 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
65 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
60 to instance methods of IPApi class, to make extending an embedded
66 to instance methods of IPApi class, to make extending an embedded
61 IPython feasible. See ext_rehashdir.py for example usage.
67 IPython feasible. See ext_rehashdir.py for example usage.
62
68
63 * Merged 1071-1076 from banches/0.7.1
69 * Merged 1071-1076 from banches/0.7.1
64
70
65
71
66 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
72 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
67
73
68 * tools/release (daystamp): Fix build tools to use the new
74 * tools/release (daystamp): Fix build tools to use the new
69 eggsetup.py script to build lightweight eggs.
75 eggsetup.py script to build lightweight eggs.
70
76
71 * Applied changesets 1062 and 1064 before 0.7.1 release.
77 * Applied changesets 1062 and 1064 before 0.7.1 release.
72
78
73 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
79 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
74 see the raw input history (without conversions like %ls ->
80 see the raw input history (without conversions like %ls ->
75 ipmagic("ls")). After a request from W. Stein, SAGE
81 ipmagic("ls")). After a request from W. Stein, SAGE
76 (http://modular.ucsd.edu/sage) developer. This information is
82 (http://modular.ucsd.edu/sage) developer. This information is
77 stored in the input_hist_raw attribute of the IPython instance, so
83 stored in the input_hist_raw attribute of the IPython instance, so
78 developers can access it if needed (it's an InputList instance).
84 developers can access it if needed (it's an InputList instance).
79
85
80 * Versionstring = 0.7.2.svn
86 * Versionstring = 0.7.2.svn
81
87
82 * eggsetup.py: A separate script for constructing eggs, creates
88 * eggsetup.py: A separate script for constructing eggs, creates
83 proper launch scripts even on Windows (an .exe file in
89 proper launch scripts even on Windows (an .exe file in
84 \python24\scripts).
90 \python24\scripts).
85
91
86 * ipapi.py: launch_new_instance, launch entry point needed for the
92 * ipapi.py: launch_new_instance, launch entry point needed for the
87 egg.
93 egg.
88
94
89 2006-01-23 Ville Vainio <vivainio@gmail.com>
95 2006-01-23 Ville Vainio <vivainio@gmail.com>
90
96
91 * Added %cpaste magic for pasting python code
97 * Added %cpaste magic for pasting python code
92
98
93 2006-01-22 Ville Vainio <vivainio@gmail.com>
99 2006-01-22 Ville Vainio <vivainio@gmail.com>
94
100
95 * Merge from branches/0.7.1 into trunk, revs 1052-1057
101 * Merge from branches/0.7.1 into trunk, revs 1052-1057
96
102
97 * Versionstring = 0.7.2.svn
103 * Versionstring = 0.7.2.svn
98
104
99 * eggsetup.py: A separate script for constructing eggs, creates
105 * eggsetup.py: A separate script for constructing eggs, creates
100 proper launch scripts even on Windows (an .exe file in
106 proper launch scripts even on Windows (an .exe file in
101 \python24\scripts).
107 \python24\scripts).
102
108
103 * ipapi.py: launch_new_instance, launch entry point needed for the
109 * ipapi.py: launch_new_instance, launch entry point needed for the
104 egg.
110 egg.
105
111
106 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
112 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
107
113
108 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
114 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
109 %pfile foo would print the file for foo even if it was a binary.
115 %pfile foo would print the file for foo even if it was a binary.
110 Now, extensions '.so' and '.dll' are skipped.
116 Now, extensions '.so' and '.dll' are skipped.
111
117
112 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
118 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
113 bug, where macros would fail in all threaded modes. I'm not 100%
119 bug, where macros would fail in all threaded modes. I'm not 100%
114 sure, so I'm going to put out an rc instead of making a release
120 sure, so I'm going to put out an rc instead of making a release
115 today, and wait for feedback for at least a few days.
121 today, and wait for feedback for at least a few days.
116
122
117 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
123 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
118 it...) the handling of pasting external code with autoindent on.
124 it...) the handling of pasting external code with autoindent on.
119 To get out of a multiline input, the rule will appear for most
125 To get out of a multiline input, the rule will appear for most
120 users unchanged: two blank lines or change the indent level
126 users unchanged: two blank lines or change the indent level
121 proposed by IPython. But there is a twist now: you can
127 proposed by IPython. But there is a twist now: you can
122 add/subtract only *one or two spaces*. If you add/subtract three
128 add/subtract only *one or two spaces*. If you add/subtract three
123 or more (unless you completely delete the line), IPython will
129 or more (unless you completely delete the line), IPython will
124 accept that line, and you'll need to enter a second one of pure
130 accept that line, and you'll need to enter a second one of pure
125 whitespace. I know it sounds complicated, but I can't find a
131 whitespace. I know it sounds complicated, but I can't find a
126 different solution that covers all the cases, with the right
132 different solution that covers all the cases, with the right
127 heuristics. Hopefully in actual use, nobody will really notice
133 heuristics. Hopefully in actual use, nobody will really notice
128 all these strange rules and things will 'just work'.
134 all these strange rules and things will 'just work'.
129
135
130 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
136 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
131
137
132 * IPython/iplib.py (interact): catch exceptions which can be
138 * IPython/iplib.py (interact): catch exceptions which can be
133 triggered asynchronously by signal handlers. Thanks to an
139 triggered asynchronously by signal handlers. Thanks to an
134 automatic crash report, submitted by Colin Kingsley
140 automatic crash report, submitted by Colin Kingsley
135 <tercel-AT-gentoo.org>.
141 <tercel-AT-gentoo.org>.
136
142
137 2006-01-20 Ville Vainio <vivainio@gmail.com>
143 2006-01-20 Ville Vainio <vivainio@gmail.com>
138
144
139 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
145 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
140 (%rehashdir, very useful, try it out) of how to extend ipython
146 (%rehashdir, very useful, try it out) of how to extend ipython
141 with new magics. Also added Extensions dir to pythonpath to make
147 with new magics. Also added Extensions dir to pythonpath to make
142 importing extensions easy.
148 importing extensions easy.
143
149
144 * %store now complains when trying to store interactively declared
150 * %store now complains when trying to store interactively declared
145 classes / instances of those classes.
151 classes / instances of those classes.
146
152
147 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
153 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
148 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
154 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
149 if they exist, and ipy_user_conf.py with some defaults is created for
155 if they exist, and ipy_user_conf.py with some defaults is created for
150 the user.
156 the user.
151
157
152 * Startup rehashing done by the config file, not InterpreterExec.
158 * Startup rehashing done by the config file, not InterpreterExec.
153 This means system commands are available even without selecting the
159 This means system commands are available even without selecting the
154 pysh profile. It's the sensible default after all.
160 pysh profile. It's the sensible default after all.
155
161
156 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
162 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
157
163
158 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
164 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
159 multiline code with autoindent on working. But I am really not
165 multiline code with autoindent on working. But I am really not
160 sure, so this needs more testing. Will commit a debug-enabled
166 sure, so this needs more testing. Will commit a debug-enabled
161 version for now, while I test it some more, so that Ville and
167 version for now, while I test it some more, so that Ville and
162 others may also catch any problems. Also made
168 others may also catch any problems. Also made
163 self.indent_current_str() a method, to ensure that there's no
169 self.indent_current_str() a method, to ensure that there's no
164 chance of the indent space count and the corresponding string
170 chance of the indent space count and the corresponding string
165 falling out of sync. All code needing the string should just call
171 falling out of sync. All code needing the string should just call
166 the method.
172 the method.
167
173
168 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
174 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
169
175
170 * IPython/Magic.py (magic_edit): fix check for when users don't
176 * IPython/Magic.py (magic_edit): fix check for when users don't
171 save their output files, the try/except was in the wrong section.
177 save their output files, the try/except was in the wrong section.
172
178
173 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
179 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
174
180
175 * IPython/Magic.py (magic_run): fix __file__ global missing from
181 * IPython/Magic.py (magic_run): fix __file__ global missing from
176 script's namespace when executed via %run. After a report by
182 script's namespace when executed via %run. After a report by
177 Vivian.
183 Vivian.
178
184
179 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
185 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
180 when using python 2.4. The parent constructor changed in 2.4, and
186 when using python 2.4. The parent constructor changed in 2.4, and
181 we need to track it directly (we can't call it, as it messes up
187 we need to track it directly (we can't call it, as it messes up
182 readline and tab-completion inside our pdb would stop working).
188 readline and tab-completion inside our pdb would stop working).
183 After a bug report by R. Bernstein <rocky-AT-panix.com>.
189 After a bug report by R. Bernstein <rocky-AT-panix.com>.
184
190
185 2006-01-16 Ville Vainio <vivainio@gmail.com>
191 2006-01-16 Ville Vainio <vivainio@gmail.com>
186
192
187 * Ipython/magic.py:Reverted back to old %edit functionality
193 * Ipython/magic.py:Reverted back to old %edit functionality
188 that returns file contents on exit.
194 that returns file contents on exit.
189
195
190 * IPython/path.py: Added Jason Orendorff's "path" module to
196 * IPython/path.py: Added Jason Orendorff's "path" module to
191 IPython tree, http://www.jorendorff.com/articles/python/path/.
197 IPython tree, http://www.jorendorff.com/articles/python/path/.
192 You can get path objects conveniently through %sc, and !!, e.g.:
198 You can get path objects conveniently through %sc, and !!, e.g.:
193 sc files=ls
199 sc files=ls
194 for p in files.paths: # or files.p
200 for p in files.paths: # or files.p
195 print p,p.mtime
201 print p,p.mtime
196
202
197 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
203 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
198 now work again without considering the exclusion regexp -
204 now work again without considering the exclusion regexp -
199 hence, things like ',foo my/path' turn to 'foo("my/path")'
205 hence, things like ',foo my/path' turn to 'foo("my/path")'
200 instead of syntax error.
206 instead of syntax error.
201
207
202
208
203 2006-01-14 Ville Vainio <vivainio@gmail.com>
209 2006-01-14 Ville Vainio <vivainio@gmail.com>
204
210
205 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
211 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
206 ipapi decorators for python 2.4 users, options() provides access to rc
212 ipapi decorators for python 2.4 users, options() provides access to rc
207 data.
213 data.
208
214
209 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
215 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
210 as path separators (even on Linux ;-). Space character after
216 as path separators (even on Linux ;-). Space character after
211 backslash (as yielded by tab completer) is still space;
217 backslash (as yielded by tab completer) is still space;
212 "%cd long\ name" works as expected.
218 "%cd long\ name" works as expected.
213
219
214 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
220 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
215 as "chain of command", with priority. API stays the same,
221 as "chain of command", with priority. API stays the same,
216 TryNext exception raised by a hook function signals that
222 TryNext exception raised by a hook function signals that
217 current hook failed and next hook should try handling it, as
223 current hook failed and next hook should try handling it, as
218 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
224 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
219 requested configurable display hook, which is now implemented.
225 requested configurable display hook, which is now implemented.
220
226
221 2006-01-13 Ville Vainio <vivainio@gmail.com>
227 2006-01-13 Ville Vainio <vivainio@gmail.com>
222
228
223 * IPython/platutils*.py: platform specific utility functions,
229 * IPython/platutils*.py: platform specific utility functions,
224 so far only set_term_title is implemented (change terminal
230 so far only set_term_title is implemented (change terminal
225 label in windowing systems). %cd now changes the title to
231 label in windowing systems). %cd now changes the title to
226 current dir.
232 current dir.
227
233
228 * IPython/Release.py: Added myself to "authors" list,
234 * IPython/Release.py: Added myself to "authors" list,
229 had to create new files.
235 had to create new files.
230
236
231 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
237 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
232 shell escape; not a known bug but had potential to be one in the
238 shell escape; not a known bug but had potential to be one in the
233 future.
239 future.
234
240
235 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
241 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
236 extension API for IPython! See the module for usage example. Fix
242 extension API for IPython! See the module for usage example. Fix
237 OInspect for docstring-less magic functions.
243 OInspect for docstring-less magic functions.
238
244
239
245
240 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
246 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
241
247
242 * IPython/iplib.py (raw_input): temporarily deactivate all
248 * IPython/iplib.py (raw_input): temporarily deactivate all
243 attempts at allowing pasting of code with autoindent on. It
249 attempts at allowing pasting of code with autoindent on. It
244 introduced bugs (reported by Prabhu) and I can't seem to find a
250 introduced bugs (reported by Prabhu) and I can't seem to find a
245 robust combination which works in all cases. Will have to revisit
251 robust combination which works in all cases. Will have to revisit
246 later.
252 later.
247
253
248 * IPython/genutils.py: remove isspace() function. We've dropped
254 * IPython/genutils.py: remove isspace() function. We've dropped
249 2.2 compatibility, so it's OK to use the string method.
255 2.2 compatibility, so it's OK to use the string method.
250
256
251 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
257 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
252
258
253 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
259 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
254 matching what NOT to autocall on, to include all python binary
260 matching what NOT to autocall on, to include all python binary
255 operators (including things like 'and', 'or', 'is' and 'in').
261 operators (including things like 'and', 'or', 'is' and 'in').
256 Prompted by a bug report on 'foo & bar', but I realized we had
262 Prompted by a bug report on 'foo & bar', but I realized we had
257 many more potential bug cases with other operators. The regexp is
263 many more potential bug cases with other operators. The regexp is
258 self.re_exclude_auto, it's fairly commented.
264 self.re_exclude_auto, it's fairly commented.
259
265
260 2006-01-12 Ville Vainio <vivainio@gmail.com>
266 2006-01-12 Ville Vainio <vivainio@gmail.com>
261
267
262 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
268 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
263 Prettified and hardened string/backslash quoting with ipsystem(),
269 Prettified and hardened string/backslash quoting with ipsystem(),
264 ipalias() and ipmagic(). Now even \ characters are passed to
270 ipalias() and ipmagic(). Now even \ characters are passed to
265 %magics, !shell escapes and aliases exactly as they are in the
271 %magics, !shell escapes and aliases exactly as they are in the
266 ipython command line. Should improve backslash experience,
272 ipython command line. Should improve backslash experience,
267 particularly in Windows (path delimiter for some commands that
273 particularly in Windows (path delimiter for some commands that
268 won't understand '/'), but Unix benefits as well (regexps). %cd
274 won't understand '/'), but Unix benefits as well (regexps). %cd
269 magic still doesn't support backslash path delimiters, though. Also
275 magic still doesn't support backslash path delimiters, though. Also
270 deleted all pretense of supporting multiline command strings in
276 deleted all pretense of supporting multiline command strings in
271 !system or %magic commands. Thanks to Jerry McRae for suggestions.
277 !system or %magic commands. Thanks to Jerry McRae for suggestions.
272
278
273 * doc/build_doc_instructions.txt added. Documentation on how to
279 * doc/build_doc_instructions.txt added. Documentation on how to
274 use doc/update_manual.py, added yesterday. Both files contributed
280 use doc/update_manual.py, added yesterday. Both files contributed
275 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
281 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
276 doc/*.sh for deprecation at a later date.
282 doc/*.sh for deprecation at a later date.
277
283
278 * /ipython.py Added ipython.py to root directory for
284 * /ipython.py Added ipython.py to root directory for
279 zero-installation (tar xzvf ipython.tgz; cd ipython; python
285 zero-installation (tar xzvf ipython.tgz; cd ipython; python
280 ipython.py) and development convenience (no need to kee doing
286 ipython.py) and development convenience (no need to kee doing
281 "setup.py install" between changes).
287 "setup.py install" between changes).
282
288
283 * Made ! and !! shell escapes work (again) in multiline expressions:
289 * Made ! and !! shell escapes work (again) in multiline expressions:
284 if 1:
290 if 1:
285 !ls
291 !ls
286 !!ls
292 !!ls
287
293
288 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
294 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
289
295
290 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
296 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
291 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
297 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
292 module in case-insensitive installation. Was causing crashes
298 module in case-insensitive installation. Was causing crashes
293 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
299 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
294
300
295 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
301 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
296 <marienz-AT-gentoo.org>, closes
302 <marienz-AT-gentoo.org>, closes
297 http://www.scipy.net/roundup/ipython/issue51.
303 http://www.scipy.net/roundup/ipython/issue51.
298
304
299 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
305 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
300
306
301 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
307 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
302 problem of excessive CPU usage under *nix and keyboard lag under
308 problem of excessive CPU usage under *nix and keyboard lag under
303 win32.
309 win32.
304
310
305 2006-01-10 *** Released version 0.7.0
311 2006-01-10 *** Released version 0.7.0
306
312
307 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
313 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
308
314
309 * IPython/Release.py (revision): tag version number to 0.7.0,
315 * IPython/Release.py (revision): tag version number to 0.7.0,
310 ready for release.
316 ready for release.
311
317
312 * IPython/Magic.py (magic_edit): Add print statement to %edit so
318 * IPython/Magic.py (magic_edit): Add print statement to %edit so
313 it informs the user of the name of the temp. file used. This can
319 it informs the user of the name of the temp. file used. This can
314 help if you decide later to reuse that same file, so you know
320 help if you decide later to reuse that same file, so you know
315 where to copy the info from.
321 where to copy the info from.
316
322
317 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
323 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
318
324
319 * setup_bdist_egg.py: little script to build an egg. Added
325 * setup_bdist_egg.py: little script to build an egg. Added
320 support in the release tools as well.
326 support in the release tools as well.
321
327
322 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
328 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
323
329
324 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
330 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
325 version selection (new -wxversion command line and ipythonrc
331 version selection (new -wxversion command line and ipythonrc
326 parameter). Patch contributed by Arnd Baecker
332 parameter). Patch contributed by Arnd Baecker
327 <arnd.baecker-AT-web.de>.
333 <arnd.baecker-AT-web.de>.
328
334
329 * IPython/iplib.py (embed_mainloop): fix tab-completion in
335 * IPython/iplib.py (embed_mainloop): fix tab-completion in
330 embedded instances, for variables defined at the interactive
336 embedded instances, for variables defined at the interactive
331 prompt of the embedded ipython. Reported by Arnd.
337 prompt of the embedded ipython. Reported by Arnd.
332
338
333 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
339 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
334 it can be used as a (stateful) toggle, or with a direct parameter.
340 it can be used as a (stateful) toggle, or with a direct parameter.
335
341
336 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
342 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
337 could be triggered in certain cases and cause the traceback
343 could be triggered in certain cases and cause the traceback
338 printer not to work.
344 printer not to work.
339
345
340 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
346 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
341
347
342 * IPython/iplib.py (_should_recompile): Small fix, closes
348 * IPython/iplib.py (_should_recompile): Small fix, closes
343 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
349 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
344
350
345 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
351 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
346
352
347 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
353 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
348 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
354 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
349 Moad for help with tracking it down.
355 Moad for help with tracking it down.
350
356
351 * IPython/iplib.py (handle_auto): fix autocall handling for
357 * IPython/iplib.py (handle_auto): fix autocall handling for
352 objects which support BOTH __getitem__ and __call__ (so that f [x]
358 objects which support BOTH __getitem__ and __call__ (so that f [x]
353 is left alone, instead of becoming f([x]) automatically).
359 is left alone, instead of becoming f([x]) automatically).
354
360
355 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
361 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
356 Ville's patch.
362 Ville's patch.
357
363
358 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
364 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
359
365
360 * IPython/iplib.py (handle_auto): changed autocall semantics to
366 * IPython/iplib.py (handle_auto): changed autocall semantics to
361 include 'smart' mode, where the autocall transformation is NOT
367 include 'smart' mode, where the autocall transformation is NOT
362 applied if there are no arguments on the line. This allows you to
368 applied if there are no arguments on the line. This allows you to
363 just type 'foo' if foo is a callable to see its internal form,
369 just type 'foo' if foo is a callable to see its internal form,
364 instead of having it called with no arguments (typically a
370 instead of having it called with no arguments (typically a
365 mistake). The old 'full' autocall still exists: for that, you
371 mistake). The old 'full' autocall still exists: for that, you
366 need to set the 'autocall' parameter to 2 in your ipythonrc file.
372 need to set the 'autocall' parameter to 2 in your ipythonrc file.
367
373
368 * IPython/completer.py (Completer.attr_matches): add
374 * IPython/completer.py (Completer.attr_matches): add
369 tab-completion support for Enthoughts' traits. After a report by
375 tab-completion support for Enthoughts' traits. After a report by
370 Arnd and a patch by Prabhu.
376 Arnd and a patch by Prabhu.
371
377
372 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
378 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
373
379
374 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
380 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
375 Schmolck's patch to fix inspect.getinnerframes().
381 Schmolck's patch to fix inspect.getinnerframes().
376
382
377 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
383 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
378 for embedded instances, regarding handling of namespaces and items
384 for embedded instances, regarding handling of namespaces and items
379 added to the __builtin__ one. Multiple embedded instances and
385 added to the __builtin__ one. Multiple embedded instances and
380 recursive embeddings should work better now (though I'm not sure
386 recursive embeddings should work better now (though I'm not sure
381 I've got all the corner cases fixed, that code is a bit of a brain
387 I've got all the corner cases fixed, that code is a bit of a brain
382 twister).
388 twister).
383
389
384 * IPython/Magic.py (magic_edit): added support to edit in-memory
390 * IPython/Magic.py (magic_edit): added support to edit in-memory
385 macros (automatically creates the necessary temp files). %edit
391 macros (automatically creates the necessary temp files). %edit
386 also doesn't return the file contents anymore, it's just noise.
392 also doesn't return the file contents anymore, it's just noise.
387
393
388 * IPython/completer.py (Completer.attr_matches): revert change to
394 * IPython/completer.py (Completer.attr_matches): revert change to
389 complete only on attributes listed in __all__. I realized it
395 complete only on attributes listed in __all__. I realized it
390 cripples the tab-completion system as a tool for exploring the
396 cripples the tab-completion system as a tool for exploring the
391 internals of unknown libraries (it renders any non-__all__
397 internals of unknown libraries (it renders any non-__all__
392 attribute off-limits). I got bit by this when trying to see
398 attribute off-limits). I got bit by this when trying to see
393 something inside the dis module.
399 something inside the dis module.
394
400
395 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
401 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
396
402
397 * IPython/iplib.py (InteractiveShell.__init__): add .meta
403 * IPython/iplib.py (InteractiveShell.__init__): add .meta
398 namespace for users and extension writers to hold data in. This
404 namespace for users and extension writers to hold data in. This
399 follows the discussion in
405 follows the discussion in
400 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
406 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
401
407
402 * IPython/completer.py (IPCompleter.complete): small patch to help
408 * IPython/completer.py (IPCompleter.complete): small patch to help
403 tab-completion under Emacs, after a suggestion by John Barnard
409 tab-completion under Emacs, after a suggestion by John Barnard
404 <barnarj-AT-ccf.org>.
410 <barnarj-AT-ccf.org>.
405
411
406 * IPython/Magic.py (Magic.extract_input_slices): added support for
412 * IPython/Magic.py (Magic.extract_input_slices): added support for
407 the slice notation in magics to use N-M to represent numbers N...M
413 the slice notation in magics to use N-M to represent numbers N...M
408 (closed endpoints). This is used by %macro and %save.
414 (closed endpoints). This is used by %macro and %save.
409
415
410 * IPython/completer.py (Completer.attr_matches): for modules which
416 * IPython/completer.py (Completer.attr_matches): for modules which
411 define __all__, complete only on those. After a patch by Jeffrey
417 define __all__, complete only on those. After a patch by Jeffrey
412 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
418 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
413 speed up this routine.
419 speed up this routine.
414
420
415 * IPython/Logger.py (Logger.log): fix a history handling bug. I
421 * IPython/Logger.py (Logger.log): fix a history handling bug. I
416 don't know if this is the end of it, but the behavior now is
422 don't know if this is the end of it, but the behavior now is
417 certainly much more correct. Note that coupled with macros,
423 certainly much more correct. Note that coupled with macros,
418 slightly surprising (at first) behavior may occur: a macro will in
424 slightly surprising (at first) behavior may occur: a macro will in
419 general expand to multiple lines of input, so upon exiting, the
425 general expand to multiple lines of input, so upon exiting, the
420 in/out counters will both be bumped by the corresponding amount
426 in/out counters will both be bumped by the corresponding amount
421 (as if the macro's contents had been typed interactively). Typing
427 (as if the macro's contents had been typed interactively). Typing
422 %hist will reveal the intermediate (silently processed) lines.
428 %hist will reveal the intermediate (silently processed) lines.
423
429
424 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
430 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
425 pickle to fail (%run was overwriting __main__ and not restoring
431 pickle to fail (%run was overwriting __main__ and not restoring
426 it, but pickle relies on __main__ to operate).
432 it, but pickle relies on __main__ to operate).
427
433
428 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
434 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
429 using properties, but forgot to make the main InteractiveShell
435 using properties, but forgot to make the main InteractiveShell
430 class a new-style class. Properties fail silently, and
436 class a new-style class. Properties fail silently, and
431 misteriously, with old-style class (getters work, but
437 misteriously, with old-style class (getters work, but
432 setters don't do anything).
438 setters don't do anything).
433
439
434 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
440 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
435
441
436 * IPython/Magic.py (magic_history): fix history reporting bug (I
442 * IPython/Magic.py (magic_history): fix history reporting bug (I
437 know some nasties are still there, I just can't seem to find a
443 know some nasties are still there, I just can't seem to find a
438 reproducible test case to track them down; the input history is
444 reproducible test case to track them down; the input history is
439 falling out of sync...)
445 falling out of sync...)
440
446
441 * IPython/iplib.py (handle_shell_escape): fix bug where both
447 * IPython/iplib.py (handle_shell_escape): fix bug where both
442 aliases and system accesses where broken for indented code (such
448 aliases and system accesses where broken for indented code (such
443 as loops).
449 as loops).
444
450
445 * IPython/genutils.py (shell): fix small but critical bug for
451 * IPython/genutils.py (shell): fix small but critical bug for
446 win32 system access.
452 win32 system access.
447
453
448 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
454 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
449
455
450 * IPython/iplib.py (showtraceback): remove use of the
456 * IPython/iplib.py (showtraceback): remove use of the
451 sys.last_{type/value/traceback} structures, which are non
457 sys.last_{type/value/traceback} structures, which are non
452 thread-safe.
458 thread-safe.
453 (_prefilter): change control flow to ensure that we NEVER
459 (_prefilter): change control flow to ensure that we NEVER
454 introspect objects when autocall is off. This will guarantee that
460 introspect objects when autocall is off. This will guarantee that
455 having an input line of the form 'x.y', where access to attribute
461 having an input line of the form 'x.y', where access to attribute
456 'y' has side effects, doesn't trigger the side effect TWICE. It
462 'y' has side effects, doesn't trigger the side effect TWICE. It
457 is important to note that, with autocall on, these side effects
463 is important to note that, with autocall on, these side effects
458 can still happen.
464 can still happen.
459 (ipsystem): new builtin, to complete the ip{magic/alias/system}
465 (ipsystem): new builtin, to complete the ip{magic/alias/system}
460 trio. IPython offers these three kinds of special calls which are
466 trio. IPython offers these three kinds of special calls which are
461 not python code, and it's a good thing to have their call method
467 not python code, and it's a good thing to have their call method
462 be accessible as pure python functions (not just special syntax at
468 be accessible as pure python functions (not just special syntax at
463 the command line). It gives us a better internal implementation
469 the command line). It gives us a better internal implementation
464 structure, as well as exposing these for user scripting more
470 structure, as well as exposing these for user scripting more
465 cleanly.
471 cleanly.
466
472
467 * IPython/macro.py (Macro.__init__): moved macros to a standalone
473 * IPython/macro.py (Macro.__init__): moved macros to a standalone
468 file. Now that they'll be more likely to be used with the
474 file. Now that they'll be more likely to be used with the
469 persistance system (%store), I want to make sure their module path
475 persistance system (%store), I want to make sure their module path
470 doesn't change in the future, so that we don't break things for
476 doesn't change in the future, so that we don't break things for
471 users' persisted data.
477 users' persisted data.
472
478
473 * IPython/iplib.py (autoindent_update): move indentation
479 * IPython/iplib.py (autoindent_update): move indentation
474 management into the _text_ processing loop, not the keyboard
480 management into the _text_ processing loop, not the keyboard
475 interactive one. This is necessary to correctly process non-typed
481 interactive one. This is necessary to correctly process non-typed
476 multiline input (such as macros).
482 multiline input (such as macros).
477
483
478 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
484 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
479 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
485 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
480 which was producing problems in the resulting manual.
486 which was producing problems in the resulting manual.
481 (magic_whos): improve reporting of instances (show their class,
487 (magic_whos): improve reporting of instances (show their class,
482 instead of simply printing 'instance' which isn't terribly
488 instead of simply printing 'instance' which isn't terribly
483 informative).
489 informative).
484
490
485 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
491 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
486 (minor mods) to support network shares under win32.
492 (minor mods) to support network shares under win32.
487
493
488 * IPython/winconsole.py (get_console_size): add new winconsole
494 * IPython/winconsole.py (get_console_size): add new winconsole
489 module and fixes to page_dumb() to improve its behavior under
495 module and fixes to page_dumb() to improve its behavior under
490 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
496 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
491
497
492 * IPython/Magic.py (Macro): simplified Macro class to just
498 * IPython/Magic.py (Macro): simplified Macro class to just
493 subclass list. We've had only 2.2 compatibility for a very long
499 subclass list. We've had only 2.2 compatibility for a very long
494 time, yet I was still avoiding subclassing the builtin types. No
500 time, yet I was still avoiding subclassing the builtin types. No
495 more (I'm also starting to use properties, though I won't shift to
501 more (I'm also starting to use properties, though I won't shift to
496 2.3-specific features quite yet).
502 2.3-specific features quite yet).
497 (magic_store): added Ville's patch for lightweight variable
503 (magic_store): added Ville's patch for lightweight variable
498 persistence, after a request on the user list by Matt Wilkie
504 persistence, after a request on the user list by Matt Wilkie
499 <maphew-AT-gmail.com>. The new %store magic's docstring has full
505 <maphew-AT-gmail.com>. The new %store magic's docstring has full
500 details.
506 details.
501
507
502 * IPython/iplib.py (InteractiveShell.post_config_initialization):
508 * IPython/iplib.py (InteractiveShell.post_config_initialization):
503 changed the default logfile name from 'ipython.log' to
509 changed the default logfile name from 'ipython.log' to
504 'ipython_log.py'. These logs are real python files, and now that
510 'ipython_log.py'. These logs are real python files, and now that
505 we have much better multiline support, people are more likely to
511 we have much better multiline support, people are more likely to
506 want to use them as such. Might as well name them correctly.
512 want to use them as such. Might as well name them correctly.
507
513
508 * IPython/Magic.py: substantial cleanup. While we can't stop
514 * IPython/Magic.py: substantial cleanup. While we can't stop
509 using magics as mixins, due to the existing customizations 'out
515 using magics as mixins, due to the existing customizations 'out
510 there' which rely on the mixin naming conventions, at least I
516 there' which rely on the mixin naming conventions, at least I
511 cleaned out all cross-class name usage. So once we are OK with
517 cleaned out all cross-class name usage. So once we are OK with
512 breaking compatibility, the two systems can be separated.
518 breaking compatibility, the two systems can be separated.
513
519
514 * IPython/Logger.py: major cleanup. This one is NOT a mixin
520 * IPython/Logger.py: major cleanup. This one is NOT a mixin
515 anymore, and the class is a fair bit less hideous as well. New
521 anymore, and the class is a fair bit less hideous as well. New
516 features were also introduced: timestamping of input, and logging
522 features were also introduced: timestamping of input, and logging
517 of output results. These are user-visible with the -t and -o
523 of output results. These are user-visible with the -t and -o
518 options to %logstart. Closes
524 options to %logstart. Closes
519 http://www.scipy.net/roundup/ipython/issue11 and a request by
525 http://www.scipy.net/roundup/ipython/issue11 and a request by
520 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
526 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
521
527
522 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
528 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
523
529
524 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
530 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
525 better hadnle backslashes in paths. See the thread 'More Windows
531 better hadnle backslashes in paths. See the thread 'More Windows
526 questions part 2 - \/ characters revisited' on the iypthon user
532 questions part 2 - \/ characters revisited' on the iypthon user
527 list:
533 list:
528 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
534 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
529
535
530 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
536 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
531
537
532 (InteractiveShell.__init__): change threaded shells to not use the
538 (InteractiveShell.__init__): change threaded shells to not use the
533 ipython crash handler. This was causing more problems than not,
539 ipython crash handler. This was causing more problems than not,
534 as exceptions in the main thread (GUI code, typically) would
540 as exceptions in the main thread (GUI code, typically) would
535 always show up as a 'crash', when they really weren't.
541 always show up as a 'crash', when they really weren't.
536
542
537 The colors and exception mode commands (%colors/%xmode) have been
543 The colors and exception mode commands (%colors/%xmode) have been
538 synchronized to also take this into account, so users can get
544 synchronized to also take this into account, so users can get
539 verbose exceptions for their threaded code as well. I also added
545 verbose exceptions for their threaded code as well. I also added
540 support for activating pdb inside this exception handler as well,
546 support for activating pdb inside this exception handler as well,
541 so now GUI authors can use IPython's enhanced pdb at runtime.
547 so now GUI authors can use IPython's enhanced pdb at runtime.
542
548
543 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
549 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
544 true by default, and add it to the shipped ipythonrc file. Since
550 true by default, and add it to the shipped ipythonrc file. Since
545 this asks the user before proceeding, I think it's OK to make it
551 this asks the user before proceeding, I think it's OK to make it
546 true by default.
552 true by default.
547
553
548 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
554 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
549 of the previous special-casing of input in the eval loop. I think
555 of the previous special-casing of input in the eval loop. I think
550 this is cleaner, as they really are commands and shouldn't have
556 this is cleaner, as they really are commands and shouldn't have
551 a special role in the middle of the core code.
557 a special role in the middle of the core code.
552
558
553 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
559 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
554
560
555 * IPython/iplib.py (edit_syntax_error): added support for
561 * IPython/iplib.py (edit_syntax_error): added support for
556 automatically reopening the editor if the file had a syntax error
562 automatically reopening the editor if the file had a syntax error
557 in it. Thanks to scottt who provided the patch at:
563 in it. Thanks to scottt who provided the patch at:
558 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
564 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
559 version committed).
565 version committed).
560
566
561 * IPython/iplib.py (handle_normal): add suport for multi-line
567 * IPython/iplib.py (handle_normal): add suport for multi-line
562 input with emtpy lines. This fixes
568 input with emtpy lines. This fixes
563 http://www.scipy.net/roundup/ipython/issue43 and a similar
569 http://www.scipy.net/roundup/ipython/issue43 and a similar
564 discussion on the user list.
570 discussion on the user list.
565
571
566 WARNING: a behavior change is necessarily introduced to support
572 WARNING: a behavior change is necessarily introduced to support
567 blank lines: now a single blank line with whitespace does NOT
573 blank lines: now a single blank line with whitespace does NOT
568 break the input loop, which means that when autoindent is on, by
574 break the input loop, which means that when autoindent is on, by
569 default hitting return on the next (indented) line does NOT exit.
575 default hitting return on the next (indented) line does NOT exit.
570
576
571 Instead, to exit a multiline input you can either have:
577 Instead, to exit a multiline input you can either have:
572
578
573 - TWO whitespace lines (just hit return again), or
579 - TWO whitespace lines (just hit return again), or
574 - a single whitespace line of a different length than provided
580 - a single whitespace line of a different length than provided
575 by the autoindent (add or remove a space).
581 by the autoindent (add or remove a space).
576
582
577 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
583 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
578 module to better organize all readline-related functionality.
584 module to better organize all readline-related functionality.
579 I've deleted FlexCompleter and put all completion clases here.
585 I've deleted FlexCompleter and put all completion clases here.
580
586
581 * IPython/iplib.py (raw_input): improve indentation management.
587 * IPython/iplib.py (raw_input): improve indentation management.
582 It is now possible to paste indented code with autoindent on, and
588 It is now possible to paste indented code with autoindent on, and
583 the code is interpreted correctly (though it still looks bad on
589 the code is interpreted correctly (though it still looks bad on
584 screen, due to the line-oriented nature of ipython).
590 screen, due to the line-oriented nature of ipython).
585 (MagicCompleter.complete): change behavior so that a TAB key on an
591 (MagicCompleter.complete): change behavior so that a TAB key on an
586 otherwise empty line actually inserts a tab, instead of completing
592 otherwise empty line actually inserts a tab, instead of completing
587 on the entire global namespace. This makes it easier to use the
593 on the entire global namespace. This makes it easier to use the
588 TAB key for indentation. After a request by Hans Meine
594 TAB key for indentation. After a request by Hans Meine
589 <hans_meine-AT-gmx.net>
595 <hans_meine-AT-gmx.net>
590 (_prefilter): add support so that typing plain 'exit' or 'quit'
596 (_prefilter): add support so that typing plain 'exit' or 'quit'
591 does a sensible thing. Originally I tried to deviate as little as
597 does a sensible thing. Originally I tried to deviate as little as
592 possible from the default python behavior, but even that one may
598 possible from the default python behavior, but even that one may
593 change in this direction (thread on python-dev to that effect).
599 change in this direction (thread on python-dev to that effect).
594 Regardless, ipython should do the right thing even if CPython's
600 Regardless, ipython should do the right thing even if CPython's
595 '>>>' prompt doesn't.
601 '>>>' prompt doesn't.
596 (InteractiveShell): removed subclassing code.InteractiveConsole
602 (InteractiveShell): removed subclassing code.InteractiveConsole
597 class. By now we'd overridden just about all of its methods: I've
603 class. By now we'd overridden just about all of its methods: I've
598 copied the remaining two over, and now ipython is a standalone
604 copied the remaining two over, and now ipython is a standalone
599 class. This will provide a clearer picture for the chainsaw
605 class. This will provide a clearer picture for the chainsaw
600 branch refactoring.
606 branch refactoring.
601
607
602 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
608 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
603
609
604 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
610 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
605 failures for objects which break when dir() is called on them.
611 failures for objects which break when dir() is called on them.
606
612
607 * IPython/FlexCompleter.py (Completer.__init__): Added support for
613 * IPython/FlexCompleter.py (Completer.__init__): Added support for
608 distinct local and global namespaces in the completer API. This
614 distinct local and global namespaces in the completer API. This
609 change allows us top properly handle completion with distinct
615 change allows us top properly handle completion with distinct
610 scopes, including in embedded instances (this had never really
616 scopes, including in embedded instances (this had never really
611 worked correctly).
617 worked correctly).
612
618
613 Note: this introduces a change in the constructor for
619 Note: this introduces a change in the constructor for
614 MagicCompleter, as a new global_namespace parameter is now the
620 MagicCompleter, as a new global_namespace parameter is now the
615 second argument (the others were bumped one position).
621 second argument (the others were bumped one position).
616
622
617 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
623 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
618
624
619 * IPython/iplib.py (embed_mainloop): fix tab-completion in
625 * IPython/iplib.py (embed_mainloop): fix tab-completion in
620 embedded instances (which can be done now thanks to Vivian's
626 embedded instances (which can be done now thanks to Vivian's
621 frame-handling fixes for pdb).
627 frame-handling fixes for pdb).
622 (InteractiveShell.__init__): Fix namespace handling problem in
628 (InteractiveShell.__init__): Fix namespace handling problem in
623 embedded instances. We were overwriting __main__ unconditionally,
629 embedded instances. We were overwriting __main__ unconditionally,
624 and this should only be done for 'full' (non-embedded) IPython;
630 and this should only be done for 'full' (non-embedded) IPython;
625 embedded instances must respect the caller's __main__. Thanks to
631 embedded instances must respect the caller's __main__. Thanks to
626 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
632 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
627
633
628 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
634 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
629
635
630 * setup.py: added download_url to setup(). This registers the
636 * setup.py: added download_url to setup(). This registers the
631 download address at PyPI, which is not only useful to humans
637 download address at PyPI, which is not only useful to humans
632 browsing the site, but is also picked up by setuptools (the Eggs
638 browsing the site, but is also picked up by setuptools (the Eggs
633 machinery). Thanks to Ville and R. Kern for the info/discussion
639 machinery). Thanks to Ville and R. Kern for the info/discussion
634 on this.
640 on this.
635
641
636 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
642 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
637
643
638 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
644 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
639 This brings a lot of nice functionality to the pdb mode, which now
645 This brings a lot of nice functionality to the pdb mode, which now
640 has tab-completion, syntax highlighting, and better stack handling
646 has tab-completion, syntax highlighting, and better stack handling
641 than before. Many thanks to Vivian De Smedt
647 than before. Many thanks to Vivian De Smedt
642 <vivian-AT-vdesmedt.com> for the original patches.
648 <vivian-AT-vdesmedt.com> for the original patches.
643
649
644 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
650 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
645
651
646 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
652 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
647 sequence to consistently accept the banner argument. The
653 sequence to consistently accept the banner argument. The
648 inconsistency was tripping SAGE, thanks to Gary Zablackis
654 inconsistency was tripping SAGE, thanks to Gary Zablackis
649 <gzabl-AT-yahoo.com> for the report.
655 <gzabl-AT-yahoo.com> for the report.
650
656
651 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
657 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
652
658
653 * IPython/iplib.py (InteractiveShell.post_config_initialization):
659 * IPython/iplib.py (InteractiveShell.post_config_initialization):
654 Fix bug where a naked 'alias' call in the ipythonrc file would
660 Fix bug where a naked 'alias' call in the ipythonrc file would
655 cause a crash. Bug reported by Jorgen Stenarson.
661 cause a crash. Bug reported by Jorgen Stenarson.
656
662
657 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
663 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
658
664
659 * IPython/ipmaker.py (make_IPython): cleanups which should improve
665 * IPython/ipmaker.py (make_IPython): cleanups which should improve
660 startup time.
666 startup time.
661
667
662 * IPython/iplib.py (runcode): my globals 'fix' for embedded
668 * IPython/iplib.py (runcode): my globals 'fix' for embedded
663 instances had introduced a bug with globals in normal code. Now
669 instances had introduced a bug with globals in normal code. Now
664 it's working in all cases.
670 it's working in all cases.
665
671
666 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
672 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
667 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
673 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
668 has been introduced to set the default case sensitivity of the
674 has been introduced to set the default case sensitivity of the
669 searches. Users can still select either mode at runtime on a
675 searches. Users can still select either mode at runtime on a
670 per-search basis.
676 per-search basis.
671
677
672 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
678 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
673
679
674 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
680 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
675 attributes in wildcard searches for subclasses. Modified version
681 attributes in wildcard searches for subclasses. Modified version
676 of a patch by Jorgen.
682 of a patch by Jorgen.
677
683
678 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
684 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
679
685
680 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
686 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
681 embedded instances. I added a user_global_ns attribute to the
687 embedded instances. I added a user_global_ns attribute to the
682 InteractiveShell class to handle this.
688 InteractiveShell class to handle this.
683
689
684 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
690 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
685
691
686 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
692 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
687 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
693 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
688 (reported under win32, but may happen also in other platforms).
694 (reported under win32, but may happen also in other platforms).
689 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
695 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
690
696
691 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
697 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
692
698
693 * IPython/Magic.py (magic_psearch): new support for wildcard
699 * IPython/Magic.py (magic_psearch): new support for wildcard
694 patterns. Now, typing ?a*b will list all names which begin with a
700 patterns. Now, typing ?a*b will list all names which begin with a
695 and end in b, for example. The %psearch magic has full
701 and end in b, for example. The %psearch magic has full
696 docstrings. Many thanks to JΓΆrgen Stenarson
702 docstrings. Many thanks to JΓΆrgen Stenarson
697 <jorgen.stenarson-AT-bostream.nu>, author of the patches
703 <jorgen.stenarson-AT-bostream.nu>, author of the patches
698 implementing this functionality.
704 implementing this functionality.
699
705
700 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
706 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
701
707
702 * Manual: fixed long-standing annoyance of double-dashes (as in
708 * Manual: fixed long-standing annoyance of double-dashes (as in
703 --prefix=~, for example) being stripped in the HTML version. This
709 --prefix=~, for example) being stripped in the HTML version. This
704 is a latex2html bug, but a workaround was provided. Many thanks
710 is a latex2html bug, but a workaround was provided. Many thanks
705 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
711 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
706 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
712 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
707 rolling. This seemingly small issue had tripped a number of users
713 rolling. This seemingly small issue had tripped a number of users
708 when first installing, so I'm glad to see it gone.
714 when first installing, so I'm glad to see it gone.
709
715
710 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
716 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
711
717
712 * IPython/Extensions/numeric_formats.py: fix missing import,
718 * IPython/Extensions/numeric_formats.py: fix missing import,
713 reported by Stephen Walton.
719 reported by Stephen Walton.
714
720
715 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
721 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
716
722
717 * IPython/demo.py: finish demo module, fully documented now.
723 * IPython/demo.py: finish demo module, fully documented now.
718
724
719 * IPython/genutils.py (file_read): simple little utility to read a
725 * IPython/genutils.py (file_read): simple little utility to read a
720 file and ensure it's closed afterwards.
726 file and ensure it's closed afterwards.
721
727
722 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
728 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
723
729
724 * IPython/demo.py (Demo.__init__): added support for individually
730 * IPython/demo.py (Demo.__init__): added support for individually
725 tagging blocks for automatic execution.
731 tagging blocks for automatic execution.
726
732
727 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
733 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
728 syntax-highlighted python sources, requested by John.
734 syntax-highlighted python sources, requested by John.
729
735
730 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
736 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
731
737
732 * IPython/demo.py (Demo.again): fix bug where again() blocks after
738 * IPython/demo.py (Demo.again): fix bug where again() blocks after
733 finishing.
739 finishing.
734
740
735 * IPython/genutils.py (shlex_split): moved from Magic to here,
741 * IPython/genutils.py (shlex_split): moved from Magic to here,
736 where all 2.2 compatibility stuff lives. I needed it for demo.py.
742 where all 2.2 compatibility stuff lives. I needed it for demo.py.
737
743
738 * IPython/demo.py (Demo.__init__): added support for silent
744 * IPython/demo.py (Demo.__init__): added support for silent
739 blocks, improved marks as regexps, docstrings written.
745 blocks, improved marks as regexps, docstrings written.
740 (Demo.__init__): better docstring, added support for sys.argv.
746 (Demo.__init__): better docstring, added support for sys.argv.
741
747
742 * IPython/genutils.py (marquee): little utility used by the demo
748 * IPython/genutils.py (marquee): little utility used by the demo
743 code, handy in general.
749 code, handy in general.
744
750
745 * IPython/demo.py (Demo.__init__): new class for interactive
751 * IPython/demo.py (Demo.__init__): new class for interactive
746 demos. Not documented yet, I just wrote it in a hurry for
752 demos. Not documented yet, I just wrote it in a hurry for
747 scipy'05. Will docstring later.
753 scipy'05. Will docstring later.
748
754
749 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
755 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
750
756
751 * IPython/Shell.py (sigint_handler): Drastic simplification which
757 * IPython/Shell.py (sigint_handler): Drastic simplification which
752 also seems to make Ctrl-C work correctly across threads! This is
758 also seems to make Ctrl-C work correctly across threads! This is
753 so simple, that I can't beleive I'd missed it before. Needs more
759 so simple, that I can't beleive I'd missed it before. Needs more
754 testing, though.
760 testing, though.
755 (KBINT): Never mind, revert changes. I'm sure I'd tried something
761 (KBINT): Never mind, revert changes. I'm sure I'd tried something
756 like this before...
762 like this before...
757
763
758 * IPython/genutils.py (get_home_dir): add protection against
764 * IPython/genutils.py (get_home_dir): add protection against
759 non-dirs in win32 registry.
765 non-dirs in win32 registry.
760
766
761 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
767 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
762 bug where dict was mutated while iterating (pysh crash).
768 bug where dict was mutated while iterating (pysh crash).
763
769
764 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
770 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
765
771
766 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
772 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
767 spurious newlines added by this routine. After a report by
773 spurious newlines added by this routine. After a report by
768 F. Mantegazza.
774 F. Mantegazza.
769
775
770 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
776 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
771
777
772 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
778 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
773 calls. These were a leftover from the GTK 1.x days, and can cause
779 calls. These were a leftover from the GTK 1.x days, and can cause
774 problems in certain cases (after a report by John Hunter).
780 problems in certain cases (after a report by John Hunter).
775
781
776 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
782 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
777 os.getcwd() fails at init time. Thanks to patch from David Remahl
783 os.getcwd() fails at init time. Thanks to patch from David Remahl
778 <chmod007-AT-mac.com>.
784 <chmod007-AT-mac.com>.
779 (InteractiveShell.__init__): prevent certain special magics from
785 (InteractiveShell.__init__): prevent certain special magics from
780 being shadowed by aliases. Closes
786 being shadowed by aliases. Closes
781 http://www.scipy.net/roundup/ipython/issue41.
787 http://www.scipy.net/roundup/ipython/issue41.
782
788
783 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
789 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
784
790
785 * IPython/iplib.py (InteractiveShell.complete): Added new
791 * IPython/iplib.py (InteractiveShell.complete): Added new
786 top-level completion method to expose the completion mechanism
792 top-level completion method to expose the completion mechanism
787 beyond readline-based environments.
793 beyond readline-based environments.
788
794
789 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
795 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
790
796
791 * tools/ipsvnc (svnversion): fix svnversion capture.
797 * tools/ipsvnc (svnversion): fix svnversion capture.
792
798
793 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
799 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
794 attribute to self, which was missing. Before, it was set by a
800 attribute to self, which was missing. Before, it was set by a
795 routine which in certain cases wasn't being called, so the
801 routine which in certain cases wasn't being called, so the
796 instance could end up missing the attribute. This caused a crash.
802 instance could end up missing the attribute. This caused a crash.
797 Closes http://www.scipy.net/roundup/ipython/issue40.
803 Closes http://www.scipy.net/roundup/ipython/issue40.
798
804
799 2005-08-16 Fernando Perez <fperez@colorado.edu>
805 2005-08-16 Fernando Perez <fperez@colorado.edu>
800
806
801 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
807 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
802 contains non-string attribute. Closes
808 contains non-string attribute. Closes
803 http://www.scipy.net/roundup/ipython/issue38.
809 http://www.scipy.net/roundup/ipython/issue38.
804
810
805 2005-08-14 Fernando Perez <fperez@colorado.edu>
811 2005-08-14 Fernando Perez <fperez@colorado.edu>
806
812
807 * tools/ipsvnc: Minor improvements, to add changeset info.
813 * tools/ipsvnc: Minor improvements, to add changeset info.
808
814
809 2005-08-12 Fernando Perez <fperez@colorado.edu>
815 2005-08-12 Fernando Perez <fperez@colorado.edu>
810
816
811 * IPython/iplib.py (runsource): remove self.code_to_run_src
817 * IPython/iplib.py (runsource): remove self.code_to_run_src
812 attribute. I realized this is nothing more than
818 attribute. I realized this is nothing more than
813 '\n'.join(self.buffer), and having the same data in two different
819 '\n'.join(self.buffer), and having the same data in two different
814 places is just asking for synchronization bugs. This may impact
820 places is just asking for synchronization bugs. This may impact
815 people who have custom exception handlers, so I need to warn
821 people who have custom exception handlers, so I need to warn
816 ipython-dev about it (F. Mantegazza may use them).
822 ipython-dev about it (F. Mantegazza may use them).
817
823
818 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
824 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
819
825
820 * IPython/genutils.py: fix 2.2 compatibility (generators)
826 * IPython/genutils.py: fix 2.2 compatibility (generators)
821
827
822 2005-07-18 Fernando Perez <fperez@colorado.edu>
828 2005-07-18 Fernando Perez <fperez@colorado.edu>
823
829
824 * IPython/genutils.py (get_home_dir): fix to help users with
830 * IPython/genutils.py (get_home_dir): fix to help users with
825 invalid $HOME under win32.
831 invalid $HOME under win32.
826
832
827 2005-07-17 Fernando Perez <fperez@colorado.edu>
833 2005-07-17 Fernando Perez <fperez@colorado.edu>
828
834
829 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
835 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
830 some old hacks and clean up a bit other routines; code should be
836 some old hacks and clean up a bit other routines; code should be
831 simpler and a bit faster.
837 simpler and a bit faster.
832
838
833 * IPython/iplib.py (interact): removed some last-resort attempts
839 * IPython/iplib.py (interact): removed some last-resort attempts
834 to survive broken stdout/stderr. That code was only making it
840 to survive broken stdout/stderr. That code was only making it
835 harder to abstract out the i/o (necessary for gui integration),
841 harder to abstract out the i/o (necessary for gui integration),
836 and the crashes it could prevent were extremely rare in practice
842 and the crashes it could prevent were extremely rare in practice
837 (besides being fully user-induced in a pretty violent manner).
843 (besides being fully user-induced in a pretty violent manner).
838
844
839 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
845 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
840 Nothing major yet, but the code is simpler to read; this should
846 Nothing major yet, but the code is simpler to read; this should
841 make it easier to do more serious modifications in the future.
847 make it easier to do more serious modifications in the future.
842
848
843 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
849 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
844 which broke in .15 (thanks to a report by Ville).
850 which broke in .15 (thanks to a report by Ville).
845
851
846 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
852 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
847 be quite correct, I know next to nothing about unicode). This
853 be quite correct, I know next to nothing about unicode). This
848 will allow unicode strings to be used in prompts, amongst other
854 will allow unicode strings to be used in prompts, amongst other
849 cases. It also will prevent ipython from crashing when unicode
855 cases. It also will prevent ipython from crashing when unicode
850 shows up unexpectedly in many places. If ascii encoding fails, we
856 shows up unexpectedly in many places. If ascii encoding fails, we
851 assume utf_8. Currently the encoding is not a user-visible
857 assume utf_8. Currently the encoding is not a user-visible
852 setting, though it could be made so if there is demand for it.
858 setting, though it could be made so if there is demand for it.
853
859
854 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
860 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
855
861
856 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
862 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
857
863
858 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
864 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
859
865
860 * IPython/genutils.py: Add 2.2 compatibility here, so all other
866 * IPython/genutils.py: Add 2.2 compatibility here, so all other
861 code can work transparently for 2.2/2.3.
867 code can work transparently for 2.2/2.3.
862
868
863 2005-07-16 Fernando Perez <fperez@colorado.edu>
869 2005-07-16 Fernando Perez <fperez@colorado.edu>
864
870
865 * IPython/ultraTB.py (ExceptionColors): Make a global variable
871 * IPython/ultraTB.py (ExceptionColors): Make a global variable
866 out of the color scheme table used for coloring exception
872 out of the color scheme table used for coloring exception
867 tracebacks. This allows user code to add new schemes at runtime.
873 tracebacks. This allows user code to add new schemes at runtime.
868 This is a minimally modified version of the patch at
874 This is a minimally modified version of the patch at
869 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
875 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
870 for the contribution.
876 for the contribution.
871
877
872 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
878 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
873 slightly modified version of the patch in
879 slightly modified version of the patch in
874 http://www.scipy.net/roundup/ipython/issue34, which also allows me
880 http://www.scipy.net/roundup/ipython/issue34, which also allows me
875 to remove the previous try/except solution (which was costlier).
881 to remove the previous try/except solution (which was costlier).
876 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
882 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
877
883
878 2005-06-08 Fernando Perez <fperez@colorado.edu>
884 2005-06-08 Fernando Perez <fperez@colorado.edu>
879
885
880 * IPython/iplib.py (write/write_err): Add methods to abstract all
886 * IPython/iplib.py (write/write_err): Add methods to abstract all
881 I/O a bit more.
887 I/O a bit more.
882
888
883 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
889 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
884 warning, reported by Aric Hagberg, fix by JD Hunter.
890 warning, reported by Aric Hagberg, fix by JD Hunter.
885
891
886 2005-06-02 *** Released version 0.6.15
892 2005-06-02 *** Released version 0.6.15
887
893
888 2005-06-01 Fernando Perez <fperez@colorado.edu>
894 2005-06-01 Fernando Perez <fperez@colorado.edu>
889
895
890 * IPython/iplib.py (MagicCompleter.file_matches): Fix
896 * IPython/iplib.py (MagicCompleter.file_matches): Fix
891 tab-completion of filenames within open-quoted strings. Note that
897 tab-completion of filenames within open-quoted strings. Note that
892 this requires that in ~/.ipython/ipythonrc, users change the
898 this requires that in ~/.ipython/ipythonrc, users change the
893 readline delimiters configuration to read:
899 readline delimiters configuration to read:
894
900
895 readline_remove_delims -/~
901 readline_remove_delims -/~
896
902
897
903
898 2005-05-31 *** Released version 0.6.14
904 2005-05-31 *** Released version 0.6.14
899
905
900 2005-05-29 Fernando Perez <fperez@colorado.edu>
906 2005-05-29 Fernando Perez <fperez@colorado.edu>
901
907
902 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
908 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
903 with files not on the filesystem. Reported by Eliyahu Sandler
909 with files not on the filesystem. Reported by Eliyahu Sandler
904 <eli@gondolin.net>
910 <eli@gondolin.net>
905
911
906 2005-05-22 Fernando Perez <fperez@colorado.edu>
912 2005-05-22 Fernando Perez <fperez@colorado.edu>
907
913
908 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
914 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
909 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
915 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
910
916
911 2005-05-19 Fernando Perez <fperez@colorado.edu>
917 2005-05-19 Fernando Perez <fperez@colorado.edu>
912
918
913 * IPython/iplib.py (safe_execfile): close a file which could be
919 * IPython/iplib.py (safe_execfile): close a file which could be
914 left open (causing problems in win32, which locks open files).
920 left open (causing problems in win32, which locks open files).
915 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
921 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
916
922
917 2005-05-18 Fernando Perez <fperez@colorado.edu>
923 2005-05-18 Fernando Perez <fperez@colorado.edu>
918
924
919 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
925 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
920 keyword arguments correctly to safe_execfile().
926 keyword arguments correctly to safe_execfile().
921
927
922 2005-05-13 Fernando Perez <fperez@colorado.edu>
928 2005-05-13 Fernando Perez <fperez@colorado.edu>
923
929
924 * ipython.1: Added info about Qt to manpage, and threads warning
930 * ipython.1: Added info about Qt to manpage, and threads warning
925 to usage page (invoked with --help).
931 to usage page (invoked with --help).
926
932
927 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
933 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
928 new matcher (it goes at the end of the priority list) to do
934 new matcher (it goes at the end of the priority list) to do
929 tab-completion on named function arguments. Submitted by George
935 tab-completion on named function arguments. Submitted by George
930 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
936 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
931 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
937 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
932 for more details.
938 for more details.
933
939
934 * IPython/Magic.py (magic_run): Added new -e flag to ignore
940 * IPython/Magic.py (magic_run): Added new -e flag to ignore
935 SystemExit exceptions in the script being run. Thanks to a report
941 SystemExit exceptions in the script being run. Thanks to a report
936 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
942 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
937 producing very annoying behavior when running unit tests.
943 producing very annoying behavior when running unit tests.
938
944
939 2005-05-12 Fernando Perez <fperez@colorado.edu>
945 2005-05-12 Fernando Perez <fperez@colorado.edu>
940
946
941 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
947 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
942 which I'd broken (again) due to a changed regexp. In the process,
948 which I'd broken (again) due to a changed regexp. In the process,
943 added ';' as an escape to auto-quote the whole line without
949 added ';' as an escape to auto-quote the whole line without
944 splitting its arguments. Thanks to a report by Jerry McRae
950 splitting its arguments. Thanks to a report by Jerry McRae
945 <qrs0xyc02-AT-sneakemail.com>.
951 <qrs0xyc02-AT-sneakemail.com>.
946
952
947 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
953 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
948 possible crashes caused by a TokenError. Reported by Ed Schofield
954 possible crashes caused by a TokenError. Reported by Ed Schofield
949 <schofield-AT-ftw.at>.
955 <schofield-AT-ftw.at>.
950
956
951 2005-05-06 Fernando Perez <fperez@colorado.edu>
957 2005-05-06 Fernando Perez <fperez@colorado.edu>
952
958
953 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
959 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
954
960
955 2005-04-29 Fernando Perez <fperez@colorado.edu>
961 2005-04-29 Fernando Perez <fperez@colorado.edu>
956
962
957 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
963 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
958 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
964 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
959 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
965 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
960 which provides support for Qt interactive usage (similar to the
966 which provides support for Qt interactive usage (similar to the
961 existing one for WX and GTK). This had been often requested.
967 existing one for WX and GTK). This had been often requested.
962
968
963 2005-04-14 *** Released version 0.6.13
969 2005-04-14 *** Released version 0.6.13
964
970
965 2005-04-08 Fernando Perez <fperez@colorado.edu>
971 2005-04-08 Fernando Perez <fperez@colorado.edu>
966
972
967 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
973 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
968 from _ofind, which gets called on almost every input line. Now,
974 from _ofind, which gets called on almost every input line. Now,
969 we only try to get docstrings if they are actually going to be
975 we only try to get docstrings if they are actually going to be
970 used (the overhead of fetching unnecessary docstrings can be
976 used (the overhead of fetching unnecessary docstrings can be
971 noticeable for certain objects, such as Pyro proxies).
977 noticeable for certain objects, such as Pyro proxies).
972
978
973 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
979 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
974 for completers. For some reason I had been passing them the state
980 for completers. For some reason I had been passing them the state
975 variable, which completers never actually need, and was in
981 variable, which completers never actually need, and was in
976 conflict with the rlcompleter API. Custom completers ONLY need to
982 conflict with the rlcompleter API. Custom completers ONLY need to
977 take the text parameter.
983 take the text parameter.
978
984
979 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
985 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
980 work correctly in pysh. I've also moved all the logic which used
986 work correctly in pysh. I've also moved all the logic which used
981 to be in pysh.py here, which will prevent problems with future
987 to be in pysh.py here, which will prevent problems with future
982 upgrades. However, this time I must warn users to update their
988 upgrades. However, this time I must warn users to update their
983 pysh profile to include the line
989 pysh profile to include the line
984
990
985 import_all IPython.Extensions.InterpreterExec
991 import_all IPython.Extensions.InterpreterExec
986
992
987 because otherwise things won't work for them. They MUST also
993 because otherwise things won't work for them. They MUST also
988 delete pysh.py and the line
994 delete pysh.py and the line
989
995
990 execfile pysh.py
996 execfile pysh.py
991
997
992 from their ipythonrc-pysh.
998 from their ipythonrc-pysh.
993
999
994 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1000 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
995 robust in the face of objects whose dir() returns non-strings
1001 robust in the face of objects whose dir() returns non-strings
996 (which it shouldn't, but some broken libs like ITK do). Thanks to
1002 (which it shouldn't, but some broken libs like ITK do). Thanks to
997 a patch by John Hunter (implemented differently, though). Also
1003 a patch by John Hunter (implemented differently, though). Also
998 minor improvements by using .extend instead of + on lists.
1004 minor improvements by using .extend instead of + on lists.
999
1005
1000 * pysh.py:
1006 * pysh.py:
1001
1007
1002 2005-04-06 Fernando Perez <fperez@colorado.edu>
1008 2005-04-06 Fernando Perez <fperez@colorado.edu>
1003
1009
1004 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1010 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1005 by default, so that all users benefit from it. Those who don't
1011 by default, so that all users benefit from it. Those who don't
1006 want it can still turn it off.
1012 want it can still turn it off.
1007
1013
1008 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1014 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1009 config file, I'd forgotten about this, so users were getting it
1015 config file, I'd forgotten about this, so users were getting it
1010 off by default.
1016 off by default.
1011
1017
1012 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1018 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1013 consistency. Now magics can be called in multiline statements,
1019 consistency. Now magics can be called in multiline statements,
1014 and python variables can be expanded in magic calls via $var.
1020 and python variables can be expanded in magic calls via $var.
1015 This makes the magic system behave just like aliases or !system
1021 This makes the magic system behave just like aliases or !system
1016 calls.
1022 calls.
1017
1023
1018 2005-03-28 Fernando Perez <fperez@colorado.edu>
1024 2005-03-28 Fernando Perez <fperez@colorado.edu>
1019
1025
1020 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1026 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1021 expensive string additions for building command. Add support for
1027 expensive string additions for building command. Add support for
1022 trailing ';' when autocall is used.
1028 trailing ';' when autocall is used.
1023
1029
1024 2005-03-26 Fernando Perez <fperez@colorado.edu>
1030 2005-03-26 Fernando Perez <fperez@colorado.edu>
1025
1031
1026 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1032 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1027 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1033 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1028 ipython.el robust against prompts with any number of spaces
1034 ipython.el robust against prompts with any number of spaces
1029 (including 0) after the ':' character.
1035 (including 0) after the ':' character.
1030
1036
1031 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1037 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1032 continuation prompt, which misled users to think the line was
1038 continuation prompt, which misled users to think the line was
1033 already indented. Closes debian Bug#300847, reported to me by
1039 already indented. Closes debian Bug#300847, reported to me by
1034 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1040 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1035
1041
1036 2005-03-23 Fernando Perez <fperez@colorado.edu>
1042 2005-03-23 Fernando Perez <fperez@colorado.edu>
1037
1043
1038 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1044 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1039 properly aligned if they have embedded newlines.
1045 properly aligned if they have embedded newlines.
1040
1046
1041 * IPython/iplib.py (runlines): Add a public method to expose
1047 * IPython/iplib.py (runlines): Add a public method to expose
1042 IPython's code execution machinery, so that users can run strings
1048 IPython's code execution machinery, so that users can run strings
1043 as if they had been typed at the prompt interactively.
1049 as if they had been typed at the prompt interactively.
1044 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1050 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1045 methods which can call the system shell, but with python variable
1051 methods which can call the system shell, but with python variable
1046 expansion. The three such methods are: __IPYTHON__.system,
1052 expansion. The three such methods are: __IPYTHON__.system,
1047 .getoutput and .getoutputerror. These need to be documented in a
1053 .getoutput and .getoutputerror. These need to be documented in a
1048 'public API' section (to be written) of the manual.
1054 'public API' section (to be written) of the manual.
1049
1055
1050 2005-03-20 Fernando Perez <fperez@colorado.edu>
1056 2005-03-20 Fernando Perez <fperez@colorado.edu>
1051
1057
1052 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1058 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1053 for custom exception handling. This is quite powerful, and it
1059 for custom exception handling. This is quite powerful, and it
1054 allows for user-installable exception handlers which can trap
1060 allows for user-installable exception handlers which can trap
1055 custom exceptions at runtime and treat them separately from
1061 custom exceptions at runtime and treat them separately from
1056 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1062 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1057 Mantegazza <mantegazza-AT-ill.fr>.
1063 Mantegazza <mantegazza-AT-ill.fr>.
1058 (InteractiveShell.set_custom_completer): public API function to
1064 (InteractiveShell.set_custom_completer): public API function to
1059 add new completers at runtime.
1065 add new completers at runtime.
1060
1066
1061 2005-03-19 Fernando Perez <fperez@colorado.edu>
1067 2005-03-19 Fernando Perez <fperez@colorado.edu>
1062
1068
1063 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1069 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1064 allow objects which provide their docstrings via non-standard
1070 allow objects which provide their docstrings via non-standard
1065 mechanisms (like Pyro proxies) to still be inspected by ipython's
1071 mechanisms (like Pyro proxies) to still be inspected by ipython's
1066 ? system.
1072 ? system.
1067
1073
1068 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1074 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1069 automatic capture system. I tried quite hard to make it work
1075 automatic capture system. I tried quite hard to make it work
1070 reliably, and simply failed. I tried many combinations with the
1076 reliably, and simply failed. I tried many combinations with the
1071 subprocess module, but eventually nothing worked in all needed
1077 subprocess module, but eventually nothing worked in all needed
1072 cases (not blocking stdin for the child, duplicating stdout
1078 cases (not blocking stdin for the child, duplicating stdout
1073 without blocking, etc). The new %sc/%sx still do capture to these
1079 without blocking, etc). The new %sc/%sx still do capture to these
1074 magical list/string objects which make shell use much more
1080 magical list/string objects which make shell use much more
1075 conveninent, so not all is lost.
1081 conveninent, so not all is lost.
1076
1082
1077 XXX - FIX MANUAL for the change above!
1083 XXX - FIX MANUAL for the change above!
1078
1084
1079 (runsource): I copied code.py's runsource() into ipython to modify
1085 (runsource): I copied code.py's runsource() into ipython to modify
1080 it a bit. Now the code object and source to be executed are
1086 it a bit. Now the code object and source to be executed are
1081 stored in ipython. This makes this info accessible to third-party
1087 stored in ipython. This makes this info accessible to third-party
1082 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1088 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1083 Mantegazza <mantegazza-AT-ill.fr>.
1089 Mantegazza <mantegazza-AT-ill.fr>.
1084
1090
1085 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1091 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1086 history-search via readline (like C-p/C-n). I'd wanted this for a
1092 history-search via readline (like C-p/C-n). I'd wanted this for a
1087 long time, but only recently found out how to do it. For users
1093 long time, but only recently found out how to do it. For users
1088 who already have their ipythonrc files made and want this, just
1094 who already have their ipythonrc files made and want this, just
1089 add:
1095 add:
1090
1096
1091 readline_parse_and_bind "\e[A": history-search-backward
1097 readline_parse_and_bind "\e[A": history-search-backward
1092 readline_parse_and_bind "\e[B": history-search-forward
1098 readline_parse_and_bind "\e[B": history-search-forward
1093
1099
1094 2005-03-18 Fernando Perez <fperez@colorado.edu>
1100 2005-03-18 Fernando Perez <fperez@colorado.edu>
1095
1101
1096 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1102 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1097 LSString and SList classes which allow transparent conversions
1103 LSString and SList classes which allow transparent conversions
1098 between list mode and whitespace-separated string.
1104 between list mode and whitespace-separated string.
1099 (magic_r): Fix recursion problem in %r.
1105 (magic_r): Fix recursion problem in %r.
1100
1106
1101 * IPython/genutils.py (LSString): New class to be used for
1107 * IPython/genutils.py (LSString): New class to be used for
1102 automatic storage of the results of all alias/system calls in _o
1108 automatic storage of the results of all alias/system calls in _o
1103 and _e (stdout/err). These provide a .l/.list attribute which
1109 and _e (stdout/err). These provide a .l/.list attribute which
1104 does automatic splitting on newlines. This means that for most
1110 does automatic splitting on newlines. This means that for most
1105 uses, you'll never need to do capturing of output with %sc/%sx
1111 uses, you'll never need to do capturing of output with %sc/%sx
1106 anymore, since ipython keeps this always done for you. Note that
1112 anymore, since ipython keeps this always done for you. Note that
1107 only the LAST results are stored, the _o/e variables are
1113 only the LAST results are stored, the _o/e variables are
1108 overwritten on each call. If you need to save their contents
1114 overwritten on each call. If you need to save their contents
1109 further, simply bind them to any other name.
1115 further, simply bind them to any other name.
1110
1116
1111 2005-03-17 Fernando Perez <fperez@colorado.edu>
1117 2005-03-17 Fernando Perez <fperez@colorado.edu>
1112
1118
1113 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1119 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1114 prompt namespace handling.
1120 prompt namespace handling.
1115
1121
1116 2005-03-16 Fernando Perez <fperez@colorado.edu>
1122 2005-03-16 Fernando Perez <fperez@colorado.edu>
1117
1123
1118 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1124 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1119 classic prompts to be '>>> ' (final space was missing, and it
1125 classic prompts to be '>>> ' (final space was missing, and it
1120 trips the emacs python mode).
1126 trips the emacs python mode).
1121 (BasePrompt.__str__): Added safe support for dynamic prompt
1127 (BasePrompt.__str__): Added safe support for dynamic prompt
1122 strings. Now you can set your prompt string to be '$x', and the
1128 strings. Now you can set your prompt string to be '$x', and the
1123 value of x will be printed from your interactive namespace. The
1129 value of x will be printed from your interactive namespace. The
1124 interpolation syntax includes the full Itpl support, so
1130 interpolation syntax includes the full Itpl support, so
1125 ${foo()+x+bar()} is a valid prompt string now, and the function
1131 ${foo()+x+bar()} is a valid prompt string now, and the function
1126 calls will be made at runtime.
1132 calls will be made at runtime.
1127
1133
1128 2005-03-15 Fernando Perez <fperez@colorado.edu>
1134 2005-03-15 Fernando Perez <fperez@colorado.edu>
1129
1135
1130 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1136 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1131 avoid name clashes in pylab. %hist still works, it just forwards
1137 avoid name clashes in pylab. %hist still works, it just forwards
1132 the call to %history.
1138 the call to %history.
1133
1139
1134 2005-03-02 *** Released version 0.6.12
1140 2005-03-02 *** Released version 0.6.12
1135
1141
1136 2005-03-02 Fernando Perez <fperez@colorado.edu>
1142 2005-03-02 Fernando Perez <fperez@colorado.edu>
1137
1143
1138 * IPython/iplib.py (handle_magic): log magic calls properly as
1144 * IPython/iplib.py (handle_magic): log magic calls properly as
1139 ipmagic() function calls.
1145 ipmagic() function calls.
1140
1146
1141 * IPython/Magic.py (magic_time): Improved %time to support
1147 * IPython/Magic.py (magic_time): Improved %time to support
1142 statements and provide wall-clock as well as CPU time.
1148 statements and provide wall-clock as well as CPU time.
1143
1149
1144 2005-02-27 Fernando Perez <fperez@colorado.edu>
1150 2005-02-27 Fernando Perez <fperez@colorado.edu>
1145
1151
1146 * IPython/hooks.py: New hooks module, to expose user-modifiable
1152 * IPython/hooks.py: New hooks module, to expose user-modifiable
1147 IPython functionality in a clean manner. For now only the editor
1153 IPython functionality in a clean manner. For now only the editor
1148 hook is actually written, and other thigns which I intend to turn
1154 hook is actually written, and other thigns which I intend to turn
1149 into proper hooks aren't yet there. The display and prefilter
1155 into proper hooks aren't yet there. The display and prefilter
1150 stuff, for example, should be hooks. But at least now the
1156 stuff, for example, should be hooks. But at least now the
1151 framework is in place, and the rest can be moved here with more
1157 framework is in place, and the rest can be moved here with more
1152 time later. IPython had had a .hooks variable for a long time for
1158 time later. IPython had had a .hooks variable for a long time for
1153 this purpose, but I'd never actually used it for anything.
1159 this purpose, but I'd never actually used it for anything.
1154
1160
1155 2005-02-26 Fernando Perez <fperez@colorado.edu>
1161 2005-02-26 Fernando Perez <fperez@colorado.edu>
1156
1162
1157 * IPython/ipmaker.py (make_IPython): make the default ipython
1163 * IPython/ipmaker.py (make_IPython): make the default ipython
1158 directory be called _ipython under win32, to follow more the
1164 directory be called _ipython under win32, to follow more the
1159 naming peculiarities of that platform (where buggy software like
1165 naming peculiarities of that platform (where buggy software like
1160 Visual Sourcesafe breaks with .named directories). Reported by
1166 Visual Sourcesafe breaks with .named directories). Reported by
1161 Ville Vainio.
1167 Ville Vainio.
1162
1168
1163 2005-02-23 Fernando Perez <fperez@colorado.edu>
1169 2005-02-23 Fernando Perez <fperez@colorado.edu>
1164
1170
1165 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1171 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1166 auto_aliases for win32 which were causing problems. Users can
1172 auto_aliases for win32 which were causing problems. Users can
1167 define the ones they personally like.
1173 define the ones they personally like.
1168
1174
1169 2005-02-21 Fernando Perez <fperez@colorado.edu>
1175 2005-02-21 Fernando Perez <fperez@colorado.edu>
1170
1176
1171 * IPython/Magic.py (magic_time): new magic to time execution of
1177 * IPython/Magic.py (magic_time): new magic to time execution of
1172 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1178 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1173
1179
1174 2005-02-19 Fernando Perez <fperez@colorado.edu>
1180 2005-02-19 Fernando Perez <fperez@colorado.edu>
1175
1181
1176 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1182 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1177 into keys (for prompts, for example).
1183 into keys (for prompts, for example).
1178
1184
1179 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1185 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1180 prompts in case users want them. This introduces a small behavior
1186 prompts in case users want them. This introduces a small behavior
1181 change: ipython does not automatically add a space to all prompts
1187 change: ipython does not automatically add a space to all prompts
1182 anymore. To get the old prompts with a space, users should add it
1188 anymore. To get the old prompts with a space, users should add it
1183 manually to their ipythonrc file, so for example prompt_in1 should
1189 manually to their ipythonrc file, so for example prompt_in1 should
1184 now read 'In [\#]: ' instead of 'In [\#]:'.
1190 now read 'In [\#]: ' instead of 'In [\#]:'.
1185 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1191 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1186 file) to control left-padding of secondary prompts.
1192 file) to control left-padding of secondary prompts.
1187
1193
1188 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1194 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1189 the profiler can't be imported. Fix for Debian, which removed
1195 the profiler can't be imported. Fix for Debian, which removed
1190 profile.py because of License issues. I applied a slightly
1196 profile.py because of License issues. I applied a slightly
1191 modified version of the original Debian patch at
1197 modified version of the original Debian patch at
1192 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1198 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1193
1199
1194 2005-02-17 Fernando Perez <fperez@colorado.edu>
1200 2005-02-17 Fernando Perez <fperez@colorado.edu>
1195
1201
1196 * IPython/genutils.py (native_line_ends): Fix bug which would
1202 * IPython/genutils.py (native_line_ends): Fix bug which would
1197 cause improper line-ends under win32 b/c I was not opening files
1203 cause improper line-ends under win32 b/c I was not opening files
1198 in binary mode. Bug report and fix thanks to Ville.
1204 in binary mode. Bug report and fix thanks to Ville.
1199
1205
1200 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1206 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1201 trying to catch spurious foo[1] autocalls. My fix actually broke
1207 trying to catch spurious foo[1] autocalls. My fix actually broke
1202 ',/' autoquote/call with explicit escape (bad regexp).
1208 ',/' autoquote/call with explicit escape (bad regexp).
1203
1209
1204 2005-02-15 *** Released version 0.6.11
1210 2005-02-15 *** Released version 0.6.11
1205
1211
1206 2005-02-14 Fernando Perez <fperez@colorado.edu>
1212 2005-02-14 Fernando Perez <fperez@colorado.edu>
1207
1213
1208 * IPython/background_jobs.py: New background job management
1214 * IPython/background_jobs.py: New background job management
1209 subsystem. This is implemented via a new set of classes, and
1215 subsystem. This is implemented via a new set of classes, and
1210 IPython now provides a builtin 'jobs' object for background job
1216 IPython now provides a builtin 'jobs' object for background job
1211 execution. A convenience %bg magic serves as a lightweight
1217 execution. A convenience %bg magic serves as a lightweight
1212 frontend for starting the more common type of calls. This was
1218 frontend for starting the more common type of calls. This was
1213 inspired by discussions with B. Granger and the BackgroundCommand
1219 inspired by discussions with B. Granger and the BackgroundCommand
1214 class described in the book Python Scripting for Computational
1220 class described in the book Python Scripting for Computational
1215 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1221 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1216 (although ultimately no code from this text was used, as IPython's
1222 (although ultimately no code from this text was used, as IPython's
1217 system is a separate implementation).
1223 system is a separate implementation).
1218
1224
1219 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1225 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1220 to control the completion of single/double underscore names
1226 to control the completion of single/double underscore names
1221 separately. As documented in the example ipytonrc file, the
1227 separately. As documented in the example ipytonrc file, the
1222 readline_omit__names variable can now be set to 2, to omit even
1228 readline_omit__names variable can now be set to 2, to omit even
1223 single underscore names. Thanks to a patch by Brian Wong
1229 single underscore names. Thanks to a patch by Brian Wong
1224 <BrianWong-AT-AirgoNetworks.Com>.
1230 <BrianWong-AT-AirgoNetworks.Com>.
1225 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1231 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1226 be autocalled as foo([1]) if foo were callable. A problem for
1232 be autocalled as foo([1]) if foo were callable. A problem for
1227 things which are both callable and implement __getitem__.
1233 things which are both callable and implement __getitem__.
1228 (init_readline): Fix autoindentation for win32. Thanks to a patch
1234 (init_readline): Fix autoindentation for win32. Thanks to a patch
1229 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1235 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1230
1236
1231 2005-02-12 Fernando Perez <fperez@colorado.edu>
1237 2005-02-12 Fernando Perez <fperez@colorado.edu>
1232
1238
1233 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1239 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1234 which I had written long ago to sort out user error messages which
1240 which I had written long ago to sort out user error messages which
1235 may occur during startup. This seemed like a good idea initially,
1241 may occur during startup. This seemed like a good idea initially,
1236 but it has proven a disaster in retrospect. I don't want to
1242 but it has proven a disaster in retrospect. I don't want to
1237 change much code for now, so my fix is to set the internal 'debug'
1243 change much code for now, so my fix is to set the internal 'debug'
1238 flag to true everywhere, whose only job was precisely to control
1244 flag to true everywhere, whose only job was precisely to control
1239 this subsystem. This closes issue 28 (as well as avoiding all
1245 this subsystem. This closes issue 28 (as well as avoiding all
1240 sorts of strange hangups which occur from time to time).
1246 sorts of strange hangups which occur from time to time).
1241
1247
1242 2005-02-07 Fernando Perez <fperez@colorado.edu>
1248 2005-02-07 Fernando Perez <fperez@colorado.edu>
1243
1249
1244 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1250 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1245 previous call produced a syntax error.
1251 previous call produced a syntax error.
1246
1252
1247 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1253 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1248 classes without constructor.
1254 classes without constructor.
1249
1255
1250 2005-02-06 Fernando Perez <fperez@colorado.edu>
1256 2005-02-06 Fernando Perez <fperez@colorado.edu>
1251
1257
1252 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1258 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1253 completions with the results of each matcher, so we return results
1259 completions with the results of each matcher, so we return results
1254 to the user from all namespaces. This breaks with ipython
1260 to the user from all namespaces. This breaks with ipython
1255 tradition, but I think it's a nicer behavior. Now you get all
1261 tradition, but I think it's a nicer behavior. Now you get all
1256 possible completions listed, from all possible namespaces (python,
1262 possible completions listed, from all possible namespaces (python,
1257 filesystem, magics...) After a request by John Hunter
1263 filesystem, magics...) After a request by John Hunter
1258 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1264 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1259
1265
1260 2005-02-05 Fernando Perez <fperez@colorado.edu>
1266 2005-02-05 Fernando Perez <fperez@colorado.edu>
1261
1267
1262 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1268 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1263 the call had quote characters in it (the quotes were stripped).
1269 the call had quote characters in it (the quotes were stripped).
1264
1270
1265 2005-01-31 Fernando Perez <fperez@colorado.edu>
1271 2005-01-31 Fernando Perez <fperez@colorado.edu>
1266
1272
1267 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1273 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1268 Itpl.itpl() to make the code more robust against psyco
1274 Itpl.itpl() to make the code more robust against psyco
1269 optimizations.
1275 optimizations.
1270
1276
1271 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1277 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1272 of causing an exception. Quicker, cleaner.
1278 of causing an exception. Quicker, cleaner.
1273
1279
1274 2005-01-28 Fernando Perez <fperez@colorado.edu>
1280 2005-01-28 Fernando Perez <fperez@colorado.edu>
1275
1281
1276 * scripts/ipython_win_post_install.py (install): hardcode
1282 * scripts/ipython_win_post_install.py (install): hardcode
1277 sys.prefix+'python.exe' as the executable path. It turns out that
1283 sys.prefix+'python.exe' as the executable path. It turns out that
1278 during the post-installation run, sys.executable resolves to the
1284 during the post-installation run, sys.executable resolves to the
1279 name of the binary installer! I should report this as a distutils
1285 name of the binary installer! I should report this as a distutils
1280 bug, I think. I updated the .10 release with this tiny fix, to
1286 bug, I think. I updated the .10 release with this tiny fix, to
1281 avoid annoying the lists further.
1287 avoid annoying the lists further.
1282
1288
1283 2005-01-27 *** Released version 0.6.10
1289 2005-01-27 *** Released version 0.6.10
1284
1290
1285 2005-01-27 Fernando Perez <fperez@colorado.edu>
1291 2005-01-27 Fernando Perez <fperez@colorado.edu>
1286
1292
1287 * IPython/numutils.py (norm): Added 'inf' as optional name for
1293 * IPython/numutils.py (norm): Added 'inf' as optional name for
1288 L-infinity norm, included references to mathworld.com for vector
1294 L-infinity norm, included references to mathworld.com for vector
1289 norm definitions.
1295 norm definitions.
1290 (amin/amax): added amin/amax for array min/max. Similar to what
1296 (amin/amax): added amin/amax for array min/max. Similar to what
1291 pylab ships with after the recent reorganization of names.
1297 pylab ships with after the recent reorganization of names.
1292 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1298 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1293
1299
1294 * ipython.el: committed Alex's recent fixes and improvements.
1300 * ipython.el: committed Alex's recent fixes and improvements.
1295 Tested with python-mode from CVS, and it looks excellent. Since
1301 Tested with python-mode from CVS, and it looks excellent. Since
1296 python-mode hasn't released anything in a while, I'm temporarily
1302 python-mode hasn't released anything in a while, I'm temporarily
1297 putting a copy of today's CVS (v 4.70) of python-mode in:
1303 putting a copy of today's CVS (v 4.70) of python-mode in:
1298 http://ipython.scipy.org/tmp/python-mode.el
1304 http://ipython.scipy.org/tmp/python-mode.el
1299
1305
1300 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1306 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1301 sys.executable for the executable name, instead of assuming it's
1307 sys.executable for the executable name, instead of assuming it's
1302 called 'python.exe' (the post-installer would have produced broken
1308 called 'python.exe' (the post-installer would have produced broken
1303 setups on systems with a differently named python binary).
1309 setups on systems with a differently named python binary).
1304
1310
1305 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1311 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1306 references to os.linesep, to make the code more
1312 references to os.linesep, to make the code more
1307 platform-independent. This is also part of the win32 coloring
1313 platform-independent. This is also part of the win32 coloring
1308 fixes.
1314 fixes.
1309
1315
1310 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1316 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1311 lines, which actually cause coloring bugs because the length of
1317 lines, which actually cause coloring bugs because the length of
1312 the line is very difficult to correctly compute with embedded
1318 the line is very difficult to correctly compute with embedded
1313 escapes. This was the source of all the coloring problems under
1319 escapes. This was the source of all the coloring problems under
1314 Win32. I think that _finally_, Win32 users have a properly
1320 Win32. I think that _finally_, Win32 users have a properly
1315 working ipython in all respects. This would never have happened
1321 working ipython in all respects. This would never have happened
1316 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1322 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1317
1323
1318 2005-01-26 *** Released version 0.6.9
1324 2005-01-26 *** Released version 0.6.9
1319
1325
1320 2005-01-25 Fernando Perez <fperez@colorado.edu>
1326 2005-01-25 Fernando Perez <fperez@colorado.edu>
1321
1327
1322 * setup.py: finally, we have a true Windows installer, thanks to
1328 * setup.py: finally, we have a true Windows installer, thanks to
1323 the excellent work of Viktor Ransmayr
1329 the excellent work of Viktor Ransmayr
1324 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1330 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1325 Windows users. The setup routine is quite a bit cleaner thanks to
1331 Windows users. The setup routine is quite a bit cleaner thanks to
1326 this, and the post-install script uses the proper functions to
1332 this, and the post-install script uses the proper functions to
1327 allow a clean de-installation using the standard Windows Control
1333 allow a clean de-installation using the standard Windows Control
1328 Panel.
1334 Panel.
1329
1335
1330 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1336 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1331 environment variable under all OSes (including win32) if
1337 environment variable under all OSes (including win32) if
1332 available. This will give consistency to win32 users who have set
1338 available. This will give consistency to win32 users who have set
1333 this variable for any reason. If os.environ['HOME'] fails, the
1339 this variable for any reason. If os.environ['HOME'] fails, the
1334 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1340 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1335
1341
1336 2005-01-24 Fernando Perez <fperez@colorado.edu>
1342 2005-01-24 Fernando Perez <fperez@colorado.edu>
1337
1343
1338 * IPython/numutils.py (empty_like): add empty_like(), similar to
1344 * IPython/numutils.py (empty_like): add empty_like(), similar to
1339 zeros_like() but taking advantage of the new empty() Numeric routine.
1345 zeros_like() but taking advantage of the new empty() Numeric routine.
1340
1346
1341 2005-01-23 *** Released version 0.6.8
1347 2005-01-23 *** Released version 0.6.8
1342
1348
1343 2005-01-22 Fernando Perez <fperez@colorado.edu>
1349 2005-01-22 Fernando Perez <fperez@colorado.edu>
1344
1350
1345 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1351 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1346 automatic show() calls. After discussing things with JDH, it
1352 automatic show() calls. After discussing things with JDH, it
1347 turns out there are too many corner cases where this can go wrong.
1353 turns out there are too many corner cases where this can go wrong.
1348 It's best not to try to be 'too smart', and simply have ipython
1354 It's best not to try to be 'too smart', and simply have ipython
1349 reproduce as much as possible the default behavior of a normal
1355 reproduce as much as possible the default behavior of a normal
1350 python shell.
1356 python shell.
1351
1357
1352 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1358 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1353 line-splitting regexp and _prefilter() to avoid calling getattr()
1359 line-splitting regexp and _prefilter() to avoid calling getattr()
1354 on assignments. This closes
1360 on assignments. This closes
1355 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1361 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1356 readline uses getattr(), so a simple <TAB> keypress is still
1362 readline uses getattr(), so a simple <TAB> keypress is still
1357 enough to trigger getattr() calls on an object.
1363 enough to trigger getattr() calls on an object.
1358
1364
1359 2005-01-21 Fernando Perez <fperez@colorado.edu>
1365 2005-01-21 Fernando Perez <fperez@colorado.edu>
1360
1366
1361 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1367 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1362 docstring under pylab so it doesn't mask the original.
1368 docstring under pylab so it doesn't mask the original.
1363
1369
1364 2005-01-21 *** Released version 0.6.7
1370 2005-01-21 *** Released version 0.6.7
1365
1371
1366 2005-01-21 Fernando Perez <fperez@colorado.edu>
1372 2005-01-21 Fernando Perez <fperez@colorado.edu>
1367
1373
1368 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1374 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1369 signal handling for win32 users in multithreaded mode.
1375 signal handling for win32 users in multithreaded mode.
1370
1376
1371 2005-01-17 Fernando Perez <fperez@colorado.edu>
1377 2005-01-17 Fernando Perez <fperez@colorado.edu>
1372
1378
1373 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1379 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1374 instances with no __init__. After a crash report by Norbert Nemec
1380 instances with no __init__. After a crash report by Norbert Nemec
1375 <Norbert-AT-nemec-online.de>.
1381 <Norbert-AT-nemec-online.de>.
1376
1382
1377 2005-01-14 Fernando Perez <fperez@colorado.edu>
1383 2005-01-14 Fernando Perez <fperez@colorado.edu>
1378
1384
1379 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1385 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1380 names for verbose exceptions, when multiple dotted names and the
1386 names for verbose exceptions, when multiple dotted names and the
1381 'parent' object were present on the same line.
1387 'parent' object were present on the same line.
1382
1388
1383 2005-01-11 Fernando Perez <fperez@colorado.edu>
1389 2005-01-11 Fernando Perez <fperez@colorado.edu>
1384
1390
1385 * IPython/genutils.py (flag_calls): new utility to trap and flag
1391 * IPython/genutils.py (flag_calls): new utility to trap and flag
1386 calls in functions. I need it to clean up matplotlib support.
1392 calls in functions. I need it to clean up matplotlib support.
1387 Also removed some deprecated code in genutils.
1393 Also removed some deprecated code in genutils.
1388
1394
1389 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1395 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1390 that matplotlib scripts called with %run, which don't call show()
1396 that matplotlib scripts called with %run, which don't call show()
1391 themselves, still have their plotting windows open.
1397 themselves, still have their plotting windows open.
1392
1398
1393 2005-01-05 Fernando Perez <fperez@colorado.edu>
1399 2005-01-05 Fernando Perez <fperez@colorado.edu>
1394
1400
1395 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1401 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1396 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1402 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1397
1403
1398 2004-12-19 Fernando Perez <fperez@colorado.edu>
1404 2004-12-19 Fernando Perez <fperez@colorado.edu>
1399
1405
1400 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1406 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1401 parent_runcode, which was an eyesore. The same result can be
1407 parent_runcode, which was an eyesore. The same result can be
1402 obtained with Python's regular superclass mechanisms.
1408 obtained with Python's regular superclass mechanisms.
1403
1409
1404 2004-12-17 Fernando Perez <fperez@colorado.edu>
1410 2004-12-17 Fernando Perez <fperez@colorado.edu>
1405
1411
1406 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1412 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1407 reported by Prabhu.
1413 reported by Prabhu.
1408 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1414 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1409 sys.stderr) instead of explicitly calling sys.stderr. This helps
1415 sys.stderr) instead of explicitly calling sys.stderr. This helps
1410 maintain our I/O abstractions clean, for future GUI embeddings.
1416 maintain our I/O abstractions clean, for future GUI embeddings.
1411
1417
1412 * IPython/genutils.py (info): added new utility for sys.stderr
1418 * IPython/genutils.py (info): added new utility for sys.stderr
1413 unified info message handling (thin wrapper around warn()).
1419 unified info message handling (thin wrapper around warn()).
1414
1420
1415 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1421 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1416 composite (dotted) names on verbose exceptions.
1422 composite (dotted) names on verbose exceptions.
1417 (VerboseTB.nullrepr): harden against another kind of errors which
1423 (VerboseTB.nullrepr): harden against another kind of errors which
1418 Python's inspect module can trigger, and which were crashing
1424 Python's inspect module can trigger, and which were crashing
1419 IPython. Thanks to a report by Marco Lombardi
1425 IPython. Thanks to a report by Marco Lombardi
1420 <mlombard-AT-ma010192.hq.eso.org>.
1426 <mlombard-AT-ma010192.hq.eso.org>.
1421
1427
1422 2004-12-13 *** Released version 0.6.6
1428 2004-12-13 *** Released version 0.6.6
1423
1429
1424 2004-12-12 Fernando Perez <fperez@colorado.edu>
1430 2004-12-12 Fernando Perez <fperez@colorado.edu>
1425
1431
1426 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1432 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1427 generated by pygtk upon initialization if it was built without
1433 generated by pygtk upon initialization if it was built without
1428 threads (for matplotlib users). After a crash reported by
1434 threads (for matplotlib users). After a crash reported by
1429 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1435 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1430
1436
1431 * IPython/ipmaker.py (make_IPython): fix small bug in the
1437 * IPython/ipmaker.py (make_IPython): fix small bug in the
1432 import_some parameter for multiple imports.
1438 import_some parameter for multiple imports.
1433
1439
1434 * IPython/iplib.py (ipmagic): simplified the interface of
1440 * IPython/iplib.py (ipmagic): simplified the interface of
1435 ipmagic() to take a single string argument, just as it would be
1441 ipmagic() to take a single string argument, just as it would be
1436 typed at the IPython cmd line.
1442 typed at the IPython cmd line.
1437 (ipalias): Added new ipalias() with an interface identical to
1443 (ipalias): Added new ipalias() with an interface identical to
1438 ipmagic(). This completes exposing a pure python interface to the
1444 ipmagic(). This completes exposing a pure python interface to the
1439 alias and magic system, which can be used in loops or more complex
1445 alias and magic system, which can be used in loops or more complex
1440 code where IPython's automatic line mangling is not active.
1446 code where IPython's automatic line mangling is not active.
1441
1447
1442 * IPython/genutils.py (timing): changed interface of timing to
1448 * IPython/genutils.py (timing): changed interface of timing to
1443 simply run code once, which is the most common case. timings()
1449 simply run code once, which is the most common case. timings()
1444 remains unchanged, for the cases where you want multiple runs.
1450 remains unchanged, for the cases where you want multiple runs.
1445
1451
1446 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1452 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1447 bug where Python2.2 crashes with exec'ing code which does not end
1453 bug where Python2.2 crashes with exec'ing code which does not end
1448 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1454 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1449 before.
1455 before.
1450
1456
1451 2004-12-10 Fernando Perez <fperez@colorado.edu>
1457 2004-12-10 Fernando Perez <fperez@colorado.edu>
1452
1458
1453 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1459 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1454 -t to -T, to accomodate the new -t flag in %run (the %run and
1460 -t to -T, to accomodate the new -t flag in %run (the %run and
1455 %prun options are kind of intermixed, and it's not easy to change
1461 %prun options are kind of intermixed, and it's not easy to change
1456 this with the limitations of python's getopt).
1462 this with the limitations of python's getopt).
1457
1463
1458 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1464 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1459 the execution of scripts. It's not as fine-tuned as timeit.py,
1465 the execution of scripts. It's not as fine-tuned as timeit.py,
1460 but it works from inside ipython (and under 2.2, which lacks
1466 but it works from inside ipython (and under 2.2, which lacks
1461 timeit.py). Optionally a number of runs > 1 can be given for
1467 timeit.py). Optionally a number of runs > 1 can be given for
1462 timing very short-running code.
1468 timing very short-running code.
1463
1469
1464 * IPython/genutils.py (uniq_stable): new routine which returns a
1470 * IPython/genutils.py (uniq_stable): new routine which returns a
1465 list of unique elements in any iterable, but in stable order of
1471 list of unique elements in any iterable, but in stable order of
1466 appearance. I needed this for the ultraTB fixes, and it's a handy
1472 appearance. I needed this for the ultraTB fixes, and it's a handy
1467 utility.
1473 utility.
1468
1474
1469 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1475 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1470 dotted names in Verbose exceptions. This had been broken since
1476 dotted names in Verbose exceptions. This had been broken since
1471 the very start, now x.y will properly be printed in a Verbose
1477 the very start, now x.y will properly be printed in a Verbose
1472 traceback, instead of x being shown and y appearing always as an
1478 traceback, instead of x being shown and y appearing always as an
1473 'undefined global'. Getting this to work was a bit tricky,
1479 'undefined global'. Getting this to work was a bit tricky,
1474 because by default python tokenizers are stateless. Saved by
1480 because by default python tokenizers are stateless. Saved by
1475 python's ability to easily add a bit of state to an arbitrary
1481 python's ability to easily add a bit of state to an arbitrary
1476 function (without needing to build a full-blown callable object).
1482 function (without needing to build a full-blown callable object).
1477
1483
1478 Also big cleanup of this code, which had horrendous runtime
1484 Also big cleanup of this code, which had horrendous runtime
1479 lookups of zillions of attributes for colorization. Moved all
1485 lookups of zillions of attributes for colorization. Moved all
1480 this code into a few templates, which make it cleaner and quicker.
1486 this code into a few templates, which make it cleaner and quicker.
1481
1487
1482 Printout quality was also improved for Verbose exceptions: one
1488 Printout quality was also improved for Verbose exceptions: one
1483 variable per line, and memory addresses are printed (this can be
1489 variable per line, and memory addresses are printed (this can be
1484 quite handy in nasty debugging situations, which is what Verbose
1490 quite handy in nasty debugging situations, which is what Verbose
1485 is for).
1491 is for).
1486
1492
1487 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1493 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1488 the command line as scripts to be loaded by embedded instances.
1494 the command line as scripts to be loaded by embedded instances.
1489 Doing so has the potential for an infinite recursion if there are
1495 Doing so has the potential for an infinite recursion if there are
1490 exceptions thrown in the process. This fixes a strange crash
1496 exceptions thrown in the process. This fixes a strange crash
1491 reported by Philippe MULLER <muller-AT-irit.fr>.
1497 reported by Philippe MULLER <muller-AT-irit.fr>.
1492
1498
1493 2004-12-09 Fernando Perez <fperez@colorado.edu>
1499 2004-12-09 Fernando Perez <fperez@colorado.edu>
1494
1500
1495 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1501 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1496 to reflect new names in matplotlib, which now expose the
1502 to reflect new names in matplotlib, which now expose the
1497 matlab-compatible interface via a pylab module instead of the
1503 matlab-compatible interface via a pylab module instead of the
1498 'matlab' name. The new code is backwards compatible, so users of
1504 'matlab' name. The new code is backwards compatible, so users of
1499 all matplotlib versions are OK. Patch by J. Hunter.
1505 all matplotlib versions are OK. Patch by J. Hunter.
1500
1506
1501 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1507 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1502 of __init__ docstrings for instances (class docstrings are already
1508 of __init__ docstrings for instances (class docstrings are already
1503 automatically printed). Instances with customized docstrings
1509 automatically printed). Instances with customized docstrings
1504 (indep. of the class) are also recognized and all 3 separate
1510 (indep. of the class) are also recognized and all 3 separate
1505 docstrings are printed (instance, class, constructor). After some
1511 docstrings are printed (instance, class, constructor). After some
1506 comments/suggestions by J. Hunter.
1512 comments/suggestions by J. Hunter.
1507
1513
1508 2004-12-05 Fernando Perez <fperez@colorado.edu>
1514 2004-12-05 Fernando Perez <fperez@colorado.edu>
1509
1515
1510 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1516 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1511 warnings when tab-completion fails and triggers an exception.
1517 warnings when tab-completion fails and triggers an exception.
1512
1518
1513 2004-12-03 Fernando Perez <fperez@colorado.edu>
1519 2004-12-03 Fernando Perez <fperez@colorado.edu>
1514
1520
1515 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1521 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1516 be triggered when using 'run -p'. An incorrect option flag was
1522 be triggered when using 'run -p'. An incorrect option flag was
1517 being set ('d' instead of 'D').
1523 being set ('d' instead of 'D').
1518 (manpage): fix missing escaped \- sign.
1524 (manpage): fix missing escaped \- sign.
1519
1525
1520 2004-11-30 *** Released version 0.6.5
1526 2004-11-30 *** Released version 0.6.5
1521
1527
1522 2004-11-30 Fernando Perez <fperez@colorado.edu>
1528 2004-11-30 Fernando Perez <fperez@colorado.edu>
1523
1529
1524 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1530 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1525 setting with -d option.
1531 setting with -d option.
1526
1532
1527 * setup.py (docfiles): Fix problem where the doc glob I was using
1533 * setup.py (docfiles): Fix problem where the doc glob I was using
1528 was COMPLETELY BROKEN. It was giving the right files by pure
1534 was COMPLETELY BROKEN. It was giving the right files by pure
1529 accident, but failed once I tried to include ipython.el. Note:
1535 accident, but failed once I tried to include ipython.el. Note:
1530 glob() does NOT allow you to do exclusion on multiple endings!
1536 glob() does NOT allow you to do exclusion on multiple endings!
1531
1537
1532 2004-11-29 Fernando Perez <fperez@colorado.edu>
1538 2004-11-29 Fernando Perez <fperez@colorado.edu>
1533
1539
1534 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1540 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1535 the manpage as the source. Better formatting & consistency.
1541 the manpage as the source. Better formatting & consistency.
1536
1542
1537 * IPython/Magic.py (magic_run): Added new -d option, to run
1543 * IPython/Magic.py (magic_run): Added new -d option, to run
1538 scripts under the control of the python pdb debugger. Note that
1544 scripts under the control of the python pdb debugger. Note that
1539 this required changing the %prun option -d to -D, to avoid a clash
1545 this required changing the %prun option -d to -D, to avoid a clash
1540 (since %run must pass options to %prun, and getopt is too dumb to
1546 (since %run must pass options to %prun, and getopt is too dumb to
1541 handle options with string values with embedded spaces). Thanks
1547 handle options with string values with embedded spaces). Thanks
1542 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1548 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1543 (magic_who_ls): added type matching to %who and %whos, so that one
1549 (magic_who_ls): added type matching to %who and %whos, so that one
1544 can filter their output to only include variables of certain
1550 can filter their output to only include variables of certain
1545 types. Another suggestion by Matthew.
1551 types. Another suggestion by Matthew.
1546 (magic_whos): Added memory summaries in kb and Mb for arrays.
1552 (magic_whos): Added memory summaries in kb and Mb for arrays.
1547 (magic_who): Improve formatting (break lines every 9 vars).
1553 (magic_who): Improve formatting (break lines every 9 vars).
1548
1554
1549 2004-11-28 Fernando Perez <fperez@colorado.edu>
1555 2004-11-28 Fernando Perez <fperez@colorado.edu>
1550
1556
1551 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1557 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1552 cache when empty lines were present.
1558 cache when empty lines were present.
1553
1559
1554 2004-11-24 Fernando Perez <fperez@colorado.edu>
1560 2004-11-24 Fernando Perez <fperez@colorado.edu>
1555
1561
1556 * IPython/usage.py (__doc__): document the re-activated threading
1562 * IPython/usage.py (__doc__): document the re-activated threading
1557 options for WX and GTK.
1563 options for WX and GTK.
1558
1564
1559 2004-11-23 Fernando Perez <fperez@colorado.edu>
1565 2004-11-23 Fernando Perez <fperez@colorado.edu>
1560
1566
1561 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1567 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1562 the -wthread and -gthread options, along with a new -tk one to try
1568 the -wthread and -gthread options, along with a new -tk one to try
1563 and coordinate Tk threading with wx/gtk. The tk support is very
1569 and coordinate Tk threading with wx/gtk. The tk support is very
1564 platform dependent, since it seems to require Tcl and Tk to be
1570 platform dependent, since it seems to require Tcl and Tk to be
1565 built with threads (Fedora1/2 appears NOT to have it, but in
1571 built with threads (Fedora1/2 appears NOT to have it, but in
1566 Prabhu's Debian boxes it works OK). But even with some Tk
1572 Prabhu's Debian boxes it works OK). But even with some Tk
1567 limitations, this is a great improvement.
1573 limitations, this is a great improvement.
1568
1574
1569 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1575 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1570 info in user prompts. Patch by Prabhu.
1576 info in user prompts. Patch by Prabhu.
1571
1577
1572 2004-11-18 Fernando Perez <fperez@colorado.edu>
1578 2004-11-18 Fernando Perez <fperez@colorado.edu>
1573
1579
1574 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1580 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1575 EOFErrors and bail, to avoid infinite loops if a non-terminating
1581 EOFErrors and bail, to avoid infinite loops if a non-terminating
1576 file is fed into ipython. Patch submitted in issue 19 by user,
1582 file is fed into ipython. Patch submitted in issue 19 by user,
1577 many thanks.
1583 many thanks.
1578
1584
1579 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1585 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1580 autoquote/parens in continuation prompts, which can cause lots of
1586 autoquote/parens in continuation prompts, which can cause lots of
1581 problems. Closes roundup issue 20.
1587 problems. Closes roundup issue 20.
1582
1588
1583 2004-11-17 Fernando Perez <fperez@colorado.edu>
1589 2004-11-17 Fernando Perez <fperez@colorado.edu>
1584
1590
1585 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1591 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1586 reported as debian bug #280505. I'm not sure my local changelog
1592 reported as debian bug #280505. I'm not sure my local changelog
1587 entry has the proper debian format (Jack?).
1593 entry has the proper debian format (Jack?).
1588
1594
1589 2004-11-08 *** Released version 0.6.4
1595 2004-11-08 *** Released version 0.6.4
1590
1596
1591 2004-11-08 Fernando Perez <fperez@colorado.edu>
1597 2004-11-08 Fernando Perez <fperez@colorado.edu>
1592
1598
1593 * IPython/iplib.py (init_readline): Fix exit message for Windows
1599 * IPython/iplib.py (init_readline): Fix exit message for Windows
1594 when readline is active. Thanks to a report by Eric Jones
1600 when readline is active. Thanks to a report by Eric Jones
1595 <eric-AT-enthought.com>.
1601 <eric-AT-enthought.com>.
1596
1602
1597 2004-11-07 Fernando Perez <fperez@colorado.edu>
1603 2004-11-07 Fernando Perez <fperez@colorado.edu>
1598
1604
1599 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1605 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1600 sometimes seen by win2k/cygwin users.
1606 sometimes seen by win2k/cygwin users.
1601
1607
1602 2004-11-06 Fernando Perez <fperez@colorado.edu>
1608 2004-11-06 Fernando Perez <fperez@colorado.edu>
1603
1609
1604 * IPython/iplib.py (interact): Change the handling of %Exit from
1610 * IPython/iplib.py (interact): Change the handling of %Exit from
1605 trying to propagate a SystemExit to an internal ipython flag.
1611 trying to propagate a SystemExit to an internal ipython flag.
1606 This is less elegant than using Python's exception mechanism, but
1612 This is less elegant than using Python's exception mechanism, but
1607 I can't get that to work reliably with threads, so under -pylab
1613 I can't get that to work reliably with threads, so under -pylab
1608 %Exit was hanging IPython. Cross-thread exception handling is
1614 %Exit was hanging IPython. Cross-thread exception handling is
1609 really a bitch. Thaks to a bug report by Stephen Walton
1615 really a bitch. Thaks to a bug report by Stephen Walton
1610 <stephen.walton-AT-csun.edu>.
1616 <stephen.walton-AT-csun.edu>.
1611
1617
1612 2004-11-04 Fernando Perez <fperez@colorado.edu>
1618 2004-11-04 Fernando Perez <fperez@colorado.edu>
1613
1619
1614 * IPython/iplib.py (raw_input_original): store a pointer to the
1620 * IPython/iplib.py (raw_input_original): store a pointer to the
1615 true raw_input to harden against code which can modify it
1621 true raw_input to harden against code which can modify it
1616 (wx.py.PyShell does this and would otherwise crash ipython).
1622 (wx.py.PyShell does this and would otherwise crash ipython).
1617 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1623 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1618
1624
1619 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1625 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1620 Ctrl-C problem, which does not mess up the input line.
1626 Ctrl-C problem, which does not mess up the input line.
1621
1627
1622 2004-11-03 Fernando Perez <fperez@colorado.edu>
1628 2004-11-03 Fernando Perez <fperez@colorado.edu>
1623
1629
1624 * IPython/Release.py: Changed licensing to BSD, in all files.
1630 * IPython/Release.py: Changed licensing to BSD, in all files.
1625 (name): lowercase name for tarball/RPM release.
1631 (name): lowercase name for tarball/RPM release.
1626
1632
1627 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1633 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1628 use throughout ipython.
1634 use throughout ipython.
1629
1635
1630 * IPython/Magic.py (Magic._ofind): Switch to using the new
1636 * IPython/Magic.py (Magic._ofind): Switch to using the new
1631 OInspect.getdoc() function.
1637 OInspect.getdoc() function.
1632
1638
1633 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1639 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1634 of the line currently being canceled via Ctrl-C. It's extremely
1640 of the line currently being canceled via Ctrl-C. It's extremely
1635 ugly, but I don't know how to do it better (the problem is one of
1641 ugly, but I don't know how to do it better (the problem is one of
1636 handling cross-thread exceptions).
1642 handling cross-thread exceptions).
1637
1643
1638 2004-10-28 Fernando Perez <fperez@colorado.edu>
1644 2004-10-28 Fernando Perez <fperez@colorado.edu>
1639
1645
1640 * IPython/Shell.py (signal_handler): add signal handlers to trap
1646 * IPython/Shell.py (signal_handler): add signal handlers to trap
1641 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1647 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1642 report by Francesc Alted.
1648 report by Francesc Alted.
1643
1649
1644 2004-10-21 Fernando Perez <fperez@colorado.edu>
1650 2004-10-21 Fernando Perez <fperez@colorado.edu>
1645
1651
1646 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1652 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1647 to % for pysh syntax extensions.
1653 to % for pysh syntax extensions.
1648
1654
1649 2004-10-09 Fernando Perez <fperez@colorado.edu>
1655 2004-10-09 Fernando Perez <fperez@colorado.edu>
1650
1656
1651 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1657 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1652 arrays to print a more useful summary, without calling str(arr).
1658 arrays to print a more useful summary, without calling str(arr).
1653 This avoids the problem of extremely lengthy computations which
1659 This avoids the problem of extremely lengthy computations which
1654 occur if arr is large, and appear to the user as a system lockup
1660 occur if arr is large, and appear to the user as a system lockup
1655 with 100% cpu activity. After a suggestion by Kristian Sandberg
1661 with 100% cpu activity. After a suggestion by Kristian Sandberg
1656 <Kristian.Sandberg@colorado.edu>.
1662 <Kristian.Sandberg@colorado.edu>.
1657 (Magic.__init__): fix bug in global magic escapes not being
1663 (Magic.__init__): fix bug in global magic escapes not being
1658 correctly set.
1664 correctly set.
1659
1665
1660 2004-10-08 Fernando Perez <fperez@colorado.edu>
1666 2004-10-08 Fernando Perez <fperez@colorado.edu>
1661
1667
1662 * IPython/Magic.py (__license__): change to absolute imports of
1668 * IPython/Magic.py (__license__): change to absolute imports of
1663 ipython's own internal packages, to start adapting to the absolute
1669 ipython's own internal packages, to start adapting to the absolute
1664 import requirement of PEP-328.
1670 import requirement of PEP-328.
1665
1671
1666 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1672 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1667 files, and standardize author/license marks through the Release
1673 files, and standardize author/license marks through the Release
1668 module instead of having per/file stuff (except for files with
1674 module instead of having per/file stuff (except for files with
1669 particular licenses, like the MIT/PSF-licensed codes).
1675 particular licenses, like the MIT/PSF-licensed codes).
1670
1676
1671 * IPython/Debugger.py: remove dead code for python 2.1
1677 * IPython/Debugger.py: remove dead code for python 2.1
1672
1678
1673 2004-10-04 Fernando Perez <fperez@colorado.edu>
1679 2004-10-04 Fernando Perez <fperez@colorado.edu>
1674
1680
1675 * IPython/iplib.py (ipmagic): New function for accessing magics
1681 * IPython/iplib.py (ipmagic): New function for accessing magics
1676 via a normal python function call.
1682 via a normal python function call.
1677
1683
1678 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1684 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1679 from '@' to '%', to accomodate the new @decorator syntax of python
1685 from '@' to '%', to accomodate the new @decorator syntax of python
1680 2.4.
1686 2.4.
1681
1687
1682 2004-09-29 Fernando Perez <fperez@colorado.edu>
1688 2004-09-29 Fernando Perez <fperez@colorado.edu>
1683
1689
1684 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1690 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1685 matplotlib.use to prevent running scripts which try to switch
1691 matplotlib.use to prevent running scripts which try to switch
1686 interactive backends from within ipython. This will just crash
1692 interactive backends from within ipython. This will just crash
1687 the python interpreter, so we can't allow it (but a detailed error
1693 the python interpreter, so we can't allow it (but a detailed error
1688 is given to the user).
1694 is given to the user).
1689
1695
1690 2004-09-28 Fernando Perez <fperez@colorado.edu>
1696 2004-09-28 Fernando Perez <fperez@colorado.edu>
1691
1697
1692 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1698 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1693 matplotlib-related fixes so that using @run with non-matplotlib
1699 matplotlib-related fixes so that using @run with non-matplotlib
1694 scripts doesn't pop up spurious plot windows. This requires
1700 scripts doesn't pop up spurious plot windows. This requires
1695 matplotlib >= 0.63, where I had to make some changes as well.
1701 matplotlib >= 0.63, where I had to make some changes as well.
1696
1702
1697 * IPython/ipmaker.py (make_IPython): update version requirement to
1703 * IPython/ipmaker.py (make_IPython): update version requirement to
1698 python 2.2.
1704 python 2.2.
1699
1705
1700 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1706 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1701 banner arg for embedded customization.
1707 banner arg for embedded customization.
1702
1708
1703 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1709 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1704 explicit uses of __IP as the IPython's instance name. Now things
1710 explicit uses of __IP as the IPython's instance name. Now things
1705 are properly handled via the shell.name value. The actual code
1711 are properly handled via the shell.name value. The actual code
1706 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1712 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1707 is much better than before. I'll clean things completely when the
1713 is much better than before. I'll clean things completely when the
1708 magic stuff gets a real overhaul.
1714 magic stuff gets a real overhaul.
1709
1715
1710 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1716 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1711 minor changes to debian dir.
1717 minor changes to debian dir.
1712
1718
1713 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1719 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1714 pointer to the shell itself in the interactive namespace even when
1720 pointer to the shell itself in the interactive namespace even when
1715 a user-supplied dict is provided. This is needed for embedding
1721 a user-supplied dict is provided. This is needed for embedding
1716 purposes (found by tests with Michel Sanner).
1722 purposes (found by tests with Michel Sanner).
1717
1723
1718 2004-09-27 Fernando Perez <fperez@colorado.edu>
1724 2004-09-27 Fernando Perez <fperez@colorado.edu>
1719
1725
1720 * IPython/UserConfig/ipythonrc: remove []{} from
1726 * IPython/UserConfig/ipythonrc: remove []{} from
1721 readline_remove_delims, so that things like [modname.<TAB> do
1727 readline_remove_delims, so that things like [modname.<TAB> do
1722 proper completion. This disables [].TAB, but that's a less common
1728 proper completion. This disables [].TAB, but that's a less common
1723 case than module names in list comprehensions, for example.
1729 case than module names in list comprehensions, for example.
1724 Thanks to a report by Andrea Riciputi.
1730 Thanks to a report by Andrea Riciputi.
1725
1731
1726 2004-09-09 Fernando Perez <fperez@colorado.edu>
1732 2004-09-09 Fernando Perez <fperez@colorado.edu>
1727
1733
1728 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1734 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1729 blocking problems in win32 and osx. Fix by John.
1735 blocking problems in win32 and osx. Fix by John.
1730
1736
1731 2004-09-08 Fernando Perez <fperez@colorado.edu>
1737 2004-09-08 Fernando Perez <fperez@colorado.edu>
1732
1738
1733 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1739 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1734 for Win32 and OSX. Fix by John Hunter.
1740 for Win32 and OSX. Fix by John Hunter.
1735
1741
1736 2004-08-30 *** Released version 0.6.3
1742 2004-08-30 *** Released version 0.6.3
1737
1743
1738 2004-08-30 Fernando Perez <fperez@colorado.edu>
1744 2004-08-30 Fernando Perez <fperez@colorado.edu>
1739
1745
1740 * setup.py (isfile): Add manpages to list of dependent files to be
1746 * setup.py (isfile): Add manpages to list of dependent files to be
1741 updated.
1747 updated.
1742
1748
1743 2004-08-27 Fernando Perez <fperez@colorado.edu>
1749 2004-08-27 Fernando Perez <fperez@colorado.edu>
1744
1750
1745 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1751 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1746 for now. They don't really work with standalone WX/GTK code
1752 for now. They don't really work with standalone WX/GTK code
1747 (though matplotlib IS working fine with both of those backends).
1753 (though matplotlib IS working fine with both of those backends).
1748 This will neeed much more testing. I disabled most things with
1754 This will neeed much more testing. I disabled most things with
1749 comments, so turning it back on later should be pretty easy.
1755 comments, so turning it back on later should be pretty easy.
1750
1756
1751 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1757 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1752 autocalling of expressions like r'foo', by modifying the line
1758 autocalling of expressions like r'foo', by modifying the line
1753 split regexp. Closes
1759 split regexp. Closes
1754 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1760 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1755 Riley <ipythonbugs-AT-sabi.net>.
1761 Riley <ipythonbugs-AT-sabi.net>.
1756 (InteractiveShell.mainloop): honor --nobanner with banner
1762 (InteractiveShell.mainloop): honor --nobanner with banner
1757 extensions.
1763 extensions.
1758
1764
1759 * IPython/Shell.py: Significant refactoring of all classes, so
1765 * IPython/Shell.py: Significant refactoring of all classes, so
1760 that we can really support ALL matplotlib backends and threading
1766 that we can really support ALL matplotlib backends and threading
1761 models (John spotted a bug with Tk which required this). Now we
1767 models (John spotted a bug with Tk which required this). Now we
1762 should support single-threaded, WX-threads and GTK-threads, both
1768 should support single-threaded, WX-threads and GTK-threads, both
1763 for generic code and for matplotlib.
1769 for generic code and for matplotlib.
1764
1770
1765 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1771 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1766 -pylab, to simplify things for users. Will also remove the pylab
1772 -pylab, to simplify things for users. Will also remove the pylab
1767 profile, since now all of matplotlib configuration is directly
1773 profile, since now all of matplotlib configuration is directly
1768 handled here. This also reduces startup time.
1774 handled here. This also reduces startup time.
1769
1775
1770 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1776 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1771 shell wasn't being correctly called. Also in IPShellWX.
1777 shell wasn't being correctly called. Also in IPShellWX.
1772
1778
1773 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1779 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1774 fine-tune banner.
1780 fine-tune banner.
1775
1781
1776 * IPython/numutils.py (spike): Deprecate these spike functions,
1782 * IPython/numutils.py (spike): Deprecate these spike functions,
1777 delete (long deprecated) gnuplot_exec handler.
1783 delete (long deprecated) gnuplot_exec handler.
1778
1784
1779 2004-08-26 Fernando Perez <fperez@colorado.edu>
1785 2004-08-26 Fernando Perez <fperez@colorado.edu>
1780
1786
1781 * ipython.1: Update for threading options, plus some others which
1787 * ipython.1: Update for threading options, plus some others which
1782 were missing.
1788 were missing.
1783
1789
1784 * IPython/ipmaker.py (__call__): Added -wthread option for
1790 * IPython/ipmaker.py (__call__): Added -wthread option for
1785 wxpython thread handling. Make sure threading options are only
1791 wxpython thread handling. Make sure threading options are only
1786 valid at the command line.
1792 valid at the command line.
1787
1793
1788 * scripts/ipython: moved shell selection into a factory function
1794 * scripts/ipython: moved shell selection into a factory function
1789 in Shell.py, to keep the starter script to a minimum.
1795 in Shell.py, to keep the starter script to a minimum.
1790
1796
1791 2004-08-25 Fernando Perez <fperez@colorado.edu>
1797 2004-08-25 Fernando Perez <fperez@colorado.edu>
1792
1798
1793 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1799 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1794 John. Along with some recent changes he made to matplotlib, the
1800 John. Along with some recent changes he made to matplotlib, the
1795 next versions of both systems should work very well together.
1801 next versions of both systems should work very well together.
1796
1802
1797 2004-08-24 Fernando Perez <fperez@colorado.edu>
1803 2004-08-24 Fernando Perez <fperez@colorado.edu>
1798
1804
1799 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1805 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1800 tried to switch the profiling to using hotshot, but I'm getting
1806 tried to switch the profiling to using hotshot, but I'm getting
1801 strange errors from prof.runctx() there. I may be misreading the
1807 strange errors from prof.runctx() there. I may be misreading the
1802 docs, but it looks weird. For now the profiling code will
1808 docs, but it looks weird. For now the profiling code will
1803 continue to use the standard profiler.
1809 continue to use the standard profiler.
1804
1810
1805 2004-08-23 Fernando Perez <fperez@colorado.edu>
1811 2004-08-23 Fernando Perez <fperez@colorado.edu>
1806
1812
1807 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1813 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1808 threaded shell, by John Hunter. It's not quite ready yet, but
1814 threaded shell, by John Hunter. It's not quite ready yet, but
1809 close.
1815 close.
1810
1816
1811 2004-08-22 Fernando Perez <fperez@colorado.edu>
1817 2004-08-22 Fernando Perez <fperez@colorado.edu>
1812
1818
1813 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1819 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1814 in Magic and ultraTB.
1820 in Magic and ultraTB.
1815
1821
1816 * ipython.1: document threading options in manpage.
1822 * ipython.1: document threading options in manpage.
1817
1823
1818 * scripts/ipython: Changed name of -thread option to -gthread,
1824 * scripts/ipython: Changed name of -thread option to -gthread,
1819 since this is GTK specific. I want to leave the door open for a
1825 since this is GTK specific. I want to leave the door open for a
1820 -wthread option for WX, which will most likely be necessary. This
1826 -wthread option for WX, which will most likely be necessary. This
1821 change affects usage and ipmaker as well.
1827 change affects usage and ipmaker as well.
1822
1828
1823 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1829 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1824 handle the matplotlib shell issues. Code by John Hunter
1830 handle the matplotlib shell issues. Code by John Hunter
1825 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1831 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1826 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1832 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1827 broken (and disabled for end users) for now, but it puts the
1833 broken (and disabled for end users) for now, but it puts the
1828 infrastructure in place.
1834 infrastructure in place.
1829
1835
1830 2004-08-21 Fernando Perez <fperez@colorado.edu>
1836 2004-08-21 Fernando Perez <fperez@colorado.edu>
1831
1837
1832 * ipythonrc-pylab: Add matplotlib support.
1838 * ipythonrc-pylab: Add matplotlib support.
1833
1839
1834 * matplotlib_config.py: new files for matplotlib support, part of
1840 * matplotlib_config.py: new files for matplotlib support, part of
1835 the pylab profile.
1841 the pylab profile.
1836
1842
1837 * IPython/usage.py (__doc__): documented the threading options.
1843 * IPython/usage.py (__doc__): documented the threading options.
1838
1844
1839 2004-08-20 Fernando Perez <fperez@colorado.edu>
1845 2004-08-20 Fernando Perez <fperez@colorado.edu>
1840
1846
1841 * ipython: Modified the main calling routine to handle the -thread
1847 * ipython: Modified the main calling routine to handle the -thread
1842 and -mpthread options. This needs to be done as a top-level hack,
1848 and -mpthread options. This needs to be done as a top-level hack,
1843 because it determines which class to instantiate for IPython
1849 because it determines which class to instantiate for IPython
1844 itself.
1850 itself.
1845
1851
1846 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1852 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1847 classes to support multithreaded GTK operation without blocking,
1853 classes to support multithreaded GTK operation without blocking,
1848 and matplotlib with all backends. This is a lot of still very
1854 and matplotlib with all backends. This is a lot of still very
1849 experimental code, and threads are tricky. So it may still have a
1855 experimental code, and threads are tricky. So it may still have a
1850 few rough edges... This code owes a lot to
1856 few rough edges... This code owes a lot to
1851 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1857 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1852 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1858 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1853 to John Hunter for all the matplotlib work.
1859 to John Hunter for all the matplotlib work.
1854
1860
1855 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1861 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1856 options for gtk thread and matplotlib support.
1862 options for gtk thread and matplotlib support.
1857
1863
1858 2004-08-16 Fernando Perez <fperez@colorado.edu>
1864 2004-08-16 Fernando Perez <fperez@colorado.edu>
1859
1865
1860 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1866 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1861 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1867 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1862 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1868 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1863
1869
1864 2004-08-11 Fernando Perez <fperez@colorado.edu>
1870 2004-08-11 Fernando Perez <fperez@colorado.edu>
1865
1871
1866 * setup.py (isfile): Fix build so documentation gets updated for
1872 * setup.py (isfile): Fix build so documentation gets updated for
1867 rpms (it was only done for .tgz builds).
1873 rpms (it was only done for .tgz builds).
1868
1874
1869 2004-08-10 Fernando Perez <fperez@colorado.edu>
1875 2004-08-10 Fernando Perez <fperez@colorado.edu>
1870
1876
1871 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1877 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1872
1878
1873 * iplib.py : Silence syntax error exceptions in tab-completion.
1879 * iplib.py : Silence syntax error exceptions in tab-completion.
1874
1880
1875 2004-08-05 Fernando Perez <fperez@colorado.edu>
1881 2004-08-05 Fernando Perez <fperez@colorado.edu>
1876
1882
1877 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1883 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1878 'color off' mark for continuation prompts. This was causing long
1884 'color off' mark for continuation prompts. This was causing long
1879 continuation lines to mis-wrap.
1885 continuation lines to mis-wrap.
1880
1886
1881 2004-08-01 Fernando Perez <fperez@colorado.edu>
1887 2004-08-01 Fernando Perez <fperez@colorado.edu>
1882
1888
1883 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1889 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1884 for building ipython to be a parameter. All this is necessary
1890 for building ipython to be a parameter. All this is necessary
1885 right now to have a multithreaded version, but this insane
1891 right now to have a multithreaded version, but this insane
1886 non-design will be cleaned up soon. For now, it's a hack that
1892 non-design will be cleaned up soon. For now, it's a hack that
1887 works.
1893 works.
1888
1894
1889 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1895 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1890 args in various places. No bugs so far, but it's a dangerous
1896 args in various places. No bugs so far, but it's a dangerous
1891 practice.
1897 practice.
1892
1898
1893 2004-07-31 Fernando Perez <fperez@colorado.edu>
1899 2004-07-31 Fernando Perez <fperez@colorado.edu>
1894
1900
1895 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1901 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1896 fix completion of files with dots in their names under most
1902 fix completion of files with dots in their names under most
1897 profiles (pysh was OK because the completion order is different).
1903 profiles (pysh was OK because the completion order is different).
1898
1904
1899 2004-07-27 Fernando Perez <fperez@colorado.edu>
1905 2004-07-27 Fernando Perez <fperez@colorado.edu>
1900
1906
1901 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1907 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1902 keywords manually, b/c the one in keyword.py was removed in python
1908 keywords manually, b/c the one in keyword.py was removed in python
1903 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1909 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1904 This is NOT a bug under python 2.3 and earlier.
1910 This is NOT a bug under python 2.3 and earlier.
1905
1911
1906 2004-07-26 Fernando Perez <fperez@colorado.edu>
1912 2004-07-26 Fernando Perez <fperez@colorado.edu>
1907
1913
1908 * IPython/ultraTB.py (VerboseTB.text): Add another
1914 * IPython/ultraTB.py (VerboseTB.text): Add another
1909 linecache.checkcache() call to try to prevent inspect.py from
1915 linecache.checkcache() call to try to prevent inspect.py from
1910 crashing under python 2.3. I think this fixes
1916 crashing under python 2.3. I think this fixes
1911 http://www.scipy.net/roundup/ipython/issue17.
1917 http://www.scipy.net/roundup/ipython/issue17.
1912
1918
1913 2004-07-26 *** Released version 0.6.2
1919 2004-07-26 *** Released version 0.6.2
1914
1920
1915 2004-07-26 Fernando Perez <fperez@colorado.edu>
1921 2004-07-26 Fernando Perez <fperez@colorado.edu>
1916
1922
1917 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1923 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1918 fail for any number.
1924 fail for any number.
1919 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1925 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1920 empty bookmarks.
1926 empty bookmarks.
1921
1927
1922 2004-07-26 *** Released version 0.6.1
1928 2004-07-26 *** Released version 0.6.1
1923
1929
1924 2004-07-26 Fernando Perez <fperez@colorado.edu>
1930 2004-07-26 Fernando Perez <fperez@colorado.edu>
1925
1931
1926 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1932 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1927
1933
1928 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1934 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1929 escaping '()[]{}' in filenames.
1935 escaping '()[]{}' in filenames.
1930
1936
1931 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1937 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1932 Python 2.2 users who lack a proper shlex.split.
1938 Python 2.2 users who lack a proper shlex.split.
1933
1939
1934 2004-07-19 Fernando Perez <fperez@colorado.edu>
1940 2004-07-19 Fernando Perez <fperez@colorado.edu>
1935
1941
1936 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1942 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1937 for reading readline's init file. I follow the normal chain:
1943 for reading readline's init file. I follow the normal chain:
1938 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1944 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1939 report by Mike Heeter. This closes
1945 report by Mike Heeter. This closes
1940 http://www.scipy.net/roundup/ipython/issue16.
1946 http://www.scipy.net/roundup/ipython/issue16.
1941
1947
1942 2004-07-18 Fernando Perez <fperez@colorado.edu>
1948 2004-07-18 Fernando Perez <fperez@colorado.edu>
1943
1949
1944 * IPython/iplib.py (__init__): Add better handling of '\' under
1950 * IPython/iplib.py (__init__): Add better handling of '\' under
1945 Win32 for filenames. After a patch by Ville.
1951 Win32 for filenames. After a patch by Ville.
1946
1952
1947 2004-07-17 Fernando Perez <fperez@colorado.edu>
1953 2004-07-17 Fernando Perez <fperez@colorado.edu>
1948
1954
1949 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1955 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1950 autocalling would be triggered for 'foo is bar' if foo is
1956 autocalling would be triggered for 'foo is bar' if foo is
1951 callable. I also cleaned up the autocall detection code to use a
1957 callable. I also cleaned up the autocall detection code to use a
1952 regexp, which is faster. Bug reported by Alexander Schmolck.
1958 regexp, which is faster. Bug reported by Alexander Schmolck.
1953
1959
1954 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1960 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1955 '?' in them would confuse the help system. Reported by Alex
1961 '?' in them would confuse the help system. Reported by Alex
1956 Schmolck.
1962 Schmolck.
1957
1963
1958 2004-07-16 Fernando Perez <fperez@colorado.edu>
1964 2004-07-16 Fernando Perez <fperez@colorado.edu>
1959
1965
1960 * IPython/GnuplotInteractive.py (__all__): added plot2.
1966 * IPython/GnuplotInteractive.py (__all__): added plot2.
1961
1967
1962 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1968 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1963 plotting dictionaries, lists or tuples of 1d arrays.
1969 plotting dictionaries, lists or tuples of 1d arrays.
1964
1970
1965 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1971 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1966 optimizations.
1972 optimizations.
1967
1973
1968 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1974 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1969 the information which was there from Janko's original IPP code:
1975 the information which was there from Janko's original IPP code:
1970
1976
1971 03.05.99 20:53 porto.ifm.uni-kiel.de
1977 03.05.99 20:53 porto.ifm.uni-kiel.de
1972 --Started changelog.
1978 --Started changelog.
1973 --make clear do what it say it does
1979 --make clear do what it say it does
1974 --added pretty output of lines from inputcache
1980 --added pretty output of lines from inputcache
1975 --Made Logger a mixin class, simplifies handling of switches
1981 --Made Logger a mixin class, simplifies handling of switches
1976 --Added own completer class. .string<TAB> expands to last history
1982 --Added own completer class. .string<TAB> expands to last history
1977 line which starts with string. The new expansion is also present
1983 line which starts with string. The new expansion is also present
1978 with Ctrl-r from the readline library. But this shows, who this
1984 with Ctrl-r from the readline library. But this shows, who this
1979 can be done for other cases.
1985 can be done for other cases.
1980 --Added convention that all shell functions should accept a
1986 --Added convention that all shell functions should accept a
1981 parameter_string This opens the door for different behaviour for
1987 parameter_string This opens the door for different behaviour for
1982 each function. @cd is a good example of this.
1988 each function. @cd is a good example of this.
1983
1989
1984 04.05.99 12:12 porto.ifm.uni-kiel.de
1990 04.05.99 12:12 porto.ifm.uni-kiel.de
1985 --added logfile rotation
1991 --added logfile rotation
1986 --added new mainloop method which freezes first the namespace
1992 --added new mainloop method which freezes first the namespace
1987
1993
1988 07.05.99 21:24 porto.ifm.uni-kiel.de
1994 07.05.99 21:24 porto.ifm.uni-kiel.de
1989 --added the docreader classes. Now there is a help system.
1995 --added the docreader classes. Now there is a help system.
1990 -This is only a first try. Currently it's not easy to put new
1996 -This is only a first try. Currently it's not easy to put new
1991 stuff in the indices. But this is the way to go. Info would be
1997 stuff in the indices. But this is the way to go. Info would be
1992 better, but HTML is every where and not everybody has an info
1998 better, but HTML is every where and not everybody has an info
1993 system installed and it's not so easy to change html-docs to info.
1999 system installed and it's not so easy to change html-docs to info.
1994 --added global logfile option
2000 --added global logfile option
1995 --there is now a hook for object inspection method pinfo needs to
2001 --there is now a hook for object inspection method pinfo needs to
1996 be provided for this. Can be reached by two '??'.
2002 be provided for this. Can be reached by two '??'.
1997
2003
1998 08.05.99 20:51 porto.ifm.uni-kiel.de
2004 08.05.99 20:51 porto.ifm.uni-kiel.de
1999 --added a README
2005 --added a README
2000 --bug in rc file. Something has changed so functions in the rc
2006 --bug in rc file. Something has changed so functions in the rc
2001 file need to reference the shell and not self. Not clear if it's a
2007 file need to reference the shell and not self. Not clear if it's a
2002 bug or feature.
2008 bug or feature.
2003 --changed rc file for new behavior
2009 --changed rc file for new behavior
2004
2010
2005 2004-07-15 Fernando Perez <fperez@colorado.edu>
2011 2004-07-15 Fernando Perez <fperez@colorado.edu>
2006
2012
2007 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2013 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2008 cache was falling out of sync in bizarre manners when multi-line
2014 cache was falling out of sync in bizarre manners when multi-line
2009 input was present. Minor optimizations and cleanup.
2015 input was present. Minor optimizations and cleanup.
2010
2016
2011 (Logger): Remove old Changelog info for cleanup. This is the
2017 (Logger): Remove old Changelog info for cleanup. This is the
2012 information which was there from Janko's original code:
2018 information which was there from Janko's original code:
2013
2019
2014 Changes to Logger: - made the default log filename a parameter
2020 Changes to Logger: - made the default log filename a parameter
2015
2021
2016 - put a check for lines beginning with !@? in log(). Needed
2022 - put a check for lines beginning with !@? in log(). Needed
2017 (even if the handlers properly log their lines) for mid-session
2023 (even if the handlers properly log their lines) for mid-session
2018 logging activation to work properly. Without this, lines logged
2024 logging activation to work properly. Without this, lines logged
2019 in mid session, which get read from the cache, would end up
2025 in mid session, which get read from the cache, would end up
2020 'bare' (with !@? in the open) in the log. Now they are caught
2026 'bare' (with !@? in the open) in the log. Now they are caught
2021 and prepended with a #.
2027 and prepended with a #.
2022
2028
2023 * IPython/iplib.py (InteractiveShell.init_readline): added check
2029 * IPython/iplib.py (InteractiveShell.init_readline): added check
2024 in case MagicCompleter fails to be defined, so we don't crash.
2030 in case MagicCompleter fails to be defined, so we don't crash.
2025
2031
2026 2004-07-13 Fernando Perez <fperez@colorado.edu>
2032 2004-07-13 Fernando Perez <fperez@colorado.edu>
2027
2033
2028 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2034 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2029 of EPS if the requested filename ends in '.eps'.
2035 of EPS if the requested filename ends in '.eps'.
2030
2036
2031 2004-07-04 Fernando Perez <fperez@colorado.edu>
2037 2004-07-04 Fernando Perez <fperez@colorado.edu>
2032
2038
2033 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2039 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2034 escaping of quotes when calling the shell.
2040 escaping of quotes when calling the shell.
2035
2041
2036 2004-07-02 Fernando Perez <fperez@colorado.edu>
2042 2004-07-02 Fernando Perez <fperez@colorado.edu>
2037
2043
2038 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2044 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2039 gettext not working because we were clobbering '_'. Fixes
2045 gettext not working because we were clobbering '_'. Fixes
2040 http://www.scipy.net/roundup/ipython/issue6.
2046 http://www.scipy.net/roundup/ipython/issue6.
2041
2047
2042 2004-07-01 Fernando Perez <fperez@colorado.edu>
2048 2004-07-01 Fernando Perez <fperez@colorado.edu>
2043
2049
2044 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2050 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2045 into @cd. Patch by Ville.
2051 into @cd. Patch by Ville.
2046
2052
2047 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2053 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2048 new function to store things after ipmaker runs. Patch by Ville.
2054 new function to store things after ipmaker runs. Patch by Ville.
2049 Eventually this will go away once ipmaker is removed and the class
2055 Eventually this will go away once ipmaker is removed and the class
2050 gets cleaned up, but for now it's ok. Key functionality here is
2056 gets cleaned up, but for now it's ok. Key functionality here is
2051 the addition of the persistent storage mechanism, a dict for
2057 the addition of the persistent storage mechanism, a dict for
2052 keeping data across sessions (for now just bookmarks, but more can
2058 keeping data across sessions (for now just bookmarks, but more can
2053 be implemented later).
2059 be implemented later).
2054
2060
2055 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2061 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2056 persistent across sections. Patch by Ville, I modified it
2062 persistent across sections. Patch by Ville, I modified it
2057 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2063 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2058 added a '-l' option to list all bookmarks.
2064 added a '-l' option to list all bookmarks.
2059
2065
2060 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2066 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2061 center for cleanup. Registered with atexit.register(). I moved
2067 center for cleanup. Registered with atexit.register(). I moved
2062 here the old exit_cleanup(). After a patch by Ville.
2068 here the old exit_cleanup(). After a patch by Ville.
2063
2069
2064 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2070 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2065 characters in the hacked shlex_split for python 2.2.
2071 characters in the hacked shlex_split for python 2.2.
2066
2072
2067 * IPython/iplib.py (file_matches): more fixes to filenames with
2073 * IPython/iplib.py (file_matches): more fixes to filenames with
2068 whitespace in them. It's not perfect, but limitations in python's
2074 whitespace in them. It's not perfect, but limitations in python's
2069 readline make it impossible to go further.
2075 readline make it impossible to go further.
2070
2076
2071 2004-06-29 Fernando Perez <fperez@colorado.edu>
2077 2004-06-29 Fernando Perez <fperez@colorado.edu>
2072
2078
2073 * IPython/iplib.py (file_matches): escape whitespace correctly in
2079 * IPython/iplib.py (file_matches): escape whitespace correctly in
2074 filename completions. Bug reported by Ville.
2080 filename completions. Bug reported by Ville.
2075
2081
2076 2004-06-28 Fernando Perez <fperez@colorado.edu>
2082 2004-06-28 Fernando Perez <fperez@colorado.edu>
2077
2083
2078 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2084 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2079 the history file will be called 'history-PROFNAME' (or just
2085 the history file will be called 'history-PROFNAME' (or just
2080 'history' if no profile is loaded). I was getting annoyed at
2086 'history' if no profile is loaded). I was getting annoyed at
2081 getting my Numerical work history clobbered by pysh sessions.
2087 getting my Numerical work history clobbered by pysh sessions.
2082
2088
2083 * IPython/iplib.py (InteractiveShell.__init__): Internal
2089 * IPython/iplib.py (InteractiveShell.__init__): Internal
2084 getoutputerror() function so that we can honor the system_verbose
2090 getoutputerror() function so that we can honor the system_verbose
2085 flag for _all_ system calls. I also added escaping of #
2091 flag for _all_ system calls. I also added escaping of #
2086 characters here to avoid confusing Itpl.
2092 characters here to avoid confusing Itpl.
2087
2093
2088 * IPython/Magic.py (shlex_split): removed call to shell in
2094 * IPython/Magic.py (shlex_split): removed call to shell in
2089 parse_options and replaced it with shlex.split(). The annoying
2095 parse_options and replaced it with shlex.split(). The annoying
2090 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2096 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2091 to backport it from 2.3, with several frail hacks (the shlex
2097 to backport it from 2.3, with several frail hacks (the shlex
2092 module is rather limited in 2.2). Thanks to a suggestion by Ville
2098 module is rather limited in 2.2). Thanks to a suggestion by Ville
2093 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2099 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2094 problem.
2100 problem.
2095
2101
2096 (Magic.magic_system_verbose): new toggle to print the actual
2102 (Magic.magic_system_verbose): new toggle to print the actual
2097 system calls made by ipython. Mainly for debugging purposes.
2103 system calls made by ipython. Mainly for debugging purposes.
2098
2104
2099 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2105 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2100 doesn't support persistence. Reported (and fix suggested) by
2106 doesn't support persistence. Reported (and fix suggested) by
2101 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2107 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2102
2108
2103 2004-06-26 Fernando Perez <fperez@colorado.edu>
2109 2004-06-26 Fernando Perez <fperez@colorado.edu>
2104
2110
2105 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2111 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2106 continue prompts.
2112 continue prompts.
2107
2113
2108 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2114 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2109 function (basically a big docstring) and a few more things here to
2115 function (basically a big docstring) and a few more things here to
2110 speedup startup. pysh.py is now very lightweight. We want because
2116 speedup startup. pysh.py is now very lightweight. We want because
2111 it gets execfile'd, while InterpreterExec gets imported, so
2117 it gets execfile'd, while InterpreterExec gets imported, so
2112 byte-compilation saves time.
2118 byte-compilation saves time.
2113
2119
2114 2004-06-25 Fernando Perez <fperez@colorado.edu>
2120 2004-06-25 Fernando Perez <fperez@colorado.edu>
2115
2121
2116 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2122 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2117 -NUM', which was recently broken.
2123 -NUM', which was recently broken.
2118
2124
2119 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2125 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2120 in multi-line input (but not !!, which doesn't make sense there).
2126 in multi-line input (but not !!, which doesn't make sense there).
2121
2127
2122 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2128 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2123 It's just too useful, and people can turn it off in the less
2129 It's just too useful, and people can turn it off in the less
2124 common cases where it's a problem.
2130 common cases where it's a problem.
2125
2131
2126 2004-06-24 Fernando Perez <fperez@colorado.edu>
2132 2004-06-24 Fernando Perez <fperez@colorado.edu>
2127
2133
2128 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2134 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2129 special syntaxes (like alias calling) is now allied in multi-line
2135 special syntaxes (like alias calling) is now allied in multi-line
2130 input. This is still _very_ experimental, but it's necessary for
2136 input. This is still _very_ experimental, but it's necessary for
2131 efficient shell usage combining python looping syntax with system
2137 efficient shell usage combining python looping syntax with system
2132 calls. For now it's restricted to aliases, I don't think it
2138 calls. For now it's restricted to aliases, I don't think it
2133 really even makes sense to have this for magics.
2139 really even makes sense to have this for magics.
2134
2140
2135 2004-06-23 Fernando Perez <fperez@colorado.edu>
2141 2004-06-23 Fernando Perez <fperez@colorado.edu>
2136
2142
2137 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2143 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2138 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2144 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2139
2145
2140 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2146 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2141 extensions under Windows (after code sent by Gary Bishop). The
2147 extensions under Windows (after code sent by Gary Bishop). The
2142 extensions considered 'executable' are stored in IPython's rc
2148 extensions considered 'executable' are stored in IPython's rc
2143 structure as win_exec_ext.
2149 structure as win_exec_ext.
2144
2150
2145 * IPython/genutils.py (shell): new function, like system() but
2151 * IPython/genutils.py (shell): new function, like system() but
2146 without return value. Very useful for interactive shell work.
2152 without return value. Very useful for interactive shell work.
2147
2153
2148 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2154 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2149 delete aliases.
2155 delete aliases.
2150
2156
2151 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2157 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2152 sure that the alias table doesn't contain python keywords.
2158 sure that the alias table doesn't contain python keywords.
2153
2159
2154 2004-06-21 Fernando Perez <fperez@colorado.edu>
2160 2004-06-21 Fernando Perez <fperez@colorado.edu>
2155
2161
2156 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2162 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2157 non-existent items are found in $PATH. Reported by Thorsten.
2163 non-existent items are found in $PATH. Reported by Thorsten.
2158
2164
2159 2004-06-20 Fernando Perez <fperez@colorado.edu>
2165 2004-06-20 Fernando Perez <fperez@colorado.edu>
2160
2166
2161 * IPython/iplib.py (complete): modified the completer so that the
2167 * IPython/iplib.py (complete): modified the completer so that the
2162 order of priorities can be easily changed at runtime.
2168 order of priorities can be easily changed at runtime.
2163
2169
2164 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2170 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2165 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2171 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2166
2172
2167 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2173 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2168 expand Python variables prepended with $ in all system calls. The
2174 expand Python variables prepended with $ in all system calls. The
2169 same was done to InteractiveShell.handle_shell_escape. Now all
2175 same was done to InteractiveShell.handle_shell_escape. Now all
2170 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2176 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2171 expansion of python variables and expressions according to the
2177 expansion of python variables and expressions according to the
2172 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2178 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2173
2179
2174 Though PEP-215 has been rejected, a similar (but simpler) one
2180 Though PEP-215 has been rejected, a similar (but simpler) one
2175 seems like it will go into Python 2.4, PEP-292 -
2181 seems like it will go into Python 2.4, PEP-292 -
2176 http://www.python.org/peps/pep-0292.html.
2182 http://www.python.org/peps/pep-0292.html.
2177
2183
2178 I'll keep the full syntax of PEP-215, since IPython has since the
2184 I'll keep the full syntax of PEP-215, since IPython has since the
2179 start used Ka-Ping Yee's reference implementation discussed there
2185 start used Ka-Ping Yee's reference implementation discussed there
2180 (Itpl), and I actually like the powerful semantics it offers.
2186 (Itpl), and I actually like the powerful semantics it offers.
2181
2187
2182 In order to access normal shell variables, the $ has to be escaped
2188 In order to access normal shell variables, the $ has to be escaped
2183 via an extra $. For example:
2189 via an extra $. For example:
2184
2190
2185 In [7]: PATH='a python variable'
2191 In [7]: PATH='a python variable'
2186
2192
2187 In [8]: !echo $PATH
2193 In [8]: !echo $PATH
2188 a python variable
2194 a python variable
2189
2195
2190 In [9]: !echo $$PATH
2196 In [9]: !echo $$PATH
2191 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2197 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2192
2198
2193 (Magic.parse_options): escape $ so the shell doesn't evaluate
2199 (Magic.parse_options): escape $ so the shell doesn't evaluate
2194 things prematurely.
2200 things prematurely.
2195
2201
2196 * IPython/iplib.py (InteractiveShell.call_alias): added the
2202 * IPython/iplib.py (InteractiveShell.call_alias): added the
2197 ability for aliases to expand python variables via $.
2203 ability for aliases to expand python variables via $.
2198
2204
2199 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2205 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2200 system, now there's a @rehash/@rehashx pair of magics. These work
2206 system, now there's a @rehash/@rehashx pair of magics. These work
2201 like the csh rehash command, and can be invoked at any time. They
2207 like the csh rehash command, and can be invoked at any time. They
2202 build a table of aliases to everything in the user's $PATH
2208 build a table of aliases to everything in the user's $PATH
2203 (@rehash uses everything, @rehashx is slower but only adds
2209 (@rehash uses everything, @rehashx is slower but only adds
2204 executable files). With this, the pysh.py-based shell profile can
2210 executable files). With this, the pysh.py-based shell profile can
2205 now simply call rehash upon startup, and full access to all
2211 now simply call rehash upon startup, and full access to all
2206 programs in the user's path is obtained.
2212 programs in the user's path is obtained.
2207
2213
2208 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2214 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2209 functionality is now fully in place. I removed the old dynamic
2215 functionality is now fully in place. I removed the old dynamic
2210 code generation based approach, in favor of a much lighter one
2216 code generation based approach, in favor of a much lighter one
2211 based on a simple dict. The advantage is that this allows me to
2217 based on a simple dict. The advantage is that this allows me to
2212 now have thousands of aliases with negligible cost (unthinkable
2218 now have thousands of aliases with negligible cost (unthinkable
2213 with the old system).
2219 with the old system).
2214
2220
2215 2004-06-19 Fernando Perez <fperez@colorado.edu>
2221 2004-06-19 Fernando Perez <fperez@colorado.edu>
2216
2222
2217 * IPython/iplib.py (__init__): extended MagicCompleter class to
2223 * IPython/iplib.py (__init__): extended MagicCompleter class to
2218 also complete (last in priority) on user aliases.
2224 also complete (last in priority) on user aliases.
2219
2225
2220 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2226 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2221 call to eval.
2227 call to eval.
2222 (ItplNS.__init__): Added a new class which functions like Itpl,
2228 (ItplNS.__init__): Added a new class which functions like Itpl,
2223 but allows configuring the namespace for the evaluation to occur
2229 but allows configuring the namespace for the evaluation to occur
2224 in.
2230 in.
2225
2231
2226 2004-06-18 Fernando Perez <fperez@colorado.edu>
2232 2004-06-18 Fernando Perez <fperez@colorado.edu>
2227
2233
2228 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2234 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2229 better message when 'exit' or 'quit' are typed (a common newbie
2235 better message when 'exit' or 'quit' are typed (a common newbie
2230 confusion).
2236 confusion).
2231
2237
2232 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2238 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2233 check for Windows users.
2239 check for Windows users.
2234
2240
2235 * IPython/iplib.py (InteractiveShell.user_setup): removed
2241 * IPython/iplib.py (InteractiveShell.user_setup): removed
2236 disabling of colors for Windows. I'll test at runtime and issue a
2242 disabling of colors for Windows. I'll test at runtime and issue a
2237 warning if Gary's readline isn't found, as to nudge users to
2243 warning if Gary's readline isn't found, as to nudge users to
2238 download it.
2244 download it.
2239
2245
2240 2004-06-16 Fernando Perez <fperez@colorado.edu>
2246 2004-06-16 Fernando Perez <fperez@colorado.edu>
2241
2247
2242 * IPython/genutils.py (Stream.__init__): changed to print errors
2248 * IPython/genutils.py (Stream.__init__): changed to print errors
2243 to sys.stderr. I had a circular dependency here. Now it's
2249 to sys.stderr. I had a circular dependency here. Now it's
2244 possible to run ipython as IDLE's shell (consider this pre-alpha,
2250 possible to run ipython as IDLE's shell (consider this pre-alpha,
2245 since true stdout things end up in the starting terminal instead
2251 since true stdout things end up in the starting terminal instead
2246 of IDLE's out).
2252 of IDLE's out).
2247
2253
2248 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2254 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2249 users who haven't # updated their prompt_in2 definitions. Remove
2255 users who haven't # updated their prompt_in2 definitions. Remove
2250 eventually.
2256 eventually.
2251 (multiple_replace): added credit to original ASPN recipe.
2257 (multiple_replace): added credit to original ASPN recipe.
2252
2258
2253 2004-06-15 Fernando Perez <fperez@colorado.edu>
2259 2004-06-15 Fernando Perez <fperez@colorado.edu>
2254
2260
2255 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2261 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2256 list of auto-defined aliases.
2262 list of auto-defined aliases.
2257
2263
2258 2004-06-13 Fernando Perez <fperez@colorado.edu>
2264 2004-06-13 Fernando Perez <fperez@colorado.edu>
2259
2265
2260 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2266 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2261 install was really requested (so setup.py can be used for other
2267 install was really requested (so setup.py can be used for other
2262 things under Windows).
2268 things under Windows).
2263
2269
2264 2004-06-10 Fernando Perez <fperez@colorado.edu>
2270 2004-06-10 Fernando Perez <fperez@colorado.edu>
2265
2271
2266 * IPython/Logger.py (Logger.create_log): Manually remove any old
2272 * IPython/Logger.py (Logger.create_log): Manually remove any old
2267 backup, since os.remove may fail under Windows. Fixes bug
2273 backup, since os.remove may fail under Windows. Fixes bug
2268 reported by Thorsten.
2274 reported by Thorsten.
2269
2275
2270 2004-06-09 Fernando Perez <fperez@colorado.edu>
2276 2004-06-09 Fernando Perez <fperez@colorado.edu>
2271
2277
2272 * examples/example-embed.py: fixed all references to %n (replaced
2278 * examples/example-embed.py: fixed all references to %n (replaced
2273 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2279 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2274 for all examples and the manual as well.
2280 for all examples and the manual as well.
2275
2281
2276 2004-06-08 Fernando Perez <fperez@colorado.edu>
2282 2004-06-08 Fernando Perez <fperez@colorado.edu>
2277
2283
2278 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2284 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2279 alignment and color management. All 3 prompt subsystems now
2285 alignment and color management. All 3 prompt subsystems now
2280 inherit from BasePrompt.
2286 inherit from BasePrompt.
2281
2287
2282 * tools/release: updates for windows installer build and tag rpms
2288 * tools/release: updates for windows installer build and tag rpms
2283 with python version (since paths are fixed).
2289 with python version (since paths are fixed).
2284
2290
2285 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2291 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2286 which will become eventually obsolete. Also fixed the default
2292 which will become eventually obsolete. Also fixed the default
2287 prompt_in2 to use \D, so at least new users start with the correct
2293 prompt_in2 to use \D, so at least new users start with the correct
2288 defaults.
2294 defaults.
2289 WARNING: Users with existing ipythonrc files will need to apply
2295 WARNING: Users with existing ipythonrc files will need to apply
2290 this fix manually!
2296 this fix manually!
2291
2297
2292 * setup.py: make windows installer (.exe). This is finally the
2298 * setup.py: make windows installer (.exe). This is finally the
2293 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2299 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2294 which I hadn't included because it required Python 2.3 (or recent
2300 which I hadn't included because it required Python 2.3 (or recent
2295 distutils).
2301 distutils).
2296
2302
2297 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2303 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2298 usage of new '\D' escape.
2304 usage of new '\D' escape.
2299
2305
2300 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2306 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2301 lacks os.getuid())
2307 lacks os.getuid())
2302 (CachedOutput.set_colors): Added the ability to turn coloring
2308 (CachedOutput.set_colors): Added the ability to turn coloring
2303 on/off with @colors even for manually defined prompt colors. It
2309 on/off with @colors even for manually defined prompt colors. It
2304 uses a nasty global, but it works safely and via the generic color
2310 uses a nasty global, but it works safely and via the generic color
2305 handling mechanism.
2311 handling mechanism.
2306 (Prompt2.__init__): Introduced new escape '\D' for continuation
2312 (Prompt2.__init__): Introduced new escape '\D' for continuation
2307 prompts. It represents the counter ('\#') as dots.
2313 prompts. It represents the counter ('\#') as dots.
2308 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2314 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2309 need to update their ipythonrc files and replace '%n' with '\D' in
2315 need to update their ipythonrc files and replace '%n' with '\D' in
2310 their prompt_in2 settings everywhere. Sorry, but there's
2316 their prompt_in2 settings everywhere. Sorry, but there's
2311 otherwise no clean way to get all prompts to properly align. The
2317 otherwise no clean way to get all prompts to properly align. The
2312 ipythonrc shipped with IPython has been updated.
2318 ipythonrc shipped with IPython has been updated.
2313
2319
2314 2004-06-07 Fernando Perez <fperez@colorado.edu>
2320 2004-06-07 Fernando Perez <fperez@colorado.edu>
2315
2321
2316 * setup.py (isfile): Pass local_icons option to latex2html, so the
2322 * setup.py (isfile): Pass local_icons option to latex2html, so the
2317 resulting HTML file is self-contained. Thanks to
2323 resulting HTML file is self-contained. Thanks to
2318 dryice-AT-liu.com.cn for the tip.
2324 dryice-AT-liu.com.cn for the tip.
2319
2325
2320 * pysh.py: I created a new profile 'shell', which implements a
2326 * pysh.py: I created a new profile 'shell', which implements a
2321 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2327 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2322 system shell, nor will it become one anytime soon. It's mainly
2328 system shell, nor will it become one anytime soon. It's mainly
2323 meant to illustrate the use of the new flexible bash-like prompts.
2329 meant to illustrate the use of the new flexible bash-like prompts.
2324 I guess it could be used by hardy souls for true shell management,
2330 I guess it could be used by hardy souls for true shell management,
2325 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2331 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2326 profile. This uses the InterpreterExec extension provided by
2332 profile. This uses the InterpreterExec extension provided by
2327 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2333 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2328
2334
2329 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2335 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2330 auto-align itself with the length of the previous input prompt
2336 auto-align itself with the length of the previous input prompt
2331 (taking into account the invisible color escapes).
2337 (taking into account the invisible color escapes).
2332 (CachedOutput.__init__): Large restructuring of this class. Now
2338 (CachedOutput.__init__): Large restructuring of this class. Now
2333 all three prompts (primary1, primary2, output) are proper objects,
2339 all three prompts (primary1, primary2, output) are proper objects,
2334 managed by the 'parent' CachedOutput class. The code is still a
2340 managed by the 'parent' CachedOutput class. The code is still a
2335 bit hackish (all prompts share state via a pointer to the cache),
2341 bit hackish (all prompts share state via a pointer to the cache),
2336 but it's overall far cleaner than before.
2342 but it's overall far cleaner than before.
2337
2343
2338 * IPython/genutils.py (getoutputerror): modified to add verbose,
2344 * IPython/genutils.py (getoutputerror): modified to add verbose,
2339 debug and header options. This makes the interface of all getout*
2345 debug and header options. This makes the interface of all getout*
2340 functions uniform.
2346 functions uniform.
2341 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2347 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2342
2348
2343 * IPython/Magic.py (Magic.default_option): added a function to
2349 * IPython/Magic.py (Magic.default_option): added a function to
2344 allow registering default options for any magic command. This
2350 allow registering default options for any magic command. This
2345 makes it easy to have profiles which customize the magics globally
2351 makes it easy to have profiles which customize the magics globally
2346 for a certain use. The values set through this function are
2352 for a certain use. The values set through this function are
2347 picked up by the parse_options() method, which all magics should
2353 picked up by the parse_options() method, which all magics should
2348 use to parse their options.
2354 use to parse their options.
2349
2355
2350 * IPython/genutils.py (warn): modified the warnings framework to
2356 * IPython/genutils.py (warn): modified the warnings framework to
2351 use the Term I/O class. I'm trying to slowly unify all of
2357 use the Term I/O class. I'm trying to slowly unify all of
2352 IPython's I/O operations to pass through Term.
2358 IPython's I/O operations to pass through Term.
2353
2359
2354 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2360 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2355 the secondary prompt to correctly match the length of the primary
2361 the secondary prompt to correctly match the length of the primary
2356 one for any prompt. Now multi-line code will properly line up
2362 one for any prompt. Now multi-line code will properly line up
2357 even for path dependent prompts, such as the new ones available
2363 even for path dependent prompts, such as the new ones available
2358 via the prompt_specials.
2364 via the prompt_specials.
2359
2365
2360 2004-06-06 Fernando Perez <fperez@colorado.edu>
2366 2004-06-06 Fernando Perez <fperez@colorado.edu>
2361
2367
2362 * IPython/Prompts.py (prompt_specials): Added the ability to have
2368 * IPython/Prompts.py (prompt_specials): Added the ability to have
2363 bash-like special sequences in the prompts, which get
2369 bash-like special sequences in the prompts, which get
2364 automatically expanded. Things like hostname, current working
2370 automatically expanded. Things like hostname, current working
2365 directory and username are implemented already, but it's easy to
2371 directory and username are implemented already, but it's easy to
2366 add more in the future. Thanks to a patch by W.J. van der Laan
2372 add more in the future. Thanks to a patch by W.J. van der Laan
2367 <gnufnork-AT-hetdigitalegat.nl>
2373 <gnufnork-AT-hetdigitalegat.nl>
2368 (prompt_specials): Added color support for prompt strings, so
2374 (prompt_specials): Added color support for prompt strings, so
2369 users can define arbitrary color setups for their prompts.
2375 users can define arbitrary color setups for their prompts.
2370
2376
2371 2004-06-05 Fernando Perez <fperez@colorado.edu>
2377 2004-06-05 Fernando Perez <fperez@colorado.edu>
2372
2378
2373 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2379 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2374 code to load Gary Bishop's readline and configure it
2380 code to load Gary Bishop's readline and configure it
2375 automatically. Thanks to Gary for help on this.
2381 automatically. Thanks to Gary for help on this.
2376
2382
2377 2004-06-01 Fernando Perez <fperez@colorado.edu>
2383 2004-06-01 Fernando Perez <fperez@colorado.edu>
2378
2384
2379 * IPython/Logger.py (Logger.create_log): fix bug for logging
2385 * IPython/Logger.py (Logger.create_log): fix bug for logging
2380 with no filename (previous fix was incomplete).
2386 with no filename (previous fix was incomplete).
2381
2387
2382 2004-05-25 Fernando Perez <fperez@colorado.edu>
2388 2004-05-25 Fernando Perez <fperez@colorado.edu>
2383
2389
2384 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2390 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2385 parens would get passed to the shell.
2391 parens would get passed to the shell.
2386
2392
2387 2004-05-20 Fernando Perez <fperez@colorado.edu>
2393 2004-05-20 Fernando Perez <fperez@colorado.edu>
2388
2394
2389 * IPython/Magic.py (Magic.magic_prun): changed default profile
2395 * IPython/Magic.py (Magic.magic_prun): changed default profile
2390 sort order to 'time' (the more common profiling need).
2396 sort order to 'time' (the more common profiling need).
2391
2397
2392 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2398 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2393 so that source code shown is guaranteed in sync with the file on
2399 so that source code shown is guaranteed in sync with the file on
2394 disk (also changed in psource). Similar fix to the one for
2400 disk (also changed in psource). Similar fix to the one for
2395 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2401 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2396 <yann.ledu-AT-noos.fr>.
2402 <yann.ledu-AT-noos.fr>.
2397
2403
2398 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2404 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2399 with a single option would not be correctly parsed. Closes
2405 with a single option would not be correctly parsed. Closes
2400 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2406 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2401 introduced in 0.6.0 (on 2004-05-06).
2407 introduced in 0.6.0 (on 2004-05-06).
2402
2408
2403 2004-05-13 *** Released version 0.6.0
2409 2004-05-13 *** Released version 0.6.0
2404
2410
2405 2004-05-13 Fernando Perez <fperez@colorado.edu>
2411 2004-05-13 Fernando Perez <fperez@colorado.edu>
2406
2412
2407 * debian/: Added debian/ directory to CVS, so that debian support
2413 * debian/: Added debian/ directory to CVS, so that debian support
2408 is publicly accessible. The debian package is maintained by Jack
2414 is publicly accessible. The debian package is maintained by Jack
2409 Moffit <jack-AT-xiph.org>.
2415 Moffit <jack-AT-xiph.org>.
2410
2416
2411 * Documentation: included the notes about an ipython-based system
2417 * Documentation: included the notes about an ipython-based system
2412 shell (the hypothetical 'pysh') into the new_design.pdf document,
2418 shell (the hypothetical 'pysh') into the new_design.pdf document,
2413 so that these ideas get distributed to users along with the
2419 so that these ideas get distributed to users along with the
2414 official documentation.
2420 official documentation.
2415
2421
2416 2004-05-10 Fernando Perez <fperez@colorado.edu>
2422 2004-05-10 Fernando Perez <fperez@colorado.edu>
2417
2423
2418 * IPython/Logger.py (Logger.create_log): fix recently introduced
2424 * IPython/Logger.py (Logger.create_log): fix recently introduced
2419 bug (misindented line) where logstart would fail when not given an
2425 bug (misindented line) where logstart would fail when not given an
2420 explicit filename.
2426 explicit filename.
2421
2427
2422 2004-05-09 Fernando Perez <fperez@colorado.edu>
2428 2004-05-09 Fernando Perez <fperez@colorado.edu>
2423
2429
2424 * IPython/Magic.py (Magic.parse_options): skip system call when
2430 * IPython/Magic.py (Magic.parse_options): skip system call when
2425 there are no options to look for. Faster, cleaner for the common
2431 there are no options to look for. Faster, cleaner for the common
2426 case.
2432 case.
2427
2433
2428 * Documentation: many updates to the manual: describing Windows
2434 * Documentation: many updates to the manual: describing Windows
2429 support better, Gnuplot updates, credits, misc small stuff. Also
2435 support better, Gnuplot updates, credits, misc small stuff. Also
2430 updated the new_design doc a bit.
2436 updated the new_design doc a bit.
2431
2437
2432 2004-05-06 *** Released version 0.6.0.rc1
2438 2004-05-06 *** Released version 0.6.0.rc1
2433
2439
2434 2004-05-06 Fernando Perez <fperez@colorado.edu>
2440 2004-05-06 Fernando Perez <fperez@colorado.edu>
2435
2441
2436 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2442 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2437 operations to use the vastly more efficient list/''.join() method.
2443 operations to use the vastly more efficient list/''.join() method.
2438 (FormattedTB.text): Fix
2444 (FormattedTB.text): Fix
2439 http://www.scipy.net/roundup/ipython/issue12 - exception source
2445 http://www.scipy.net/roundup/ipython/issue12 - exception source
2440 extract not updated after reload. Thanks to Mike Salib
2446 extract not updated after reload. Thanks to Mike Salib
2441 <msalib-AT-mit.edu> for pinning the source of the problem.
2447 <msalib-AT-mit.edu> for pinning the source of the problem.
2442 Fortunately, the solution works inside ipython and doesn't require
2448 Fortunately, the solution works inside ipython and doesn't require
2443 any changes to python proper.
2449 any changes to python proper.
2444
2450
2445 * IPython/Magic.py (Magic.parse_options): Improved to process the
2451 * IPython/Magic.py (Magic.parse_options): Improved to process the
2446 argument list as a true shell would (by actually using the
2452 argument list as a true shell would (by actually using the
2447 underlying system shell). This way, all @magics automatically get
2453 underlying system shell). This way, all @magics automatically get
2448 shell expansion for variables. Thanks to a comment by Alex
2454 shell expansion for variables. Thanks to a comment by Alex
2449 Schmolck.
2455 Schmolck.
2450
2456
2451 2004-04-04 Fernando Perez <fperez@colorado.edu>
2457 2004-04-04 Fernando Perez <fperez@colorado.edu>
2452
2458
2453 * IPython/iplib.py (InteractiveShell.interact): Added a special
2459 * IPython/iplib.py (InteractiveShell.interact): Added a special
2454 trap for a debugger quit exception, which is basically impossible
2460 trap for a debugger quit exception, which is basically impossible
2455 to handle by normal mechanisms, given what pdb does to the stack.
2461 to handle by normal mechanisms, given what pdb does to the stack.
2456 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2462 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2457
2463
2458 2004-04-03 Fernando Perez <fperez@colorado.edu>
2464 2004-04-03 Fernando Perez <fperez@colorado.edu>
2459
2465
2460 * IPython/genutils.py (Term): Standardized the names of the Term
2466 * IPython/genutils.py (Term): Standardized the names of the Term
2461 class streams to cin/cout/cerr, following C++ naming conventions
2467 class streams to cin/cout/cerr, following C++ naming conventions
2462 (I can't use in/out/err because 'in' is not a valid attribute
2468 (I can't use in/out/err because 'in' is not a valid attribute
2463 name).
2469 name).
2464
2470
2465 * IPython/iplib.py (InteractiveShell.interact): don't increment
2471 * IPython/iplib.py (InteractiveShell.interact): don't increment
2466 the prompt if there's no user input. By Daniel 'Dang' Griffith
2472 the prompt if there's no user input. By Daniel 'Dang' Griffith
2467 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2473 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2468 Francois Pinard.
2474 Francois Pinard.
2469
2475
2470 2004-04-02 Fernando Perez <fperez@colorado.edu>
2476 2004-04-02 Fernando Perez <fperez@colorado.edu>
2471
2477
2472 * IPython/genutils.py (Stream.__init__): Modified to survive at
2478 * IPython/genutils.py (Stream.__init__): Modified to survive at
2473 least importing in contexts where stdin/out/err aren't true file
2479 least importing in contexts where stdin/out/err aren't true file
2474 objects, such as PyCrust (they lack fileno() and mode). However,
2480 objects, such as PyCrust (they lack fileno() and mode). However,
2475 the recovery facilities which rely on these things existing will
2481 the recovery facilities which rely on these things existing will
2476 not work.
2482 not work.
2477
2483
2478 2004-04-01 Fernando Perez <fperez@colorado.edu>
2484 2004-04-01 Fernando Perez <fperez@colorado.edu>
2479
2485
2480 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2486 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2481 use the new getoutputerror() function, so it properly
2487 use the new getoutputerror() function, so it properly
2482 distinguishes stdout/err.
2488 distinguishes stdout/err.
2483
2489
2484 * IPython/genutils.py (getoutputerror): added a function to
2490 * IPython/genutils.py (getoutputerror): added a function to
2485 capture separately the standard output and error of a command.
2491 capture separately the standard output and error of a command.
2486 After a comment from dang on the mailing lists. This code is
2492 After a comment from dang on the mailing lists. This code is
2487 basically a modified version of commands.getstatusoutput(), from
2493 basically a modified version of commands.getstatusoutput(), from
2488 the standard library.
2494 the standard library.
2489
2495
2490 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2496 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2491 '!!' as a special syntax (shorthand) to access @sx.
2497 '!!' as a special syntax (shorthand) to access @sx.
2492
2498
2493 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2499 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2494 command and return its output as a list split on '\n'.
2500 command and return its output as a list split on '\n'.
2495
2501
2496 2004-03-31 Fernando Perez <fperez@colorado.edu>
2502 2004-03-31 Fernando Perez <fperez@colorado.edu>
2497
2503
2498 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2504 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2499 method to dictionaries used as FakeModule instances if they lack
2505 method to dictionaries used as FakeModule instances if they lack
2500 it. At least pydoc in python2.3 breaks for runtime-defined
2506 it. At least pydoc in python2.3 breaks for runtime-defined
2501 functions without this hack. At some point I need to _really_
2507 functions without this hack. At some point I need to _really_
2502 understand what FakeModule is doing, because it's a gross hack.
2508 understand what FakeModule is doing, because it's a gross hack.
2503 But it solves Arnd's problem for now...
2509 But it solves Arnd's problem for now...
2504
2510
2505 2004-02-27 Fernando Perez <fperez@colorado.edu>
2511 2004-02-27 Fernando Perez <fperez@colorado.edu>
2506
2512
2507 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2513 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2508 mode would behave erratically. Also increased the number of
2514 mode would behave erratically. Also increased the number of
2509 possible logs in rotate mod to 999. Thanks to Rod Holland
2515 possible logs in rotate mod to 999. Thanks to Rod Holland
2510 <rhh@StructureLABS.com> for the report and fixes.
2516 <rhh@StructureLABS.com> for the report and fixes.
2511
2517
2512 2004-02-26 Fernando Perez <fperez@colorado.edu>
2518 2004-02-26 Fernando Perez <fperez@colorado.edu>
2513
2519
2514 * IPython/genutils.py (page): Check that the curses module really
2520 * IPython/genutils.py (page): Check that the curses module really
2515 has the initscr attribute before trying to use it. For some
2521 has the initscr attribute before trying to use it. For some
2516 reason, the Solaris curses module is missing this. I think this
2522 reason, the Solaris curses module is missing this. I think this
2517 should be considered a Solaris python bug, but I'm not sure.
2523 should be considered a Solaris python bug, but I'm not sure.
2518
2524
2519 2004-01-17 Fernando Perez <fperez@colorado.edu>
2525 2004-01-17 Fernando Perez <fperez@colorado.edu>
2520
2526
2521 * IPython/genutils.py (Stream.__init__): Changes to try to make
2527 * IPython/genutils.py (Stream.__init__): Changes to try to make
2522 ipython robust against stdin/out/err being closed by the user.
2528 ipython robust against stdin/out/err being closed by the user.
2523 This is 'user error' (and blocks a normal python session, at least
2529 This is 'user error' (and blocks a normal python session, at least
2524 the stdout case). However, Ipython should be able to survive such
2530 the stdout case). However, Ipython should be able to survive such
2525 instances of abuse as gracefully as possible. To simplify the
2531 instances of abuse as gracefully as possible. To simplify the
2526 coding and maintain compatibility with Gary Bishop's Term
2532 coding and maintain compatibility with Gary Bishop's Term
2527 contributions, I've made use of classmethods for this. I think
2533 contributions, I've made use of classmethods for this. I think
2528 this introduces a dependency on python 2.2.
2534 this introduces a dependency on python 2.2.
2529
2535
2530 2004-01-13 Fernando Perez <fperez@colorado.edu>
2536 2004-01-13 Fernando Perez <fperez@colorado.edu>
2531
2537
2532 * IPython/numutils.py (exp_safe): simplified the code a bit and
2538 * IPython/numutils.py (exp_safe): simplified the code a bit and
2533 removed the need for importing the kinds module altogether.
2539 removed the need for importing the kinds module altogether.
2534
2540
2535 2004-01-06 Fernando Perez <fperez@colorado.edu>
2541 2004-01-06 Fernando Perez <fperez@colorado.edu>
2536
2542
2537 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2543 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2538 a magic function instead, after some community feedback. No
2544 a magic function instead, after some community feedback. No
2539 special syntax will exist for it, but its name is deliberately
2545 special syntax will exist for it, but its name is deliberately
2540 very short.
2546 very short.
2541
2547
2542 2003-12-20 Fernando Perez <fperez@colorado.edu>
2548 2003-12-20 Fernando Perez <fperez@colorado.edu>
2543
2549
2544 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2550 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2545 new functionality, to automagically assign the result of a shell
2551 new functionality, to automagically assign the result of a shell
2546 command to a variable. I'll solicit some community feedback on
2552 command to a variable. I'll solicit some community feedback on
2547 this before making it permanent.
2553 this before making it permanent.
2548
2554
2549 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2555 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2550 requested about callables for which inspect couldn't obtain a
2556 requested about callables for which inspect couldn't obtain a
2551 proper argspec. Thanks to a crash report sent by Etienne
2557 proper argspec. Thanks to a crash report sent by Etienne
2552 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2558 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2553
2559
2554 2003-12-09 Fernando Perez <fperez@colorado.edu>
2560 2003-12-09 Fernando Perez <fperez@colorado.edu>
2555
2561
2556 * IPython/genutils.py (page): patch for the pager to work across
2562 * IPython/genutils.py (page): patch for the pager to work across
2557 various versions of Windows. By Gary Bishop.
2563 various versions of Windows. By Gary Bishop.
2558
2564
2559 2003-12-04 Fernando Perez <fperez@colorado.edu>
2565 2003-12-04 Fernando Perez <fperez@colorado.edu>
2560
2566
2561 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2567 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2562 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2568 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2563 While I tested this and it looks ok, there may still be corner
2569 While I tested this and it looks ok, there may still be corner
2564 cases I've missed.
2570 cases I've missed.
2565
2571
2566 2003-12-01 Fernando Perez <fperez@colorado.edu>
2572 2003-12-01 Fernando Perez <fperez@colorado.edu>
2567
2573
2568 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2574 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2569 where a line like 'p,q=1,2' would fail because the automagic
2575 where a line like 'p,q=1,2' would fail because the automagic
2570 system would be triggered for @p.
2576 system would be triggered for @p.
2571
2577
2572 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2578 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2573 cleanups, code unmodified.
2579 cleanups, code unmodified.
2574
2580
2575 * IPython/genutils.py (Term): added a class for IPython to handle
2581 * IPython/genutils.py (Term): added a class for IPython to handle
2576 output. In most cases it will just be a proxy for stdout/err, but
2582 output. In most cases it will just be a proxy for stdout/err, but
2577 having this allows modifications to be made for some platforms,
2583 having this allows modifications to be made for some platforms,
2578 such as handling color escapes under Windows. All of this code
2584 such as handling color escapes under Windows. All of this code
2579 was contributed by Gary Bishop, with minor modifications by me.
2585 was contributed by Gary Bishop, with minor modifications by me.
2580 The actual changes affect many files.
2586 The actual changes affect many files.
2581
2587
2582 2003-11-30 Fernando Perez <fperez@colorado.edu>
2588 2003-11-30 Fernando Perez <fperez@colorado.edu>
2583
2589
2584 * IPython/iplib.py (file_matches): new completion code, courtesy
2590 * IPython/iplib.py (file_matches): new completion code, courtesy
2585 of Jeff Collins. This enables filename completion again under
2591 of Jeff Collins. This enables filename completion again under
2586 python 2.3, which disabled it at the C level.
2592 python 2.3, which disabled it at the C level.
2587
2593
2588 2003-11-11 Fernando Perez <fperez@colorado.edu>
2594 2003-11-11 Fernando Perez <fperez@colorado.edu>
2589
2595
2590 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2596 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2591 for Numeric.array(map(...)), but often convenient.
2597 for Numeric.array(map(...)), but often convenient.
2592
2598
2593 2003-11-05 Fernando Perez <fperez@colorado.edu>
2599 2003-11-05 Fernando Perez <fperez@colorado.edu>
2594
2600
2595 * IPython/numutils.py (frange): Changed a call from int() to
2601 * IPython/numutils.py (frange): Changed a call from int() to
2596 int(round()) to prevent a problem reported with arange() in the
2602 int(round()) to prevent a problem reported with arange() in the
2597 numpy list.
2603 numpy list.
2598
2604
2599 2003-10-06 Fernando Perez <fperez@colorado.edu>
2605 2003-10-06 Fernando Perez <fperez@colorado.edu>
2600
2606
2601 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2607 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2602 prevent crashes if sys lacks an argv attribute (it happens with
2608 prevent crashes if sys lacks an argv attribute (it happens with
2603 embedded interpreters which build a bare-bones sys module).
2609 embedded interpreters which build a bare-bones sys module).
2604 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2610 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2605
2611
2606 2003-09-24 Fernando Perez <fperez@colorado.edu>
2612 2003-09-24 Fernando Perez <fperez@colorado.edu>
2607
2613
2608 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2614 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2609 to protect against poorly written user objects where __getattr__
2615 to protect against poorly written user objects where __getattr__
2610 raises exceptions other than AttributeError. Thanks to a bug
2616 raises exceptions other than AttributeError. Thanks to a bug
2611 report by Oliver Sander <osander-AT-gmx.de>.
2617 report by Oliver Sander <osander-AT-gmx.de>.
2612
2618
2613 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2619 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2614 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2620 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2615
2621
2616 2003-09-09 Fernando Perez <fperez@colorado.edu>
2622 2003-09-09 Fernando Perez <fperez@colorado.edu>
2617
2623
2618 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2624 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2619 unpacking a list whith a callable as first element would
2625 unpacking a list whith a callable as first element would
2620 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2626 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2621 Collins.
2627 Collins.
2622
2628
2623 2003-08-25 *** Released version 0.5.0
2629 2003-08-25 *** Released version 0.5.0
2624
2630
2625 2003-08-22 Fernando Perez <fperez@colorado.edu>
2631 2003-08-22 Fernando Perez <fperez@colorado.edu>
2626
2632
2627 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2633 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2628 improperly defined user exceptions. Thanks to feedback from Mark
2634 improperly defined user exceptions. Thanks to feedback from Mark
2629 Russell <mrussell-AT-verio.net>.
2635 Russell <mrussell-AT-verio.net>.
2630
2636
2631 2003-08-20 Fernando Perez <fperez@colorado.edu>
2637 2003-08-20 Fernando Perez <fperez@colorado.edu>
2632
2638
2633 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2639 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2634 printing so that it would print multi-line string forms starting
2640 printing so that it would print multi-line string forms starting
2635 with a new line. This way the formatting is better respected for
2641 with a new line. This way the formatting is better respected for
2636 objects which work hard to make nice string forms.
2642 objects which work hard to make nice string forms.
2637
2643
2638 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2644 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2639 autocall would overtake data access for objects with both
2645 autocall would overtake data access for objects with both
2640 __getitem__ and __call__.
2646 __getitem__ and __call__.
2641
2647
2642 2003-08-19 *** Released version 0.5.0-rc1
2648 2003-08-19 *** Released version 0.5.0-rc1
2643
2649
2644 2003-08-19 Fernando Perez <fperez@colorado.edu>
2650 2003-08-19 Fernando Perez <fperez@colorado.edu>
2645
2651
2646 * IPython/deep_reload.py (load_tail): single tiny change here
2652 * IPython/deep_reload.py (load_tail): single tiny change here
2647 seems to fix the long-standing bug of dreload() failing to work
2653 seems to fix the long-standing bug of dreload() failing to work
2648 for dotted names. But this module is pretty tricky, so I may have
2654 for dotted names. But this module is pretty tricky, so I may have
2649 missed some subtlety. Needs more testing!.
2655 missed some subtlety. Needs more testing!.
2650
2656
2651 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2657 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2652 exceptions which have badly implemented __str__ methods.
2658 exceptions which have badly implemented __str__ methods.
2653 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2659 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2654 which I've been getting reports about from Python 2.3 users. I
2660 which I've been getting reports about from Python 2.3 users. I
2655 wish I had a simple test case to reproduce the problem, so I could
2661 wish I had a simple test case to reproduce the problem, so I could
2656 either write a cleaner workaround or file a bug report if
2662 either write a cleaner workaround or file a bug report if
2657 necessary.
2663 necessary.
2658
2664
2659 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2665 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2660 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2666 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2661 a bug report by Tjabo Kloppenburg.
2667 a bug report by Tjabo Kloppenburg.
2662
2668
2663 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2669 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2664 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2670 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2665 seems rather unstable. Thanks to a bug report by Tjabo
2671 seems rather unstable. Thanks to a bug report by Tjabo
2666 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2672 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2667
2673
2668 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2674 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2669 this out soon because of the critical fixes in the inner loop for
2675 this out soon because of the critical fixes in the inner loop for
2670 generators.
2676 generators.
2671
2677
2672 * IPython/Magic.py (Magic.getargspec): removed. This (and
2678 * IPython/Magic.py (Magic.getargspec): removed. This (and
2673 _get_def) have been obsoleted by OInspect for a long time, I
2679 _get_def) have been obsoleted by OInspect for a long time, I
2674 hadn't noticed that they were dead code.
2680 hadn't noticed that they were dead code.
2675 (Magic._ofind): restored _ofind functionality for a few literals
2681 (Magic._ofind): restored _ofind functionality for a few literals
2676 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2682 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2677 for things like "hello".capitalize?, since that would require a
2683 for things like "hello".capitalize?, since that would require a
2678 potentially dangerous eval() again.
2684 potentially dangerous eval() again.
2679
2685
2680 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2686 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2681 logic a bit more to clean up the escapes handling and minimize the
2687 logic a bit more to clean up the escapes handling and minimize the
2682 use of _ofind to only necessary cases. The interactive 'feel' of
2688 use of _ofind to only necessary cases. The interactive 'feel' of
2683 IPython should have improved quite a bit with the changes in
2689 IPython should have improved quite a bit with the changes in
2684 _prefilter and _ofind (besides being far safer than before).
2690 _prefilter and _ofind (besides being far safer than before).
2685
2691
2686 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2692 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2687 obscure, never reported). Edit would fail to find the object to
2693 obscure, never reported). Edit would fail to find the object to
2688 edit under some circumstances.
2694 edit under some circumstances.
2689 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2695 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2690 which were causing double-calling of generators. Those eval calls
2696 which were causing double-calling of generators. Those eval calls
2691 were _very_ dangerous, since code with side effects could be
2697 were _very_ dangerous, since code with side effects could be
2692 triggered. As they say, 'eval is evil'... These were the
2698 triggered. As they say, 'eval is evil'... These were the
2693 nastiest evals in IPython. Besides, _ofind is now far simpler,
2699 nastiest evals in IPython. Besides, _ofind is now far simpler,
2694 and it should also be quite a bit faster. Its use of inspect is
2700 and it should also be quite a bit faster. Its use of inspect is
2695 also safer, so perhaps some of the inspect-related crashes I've
2701 also safer, so perhaps some of the inspect-related crashes I've
2696 seen lately with Python 2.3 might be taken care of. That will
2702 seen lately with Python 2.3 might be taken care of. That will
2697 need more testing.
2703 need more testing.
2698
2704
2699 2003-08-17 Fernando Perez <fperez@colorado.edu>
2705 2003-08-17 Fernando Perez <fperez@colorado.edu>
2700
2706
2701 * IPython/iplib.py (InteractiveShell._prefilter): significant
2707 * IPython/iplib.py (InteractiveShell._prefilter): significant
2702 simplifications to the logic for handling user escapes. Faster
2708 simplifications to the logic for handling user escapes. Faster
2703 and simpler code.
2709 and simpler code.
2704
2710
2705 2003-08-14 Fernando Perez <fperez@colorado.edu>
2711 2003-08-14 Fernando Perez <fperez@colorado.edu>
2706
2712
2707 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2713 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2708 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2714 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2709 but it should be quite a bit faster. And the recursive version
2715 but it should be quite a bit faster. And the recursive version
2710 generated O(log N) intermediate storage for all rank>1 arrays,
2716 generated O(log N) intermediate storage for all rank>1 arrays,
2711 even if they were contiguous.
2717 even if they were contiguous.
2712 (l1norm): Added this function.
2718 (l1norm): Added this function.
2713 (norm): Added this function for arbitrary norms (including
2719 (norm): Added this function for arbitrary norms (including
2714 l-infinity). l1 and l2 are still special cases for convenience
2720 l-infinity). l1 and l2 are still special cases for convenience
2715 and speed.
2721 and speed.
2716
2722
2717 2003-08-03 Fernando Perez <fperez@colorado.edu>
2723 2003-08-03 Fernando Perez <fperez@colorado.edu>
2718
2724
2719 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2725 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2720 exceptions, which now raise PendingDeprecationWarnings in Python
2726 exceptions, which now raise PendingDeprecationWarnings in Python
2721 2.3. There were some in Magic and some in Gnuplot2.
2727 2.3. There were some in Magic and some in Gnuplot2.
2722
2728
2723 2003-06-30 Fernando Perez <fperez@colorado.edu>
2729 2003-06-30 Fernando Perez <fperez@colorado.edu>
2724
2730
2725 * IPython/genutils.py (page): modified to call curses only for
2731 * IPython/genutils.py (page): modified to call curses only for
2726 terminals where TERM=='xterm'. After problems under many other
2732 terminals where TERM=='xterm'. After problems under many other
2727 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2733 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2728
2734
2729 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2735 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2730 would be triggered when readline was absent. This was just an old
2736 would be triggered when readline was absent. This was just an old
2731 debugging statement I'd forgotten to take out.
2737 debugging statement I'd forgotten to take out.
2732
2738
2733 2003-06-20 Fernando Perez <fperez@colorado.edu>
2739 2003-06-20 Fernando Perez <fperez@colorado.edu>
2734
2740
2735 * IPython/genutils.py (clock): modified to return only user time
2741 * IPython/genutils.py (clock): modified to return only user time
2736 (not counting system time), after a discussion on scipy. While
2742 (not counting system time), after a discussion on scipy. While
2737 system time may be a useful quantity occasionally, it may much
2743 system time may be a useful quantity occasionally, it may much
2738 more easily be skewed by occasional swapping or other similar
2744 more easily be skewed by occasional swapping or other similar
2739 activity.
2745 activity.
2740
2746
2741 2003-06-05 Fernando Perez <fperez@colorado.edu>
2747 2003-06-05 Fernando Perez <fperez@colorado.edu>
2742
2748
2743 * IPython/numutils.py (identity): new function, for building
2749 * IPython/numutils.py (identity): new function, for building
2744 arbitrary rank Kronecker deltas (mostly backwards compatible with
2750 arbitrary rank Kronecker deltas (mostly backwards compatible with
2745 Numeric.identity)
2751 Numeric.identity)
2746
2752
2747 2003-06-03 Fernando Perez <fperez@colorado.edu>
2753 2003-06-03 Fernando Perez <fperez@colorado.edu>
2748
2754
2749 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2755 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2750 arguments passed to magics with spaces, to allow trailing '\' to
2756 arguments passed to magics with spaces, to allow trailing '\' to
2751 work normally (mainly for Windows users).
2757 work normally (mainly for Windows users).
2752
2758
2753 2003-05-29 Fernando Perez <fperez@colorado.edu>
2759 2003-05-29 Fernando Perez <fperez@colorado.edu>
2754
2760
2755 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2761 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2756 instead of pydoc.help. This fixes a bizarre behavior where
2762 instead of pydoc.help. This fixes a bizarre behavior where
2757 printing '%s' % locals() would trigger the help system. Now
2763 printing '%s' % locals() would trigger the help system. Now
2758 ipython behaves like normal python does.
2764 ipython behaves like normal python does.
2759
2765
2760 Note that if one does 'from pydoc import help', the bizarre
2766 Note that if one does 'from pydoc import help', the bizarre
2761 behavior returns, but this will also happen in normal python, so
2767 behavior returns, but this will also happen in normal python, so
2762 it's not an ipython bug anymore (it has to do with how pydoc.help
2768 it's not an ipython bug anymore (it has to do with how pydoc.help
2763 is implemented).
2769 is implemented).
2764
2770
2765 2003-05-22 Fernando Perez <fperez@colorado.edu>
2771 2003-05-22 Fernando Perez <fperez@colorado.edu>
2766
2772
2767 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2773 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2768 return [] instead of None when nothing matches, also match to end
2774 return [] instead of None when nothing matches, also match to end
2769 of line. Patch by Gary Bishop.
2775 of line. Patch by Gary Bishop.
2770
2776
2771 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2777 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2772 protection as before, for files passed on the command line. This
2778 protection as before, for files passed on the command line. This
2773 prevents the CrashHandler from kicking in if user files call into
2779 prevents the CrashHandler from kicking in if user files call into
2774 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2780 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2775 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2781 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2776
2782
2777 2003-05-20 *** Released version 0.4.0
2783 2003-05-20 *** Released version 0.4.0
2778
2784
2779 2003-05-20 Fernando Perez <fperez@colorado.edu>
2785 2003-05-20 Fernando Perez <fperez@colorado.edu>
2780
2786
2781 * setup.py: added support for manpages. It's a bit hackish b/c of
2787 * setup.py: added support for manpages. It's a bit hackish b/c of
2782 a bug in the way the bdist_rpm distutils target handles gzipped
2788 a bug in the way the bdist_rpm distutils target handles gzipped
2783 manpages, but it works. After a patch by Jack.
2789 manpages, but it works. After a patch by Jack.
2784
2790
2785 2003-05-19 Fernando Perez <fperez@colorado.edu>
2791 2003-05-19 Fernando Perez <fperez@colorado.edu>
2786
2792
2787 * IPython/numutils.py: added a mockup of the kinds module, since
2793 * IPython/numutils.py: added a mockup of the kinds module, since
2788 it was recently removed from Numeric. This way, numutils will
2794 it was recently removed from Numeric. This way, numutils will
2789 work for all users even if they are missing kinds.
2795 work for all users even if they are missing kinds.
2790
2796
2791 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2797 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2792 failure, which can occur with SWIG-wrapped extensions. After a
2798 failure, which can occur with SWIG-wrapped extensions. After a
2793 crash report from Prabhu.
2799 crash report from Prabhu.
2794
2800
2795 2003-05-16 Fernando Perez <fperez@colorado.edu>
2801 2003-05-16 Fernando Perez <fperez@colorado.edu>
2796
2802
2797 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2803 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2798 protect ipython from user code which may call directly
2804 protect ipython from user code which may call directly
2799 sys.excepthook (this looks like an ipython crash to the user, even
2805 sys.excepthook (this looks like an ipython crash to the user, even
2800 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2806 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2801 This is especially important to help users of WxWindows, but may
2807 This is especially important to help users of WxWindows, but may
2802 also be useful in other cases.
2808 also be useful in other cases.
2803
2809
2804 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2810 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2805 an optional tb_offset to be specified, and to preserve exception
2811 an optional tb_offset to be specified, and to preserve exception
2806 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2812 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2807
2813
2808 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2814 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2809
2815
2810 2003-05-15 Fernando Perez <fperez@colorado.edu>
2816 2003-05-15 Fernando Perez <fperez@colorado.edu>
2811
2817
2812 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2818 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2813 installing for a new user under Windows.
2819 installing for a new user under Windows.
2814
2820
2815 2003-05-12 Fernando Perez <fperez@colorado.edu>
2821 2003-05-12 Fernando Perez <fperez@colorado.edu>
2816
2822
2817 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2823 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2818 handler for Emacs comint-based lines. Currently it doesn't do
2824 handler for Emacs comint-based lines. Currently it doesn't do
2819 much (but importantly, it doesn't update the history cache). In
2825 much (but importantly, it doesn't update the history cache). In
2820 the future it may be expanded if Alex needs more functionality
2826 the future it may be expanded if Alex needs more functionality
2821 there.
2827 there.
2822
2828
2823 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2829 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2824 info to crash reports.
2830 info to crash reports.
2825
2831
2826 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2832 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2827 just like Python's -c. Also fixed crash with invalid -color
2833 just like Python's -c. Also fixed crash with invalid -color
2828 option value at startup. Thanks to Will French
2834 option value at startup. Thanks to Will French
2829 <wfrench-AT-bestweb.net> for the bug report.
2835 <wfrench-AT-bestweb.net> for the bug report.
2830
2836
2831 2003-05-09 Fernando Perez <fperez@colorado.edu>
2837 2003-05-09 Fernando Perez <fperez@colorado.edu>
2832
2838
2833 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2839 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2834 to EvalDict (it's a mapping, after all) and simplified its code
2840 to EvalDict (it's a mapping, after all) and simplified its code
2835 quite a bit, after a nice discussion on c.l.py where Gustavo
2841 quite a bit, after a nice discussion on c.l.py where Gustavo
2836 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2842 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2837
2843
2838 2003-04-30 Fernando Perez <fperez@colorado.edu>
2844 2003-04-30 Fernando Perez <fperez@colorado.edu>
2839
2845
2840 * IPython/genutils.py (timings_out): modified it to reduce its
2846 * IPython/genutils.py (timings_out): modified it to reduce its
2841 overhead in the common reps==1 case.
2847 overhead in the common reps==1 case.
2842
2848
2843 2003-04-29 Fernando Perez <fperez@colorado.edu>
2849 2003-04-29 Fernando Perez <fperez@colorado.edu>
2844
2850
2845 * IPython/genutils.py (timings_out): Modified to use the resource
2851 * IPython/genutils.py (timings_out): Modified to use the resource
2846 module, which avoids the wraparound problems of time.clock().
2852 module, which avoids the wraparound problems of time.clock().
2847
2853
2848 2003-04-17 *** Released version 0.2.15pre4
2854 2003-04-17 *** Released version 0.2.15pre4
2849
2855
2850 2003-04-17 Fernando Perez <fperez@colorado.edu>
2856 2003-04-17 Fernando Perez <fperez@colorado.edu>
2851
2857
2852 * setup.py (scriptfiles): Split windows-specific stuff over to a
2858 * setup.py (scriptfiles): Split windows-specific stuff over to a
2853 separate file, in an attempt to have a Windows GUI installer.
2859 separate file, in an attempt to have a Windows GUI installer.
2854 That didn't work, but part of the groundwork is done.
2860 That didn't work, but part of the groundwork is done.
2855
2861
2856 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2862 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2857 indent/unindent with 4 spaces. Particularly useful in combination
2863 indent/unindent with 4 spaces. Particularly useful in combination
2858 with the new auto-indent option.
2864 with the new auto-indent option.
2859
2865
2860 2003-04-16 Fernando Perez <fperez@colorado.edu>
2866 2003-04-16 Fernando Perez <fperez@colorado.edu>
2861
2867
2862 * IPython/Magic.py: various replacements of self.rc for
2868 * IPython/Magic.py: various replacements of self.rc for
2863 self.shell.rc. A lot more remains to be done to fully disentangle
2869 self.shell.rc. A lot more remains to be done to fully disentangle
2864 this class from the main Shell class.
2870 this class from the main Shell class.
2865
2871
2866 * IPython/GnuplotRuntime.py: added checks for mouse support so
2872 * IPython/GnuplotRuntime.py: added checks for mouse support so
2867 that we don't try to enable it if the current gnuplot doesn't
2873 that we don't try to enable it if the current gnuplot doesn't
2868 really support it. Also added checks so that we don't try to
2874 really support it. Also added checks so that we don't try to
2869 enable persist under Windows (where Gnuplot doesn't recognize the
2875 enable persist under Windows (where Gnuplot doesn't recognize the
2870 option).
2876 option).
2871
2877
2872 * IPython/iplib.py (InteractiveShell.interact): Added optional
2878 * IPython/iplib.py (InteractiveShell.interact): Added optional
2873 auto-indenting code, after a patch by King C. Shu
2879 auto-indenting code, after a patch by King C. Shu
2874 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2880 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2875 get along well with pasting indented code. If I ever figure out
2881 get along well with pasting indented code. If I ever figure out
2876 how to make that part go well, it will become on by default.
2882 how to make that part go well, it will become on by default.
2877
2883
2878 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2884 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2879 crash ipython if there was an unmatched '%' in the user's prompt
2885 crash ipython if there was an unmatched '%' in the user's prompt
2880 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2886 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2881
2887
2882 * IPython/iplib.py (InteractiveShell.interact): removed the
2888 * IPython/iplib.py (InteractiveShell.interact): removed the
2883 ability to ask the user whether he wants to crash or not at the
2889 ability to ask the user whether he wants to crash or not at the
2884 'last line' exception handler. Calling functions at that point
2890 'last line' exception handler. Calling functions at that point
2885 changes the stack, and the error reports would have incorrect
2891 changes the stack, and the error reports would have incorrect
2886 tracebacks.
2892 tracebacks.
2887
2893
2888 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2894 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2889 pass through a peger a pretty-printed form of any object. After a
2895 pass through a peger a pretty-printed form of any object. After a
2890 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2896 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2891
2897
2892 2003-04-14 Fernando Perez <fperez@colorado.edu>
2898 2003-04-14 Fernando Perez <fperez@colorado.edu>
2893
2899
2894 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2900 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2895 all files in ~ would be modified at first install (instead of
2901 all files in ~ would be modified at first install (instead of
2896 ~/.ipython). This could be potentially disastrous, as the
2902 ~/.ipython). This could be potentially disastrous, as the
2897 modification (make line-endings native) could damage binary files.
2903 modification (make line-endings native) could damage binary files.
2898
2904
2899 2003-04-10 Fernando Perez <fperez@colorado.edu>
2905 2003-04-10 Fernando Perez <fperez@colorado.edu>
2900
2906
2901 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2907 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2902 handle only lines which are invalid python. This now means that
2908 handle only lines which are invalid python. This now means that
2903 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2909 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2904 for the bug report.
2910 for the bug report.
2905
2911
2906 2003-04-01 Fernando Perez <fperez@colorado.edu>
2912 2003-04-01 Fernando Perez <fperez@colorado.edu>
2907
2913
2908 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2914 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2909 where failing to set sys.last_traceback would crash pdb.pm().
2915 where failing to set sys.last_traceback would crash pdb.pm().
2910 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2916 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2911 report.
2917 report.
2912
2918
2913 2003-03-25 Fernando Perez <fperez@colorado.edu>
2919 2003-03-25 Fernando Perez <fperez@colorado.edu>
2914
2920
2915 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2921 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2916 before printing it (it had a lot of spurious blank lines at the
2922 before printing it (it had a lot of spurious blank lines at the
2917 end).
2923 end).
2918
2924
2919 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2925 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2920 output would be sent 21 times! Obviously people don't use this
2926 output would be sent 21 times! Obviously people don't use this
2921 too often, or I would have heard about it.
2927 too often, or I would have heard about it.
2922
2928
2923 2003-03-24 Fernando Perez <fperez@colorado.edu>
2929 2003-03-24 Fernando Perez <fperez@colorado.edu>
2924
2930
2925 * setup.py (scriptfiles): renamed the data_files parameter from
2931 * setup.py (scriptfiles): renamed the data_files parameter from
2926 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2932 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2927 for the patch.
2933 for the patch.
2928
2934
2929 2003-03-20 Fernando Perez <fperez@colorado.edu>
2935 2003-03-20 Fernando Perez <fperez@colorado.edu>
2930
2936
2931 * IPython/genutils.py (error): added error() and fatal()
2937 * IPython/genutils.py (error): added error() and fatal()
2932 functions.
2938 functions.
2933
2939
2934 2003-03-18 *** Released version 0.2.15pre3
2940 2003-03-18 *** Released version 0.2.15pre3
2935
2941
2936 2003-03-18 Fernando Perez <fperez@colorado.edu>
2942 2003-03-18 Fernando Perez <fperez@colorado.edu>
2937
2943
2938 * setupext/install_data_ext.py
2944 * setupext/install_data_ext.py
2939 (install_data_ext.initialize_options): Class contributed by Jack
2945 (install_data_ext.initialize_options): Class contributed by Jack
2940 Moffit for fixing the old distutils hack. He is sending this to
2946 Moffit for fixing the old distutils hack. He is sending this to
2941 the distutils folks so in the future we may not need it as a
2947 the distutils folks so in the future we may not need it as a
2942 private fix.
2948 private fix.
2943
2949
2944 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2950 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2945 changes for Debian packaging. See his patch for full details.
2951 changes for Debian packaging. See his patch for full details.
2946 The old distutils hack of making the ipythonrc* files carry a
2952 The old distutils hack of making the ipythonrc* files carry a
2947 bogus .py extension is gone, at last. Examples were moved to a
2953 bogus .py extension is gone, at last. Examples were moved to a
2948 separate subdir under doc/, and the separate executable scripts
2954 separate subdir under doc/, and the separate executable scripts
2949 now live in their own directory. Overall a great cleanup. The
2955 now live in their own directory. Overall a great cleanup. The
2950 manual was updated to use the new files, and setup.py has been
2956 manual was updated to use the new files, and setup.py has been
2951 fixed for this setup.
2957 fixed for this setup.
2952
2958
2953 * IPython/PyColorize.py (Parser.usage): made non-executable and
2959 * IPython/PyColorize.py (Parser.usage): made non-executable and
2954 created a pycolor wrapper around it to be included as a script.
2960 created a pycolor wrapper around it to be included as a script.
2955
2961
2956 2003-03-12 *** Released version 0.2.15pre2
2962 2003-03-12 *** Released version 0.2.15pre2
2957
2963
2958 2003-03-12 Fernando Perez <fperez@colorado.edu>
2964 2003-03-12 Fernando Perez <fperez@colorado.edu>
2959
2965
2960 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2966 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2961 long-standing problem with garbage characters in some terminals.
2967 long-standing problem with garbage characters in some terminals.
2962 The issue was really that the \001 and \002 escapes must _only_ be
2968 The issue was really that the \001 and \002 escapes must _only_ be
2963 passed to input prompts (which call readline), but _never_ to
2969 passed to input prompts (which call readline), but _never_ to
2964 normal text to be printed on screen. I changed ColorANSI to have
2970 normal text to be printed on screen. I changed ColorANSI to have
2965 two classes: TermColors and InputTermColors, each with the
2971 two classes: TermColors and InputTermColors, each with the
2966 appropriate escapes for input prompts or normal text. The code in
2972 appropriate escapes for input prompts or normal text. The code in
2967 Prompts.py got slightly more complicated, but this very old and
2973 Prompts.py got slightly more complicated, but this very old and
2968 annoying bug is finally fixed.
2974 annoying bug is finally fixed.
2969
2975
2970 All the credit for nailing down the real origin of this problem
2976 All the credit for nailing down the real origin of this problem
2971 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2977 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2972 *Many* thanks to him for spending quite a bit of effort on this.
2978 *Many* thanks to him for spending quite a bit of effort on this.
2973
2979
2974 2003-03-05 *** Released version 0.2.15pre1
2980 2003-03-05 *** Released version 0.2.15pre1
2975
2981
2976 2003-03-03 Fernando Perez <fperez@colorado.edu>
2982 2003-03-03 Fernando Perez <fperez@colorado.edu>
2977
2983
2978 * IPython/FakeModule.py: Moved the former _FakeModule to a
2984 * IPython/FakeModule.py: Moved the former _FakeModule to a
2979 separate file, because it's also needed by Magic (to fix a similar
2985 separate file, because it's also needed by Magic (to fix a similar
2980 pickle-related issue in @run).
2986 pickle-related issue in @run).
2981
2987
2982 2003-03-02 Fernando Perez <fperez@colorado.edu>
2988 2003-03-02 Fernando Perez <fperez@colorado.edu>
2983
2989
2984 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2990 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2985 the autocall option at runtime.
2991 the autocall option at runtime.
2986 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2992 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2987 across Magic.py to start separating Magic from InteractiveShell.
2993 across Magic.py to start separating Magic from InteractiveShell.
2988 (Magic._ofind): Fixed to return proper namespace for dotted
2994 (Magic._ofind): Fixed to return proper namespace for dotted
2989 names. Before, a dotted name would always return 'not currently
2995 names. Before, a dotted name would always return 'not currently
2990 defined', because it would find the 'parent'. s.x would be found,
2996 defined', because it would find the 'parent'. s.x would be found,
2991 but since 'x' isn't defined by itself, it would get confused.
2997 but since 'x' isn't defined by itself, it would get confused.
2992 (Magic.magic_run): Fixed pickling problems reported by Ralf
2998 (Magic.magic_run): Fixed pickling problems reported by Ralf
2993 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2999 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2994 that I'd used when Mike Heeter reported similar issues at the
3000 that I'd used when Mike Heeter reported similar issues at the
2995 top-level, but now for @run. It boils down to injecting the
3001 top-level, but now for @run. It boils down to injecting the
2996 namespace where code is being executed with something that looks
3002 namespace where code is being executed with something that looks
2997 enough like a module to fool pickle.dump(). Since a pickle stores
3003 enough like a module to fool pickle.dump(). Since a pickle stores
2998 a named reference to the importing module, we need this for
3004 a named reference to the importing module, we need this for
2999 pickles to save something sensible.
3005 pickles to save something sensible.
3000
3006
3001 * IPython/ipmaker.py (make_IPython): added an autocall option.
3007 * IPython/ipmaker.py (make_IPython): added an autocall option.
3002
3008
3003 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3009 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3004 the auto-eval code. Now autocalling is an option, and the code is
3010 the auto-eval code. Now autocalling is an option, and the code is
3005 also vastly safer. There is no more eval() involved at all.
3011 also vastly safer. There is no more eval() involved at all.
3006
3012
3007 2003-03-01 Fernando Perez <fperez@colorado.edu>
3013 2003-03-01 Fernando Perez <fperez@colorado.edu>
3008
3014
3009 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3015 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3010 dict with named keys instead of a tuple.
3016 dict with named keys instead of a tuple.
3011
3017
3012 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3018 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3013
3019
3014 * setup.py (make_shortcut): Fixed message about directories
3020 * setup.py (make_shortcut): Fixed message about directories
3015 created during Windows installation (the directories were ok, just
3021 created during Windows installation (the directories were ok, just
3016 the printed message was misleading). Thanks to Chris Liechti
3022 the printed message was misleading). Thanks to Chris Liechti
3017 <cliechti-AT-gmx.net> for the heads up.
3023 <cliechti-AT-gmx.net> for the heads up.
3018
3024
3019 2003-02-21 Fernando Perez <fperez@colorado.edu>
3025 2003-02-21 Fernando Perez <fperez@colorado.edu>
3020
3026
3021 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3027 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3022 of ValueError exception when checking for auto-execution. This
3028 of ValueError exception when checking for auto-execution. This
3023 one is raised by things like Numeric arrays arr.flat when the
3029 one is raised by things like Numeric arrays arr.flat when the
3024 array is non-contiguous.
3030 array is non-contiguous.
3025
3031
3026 2003-01-31 Fernando Perez <fperez@colorado.edu>
3032 2003-01-31 Fernando Perez <fperez@colorado.edu>
3027
3033
3028 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3034 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3029 not return any value at all (even though the command would get
3035 not return any value at all (even though the command would get
3030 executed).
3036 executed).
3031 (xsys): Flush stdout right after printing the command to ensure
3037 (xsys): Flush stdout right after printing the command to ensure
3032 proper ordering of commands and command output in the total
3038 proper ordering of commands and command output in the total
3033 output.
3039 output.
3034 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3040 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3035 system/getoutput as defaults. The old ones are kept for
3041 system/getoutput as defaults. The old ones are kept for
3036 compatibility reasons, so no code which uses this library needs
3042 compatibility reasons, so no code which uses this library needs
3037 changing.
3043 changing.
3038
3044
3039 2003-01-27 *** Released version 0.2.14
3045 2003-01-27 *** Released version 0.2.14
3040
3046
3041 2003-01-25 Fernando Perez <fperez@colorado.edu>
3047 2003-01-25 Fernando Perez <fperez@colorado.edu>
3042
3048
3043 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3049 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3044 functions defined in previous edit sessions could not be re-edited
3050 functions defined in previous edit sessions could not be re-edited
3045 (because the temp files were immediately removed). Now temp files
3051 (because the temp files were immediately removed). Now temp files
3046 are removed only at IPython's exit.
3052 are removed only at IPython's exit.
3047 (Magic.magic_run): Improved @run to perform shell-like expansions
3053 (Magic.magic_run): Improved @run to perform shell-like expansions
3048 on its arguments (~users and $VARS). With this, @run becomes more
3054 on its arguments (~users and $VARS). With this, @run becomes more
3049 like a normal command-line.
3055 like a normal command-line.
3050
3056
3051 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3057 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3052 bugs related to embedding and cleaned up that code. A fairly
3058 bugs related to embedding and cleaned up that code. A fairly
3053 important one was the impossibility to access the global namespace
3059 important one was the impossibility to access the global namespace
3054 through the embedded IPython (only local variables were visible).
3060 through the embedded IPython (only local variables were visible).
3055
3061
3056 2003-01-14 Fernando Perez <fperez@colorado.edu>
3062 2003-01-14 Fernando Perez <fperez@colorado.edu>
3057
3063
3058 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3064 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3059 auto-calling to be a bit more conservative. Now it doesn't get
3065 auto-calling to be a bit more conservative. Now it doesn't get
3060 triggered if any of '!=()<>' are in the rest of the input line, to
3066 triggered if any of '!=()<>' are in the rest of the input line, to
3061 allow comparing callables. Thanks to Alex for the heads up.
3067 allow comparing callables. Thanks to Alex for the heads up.
3062
3068
3063 2003-01-07 Fernando Perez <fperez@colorado.edu>
3069 2003-01-07 Fernando Perez <fperez@colorado.edu>
3064
3070
3065 * IPython/genutils.py (page): fixed estimation of the number of
3071 * IPython/genutils.py (page): fixed estimation of the number of
3066 lines in a string to be paged to simply count newlines. This
3072 lines in a string to be paged to simply count newlines. This
3067 prevents over-guessing due to embedded escape sequences. A better
3073 prevents over-guessing due to embedded escape sequences. A better
3068 long-term solution would involve stripping out the control chars
3074 long-term solution would involve stripping out the control chars
3069 for the count, but it's potentially so expensive I just don't
3075 for the count, but it's potentially so expensive I just don't
3070 think it's worth doing.
3076 think it's worth doing.
3071
3077
3072 2002-12-19 *** Released version 0.2.14pre50
3078 2002-12-19 *** Released version 0.2.14pre50
3073
3079
3074 2002-12-19 Fernando Perez <fperez@colorado.edu>
3080 2002-12-19 Fernando Perez <fperez@colorado.edu>
3075
3081
3076 * tools/release (version): Changed release scripts to inform
3082 * tools/release (version): Changed release scripts to inform
3077 Andrea and build a NEWS file with a list of recent changes.
3083 Andrea and build a NEWS file with a list of recent changes.
3078
3084
3079 * IPython/ColorANSI.py (__all__): changed terminal detection
3085 * IPython/ColorANSI.py (__all__): changed terminal detection
3080 code. Seems to work better for xterms without breaking
3086 code. Seems to work better for xterms without breaking
3081 konsole. Will need more testing to determine if WinXP and Mac OSX
3087 konsole. Will need more testing to determine if WinXP and Mac OSX
3082 also work ok.
3088 also work ok.
3083
3089
3084 2002-12-18 *** Released version 0.2.14pre49
3090 2002-12-18 *** Released version 0.2.14pre49
3085
3091
3086 2002-12-18 Fernando Perez <fperez@colorado.edu>
3092 2002-12-18 Fernando Perez <fperez@colorado.edu>
3087
3093
3088 * Docs: added new info about Mac OSX, from Andrea.
3094 * Docs: added new info about Mac OSX, from Andrea.
3089
3095
3090 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3096 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3091 allow direct plotting of python strings whose format is the same
3097 allow direct plotting of python strings whose format is the same
3092 of gnuplot data files.
3098 of gnuplot data files.
3093
3099
3094 2002-12-16 Fernando Perez <fperez@colorado.edu>
3100 2002-12-16 Fernando Perez <fperez@colorado.edu>
3095
3101
3096 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3102 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3097 value of exit question to be acknowledged.
3103 value of exit question to be acknowledged.
3098
3104
3099 2002-12-03 Fernando Perez <fperez@colorado.edu>
3105 2002-12-03 Fernando Perez <fperez@colorado.edu>
3100
3106
3101 * IPython/ipmaker.py: removed generators, which had been added
3107 * IPython/ipmaker.py: removed generators, which had been added
3102 by mistake in an earlier debugging run. This was causing trouble
3108 by mistake in an earlier debugging run. This was causing trouble
3103 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3109 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3104 for pointing this out.
3110 for pointing this out.
3105
3111
3106 2002-11-17 Fernando Perez <fperez@colorado.edu>
3112 2002-11-17 Fernando Perez <fperez@colorado.edu>
3107
3113
3108 * Manual: updated the Gnuplot section.
3114 * Manual: updated the Gnuplot section.
3109
3115
3110 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3116 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3111 a much better split of what goes in Runtime and what goes in
3117 a much better split of what goes in Runtime and what goes in
3112 Interactive.
3118 Interactive.
3113
3119
3114 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3120 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3115 being imported from iplib.
3121 being imported from iplib.
3116
3122
3117 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3123 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3118 for command-passing. Now the global Gnuplot instance is called
3124 for command-passing. Now the global Gnuplot instance is called
3119 'gp' instead of 'g', which was really a far too fragile and
3125 'gp' instead of 'g', which was really a far too fragile and
3120 common name.
3126 common name.
3121
3127
3122 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3128 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3123 bounding boxes generated by Gnuplot for square plots.
3129 bounding boxes generated by Gnuplot for square plots.
3124
3130
3125 * IPython/genutils.py (popkey): new function added. I should
3131 * IPython/genutils.py (popkey): new function added. I should
3126 suggest this on c.l.py as a dict method, it seems useful.
3132 suggest this on c.l.py as a dict method, it seems useful.
3127
3133
3128 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3134 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3129 to transparently handle PostScript generation. MUCH better than
3135 to transparently handle PostScript generation. MUCH better than
3130 the previous plot_eps/replot_eps (which I removed now). The code
3136 the previous plot_eps/replot_eps (which I removed now). The code
3131 is also fairly clean and well documented now (including
3137 is also fairly clean and well documented now (including
3132 docstrings).
3138 docstrings).
3133
3139
3134 2002-11-13 Fernando Perez <fperez@colorado.edu>
3140 2002-11-13 Fernando Perez <fperez@colorado.edu>
3135
3141
3136 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3142 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3137 (inconsistent with options).
3143 (inconsistent with options).
3138
3144
3139 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3145 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3140 manually disabled, I don't know why. Fixed it.
3146 manually disabled, I don't know why. Fixed it.
3141 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3147 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3142 eps output.
3148 eps output.
3143
3149
3144 2002-11-12 Fernando Perez <fperez@colorado.edu>
3150 2002-11-12 Fernando Perez <fperez@colorado.edu>
3145
3151
3146 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3152 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3147 don't propagate up to caller. Fixes crash reported by François
3153 don't propagate up to caller. Fixes crash reported by François
3148 Pinard.
3154 Pinard.
3149
3155
3150 2002-11-09 Fernando Perez <fperez@colorado.edu>
3156 2002-11-09 Fernando Perez <fperez@colorado.edu>
3151
3157
3152 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3158 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3153 history file for new users.
3159 history file for new users.
3154 (make_IPython): fixed bug where initial install would leave the
3160 (make_IPython): fixed bug where initial install would leave the
3155 user running in the .ipython dir.
3161 user running in the .ipython dir.
3156 (make_IPython): fixed bug where config dir .ipython would be
3162 (make_IPython): fixed bug where config dir .ipython would be
3157 created regardless of the given -ipythondir option. Thanks to Cory
3163 created regardless of the given -ipythondir option. Thanks to Cory
3158 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3164 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3159
3165
3160 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3166 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3161 type confirmations. Will need to use it in all of IPython's code
3167 type confirmations. Will need to use it in all of IPython's code
3162 consistently.
3168 consistently.
3163
3169
3164 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3170 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3165 context to print 31 lines instead of the default 5. This will make
3171 context to print 31 lines instead of the default 5. This will make
3166 the crash reports extremely detailed in case the problem is in
3172 the crash reports extremely detailed in case the problem is in
3167 libraries I don't have access to.
3173 libraries I don't have access to.
3168
3174
3169 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3175 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3170 line of defense' code to still crash, but giving users fair
3176 line of defense' code to still crash, but giving users fair
3171 warning. I don't want internal errors to go unreported: if there's
3177 warning. I don't want internal errors to go unreported: if there's
3172 an internal problem, IPython should crash and generate a full
3178 an internal problem, IPython should crash and generate a full
3173 report.
3179 report.
3174
3180
3175 2002-11-08 Fernando Perez <fperez@colorado.edu>
3181 2002-11-08 Fernando Perez <fperez@colorado.edu>
3176
3182
3177 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3183 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3178 otherwise uncaught exceptions which can appear if people set
3184 otherwise uncaught exceptions which can appear if people set
3179 sys.stdout to something badly broken. Thanks to a crash report
3185 sys.stdout to something badly broken. Thanks to a crash report
3180 from henni-AT-mail.brainbot.com.
3186 from henni-AT-mail.brainbot.com.
3181
3187
3182 2002-11-04 Fernando Perez <fperez@colorado.edu>
3188 2002-11-04 Fernando Perez <fperez@colorado.edu>
3183
3189
3184 * IPython/iplib.py (InteractiveShell.interact): added
3190 * IPython/iplib.py (InteractiveShell.interact): added
3185 __IPYTHON__active to the builtins. It's a flag which goes on when
3191 __IPYTHON__active to the builtins. It's a flag which goes on when
3186 the interaction starts and goes off again when it stops. This
3192 the interaction starts and goes off again when it stops. This
3187 allows embedding code to detect being inside IPython. Before this
3193 allows embedding code to detect being inside IPython. Before this
3188 was done via __IPYTHON__, but that only shows that an IPython
3194 was done via __IPYTHON__, but that only shows that an IPython
3189 instance has been created.
3195 instance has been created.
3190
3196
3191 * IPython/Magic.py (Magic.magic_env): I realized that in a
3197 * IPython/Magic.py (Magic.magic_env): I realized that in a
3192 UserDict, instance.data holds the data as a normal dict. So I
3198 UserDict, instance.data holds the data as a normal dict. So I
3193 modified @env to return os.environ.data instead of rebuilding a
3199 modified @env to return os.environ.data instead of rebuilding a
3194 dict by hand.
3200 dict by hand.
3195
3201
3196 2002-11-02 Fernando Perez <fperez@colorado.edu>
3202 2002-11-02 Fernando Perez <fperez@colorado.edu>
3197
3203
3198 * IPython/genutils.py (warn): changed so that level 1 prints no
3204 * IPython/genutils.py (warn): changed so that level 1 prints no
3199 header. Level 2 is now the default (with 'WARNING' header, as
3205 header. Level 2 is now the default (with 'WARNING' header, as
3200 before). I think I tracked all places where changes were needed in
3206 before). I think I tracked all places where changes were needed in
3201 IPython, but outside code using the old level numbering may have
3207 IPython, but outside code using the old level numbering may have
3202 broken.
3208 broken.
3203
3209
3204 * IPython/iplib.py (InteractiveShell.runcode): added this to
3210 * IPython/iplib.py (InteractiveShell.runcode): added this to
3205 handle the tracebacks in SystemExit traps correctly. The previous
3211 handle the tracebacks in SystemExit traps correctly. The previous
3206 code (through interact) was printing more of the stack than
3212 code (through interact) was printing more of the stack than
3207 necessary, showing IPython internal code to the user.
3213 necessary, showing IPython internal code to the user.
3208
3214
3209 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3215 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3210 default. Now that the default at the confirmation prompt is yes,
3216 default. Now that the default at the confirmation prompt is yes,
3211 it's not so intrusive. François' argument that ipython sessions
3217 it's not so intrusive. François' argument that ipython sessions
3212 tend to be complex enough not to lose them from an accidental C-d,
3218 tend to be complex enough not to lose them from an accidental C-d,
3213 is a valid one.
3219 is a valid one.
3214
3220
3215 * IPython/iplib.py (InteractiveShell.interact): added a
3221 * IPython/iplib.py (InteractiveShell.interact): added a
3216 showtraceback() call to the SystemExit trap, and modified the exit
3222 showtraceback() call to the SystemExit trap, and modified the exit
3217 confirmation to have yes as the default.
3223 confirmation to have yes as the default.
3218
3224
3219 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3225 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3220 this file. It's been gone from the code for a long time, this was
3226 this file. It's been gone from the code for a long time, this was
3221 simply leftover junk.
3227 simply leftover junk.
3222
3228
3223 2002-11-01 Fernando Perez <fperez@colorado.edu>
3229 2002-11-01 Fernando Perez <fperez@colorado.edu>
3224
3230
3225 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3231 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3226 added. If set, IPython now traps EOF and asks for
3232 added. If set, IPython now traps EOF and asks for
3227 confirmation. After a request by François Pinard.
3233 confirmation. After a request by François Pinard.
3228
3234
3229 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3235 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3230 of @abort, and with a new (better) mechanism for handling the
3236 of @abort, and with a new (better) mechanism for handling the
3231 exceptions.
3237 exceptions.
3232
3238
3233 2002-10-27 Fernando Perez <fperez@colorado.edu>
3239 2002-10-27 Fernando Perez <fperez@colorado.edu>
3234
3240
3235 * IPython/usage.py (__doc__): updated the --help information and
3241 * IPython/usage.py (__doc__): updated the --help information and
3236 the ipythonrc file to indicate that -log generates
3242 the ipythonrc file to indicate that -log generates
3237 ./ipython.log. Also fixed the corresponding info in @logstart.
3243 ./ipython.log. Also fixed the corresponding info in @logstart.
3238 This and several other fixes in the manuals thanks to reports by
3244 This and several other fixes in the manuals thanks to reports by
3239 François Pinard <pinard-AT-iro.umontreal.ca>.
3245 François Pinard <pinard-AT-iro.umontreal.ca>.
3240
3246
3241 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3247 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3242 refer to @logstart (instead of @log, which doesn't exist).
3248 refer to @logstart (instead of @log, which doesn't exist).
3243
3249
3244 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3250 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3245 AttributeError crash. Thanks to Christopher Armstrong
3251 AttributeError crash. Thanks to Christopher Armstrong
3246 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3252 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3247 introduced recently (in 0.2.14pre37) with the fix to the eval
3253 introduced recently (in 0.2.14pre37) with the fix to the eval
3248 problem mentioned below.
3254 problem mentioned below.
3249
3255
3250 2002-10-17 Fernando Perez <fperez@colorado.edu>
3256 2002-10-17 Fernando Perez <fperez@colorado.edu>
3251
3257
3252 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3258 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3253 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3259 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3254
3260
3255 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3261 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3256 this function to fix a problem reported by Alex Schmolck. He saw
3262 this function to fix a problem reported by Alex Schmolck. He saw
3257 it with list comprehensions and generators, which were getting
3263 it with list comprehensions and generators, which were getting
3258 called twice. The real problem was an 'eval' call in testing for
3264 called twice. The real problem was an 'eval' call in testing for
3259 automagic which was evaluating the input line silently.
3265 automagic which was evaluating the input line silently.
3260
3266
3261 This is a potentially very nasty bug, if the input has side
3267 This is a potentially very nasty bug, if the input has side
3262 effects which must not be repeated. The code is much cleaner now,
3268 effects which must not be repeated. The code is much cleaner now,
3263 without any blanket 'except' left and with a regexp test for
3269 without any blanket 'except' left and with a regexp test for
3264 actual function names.
3270 actual function names.
3265
3271
3266 But an eval remains, which I'm not fully comfortable with. I just
3272 But an eval remains, which I'm not fully comfortable with. I just
3267 don't know how to find out if an expression could be a callable in
3273 don't know how to find out if an expression could be a callable in
3268 the user's namespace without doing an eval on the string. However
3274 the user's namespace without doing an eval on the string. However
3269 that string is now much more strictly checked so that no code
3275 that string is now much more strictly checked so that no code
3270 slips by, so the eval should only happen for things that can
3276 slips by, so the eval should only happen for things that can
3271 really be only function/method names.
3277 really be only function/method names.
3272
3278
3273 2002-10-15 Fernando Perez <fperez@colorado.edu>
3279 2002-10-15 Fernando Perez <fperez@colorado.edu>
3274
3280
3275 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3281 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3276 OSX information to main manual, removed README_Mac_OSX file from
3282 OSX information to main manual, removed README_Mac_OSX file from
3277 distribution. Also updated credits for recent additions.
3283 distribution. Also updated credits for recent additions.
3278
3284
3279 2002-10-10 Fernando Perez <fperez@colorado.edu>
3285 2002-10-10 Fernando Perez <fperez@colorado.edu>
3280
3286
3281 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3287 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3282 terminal-related issues. Many thanks to Andrea Riciputi
3288 terminal-related issues. Many thanks to Andrea Riciputi
3283 <andrea.riciputi-AT-libero.it> for writing it.
3289 <andrea.riciputi-AT-libero.it> for writing it.
3284
3290
3285 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3291 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3286 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3292 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3287
3293
3288 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3294 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3289 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3295 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3290 <syver-en-AT-online.no> who both submitted patches for this problem.
3296 <syver-en-AT-online.no> who both submitted patches for this problem.
3291
3297
3292 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3298 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3293 global embedding to make sure that things don't overwrite user
3299 global embedding to make sure that things don't overwrite user
3294 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3300 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3295
3301
3296 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3302 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3297 compatibility. Thanks to Hayden Callow
3303 compatibility. Thanks to Hayden Callow
3298 <h.callow-AT-elec.canterbury.ac.nz>
3304 <h.callow-AT-elec.canterbury.ac.nz>
3299
3305
3300 2002-10-04 Fernando Perez <fperez@colorado.edu>
3306 2002-10-04 Fernando Perez <fperez@colorado.edu>
3301
3307
3302 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3308 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3303 Gnuplot.File objects.
3309 Gnuplot.File objects.
3304
3310
3305 2002-07-23 Fernando Perez <fperez@colorado.edu>
3311 2002-07-23 Fernando Perez <fperez@colorado.edu>
3306
3312
3307 * IPython/genutils.py (timing): Added timings() and timing() for
3313 * IPython/genutils.py (timing): Added timings() and timing() for
3308 quick access to the most commonly needed data, the execution
3314 quick access to the most commonly needed data, the execution
3309 times. Old timing() renamed to timings_out().
3315 times. Old timing() renamed to timings_out().
3310
3316
3311 2002-07-18 Fernando Perez <fperez@colorado.edu>
3317 2002-07-18 Fernando Perez <fperez@colorado.edu>
3312
3318
3313 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3319 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3314 bug with nested instances disrupting the parent's tab completion.
3320 bug with nested instances disrupting the parent's tab completion.
3315
3321
3316 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3322 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3317 all_completions code to begin the emacs integration.
3323 all_completions code to begin the emacs integration.
3318
3324
3319 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3325 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3320 argument to allow titling individual arrays when plotting.
3326 argument to allow titling individual arrays when plotting.
3321
3327
3322 2002-07-15 Fernando Perez <fperez@colorado.edu>
3328 2002-07-15 Fernando Perez <fperez@colorado.edu>
3323
3329
3324 * setup.py (make_shortcut): changed to retrieve the value of
3330 * setup.py (make_shortcut): changed to retrieve the value of
3325 'Program Files' directory from the registry (this value changes in
3331 'Program Files' directory from the registry (this value changes in
3326 non-english versions of Windows). Thanks to Thomas Fanslau
3332 non-english versions of Windows). Thanks to Thomas Fanslau
3327 <tfanslau-AT-gmx.de> for the report.
3333 <tfanslau-AT-gmx.de> for the report.
3328
3334
3329 2002-07-10 Fernando Perez <fperez@colorado.edu>
3335 2002-07-10 Fernando Perez <fperez@colorado.edu>
3330
3336
3331 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3337 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3332 a bug in pdb, which crashes if a line with only whitespace is
3338 a bug in pdb, which crashes if a line with only whitespace is
3333 entered. Bug report submitted to sourceforge.
3339 entered. Bug report submitted to sourceforge.
3334
3340
3335 2002-07-09 Fernando Perez <fperez@colorado.edu>
3341 2002-07-09 Fernando Perez <fperez@colorado.edu>
3336
3342
3337 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3343 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3338 reporting exceptions (it's a bug in inspect.py, I just set a
3344 reporting exceptions (it's a bug in inspect.py, I just set a
3339 workaround).
3345 workaround).
3340
3346
3341 2002-07-08 Fernando Perez <fperez@colorado.edu>
3347 2002-07-08 Fernando Perez <fperez@colorado.edu>
3342
3348
3343 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3349 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3344 __IPYTHON__ in __builtins__ to show up in user_ns.
3350 __IPYTHON__ in __builtins__ to show up in user_ns.
3345
3351
3346 2002-07-03 Fernando Perez <fperez@colorado.edu>
3352 2002-07-03 Fernando Perez <fperez@colorado.edu>
3347
3353
3348 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3354 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3349 name from @gp_set_instance to @gp_set_default.
3355 name from @gp_set_instance to @gp_set_default.
3350
3356
3351 * IPython/ipmaker.py (make_IPython): default editor value set to
3357 * IPython/ipmaker.py (make_IPython): default editor value set to
3352 '0' (a string), to match the rc file. Otherwise will crash when
3358 '0' (a string), to match the rc file. Otherwise will crash when
3353 .strip() is called on it.
3359 .strip() is called on it.
3354
3360
3355
3361
3356 2002-06-28 Fernando Perez <fperez@colorado.edu>
3362 2002-06-28 Fernando Perez <fperez@colorado.edu>
3357
3363
3358 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3364 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3359 of files in current directory when a file is executed via
3365 of files in current directory when a file is executed via
3360 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3366 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3361
3367
3362 * setup.py (manfiles): fix for rpm builds, submitted by RA
3368 * setup.py (manfiles): fix for rpm builds, submitted by RA
3363 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3369 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3364
3370
3365 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3371 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3366 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3372 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3367 string!). A. Schmolck caught this one.
3373 string!). A. Schmolck caught this one.
3368
3374
3369 2002-06-27 Fernando Perez <fperez@colorado.edu>
3375 2002-06-27 Fernando Perez <fperez@colorado.edu>
3370
3376
3371 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3377 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3372 defined files at the cmd line. __name__ wasn't being set to
3378 defined files at the cmd line. __name__ wasn't being set to
3373 __main__.
3379 __main__.
3374
3380
3375 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3381 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3376 regular lists and tuples besides Numeric arrays.
3382 regular lists and tuples besides Numeric arrays.
3377
3383
3378 * IPython/Prompts.py (CachedOutput.__call__): Added output
3384 * IPython/Prompts.py (CachedOutput.__call__): Added output
3379 supression for input ending with ';'. Similar to Mathematica and
3385 supression for input ending with ';'. Similar to Mathematica and
3380 Matlab. The _* vars and Out[] list are still updated, just like
3386 Matlab. The _* vars and Out[] list are still updated, just like
3381 Mathematica behaves.
3387 Mathematica behaves.
3382
3388
3383 2002-06-25 Fernando Perez <fperez@colorado.edu>
3389 2002-06-25 Fernando Perez <fperez@colorado.edu>
3384
3390
3385 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3391 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3386 .ini extensions for profiels under Windows.
3392 .ini extensions for profiels under Windows.
3387
3393
3388 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3394 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3389 string form. Fix contributed by Alexander Schmolck
3395 string form. Fix contributed by Alexander Schmolck
3390 <a.schmolck-AT-gmx.net>
3396 <a.schmolck-AT-gmx.net>
3391
3397
3392 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3398 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3393 pre-configured Gnuplot instance.
3399 pre-configured Gnuplot instance.
3394
3400
3395 2002-06-21 Fernando Perez <fperez@colorado.edu>
3401 2002-06-21 Fernando Perez <fperez@colorado.edu>
3396
3402
3397 * IPython/numutils.py (exp_safe): new function, works around the
3403 * IPython/numutils.py (exp_safe): new function, works around the
3398 underflow problems in Numeric.
3404 underflow problems in Numeric.
3399 (log2): New fn. Safe log in base 2: returns exact integer answer
3405 (log2): New fn. Safe log in base 2: returns exact integer answer
3400 for exact integer powers of 2.
3406 for exact integer powers of 2.
3401
3407
3402 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3408 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3403 properly.
3409 properly.
3404
3410
3405 2002-06-20 Fernando Perez <fperez@colorado.edu>
3411 2002-06-20 Fernando Perez <fperez@colorado.edu>
3406
3412
3407 * IPython/genutils.py (timing): new function like
3413 * IPython/genutils.py (timing): new function like
3408 Mathematica's. Similar to time_test, but returns more info.
3414 Mathematica's. Similar to time_test, but returns more info.
3409
3415
3410 2002-06-18 Fernando Perez <fperez@colorado.edu>
3416 2002-06-18 Fernando Perez <fperez@colorado.edu>
3411
3417
3412 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3418 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3413 according to Mike Heeter's suggestions.
3419 according to Mike Heeter's suggestions.
3414
3420
3415 2002-06-16 Fernando Perez <fperez@colorado.edu>
3421 2002-06-16 Fernando Perez <fperez@colorado.edu>
3416
3422
3417 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3423 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3418 system. GnuplotMagic is gone as a user-directory option. New files
3424 system. GnuplotMagic is gone as a user-directory option. New files
3419 make it easier to use all the gnuplot stuff both from external
3425 make it easier to use all the gnuplot stuff both from external
3420 programs as well as from IPython. Had to rewrite part of
3426 programs as well as from IPython. Had to rewrite part of
3421 hardcopy() b/c of a strange bug: often the ps files simply don't
3427 hardcopy() b/c of a strange bug: often the ps files simply don't
3422 get created, and require a repeat of the command (often several
3428 get created, and require a repeat of the command (often several
3423 times).
3429 times).
3424
3430
3425 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3431 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3426 resolve output channel at call time, so that if sys.stderr has
3432 resolve output channel at call time, so that if sys.stderr has
3427 been redirected by user this gets honored.
3433 been redirected by user this gets honored.
3428
3434
3429 2002-06-13 Fernando Perez <fperez@colorado.edu>
3435 2002-06-13 Fernando Perez <fperez@colorado.edu>
3430
3436
3431 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3437 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3432 IPShell. Kept a copy with the old names to avoid breaking people's
3438 IPShell. Kept a copy with the old names to avoid breaking people's
3433 embedded code.
3439 embedded code.
3434
3440
3435 * IPython/ipython: simplified it to the bare minimum after
3441 * IPython/ipython: simplified it to the bare minimum after
3436 Holger's suggestions. Added info about how to use it in
3442 Holger's suggestions. Added info about how to use it in
3437 PYTHONSTARTUP.
3443 PYTHONSTARTUP.
3438
3444
3439 * IPython/Shell.py (IPythonShell): changed the options passing
3445 * IPython/Shell.py (IPythonShell): changed the options passing
3440 from a string with funky %s replacements to a straight list. Maybe
3446 from a string with funky %s replacements to a straight list. Maybe
3441 a bit more typing, but it follows sys.argv conventions, so there's
3447 a bit more typing, but it follows sys.argv conventions, so there's
3442 less special-casing to remember.
3448 less special-casing to remember.
3443
3449
3444 2002-06-12 Fernando Perez <fperez@colorado.edu>
3450 2002-06-12 Fernando Perez <fperez@colorado.edu>
3445
3451
3446 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3452 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3447 command. Thanks to a suggestion by Mike Heeter.
3453 command. Thanks to a suggestion by Mike Heeter.
3448 (Magic.magic_pfile): added behavior to look at filenames if given
3454 (Magic.magic_pfile): added behavior to look at filenames if given
3449 arg is not a defined object.
3455 arg is not a defined object.
3450 (Magic.magic_save): New @save function to save code snippets. Also
3456 (Magic.magic_save): New @save function to save code snippets. Also
3451 a Mike Heeter idea.
3457 a Mike Heeter idea.
3452
3458
3453 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3459 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3454 plot() and replot(). Much more convenient now, especially for
3460 plot() and replot(). Much more convenient now, especially for
3455 interactive use.
3461 interactive use.
3456
3462
3457 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3463 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3458 filenames.
3464 filenames.
3459
3465
3460 2002-06-02 Fernando Perez <fperez@colorado.edu>
3466 2002-06-02 Fernando Perez <fperez@colorado.edu>
3461
3467
3462 * IPython/Struct.py (Struct.__init__): modified to admit
3468 * IPython/Struct.py (Struct.__init__): modified to admit
3463 initialization via another struct.
3469 initialization via another struct.
3464
3470
3465 * IPython/genutils.py (SystemExec.__init__): New stateful
3471 * IPython/genutils.py (SystemExec.__init__): New stateful
3466 interface to xsys and bq. Useful for writing system scripts.
3472 interface to xsys and bq. Useful for writing system scripts.
3467
3473
3468 2002-05-30 Fernando Perez <fperez@colorado.edu>
3474 2002-05-30 Fernando Perez <fperez@colorado.edu>
3469
3475
3470 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3476 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3471 documents. This will make the user download smaller (it's getting
3477 documents. This will make the user download smaller (it's getting
3472 too big).
3478 too big).
3473
3479
3474 2002-05-29 Fernando Perez <fperez@colorado.edu>
3480 2002-05-29 Fernando Perez <fperez@colorado.edu>
3475
3481
3476 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3482 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3477 fix problems with shelve and pickle. Seems to work, but I don't
3483 fix problems with shelve and pickle. Seems to work, but I don't
3478 know if corner cases break it. Thanks to Mike Heeter
3484 know if corner cases break it. Thanks to Mike Heeter
3479 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3485 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3480
3486
3481 2002-05-24 Fernando Perez <fperez@colorado.edu>
3487 2002-05-24 Fernando Perez <fperez@colorado.edu>
3482
3488
3483 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3489 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3484 macros having broken.
3490 macros having broken.
3485
3491
3486 2002-05-21 Fernando Perez <fperez@colorado.edu>
3492 2002-05-21 Fernando Perez <fperez@colorado.edu>
3487
3493
3488 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3494 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3489 introduced logging bug: all history before logging started was
3495 introduced logging bug: all history before logging started was
3490 being written one character per line! This came from the redesign
3496 being written one character per line! This came from the redesign
3491 of the input history as a special list which slices to strings,
3497 of the input history as a special list which slices to strings,
3492 not to lists.
3498 not to lists.
3493
3499
3494 2002-05-20 Fernando Perez <fperez@colorado.edu>
3500 2002-05-20 Fernando Perez <fperez@colorado.edu>
3495
3501
3496 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3502 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3497 be an attribute of all classes in this module. The design of these
3503 be an attribute of all classes in this module. The design of these
3498 classes needs some serious overhauling.
3504 classes needs some serious overhauling.
3499
3505
3500 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3506 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3501 which was ignoring '_' in option names.
3507 which was ignoring '_' in option names.
3502
3508
3503 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3509 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3504 'Verbose_novars' to 'Context' and made it the new default. It's a
3510 'Verbose_novars' to 'Context' and made it the new default. It's a
3505 bit more readable and also safer than verbose.
3511 bit more readable and also safer than verbose.
3506
3512
3507 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3513 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3508 triple-quoted strings.
3514 triple-quoted strings.
3509
3515
3510 * IPython/OInspect.py (__all__): new module exposing the object
3516 * IPython/OInspect.py (__all__): new module exposing the object
3511 introspection facilities. Now the corresponding magics are dummy
3517 introspection facilities. Now the corresponding magics are dummy
3512 wrappers around this. Having this module will make it much easier
3518 wrappers around this. Having this module will make it much easier
3513 to put these functions into our modified pdb.
3519 to put these functions into our modified pdb.
3514 This new object inspector system uses the new colorizing module,
3520 This new object inspector system uses the new colorizing module,
3515 so source code and other things are nicely syntax highlighted.
3521 so source code and other things are nicely syntax highlighted.
3516
3522
3517 2002-05-18 Fernando Perez <fperez@colorado.edu>
3523 2002-05-18 Fernando Perez <fperez@colorado.edu>
3518
3524
3519 * IPython/ColorANSI.py: Split the coloring tools into a separate
3525 * IPython/ColorANSI.py: Split the coloring tools into a separate
3520 module so I can use them in other code easier (they were part of
3526 module so I can use them in other code easier (they were part of
3521 ultraTB).
3527 ultraTB).
3522
3528
3523 2002-05-17 Fernando Perez <fperez@colorado.edu>
3529 2002-05-17 Fernando Perez <fperez@colorado.edu>
3524
3530
3525 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3531 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3526 fixed it to set the global 'g' also to the called instance, as
3532 fixed it to set the global 'g' also to the called instance, as
3527 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3533 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3528 user's 'g' variables).
3534 user's 'g' variables).
3529
3535
3530 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3536 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3531 global variables (aliases to _ih,_oh) so that users which expect
3537 global variables (aliases to _ih,_oh) so that users which expect
3532 In[5] or Out[7] to work aren't unpleasantly surprised.
3538 In[5] or Out[7] to work aren't unpleasantly surprised.
3533 (InputList.__getslice__): new class to allow executing slices of
3539 (InputList.__getslice__): new class to allow executing slices of
3534 input history directly. Very simple class, complements the use of
3540 input history directly. Very simple class, complements the use of
3535 macros.
3541 macros.
3536
3542
3537 2002-05-16 Fernando Perez <fperez@colorado.edu>
3543 2002-05-16 Fernando Perez <fperez@colorado.edu>
3538
3544
3539 * setup.py (docdirbase): make doc directory be just doc/IPython
3545 * setup.py (docdirbase): make doc directory be just doc/IPython
3540 without version numbers, it will reduce clutter for users.
3546 without version numbers, it will reduce clutter for users.
3541
3547
3542 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3548 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3543 execfile call to prevent possible memory leak. See for details:
3549 execfile call to prevent possible memory leak. See for details:
3544 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3550 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3545
3551
3546 2002-05-15 Fernando Perez <fperez@colorado.edu>
3552 2002-05-15 Fernando Perez <fperez@colorado.edu>
3547
3553
3548 * IPython/Magic.py (Magic.magic_psource): made the object
3554 * IPython/Magic.py (Magic.magic_psource): made the object
3549 introspection names be more standard: pdoc, pdef, pfile and
3555 introspection names be more standard: pdoc, pdef, pfile and
3550 psource. They all print/page their output, and it makes
3556 psource. They all print/page their output, and it makes
3551 remembering them easier. Kept old names for compatibility as
3557 remembering them easier. Kept old names for compatibility as
3552 aliases.
3558 aliases.
3553
3559
3554 2002-05-14 Fernando Perez <fperez@colorado.edu>
3560 2002-05-14 Fernando Perez <fperez@colorado.edu>
3555
3561
3556 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3562 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3557 what the mouse problem was. The trick is to use gnuplot with temp
3563 what the mouse problem was. The trick is to use gnuplot with temp
3558 files and NOT with pipes (for data communication), because having
3564 files and NOT with pipes (for data communication), because having
3559 both pipes and the mouse on is bad news.
3565 both pipes and the mouse on is bad news.
3560
3566
3561 2002-05-13 Fernando Perez <fperez@colorado.edu>
3567 2002-05-13 Fernando Perez <fperez@colorado.edu>
3562
3568
3563 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3569 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3564 bug. Information would be reported about builtins even when
3570 bug. Information would be reported about builtins even when
3565 user-defined functions overrode them.
3571 user-defined functions overrode them.
3566
3572
3567 2002-05-11 Fernando Perez <fperez@colorado.edu>
3573 2002-05-11 Fernando Perez <fperez@colorado.edu>
3568
3574
3569 * IPython/__init__.py (__all__): removed FlexCompleter from
3575 * IPython/__init__.py (__all__): removed FlexCompleter from
3570 __all__ so that things don't fail in platforms without readline.
3576 __all__ so that things don't fail in platforms without readline.
3571
3577
3572 2002-05-10 Fernando Perez <fperez@colorado.edu>
3578 2002-05-10 Fernando Perez <fperez@colorado.edu>
3573
3579
3574 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3580 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3575 it requires Numeric, effectively making Numeric a dependency for
3581 it requires Numeric, effectively making Numeric a dependency for
3576 IPython.
3582 IPython.
3577
3583
3578 * Released 0.2.13
3584 * Released 0.2.13
3579
3585
3580 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3586 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3581 profiler interface. Now all the major options from the profiler
3587 profiler interface. Now all the major options from the profiler
3582 module are directly supported in IPython, both for single
3588 module are directly supported in IPython, both for single
3583 expressions (@prun) and for full programs (@run -p).
3589 expressions (@prun) and for full programs (@run -p).
3584
3590
3585 2002-05-09 Fernando Perez <fperez@colorado.edu>
3591 2002-05-09 Fernando Perez <fperez@colorado.edu>
3586
3592
3587 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3593 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3588 magic properly formatted for screen.
3594 magic properly formatted for screen.
3589
3595
3590 * setup.py (make_shortcut): Changed things to put pdf version in
3596 * setup.py (make_shortcut): Changed things to put pdf version in
3591 doc/ instead of doc/manual (had to change lyxport a bit).
3597 doc/ instead of doc/manual (had to change lyxport a bit).
3592
3598
3593 * IPython/Magic.py (Profile.string_stats): made profile runs go
3599 * IPython/Magic.py (Profile.string_stats): made profile runs go
3594 through pager (they are long and a pager allows searching, saving,
3600 through pager (they are long and a pager allows searching, saving,
3595 etc.)
3601 etc.)
3596
3602
3597 2002-05-08 Fernando Perez <fperez@colorado.edu>
3603 2002-05-08 Fernando Perez <fperez@colorado.edu>
3598
3604
3599 * Released 0.2.12
3605 * Released 0.2.12
3600
3606
3601 2002-05-06 Fernando Perez <fperez@colorado.edu>
3607 2002-05-06 Fernando Perez <fperez@colorado.edu>
3602
3608
3603 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3609 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3604 introduced); 'hist n1 n2' was broken.
3610 introduced); 'hist n1 n2' was broken.
3605 (Magic.magic_pdb): added optional on/off arguments to @pdb
3611 (Magic.magic_pdb): added optional on/off arguments to @pdb
3606 (Magic.magic_run): added option -i to @run, which executes code in
3612 (Magic.magic_run): added option -i to @run, which executes code in
3607 the IPython namespace instead of a clean one. Also added @irun as
3613 the IPython namespace instead of a clean one. Also added @irun as
3608 an alias to @run -i.
3614 an alias to @run -i.
3609
3615
3610 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3616 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3611 fixed (it didn't really do anything, the namespaces were wrong).
3617 fixed (it didn't really do anything, the namespaces were wrong).
3612
3618
3613 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3619 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3614
3620
3615 * IPython/__init__.py (__all__): Fixed package namespace, now
3621 * IPython/__init__.py (__all__): Fixed package namespace, now
3616 'import IPython' does give access to IPython.<all> as
3622 'import IPython' does give access to IPython.<all> as
3617 expected. Also renamed __release__ to Release.
3623 expected. Also renamed __release__ to Release.
3618
3624
3619 * IPython/Debugger.py (__license__): created new Pdb class which
3625 * IPython/Debugger.py (__license__): created new Pdb class which
3620 functions like a drop-in for the normal pdb.Pdb but does NOT
3626 functions like a drop-in for the normal pdb.Pdb but does NOT
3621 import readline by default. This way it doesn't muck up IPython's
3627 import readline by default. This way it doesn't muck up IPython's
3622 readline handling, and now tab-completion finally works in the
3628 readline handling, and now tab-completion finally works in the
3623 debugger -- sort of. It completes things globally visible, but the
3629 debugger -- sort of. It completes things globally visible, but the
3624 completer doesn't track the stack as pdb walks it. That's a bit
3630 completer doesn't track the stack as pdb walks it. That's a bit
3625 tricky, and I'll have to implement it later.
3631 tricky, and I'll have to implement it later.
3626
3632
3627 2002-05-05 Fernando Perez <fperez@colorado.edu>
3633 2002-05-05 Fernando Perez <fperez@colorado.edu>
3628
3634
3629 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3635 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3630 magic docstrings when printed via ? (explicit \'s were being
3636 magic docstrings when printed via ? (explicit \'s were being
3631 printed).
3637 printed).
3632
3638
3633 * IPython/ipmaker.py (make_IPython): fixed namespace
3639 * IPython/ipmaker.py (make_IPython): fixed namespace
3634 identification bug. Now variables loaded via logs or command-line
3640 identification bug. Now variables loaded via logs or command-line
3635 files are recognized in the interactive namespace by @who.
3641 files are recognized in the interactive namespace by @who.
3636
3642
3637 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3643 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3638 log replay system stemming from the string form of Structs.
3644 log replay system stemming from the string form of Structs.
3639
3645
3640 * IPython/Magic.py (Macro.__init__): improved macros to properly
3646 * IPython/Magic.py (Macro.__init__): improved macros to properly
3641 handle magic commands in them.
3647 handle magic commands in them.
3642 (Magic.magic_logstart): usernames are now expanded so 'logstart
3648 (Magic.magic_logstart): usernames are now expanded so 'logstart
3643 ~/mylog' now works.
3649 ~/mylog' now works.
3644
3650
3645 * IPython/iplib.py (complete): fixed bug where paths starting with
3651 * IPython/iplib.py (complete): fixed bug where paths starting with
3646 '/' would be completed as magic names.
3652 '/' would be completed as magic names.
3647
3653
3648 2002-05-04 Fernando Perez <fperez@colorado.edu>
3654 2002-05-04 Fernando Perez <fperez@colorado.edu>
3649
3655
3650 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3656 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3651 allow running full programs under the profiler's control.
3657 allow running full programs under the profiler's control.
3652
3658
3653 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3659 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3654 mode to report exceptions verbosely but without formatting
3660 mode to report exceptions verbosely but without formatting
3655 variables. This addresses the issue of ipython 'freezing' (it's
3661 variables. This addresses the issue of ipython 'freezing' (it's
3656 not frozen, but caught in an expensive formatting loop) when huge
3662 not frozen, but caught in an expensive formatting loop) when huge
3657 variables are in the context of an exception.
3663 variables are in the context of an exception.
3658 (VerboseTB.text): Added '--->' markers at line where exception was
3664 (VerboseTB.text): Added '--->' markers at line where exception was
3659 triggered. Much clearer to read, especially in NoColor modes.
3665 triggered. Much clearer to read, especially in NoColor modes.
3660
3666
3661 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3667 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3662 implemented in reverse when changing to the new parse_options().
3668 implemented in reverse when changing to the new parse_options().
3663
3669
3664 2002-05-03 Fernando Perez <fperez@colorado.edu>
3670 2002-05-03 Fernando Perez <fperez@colorado.edu>
3665
3671
3666 * IPython/Magic.py (Magic.parse_options): new function so that
3672 * IPython/Magic.py (Magic.parse_options): new function so that
3667 magics can parse options easier.
3673 magics can parse options easier.
3668 (Magic.magic_prun): new function similar to profile.run(),
3674 (Magic.magic_prun): new function similar to profile.run(),
3669 suggested by Chris Hart.
3675 suggested by Chris Hart.
3670 (Magic.magic_cd): fixed behavior so that it only changes if
3676 (Magic.magic_cd): fixed behavior so that it only changes if
3671 directory actually is in history.
3677 directory actually is in history.
3672
3678
3673 * IPython/usage.py (__doc__): added information about potential
3679 * IPython/usage.py (__doc__): added information about potential
3674 slowness of Verbose exception mode when there are huge data
3680 slowness of Verbose exception mode when there are huge data
3675 structures to be formatted (thanks to Archie Paulson).
3681 structures to be formatted (thanks to Archie Paulson).
3676
3682
3677 * IPython/ipmaker.py (make_IPython): Changed default logging
3683 * IPython/ipmaker.py (make_IPython): Changed default logging
3678 (when simply called with -log) to use curr_dir/ipython.log in
3684 (when simply called with -log) to use curr_dir/ipython.log in
3679 rotate mode. Fixed crash which was occuring with -log before
3685 rotate mode. Fixed crash which was occuring with -log before
3680 (thanks to Jim Boyle).
3686 (thanks to Jim Boyle).
3681
3687
3682 2002-05-01 Fernando Perez <fperez@colorado.edu>
3688 2002-05-01 Fernando Perez <fperez@colorado.edu>
3683
3689
3684 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3690 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3685 was nasty -- though somewhat of a corner case).
3691 was nasty -- though somewhat of a corner case).
3686
3692
3687 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3693 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3688 text (was a bug).
3694 text (was a bug).
3689
3695
3690 2002-04-30 Fernando Perez <fperez@colorado.edu>
3696 2002-04-30 Fernando Perez <fperez@colorado.edu>
3691
3697
3692 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3698 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3693 a print after ^D or ^C from the user so that the In[] prompt
3699 a print after ^D or ^C from the user so that the In[] prompt
3694 doesn't over-run the gnuplot one.
3700 doesn't over-run the gnuplot one.
3695
3701
3696 2002-04-29 Fernando Perez <fperez@colorado.edu>
3702 2002-04-29 Fernando Perez <fperez@colorado.edu>
3697
3703
3698 * Released 0.2.10
3704 * Released 0.2.10
3699
3705
3700 * IPython/__release__.py (version): get date dynamically.
3706 * IPython/__release__.py (version): get date dynamically.
3701
3707
3702 * Misc. documentation updates thanks to Arnd's comments. Also ran
3708 * Misc. documentation updates thanks to Arnd's comments. Also ran
3703 a full spellcheck on the manual (hadn't been done in a while).
3709 a full spellcheck on the manual (hadn't been done in a while).
3704
3710
3705 2002-04-27 Fernando Perez <fperez@colorado.edu>
3711 2002-04-27 Fernando Perez <fperez@colorado.edu>
3706
3712
3707 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3713 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3708 starting a log in mid-session would reset the input history list.
3714 starting a log in mid-session would reset the input history list.
3709
3715
3710 2002-04-26 Fernando Perez <fperez@colorado.edu>
3716 2002-04-26 Fernando Perez <fperez@colorado.edu>
3711
3717
3712 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3718 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3713 all files were being included in an update. Now anything in
3719 all files were being included in an update. Now anything in
3714 UserConfig that matches [A-Za-z]*.py will go (this excludes
3720 UserConfig that matches [A-Za-z]*.py will go (this excludes
3715 __init__.py)
3721 __init__.py)
3716
3722
3717 2002-04-25 Fernando Perez <fperez@colorado.edu>
3723 2002-04-25 Fernando Perez <fperez@colorado.edu>
3718
3724
3719 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3725 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3720 to __builtins__ so that any form of embedded or imported code can
3726 to __builtins__ so that any form of embedded or imported code can
3721 test for being inside IPython.
3727 test for being inside IPython.
3722
3728
3723 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3729 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3724 changed to GnuplotMagic because it's now an importable module,
3730 changed to GnuplotMagic because it's now an importable module,
3725 this makes the name follow that of the standard Gnuplot module.
3731 this makes the name follow that of the standard Gnuplot module.
3726 GnuplotMagic can now be loaded at any time in mid-session.
3732 GnuplotMagic can now be loaded at any time in mid-session.
3727
3733
3728 2002-04-24 Fernando Perez <fperez@colorado.edu>
3734 2002-04-24 Fernando Perez <fperez@colorado.edu>
3729
3735
3730 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3736 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3731 the globals (IPython has its own namespace) and the
3737 the globals (IPython has its own namespace) and the
3732 PhysicalQuantity stuff is much better anyway.
3738 PhysicalQuantity stuff is much better anyway.
3733
3739
3734 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3740 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3735 embedding example to standard user directory for
3741 embedding example to standard user directory for
3736 distribution. Also put it in the manual.
3742 distribution. Also put it in the manual.
3737
3743
3738 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3744 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3739 instance as first argument (so it doesn't rely on some obscure
3745 instance as first argument (so it doesn't rely on some obscure
3740 hidden global).
3746 hidden global).
3741
3747
3742 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3748 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3743 delimiters. While it prevents ().TAB from working, it allows
3749 delimiters. While it prevents ().TAB from working, it allows
3744 completions in open (... expressions. This is by far a more common
3750 completions in open (... expressions. This is by far a more common
3745 case.
3751 case.
3746
3752
3747 2002-04-23 Fernando Perez <fperez@colorado.edu>
3753 2002-04-23 Fernando Perez <fperez@colorado.edu>
3748
3754
3749 * IPython/Extensions/InterpreterPasteInput.py: new
3755 * IPython/Extensions/InterpreterPasteInput.py: new
3750 syntax-processing module for pasting lines with >>> or ... at the
3756 syntax-processing module for pasting lines with >>> or ... at the
3751 start.
3757 start.
3752
3758
3753 * IPython/Extensions/PhysicalQ_Interactive.py
3759 * IPython/Extensions/PhysicalQ_Interactive.py
3754 (PhysicalQuantityInteractive.__int__): fixed to work with either
3760 (PhysicalQuantityInteractive.__int__): fixed to work with either
3755 Numeric or math.
3761 Numeric or math.
3756
3762
3757 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3763 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3758 provided profiles. Now we have:
3764 provided profiles. Now we have:
3759 -math -> math module as * and cmath with its own namespace.
3765 -math -> math module as * and cmath with its own namespace.
3760 -numeric -> Numeric as *, plus gnuplot & grace
3766 -numeric -> Numeric as *, plus gnuplot & grace
3761 -physics -> same as before
3767 -physics -> same as before
3762
3768
3763 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3769 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3764 user-defined magics wouldn't be found by @magic if they were
3770 user-defined magics wouldn't be found by @magic if they were
3765 defined as class methods. Also cleaned up the namespace search
3771 defined as class methods. Also cleaned up the namespace search
3766 logic and the string building (to use %s instead of many repeated
3772 logic and the string building (to use %s instead of many repeated
3767 string adds).
3773 string adds).
3768
3774
3769 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3775 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3770 of user-defined magics to operate with class methods (cleaner, in
3776 of user-defined magics to operate with class methods (cleaner, in
3771 line with the gnuplot code).
3777 line with the gnuplot code).
3772
3778
3773 2002-04-22 Fernando Perez <fperez@colorado.edu>
3779 2002-04-22 Fernando Perez <fperez@colorado.edu>
3774
3780
3775 * setup.py: updated dependency list so that manual is updated when
3781 * setup.py: updated dependency list so that manual is updated when
3776 all included files change.
3782 all included files change.
3777
3783
3778 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3784 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3779 the delimiter removal option (the fix is ugly right now).
3785 the delimiter removal option (the fix is ugly right now).
3780
3786
3781 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3787 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3782 all of the math profile (quicker loading, no conflict between
3788 all of the math profile (quicker loading, no conflict between
3783 g-9.8 and g-gnuplot).
3789 g-9.8 and g-gnuplot).
3784
3790
3785 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3791 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3786 name of post-mortem files to IPython_crash_report.txt.
3792 name of post-mortem files to IPython_crash_report.txt.
3787
3793
3788 * Cleanup/update of the docs. Added all the new readline info and
3794 * Cleanup/update of the docs. Added all the new readline info and
3789 formatted all lists as 'real lists'.
3795 formatted all lists as 'real lists'.
3790
3796
3791 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3797 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3792 tab-completion options, since the full readline parse_and_bind is
3798 tab-completion options, since the full readline parse_and_bind is
3793 now accessible.
3799 now accessible.
3794
3800
3795 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3801 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3796 handling of readline options. Now users can specify any string to
3802 handling of readline options. Now users can specify any string to
3797 be passed to parse_and_bind(), as well as the delimiters to be
3803 be passed to parse_and_bind(), as well as the delimiters to be
3798 removed.
3804 removed.
3799 (InteractiveShell.__init__): Added __name__ to the global
3805 (InteractiveShell.__init__): Added __name__ to the global
3800 namespace so that things like Itpl which rely on its existence
3806 namespace so that things like Itpl which rely on its existence
3801 don't crash.
3807 don't crash.
3802 (InteractiveShell._prefilter): Defined the default with a _ so
3808 (InteractiveShell._prefilter): Defined the default with a _ so
3803 that prefilter() is easier to override, while the default one
3809 that prefilter() is easier to override, while the default one
3804 remains available.
3810 remains available.
3805
3811
3806 2002-04-18 Fernando Perez <fperez@colorado.edu>
3812 2002-04-18 Fernando Perez <fperez@colorado.edu>
3807
3813
3808 * Added information about pdb in the docs.
3814 * Added information about pdb in the docs.
3809
3815
3810 2002-04-17 Fernando Perez <fperez@colorado.edu>
3816 2002-04-17 Fernando Perez <fperez@colorado.edu>
3811
3817
3812 * IPython/ipmaker.py (make_IPython): added rc_override option to
3818 * IPython/ipmaker.py (make_IPython): added rc_override option to
3813 allow passing config options at creation time which may override
3819 allow passing config options at creation time which may override
3814 anything set in the config files or command line. This is
3820 anything set in the config files or command line. This is
3815 particularly useful for configuring embedded instances.
3821 particularly useful for configuring embedded instances.
3816
3822
3817 2002-04-15 Fernando Perez <fperez@colorado.edu>
3823 2002-04-15 Fernando Perez <fperez@colorado.edu>
3818
3824
3819 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3825 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3820 crash embedded instances because of the input cache falling out of
3826 crash embedded instances because of the input cache falling out of
3821 sync with the output counter.
3827 sync with the output counter.
3822
3828
3823 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3829 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3824 mode which calls pdb after an uncaught exception in IPython itself.
3830 mode which calls pdb after an uncaught exception in IPython itself.
3825
3831
3826 2002-04-14 Fernando Perez <fperez@colorado.edu>
3832 2002-04-14 Fernando Perez <fperez@colorado.edu>
3827
3833
3828 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3834 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3829 readline, fix it back after each call.
3835 readline, fix it back after each call.
3830
3836
3831 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3837 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3832 method to force all access via __call__(), which guarantees that
3838 method to force all access via __call__(), which guarantees that
3833 traceback references are properly deleted.
3839 traceback references are properly deleted.
3834
3840
3835 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3841 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3836 improve printing when pprint is in use.
3842 improve printing when pprint is in use.
3837
3843
3838 2002-04-13 Fernando Perez <fperez@colorado.edu>
3844 2002-04-13 Fernando Perez <fperez@colorado.edu>
3839
3845
3840 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3846 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3841 exceptions aren't caught anymore. If the user triggers one, he
3847 exceptions aren't caught anymore. If the user triggers one, he
3842 should know why he's doing it and it should go all the way up,
3848 should know why he's doing it and it should go all the way up,
3843 just like any other exception. So now @abort will fully kill the
3849 just like any other exception. So now @abort will fully kill the
3844 embedded interpreter and the embedding code (unless that happens
3850 embedded interpreter and the embedding code (unless that happens
3845 to catch SystemExit).
3851 to catch SystemExit).
3846
3852
3847 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3853 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3848 and a debugger() method to invoke the interactive pdb debugger
3854 and a debugger() method to invoke the interactive pdb debugger
3849 after printing exception information. Also added the corresponding
3855 after printing exception information. Also added the corresponding
3850 -pdb option and @pdb magic to control this feature, and updated
3856 -pdb option and @pdb magic to control this feature, and updated
3851 the docs. After a suggestion from Christopher Hart
3857 the docs. After a suggestion from Christopher Hart
3852 (hart-AT-caltech.edu).
3858 (hart-AT-caltech.edu).
3853
3859
3854 2002-04-12 Fernando Perez <fperez@colorado.edu>
3860 2002-04-12 Fernando Perez <fperez@colorado.edu>
3855
3861
3856 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3862 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3857 the exception handlers defined by the user (not the CrashHandler)
3863 the exception handlers defined by the user (not the CrashHandler)
3858 so that user exceptions don't trigger an ipython bug report.
3864 so that user exceptions don't trigger an ipython bug report.
3859
3865
3860 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3866 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3861 configurable (it should have always been so).
3867 configurable (it should have always been so).
3862
3868
3863 2002-03-26 Fernando Perez <fperez@colorado.edu>
3869 2002-03-26 Fernando Perez <fperez@colorado.edu>
3864
3870
3865 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3871 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3866 and there to fix embedding namespace issues. This should all be
3872 and there to fix embedding namespace issues. This should all be
3867 done in a more elegant way.
3873 done in a more elegant way.
3868
3874
3869 2002-03-25 Fernando Perez <fperez@colorado.edu>
3875 2002-03-25 Fernando Perez <fperez@colorado.edu>
3870
3876
3871 * IPython/genutils.py (get_home_dir): Try to make it work under
3877 * IPython/genutils.py (get_home_dir): Try to make it work under
3872 win9x also.
3878 win9x also.
3873
3879
3874 2002-03-20 Fernando Perez <fperez@colorado.edu>
3880 2002-03-20 Fernando Perez <fperez@colorado.edu>
3875
3881
3876 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3882 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3877 sys.displayhook untouched upon __init__.
3883 sys.displayhook untouched upon __init__.
3878
3884
3879 2002-03-19 Fernando Perez <fperez@colorado.edu>
3885 2002-03-19 Fernando Perez <fperez@colorado.edu>
3880
3886
3881 * Released 0.2.9 (for embedding bug, basically).
3887 * Released 0.2.9 (for embedding bug, basically).
3882
3888
3883 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3889 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3884 exceptions so that enclosing shell's state can be restored.
3890 exceptions so that enclosing shell's state can be restored.
3885
3891
3886 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3892 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3887 naming conventions in the .ipython/ dir.
3893 naming conventions in the .ipython/ dir.
3888
3894
3889 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3895 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3890 from delimiters list so filenames with - in them get expanded.
3896 from delimiters list so filenames with - in them get expanded.
3891
3897
3892 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3898 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3893 sys.displayhook not being properly restored after an embedded call.
3899 sys.displayhook not being properly restored after an embedded call.
3894
3900
3895 2002-03-18 Fernando Perez <fperez@colorado.edu>
3901 2002-03-18 Fernando Perez <fperez@colorado.edu>
3896
3902
3897 * Released 0.2.8
3903 * Released 0.2.8
3898
3904
3899 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3905 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3900 some files weren't being included in a -upgrade.
3906 some files weren't being included in a -upgrade.
3901 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3907 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3902 on' so that the first tab completes.
3908 on' so that the first tab completes.
3903 (InteractiveShell.handle_magic): fixed bug with spaces around
3909 (InteractiveShell.handle_magic): fixed bug with spaces around
3904 quotes breaking many magic commands.
3910 quotes breaking many magic commands.
3905
3911
3906 * setup.py: added note about ignoring the syntax error messages at
3912 * setup.py: added note about ignoring the syntax error messages at
3907 installation.
3913 installation.
3908
3914
3909 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3915 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3910 streamlining the gnuplot interface, now there's only one magic @gp.
3916 streamlining the gnuplot interface, now there's only one magic @gp.
3911
3917
3912 2002-03-17 Fernando Perez <fperez@colorado.edu>
3918 2002-03-17 Fernando Perez <fperez@colorado.edu>
3913
3919
3914 * IPython/UserConfig/magic_gnuplot.py: new name for the
3920 * IPython/UserConfig/magic_gnuplot.py: new name for the
3915 example-magic_pm.py file. Much enhanced system, now with a shell
3921 example-magic_pm.py file. Much enhanced system, now with a shell
3916 for communicating directly with gnuplot, one command at a time.
3922 for communicating directly with gnuplot, one command at a time.
3917
3923
3918 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3924 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3919 setting __name__=='__main__'.
3925 setting __name__=='__main__'.
3920
3926
3921 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3927 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3922 mini-shell for accessing gnuplot from inside ipython. Should
3928 mini-shell for accessing gnuplot from inside ipython. Should
3923 extend it later for grace access too. Inspired by Arnd's
3929 extend it later for grace access too. Inspired by Arnd's
3924 suggestion.
3930 suggestion.
3925
3931
3926 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3932 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3927 calling magic functions with () in their arguments. Thanks to Arnd
3933 calling magic functions with () in their arguments. Thanks to Arnd
3928 Baecker for pointing this to me.
3934 Baecker for pointing this to me.
3929
3935
3930 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3936 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3931 infinitely for integer or complex arrays (only worked with floats).
3937 infinitely for integer or complex arrays (only worked with floats).
3932
3938
3933 2002-03-16 Fernando Perez <fperez@colorado.edu>
3939 2002-03-16 Fernando Perez <fperez@colorado.edu>
3934
3940
3935 * setup.py: Merged setup and setup_windows into a single script
3941 * setup.py: Merged setup and setup_windows into a single script
3936 which properly handles things for windows users.
3942 which properly handles things for windows users.
3937
3943
3938 2002-03-15 Fernando Perez <fperez@colorado.edu>
3944 2002-03-15 Fernando Perez <fperez@colorado.edu>
3939
3945
3940 * Big change to the manual: now the magics are all automatically
3946 * Big change to the manual: now the magics are all automatically
3941 documented. This information is generated from their docstrings
3947 documented. This information is generated from their docstrings
3942 and put in a latex file included by the manual lyx file. This way
3948 and put in a latex file included by the manual lyx file. This way
3943 we get always up to date information for the magics. The manual
3949 we get always up to date information for the magics. The manual
3944 now also has proper version information, also auto-synced.
3950 now also has proper version information, also auto-synced.
3945
3951
3946 For this to work, an undocumented --magic_docstrings option was added.
3952 For this to work, an undocumented --magic_docstrings option was added.
3947
3953
3948 2002-03-13 Fernando Perez <fperez@colorado.edu>
3954 2002-03-13 Fernando Perez <fperez@colorado.edu>
3949
3955
3950 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3956 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3951 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3957 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3952
3958
3953 2002-03-12 Fernando Perez <fperez@colorado.edu>
3959 2002-03-12 Fernando Perez <fperez@colorado.edu>
3954
3960
3955 * IPython/ultraTB.py (TermColors): changed color escapes again to
3961 * IPython/ultraTB.py (TermColors): changed color escapes again to
3956 fix the (old, reintroduced) line-wrapping bug. Basically, if
3962 fix the (old, reintroduced) line-wrapping bug. Basically, if
3957 \001..\002 aren't given in the color escapes, lines get wrapped
3963 \001..\002 aren't given in the color escapes, lines get wrapped
3958 weirdly. But giving those screws up old xterms and emacs terms. So
3964 weirdly. But giving those screws up old xterms and emacs terms. So
3959 I added some logic for emacs terms to be ok, but I can't identify old
3965 I added some logic for emacs terms to be ok, but I can't identify old
3960 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3966 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3961
3967
3962 2002-03-10 Fernando Perez <fperez@colorado.edu>
3968 2002-03-10 Fernando Perez <fperez@colorado.edu>
3963
3969
3964 * IPython/usage.py (__doc__): Various documentation cleanups and
3970 * IPython/usage.py (__doc__): Various documentation cleanups and
3965 updates, both in usage docstrings and in the manual.
3971 updates, both in usage docstrings and in the manual.
3966
3972
3967 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3973 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3968 handling of caching. Set minimum acceptabe value for having a
3974 handling of caching. Set minimum acceptabe value for having a
3969 cache at 20 values.
3975 cache at 20 values.
3970
3976
3971 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3977 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3972 install_first_time function to a method, renamed it and added an
3978 install_first_time function to a method, renamed it and added an
3973 'upgrade' mode. Now people can update their config directory with
3979 'upgrade' mode. Now people can update their config directory with
3974 a simple command line switch (-upgrade, also new).
3980 a simple command line switch (-upgrade, also new).
3975
3981
3976 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3982 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3977 @file (convenient for automagic users under Python >= 2.2).
3983 @file (convenient for automagic users under Python >= 2.2).
3978 Removed @files (it seemed more like a plural than an abbrev. of
3984 Removed @files (it seemed more like a plural than an abbrev. of
3979 'file show').
3985 'file show').
3980
3986
3981 * IPython/iplib.py (install_first_time): Fixed crash if there were
3987 * IPython/iplib.py (install_first_time): Fixed crash if there were
3982 backup files ('~') in .ipython/ install directory.
3988 backup files ('~') in .ipython/ install directory.
3983
3989
3984 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3990 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3985 system. Things look fine, but these changes are fairly
3991 system. Things look fine, but these changes are fairly
3986 intrusive. Test them for a few days.
3992 intrusive. Test them for a few days.
3987
3993
3988 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3994 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3989 the prompts system. Now all in/out prompt strings are user
3995 the prompts system. Now all in/out prompt strings are user
3990 controllable. This is particularly useful for embedding, as one
3996 controllable. This is particularly useful for embedding, as one
3991 can tag embedded instances with particular prompts.
3997 can tag embedded instances with particular prompts.
3992
3998
3993 Also removed global use of sys.ps1/2, which now allows nested
3999 Also removed global use of sys.ps1/2, which now allows nested
3994 embeddings without any problems. Added command-line options for
4000 embeddings without any problems. Added command-line options for
3995 the prompt strings.
4001 the prompt strings.
3996
4002
3997 2002-03-08 Fernando Perez <fperez@colorado.edu>
4003 2002-03-08 Fernando Perez <fperez@colorado.edu>
3998
4004
3999 * IPython/UserConfig/example-embed-short.py (ipshell): added
4005 * IPython/UserConfig/example-embed-short.py (ipshell): added
4000 example file with the bare minimum code for embedding.
4006 example file with the bare minimum code for embedding.
4001
4007
4002 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4008 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4003 functionality for the embeddable shell to be activated/deactivated
4009 functionality for the embeddable shell to be activated/deactivated
4004 either globally or at each call.
4010 either globally or at each call.
4005
4011
4006 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4012 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4007 rewriting the prompt with '--->' for auto-inputs with proper
4013 rewriting the prompt with '--->' for auto-inputs with proper
4008 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4014 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4009 this is handled by the prompts class itself, as it should.
4015 this is handled by the prompts class itself, as it should.
4010
4016
4011 2002-03-05 Fernando Perez <fperez@colorado.edu>
4017 2002-03-05 Fernando Perez <fperez@colorado.edu>
4012
4018
4013 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4019 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4014 @logstart to avoid name clashes with the math log function.
4020 @logstart to avoid name clashes with the math log function.
4015
4021
4016 * Big updates to X/Emacs section of the manual.
4022 * Big updates to X/Emacs section of the manual.
4017
4023
4018 * Removed ipython_emacs. Milan explained to me how to pass
4024 * Removed ipython_emacs. Milan explained to me how to pass
4019 arguments to ipython through Emacs. Some day I'm going to end up
4025 arguments to ipython through Emacs. Some day I'm going to end up
4020 learning some lisp...
4026 learning some lisp...
4021
4027
4022 2002-03-04 Fernando Perez <fperez@colorado.edu>
4028 2002-03-04 Fernando Perez <fperez@colorado.edu>
4023
4029
4024 * IPython/ipython_emacs: Created script to be used as the
4030 * IPython/ipython_emacs: Created script to be used as the
4025 py-python-command Emacs variable so we can pass IPython
4031 py-python-command Emacs variable so we can pass IPython
4026 parameters. I can't figure out how to tell Emacs directly to pass
4032 parameters. I can't figure out how to tell Emacs directly to pass
4027 parameters to IPython, so a dummy shell script will do it.
4033 parameters to IPython, so a dummy shell script will do it.
4028
4034
4029 Other enhancements made for things to work better under Emacs'
4035 Other enhancements made for things to work better under Emacs'
4030 various types of terminals. Many thanks to Milan Zamazal
4036 various types of terminals. Many thanks to Milan Zamazal
4031 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4037 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4032
4038
4033 2002-03-01 Fernando Perez <fperez@colorado.edu>
4039 2002-03-01 Fernando Perez <fperez@colorado.edu>
4034
4040
4035 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4041 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4036 that loading of readline is now optional. This gives better
4042 that loading of readline is now optional. This gives better
4037 control to emacs users.
4043 control to emacs users.
4038
4044
4039 * IPython/ultraTB.py (__date__): Modified color escape sequences
4045 * IPython/ultraTB.py (__date__): Modified color escape sequences
4040 and now things work fine under xterm and in Emacs' term buffers
4046 and now things work fine under xterm and in Emacs' term buffers
4041 (though not shell ones). Well, in emacs you get colors, but all
4047 (though not shell ones). Well, in emacs you get colors, but all
4042 seem to be 'light' colors (no difference between dark and light
4048 seem to be 'light' colors (no difference between dark and light
4043 ones). But the garbage chars are gone, and also in xterms. It
4049 ones). But the garbage chars are gone, and also in xterms. It
4044 seems that now I'm using 'cleaner' ansi sequences.
4050 seems that now I'm using 'cleaner' ansi sequences.
4045
4051
4046 2002-02-21 Fernando Perez <fperez@colorado.edu>
4052 2002-02-21 Fernando Perez <fperez@colorado.edu>
4047
4053
4048 * Released 0.2.7 (mainly to publish the scoping fix).
4054 * Released 0.2.7 (mainly to publish the scoping fix).
4049
4055
4050 * IPython/Logger.py (Logger.logstate): added. A corresponding
4056 * IPython/Logger.py (Logger.logstate): added. A corresponding
4051 @logstate magic was created.
4057 @logstate magic was created.
4052
4058
4053 * IPython/Magic.py: fixed nested scoping problem under Python
4059 * IPython/Magic.py: fixed nested scoping problem under Python
4054 2.1.x (automagic wasn't working).
4060 2.1.x (automagic wasn't working).
4055
4061
4056 2002-02-20 Fernando Perez <fperez@colorado.edu>
4062 2002-02-20 Fernando Perez <fperez@colorado.edu>
4057
4063
4058 * Released 0.2.6.
4064 * Released 0.2.6.
4059
4065
4060 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4066 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4061 option so that logs can come out without any headers at all.
4067 option so that logs can come out without any headers at all.
4062
4068
4063 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4069 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4064 SciPy.
4070 SciPy.
4065
4071
4066 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4072 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4067 that embedded IPython calls don't require vars() to be explicitly
4073 that embedded IPython calls don't require vars() to be explicitly
4068 passed. Now they are extracted from the caller's frame (code
4074 passed. Now they are extracted from the caller's frame (code
4069 snatched from Eric Jones' weave). Added better documentation to
4075 snatched from Eric Jones' weave). Added better documentation to
4070 the section on embedding and the example file.
4076 the section on embedding and the example file.
4071
4077
4072 * IPython/genutils.py (page): Changed so that under emacs, it just
4078 * IPython/genutils.py (page): Changed so that under emacs, it just
4073 prints the string. You can then page up and down in the emacs
4079 prints the string. You can then page up and down in the emacs
4074 buffer itself. This is how the builtin help() works.
4080 buffer itself. This is how the builtin help() works.
4075
4081
4076 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4082 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4077 macro scoping: macros need to be executed in the user's namespace
4083 macro scoping: macros need to be executed in the user's namespace
4078 to work as if they had been typed by the user.
4084 to work as if they had been typed by the user.
4079
4085
4080 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4086 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4081 execute automatically (no need to type 'exec...'). They then
4087 execute automatically (no need to type 'exec...'). They then
4082 behave like 'true macros'. The printing system was also modified
4088 behave like 'true macros'. The printing system was also modified
4083 for this to work.
4089 for this to work.
4084
4090
4085 2002-02-19 Fernando Perez <fperez@colorado.edu>
4091 2002-02-19 Fernando Perez <fperez@colorado.edu>
4086
4092
4087 * IPython/genutils.py (page_file): new function for paging files
4093 * IPython/genutils.py (page_file): new function for paging files
4088 in an OS-independent way. Also necessary for file viewing to work
4094 in an OS-independent way. Also necessary for file viewing to work
4089 well inside Emacs buffers.
4095 well inside Emacs buffers.
4090 (page): Added checks for being in an emacs buffer.
4096 (page): Added checks for being in an emacs buffer.
4091 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4097 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4092 same bug in iplib.
4098 same bug in iplib.
4093
4099
4094 2002-02-18 Fernando Perez <fperez@colorado.edu>
4100 2002-02-18 Fernando Perez <fperez@colorado.edu>
4095
4101
4096 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4102 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4097 of readline so that IPython can work inside an Emacs buffer.
4103 of readline so that IPython can work inside an Emacs buffer.
4098
4104
4099 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4105 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4100 method signatures (they weren't really bugs, but it looks cleaner
4106 method signatures (they weren't really bugs, but it looks cleaner
4101 and keeps PyChecker happy).
4107 and keeps PyChecker happy).
4102
4108
4103 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4109 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4104 for implementing various user-defined hooks. Currently only
4110 for implementing various user-defined hooks. Currently only
4105 display is done.
4111 display is done.
4106
4112
4107 * IPython/Prompts.py (CachedOutput._display): changed display
4113 * IPython/Prompts.py (CachedOutput._display): changed display
4108 functions so that they can be dynamically changed by users easily.
4114 functions so that they can be dynamically changed by users easily.
4109
4115
4110 * IPython/Extensions/numeric_formats.py (num_display): added an
4116 * IPython/Extensions/numeric_formats.py (num_display): added an
4111 extension for printing NumPy arrays in flexible manners. It
4117 extension for printing NumPy arrays in flexible manners. It
4112 doesn't do anything yet, but all the structure is in
4118 doesn't do anything yet, but all the structure is in
4113 place. Ultimately the plan is to implement output format control
4119 place. Ultimately the plan is to implement output format control
4114 like in Octave.
4120 like in Octave.
4115
4121
4116 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4122 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4117 methods are found at run-time by all the automatic machinery.
4123 methods are found at run-time by all the automatic machinery.
4118
4124
4119 2002-02-17 Fernando Perez <fperez@colorado.edu>
4125 2002-02-17 Fernando Perez <fperez@colorado.edu>
4120
4126
4121 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4127 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4122 whole file a little.
4128 whole file a little.
4123
4129
4124 * ToDo: closed this document. Now there's a new_design.lyx
4130 * ToDo: closed this document. Now there's a new_design.lyx
4125 document for all new ideas. Added making a pdf of it for the
4131 document for all new ideas. Added making a pdf of it for the
4126 end-user distro.
4132 end-user distro.
4127
4133
4128 * IPython/Logger.py (Logger.switch_log): Created this to replace
4134 * IPython/Logger.py (Logger.switch_log): Created this to replace
4129 logon() and logoff(). It also fixes a nasty crash reported by
4135 logon() and logoff(). It also fixes a nasty crash reported by
4130 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4136 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4131
4137
4132 * IPython/iplib.py (complete): got auto-completion to work with
4138 * IPython/iplib.py (complete): got auto-completion to work with
4133 automagic (I had wanted this for a long time).
4139 automagic (I had wanted this for a long time).
4134
4140
4135 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4141 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4136 to @file, since file() is now a builtin and clashes with automagic
4142 to @file, since file() is now a builtin and clashes with automagic
4137 for @file.
4143 for @file.
4138
4144
4139 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4145 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4140 of this was previously in iplib, which had grown to more than 2000
4146 of this was previously in iplib, which had grown to more than 2000
4141 lines, way too long. No new functionality, but it makes managing
4147 lines, way too long. No new functionality, but it makes managing
4142 the code a bit easier.
4148 the code a bit easier.
4143
4149
4144 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4150 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4145 information to crash reports.
4151 information to crash reports.
4146
4152
4147 2002-02-12 Fernando Perez <fperez@colorado.edu>
4153 2002-02-12 Fernando Perez <fperez@colorado.edu>
4148
4154
4149 * Released 0.2.5.
4155 * Released 0.2.5.
4150
4156
4151 2002-02-11 Fernando Perez <fperez@colorado.edu>
4157 2002-02-11 Fernando Perez <fperez@colorado.edu>
4152
4158
4153 * Wrote a relatively complete Windows installer. It puts
4159 * Wrote a relatively complete Windows installer. It puts
4154 everything in place, creates Start Menu entries and fixes the
4160 everything in place, creates Start Menu entries and fixes the
4155 color issues. Nothing fancy, but it works.
4161 color issues. Nothing fancy, but it works.
4156
4162
4157 2002-02-10 Fernando Perez <fperez@colorado.edu>
4163 2002-02-10 Fernando Perez <fperez@colorado.edu>
4158
4164
4159 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4165 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4160 os.path.expanduser() call so that we can type @run ~/myfile.py and
4166 os.path.expanduser() call so that we can type @run ~/myfile.py and
4161 have thigs work as expected.
4167 have thigs work as expected.
4162
4168
4163 * IPython/genutils.py (page): fixed exception handling so things
4169 * IPython/genutils.py (page): fixed exception handling so things
4164 work both in Unix and Windows correctly. Quitting a pager triggers
4170 work both in Unix and Windows correctly. Quitting a pager triggers
4165 an IOError/broken pipe in Unix, and in windows not finding a pager
4171 an IOError/broken pipe in Unix, and in windows not finding a pager
4166 is also an IOError, so I had to actually look at the return value
4172 is also an IOError, so I had to actually look at the return value
4167 of the exception, not just the exception itself. Should be ok now.
4173 of the exception, not just the exception itself. Should be ok now.
4168
4174
4169 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4175 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4170 modified to allow case-insensitive color scheme changes.
4176 modified to allow case-insensitive color scheme changes.
4171
4177
4172 2002-02-09 Fernando Perez <fperez@colorado.edu>
4178 2002-02-09 Fernando Perez <fperez@colorado.edu>
4173
4179
4174 * IPython/genutils.py (native_line_ends): new function to leave
4180 * IPython/genutils.py (native_line_ends): new function to leave
4175 user config files with os-native line-endings.
4181 user config files with os-native line-endings.
4176
4182
4177 * README and manual updates.
4183 * README and manual updates.
4178
4184
4179 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4185 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4180 instead of StringType to catch Unicode strings.
4186 instead of StringType to catch Unicode strings.
4181
4187
4182 * IPython/genutils.py (filefind): fixed bug for paths with
4188 * IPython/genutils.py (filefind): fixed bug for paths with
4183 embedded spaces (very common in Windows).
4189 embedded spaces (very common in Windows).
4184
4190
4185 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4191 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4186 files under Windows, so that they get automatically associated
4192 files under Windows, so that they get automatically associated
4187 with a text editor. Windows makes it a pain to handle
4193 with a text editor. Windows makes it a pain to handle
4188 extension-less files.
4194 extension-less files.
4189
4195
4190 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4196 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4191 warning about readline only occur for Posix. In Windows there's no
4197 warning about readline only occur for Posix. In Windows there's no
4192 way to get readline, so why bother with the warning.
4198 way to get readline, so why bother with the warning.
4193
4199
4194 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4200 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4195 for __str__ instead of dir(self), since dir() changed in 2.2.
4201 for __str__ instead of dir(self), since dir() changed in 2.2.
4196
4202
4197 * Ported to Windows! Tested on XP, I suspect it should work fine
4203 * Ported to Windows! Tested on XP, I suspect it should work fine
4198 on NT/2000, but I don't think it will work on 98 et al. That
4204 on NT/2000, but I don't think it will work on 98 et al. That
4199 series of Windows is such a piece of junk anyway that I won't try
4205 series of Windows is such a piece of junk anyway that I won't try
4200 porting it there. The XP port was straightforward, showed a few
4206 porting it there. The XP port was straightforward, showed a few
4201 bugs here and there (fixed all), in particular some string
4207 bugs here and there (fixed all), in particular some string
4202 handling stuff which required considering Unicode strings (which
4208 handling stuff which required considering Unicode strings (which
4203 Windows uses). This is good, but hasn't been too tested :) No
4209 Windows uses). This is good, but hasn't been too tested :) No
4204 fancy installer yet, I'll put a note in the manual so people at
4210 fancy installer yet, I'll put a note in the manual so people at
4205 least make manually a shortcut.
4211 least make manually a shortcut.
4206
4212
4207 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4213 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4208 into a single one, "colors". This now controls both prompt and
4214 into a single one, "colors". This now controls both prompt and
4209 exception color schemes, and can be changed both at startup
4215 exception color schemes, and can be changed both at startup
4210 (either via command-line switches or via ipythonrc files) and at
4216 (either via command-line switches or via ipythonrc files) and at
4211 runtime, with @colors.
4217 runtime, with @colors.
4212 (Magic.magic_run): renamed @prun to @run and removed the old
4218 (Magic.magic_run): renamed @prun to @run and removed the old
4213 @run. The two were too similar to warrant keeping both.
4219 @run. The two were too similar to warrant keeping both.
4214
4220
4215 2002-02-03 Fernando Perez <fperez@colorado.edu>
4221 2002-02-03 Fernando Perez <fperez@colorado.edu>
4216
4222
4217 * IPython/iplib.py (install_first_time): Added comment on how to
4223 * IPython/iplib.py (install_first_time): Added comment on how to
4218 configure the color options for first-time users. Put a <return>
4224 configure the color options for first-time users. Put a <return>
4219 request at the end so that small-terminal users get a chance to
4225 request at the end so that small-terminal users get a chance to
4220 read the startup info.
4226 read the startup info.
4221
4227
4222 2002-01-23 Fernando Perez <fperez@colorado.edu>
4228 2002-01-23 Fernando Perez <fperez@colorado.edu>
4223
4229
4224 * IPython/iplib.py (CachedOutput.update): Changed output memory
4230 * IPython/iplib.py (CachedOutput.update): Changed output memory
4225 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4231 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4226 input history we still use _i. Did this b/c these variable are
4232 input history we still use _i. Did this b/c these variable are
4227 very commonly used in interactive work, so the less we need to
4233 very commonly used in interactive work, so the less we need to
4228 type the better off we are.
4234 type the better off we are.
4229 (Magic.magic_prun): updated @prun to better handle the namespaces
4235 (Magic.magic_prun): updated @prun to better handle the namespaces
4230 the file will run in, including a fix for __name__ not being set
4236 the file will run in, including a fix for __name__ not being set
4231 before.
4237 before.
4232
4238
4233 2002-01-20 Fernando Perez <fperez@colorado.edu>
4239 2002-01-20 Fernando Perez <fperez@colorado.edu>
4234
4240
4235 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4241 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4236 extra garbage for Python 2.2. Need to look more carefully into
4242 extra garbage for Python 2.2. Need to look more carefully into
4237 this later.
4243 this later.
4238
4244
4239 2002-01-19 Fernando Perez <fperez@colorado.edu>
4245 2002-01-19 Fernando Perez <fperez@colorado.edu>
4240
4246
4241 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4247 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4242 display SyntaxError exceptions properly formatted when they occur
4248 display SyntaxError exceptions properly formatted when they occur
4243 (they can be triggered by imported code).
4249 (they can be triggered by imported code).
4244
4250
4245 2002-01-18 Fernando Perez <fperez@colorado.edu>
4251 2002-01-18 Fernando Perez <fperez@colorado.edu>
4246
4252
4247 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4253 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4248 SyntaxError exceptions are reported nicely formatted, instead of
4254 SyntaxError exceptions are reported nicely formatted, instead of
4249 spitting out only offset information as before.
4255 spitting out only offset information as before.
4250 (Magic.magic_prun): Added the @prun function for executing
4256 (Magic.magic_prun): Added the @prun function for executing
4251 programs with command line args inside IPython.
4257 programs with command line args inside IPython.
4252
4258
4253 2002-01-16 Fernando Perez <fperez@colorado.edu>
4259 2002-01-16 Fernando Perez <fperez@colorado.edu>
4254
4260
4255 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4261 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4256 to *not* include the last item given in a range. This brings their
4262 to *not* include the last item given in a range. This brings their
4257 behavior in line with Python's slicing:
4263 behavior in line with Python's slicing:
4258 a[n1:n2] -> a[n1]...a[n2-1]
4264 a[n1:n2] -> a[n1]...a[n2-1]
4259 It may be a bit less convenient, but I prefer to stick to Python's
4265 It may be a bit less convenient, but I prefer to stick to Python's
4260 conventions *everywhere*, so users never have to wonder.
4266 conventions *everywhere*, so users never have to wonder.
4261 (Magic.magic_macro): Added @macro function to ease the creation of
4267 (Magic.magic_macro): Added @macro function to ease the creation of
4262 macros.
4268 macros.
4263
4269
4264 2002-01-05 Fernando Perez <fperez@colorado.edu>
4270 2002-01-05 Fernando Perez <fperez@colorado.edu>
4265
4271
4266 * Released 0.2.4.
4272 * Released 0.2.4.
4267
4273
4268 * IPython/iplib.py (Magic.magic_pdef):
4274 * IPython/iplib.py (Magic.magic_pdef):
4269 (InteractiveShell.safe_execfile): report magic lines and error
4275 (InteractiveShell.safe_execfile): report magic lines and error
4270 lines without line numbers so one can easily copy/paste them for
4276 lines without line numbers so one can easily copy/paste them for
4271 re-execution.
4277 re-execution.
4272
4278
4273 * Updated manual with recent changes.
4279 * Updated manual with recent changes.
4274
4280
4275 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4281 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4276 docstring printing when class? is called. Very handy for knowing
4282 docstring printing when class? is called. Very handy for knowing
4277 how to create class instances (as long as __init__ is well
4283 how to create class instances (as long as __init__ is well
4278 documented, of course :)
4284 documented, of course :)
4279 (Magic.magic_doc): print both class and constructor docstrings.
4285 (Magic.magic_doc): print both class and constructor docstrings.
4280 (Magic.magic_pdef): give constructor info if passed a class and
4286 (Magic.magic_pdef): give constructor info if passed a class and
4281 __call__ info for callable object instances.
4287 __call__ info for callable object instances.
4282
4288
4283 2002-01-04 Fernando Perez <fperez@colorado.edu>
4289 2002-01-04 Fernando Perez <fperez@colorado.edu>
4284
4290
4285 * Made deep_reload() off by default. It doesn't always work
4291 * Made deep_reload() off by default. It doesn't always work
4286 exactly as intended, so it's probably safer to have it off. It's
4292 exactly as intended, so it's probably safer to have it off. It's
4287 still available as dreload() anyway, so nothing is lost.
4293 still available as dreload() anyway, so nothing is lost.
4288
4294
4289 2002-01-02 Fernando Perez <fperez@colorado.edu>
4295 2002-01-02 Fernando Perez <fperez@colorado.edu>
4290
4296
4291 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4297 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4292 so I wanted an updated release).
4298 so I wanted an updated release).
4293
4299
4294 2001-12-27 Fernando Perez <fperez@colorado.edu>
4300 2001-12-27 Fernando Perez <fperez@colorado.edu>
4295
4301
4296 * IPython/iplib.py (InteractiveShell.interact): Added the original
4302 * IPython/iplib.py (InteractiveShell.interact): Added the original
4297 code from 'code.py' for this module in order to change the
4303 code from 'code.py' for this module in order to change the
4298 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4304 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4299 the history cache would break when the user hit Ctrl-C, and
4305 the history cache would break when the user hit Ctrl-C, and
4300 interact() offers no way to add any hooks to it.
4306 interact() offers no way to add any hooks to it.
4301
4307
4302 2001-12-23 Fernando Perez <fperez@colorado.edu>
4308 2001-12-23 Fernando Perez <fperez@colorado.edu>
4303
4309
4304 * setup.py: added check for 'MANIFEST' before trying to remove
4310 * setup.py: added check for 'MANIFEST' before trying to remove
4305 it. Thanks to Sean Reifschneider.
4311 it. Thanks to Sean Reifschneider.
4306
4312
4307 2001-12-22 Fernando Perez <fperez@colorado.edu>
4313 2001-12-22 Fernando Perez <fperez@colorado.edu>
4308
4314
4309 * Released 0.2.2.
4315 * Released 0.2.2.
4310
4316
4311 * Finished (reasonably) writing the manual. Later will add the
4317 * Finished (reasonably) writing the manual. Later will add the
4312 python-standard navigation stylesheets, but for the time being
4318 python-standard navigation stylesheets, but for the time being
4313 it's fairly complete. Distribution will include html and pdf
4319 it's fairly complete. Distribution will include html and pdf
4314 versions.
4320 versions.
4315
4321
4316 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4322 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4317 (MayaVi author).
4323 (MayaVi author).
4318
4324
4319 2001-12-21 Fernando Perez <fperez@colorado.edu>
4325 2001-12-21 Fernando Perez <fperez@colorado.edu>
4320
4326
4321 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4327 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4322 good public release, I think (with the manual and the distutils
4328 good public release, I think (with the manual and the distutils
4323 installer). The manual can use some work, but that can go
4329 installer). The manual can use some work, but that can go
4324 slowly. Otherwise I think it's quite nice for end users. Next
4330 slowly. Otherwise I think it's quite nice for end users. Next
4325 summer, rewrite the guts of it...
4331 summer, rewrite the guts of it...
4326
4332
4327 * Changed format of ipythonrc files to use whitespace as the
4333 * Changed format of ipythonrc files to use whitespace as the
4328 separator instead of an explicit '='. Cleaner.
4334 separator instead of an explicit '='. Cleaner.
4329
4335
4330 2001-12-20 Fernando Perez <fperez@colorado.edu>
4336 2001-12-20 Fernando Perez <fperez@colorado.edu>
4331
4337
4332 * Started a manual in LyX. For now it's just a quick merge of the
4338 * Started a manual in LyX. For now it's just a quick merge of the
4333 various internal docstrings and READMEs. Later it may grow into a
4339 various internal docstrings and READMEs. Later it may grow into a
4334 nice, full-blown manual.
4340 nice, full-blown manual.
4335
4341
4336 * Set up a distutils based installer. Installation should now be
4342 * Set up a distutils based installer. Installation should now be
4337 trivially simple for end-users.
4343 trivially simple for end-users.
4338
4344
4339 2001-12-11 Fernando Perez <fperez@colorado.edu>
4345 2001-12-11 Fernando Perez <fperez@colorado.edu>
4340
4346
4341 * Released 0.2.0. First public release, announced it at
4347 * Released 0.2.0. First public release, announced it at
4342 comp.lang.python. From now on, just bugfixes...
4348 comp.lang.python. From now on, just bugfixes...
4343
4349
4344 * Went through all the files, set copyright/license notices and
4350 * Went through all the files, set copyright/license notices and
4345 cleaned up things. Ready for release.
4351 cleaned up things. Ready for release.
4346
4352
4347 2001-12-10 Fernando Perez <fperez@colorado.edu>
4353 2001-12-10 Fernando Perez <fperez@colorado.edu>
4348
4354
4349 * Changed the first-time installer not to use tarfiles. It's more
4355 * Changed the first-time installer not to use tarfiles. It's more
4350 robust now and less unix-dependent. Also makes it easier for
4356 robust now and less unix-dependent. Also makes it easier for
4351 people to later upgrade versions.
4357 people to later upgrade versions.
4352
4358
4353 * Changed @exit to @abort to reflect the fact that it's pretty
4359 * Changed @exit to @abort to reflect the fact that it's pretty
4354 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4360 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4355 becomes significant only when IPyhton is embedded: in that case,
4361 becomes significant only when IPyhton is embedded: in that case,
4356 C-D closes IPython only, but @abort kills the enclosing program
4362 C-D closes IPython only, but @abort kills the enclosing program
4357 too (unless it had called IPython inside a try catching
4363 too (unless it had called IPython inside a try catching
4358 SystemExit).
4364 SystemExit).
4359
4365
4360 * Created Shell module which exposes the actuall IPython Shell
4366 * Created Shell module which exposes the actuall IPython Shell
4361 classes, currently the normal and the embeddable one. This at
4367 classes, currently the normal and the embeddable one. This at
4362 least offers a stable interface we won't need to change when
4368 least offers a stable interface we won't need to change when
4363 (later) the internals are rewritten. That rewrite will be confined
4369 (later) the internals are rewritten. That rewrite will be confined
4364 to iplib and ipmaker, but the Shell interface should remain as is.
4370 to iplib and ipmaker, but the Shell interface should remain as is.
4365
4371
4366 * Added embed module which offers an embeddable IPShell object,
4372 * Added embed module which offers an embeddable IPShell object,
4367 useful to fire up IPython *inside* a running program. Great for
4373 useful to fire up IPython *inside* a running program. Great for
4368 debugging or dynamical data analysis.
4374 debugging or dynamical data analysis.
4369
4375
4370 2001-12-08 Fernando Perez <fperez@colorado.edu>
4376 2001-12-08 Fernando Perez <fperez@colorado.edu>
4371
4377
4372 * Fixed small bug preventing seeing info from methods of defined
4378 * Fixed small bug preventing seeing info from methods of defined
4373 objects (incorrect namespace in _ofind()).
4379 objects (incorrect namespace in _ofind()).
4374
4380
4375 * Documentation cleanup. Moved the main usage docstrings to a
4381 * Documentation cleanup. Moved the main usage docstrings to a
4376 separate file, usage.py (cleaner to maintain, and hopefully in the
4382 separate file, usage.py (cleaner to maintain, and hopefully in the
4377 future some perlpod-like way of producing interactive, man and
4383 future some perlpod-like way of producing interactive, man and
4378 html docs out of it will be found).
4384 html docs out of it will be found).
4379
4385
4380 * Added @profile to see your profile at any time.
4386 * Added @profile to see your profile at any time.
4381
4387
4382 * Added @p as an alias for 'print'. It's especially convenient if
4388 * Added @p as an alias for 'print'. It's especially convenient if
4383 using automagic ('p x' prints x).
4389 using automagic ('p x' prints x).
4384
4390
4385 * Small cleanups and fixes after a pychecker run.
4391 * Small cleanups and fixes after a pychecker run.
4386
4392
4387 * Changed the @cd command to handle @cd - and @cd -<n> for
4393 * Changed the @cd command to handle @cd - and @cd -<n> for
4388 visiting any directory in _dh.
4394 visiting any directory in _dh.
4389
4395
4390 * Introduced _dh, a history of visited directories. @dhist prints
4396 * Introduced _dh, a history of visited directories. @dhist prints
4391 it out with numbers.
4397 it out with numbers.
4392
4398
4393 2001-12-07 Fernando Perez <fperez@colorado.edu>
4399 2001-12-07 Fernando Perez <fperez@colorado.edu>
4394
4400
4395 * Released 0.1.22
4401 * Released 0.1.22
4396
4402
4397 * Made initialization a bit more robust against invalid color
4403 * Made initialization a bit more robust against invalid color
4398 options in user input (exit, not traceback-crash).
4404 options in user input (exit, not traceback-crash).
4399
4405
4400 * Changed the bug crash reporter to write the report only in the
4406 * Changed the bug crash reporter to write the report only in the
4401 user's .ipython directory. That way IPython won't litter people's
4407 user's .ipython directory. That way IPython won't litter people's
4402 hard disks with crash files all over the place. Also print on
4408 hard disks with crash files all over the place. Also print on
4403 screen the necessary mail command.
4409 screen the necessary mail command.
4404
4410
4405 * With the new ultraTB, implemented LightBG color scheme for light
4411 * With the new ultraTB, implemented LightBG color scheme for light
4406 background terminals. A lot of people like white backgrounds, so I
4412 background terminals. A lot of people like white backgrounds, so I
4407 guess we should at least give them something readable.
4413 guess we should at least give them something readable.
4408
4414
4409 2001-12-06 Fernando Perez <fperez@colorado.edu>
4415 2001-12-06 Fernando Perez <fperez@colorado.edu>
4410
4416
4411 * Modified the structure of ultraTB. Now there's a proper class
4417 * Modified the structure of ultraTB. Now there's a proper class
4412 for tables of color schemes which allow adding schemes easily and
4418 for tables of color schemes which allow adding schemes easily and
4413 switching the active scheme without creating a new instance every
4419 switching the active scheme without creating a new instance every
4414 time (which was ridiculous). The syntax for creating new schemes
4420 time (which was ridiculous). The syntax for creating new schemes
4415 is also cleaner. I think ultraTB is finally done, with a clean
4421 is also cleaner. I think ultraTB is finally done, with a clean
4416 class structure. Names are also much cleaner (now there's proper
4422 class structure. Names are also much cleaner (now there's proper
4417 color tables, no need for every variable to also have 'color' in
4423 color tables, no need for every variable to also have 'color' in
4418 its name).
4424 its name).
4419
4425
4420 * Broke down genutils into separate files. Now genutils only
4426 * Broke down genutils into separate files. Now genutils only
4421 contains utility functions, and classes have been moved to their
4427 contains utility functions, and classes have been moved to their
4422 own files (they had enough independent functionality to warrant
4428 own files (they had enough independent functionality to warrant
4423 it): ConfigLoader, OutputTrap, Struct.
4429 it): ConfigLoader, OutputTrap, Struct.
4424
4430
4425 2001-12-05 Fernando Perez <fperez@colorado.edu>
4431 2001-12-05 Fernando Perez <fperez@colorado.edu>
4426
4432
4427 * IPython turns 21! Released version 0.1.21, as a candidate for
4433 * IPython turns 21! Released version 0.1.21, as a candidate for
4428 public consumption. If all goes well, release in a few days.
4434 public consumption. If all goes well, release in a few days.
4429
4435
4430 * Fixed path bug (files in Extensions/ directory wouldn't be found
4436 * Fixed path bug (files in Extensions/ directory wouldn't be found
4431 unless IPython/ was explicitly in sys.path).
4437 unless IPython/ was explicitly in sys.path).
4432
4438
4433 * Extended the FlexCompleter class as MagicCompleter to allow
4439 * Extended the FlexCompleter class as MagicCompleter to allow
4434 completion of @-starting lines.
4440 completion of @-starting lines.
4435
4441
4436 * Created __release__.py file as a central repository for release
4442 * Created __release__.py file as a central repository for release
4437 info that other files can read from.
4443 info that other files can read from.
4438
4444
4439 * Fixed small bug in logging: when logging was turned on in
4445 * Fixed small bug in logging: when logging was turned on in
4440 mid-session, old lines with special meanings (!@?) were being
4446 mid-session, old lines with special meanings (!@?) were being
4441 logged without the prepended comment, which is necessary since
4447 logged without the prepended comment, which is necessary since
4442 they are not truly valid python syntax. This should make session
4448 they are not truly valid python syntax. This should make session
4443 restores produce less errors.
4449 restores produce less errors.
4444
4450
4445 * The namespace cleanup forced me to make a FlexCompleter class
4451 * The namespace cleanup forced me to make a FlexCompleter class
4446 which is nothing but a ripoff of rlcompleter, but with selectable
4452 which is nothing but a ripoff of rlcompleter, but with selectable
4447 namespace (rlcompleter only works in __main__.__dict__). I'll try
4453 namespace (rlcompleter only works in __main__.__dict__). I'll try
4448 to submit a note to the authors to see if this change can be
4454 to submit a note to the authors to see if this change can be
4449 incorporated in future rlcompleter releases (Dec.6: done)
4455 incorporated in future rlcompleter releases (Dec.6: done)
4450
4456
4451 * More fixes to namespace handling. It was a mess! Now all
4457 * More fixes to namespace handling. It was a mess! Now all
4452 explicit references to __main__.__dict__ are gone (except when
4458 explicit references to __main__.__dict__ are gone (except when
4453 really needed) and everything is handled through the namespace
4459 really needed) and everything is handled through the namespace
4454 dicts in the IPython instance. We seem to be getting somewhere
4460 dicts in the IPython instance. We seem to be getting somewhere
4455 with this, finally...
4461 with this, finally...
4456
4462
4457 * Small documentation updates.
4463 * Small documentation updates.
4458
4464
4459 * Created the Extensions directory under IPython (with an
4465 * Created the Extensions directory under IPython (with an
4460 __init__.py). Put the PhysicalQ stuff there. This directory should
4466 __init__.py). Put the PhysicalQ stuff there. This directory should
4461 be used for all special-purpose extensions.
4467 be used for all special-purpose extensions.
4462
4468
4463 * File renaming:
4469 * File renaming:
4464 ipythonlib --> ipmaker
4470 ipythonlib --> ipmaker
4465 ipplib --> iplib
4471 ipplib --> iplib
4466 This makes a bit more sense in terms of what these files actually do.
4472 This makes a bit more sense in terms of what these files actually do.
4467
4473
4468 * Moved all the classes and functions in ipythonlib to ipplib, so
4474 * Moved all the classes and functions in ipythonlib to ipplib, so
4469 now ipythonlib only has make_IPython(). This will ease up its
4475 now ipythonlib only has make_IPython(). This will ease up its
4470 splitting in smaller functional chunks later.
4476 splitting in smaller functional chunks later.
4471
4477
4472 * Cleaned up (done, I think) output of @whos. Better column
4478 * Cleaned up (done, I think) output of @whos. Better column
4473 formatting, and now shows str(var) for as much as it can, which is
4479 formatting, and now shows str(var) for as much as it can, which is
4474 typically what one gets with a 'print var'.
4480 typically what one gets with a 'print var'.
4475
4481
4476 2001-12-04 Fernando Perez <fperez@colorado.edu>
4482 2001-12-04 Fernando Perez <fperez@colorado.edu>
4477
4483
4478 * Fixed namespace problems. Now builtin/IPyhton/user names get
4484 * Fixed namespace problems. Now builtin/IPyhton/user names get
4479 properly reported in their namespace. Internal namespace handling
4485 properly reported in their namespace. Internal namespace handling
4480 is finally getting decent (not perfect yet, but much better than
4486 is finally getting decent (not perfect yet, but much better than
4481 the ad-hoc mess we had).
4487 the ad-hoc mess we had).
4482
4488
4483 * Removed -exit option. If people just want to run a python
4489 * Removed -exit option. If people just want to run a python
4484 script, that's what the normal interpreter is for. Less
4490 script, that's what the normal interpreter is for. Less
4485 unnecessary options, less chances for bugs.
4491 unnecessary options, less chances for bugs.
4486
4492
4487 * Added a crash handler which generates a complete post-mortem if
4493 * Added a crash handler which generates a complete post-mortem if
4488 IPython crashes. This will help a lot in tracking bugs down the
4494 IPython crashes. This will help a lot in tracking bugs down the
4489 road.
4495 road.
4490
4496
4491 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4497 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4492 which were boud to functions being reassigned would bypass the
4498 which were boud to functions being reassigned would bypass the
4493 logger, breaking the sync of _il with the prompt counter. This
4499 logger, breaking the sync of _il with the prompt counter. This
4494 would then crash IPython later when a new line was logged.
4500 would then crash IPython later when a new line was logged.
4495
4501
4496 2001-12-02 Fernando Perez <fperez@colorado.edu>
4502 2001-12-02 Fernando Perez <fperez@colorado.edu>
4497
4503
4498 * Made IPython a package. This means people don't have to clutter
4504 * Made IPython a package. This means people don't have to clutter
4499 their sys.path with yet another directory. Changed the INSTALL
4505 their sys.path with yet another directory. Changed the INSTALL
4500 file accordingly.
4506 file accordingly.
4501
4507
4502 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4508 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4503 sorts its output (so @who shows it sorted) and @whos formats the
4509 sorts its output (so @who shows it sorted) and @whos formats the
4504 table according to the width of the first column. Nicer, easier to
4510 table according to the width of the first column. Nicer, easier to
4505 read. Todo: write a generic table_format() which takes a list of
4511 read. Todo: write a generic table_format() which takes a list of
4506 lists and prints it nicely formatted, with optional row/column
4512 lists and prints it nicely formatted, with optional row/column
4507 separators and proper padding and justification.
4513 separators and proper padding and justification.
4508
4514
4509 * Released 0.1.20
4515 * Released 0.1.20
4510
4516
4511 * Fixed bug in @log which would reverse the inputcache list (a
4517 * Fixed bug in @log which would reverse the inputcache list (a
4512 copy operation was missing).
4518 copy operation was missing).
4513
4519
4514 * Code cleanup. @config was changed to use page(). Better, since
4520 * Code cleanup. @config was changed to use page(). Better, since
4515 its output is always quite long.
4521 its output is always quite long.
4516
4522
4517 * Itpl is back as a dependency. I was having too many problems
4523 * Itpl is back as a dependency. I was having too many problems
4518 getting the parametric aliases to work reliably, and it's just
4524 getting the parametric aliases to work reliably, and it's just
4519 easier to code weird string operations with it than playing %()s
4525 easier to code weird string operations with it than playing %()s
4520 games. It's only ~6k, so I don't think it's too big a deal.
4526 games. It's only ~6k, so I don't think it's too big a deal.
4521
4527
4522 * Found (and fixed) a very nasty bug with history. !lines weren't
4528 * Found (and fixed) a very nasty bug with history. !lines weren't
4523 getting cached, and the out of sync caches would crash
4529 getting cached, and the out of sync caches would crash
4524 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4530 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4525 division of labor a bit better. Bug fixed, cleaner structure.
4531 division of labor a bit better. Bug fixed, cleaner structure.
4526
4532
4527 2001-12-01 Fernando Perez <fperez@colorado.edu>
4533 2001-12-01 Fernando Perez <fperez@colorado.edu>
4528
4534
4529 * Released 0.1.19
4535 * Released 0.1.19
4530
4536
4531 * Added option -n to @hist to prevent line number printing. Much
4537 * Added option -n to @hist to prevent line number printing. Much
4532 easier to copy/paste code this way.
4538 easier to copy/paste code this way.
4533
4539
4534 * Created global _il to hold the input list. Allows easy
4540 * Created global _il to hold the input list. Allows easy
4535 re-execution of blocks of code by slicing it (inspired by Janko's
4541 re-execution of blocks of code by slicing it (inspired by Janko's
4536 comment on 'macros').
4542 comment on 'macros').
4537
4543
4538 * Small fixes and doc updates.
4544 * Small fixes and doc updates.
4539
4545
4540 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4546 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4541 much too fragile with automagic. Handles properly multi-line
4547 much too fragile with automagic. Handles properly multi-line
4542 statements and takes parameters.
4548 statements and takes parameters.
4543
4549
4544 2001-11-30 Fernando Perez <fperez@colorado.edu>
4550 2001-11-30 Fernando Perez <fperez@colorado.edu>
4545
4551
4546 * Version 0.1.18 released.
4552 * Version 0.1.18 released.
4547
4553
4548 * Fixed nasty namespace bug in initial module imports.
4554 * Fixed nasty namespace bug in initial module imports.
4549
4555
4550 * Added copyright/license notes to all code files (except
4556 * Added copyright/license notes to all code files (except
4551 DPyGetOpt). For the time being, LGPL. That could change.
4557 DPyGetOpt). For the time being, LGPL. That could change.
4552
4558
4553 * Rewrote a much nicer README, updated INSTALL, cleaned up
4559 * Rewrote a much nicer README, updated INSTALL, cleaned up
4554 ipythonrc-* samples.
4560 ipythonrc-* samples.
4555
4561
4556 * Overall code/documentation cleanup. Basically ready for
4562 * Overall code/documentation cleanup. Basically ready for
4557 release. Only remaining thing: licence decision (LGPL?).
4563 release. Only remaining thing: licence decision (LGPL?).
4558
4564
4559 * Converted load_config to a class, ConfigLoader. Now recursion
4565 * Converted load_config to a class, ConfigLoader. Now recursion
4560 control is better organized. Doesn't include the same file twice.
4566 control is better organized. Doesn't include the same file twice.
4561
4567
4562 2001-11-29 Fernando Perez <fperez@colorado.edu>
4568 2001-11-29 Fernando Perez <fperez@colorado.edu>
4563
4569
4564 * Got input history working. Changed output history variables from
4570 * Got input history working. Changed output history variables from
4565 _p to _o so that _i is for input and _o for output. Just cleaner
4571 _p to _o so that _i is for input and _o for output. Just cleaner
4566 convention.
4572 convention.
4567
4573
4568 * Implemented parametric aliases. This pretty much allows the
4574 * Implemented parametric aliases. This pretty much allows the
4569 alias system to offer full-blown shell convenience, I think.
4575 alias system to offer full-blown shell convenience, I think.
4570
4576
4571 * Version 0.1.17 released, 0.1.18 opened.
4577 * Version 0.1.17 released, 0.1.18 opened.
4572
4578
4573 * dot_ipython/ipythonrc (alias): added documentation.
4579 * dot_ipython/ipythonrc (alias): added documentation.
4574 (xcolor): Fixed small bug (xcolors -> xcolor)
4580 (xcolor): Fixed small bug (xcolors -> xcolor)
4575
4581
4576 * Changed the alias system. Now alias is a magic command to define
4582 * Changed the alias system. Now alias is a magic command to define
4577 aliases just like the shell. Rationale: the builtin magics should
4583 aliases just like the shell. Rationale: the builtin magics should
4578 be there for things deeply connected to IPython's
4584 be there for things deeply connected to IPython's
4579 architecture. And this is a much lighter system for what I think
4585 architecture. And this is a much lighter system for what I think
4580 is the really important feature: allowing users to define quickly
4586 is the really important feature: allowing users to define quickly
4581 magics that will do shell things for them, so they can customize
4587 magics that will do shell things for them, so they can customize
4582 IPython easily to match their work habits. If someone is really
4588 IPython easily to match their work habits. If someone is really
4583 desperate to have another name for a builtin alias, they can
4589 desperate to have another name for a builtin alias, they can
4584 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4590 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4585 works.
4591 works.
4586
4592
4587 2001-11-28 Fernando Perez <fperez@colorado.edu>
4593 2001-11-28 Fernando Perez <fperez@colorado.edu>
4588
4594
4589 * Changed @file so that it opens the source file at the proper
4595 * Changed @file so that it opens the source file at the proper
4590 line. Since it uses less, if your EDITOR environment is
4596 line. Since it uses less, if your EDITOR environment is
4591 configured, typing v will immediately open your editor of choice
4597 configured, typing v will immediately open your editor of choice
4592 right at the line where the object is defined. Not as quick as
4598 right at the line where the object is defined. Not as quick as
4593 having a direct @edit command, but for all intents and purposes it
4599 having a direct @edit command, but for all intents and purposes it
4594 works. And I don't have to worry about writing @edit to deal with
4600 works. And I don't have to worry about writing @edit to deal with
4595 all the editors, less does that.
4601 all the editors, less does that.
4596
4602
4597 * Version 0.1.16 released, 0.1.17 opened.
4603 * Version 0.1.16 released, 0.1.17 opened.
4598
4604
4599 * Fixed some nasty bugs in the page/page_dumb combo that could
4605 * Fixed some nasty bugs in the page/page_dumb combo that could
4600 crash IPython.
4606 crash IPython.
4601
4607
4602 2001-11-27 Fernando Perez <fperez@colorado.edu>
4608 2001-11-27 Fernando Perez <fperez@colorado.edu>
4603
4609
4604 * Version 0.1.15 released, 0.1.16 opened.
4610 * Version 0.1.15 released, 0.1.16 opened.
4605
4611
4606 * Finally got ? and ?? to work for undefined things: now it's
4612 * Finally got ? and ?? to work for undefined things: now it's
4607 possible to type {}.get? and get information about the get method
4613 possible to type {}.get? and get information about the get method
4608 of dicts, or os.path? even if only os is defined (so technically
4614 of dicts, or os.path? even if only os is defined (so technically
4609 os.path isn't). Works at any level. For example, after import os,
4615 os.path isn't). Works at any level. For example, after import os,
4610 os?, os.path?, os.path.abspath? all work. This is great, took some
4616 os?, os.path?, os.path.abspath? all work. This is great, took some
4611 work in _ofind.
4617 work in _ofind.
4612
4618
4613 * Fixed more bugs with logging. The sanest way to do it was to add
4619 * Fixed more bugs with logging. The sanest way to do it was to add
4614 to @log a 'mode' parameter. Killed two in one shot (this mode
4620 to @log a 'mode' parameter. Killed two in one shot (this mode
4615 option was a request of Janko's). I think it's finally clean
4621 option was a request of Janko's). I think it's finally clean
4616 (famous last words).
4622 (famous last words).
4617
4623
4618 * Added a page_dumb() pager which does a decent job of paging on
4624 * Added a page_dumb() pager which does a decent job of paging on
4619 screen, if better things (like less) aren't available. One less
4625 screen, if better things (like less) aren't available. One less
4620 unix dependency (someday maybe somebody will port this to
4626 unix dependency (someday maybe somebody will port this to
4621 windows).
4627 windows).
4622
4628
4623 * Fixed problem in magic_log: would lock of logging out if log
4629 * Fixed problem in magic_log: would lock of logging out if log
4624 creation failed (because it would still think it had succeeded).
4630 creation failed (because it would still think it had succeeded).
4625
4631
4626 * Improved the page() function using curses to auto-detect screen
4632 * Improved the page() function using curses to auto-detect screen
4627 size. Now it can make a much better decision on whether to print
4633 size. Now it can make a much better decision on whether to print
4628 or page a string. Option screen_length was modified: a value 0
4634 or page a string. Option screen_length was modified: a value 0
4629 means auto-detect, and that's the default now.
4635 means auto-detect, and that's the default now.
4630
4636
4631 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4637 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4632 go out. I'll test it for a few days, then talk to Janko about
4638 go out. I'll test it for a few days, then talk to Janko about
4633 licences and announce it.
4639 licences and announce it.
4634
4640
4635 * Fixed the length of the auto-generated ---> prompt which appears
4641 * Fixed the length of the auto-generated ---> prompt which appears
4636 for auto-parens and auto-quotes. Getting this right isn't trivial,
4642 for auto-parens and auto-quotes. Getting this right isn't trivial,
4637 with all the color escapes, different prompt types and optional
4643 with all the color escapes, different prompt types and optional
4638 separators. But it seems to be working in all the combinations.
4644 separators. But it seems to be working in all the combinations.
4639
4645
4640 2001-11-26 Fernando Perez <fperez@colorado.edu>
4646 2001-11-26 Fernando Perez <fperez@colorado.edu>
4641
4647
4642 * Wrote a regexp filter to get option types from the option names
4648 * Wrote a regexp filter to get option types from the option names
4643 string. This eliminates the need to manually keep two duplicate
4649 string. This eliminates the need to manually keep two duplicate
4644 lists.
4650 lists.
4645
4651
4646 * Removed the unneeded check_option_names. Now options are handled
4652 * Removed the unneeded check_option_names. Now options are handled
4647 in a much saner manner and it's easy to visually check that things
4653 in a much saner manner and it's easy to visually check that things
4648 are ok.
4654 are ok.
4649
4655
4650 * Updated version numbers on all files I modified to carry a
4656 * Updated version numbers on all files I modified to carry a
4651 notice so Janko and Nathan have clear version markers.
4657 notice so Janko and Nathan have clear version markers.
4652
4658
4653 * Updated docstring for ultraTB with my changes. I should send
4659 * Updated docstring for ultraTB with my changes. I should send
4654 this to Nathan.
4660 this to Nathan.
4655
4661
4656 * Lots of small fixes. Ran everything through pychecker again.
4662 * Lots of small fixes. Ran everything through pychecker again.
4657
4663
4658 * Made loading of deep_reload an cmd line option. If it's not too
4664 * Made loading of deep_reload an cmd line option. If it's not too
4659 kosher, now people can just disable it. With -nodeep_reload it's
4665 kosher, now people can just disable it. With -nodeep_reload it's
4660 still available as dreload(), it just won't overwrite reload().
4666 still available as dreload(), it just won't overwrite reload().
4661
4667
4662 * Moved many options to the no| form (-opt and -noopt
4668 * Moved many options to the no| form (-opt and -noopt
4663 accepted). Cleaner.
4669 accepted). Cleaner.
4664
4670
4665 * Changed magic_log so that if called with no parameters, it uses
4671 * Changed magic_log so that if called with no parameters, it uses
4666 'rotate' mode. That way auto-generated logs aren't automatically
4672 'rotate' mode. That way auto-generated logs aren't automatically
4667 over-written. For normal logs, now a backup is made if it exists
4673 over-written. For normal logs, now a backup is made if it exists
4668 (only 1 level of backups). A new 'backup' mode was added to the
4674 (only 1 level of backups). A new 'backup' mode was added to the
4669 Logger class to support this. This was a request by Janko.
4675 Logger class to support this. This was a request by Janko.
4670
4676
4671 * Added @logoff/@logon to stop/restart an active log.
4677 * Added @logoff/@logon to stop/restart an active log.
4672
4678
4673 * Fixed a lot of bugs in log saving/replay. It was pretty
4679 * Fixed a lot of bugs in log saving/replay. It was pretty
4674 broken. Now special lines (!@,/) appear properly in the command
4680 broken. Now special lines (!@,/) appear properly in the command
4675 history after a log replay.
4681 history after a log replay.
4676
4682
4677 * Tried and failed to implement full session saving via pickle. My
4683 * Tried and failed to implement full session saving via pickle. My
4678 idea was to pickle __main__.__dict__, but modules can't be
4684 idea was to pickle __main__.__dict__, but modules can't be
4679 pickled. This would be a better alternative to replaying logs, but
4685 pickled. This would be a better alternative to replaying logs, but
4680 seems quite tricky to get to work. Changed -session to be called
4686 seems quite tricky to get to work. Changed -session to be called
4681 -logplay, which more accurately reflects what it does. And if we
4687 -logplay, which more accurately reflects what it does. And if we
4682 ever get real session saving working, -session is now available.
4688 ever get real session saving working, -session is now available.
4683
4689
4684 * Implemented color schemes for prompts also. As for tracebacks,
4690 * Implemented color schemes for prompts also. As for tracebacks,
4685 currently only NoColor and Linux are supported. But now the
4691 currently only NoColor and Linux are supported. But now the
4686 infrastructure is in place, based on a generic ColorScheme
4692 infrastructure is in place, based on a generic ColorScheme
4687 class. So writing and activating new schemes both for the prompts
4693 class. So writing and activating new schemes both for the prompts
4688 and the tracebacks should be straightforward.
4694 and the tracebacks should be straightforward.
4689
4695
4690 * Version 0.1.13 released, 0.1.14 opened.
4696 * Version 0.1.13 released, 0.1.14 opened.
4691
4697
4692 * Changed handling of options for output cache. Now counter is
4698 * Changed handling of options for output cache. Now counter is
4693 hardwired starting at 1 and one specifies the maximum number of
4699 hardwired starting at 1 and one specifies the maximum number of
4694 entries *in the outcache* (not the max prompt counter). This is
4700 entries *in the outcache* (not the max prompt counter). This is
4695 much better, since many statements won't increase the cache
4701 much better, since many statements won't increase the cache
4696 count. It also eliminated some confusing options, now there's only
4702 count. It also eliminated some confusing options, now there's only
4697 one: cache_size.
4703 one: cache_size.
4698
4704
4699 * Added 'alias' magic function and magic_alias option in the
4705 * Added 'alias' magic function and magic_alias option in the
4700 ipythonrc file. Now the user can easily define whatever names he
4706 ipythonrc file. Now the user can easily define whatever names he
4701 wants for the magic functions without having to play weird
4707 wants for the magic functions without having to play weird
4702 namespace games. This gives IPython a real shell-like feel.
4708 namespace games. This gives IPython a real shell-like feel.
4703
4709
4704 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4710 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4705 @ or not).
4711 @ or not).
4706
4712
4707 This was one of the last remaining 'visible' bugs (that I know
4713 This was one of the last remaining 'visible' bugs (that I know
4708 of). I think if I can clean up the session loading so it works
4714 of). I think if I can clean up the session loading so it works
4709 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4715 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4710 about licensing).
4716 about licensing).
4711
4717
4712 2001-11-25 Fernando Perez <fperez@colorado.edu>
4718 2001-11-25 Fernando Perez <fperez@colorado.edu>
4713
4719
4714 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4720 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4715 there's a cleaner distinction between what ? and ?? show.
4721 there's a cleaner distinction between what ? and ?? show.
4716
4722
4717 * Added screen_length option. Now the user can define his own
4723 * Added screen_length option. Now the user can define his own
4718 screen size for page() operations.
4724 screen size for page() operations.
4719
4725
4720 * Implemented magic shell-like functions with automatic code
4726 * Implemented magic shell-like functions with automatic code
4721 generation. Now adding another function is just a matter of adding
4727 generation. Now adding another function is just a matter of adding
4722 an entry to a dict, and the function is dynamically generated at
4728 an entry to a dict, and the function is dynamically generated at
4723 run-time. Python has some really cool features!
4729 run-time. Python has some really cool features!
4724
4730
4725 * Renamed many options to cleanup conventions a little. Now all
4731 * Renamed many options to cleanup conventions a little. Now all
4726 are lowercase, and only underscores where needed. Also in the code
4732 are lowercase, and only underscores where needed. Also in the code
4727 option name tables are clearer.
4733 option name tables are clearer.
4728
4734
4729 * Changed prompts a little. Now input is 'In [n]:' instead of
4735 * Changed prompts a little. Now input is 'In [n]:' instead of
4730 'In[n]:='. This allows it the numbers to be aligned with the
4736 'In[n]:='. This allows it the numbers to be aligned with the
4731 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4737 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4732 Python (it was a Mathematica thing). The '...' continuation prompt
4738 Python (it was a Mathematica thing). The '...' continuation prompt
4733 was also changed a little to align better.
4739 was also changed a little to align better.
4734
4740
4735 * Fixed bug when flushing output cache. Not all _p<n> variables
4741 * Fixed bug when flushing output cache. Not all _p<n> variables
4736 exist, so their deletion needs to be wrapped in a try:
4742 exist, so their deletion needs to be wrapped in a try:
4737
4743
4738 * Figured out how to properly use inspect.formatargspec() (it
4744 * Figured out how to properly use inspect.formatargspec() (it
4739 requires the args preceded by *). So I removed all the code from
4745 requires the args preceded by *). So I removed all the code from
4740 _get_pdef in Magic, which was just replicating that.
4746 _get_pdef in Magic, which was just replicating that.
4741
4747
4742 * Added test to prefilter to allow redefining magic function names
4748 * Added test to prefilter to allow redefining magic function names
4743 as variables. This is ok, since the @ form is always available,
4749 as variables. This is ok, since the @ form is always available,
4744 but whe should allow the user to define a variable called 'ls' if
4750 but whe should allow the user to define a variable called 'ls' if
4745 he needs it.
4751 he needs it.
4746
4752
4747 * Moved the ToDo information from README into a separate ToDo.
4753 * Moved the ToDo information from README into a separate ToDo.
4748
4754
4749 * General code cleanup and small bugfixes. I think it's close to a
4755 * General code cleanup and small bugfixes. I think it's close to a
4750 state where it can be released, obviously with a big 'beta'
4756 state where it can be released, obviously with a big 'beta'
4751 warning on it.
4757 warning on it.
4752
4758
4753 * Got the magic function split to work. Now all magics are defined
4759 * Got the magic function split to work. Now all magics are defined
4754 in a separate class. It just organizes things a bit, and now
4760 in a separate class. It just organizes things a bit, and now
4755 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4761 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4756 was too long).
4762 was too long).
4757
4763
4758 * Changed @clear to @reset to avoid potential confusions with
4764 * Changed @clear to @reset to avoid potential confusions with
4759 the shell command clear. Also renamed @cl to @clear, which does
4765 the shell command clear. Also renamed @cl to @clear, which does
4760 exactly what people expect it to from their shell experience.
4766 exactly what people expect it to from their shell experience.
4761
4767
4762 Added a check to the @reset command (since it's so
4768 Added a check to the @reset command (since it's so
4763 destructive, it's probably a good idea to ask for confirmation).
4769 destructive, it's probably a good idea to ask for confirmation).
4764 But now reset only works for full namespace resetting. Since the
4770 But now reset only works for full namespace resetting. Since the
4765 del keyword is already there for deleting a few specific
4771 del keyword is already there for deleting a few specific
4766 variables, I don't see the point of having a redundant magic
4772 variables, I don't see the point of having a redundant magic
4767 function for the same task.
4773 function for the same task.
4768
4774
4769 2001-11-24 Fernando Perez <fperez@colorado.edu>
4775 2001-11-24 Fernando Perez <fperez@colorado.edu>
4770
4776
4771 * Updated the builtin docs (esp. the ? ones).
4777 * Updated the builtin docs (esp. the ? ones).
4772
4778
4773 * Ran all the code through pychecker. Not terribly impressed with
4779 * Ran all the code through pychecker. Not terribly impressed with
4774 it: lots of spurious warnings and didn't really find anything of
4780 it: lots of spurious warnings and didn't really find anything of
4775 substance (just a few modules being imported and not used).
4781 substance (just a few modules being imported and not used).
4776
4782
4777 * Implemented the new ultraTB functionality into IPython. New
4783 * Implemented the new ultraTB functionality into IPython. New
4778 option: xcolors. This chooses color scheme. xmode now only selects
4784 option: xcolors. This chooses color scheme. xmode now only selects
4779 between Plain and Verbose. Better orthogonality.
4785 between Plain and Verbose. Better orthogonality.
4780
4786
4781 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4787 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4782 mode and color scheme for the exception handlers. Now it's
4788 mode and color scheme for the exception handlers. Now it's
4783 possible to have the verbose traceback with no coloring.
4789 possible to have the verbose traceback with no coloring.
4784
4790
4785 2001-11-23 Fernando Perez <fperez@colorado.edu>
4791 2001-11-23 Fernando Perez <fperez@colorado.edu>
4786
4792
4787 * Version 0.1.12 released, 0.1.13 opened.
4793 * Version 0.1.12 released, 0.1.13 opened.
4788
4794
4789 * Removed option to set auto-quote and auto-paren escapes by
4795 * Removed option to set auto-quote and auto-paren escapes by
4790 user. The chances of breaking valid syntax are just too high. If
4796 user. The chances of breaking valid syntax are just too high. If
4791 someone *really* wants, they can always dig into the code.
4797 someone *really* wants, they can always dig into the code.
4792
4798
4793 * Made prompt separators configurable.
4799 * Made prompt separators configurable.
4794
4800
4795 2001-11-22 Fernando Perez <fperez@colorado.edu>
4801 2001-11-22 Fernando Perez <fperez@colorado.edu>
4796
4802
4797 * Small bugfixes in many places.
4803 * Small bugfixes in many places.
4798
4804
4799 * Removed the MyCompleter class from ipplib. It seemed redundant
4805 * Removed the MyCompleter class from ipplib. It seemed redundant
4800 with the C-p,C-n history search functionality. Less code to
4806 with the C-p,C-n history search functionality. Less code to
4801 maintain.
4807 maintain.
4802
4808
4803 * Moved all the original ipython.py code into ipythonlib.py. Right
4809 * Moved all the original ipython.py code into ipythonlib.py. Right
4804 now it's just one big dump into a function called make_IPython, so
4810 now it's just one big dump into a function called make_IPython, so
4805 no real modularity has been gained. But at least it makes the
4811 no real modularity has been gained. But at least it makes the
4806 wrapper script tiny, and since ipythonlib is a module, it gets
4812 wrapper script tiny, and since ipythonlib is a module, it gets
4807 compiled and startup is much faster.
4813 compiled and startup is much faster.
4808
4814
4809 This is a reasobably 'deep' change, so we should test it for a
4815 This is a reasobably 'deep' change, so we should test it for a
4810 while without messing too much more with the code.
4816 while without messing too much more with the code.
4811
4817
4812 2001-11-21 Fernando Perez <fperez@colorado.edu>
4818 2001-11-21 Fernando Perez <fperez@colorado.edu>
4813
4819
4814 * Version 0.1.11 released, 0.1.12 opened for further work.
4820 * Version 0.1.11 released, 0.1.12 opened for further work.
4815
4821
4816 * Removed dependency on Itpl. It was only needed in one place. It
4822 * Removed dependency on Itpl. It was only needed in one place. It
4817 would be nice if this became part of python, though. It makes life
4823 would be nice if this became part of python, though. It makes life
4818 *a lot* easier in some cases.
4824 *a lot* easier in some cases.
4819
4825
4820 * Simplified the prefilter code a bit. Now all handlers are
4826 * Simplified the prefilter code a bit. Now all handlers are
4821 expected to explicitly return a value (at least a blank string).
4827 expected to explicitly return a value (at least a blank string).
4822
4828
4823 * Heavy edits in ipplib. Removed the help system altogether. Now
4829 * Heavy edits in ipplib. Removed the help system altogether. Now
4824 obj?/?? is used for inspecting objects, a magic @doc prints
4830 obj?/?? is used for inspecting objects, a magic @doc prints
4825 docstrings, and full-blown Python help is accessed via the 'help'
4831 docstrings, and full-blown Python help is accessed via the 'help'
4826 keyword. This cleans up a lot of code (less to maintain) and does
4832 keyword. This cleans up a lot of code (less to maintain) and does
4827 the job. Since 'help' is now a standard Python component, might as
4833 the job. Since 'help' is now a standard Python component, might as
4828 well use it and remove duplicate functionality.
4834 well use it and remove duplicate functionality.
4829
4835
4830 Also removed the option to use ipplib as a standalone program. By
4836 Also removed the option to use ipplib as a standalone program. By
4831 now it's too dependent on other parts of IPython to function alone.
4837 now it's too dependent on other parts of IPython to function alone.
4832
4838
4833 * Fixed bug in genutils.pager. It would crash if the pager was
4839 * Fixed bug in genutils.pager. It would crash if the pager was
4834 exited immediately after opening (broken pipe).
4840 exited immediately after opening (broken pipe).
4835
4841
4836 * Trimmed down the VerboseTB reporting a little. The header is
4842 * Trimmed down the VerboseTB reporting a little. The header is
4837 much shorter now and the repeated exception arguments at the end
4843 much shorter now and the repeated exception arguments at the end
4838 have been removed. For interactive use the old header seemed a bit
4844 have been removed. For interactive use the old header seemed a bit
4839 excessive.
4845 excessive.
4840
4846
4841 * Fixed small bug in output of @whos for variables with multi-word
4847 * Fixed small bug in output of @whos for variables with multi-word
4842 types (only first word was displayed).
4848 types (only first word was displayed).
4843
4849
4844 2001-11-17 Fernando Perez <fperez@colorado.edu>
4850 2001-11-17 Fernando Perez <fperez@colorado.edu>
4845
4851
4846 * Version 0.1.10 released, 0.1.11 opened for further work.
4852 * Version 0.1.10 released, 0.1.11 opened for further work.
4847
4853
4848 * Modified dirs and friends. dirs now *returns* the stack (not
4854 * Modified dirs and friends. dirs now *returns* the stack (not
4849 prints), so one can manipulate it as a variable. Convenient to
4855 prints), so one can manipulate it as a variable. Convenient to
4850 travel along many directories.
4856 travel along many directories.
4851
4857
4852 * Fixed bug in magic_pdef: would only work with functions with
4858 * Fixed bug in magic_pdef: would only work with functions with
4853 arguments with default values.
4859 arguments with default values.
4854
4860
4855 2001-11-14 Fernando Perez <fperez@colorado.edu>
4861 2001-11-14 Fernando Perez <fperez@colorado.edu>
4856
4862
4857 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4863 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4858 example with IPython. Various other minor fixes and cleanups.
4864 example with IPython. Various other minor fixes and cleanups.
4859
4865
4860 * Version 0.1.9 released, 0.1.10 opened for further work.
4866 * Version 0.1.9 released, 0.1.10 opened for further work.
4861
4867
4862 * Added sys.path to the list of directories searched in the
4868 * Added sys.path to the list of directories searched in the
4863 execfile= option. It used to be the current directory and the
4869 execfile= option. It used to be the current directory and the
4864 user's IPYTHONDIR only.
4870 user's IPYTHONDIR only.
4865
4871
4866 2001-11-13 Fernando Perez <fperez@colorado.edu>
4872 2001-11-13 Fernando Perez <fperez@colorado.edu>
4867
4873
4868 * Reinstated the raw_input/prefilter separation that Janko had
4874 * Reinstated the raw_input/prefilter separation that Janko had
4869 initially. This gives a more convenient setup for extending the
4875 initially. This gives a more convenient setup for extending the
4870 pre-processor from the outside: raw_input always gets a string,
4876 pre-processor from the outside: raw_input always gets a string,
4871 and prefilter has to process it. We can then redefine prefilter
4877 and prefilter has to process it. We can then redefine prefilter
4872 from the outside and implement extensions for special
4878 from the outside and implement extensions for special
4873 purposes.
4879 purposes.
4874
4880
4875 Today I got one for inputting PhysicalQuantity objects
4881 Today I got one for inputting PhysicalQuantity objects
4876 (from Scientific) without needing any function calls at
4882 (from Scientific) without needing any function calls at
4877 all. Extremely convenient, and it's all done as a user-level
4883 all. Extremely convenient, and it's all done as a user-level
4878 extension (no IPython code was touched). Now instead of:
4884 extension (no IPython code was touched). Now instead of:
4879 a = PhysicalQuantity(4.2,'m/s**2')
4885 a = PhysicalQuantity(4.2,'m/s**2')
4880 one can simply say
4886 one can simply say
4881 a = 4.2 m/s**2
4887 a = 4.2 m/s**2
4882 or even
4888 or even
4883 a = 4.2 m/s^2
4889 a = 4.2 m/s^2
4884
4890
4885 I use this, but it's also a proof of concept: IPython really is
4891 I use this, but it's also a proof of concept: IPython really is
4886 fully user-extensible, even at the level of the parsing of the
4892 fully user-extensible, even at the level of the parsing of the
4887 command line. It's not trivial, but it's perfectly doable.
4893 command line. It's not trivial, but it's perfectly doable.
4888
4894
4889 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4895 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4890 the problem of modules being loaded in the inverse order in which
4896 the problem of modules being loaded in the inverse order in which
4891 they were defined in
4897 they were defined in
4892
4898
4893 * Version 0.1.8 released, 0.1.9 opened for further work.
4899 * Version 0.1.8 released, 0.1.9 opened for further work.
4894
4900
4895 * Added magics pdef, source and file. They respectively show the
4901 * Added magics pdef, source and file. They respectively show the
4896 definition line ('prototype' in C), source code and full python
4902 definition line ('prototype' in C), source code and full python
4897 file for any callable object. The object inspector oinfo uses
4903 file for any callable object. The object inspector oinfo uses
4898 these to show the same information.
4904 these to show the same information.
4899
4905
4900 * Version 0.1.7 released, 0.1.8 opened for further work.
4906 * Version 0.1.7 released, 0.1.8 opened for further work.
4901
4907
4902 * Separated all the magic functions into a class called Magic. The
4908 * Separated all the magic functions into a class called Magic. The
4903 InteractiveShell class was becoming too big for Xemacs to handle
4909 InteractiveShell class was becoming too big for Xemacs to handle
4904 (de-indenting a line would lock it up for 10 seconds while it
4910 (de-indenting a line would lock it up for 10 seconds while it
4905 backtracked on the whole class!)
4911 backtracked on the whole class!)
4906
4912
4907 FIXME: didn't work. It can be done, but right now namespaces are
4913 FIXME: didn't work. It can be done, but right now namespaces are
4908 all messed up. Do it later (reverted it for now, so at least
4914 all messed up. Do it later (reverted it for now, so at least
4909 everything works as before).
4915 everything works as before).
4910
4916
4911 * Got the object introspection system (magic_oinfo) working! I
4917 * Got the object introspection system (magic_oinfo) working! I
4912 think this is pretty much ready for release to Janko, so he can
4918 think this is pretty much ready for release to Janko, so he can
4913 test it for a while and then announce it. Pretty much 100% of what
4919 test it for a while and then announce it. Pretty much 100% of what
4914 I wanted for the 'phase 1' release is ready. Happy, tired.
4920 I wanted for the 'phase 1' release is ready. Happy, tired.
4915
4921
4916 2001-11-12 Fernando Perez <fperez@colorado.edu>
4922 2001-11-12 Fernando Perez <fperez@colorado.edu>
4917
4923
4918 * Version 0.1.6 released, 0.1.7 opened for further work.
4924 * Version 0.1.6 released, 0.1.7 opened for further work.
4919
4925
4920 * Fixed bug in printing: it used to test for truth before
4926 * Fixed bug in printing: it used to test for truth before
4921 printing, so 0 wouldn't print. Now checks for None.
4927 printing, so 0 wouldn't print. Now checks for None.
4922
4928
4923 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4929 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4924 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4930 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4925 reaches by hand into the outputcache. Think of a better way to do
4931 reaches by hand into the outputcache. Think of a better way to do
4926 this later.
4932 this later.
4927
4933
4928 * Various small fixes thanks to Nathan's comments.
4934 * Various small fixes thanks to Nathan's comments.
4929
4935
4930 * Changed magic_pprint to magic_Pprint. This way it doesn't
4936 * Changed magic_pprint to magic_Pprint. This way it doesn't
4931 collide with pprint() and the name is consistent with the command
4937 collide with pprint() and the name is consistent with the command
4932 line option.
4938 line option.
4933
4939
4934 * Changed prompt counter behavior to be fully like
4940 * Changed prompt counter behavior to be fully like
4935 Mathematica's. That is, even input that doesn't return a result
4941 Mathematica's. That is, even input that doesn't return a result
4936 raises the prompt counter. The old behavior was kind of confusing
4942 raises the prompt counter. The old behavior was kind of confusing
4937 (getting the same prompt number several times if the operation
4943 (getting the same prompt number several times if the operation
4938 didn't return a result).
4944 didn't return a result).
4939
4945
4940 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4946 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4941
4947
4942 * Fixed -Classic mode (wasn't working anymore).
4948 * Fixed -Classic mode (wasn't working anymore).
4943
4949
4944 * Added colored prompts using Nathan's new code. Colors are
4950 * Added colored prompts using Nathan's new code. Colors are
4945 currently hardwired, they can be user-configurable. For
4951 currently hardwired, they can be user-configurable. For
4946 developers, they can be chosen in file ipythonlib.py, at the
4952 developers, they can be chosen in file ipythonlib.py, at the
4947 beginning of the CachedOutput class def.
4953 beginning of the CachedOutput class def.
4948
4954
4949 2001-11-11 Fernando Perez <fperez@colorado.edu>
4955 2001-11-11 Fernando Perez <fperez@colorado.edu>
4950
4956
4951 * Version 0.1.5 released, 0.1.6 opened for further work.
4957 * Version 0.1.5 released, 0.1.6 opened for further work.
4952
4958
4953 * Changed magic_env to *return* the environment as a dict (not to
4959 * Changed magic_env to *return* the environment as a dict (not to
4954 print it). This way it prints, but it can also be processed.
4960 print it). This way it prints, but it can also be processed.
4955
4961
4956 * Added Verbose exception reporting to interactive
4962 * Added Verbose exception reporting to interactive
4957 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4963 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4958 traceback. Had to make some changes to the ultraTB file. This is
4964 traceback. Had to make some changes to the ultraTB file. This is
4959 probably the last 'big' thing in my mental todo list. This ties
4965 probably the last 'big' thing in my mental todo list. This ties
4960 in with the next entry:
4966 in with the next entry:
4961
4967
4962 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4968 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4963 has to specify is Plain, Color or Verbose for all exception
4969 has to specify is Plain, Color or Verbose for all exception
4964 handling.
4970 handling.
4965
4971
4966 * Removed ShellServices option. All this can really be done via
4972 * Removed ShellServices option. All this can really be done via
4967 the magic system. It's easier to extend, cleaner and has automatic
4973 the magic system. It's easier to extend, cleaner and has automatic
4968 namespace protection and documentation.
4974 namespace protection and documentation.
4969
4975
4970 2001-11-09 Fernando Perez <fperez@colorado.edu>
4976 2001-11-09 Fernando Perez <fperez@colorado.edu>
4971
4977
4972 * Fixed bug in output cache flushing (missing parameter to
4978 * Fixed bug in output cache flushing (missing parameter to
4973 __init__). Other small bugs fixed (found using pychecker).
4979 __init__). Other small bugs fixed (found using pychecker).
4974
4980
4975 * Version 0.1.4 opened for bugfixing.
4981 * Version 0.1.4 opened for bugfixing.
4976
4982
4977 2001-11-07 Fernando Perez <fperez@colorado.edu>
4983 2001-11-07 Fernando Perez <fperez@colorado.edu>
4978
4984
4979 * Version 0.1.3 released, mainly because of the raw_input bug.
4985 * Version 0.1.3 released, mainly because of the raw_input bug.
4980
4986
4981 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4987 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4982 and when testing for whether things were callable, a call could
4988 and when testing for whether things were callable, a call could
4983 actually be made to certain functions. They would get called again
4989 actually be made to certain functions. They would get called again
4984 once 'really' executed, with a resulting double call. A disaster
4990 once 'really' executed, with a resulting double call. A disaster
4985 in many cases (list.reverse() would never work!).
4991 in many cases (list.reverse() would never work!).
4986
4992
4987 * Removed prefilter() function, moved its code to raw_input (which
4993 * Removed prefilter() function, moved its code to raw_input (which
4988 after all was just a near-empty caller for prefilter). This saves
4994 after all was just a near-empty caller for prefilter). This saves
4989 a function call on every prompt, and simplifies the class a tiny bit.
4995 a function call on every prompt, and simplifies the class a tiny bit.
4990
4996
4991 * Fix _ip to __ip name in magic example file.
4997 * Fix _ip to __ip name in magic example file.
4992
4998
4993 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4999 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4994 work with non-gnu versions of tar.
5000 work with non-gnu versions of tar.
4995
5001
4996 2001-11-06 Fernando Perez <fperez@colorado.edu>
5002 2001-11-06 Fernando Perez <fperez@colorado.edu>
4997
5003
4998 * Version 0.1.2. Just to keep track of the recent changes.
5004 * Version 0.1.2. Just to keep track of the recent changes.
4999
5005
5000 * Fixed nasty bug in output prompt routine. It used to check 'if
5006 * Fixed nasty bug in output prompt routine. It used to check 'if
5001 arg != None...'. Problem is, this fails if arg implements a
5007 arg != None...'. Problem is, this fails if arg implements a
5002 special comparison (__cmp__) which disallows comparing to
5008 special comparison (__cmp__) which disallows comparing to
5003 None. Found it when trying to use the PhysicalQuantity module from
5009 None. Found it when trying to use the PhysicalQuantity module from
5004 ScientificPython.
5010 ScientificPython.
5005
5011
5006 2001-11-05 Fernando Perez <fperez@colorado.edu>
5012 2001-11-05 Fernando Perez <fperez@colorado.edu>
5007
5013
5008 * Also added dirs. Now the pushd/popd/dirs family functions
5014 * Also added dirs. Now the pushd/popd/dirs family functions
5009 basically like the shell, with the added convenience of going home
5015 basically like the shell, with the added convenience of going home
5010 when called with no args.
5016 when called with no args.
5011
5017
5012 * pushd/popd slightly modified to mimic shell behavior more
5018 * pushd/popd slightly modified to mimic shell behavior more
5013 closely.
5019 closely.
5014
5020
5015 * Added env,pushd,popd from ShellServices as magic functions. I
5021 * Added env,pushd,popd from ShellServices as magic functions. I
5016 think the cleanest will be to port all desired functions from
5022 think the cleanest will be to port all desired functions from
5017 ShellServices as magics and remove ShellServices altogether. This
5023 ShellServices as magics and remove ShellServices altogether. This
5018 will provide a single, clean way of adding functionality
5024 will provide a single, clean way of adding functionality
5019 (shell-type or otherwise) to IP.
5025 (shell-type or otherwise) to IP.
5020
5026
5021 2001-11-04 Fernando Perez <fperez@colorado.edu>
5027 2001-11-04 Fernando Perez <fperez@colorado.edu>
5022
5028
5023 * Added .ipython/ directory to sys.path. This way users can keep
5029 * Added .ipython/ directory to sys.path. This way users can keep
5024 customizations there and access them via import.
5030 customizations there and access them via import.
5025
5031
5026 2001-11-03 Fernando Perez <fperez@colorado.edu>
5032 2001-11-03 Fernando Perez <fperez@colorado.edu>
5027
5033
5028 * Opened version 0.1.1 for new changes.
5034 * Opened version 0.1.1 for new changes.
5029
5035
5030 * Changed version number to 0.1.0: first 'public' release, sent to
5036 * Changed version number to 0.1.0: first 'public' release, sent to
5031 Nathan and Janko.
5037 Nathan and Janko.
5032
5038
5033 * Lots of small fixes and tweaks.
5039 * Lots of small fixes and tweaks.
5034
5040
5035 * Minor changes to whos format. Now strings are shown, snipped if
5041 * Minor changes to whos format. Now strings are shown, snipped if
5036 too long.
5042 too long.
5037
5043
5038 * Changed ShellServices to work on __main__ so they show up in @who
5044 * Changed ShellServices to work on __main__ so they show up in @who
5039
5045
5040 * Help also works with ? at the end of a line:
5046 * Help also works with ? at the end of a line:
5041 ?sin and sin?
5047 ?sin and sin?
5042 both produce the same effect. This is nice, as often I use the
5048 both produce the same effect. This is nice, as often I use the
5043 tab-complete to find the name of a method, but I used to then have
5049 tab-complete to find the name of a method, but I used to then have
5044 to go to the beginning of the line to put a ? if I wanted more
5050 to go to the beginning of the line to put a ? if I wanted more
5045 info. Now I can just add the ? and hit return. Convenient.
5051 info. Now I can just add the ? and hit return. Convenient.
5046
5052
5047 2001-11-02 Fernando Perez <fperez@colorado.edu>
5053 2001-11-02 Fernando Perez <fperez@colorado.edu>
5048
5054
5049 * Python version check (>=2.1) added.
5055 * Python version check (>=2.1) added.
5050
5056
5051 * Added LazyPython documentation. At this point the docs are quite
5057 * Added LazyPython documentation. At this point the docs are quite
5052 a mess. A cleanup is in order.
5058 a mess. A cleanup is in order.
5053
5059
5054 * Auto-installer created. For some bizarre reason, the zipfiles
5060 * Auto-installer created. For some bizarre reason, the zipfiles
5055 module isn't working on my system. So I made a tar version
5061 module isn't working on my system. So I made a tar version
5056 (hopefully the command line options in various systems won't kill
5062 (hopefully the command line options in various systems won't kill
5057 me).
5063 me).
5058
5064
5059 * Fixes to Struct in genutils. Now all dictionary-like methods are
5065 * Fixes to Struct in genutils. Now all dictionary-like methods are
5060 protected (reasonably).
5066 protected (reasonably).
5061
5067
5062 * Added pager function to genutils and changed ? to print usage
5068 * Added pager function to genutils and changed ? to print usage
5063 note through it (it was too long).
5069 note through it (it was too long).
5064
5070
5065 * Added the LazyPython functionality. Works great! I changed the
5071 * Added the LazyPython functionality. Works great! I changed the
5066 auto-quote escape to ';', it's on home row and next to '. But
5072 auto-quote escape to ';', it's on home row and next to '. But
5067 both auto-quote and auto-paren (still /) escapes are command-line
5073 both auto-quote and auto-paren (still /) escapes are command-line
5068 parameters.
5074 parameters.
5069
5075
5070
5076
5071 2001-11-01 Fernando Perez <fperez@colorado.edu>
5077 2001-11-01 Fernando Perez <fperez@colorado.edu>
5072
5078
5073 * Version changed to 0.0.7. Fairly large change: configuration now
5079 * Version changed to 0.0.7. Fairly large change: configuration now
5074 is all stored in a directory, by default .ipython. There, all
5080 is all stored in a directory, by default .ipython. There, all
5075 config files have normal looking names (not .names)
5081 config files have normal looking names (not .names)
5076
5082
5077 * Version 0.0.6 Released first to Lucas and Archie as a test
5083 * Version 0.0.6 Released first to Lucas and Archie as a test
5078 run. Since it's the first 'semi-public' release, change version to
5084 run. Since it's the first 'semi-public' release, change version to
5079 > 0.0.6 for any changes now.
5085 > 0.0.6 for any changes now.
5080
5086
5081 * Stuff I had put in the ipplib.py changelog:
5087 * Stuff I had put in the ipplib.py changelog:
5082
5088
5083 Changes to InteractiveShell:
5089 Changes to InteractiveShell:
5084
5090
5085 - Made the usage message a parameter.
5091 - Made the usage message a parameter.
5086
5092
5087 - Require the name of the shell variable to be given. It's a bit
5093 - Require the name of the shell variable to be given. It's a bit
5088 of a hack, but allows the name 'shell' not to be hardwire in the
5094 of a hack, but allows the name 'shell' not to be hardwire in the
5089 magic (@) handler, which is problematic b/c it requires
5095 magic (@) handler, which is problematic b/c it requires
5090 polluting the global namespace with 'shell'. This in turn is
5096 polluting the global namespace with 'shell'. This in turn is
5091 fragile: if a user redefines a variable called shell, things
5097 fragile: if a user redefines a variable called shell, things
5092 break.
5098 break.
5093
5099
5094 - magic @: all functions available through @ need to be defined
5100 - magic @: all functions available through @ need to be defined
5095 as magic_<name>, even though they can be called simply as
5101 as magic_<name>, even though they can be called simply as
5096 @<name>. This allows the special command @magic to gather
5102 @<name>. This allows the special command @magic to gather
5097 information automatically about all existing magic functions,
5103 information automatically about all existing magic functions,
5098 even if they are run-time user extensions, by parsing the shell
5104 even if they are run-time user extensions, by parsing the shell
5099 instance __dict__ looking for special magic_ names.
5105 instance __dict__ looking for special magic_ names.
5100
5106
5101 - mainloop: added *two* local namespace parameters. This allows
5107 - mainloop: added *two* local namespace parameters. This allows
5102 the class to differentiate between parameters which were there
5108 the class to differentiate between parameters which were there
5103 before and after command line initialization was processed. This
5109 before and after command line initialization was processed. This
5104 way, later @who can show things loaded at startup by the
5110 way, later @who can show things loaded at startup by the
5105 user. This trick was necessary to make session saving/reloading
5111 user. This trick was necessary to make session saving/reloading
5106 really work: ideally after saving/exiting/reloading a session,
5112 really work: ideally after saving/exiting/reloading a session,
5107 *everythin* should look the same, including the output of @who. I
5113 *everythin* should look the same, including the output of @who. I
5108 was only able to make this work with this double namespace
5114 was only able to make this work with this double namespace
5109 trick.
5115 trick.
5110
5116
5111 - added a header to the logfile which allows (almost) full
5117 - added a header to the logfile which allows (almost) full
5112 session restoring.
5118 session restoring.
5113
5119
5114 - prepend lines beginning with @ or !, with a and log
5120 - prepend lines beginning with @ or !, with a and log
5115 them. Why? !lines: may be useful to know what you did @lines:
5121 them. Why? !lines: may be useful to know what you did @lines:
5116 they may affect session state. So when restoring a session, at
5122 they may affect session state. So when restoring a session, at
5117 least inform the user of their presence. I couldn't quite get
5123 least inform the user of their presence. I couldn't quite get
5118 them to properly re-execute, but at least the user is warned.
5124 them to properly re-execute, but at least the user is warned.
5119
5125
5120 * Started ChangeLog.
5126 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now