##// END OF EJS Templates
"ipython mybatch.ipy" now runs mybatch.ipy w/ _ip.runlines(), ...
vivainio -
Show More
@@ -1,2281 +1,2287 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 1232 2006-04-01 10:59:41Z vivainio $
9 $Id: iplib.py 1260 2006-04-11 10:19:34Z vivainio $
10 """
10 """
11
11
12 #*****************************************************************************
12 #*****************************************************************************
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
15 #
15 #
16 # Distributed under the terms of the BSD License. The full license is in
16 # Distributed under the terms of the BSD License. The full license is in
17 # the file COPYING, distributed as part of this software.
17 # the file COPYING, distributed as part of this software.
18 #
18 #
19 # Note: this code originally subclassed code.InteractiveConsole from the
19 # Note: this code originally subclassed code.InteractiveConsole from the
20 # Python standard library. Over time, all of that class has been copied
20 # Python standard library. Over time, all of that class has been copied
21 # verbatim here for modifications which could not be accomplished by
21 # verbatim here for modifications which could not be accomplished by
22 # subclassing. At this point, there are no dependencies at all on the code
22 # subclassing. At this point, there are no dependencies at all on the code
23 # module anymore (it is not even imported). The Python License (sec. 2)
23 # module anymore (it is not even imported). The Python License (sec. 2)
24 # allows for this, but it's always nice to acknowledge credit where credit is
24 # allows for this, but it's always nice to acknowledge credit where credit is
25 # due.
25 # due.
26 #*****************************************************************************
26 #*****************************************************************************
27
27
28 #****************************************************************************
28 #****************************************************************************
29 # Modules and globals
29 # Modules and globals
30
30
31 from __future__ import generators # for 2.2 backwards-compatibility
31 from __future__ import generators # for 2.2 backwards-compatibility
32
32
33 from IPython import Release
33 from IPython import Release
34 __author__ = '%s <%s>\n%s <%s>' % \
34 __author__ = '%s <%s>\n%s <%s>' % \
35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
36 __license__ = Release.license
36 __license__ = Release.license
37 __version__ = Release.version
37 __version__ = Release.version
38
38
39 # Python standard modules
39 # Python standard modules
40 import __main__
40 import __main__
41 import __builtin__
41 import __builtin__
42 import StringIO
42 import StringIO
43 import bdb
43 import bdb
44 import cPickle as pickle
44 import cPickle as pickle
45 import codeop
45 import codeop
46 import exceptions
46 import exceptions
47 import glob
47 import glob
48 import inspect
48 import inspect
49 import keyword
49 import keyword
50 import new
50 import new
51 import os
51 import os
52 import pdb
52 import pdb
53 import pydoc
53 import pydoc
54 import re
54 import re
55 import shutil
55 import shutil
56 import string
56 import string
57 import sys
57 import sys
58 import tempfile
58 import tempfile
59 import traceback
59 import traceback
60 import types
60 import types
61 import pickleshare
61 import pickleshare
62
62
63 from pprint import pprint, pformat
63 from pprint import pprint, pformat
64
64
65 # IPython's own modules
65 # IPython's own modules
66 import IPython
66 import IPython
67 from IPython import OInspect,PyColorize,ultraTB
67 from IPython import OInspect,PyColorize,ultraTB
68 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
68 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
69 from IPython.FakeModule import FakeModule
69 from IPython.FakeModule import FakeModule
70 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
70 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
71 from IPython.Logger import Logger
71 from IPython.Logger import Logger
72 from IPython.Magic import Magic
72 from IPython.Magic import Magic
73 from IPython.Prompts import CachedOutput
73 from IPython.Prompts import CachedOutput
74 from IPython.ipstruct import Struct
74 from IPython.ipstruct import Struct
75 from IPython.background_jobs import BackgroundJobManager
75 from IPython.background_jobs import BackgroundJobManager
76 from IPython.usage import cmd_line_usage,interactive_usage
76 from IPython.usage import cmd_line_usage,interactive_usage
77 from IPython.genutils import *
77 from IPython.genutils import *
78 import IPython.ipapi
78 import IPython.ipapi
79
79
80 # Globals
80 # Globals
81
81
82 # store the builtin raw_input globally, and use this always, in case user code
82 # store the builtin raw_input globally, and use this always, in case user code
83 # overwrites it (like wx.py.PyShell does)
83 # overwrites it (like wx.py.PyShell does)
84 raw_input_original = raw_input
84 raw_input_original = raw_input
85
85
86 # compiled regexps for autoindent management
86 # compiled regexps for autoindent management
87 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
87 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
88
88
89
89
90 #****************************************************************************
90 #****************************************************************************
91 # Some utility function definitions
91 # Some utility function definitions
92
92
93 ini_spaces_re = re.compile(r'^(\s+)')
93 ini_spaces_re = re.compile(r'^(\s+)')
94
94
95 def num_ini_spaces(strng):
95 def num_ini_spaces(strng):
96 """Return the number of initial spaces in a string"""
96 """Return the number of initial spaces in a string"""
97
97
98 ini_spaces = ini_spaces_re.match(strng)
98 ini_spaces = ini_spaces_re.match(strng)
99 if ini_spaces:
99 if ini_spaces:
100 return ini_spaces.end()
100 return ini_spaces.end()
101 else:
101 else:
102 return 0
102 return 0
103
103
104 def softspace(file, newvalue):
104 def softspace(file, newvalue):
105 """Copied from code.py, to remove the dependency"""
105 """Copied from code.py, to remove the dependency"""
106
106
107 oldvalue = 0
107 oldvalue = 0
108 try:
108 try:
109 oldvalue = file.softspace
109 oldvalue = file.softspace
110 except AttributeError:
110 except AttributeError:
111 pass
111 pass
112 try:
112 try:
113 file.softspace = newvalue
113 file.softspace = newvalue
114 except (AttributeError, TypeError):
114 except (AttributeError, TypeError):
115 # "attribute-less object" or "read-only attributes"
115 # "attribute-less object" or "read-only attributes"
116 pass
116 pass
117 return oldvalue
117 return oldvalue
118
118
119
119
120 #****************************************************************************
120 #****************************************************************************
121 # Local use exceptions
121 # Local use exceptions
122 class SpaceInInput(exceptions.Exception): pass
122 class SpaceInInput(exceptions.Exception): pass
123
123
124
124
125 #****************************************************************************
125 #****************************************************************************
126 # Local use classes
126 # Local use classes
127 class Bunch: pass
127 class Bunch: pass
128
128
129 class Undefined: pass
129 class Undefined: pass
130
130
131 class InputList(list):
131 class InputList(list):
132 """Class to store user input.
132 """Class to store user input.
133
133
134 It's basically a list, but slices return a string instead of a list, thus
134 It's basically a list, but slices return a string instead of a list, thus
135 allowing things like (assuming 'In' is an instance):
135 allowing things like (assuming 'In' is an instance):
136
136
137 exec In[4:7]
137 exec In[4:7]
138
138
139 or
139 or
140
140
141 exec In[5:9] + In[14] + In[21:25]"""
141 exec In[5:9] + In[14] + In[21:25]"""
142
142
143 def __getslice__(self,i,j):
143 def __getslice__(self,i,j):
144 return ''.join(list.__getslice__(self,i,j))
144 return ''.join(list.__getslice__(self,i,j))
145
145
146 class SyntaxTB(ultraTB.ListTB):
146 class SyntaxTB(ultraTB.ListTB):
147 """Extension which holds some state: the last exception value"""
147 """Extension which holds some state: the last exception value"""
148
148
149 def __init__(self,color_scheme = 'NoColor'):
149 def __init__(self,color_scheme = 'NoColor'):
150 ultraTB.ListTB.__init__(self,color_scheme)
150 ultraTB.ListTB.__init__(self,color_scheme)
151 self.last_syntax_error = None
151 self.last_syntax_error = None
152
152
153 def __call__(self, etype, value, elist):
153 def __call__(self, etype, value, elist):
154 self.last_syntax_error = value
154 self.last_syntax_error = value
155 ultraTB.ListTB.__call__(self,etype,value,elist)
155 ultraTB.ListTB.__call__(self,etype,value,elist)
156
156
157 def clear_err_state(self):
157 def clear_err_state(self):
158 """Return the current error state and clear it"""
158 """Return the current error state and clear it"""
159 e = self.last_syntax_error
159 e = self.last_syntax_error
160 self.last_syntax_error = None
160 self.last_syntax_error = None
161 return e
161 return e
162
162
163 #****************************************************************************
163 #****************************************************************************
164 # Main IPython class
164 # Main IPython class
165
165
166 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
166 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
167 # until a full rewrite is made. I've cleaned all cross-class uses of
167 # until a full rewrite is made. I've cleaned all cross-class uses of
168 # attributes and methods, but too much user code out there relies on the
168 # attributes and methods, but too much user code out there relies on the
169 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
169 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
170 #
170 #
171 # But at least now, all the pieces have been separated and we could, in
171 # But at least now, all the pieces have been separated and we could, in
172 # principle, stop using the mixin. This will ease the transition to the
172 # principle, stop using the mixin. This will ease the transition to the
173 # chainsaw branch.
173 # chainsaw branch.
174
174
175 # For reference, the following is the list of 'self.foo' uses in the Magic
175 # For reference, the following is the list of 'self.foo' uses in the Magic
176 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
176 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
177 # class, to prevent clashes.
177 # class, to prevent clashes.
178
178
179 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
179 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
180 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
180 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
181 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
181 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
182 # 'self.value']
182 # 'self.value']
183
183
184 class InteractiveShell(object,Magic):
184 class InteractiveShell(object,Magic):
185 """An enhanced console for Python."""
185 """An enhanced console for Python."""
186
186
187 # class attribute to indicate whether the class supports threads or not.
187 # class attribute to indicate whether the class supports threads or not.
188 # Subclasses with thread support should override this as needed.
188 # Subclasses with thread support should override this as needed.
189 isthreaded = False
189 isthreaded = False
190
190
191 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
191 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
192 user_ns = None,user_global_ns=None,banner2='',
192 user_ns = None,user_global_ns=None,banner2='',
193 custom_exceptions=((),None),embedded=False):
193 custom_exceptions=((),None),embedded=False):
194
194
195
195
196 # log system
196 # log system
197 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
197 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
198
198
199 # Produce a public API instance
199 # Produce a public API instance
200
200
201 self.api = IPython.ipapi.IPApi(self)
201 self.api = IPython.ipapi.IPApi(self)
202
202
203 # some minimal strict typechecks. For some core data structures, I
203 # some minimal strict typechecks. For some core data structures, I
204 # want actual basic python types, not just anything that looks like
204 # want actual basic python types, not just anything that looks like
205 # one. This is especially true for namespaces.
205 # one. This is especially true for namespaces.
206 for ns in (user_ns,user_global_ns):
206 for ns in (user_ns,user_global_ns):
207 if ns is not None and type(ns) != types.DictType:
207 if ns is not None and type(ns) != types.DictType:
208 raise TypeError,'namespace must be a dictionary'
208 raise TypeError,'namespace must be a dictionary'
209
209
210 # Job manager (for jobs run as background threads)
210 # Job manager (for jobs run as background threads)
211 self.jobs = BackgroundJobManager()
211 self.jobs = BackgroundJobManager()
212
212
213 # track which builtins we add, so we can clean up later
213 # track which builtins we add, so we can clean up later
214 self.builtins_added = {}
214 self.builtins_added = {}
215 # This method will add the necessary builtins for operation, but
215 # This method will add the necessary builtins for operation, but
216 # tracking what it did via the builtins_added dict.
216 # tracking what it did via the builtins_added dict.
217 self.add_builtins()
217 self.add_builtins()
218
218
219 # Do the intuitively correct thing for quit/exit: we remove the
219 # Do the intuitively correct thing for quit/exit: we remove the
220 # builtins if they exist, and our own magics will deal with this
220 # builtins if they exist, and our own magics will deal with this
221 try:
221 try:
222 del __builtin__.exit, __builtin__.quit
222 del __builtin__.exit, __builtin__.quit
223 except AttributeError:
223 except AttributeError:
224 pass
224 pass
225
225
226 # Store the actual shell's name
226 # Store the actual shell's name
227 self.name = name
227 self.name = name
228
228
229 # We need to know whether the instance is meant for embedding, since
229 # We need to know whether the instance is meant for embedding, since
230 # global/local namespaces need to be handled differently in that case
230 # global/local namespaces need to be handled differently in that case
231 self.embedded = embedded
231 self.embedded = embedded
232
232
233 # command compiler
233 # command compiler
234 self.compile = codeop.CommandCompiler()
234 self.compile = codeop.CommandCompiler()
235
235
236 # User input buffer
236 # User input buffer
237 self.buffer = []
237 self.buffer = []
238
238
239 # Default name given in compilation of code
239 # Default name given in compilation of code
240 self.filename = '<ipython console>'
240 self.filename = '<ipython console>'
241
241
242 # Make an empty namespace, which extension writers can rely on both
242 # Make an empty namespace, which extension writers can rely on both
243 # existing and NEVER being used by ipython itself. This gives them a
243 # existing and NEVER being used by ipython itself. This gives them a
244 # convenient location for storing additional information and state
244 # convenient location for storing additional information and state
245 # their extensions may require, without fear of collisions with other
245 # their extensions may require, without fear of collisions with other
246 # ipython names that may develop later.
246 # ipython names that may develop later.
247 self.meta = Struct()
247 self.meta = Struct()
248
248
249 # Create the namespace where the user will operate. user_ns is
249 # Create the namespace where the user will operate. user_ns is
250 # normally the only one used, and it is passed to the exec calls as
250 # normally the only one used, and it is passed to the exec calls as
251 # the locals argument. But we do carry a user_global_ns namespace
251 # the locals argument. But we do carry a user_global_ns namespace
252 # given as the exec 'globals' argument, This is useful in embedding
252 # given as the exec 'globals' argument, This is useful in embedding
253 # situations where the ipython shell opens in a context where the
253 # situations where the ipython shell opens in a context where the
254 # distinction between locals and globals is meaningful.
254 # distinction between locals and globals is meaningful.
255
255
256 # FIXME. For some strange reason, __builtins__ is showing up at user
256 # FIXME. For some strange reason, __builtins__ is showing up at user
257 # level as a dict instead of a module. This is a manual fix, but I
257 # level as a dict instead of a module. This is a manual fix, but I
258 # should really track down where the problem is coming from. Alex
258 # should really track down where the problem is coming from. Alex
259 # Schmolck reported this problem first.
259 # Schmolck reported this problem first.
260
260
261 # A useful post by Alex Martelli on this topic:
261 # A useful post by Alex Martelli on this topic:
262 # Re: inconsistent value from __builtins__
262 # Re: inconsistent value from __builtins__
263 # Von: Alex Martelli <aleaxit@yahoo.com>
263 # Von: Alex Martelli <aleaxit@yahoo.com>
264 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
264 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
265 # Gruppen: comp.lang.python
265 # Gruppen: comp.lang.python
266
266
267 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
267 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
268 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
268 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
269 # > <type 'dict'>
269 # > <type 'dict'>
270 # > >>> print type(__builtins__)
270 # > >>> print type(__builtins__)
271 # > <type 'module'>
271 # > <type 'module'>
272 # > Is this difference in return value intentional?
272 # > Is this difference in return value intentional?
273
273
274 # Well, it's documented that '__builtins__' can be either a dictionary
274 # Well, it's documented that '__builtins__' can be either a dictionary
275 # or a module, and it's been that way for a long time. Whether it's
275 # or a module, and it's been that way for a long time. Whether it's
276 # intentional (or sensible), I don't know. In any case, the idea is
276 # intentional (or sensible), I don't know. In any case, the idea is
277 # that if you need to access the built-in namespace directly, you
277 # that if you need to access the built-in namespace directly, you
278 # should start with "import __builtin__" (note, no 's') which will
278 # should start with "import __builtin__" (note, no 's') which will
279 # definitely give you a module. Yeah, it's somewhat confusing:-(.
279 # definitely give you a module. Yeah, it's somewhat confusing:-(.
280
280
281 if user_ns is None:
281 if user_ns is None:
282 # Set __name__ to __main__ to better match the behavior of the
282 # Set __name__ to __main__ to better match the behavior of the
283 # normal interpreter.
283 # normal interpreter.
284 user_ns = {'__name__' :'__main__',
284 user_ns = {'__name__' :'__main__',
285 '__builtins__' : __builtin__,
285 '__builtins__' : __builtin__,
286 }
286 }
287
287
288 if user_global_ns is None:
288 if user_global_ns is None:
289 user_global_ns = {}
289 user_global_ns = {}
290
290
291 # Assign namespaces
291 # Assign namespaces
292 # This is the namespace where all normal user variables live
292 # This is the namespace where all normal user variables live
293 self.user_ns = user_ns
293 self.user_ns = user_ns
294 # Embedded instances require a separate namespace for globals.
294 # Embedded instances require a separate namespace for globals.
295 # Normally this one is unused by non-embedded instances.
295 # Normally this one is unused by non-embedded instances.
296 self.user_global_ns = user_global_ns
296 self.user_global_ns = user_global_ns
297 # A namespace to keep track of internal data structures to prevent
297 # A namespace to keep track of internal data structures to prevent
298 # them from cluttering user-visible stuff. Will be updated later
298 # them from cluttering user-visible stuff. Will be updated later
299 self.internal_ns = {}
299 self.internal_ns = {}
300
300
301 # Namespace of system aliases. Each entry in the alias
301 # Namespace of system aliases. Each entry in the alias
302 # table must be a 2-tuple of the form (N,name), where N is the number
302 # table must be a 2-tuple of the form (N,name), where N is the number
303 # of positional arguments of the alias.
303 # of positional arguments of the alias.
304 self.alias_table = {}
304 self.alias_table = {}
305
305
306 # A table holding all the namespaces IPython deals with, so that
306 # A table holding all the namespaces IPython deals with, so that
307 # introspection facilities can search easily.
307 # introspection facilities can search easily.
308 self.ns_table = {'user':user_ns,
308 self.ns_table = {'user':user_ns,
309 'user_global':user_global_ns,
309 'user_global':user_global_ns,
310 'alias':self.alias_table,
310 'alias':self.alias_table,
311 'internal':self.internal_ns,
311 'internal':self.internal_ns,
312 'builtin':__builtin__.__dict__
312 'builtin':__builtin__.__dict__
313 }
313 }
314
314
315 # The user namespace MUST have a pointer to the shell itself.
315 # The user namespace MUST have a pointer to the shell itself.
316 self.user_ns[name] = self
316 self.user_ns[name] = self
317
317
318 # We need to insert into sys.modules something that looks like a
318 # We need to insert into sys.modules something that looks like a
319 # module but which accesses the IPython namespace, for shelve and
319 # module but which accesses the IPython namespace, for shelve and
320 # pickle to work interactively. Normally they rely on getting
320 # pickle to work interactively. Normally they rely on getting
321 # everything out of __main__, but for embedding purposes each IPython
321 # everything out of __main__, but for embedding purposes each IPython
322 # instance has its own private namespace, so we can't go shoving
322 # instance has its own private namespace, so we can't go shoving
323 # everything into __main__.
323 # everything into __main__.
324
324
325 # note, however, that we should only do this for non-embedded
325 # note, however, that we should only do this for non-embedded
326 # ipythons, which really mimic the __main__.__dict__ with their own
326 # ipythons, which really mimic the __main__.__dict__ with their own
327 # namespace. Embedded instances, on the other hand, should not do
327 # namespace. Embedded instances, on the other hand, should not do
328 # this because they need to manage the user local/global namespaces
328 # this because they need to manage the user local/global namespaces
329 # only, but they live within a 'normal' __main__ (meaning, they
329 # only, but they live within a 'normal' __main__ (meaning, they
330 # shouldn't overtake the execution environment of the script they're
330 # shouldn't overtake the execution environment of the script they're
331 # embedded in).
331 # embedded in).
332
332
333 if not embedded:
333 if not embedded:
334 try:
334 try:
335 main_name = self.user_ns['__name__']
335 main_name = self.user_ns['__name__']
336 except KeyError:
336 except KeyError:
337 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
337 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
338 else:
338 else:
339 #print "pickle hack in place" # dbg
339 #print "pickle hack in place" # dbg
340 #print 'main_name:',main_name # dbg
340 #print 'main_name:',main_name # dbg
341 sys.modules[main_name] = FakeModule(self.user_ns)
341 sys.modules[main_name] = FakeModule(self.user_ns)
342
342
343 # List of input with multi-line handling.
343 # List of input with multi-line handling.
344 # Fill its zero entry, user counter starts at 1
344 # Fill its zero entry, user counter starts at 1
345 self.input_hist = InputList(['\n'])
345 self.input_hist = InputList(['\n'])
346 # This one will hold the 'raw' input history, without any
346 # This one will hold the 'raw' input history, without any
347 # pre-processing. This will allow users to retrieve the input just as
347 # pre-processing. This will allow users to retrieve the input just as
348 # it was exactly typed in by the user, with %hist -r.
348 # it was exactly typed in by the user, with %hist -r.
349 self.input_hist_raw = InputList(['\n'])
349 self.input_hist_raw = InputList(['\n'])
350
350
351 # list of visited directories
351 # list of visited directories
352 try:
352 try:
353 self.dir_hist = [os.getcwd()]
353 self.dir_hist = [os.getcwd()]
354 except IOError, e:
354 except IOError, e:
355 self.dir_hist = []
355 self.dir_hist = []
356
356
357 # dict of output history
357 # dict of output history
358 self.output_hist = {}
358 self.output_hist = {}
359
359
360 # dict of things NOT to alias (keywords, builtins and some magics)
360 # dict of things NOT to alias (keywords, builtins and some magics)
361 no_alias = {}
361 no_alias = {}
362 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
362 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
363 for key in keyword.kwlist + no_alias_magics:
363 for key in keyword.kwlist + no_alias_magics:
364 no_alias[key] = 1
364 no_alias[key] = 1
365 no_alias.update(__builtin__.__dict__)
365 no_alias.update(__builtin__.__dict__)
366 self.no_alias = no_alias
366 self.no_alias = no_alias
367
367
368 # make global variables for user access to these
368 # make global variables for user access to these
369 self.user_ns['_ih'] = self.input_hist
369 self.user_ns['_ih'] = self.input_hist
370 self.user_ns['_oh'] = self.output_hist
370 self.user_ns['_oh'] = self.output_hist
371 self.user_ns['_dh'] = self.dir_hist
371 self.user_ns['_dh'] = self.dir_hist
372
372
373 # user aliases to input and output histories
373 # user aliases to input and output histories
374 self.user_ns['In'] = self.input_hist
374 self.user_ns['In'] = self.input_hist
375 self.user_ns['Out'] = self.output_hist
375 self.user_ns['Out'] = self.output_hist
376
376
377 # Object variable to store code object waiting execution. This is
377 # Object variable to store code object waiting execution. This is
378 # used mainly by the multithreaded shells, but it can come in handy in
378 # used mainly by the multithreaded shells, but it can come in handy in
379 # other situations. No need to use a Queue here, since it's a single
379 # other situations. No need to use a Queue here, since it's a single
380 # item which gets cleared once run.
380 # item which gets cleared once run.
381 self.code_to_run = None
381 self.code_to_run = None
382
382
383 # escapes for automatic behavior on the command line
383 # escapes for automatic behavior on the command line
384 self.ESC_SHELL = '!'
384 self.ESC_SHELL = '!'
385 self.ESC_HELP = '?'
385 self.ESC_HELP = '?'
386 self.ESC_MAGIC = '%'
386 self.ESC_MAGIC = '%'
387 self.ESC_QUOTE = ','
387 self.ESC_QUOTE = ','
388 self.ESC_QUOTE2 = ';'
388 self.ESC_QUOTE2 = ';'
389 self.ESC_PAREN = '/'
389 self.ESC_PAREN = '/'
390
390
391 # And their associated handlers
391 # And their associated handlers
392 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
392 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
393 self.ESC_QUOTE : self.handle_auto,
393 self.ESC_QUOTE : self.handle_auto,
394 self.ESC_QUOTE2 : self.handle_auto,
394 self.ESC_QUOTE2 : self.handle_auto,
395 self.ESC_MAGIC : self.handle_magic,
395 self.ESC_MAGIC : self.handle_magic,
396 self.ESC_HELP : self.handle_help,
396 self.ESC_HELP : self.handle_help,
397 self.ESC_SHELL : self.handle_shell_escape,
397 self.ESC_SHELL : self.handle_shell_escape,
398 }
398 }
399
399
400 # class initializations
400 # class initializations
401 Magic.__init__(self,self)
401 Magic.__init__(self,self)
402
402
403 # Python source parser/formatter for syntax highlighting
403 # Python source parser/formatter for syntax highlighting
404 pyformat = PyColorize.Parser().format
404 pyformat = PyColorize.Parser().format
405 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
405 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
406
406
407 # hooks holds pointers used for user-side customizations
407 # hooks holds pointers used for user-side customizations
408 self.hooks = Struct()
408 self.hooks = Struct()
409
409
410 # Set all default hooks, defined in the IPython.hooks module.
410 # Set all default hooks, defined in the IPython.hooks module.
411 hooks = IPython.hooks
411 hooks = IPython.hooks
412 for hook_name in hooks.__all__:
412 for hook_name in hooks.__all__:
413 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
413 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
414 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
414 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
415 #print "bound hook",hook_name
415 #print "bound hook",hook_name
416
416
417 # Flag to mark unconditional exit
417 # Flag to mark unconditional exit
418 self.exit_now = False
418 self.exit_now = False
419
419
420 self.usage_min = """\
420 self.usage_min = """\
421 An enhanced console for Python.
421 An enhanced console for Python.
422 Some of its features are:
422 Some of its features are:
423 - Readline support if the readline library is present.
423 - Readline support if the readline library is present.
424 - Tab completion in the local namespace.
424 - Tab completion in the local namespace.
425 - Logging of input, see command-line options.
425 - Logging of input, see command-line options.
426 - System shell escape via ! , eg !ls.
426 - System shell escape via ! , eg !ls.
427 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
427 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
428 - Keeps track of locally defined variables via %who, %whos.
428 - Keeps track of locally defined variables via %who, %whos.
429 - Show object information with a ? eg ?x or x? (use ?? for more info).
429 - Show object information with a ? eg ?x or x? (use ?? for more info).
430 """
430 """
431 if usage: self.usage = usage
431 if usage: self.usage = usage
432 else: self.usage = self.usage_min
432 else: self.usage = self.usage_min
433
433
434 # Storage
434 # Storage
435 self.rc = rc # This will hold all configuration information
435 self.rc = rc # This will hold all configuration information
436 self.pager = 'less'
436 self.pager = 'less'
437 # temporary files used for various purposes. Deleted at exit.
437 # temporary files used for various purposes. Deleted at exit.
438 self.tempfiles = []
438 self.tempfiles = []
439
439
440 # Keep track of readline usage (later set by init_readline)
440 # Keep track of readline usage (later set by init_readline)
441 self.has_readline = False
441 self.has_readline = False
442
442
443 # template for logfile headers. It gets resolved at runtime by the
443 # template for logfile headers. It gets resolved at runtime by the
444 # logstart method.
444 # logstart method.
445 self.loghead_tpl = \
445 self.loghead_tpl = \
446 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
446 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
447 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
447 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
448 #log# opts = %s
448 #log# opts = %s
449 #log# args = %s
449 #log# args = %s
450 #log# It is safe to make manual edits below here.
450 #log# It is safe to make manual edits below here.
451 #log#-----------------------------------------------------------------------
451 #log#-----------------------------------------------------------------------
452 """
452 """
453 # for pushd/popd management
453 # for pushd/popd management
454 try:
454 try:
455 self.home_dir = get_home_dir()
455 self.home_dir = get_home_dir()
456 except HomeDirError,msg:
456 except HomeDirError,msg:
457 fatal(msg)
457 fatal(msg)
458
458
459 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
459 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
460
460
461 # Functions to call the underlying shell.
461 # Functions to call the underlying shell.
462
462
463 # utility to expand user variables via Itpl
463 # utility to expand user variables via Itpl
464 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
464 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
465 self.user_ns))
465 self.user_ns))
466 # The first is similar to os.system, but it doesn't return a value,
466 # The first is similar to os.system, but it doesn't return a value,
467 # and it allows interpolation of variables in the user's namespace.
467 # and it allows interpolation of variables in the user's namespace.
468 self.system = lambda cmd: shell(self.var_expand(cmd),
468 self.system = lambda cmd: shell(self.var_expand(cmd),
469 header='IPython system call: ',
469 header='IPython system call: ',
470 verbose=self.rc.system_verbose)
470 verbose=self.rc.system_verbose)
471 # These are for getoutput and getoutputerror:
471 # These are for getoutput and getoutputerror:
472 self.getoutput = lambda cmd: \
472 self.getoutput = lambda cmd: \
473 getoutput(self.var_expand(cmd),
473 getoutput(self.var_expand(cmd),
474 header='IPython system call: ',
474 header='IPython system call: ',
475 verbose=self.rc.system_verbose)
475 verbose=self.rc.system_verbose)
476 self.getoutputerror = lambda cmd: \
476 self.getoutputerror = lambda cmd: \
477 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
477 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
478 self.user_ns)),
478 self.user_ns)),
479 header='IPython system call: ',
479 header='IPython system call: ',
480 verbose=self.rc.system_verbose)
480 verbose=self.rc.system_verbose)
481
481
482 # RegExp for splitting line contents into pre-char//first
482 # RegExp for splitting line contents into pre-char//first
483 # word-method//rest. For clarity, each group in on one line.
483 # word-method//rest. For clarity, each group in on one line.
484
484
485 # WARNING: update the regexp if the above escapes are changed, as they
485 # WARNING: update the regexp if the above escapes are changed, as they
486 # are hardwired in.
486 # are hardwired in.
487
487
488 # Don't get carried away with trying to make the autocalling catch too
488 # Don't get carried away with trying to make the autocalling catch too
489 # much: it's better to be conservative rather than to trigger hidden
489 # much: it's better to be conservative rather than to trigger hidden
490 # evals() somewhere and end up causing side effects.
490 # evals() somewhere and end up causing side effects.
491
491
492 self.line_split = re.compile(r'^([\s*,;/])'
492 self.line_split = re.compile(r'^([\s*,;/])'
493 r'([\?\w\.]+\w*\s*)'
493 r'([\?\w\.]+\w*\s*)'
494 r'(\(?.*$)')
494 r'(\(?.*$)')
495
495
496 # Original re, keep around for a while in case changes break something
496 # Original re, keep around for a while in case changes break something
497 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
497 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
498 # r'(\s*[\?\w\.]+\w*\s*)'
498 # r'(\s*[\?\w\.]+\w*\s*)'
499 # r'(\(?.*$)')
499 # r'(\(?.*$)')
500
500
501 # RegExp to identify potential function names
501 # RegExp to identify potential function names
502 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
502 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
503
503
504 # RegExp to exclude strings with this start from autocalling. In
504 # RegExp to exclude strings with this start from autocalling. In
505 # particular, all binary operators should be excluded, so that if foo
505 # particular, all binary operators should be excluded, so that if foo
506 # is callable, foo OP bar doesn't become foo(OP bar), which is
506 # is callable, foo OP bar doesn't become foo(OP bar), which is
507 # invalid. The characters '!=()' don't need to be checked for, as the
507 # invalid. The characters '!=()' don't need to be checked for, as the
508 # _prefilter routine explicitely does so, to catch direct calls and
508 # _prefilter routine explicitely does so, to catch direct calls and
509 # rebindings of existing names.
509 # rebindings of existing names.
510
510
511 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
511 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
512 # it affects the rest of the group in square brackets.
512 # it affects the rest of the group in square brackets.
513 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
513 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
514 '|^is |^not |^in |^and |^or ')
514 '|^is |^not |^in |^and |^or ')
515
515
516 # try to catch also methods for stuff in lists/tuples/dicts: off
516 # try to catch also methods for stuff in lists/tuples/dicts: off
517 # (experimental). For this to work, the line_split regexp would need
517 # (experimental). For this to work, the line_split regexp would need
518 # to be modified so it wouldn't break things at '['. That line is
518 # to be modified so it wouldn't break things at '['. That line is
519 # nasty enough that I shouldn't change it until I can test it _well_.
519 # nasty enough that I shouldn't change it until I can test it _well_.
520 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
520 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
521
521
522 # keep track of where we started running (mainly for crash post-mortem)
522 # keep track of where we started running (mainly for crash post-mortem)
523 self.starting_dir = os.getcwd()
523 self.starting_dir = os.getcwd()
524
524
525 # Various switches which can be set
525 # Various switches which can be set
526 self.CACHELENGTH = 5000 # this is cheap, it's just text
526 self.CACHELENGTH = 5000 # this is cheap, it's just text
527 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
527 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
528 self.banner2 = banner2
528 self.banner2 = banner2
529
529
530 # TraceBack handlers:
530 # TraceBack handlers:
531
531
532 # Syntax error handler.
532 # Syntax error handler.
533 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
533 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
534
534
535 # The interactive one is initialized with an offset, meaning we always
535 # The interactive one is initialized with an offset, meaning we always
536 # want to remove the topmost item in the traceback, which is our own
536 # want to remove the topmost item in the traceback, which is our own
537 # internal code. Valid modes: ['Plain','Context','Verbose']
537 # internal code. Valid modes: ['Plain','Context','Verbose']
538 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
538 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
539 color_scheme='NoColor',
539 color_scheme='NoColor',
540 tb_offset = 1)
540 tb_offset = 1)
541
541
542 # IPython itself shouldn't crash. This will produce a detailed
542 # IPython itself shouldn't crash. This will produce a detailed
543 # post-mortem if it does. But we only install the crash handler for
543 # post-mortem if it does. But we only install the crash handler for
544 # non-threaded shells, the threaded ones use a normal verbose reporter
544 # non-threaded shells, the threaded ones use a normal verbose reporter
545 # and lose the crash handler. This is because exceptions in the main
545 # and lose the crash handler. This is because exceptions in the main
546 # thread (such as in GUI code) propagate directly to sys.excepthook,
546 # thread (such as in GUI code) propagate directly to sys.excepthook,
547 # and there's no point in printing crash dumps for every user exception.
547 # and there's no point in printing crash dumps for every user exception.
548 if self.isthreaded:
548 if self.isthreaded:
549 sys.excepthook = ultraTB.FormattedTB()
549 sys.excepthook = ultraTB.FormattedTB()
550 else:
550 else:
551 from IPython import CrashHandler
551 from IPython import CrashHandler
552 sys.excepthook = CrashHandler.CrashHandler(self)
552 sys.excepthook = CrashHandler.CrashHandler(self)
553
553
554 # The instance will store a pointer to this, so that runtime code
554 # The instance will store a pointer to this, so that runtime code
555 # (such as magics) can access it. This is because during the
555 # (such as magics) can access it. This is because during the
556 # read-eval loop, it gets temporarily overwritten (to deal with GUI
556 # read-eval loop, it gets temporarily overwritten (to deal with GUI
557 # frameworks).
557 # frameworks).
558 self.sys_excepthook = sys.excepthook
558 self.sys_excepthook = sys.excepthook
559
559
560 # and add any custom exception handlers the user may have specified
560 # and add any custom exception handlers the user may have specified
561 self.set_custom_exc(*custom_exceptions)
561 self.set_custom_exc(*custom_exceptions)
562
562
563 # Object inspector
563 # Object inspector
564 self.inspector = OInspect.Inspector(OInspect.InspectColors,
564 self.inspector = OInspect.Inspector(OInspect.InspectColors,
565 PyColorize.ANSICodeColors,
565 PyColorize.ANSICodeColors,
566 'NoColor')
566 'NoColor')
567 # indentation management
567 # indentation management
568 self.autoindent = False
568 self.autoindent = False
569 self.indent_current_nsp = 0
569 self.indent_current_nsp = 0
570
570
571 # Make some aliases automatically
571 # Make some aliases automatically
572 # Prepare list of shell aliases to auto-define
572 # Prepare list of shell aliases to auto-define
573 if os.name == 'posix':
573 if os.name == 'posix':
574 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
574 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
575 'mv mv -i','rm rm -i','cp cp -i',
575 'mv mv -i','rm rm -i','cp cp -i',
576 'cat cat','less less','clear clear',
576 'cat cat','less less','clear clear',
577 # a better ls
577 # a better ls
578 'ls ls -F',
578 'ls ls -F',
579 # long ls
579 # long ls
580 'll ls -lF',
580 'll ls -lF',
581 # color ls
581 # color ls
582 'lc ls -F -o --color',
582 'lc ls -F -o --color',
583 # ls normal files only
583 # ls normal files only
584 'lf ls -F -o --color %l | grep ^-',
584 'lf ls -F -o --color %l | grep ^-',
585 # ls symbolic links
585 # ls symbolic links
586 'lk ls -F -o --color %l | grep ^l',
586 'lk ls -F -o --color %l | grep ^l',
587 # directories or links to directories,
587 # directories or links to directories,
588 'ldir ls -F -o --color %l | grep /$',
588 'ldir ls -F -o --color %l | grep /$',
589 # things which are executable
589 # things which are executable
590 'lx ls -F -o --color %l | grep ^-..x',
590 'lx ls -F -o --color %l | grep ^-..x',
591 )
591 )
592 elif os.name in ['nt','dos']:
592 elif os.name in ['nt','dos']:
593 auto_alias = ('dir dir /on', 'ls dir /on',
593 auto_alias = ('dir dir /on', 'ls dir /on',
594 'ddir dir /ad /on', 'ldir dir /ad /on',
594 'ddir dir /ad /on', 'ldir dir /ad /on',
595 'mkdir mkdir','rmdir rmdir','echo echo',
595 'mkdir mkdir','rmdir rmdir','echo echo',
596 'ren ren','cls cls','copy copy')
596 'ren ren','cls cls','copy copy')
597 else:
597 else:
598 auto_alias = ()
598 auto_alias = ()
599 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
599 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
600 # Call the actual (public) initializer
600 # Call the actual (public) initializer
601 self.init_auto_alias()
601 self.init_auto_alias()
602 # end __init__
602 # end __init__
603
603
604 def pre_config_initialization(self):
604 def pre_config_initialization(self):
605 """Pre-configuration init method
605 """Pre-configuration init method
606
606
607 This is called before the configuration files are processed to
607 This is called before the configuration files are processed to
608 prepare the services the config files might need.
608 prepare the services the config files might need.
609
609
610 self.rc already has reasonable default values at this point.
610 self.rc already has reasonable default values at this point.
611 """
611 """
612 rc = self.rc
612 rc = self.rc
613
613
614 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
614 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
615
615
616
616
617 def post_config_initialization(self):
617 def post_config_initialization(self):
618 """Post configuration init method
618 """Post configuration init method
619
619
620 This is called after the configuration files have been processed to
620 This is called after the configuration files have been processed to
621 'finalize' the initialization."""
621 'finalize' the initialization."""
622
622
623 rc = self.rc
623 rc = self.rc
624
624
625 # Load readline proper
625 # Load readline proper
626 if rc.readline:
626 if rc.readline:
627 self.init_readline()
627 self.init_readline()
628
628
629 # local shortcut, this is used a LOT
629 # local shortcut, this is used a LOT
630 self.log = self.logger.log
630 self.log = self.logger.log
631
631
632 # Initialize cache, set in/out prompts and printing system
632 # Initialize cache, set in/out prompts and printing system
633 self.outputcache = CachedOutput(self,
633 self.outputcache = CachedOutput(self,
634 rc.cache_size,
634 rc.cache_size,
635 rc.pprint,
635 rc.pprint,
636 input_sep = rc.separate_in,
636 input_sep = rc.separate_in,
637 output_sep = rc.separate_out,
637 output_sep = rc.separate_out,
638 output_sep2 = rc.separate_out2,
638 output_sep2 = rc.separate_out2,
639 ps1 = rc.prompt_in1,
639 ps1 = rc.prompt_in1,
640 ps2 = rc.prompt_in2,
640 ps2 = rc.prompt_in2,
641 ps_out = rc.prompt_out,
641 ps_out = rc.prompt_out,
642 pad_left = rc.prompts_pad_left)
642 pad_left = rc.prompts_pad_left)
643
643
644 # user may have over-ridden the default print hook:
644 # user may have over-ridden the default print hook:
645 try:
645 try:
646 self.outputcache.__class__.display = self.hooks.display
646 self.outputcache.__class__.display = self.hooks.display
647 except AttributeError:
647 except AttributeError:
648 pass
648 pass
649
649
650 # I don't like assigning globally to sys, because it means when embedding
650 # I don't like assigning globally to sys, because it means when embedding
651 # instances, each embedded instance overrides the previous choice. But
651 # instances, each embedded instance overrides the previous choice. But
652 # sys.displayhook seems to be called internally by exec, so I don't see a
652 # sys.displayhook seems to be called internally by exec, so I don't see a
653 # way around it.
653 # way around it.
654 sys.displayhook = self.outputcache
654 sys.displayhook = self.outputcache
655
655
656 # Set user colors (don't do it in the constructor above so that it
656 # Set user colors (don't do it in the constructor above so that it
657 # doesn't crash if colors option is invalid)
657 # doesn't crash if colors option is invalid)
658 self.magic_colors(rc.colors)
658 self.magic_colors(rc.colors)
659
659
660 # Set calling of pdb on exceptions
660 # Set calling of pdb on exceptions
661 self.call_pdb = rc.pdb
661 self.call_pdb = rc.pdb
662
662
663 # Load user aliases
663 # Load user aliases
664 for alias in rc.alias:
664 for alias in rc.alias:
665 self.magic_alias(alias)
665 self.magic_alias(alias)
666 self.hooks.late_startup_hook()
666 self.hooks.late_startup_hook()
667
667
668 for batchfile in [path(arg) for arg in self.rc.args
669 if arg.lower().endswith('.ipy')]:
670 if not batchfile.isfile():
671 print "No such batch file:", batchfile
672 continue
673 self.api.runlines(batchfile.text())
668
674
669 def add_builtins(self):
675 def add_builtins(self):
670 """Store ipython references into the builtin namespace.
676 """Store ipython references into the builtin namespace.
671
677
672 Some parts of ipython operate via builtins injected here, which hold a
678 Some parts of ipython operate via builtins injected here, which hold a
673 reference to IPython itself."""
679 reference to IPython itself."""
674
680
675 # TODO: deprecate all except _ip; 'jobs' should be installed
681 # TODO: deprecate all except _ip; 'jobs' should be installed
676 # by an extension and the rest are under _ip, ipalias is redundant
682 # by an extension and the rest are under _ip, ipalias is redundant
677 builtins_new = dict(__IPYTHON__ = self,
683 builtins_new = dict(__IPYTHON__ = self,
678 ip_set_hook = self.set_hook,
684 ip_set_hook = self.set_hook,
679 jobs = self.jobs,
685 jobs = self.jobs,
680 ipmagic = self.ipmagic,
686 ipmagic = self.ipmagic,
681 ipalias = self.ipalias,
687 ipalias = self.ipalias,
682 ipsystem = self.ipsystem,
688 ipsystem = self.ipsystem,
683 _ip = self.api
689 _ip = self.api
684 )
690 )
685 for biname,bival in builtins_new.items():
691 for biname,bival in builtins_new.items():
686 try:
692 try:
687 # store the orignal value so we can restore it
693 # store the orignal value so we can restore it
688 self.builtins_added[biname] = __builtin__.__dict__[biname]
694 self.builtins_added[biname] = __builtin__.__dict__[biname]
689 except KeyError:
695 except KeyError:
690 # or mark that it wasn't defined, and we'll just delete it at
696 # or mark that it wasn't defined, and we'll just delete it at
691 # cleanup
697 # cleanup
692 self.builtins_added[biname] = Undefined
698 self.builtins_added[biname] = Undefined
693 __builtin__.__dict__[biname] = bival
699 __builtin__.__dict__[biname] = bival
694
700
695 # Keep in the builtins a flag for when IPython is active. We set it
701 # Keep in the builtins a flag for when IPython is active. We set it
696 # with setdefault so that multiple nested IPythons don't clobber one
702 # with setdefault so that multiple nested IPythons don't clobber one
697 # another. Each will increase its value by one upon being activated,
703 # another. Each will increase its value by one upon being activated,
698 # which also gives us a way to determine the nesting level.
704 # which also gives us a way to determine the nesting level.
699 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
705 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
700
706
701 def clean_builtins(self):
707 def clean_builtins(self):
702 """Remove any builtins which might have been added by add_builtins, or
708 """Remove any builtins which might have been added by add_builtins, or
703 restore overwritten ones to their previous values."""
709 restore overwritten ones to their previous values."""
704 for biname,bival in self.builtins_added.items():
710 for biname,bival in self.builtins_added.items():
705 if bival is Undefined:
711 if bival is Undefined:
706 del __builtin__.__dict__[biname]
712 del __builtin__.__dict__[biname]
707 else:
713 else:
708 __builtin__.__dict__[biname] = bival
714 __builtin__.__dict__[biname] = bival
709 self.builtins_added.clear()
715 self.builtins_added.clear()
710
716
711 def set_hook(self,name,hook, priority = 50):
717 def set_hook(self,name,hook, priority = 50):
712 """set_hook(name,hook) -> sets an internal IPython hook.
718 """set_hook(name,hook) -> sets an internal IPython hook.
713
719
714 IPython exposes some of its internal API as user-modifiable hooks. By
720 IPython exposes some of its internal API as user-modifiable hooks. By
715 adding your function to one of these hooks, you can modify IPython's
721 adding your function to one of these hooks, you can modify IPython's
716 behavior to call at runtime your own routines."""
722 behavior to call at runtime your own routines."""
717
723
718 # At some point in the future, this should validate the hook before it
724 # At some point in the future, this should validate the hook before it
719 # accepts it. Probably at least check that the hook takes the number
725 # accepts it. Probably at least check that the hook takes the number
720 # of args it's supposed to.
726 # of args it's supposed to.
721 dp = getattr(self.hooks, name, None)
727 dp = getattr(self.hooks, name, None)
722 if name not in IPython.hooks.__all__:
728 if name not in IPython.hooks.__all__:
723 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
729 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
724 if not dp:
730 if not dp:
725 dp = IPython.hooks.CommandChainDispatcher()
731 dp = IPython.hooks.CommandChainDispatcher()
726
732
727 f = new.instancemethod(hook,self,self.__class__)
733 f = new.instancemethod(hook,self,self.__class__)
728 try:
734 try:
729 dp.add(f,priority)
735 dp.add(f,priority)
730 except AttributeError:
736 except AttributeError:
731 # it was not commandchain, plain old func - replace
737 # it was not commandchain, plain old func - replace
732 dp = f
738 dp = f
733
739
734 setattr(self.hooks,name, dp)
740 setattr(self.hooks,name, dp)
735
741
736
742
737 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
743 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
738
744
739 def set_custom_exc(self,exc_tuple,handler):
745 def set_custom_exc(self,exc_tuple,handler):
740 """set_custom_exc(exc_tuple,handler)
746 """set_custom_exc(exc_tuple,handler)
741
747
742 Set a custom exception handler, which will be called if any of the
748 Set a custom exception handler, which will be called if any of the
743 exceptions in exc_tuple occur in the mainloop (specifically, in the
749 exceptions in exc_tuple occur in the mainloop (specifically, in the
744 runcode() method.
750 runcode() method.
745
751
746 Inputs:
752 Inputs:
747
753
748 - exc_tuple: a *tuple* of valid exceptions to call the defined
754 - exc_tuple: a *tuple* of valid exceptions to call the defined
749 handler for. It is very important that you use a tuple, and NOT A
755 handler for. It is very important that you use a tuple, and NOT A
750 LIST here, because of the way Python's except statement works. If
756 LIST here, because of the way Python's except statement works. If
751 you only want to trap a single exception, use a singleton tuple:
757 you only want to trap a single exception, use a singleton tuple:
752
758
753 exc_tuple == (MyCustomException,)
759 exc_tuple == (MyCustomException,)
754
760
755 - handler: this must be defined as a function with the following
761 - handler: this must be defined as a function with the following
756 basic interface: def my_handler(self,etype,value,tb).
762 basic interface: def my_handler(self,etype,value,tb).
757
763
758 This will be made into an instance method (via new.instancemethod)
764 This will be made into an instance method (via new.instancemethod)
759 of IPython itself, and it will be called if any of the exceptions
765 of IPython itself, and it will be called if any of the exceptions
760 listed in the exc_tuple are caught. If the handler is None, an
766 listed in the exc_tuple are caught. If the handler is None, an
761 internal basic one is used, which just prints basic info.
767 internal basic one is used, which just prints basic info.
762
768
763 WARNING: by putting in your own exception handler into IPython's main
769 WARNING: by putting in your own exception handler into IPython's main
764 execution loop, you run a very good chance of nasty crashes. This
770 execution loop, you run a very good chance of nasty crashes. This
765 facility should only be used if you really know what you are doing."""
771 facility should only be used if you really know what you are doing."""
766
772
767 assert type(exc_tuple)==type(()) , \
773 assert type(exc_tuple)==type(()) , \
768 "The custom exceptions must be given AS A TUPLE."
774 "The custom exceptions must be given AS A TUPLE."
769
775
770 def dummy_handler(self,etype,value,tb):
776 def dummy_handler(self,etype,value,tb):
771 print '*** Simple custom exception handler ***'
777 print '*** Simple custom exception handler ***'
772 print 'Exception type :',etype
778 print 'Exception type :',etype
773 print 'Exception value:',value
779 print 'Exception value:',value
774 print 'Traceback :',tb
780 print 'Traceback :',tb
775 print 'Source code :','\n'.join(self.buffer)
781 print 'Source code :','\n'.join(self.buffer)
776
782
777 if handler is None: handler = dummy_handler
783 if handler is None: handler = dummy_handler
778
784
779 self.CustomTB = new.instancemethod(handler,self,self.__class__)
785 self.CustomTB = new.instancemethod(handler,self,self.__class__)
780 self.custom_exceptions = exc_tuple
786 self.custom_exceptions = exc_tuple
781
787
782 def set_custom_completer(self,completer,pos=0):
788 def set_custom_completer(self,completer,pos=0):
783 """set_custom_completer(completer,pos=0)
789 """set_custom_completer(completer,pos=0)
784
790
785 Adds a new custom completer function.
791 Adds a new custom completer function.
786
792
787 The position argument (defaults to 0) is the index in the completers
793 The position argument (defaults to 0) is the index in the completers
788 list where you want the completer to be inserted."""
794 list where you want the completer to be inserted."""
789
795
790 newcomp = new.instancemethod(completer,self.Completer,
796 newcomp = new.instancemethod(completer,self.Completer,
791 self.Completer.__class__)
797 self.Completer.__class__)
792 self.Completer.matchers.insert(pos,newcomp)
798 self.Completer.matchers.insert(pos,newcomp)
793
799
794 def _get_call_pdb(self):
800 def _get_call_pdb(self):
795 return self._call_pdb
801 return self._call_pdb
796
802
797 def _set_call_pdb(self,val):
803 def _set_call_pdb(self,val):
798
804
799 if val not in (0,1,False,True):
805 if val not in (0,1,False,True):
800 raise ValueError,'new call_pdb value must be boolean'
806 raise ValueError,'new call_pdb value must be boolean'
801
807
802 # store value in instance
808 # store value in instance
803 self._call_pdb = val
809 self._call_pdb = val
804
810
805 # notify the actual exception handlers
811 # notify the actual exception handlers
806 self.InteractiveTB.call_pdb = val
812 self.InteractiveTB.call_pdb = val
807 if self.isthreaded:
813 if self.isthreaded:
808 try:
814 try:
809 self.sys_excepthook.call_pdb = val
815 self.sys_excepthook.call_pdb = val
810 except:
816 except:
811 warn('Failed to activate pdb for threaded exception handler')
817 warn('Failed to activate pdb for threaded exception handler')
812
818
813 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
819 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
814 'Control auto-activation of pdb at exceptions')
820 'Control auto-activation of pdb at exceptions')
815
821
816
822
817 # These special functions get installed in the builtin namespace, to
823 # These special functions get installed in the builtin namespace, to
818 # provide programmatic (pure python) access to magics, aliases and system
824 # provide programmatic (pure python) access to magics, aliases and system
819 # calls. This is important for logging, user scripting, and more.
825 # calls. This is important for logging, user scripting, and more.
820
826
821 # We are basically exposing, via normal python functions, the three
827 # We are basically exposing, via normal python functions, the three
822 # mechanisms in which ipython offers special call modes (magics for
828 # mechanisms in which ipython offers special call modes (magics for
823 # internal control, aliases for direct system access via pre-selected
829 # internal control, aliases for direct system access via pre-selected
824 # names, and !cmd for calling arbitrary system commands).
830 # names, and !cmd for calling arbitrary system commands).
825
831
826 def ipmagic(self,arg_s):
832 def ipmagic(self,arg_s):
827 """Call a magic function by name.
833 """Call a magic function by name.
828
834
829 Input: a string containing the name of the magic function to call and any
835 Input: a string containing the name of the magic function to call and any
830 additional arguments to be passed to the magic.
836 additional arguments to be passed to the magic.
831
837
832 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
838 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
833 prompt:
839 prompt:
834
840
835 In[1]: %name -opt foo bar
841 In[1]: %name -opt foo bar
836
842
837 To call a magic without arguments, simply use ipmagic('name').
843 To call a magic without arguments, simply use ipmagic('name').
838
844
839 This provides a proper Python function to call IPython's magics in any
845 This provides a proper Python function to call IPython's magics in any
840 valid Python code you can type at the interpreter, including loops and
846 valid Python code you can type at the interpreter, including loops and
841 compound statements. It is added by IPython to the Python builtin
847 compound statements. It is added by IPython to the Python builtin
842 namespace upon initialization."""
848 namespace upon initialization."""
843
849
844 args = arg_s.split(' ',1)
850 args = arg_s.split(' ',1)
845 magic_name = args[0]
851 magic_name = args[0]
846 magic_name = magic_name.lstrip(self.ESC_MAGIC)
852 magic_name = magic_name.lstrip(self.ESC_MAGIC)
847
853
848 try:
854 try:
849 magic_args = args[1]
855 magic_args = args[1]
850 except IndexError:
856 except IndexError:
851 magic_args = ''
857 magic_args = ''
852 fn = getattr(self,'magic_'+magic_name,None)
858 fn = getattr(self,'magic_'+magic_name,None)
853 if fn is None:
859 if fn is None:
854 error("Magic function `%s` not found." % magic_name)
860 error("Magic function `%s` not found." % magic_name)
855 else:
861 else:
856 magic_args = self.var_expand(magic_args)
862 magic_args = self.var_expand(magic_args)
857 return fn(magic_args)
863 return fn(magic_args)
858
864
859 def ipalias(self,arg_s):
865 def ipalias(self,arg_s):
860 """Call an alias by name.
866 """Call an alias by name.
861
867
862 Input: a string containing the name of the alias to call and any
868 Input: a string containing the name of the alias to call and any
863 additional arguments to be passed to the magic.
869 additional arguments to be passed to the magic.
864
870
865 ipalias('name -opt foo bar') is equivalent to typing at the ipython
871 ipalias('name -opt foo bar') is equivalent to typing at the ipython
866 prompt:
872 prompt:
867
873
868 In[1]: name -opt foo bar
874 In[1]: name -opt foo bar
869
875
870 To call an alias without arguments, simply use ipalias('name').
876 To call an alias without arguments, simply use ipalias('name').
871
877
872 This provides a proper Python function to call IPython's aliases in any
878 This provides a proper Python function to call IPython's aliases in any
873 valid Python code you can type at the interpreter, including loops and
879 valid Python code you can type at the interpreter, including loops and
874 compound statements. It is added by IPython to the Python builtin
880 compound statements. It is added by IPython to the Python builtin
875 namespace upon initialization."""
881 namespace upon initialization."""
876
882
877 args = arg_s.split(' ',1)
883 args = arg_s.split(' ',1)
878 alias_name = args[0]
884 alias_name = args[0]
879 try:
885 try:
880 alias_args = args[1]
886 alias_args = args[1]
881 except IndexError:
887 except IndexError:
882 alias_args = ''
888 alias_args = ''
883 if alias_name in self.alias_table:
889 if alias_name in self.alias_table:
884 self.call_alias(alias_name,alias_args)
890 self.call_alias(alias_name,alias_args)
885 else:
891 else:
886 error("Alias `%s` not found." % alias_name)
892 error("Alias `%s` not found." % alias_name)
887
893
888 def ipsystem(self,arg_s):
894 def ipsystem(self,arg_s):
889 """Make a system call, using IPython."""
895 """Make a system call, using IPython."""
890
896
891 self.system(arg_s)
897 self.system(arg_s)
892
898
893 def complete(self,text):
899 def complete(self,text):
894 """Return a sorted list of all possible completions on text.
900 """Return a sorted list of all possible completions on text.
895
901
896 Inputs:
902 Inputs:
897
903
898 - text: a string of text to be completed on.
904 - text: a string of text to be completed on.
899
905
900 This is a wrapper around the completion mechanism, similar to what
906 This is a wrapper around the completion mechanism, similar to what
901 readline does at the command line when the TAB key is hit. By
907 readline does at the command line when the TAB key is hit. By
902 exposing it as a method, it can be used by other non-readline
908 exposing it as a method, it can be used by other non-readline
903 environments (such as GUIs) for text completion.
909 environments (such as GUIs) for text completion.
904
910
905 Simple usage example:
911 Simple usage example:
906
912
907 In [1]: x = 'hello'
913 In [1]: x = 'hello'
908
914
909 In [2]: __IP.complete('x.l')
915 In [2]: __IP.complete('x.l')
910 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
916 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
911
917
912 complete = self.Completer.complete
918 complete = self.Completer.complete
913 state = 0
919 state = 0
914 # use a dict so we get unique keys, since ipyhton's multiple
920 # use a dict so we get unique keys, since ipyhton's multiple
915 # completers can return duplicates.
921 # completers can return duplicates.
916 comps = {}
922 comps = {}
917 while True:
923 while True:
918 newcomp = complete(text,state)
924 newcomp = complete(text,state)
919 if newcomp is None:
925 if newcomp is None:
920 break
926 break
921 comps[newcomp] = 1
927 comps[newcomp] = 1
922 state += 1
928 state += 1
923 outcomps = comps.keys()
929 outcomps = comps.keys()
924 outcomps.sort()
930 outcomps.sort()
925 return outcomps
931 return outcomps
926
932
927 def set_completer_frame(self, frame=None):
933 def set_completer_frame(self, frame=None):
928 if frame:
934 if frame:
929 self.Completer.namespace = frame.f_locals
935 self.Completer.namespace = frame.f_locals
930 self.Completer.global_namespace = frame.f_globals
936 self.Completer.global_namespace = frame.f_globals
931 else:
937 else:
932 self.Completer.namespace = self.user_ns
938 self.Completer.namespace = self.user_ns
933 self.Completer.global_namespace = self.user_global_ns
939 self.Completer.global_namespace = self.user_global_ns
934
940
935 def init_auto_alias(self):
941 def init_auto_alias(self):
936 """Define some aliases automatically.
942 """Define some aliases automatically.
937
943
938 These are ALL parameter-less aliases"""
944 These are ALL parameter-less aliases"""
939
945
940 for alias,cmd in self.auto_alias:
946 for alias,cmd in self.auto_alias:
941 self.alias_table[alias] = (0,cmd)
947 self.alias_table[alias] = (0,cmd)
942
948
943 def alias_table_validate(self,verbose=0):
949 def alias_table_validate(self,verbose=0):
944 """Update information about the alias table.
950 """Update information about the alias table.
945
951
946 In particular, make sure no Python keywords/builtins are in it."""
952 In particular, make sure no Python keywords/builtins are in it."""
947
953
948 no_alias = self.no_alias
954 no_alias = self.no_alias
949 for k in self.alias_table.keys():
955 for k in self.alias_table.keys():
950 if k in no_alias:
956 if k in no_alias:
951 del self.alias_table[k]
957 del self.alias_table[k]
952 if verbose:
958 if verbose:
953 print ("Deleting alias <%s>, it's a Python "
959 print ("Deleting alias <%s>, it's a Python "
954 "keyword or builtin." % k)
960 "keyword or builtin." % k)
955
961
956 def set_autoindent(self,value=None):
962 def set_autoindent(self,value=None):
957 """Set the autoindent flag, checking for readline support.
963 """Set the autoindent flag, checking for readline support.
958
964
959 If called with no arguments, it acts as a toggle."""
965 If called with no arguments, it acts as a toggle."""
960
966
961 if not self.has_readline:
967 if not self.has_readline:
962 if os.name == 'posix':
968 if os.name == 'posix':
963 warn("The auto-indent feature requires the readline library")
969 warn("The auto-indent feature requires the readline library")
964 self.autoindent = 0
970 self.autoindent = 0
965 return
971 return
966 if value is None:
972 if value is None:
967 self.autoindent = not self.autoindent
973 self.autoindent = not self.autoindent
968 else:
974 else:
969 self.autoindent = value
975 self.autoindent = value
970
976
971 def rc_set_toggle(self,rc_field,value=None):
977 def rc_set_toggle(self,rc_field,value=None):
972 """Set or toggle a field in IPython's rc config. structure.
978 """Set or toggle a field in IPython's rc config. structure.
973
979
974 If called with no arguments, it acts as a toggle.
980 If called with no arguments, it acts as a toggle.
975
981
976 If called with a non-existent field, the resulting AttributeError
982 If called with a non-existent field, the resulting AttributeError
977 exception will propagate out."""
983 exception will propagate out."""
978
984
979 rc_val = getattr(self.rc,rc_field)
985 rc_val = getattr(self.rc,rc_field)
980 if value is None:
986 if value is None:
981 value = not rc_val
987 value = not rc_val
982 setattr(self.rc,rc_field,value)
988 setattr(self.rc,rc_field,value)
983
989
984 def user_setup(self,ipythondir,rc_suffix,mode='install'):
990 def user_setup(self,ipythondir,rc_suffix,mode='install'):
985 """Install the user configuration directory.
991 """Install the user configuration directory.
986
992
987 Can be called when running for the first time or to upgrade the user's
993 Can be called when running for the first time or to upgrade the user's
988 .ipython/ directory with the mode parameter. Valid modes are 'install'
994 .ipython/ directory with the mode parameter. Valid modes are 'install'
989 and 'upgrade'."""
995 and 'upgrade'."""
990
996
991 def wait():
997 def wait():
992 try:
998 try:
993 raw_input("Please press <RETURN> to start IPython.")
999 raw_input("Please press <RETURN> to start IPython.")
994 except EOFError:
1000 except EOFError:
995 print >> Term.cout
1001 print >> Term.cout
996 print '*'*70
1002 print '*'*70
997
1003
998 cwd = os.getcwd() # remember where we started
1004 cwd = os.getcwd() # remember where we started
999 glb = glob.glob
1005 glb = glob.glob
1000 print '*'*70
1006 print '*'*70
1001 if mode == 'install':
1007 if mode == 'install':
1002 print \
1008 print \
1003 """Welcome to IPython. I will try to create a personal configuration directory
1009 """Welcome to IPython. I will try to create a personal configuration directory
1004 where you can customize many aspects of IPython's functionality in:\n"""
1010 where you can customize many aspects of IPython's functionality in:\n"""
1005 else:
1011 else:
1006 print 'I am going to upgrade your configuration in:'
1012 print 'I am going to upgrade your configuration in:'
1007
1013
1008 print ipythondir
1014 print ipythondir
1009
1015
1010 rcdirend = os.path.join('IPython','UserConfig')
1016 rcdirend = os.path.join('IPython','UserConfig')
1011 cfg = lambda d: os.path.join(d,rcdirend)
1017 cfg = lambda d: os.path.join(d,rcdirend)
1012 try:
1018 try:
1013 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1019 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1014 except IOError:
1020 except IOError:
1015 warning = """
1021 warning = """
1016 Installation error. IPython's directory was not found.
1022 Installation error. IPython's directory was not found.
1017
1023
1018 Check the following:
1024 Check the following:
1019
1025
1020 The ipython/IPython directory should be in a directory belonging to your
1026 The ipython/IPython directory should be in a directory belonging to your
1021 PYTHONPATH environment variable (that is, it should be in a directory
1027 PYTHONPATH environment variable (that is, it should be in a directory
1022 belonging to sys.path). You can copy it explicitly there or just link to it.
1028 belonging to sys.path). You can copy it explicitly there or just link to it.
1023
1029
1024 IPython will proceed with builtin defaults.
1030 IPython will proceed with builtin defaults.
1025 """
1031 """
1026 warn(warning)
1032 warn(warning)
1027 wait()
1033 wait()
1028 return
1034 return
1029
1035
1030 if mode == 'install':
1036 if mode == 'install':
1031 try:
1037 try:
1032 shutil.copytree(rcdir,ipythondir)
1038 shutil.copytree(rcdir,ipythondir)
1033 os.chdir(ipythondir)
1039 os.chdir(ipythondir)
1034 rc_files = glb("ipythonrc*")
1040 rc_files = glb("ipythonrc*")
1035 for rc_file in rc_files:
1041 for rc_file in rc_files:
1036 os.rename(rc_file,rc_file+rc_suffix)
1042 os.rename(rc_file,rc_file+rc_suffix)
1037 except:
1043 except:
1038 warning = """
1044 warning = """
1039
1045
1040 There was a problem with the installation:
1046 There was a problem with the installation:
1041 %s
1047 %s
1042 Try to correct it or contact the developers if you think it's a bug.
1048 Try to correct it or contact the developers if you think it's a bug.
1043 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1049 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1044 warn(warning)
1050 warn(warning)
1045 wait()
1051 wait()
1046 return
1052 return
1047
1053
1048 elif mode == 'upgrade':
1054 elif mode == 'upgrade':
1049 try:
1055 try:
1050 os.chdir(ipythondir)
1056 os.chdir(ipythondir)
1051 except:
1057 except:
1052 print """
1058 print """
1053 Can not upgrade: changing to directory %s failed. Details:
1059 Can not upgrade: changing to directory %s failed. Details:
1054 %s
1060 %s
1055 """ % (ipythondir,sys.exc_info()[1])
1061 """ % (ipythondir,sys.exc_info()[1])
1056 wait()
1062 wait()
1057 return
1063 return
1058 else:
1064 else:
1059 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1065 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1060 for new_full_path in sources:
1066 for new_full_path in sources:
1061 new_filename = os.path.basename(new_full_path)
1067 new_filename = os.path.basename(new_full_path)
1062 if new_filename.startswith('ipythonrc'):
1068 if new_filename.startswith('ipythonrc'):
1063 new_filename = new_filename + rc_suffix
1069 new_filename = new_filename + rc_suffix
1064 # The config directory should only contain files, skip any
1070 # The config directory should only contain files, skip any
1065 # directories which may be there (like CVS)
1071 # directories which may be there (like CVS)
1066 if os.path.isdir(new_full_path):
1072 if os.path.isdir(new_full_path):
1067 continue
1073 continue
1068 if os.path.exists(new_filename):
1074 if os.path.exists(new_filename):
1069 old_file = new_filename+'.old'
1075 old_file = new_filename+'.old'
1070 if os.path.exists(old_file):
1076 if os.path.exists(old_file):
1071 os.remove(old_file)
1077 os.remove(old_file)
1072 os.rename(new_filename,old_file)
1078 os.rename(new_filename,old_file)
1073 shutil.copy(new_full_path,new_filename)
1079 shutil.copy(new_full_path,new_filename)
1074 else:
1080 else:
1075 raise ValueError,'unrecognized mode for install:',`mode`
1081 raise ValueError,'unrecognized mode for install:',`mode`
1076
1082
1077 # Fix line-endings to those native to each platform in the config
1083 # Fix line-endings to those native to each platform in the config
1078 # directory.
1084 # directory.
1079 try:
1085 try:
1080 os.chdir(ipythondir)
1086 os.chdir(ipythondir)
1081 except:
1087 except:
1082 print """
1088 print """
1083 Problem: changing to directory %s failed.
1089 Problem: changing to directory %s failed.
1084 Details:
1090 Details:
1085 %s
1091 %s
1086
1092
1087 Some configuration files may have incorrect line endings. This should not
1093 Some configuration files may have incorrect line endings. This should not
1088 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1094 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1089 wait()
1095 wait()
1090 else:
1096 else:
1091 for fname in glb('ipythonrc*'):
1097 for fname in glb('ipythonrc*'):
1092 try:
1098 try:
1093 native_line_ends(fname,backup=0)
1099 native_line_ends(fname,backup=0)
1094 except IOError:
1100 except IOError:
1095 pass
1101 pass
1096
1102
1097 if mode == 'install':
1103 if mode == 'install':
1098 print """
1104 print """
1099 Successful installation!
1105 Successful installation!
1100
1106
1101 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1107 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1102 IPython manual (there are both HTML and PDF versions supplied with the
1108 IPython manual (there are both HTML and PDF versions supplied with the
1103 distribution) to make sure that your system environment is properly configured
1109 distribution) to make sure that your system environment is properly configured
1104 to take advantage of IPython's features.
1110 to take advantage of IPython's features.
1105
1111
1106 Important note: the configuration system has changed! The old system is
1112 Important note: the configuration system has changed! The old system is
1107 still in place, but its setting may be partly overridden by the settings in
1113 still in place, but its setting may be partly overridden by the settings in
1108 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1114 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1109 if some of the new settings bother you.
1115 if some of the new settings bother you.
1110
1116
1111 """
1117 """
1112 else:
1118 else:
1113 print """
1119 print """
1114 Successful upgrade!
1120 Successful upgrade!
1115
1121
1116 All files in your directory:
1122 All files in your directory:
1117 %(ipythondir)s
1123 %(ipythondir)s
1118 which would have been overwritten by the upgrade were backed up with a .old
1124 which would have been overwritten by the upgrade were backed up with a .old
1119 extension. If you had made particular customizations in those files you may
1125 extension. If you had made particular customizations in those files you may
1120 want to merge them back into the new files.""" % locals()
1126 want to merge them back into the new files.""" % locals()
1121 wait()
1127 wait()
1122 os.chdir(cwd)
1128 os.chdir(cwd)
1123 # end user_setup()
1129 # end user_setup()
1124
1130
1125 def atexit_operations(self):
1131 def atexit_operations(self):
1126 """This will be executed at the time of exit.
1132 """This will be executed at the time of exit.
1127
1133
1128 Saving of persistent data should be performed here. """
1134 Saving of persistent data should be performed here. """
1129
1135
1130 #print '*** IPython exit cleanup ***' # dbg
1136 #print '*** IPython exit cleanup ***' # dbg
1131 # input history
1137 # input history
1132 self.savehist()
1138 self.savehist()
1133
1139
1134 # Cleanup all tempfiles left around
1140 # Cleanup all tempfiles left around
1135 for tfile in self.tempfiles:
1141 for tfile in self.tempfiles:
1136 try:
1142 try:
1137 os.unlink(tfile)
1143 os.unlink(tfile)
1138 except OSError:
1144 except OSError:
1139 pass
1145 pass
1140
1146
1141 # save the "persistent data" catch-all dictionary
1147 # save the "persistent data" catch-all dictionary
1142 self.hooks.shutdown_hook()
1148 self.hooks.shutdown_hook()
1143
1149
1144 def savehist(self):
1150 def savehist(self):
1145 """Save input history to a file (via readline library)."""
1151 """Save input history to a file (via readline library)."""
1146 try:
1152 try:
1147 self.readline.write_history_file(self.histfile)
1153 self.readline.write_history_file(self.histfile)
1148 except:
1154 except:
1149 print 'Unable to save IPython command history to file: ' + \
1155 print 'Unable to save IPython command history to file: ' + \
1150 `self.histfile`
1156 `self.histfile`
1151
1157
1152 def pre_readline(self):
1158 def pre_readline(self):
1153 """readline hook to be used at the start of each line.
1159 """readline hook to be used at the start of each line.
1154
1160
1155 Currently it handles auto-indent only."""
1161 Currently it handles auto-indent only."""
1156
1162
1157 #debugx('self.indent_current_nsp','pre_readline:')
1163 #debugx('self.indent_current_nsp','pre_readline:')
1158 self.readline.insert_text(self.indent_current_str())
1164 self.readline.insert_text(self.indent_current_str())
1159
1165
1160 def init_readline(self):
1166 def init_readline(self):
1161 """Command history completion/saving/reloading."""
1167 """Command history completion/saving/reloading."""
1162
1168
1163 import IPython.rlineimpl as readline
1169 import IPython.rlineimpl as readline
1164 if not readline.have_readline:
1170 if not readline.have_readline:
1165 self.has_readline = 0
1171 self.has_readline = 0
1166 self.readline = None
1172 self.readline = None
1167 # no point in bugging windows users with this every time:
1173 # no point in bugging windows users with this every time:
1168 warn('Readline services not available on this platform.')
1174 warn('Readline services not available on this platform.')
1169 else:
1175 else:
1170 sys.modules['readline'] = readline
1176 sys.modules['readline'] = readline
1171 import atexit
1177 import atexit
1172 from IPython.completer import IPCompleter
1178 from IPython.completer import IPCompleter
1173 self.Completer = IPCompleter(self,
1179 self.Completer = IPCompleter(self,
1174 self.user_ns,
1180 self.user_ns,
1175 self.user_global_ns,
1181 self.user_global_ns,
1176 self.rc.readline_omit__names,
1182 self.rc.readline_omit__names,
1177 self.alias_table)
1183 self.alias_table)
1178
1184
1179 # Platform-specific configuration
1185 # Platform-specific configuration
1180 if os.name == 'nt':
1186 if os.name == 'nt':
1181 self.readline_startup_hook = readline.set_pre_input_hook
1187 self.readline_startup_hook = readline.set_pre_input_hook
1182 else:
1188 else:
1183 self.readline_startup_hook = readline.set_startup_hook
1189 self.readline_startup_hook = readline.set_startup_hook
1184
1190
1185 # Load user's initrc file (readline config)
1191 # Load user's initrc file (readline config)
1186 inputrc_name = os.environ.get('INPUTRC')
1192 inputrc_name = os.environ.get('INPUTRC')
1187 if inputrc_name is None:
1193 if inputrc_name is None:
1188 home_dir = get_home_dir()
1194 home_dir = get_home_dir()
1189 if home_dir is not None:
1195 if home_dir is not None:
1190 inputrc_name = os.path.join(home_dir,'.inputrc')
1196 inputrc_name = os.path.join(home_dir,'.inputrc')
1191 if os.path.isfile(inputrc_name):
1197 if os.path.isfile(inputrc_name):
1192 try:
1198 try:
1193 readline.read_init_file(inputrc_name)
1199 readline.read_init_file(inputrc_name)
1194 except:
1200 except:
1195 warn('Problems reading readline initialization file <%s>'
1201 warn('Problems reading readline initialization file <%s>'
1196 % inputrc_name)
1202 % inputrc_name)
1197
1203
1198 self.has_readline = 1
1204 self.has_readline = 1
1199 self.readline = readline
1205 self.readline = readline
1200 # save this in sys so embedded copies can restore it properly
1206 # save this in sys so embedded copies can restore it properly
1201 sys.ipcompleter = self.Completer.complete
1207 sys.ipcompleter = self.Completer.complete
1202 readline.set_completer(self.Completer.complete)
1208 readline.set_completer(self.Completer.complete)
1203
1209
1204 # Configure readline according to user's prefs
1210 # Configure readline according to user's prefs
1205 for rlcommand in self.rc.readline_parse_and_bind:
1211 for rlcommand in self.rc.readline_parse_and_bind:
1206 readline.parse_and_bind(rlcommand)
1212 readline.parse_and_bind(rlcommand)
1207
1213
1208 # remove some chars from the delimiters list
1214 # remove some chars from the delimiters list
1209 delims = readline.get_completer_delims()
1215 delims = readline.get_completer_delims()
1210 delims = delims.translate(string._idmap,
1216 delims = delims.translate(string._idmap,
1211 self.rc.readline_remove_delims)
1217 self.rc.readline_remove_delims)
1212 readline.set_completer_delims(delims)
1218 readline.set_completer_delims(delims)
1213 # otherwise we end up with a monster history after a while:
1219 # otherwise we end up with a monster history after a while:
1214 readline.set_history_length(1000)
1220 readline.set_history_length(1000)
1215 try:
1221 try:
1216 #print '*** Reading readline history' # dbg
1222 #print '*** Reading readline history' # dbg
1217 readline.read_history_file(self.histfile)
1223 readline.read_history_file(self.histfile)
1218 except IOError:
1224 except IOError:
1219 pass # It doesn't exist yet.
1225 pass # It doesn't exist yet.
1220
1226
1221 atexit.register(self.atexit_operations)
1227 atexit.register(self.atexit_operations)
1222 del atexit
1228 del atexit
1223
1229
1224 # Configure auto-indent for all platforms
1230 # Configure auto-indent for all platforms
1225 self.set_autoindent(self.rc.autoindent)
1231 self.set_autoindent(self.rc.autoindent)
1226
1232
1227 def _should_recompile(self,e):
1233 def _should_recompile(self,e):
1228 """Utility routine for edit_syntax_error"""
1234 """Utility routine for edit_syntax_error"""
1229
1235
1230 if e.filename in ('<ipython console>','<input>','<string>',
1236 if e.filename in ('<ipython console>','<input>','<string>',
1231 '<console>',None):
1237 '<console>',None):
1232
1238
1233 return False
1239 return False
1234 try:
1240 try:
1235 if (self.rc.autoedit_syntax and
1241 if (self.rc.autoedit_syntax and
1236 not ask_yes_no('Return to editor to correct syntax error? '
1242 not ask_yes_no('Return to editor to correct syntax error? '
1237 '[Y/n] ','y')):
1243 '[Y/n] ','y')):
1238 return False
1244 return False
1239 except EOFError:
1245 except EOFError:
1240 return False
1246 return False
1241
1247
1242 def int0(x):
1248 def int0(x):
1243 try:
1249 try:
1244 return int(x)
1250 return int(x)
1245 except TypeError:
1251 except TypeError:
1246 return 0
1252 return 0
1247 # always pass integer line and offset values to editor hook
1253 # always pass integer line and offset values to editor hook
1248 self.hooks.fix_error_editor(e.filename,
1254 self.hooks.fix_error_editor(e.filename,
1249 int0(e.lineno),int0(e.offset),e.msg)
1255 int0(e.lineno),int0(e.offset),e.msg)
1250 return True
1256 return True
1251
1257
1252 def edit_syntax_error(self):
1258 def edit_syntax_error(self):
1253 """The bottom half of the syntax error handler called in the main loop.
1259 """The bottom half of the syntax error handler called in the main loop.
1254
1260
1255 Loop until syntax error is fixed or user cancels.
1261 Loop until syntax error is fixed or user cancels.
1256 """
1262 """
1257
1263
1258 while self.SyntaxTB.last_syntax_error:
1264 while self.SyntaxTB.last_syntax_error:
1259 # copy and clear last_syntax_error
1265 # copy and clear last_syntax_error
1260 err = self.SyntaxTB.clear_err_state()
1266 err = self.SyntaxTB.clear_err_state()
1261 if not self._should_recompile(err):
1267 if not self._should_recompile(err):
1262 return
1268 return
1263 try:
1269 try:
1264 # may set last_syntax_error again if a SyntaxError is raised
1270 # may set last_syntax_error again if a SyntaxError is raised
1265 self.safe_execfile(err.filename,self.shell.user_ns)
1271 self.safe_execfile(err.filename,self.shell.user_ns)
1266 except:
1272 except:
1267 self.showtraceback()
1273 self.showtraceback()
1268 else:
1274 else:
1269 f = file(err.filename)
1275 f = file(err.filename)
1270 try:
1276 try:
1271 sys.displayhook(f.read())
1277 sys.displayhook(f.read())
1272 finally:
1278 finally:
1273 f.close()
1279 f.close()
1274
1280
1275 def showsyntaxerror(self, filename=None):
1281 def showsyntaxerror(self, filename=None):
1276 """Display the syntax error that just occurred.
1282 """Display the syntax error that just occurred.
1277
1283
1278 This doesn't display a stack trace because there isn't one.
1284 This doesn't display a stack trace because there isn't one.
1279
1285
1280 If a filename is given, it is stuffed in the exception instead
1286 If a filename is given, it is stuffed in the exception instead
1281 of what was there before (because Python's parser always uses
1287 of what was there before (because Python's parser always uses
1282 "<string>" when reading from a string).
1288 "<string>" when reading from a string).
1283 """
1289 """
1284 etype, value, last_traceback = sys.exc_info()
1290 etype, value, last_traceback = sys.exc_info()
1285
1291
1286 # See note about these variables in showtraceback() below
1292 # See note about these variables in showtraceback() below
1287 sys.last_type = etype
1293 sys.last_type = etype
1288 sys.last_value = value
1294 sys.last_value = value
1289 sys.last_traceback = last_traceback
1295 sys.last_traceback = last_traceback
1290
1296
1291 if filename and etype is SyntaxError:
1297 if filename and etype is SyntaxError:
1292 # Work hard to stuff the correct filename in the exception
1298 # Work hard to stuff the correct filename in the exception
1293 try:
1299 try:
1294 msg, (dummy_filename, lineno, offset, line) = value
1300 msg, (dummy_filename, lineno, offset, line) = value
1295 except:
1301 except:
1296 # Not the format we expect; leave it alone
1302 # Not the format we expect; leave it alone
1297 pass
1303 pass
1298 else:
1304 else:
1299 # Stuff in the right filename
1305 # Stuff in the right filename
1300 try:
1306 try:
1301 # Assume SyntaxError is a class exception
1307 # Assume SyntaxError is a class exception
1302 value = SyntaxError(msg, (filename, lineno, offset, line))
1308 value = SyntaxError(msg, (filename, lineno, offset, line))
1303 except:
1309 except:
1304 # If that failed, assume SyntaxError is a string
1310 # If that failed, assume SyntaxError is a string
1305 value = msg, (filename, lineno, offset, line)
1311 value = msg, (filename, lineno, offset, line)
1306 self.SyntaxTB(etype,value,[])
1312 self.SyntaxTB(etype,value,[])
1307
1313
1308 def debugger(self):
1314 def debugger(self):
1309 """Call the pdb debugger."""
1315 """Call the pdb debugger."""
1310
1316
1311 if not self.rc.pdb:
1317 if not self.rc.pdb:
1312 return
1318 return
1313 pdb.pm()
1319 pdb.pm()
1314
1320
1315 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1321 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1316 """Display the exception that just occurred."""
1322 """Display the exception that just occurred."""
1317
1323
1318 # Though this won't be called by syntax errors in the input line,
1324 # Though this won't be called by syntax errors in the input line,
1319 # there may be SyntaxError cases whith imported code.
1325 # there may be SyntaxError cases whith imported code.
1320 if exc_tuple is None:
1326 if exc_tuple is None:
1321 etype, value, tb = sys.exc_info()
1327 etype, value, tb = sys.exc_info()
1322 else:
1328 else:
1323 etype, value, tb = exc_tuple
1329 etype, value, tb = exc_tuple
1324 if etype is SyntaxError:
1330 if etype is SyntaxError:
1325 self.showsyntaxerror(filename)
1331 self.showsyntaxerror(filename)
1326 else:
1332 else:
1327 # WARNING: these variables are somewhat deprecated and not
1333 # WARNING: these variables are somewhat deprecated and not
1328 # necessarily safe to use in a threaded environment, but tools
1334 # necessarily safe to use in a threaded environment, but tools
1329 # like pdb depend on their existence, so let's set them. If we
1335 # like pdb depend on their existence, so let's set them. If we
1330 # find problems in the field, we'll need to revisit their use.
1336 # find problems in the field, we'll need to revisit their use.
1331 sys.last_type = etype
1337 sys.last_type = etype
1332 sys.last_value = value
1338 sys.last_value = value
1333 sys.last_traceback = tb
1339 sys.last_traceback = tb
1334
1340
1335 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1341 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1336 if self.InteractiveTB.call_pdb and self.has_readline:
1342 if self.InteractiveTB.call_pdb and self.has_readline:
1337 # pdb mucks up readline, fix it back
1343 # pdb mucks up readline, fix it back
1338 self.readline.set_completer(self.Completer.complete)
1344 self.readline.set_completer(self.Completer.complete)
1339
1345
1340 def mainloop(self,banner=None):
1346 def mainloop(self,banner=None):
1341 """Creates the local namespace and starts the mainloop.
1347 """Creates the local namespace and starts the mainloop.
1342
1348
1343 If an optional banner argument is given, it will override the
1349 If an optional banner argument is given, it will override the
1344 internally created default banner."""
1350 internally created default banner."""
1345
1351
1346 if self.rc.c: # Emulate Python's -c option
1352 if self.rc.c: # Emulate Python's -c option
1347 self.exec_init_cmd()
1353 self.exec_init_cmd()
1348 if banner is None:
1354 if banner is None:
1349 if not self.rc.banner:
1355 if not self.rc.banner:
1350 banner = ''
1356 banner = ''
1351 # banner is string? Use it directly!
1357 # banner is string? Use it directly!
1352 elif isinstance(self.rc.banner,basestring):
1358 elif isinstance(self.rc.banner,basestring):
1353 banner = self.rc.banner
1359 banner = self.rc.banner
1354 else:
1360 else:
1355 banner = self.BANNER+self.banner2
1361 banner = self.BANNER+self.banner2
1356
1362
1357 self.interact(banner)
1363 self.interact(banner)
1358
1364
1359 def exec_init_cmd(self):
1365 def exec_init_cmd(self):
1360 """Execute a command given at the command line.
1366 """Execute a command given at the command line.
1361
1367
1362 This emulates Python's -c option."""
1368 This emulates Python's -c option."""
1363
1369
1364 #sys.argv = ['-c']
1370 #sys.argv = ['-c']
1365 self.push(self.rc.c)
1371 self.push(self.rc.c)
1366
1372
1367 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1373 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1368 """Embeds IPython into a running python program.
1374 """Embeds IPython into a running python program.
1369
1375
1370 Input:
1376 Input:
1371
1377
1372 - header: An optional header message can be specified.
1378 - header: An optional header message can be specified.
1373
1379
1374 - local_ns, global_ns: working namespaces. If given as None, the
1380 - local_ns, global_ns: working namespaces. If given as None, the
1375 IPython-initialized one is updated with __main__.__dict__, so that
1381 IPython-initialized one is updated with __main__.__dict__, so that
1376 program variables become visible but user-specific configuration
1382 program variables become visible but user-specific configuration
1377 remains possible.
1383 remains possible.
1378
1384
1379 - stack_depth: specifies how many levels in the stack to go to
1385 - stack_depth: specifies how many levels in the stack to go to
1380 looking for namespaces (when local_ns and global_ns are None). This
1386 looking for namespaces (when local_ns and global_ns are None). This
1381 allows an intermediate caller to make sure that this function gets
1387 allows an intermediate caller to make sure that this function gets
1382 the namespace from the intended level in the stack. By default (0)
1388 the namespace from the intended level in the stack. By default (0)
1383 it will get its locals and globals from the immediate caller.
1389 it will get its locals and globals from the immediate caller.
1384
1390
1385 Warning: it's possible to use this in a program which is being run by
1391 Warning: it's possible to use this in a program which is being run by
1386 IPython itself (via %run), but some funny things will happen (a few
1392 IPython itself (via %run), but some funny things will happen (a few
1387 globals get overwritten). In the future this will be cleaned up, as
1393 globals get overwritten). In the future this will be cleaned up, as
1388 there is no fundamental reason why it can't work perfectly."""
1394 there is no fundamental reason why it can't work perfectly."""
1389
1395
1390 # Get locals and globals from caller
1396 # Get locals and globals from caller
1391 if local_ns is None or global_ns is None:
1397 if local_ns is None or global_ns is None:
1392 call_frame = sys._getframe(stack_depth).f_back
1398 call_frame = sys._getframe(stack_depth).f_back
1393
1399
1394 if local_ns is None:
1400 if local_ns is None:
1395 local_ns = call_frame.f_locals
1401 local_ns = call_frame.f_locals
1396 if global_ns is None:
1402 if global_ns is None:
1397 global_ns = call_frame.f_globals
1403 global_ns = call_frame.f_globals
1398
1404
1399 # Update namespaces and fire up interpreter
1405 # Update namespaces and fire up interpreter
1400
1406
1401 # The global one is easy, we can just throw it in
1407 # The global one is easy, we can just throw it in
1402 self.user_global_ns = global_ns
1408 self.user_global_ns = global_ns
1403
1409
1404 # but the user/local one is tricky: ipython needs it to store internal
1410 # but the user/local one is tricky: ipython needs it to store internal
1405 # data, but we also need the locals. We'll copy locals in the user
1411 # data, but we also need the locals. We'll copy locals in the user
1406 # one, but will track what got copied so we can delete them at exit.
1412 # one, but will track what got copied so we can delete them at exit.
1407 # This is so that a later embedded call doesn't see locals from a
1413 # This is so that a later embedded call doesn't see locals from a
1408 # previous call (which most likely existed in a separate scope).
1414 # previous call (which most likely existed in a separate scope).
1409 local_varnames = local_ns.keys()
1415 local_varnames = local_ns.keys()
1410 self.user_ns.update(local_ns)
1416 self.user_ns.update(local_ns)
1411
1417
1412 # Patch for global embedding to make sure that things don't overwrite
1418 # Patch for global embedding to make sure that things don't overwrite
1413 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1419 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1414 # FIXME. Test this a bit more carefully (the if.. is new)
1420 # FIXME. Test this a bit more carefully (the if.. is new)
1415 if local_ns is None and global_ns is None:
1421 if local_ns is None and global_ns is None:
1416 self.user_global_ns.update(__main__.__dict__)
1422 self.user_global_ns.update(__main__.__dict__)
1417
1423
1418 # make sure the tab-completer has the correct frame information, so it
1424 # make sure the tab-completer has the correct frame information, so it
1419 # actually completes using the frame's locals/globals
1425 # actually completes using the frame's locals/globals
1420 self.set_completer_frame()
1426 self.set_completer_frame()
1421
1427
1422 # before activating the interactive mode, we need to make sure that
1428 # before activating the interactive mode, we need to make sure that
1423 # all names in the builtin namespace needed by ipython point to
1429 # all names in the builtin namespace needed by ipython point to
1424 # ourselves, and not to other instances.
1430 # ourselves, and not to other instances.
1425 self.add_builtins()
1431 self.add_builtins()
1426
1432
1427 self.interact(header)
1433 self.interact(header)
1428
1434
1429 # now, purge out the user namespace from anything we might have added
1435 # now, purge out the user namespace from anything we might have added
1430 # from the caller's local namespace
1436 # from the caller's local namespace
1431 delvar = self.user_ns.pop
1437 delvar = self.user_ns.pop
1432 for var in local_varnames:
1438 for var in local_varnames:
1433 delvar(var,None)
1439 delvar(var,None)
1434 # and clean builtins we may have overridden
1440 # and clean builtins we may have overridden
1435 self.clean_builtins()
1441 self.clean_builtins()
1436
1442
1437 def interact(self, banner=None):
1443 def interact(self, banner=None):
1438 """Closely emulate the interactive Python console.
1444 """Closely emulate the interactive Python console.
1439
1445
1440 The optional banner argument specify the banner to print
1446 The optional banner argument specify the banner to print
1441 before the first interaction; by default it prints a banner
1447 before the first interaction; by default it prints a banner
1442 similar to the one printed by the real Python interpreter,
1448 similar to the one printed by the real Python interpreter,
1443 followed by the current class name in parentheses (so as not
1449 followed by the current class name in parentheses (so as not
1444 to confuse this with the real interpreter -- since it's so
1450 to confuse this with the real interpreter -- since it's so
1445 close!).
1451 close!).
1446
1452
1447 """
1453 """
1448 cprt = 'Type "copyright", "credits" or "license" for more information.'
1454 cprt = 'Type "copyright", "credits" or "license" for more information.'
1449 if banner is None:
1455 if banner is None:
1450 self.write("Python %s on %s\n%s\n(%s)\n" %
1456 self.write("Python %s on %s\n%s\n(%s)\n" %
1451 (sys.version, sys.platform, cprt,
1457 (sys.version, sys.platform, cprt,
1452 self.__class__.__name__))
1458 self.__class__.__name__))
1453 else:
1459 else:
1454 self.write(banner)
1460 self.write(banner)
1455
1461
1456 more = 0
1462 more = 0
1457
1463
1458 # Mark activity in the builtins
1464 # Mark activity in the builtins
1459 __builtin__.__dict__['__IPYTHON__active'] += 1
1465 __builtin__.__dict__['__IPYTHON__active'] += 1
1460
1466
1461 # exit_now is set by a call to %Exit or %Quit
1467 # exit_now is set by a call to %Exit or %Quit
1462 self.exit_now = False
1468 self.exit_now = False
1463 while not self.exit_now:
1469 while not self.exit_now:
1464 if more:
1470 if more:
1465 prompt = self.outputcache.prompt2
1471 prompt = self.outputcache.prompt2
1466 if self.autoindent:
1472 if self.autoindent:
1467 self.readline_startup_hook(self.pre_readline)
1473 self.readline_startup_hook(self.pre_readline)
1468 else:
1474 else:
1469 prompt = self.outputcache.prompt1
1475 prompt = self.outputcache.prompt1
1470 try:
1476 try:
1471 line = self.raw_input(prompt,more)
1477 line = self.raw_input(prompt,more)
1472 if self.autoindent:
1478 if self.autoindent:
1473 self.readline_startup_hook(None)
1479 self.readline_startup_hook(None)
1474 except KeyboardInterrupt:
1480 except KeyboardInterrupt:
1475 self.write('\nKeyboardInterrupt\n')
1481 self.write('\nKeyboardInterrupt\n')
1476 self.resetbuffer()
1482 self.resetbuffer()
1477 # keep cache in sync with the prompt counter:
1483 # keep cache in sync with the prompt counter:
1478 self.outputcache.prompt_count -= 1
1484 self.outputcache.prompt_count -= 1
1479
1485
1480 if self.autoindent:
1486 if self.autoindent:
1481 self.indent_current_nsp = 0
1487 self.indent_current_nsp = 0
1482 more = 0
1488 more = 0
1483 except EOFError:
1489 except EOFError:
1484 if self.autoindent:
1490 if self.autoindent:
1485 self.readline_startup_hook(None)
1491 self.readline_startup_hook(None)
1486 self.write('\n')
1492 self.write('\n')
1487 self.exit()
1493 self.exit()
1488 except bdb.BdbQuit:
1494 except bdb.BdbQuit:
1489 warn('The Python debugger has exited with a BdbQuit exception.\n'
1495 warn('The Python debugger has exited with a BdbQuit exception.\n'
1490 'Because of how pdb handles the stack, it is impossible\n'
1496 'Because of how pdb handles the stack, it is impossible\n'
1491 'for IPython to properly format this particular exception.\n'
1497 'for IPython to properly format this particular exception.\n'
1492 'IPython will resume normal operation.')
1498 'IPython will resume normal operation.')
1493 except:
1499 except:
1494 # exceptions here are VERY RARE, but they can be triggered
1500 # exceptions here are VERY RARE, but they can be triggered
1495 # asynchronously by signal handlers, for example.
1501 # asynchronously by signal handlers, for example.
1496 self.showtraceback()
1502 self.showtraceback()
1497 else:
1503 else:
1498 more = self.push(line)
1504 more = self.push(line)
1499 if (self.SyntaxTB.last_syntax_error and
1505 if (self.SyntaxTB.last_syntax_error and
1500 self.rc.autoedit_syntax):
1506 self.rc.autoedit_syntax):
1501 self.edit_syntax_error()
1507 self.edit_syntax_error()
1502
1508
1503 # We are off again...
1509 # We are off again...
1504 __builtin__.__dict__['__IPYTHON__active'] -= 1
1510 __builtin__.__dict__['__IPYTHON__active'] -= 1
1505
1511
1506 def excepthook(self, etype, value, tb):
1512 def excepthook(self, etype, value, tb):
1507 """One more defense for GUI apps that call sys.excepthook.
1513 """One more defense for GUI apps that call sys.excepthook.
1508
1514
1509 GUI frameworks like wxPython trap exceptions and call
1515 GUI frameworks like wxPython trap exceptions and call
1510 sys.excepthook themselves. I guess this is a feature that
1516 sys.excepthook themselves. I guess this is a feature that
1511 enables them to keep running after exceptions that would
1517 enables them to keep running after exceptions that would
1512 otherwise kill their mainloop. This is a bother for IPython
1518 otherwise kill their mainloop. This is a bother for IPython
1513 which excepts to catch all of the program exceptions with a try:
1519 which excepts to catch all of the program exceptions with a try:
1514 except: statement.
1520 except: statement.
1515
1521
1516 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1522 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1517 any app directly invokes sys.excepthook, it will look to the user like
1523 any app directly invokes sys.excepthook, it will look to the user like
1518 IPython crashed. In order to work around this, we can disable the
1524 IPython crashed. In order to work around this, we can disable the
1519 CrashHandler and replace it with this excepthook instead, which prints a
1525 CrashHandler and replace it with this excepthook instead, which prints a
1520 regular traceback using our InteractiveTB. In this fashion, apps which
1526 regular traceback using our InteractiveTB. In this fashion, apps which
1521 call sys.excepthook will generate a regular-looking exception from
1527 call sys.excepthook will generate a regular-looking exception from
1522 IPython, and the CrashHandler will only be triggered by real IPython
1528 IPython, and the CrashHandler will only be triggered by real IPython
1523 crashes.
1529 crashes.
1524
1530
1525 This hook should be used sparingly, only in places which are not likely
1531 This hook should be used sparingly, only in places which are not likely
1526 to be true IPython errors.
1532 to be true IPython errors.
1527 """
1533 """
1528 self.showtraceback((etype,value,tb),tb_offset=0)
1534 self.showtraceback((etype,value,tb),tb_offset=0)
1529
1535
1530 def transform_alias(self, alias,rest=''):
1536 def transform_alias(self, alias,rest=''):
1531 """ Transform alias to system command string
1537 """ Transform alias to system command string
1532
1538
1533 """
1539 """
1534 nargs,cmd = self.alias_table[alias]
1540 nargs,cmd = self.alias_table[alias]
1535 if ' ' in cmd and os.path.isfile(cmd):
1541 if ' ' in cmd and os.path.isfile(cmd):
1536 cmd = '"%s"' % cmd
1542 cmd = '"%s"' % cmd
1537
1543
1538 # Expand the %l special to be the user's input line
1544 # Expand the %l special to be the user's input line
1539 if cmd.find('%l') >= 0:
1545 if cmd.find('%l') >= 0:
1540 cmd = cmd.replace('%l',rest)
1546 cmd = cmd.replace('%l',rest)
1541 rest = ''
1547 rest = ''
1542 if nargs==0:
1548 if nargs==0:
1543 # Simple, argument-less aliases
1549 # Simple, argument-less aliases
1544 cmd = '%s %s' % (cmd,rest)
1550 cmd = '%s %s' % (cmd,rest)
1545 else:
1551 else:
1546 # Handle aliases with positional arguments
1552 # Handle aliases with positional arguments
1547 args = rest.split(None,nargs)
1553 args = rest.split(None,nargs)
1548 if len(args)< nargs:
1554 if len(args)< nargs:
1549 error('Alias <%s> requires %s arguments, %s given.' %
1555 error('Alias <%s> requires %s arguments, %s given.' %
1550 (alias,nargs,len(args)))
1556 (alias,nargs,len(args)))
1551 return None
1557 return None
1552 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1558 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1553 # Now call the macro, evaluating in the user's namespace
1559 # Now call the macro, evaluating in the user's namespace
1554
1560
1555 return cmd
1561 return cmd
1556
1562
1557 def call_alias(self,alias,rest=''):
1563 def call_alias(self,alias,rest=''):
1558 """Call an alias given its name and the rest of the line.
1564 """Call an alias given its name and the rest of the line.
1559
1565
1560 This is only used to provide backwards compatibility for users of
1566 This is only used to provide backwards compatibility for users of
1561 ipalias(), use of which is not recommended for anymore."""
1567 ipalias(), use of which is not recommended for anymore."""
1562
1568
1563 # Now call the macro, evaluating in the user's namespace
1569 # Now call the macro, evaluating in the user's namespace
1564 cmd = self.transform_alias(alias, rest)
1570 cmd = self.transform_alias(alias, rest)
1565 try:
1571 try:
1566 self.system(cmd)
1572 self.system(cmd)
1567 except:
1573 except:
1568 self.showtraceback()
1574 self.showtraceback()
1569
1575
1570 def indent_current_str(self):
1576 def indent_current_str(self):
1571 """return the current level of indentation as a string"""
1577 """return the current level of indentation as a string"""
1572 return self.indent_current_nsp * ' '
1578 return self.indent_current_nsp * ' '
1573
1579
1574 def autoindent_update(self,line):
1580 def autoindent_update(self,line):
1575 """Keep track of the indent level."""
1581 """Keep track of the indent level."""
1576
1582
1577 #debugx('line')
1583 #debugx('line')
1578 #debugx('self.indent_current_nsp')
1584 #debugx('self.indent_current_nsp')
1579 if self.autoindent:
1585 if self.autoindent:
1580 if line:
1586 if line:
1581 inisp = num_ini_spaces(line)
1587 inisp = num_ini_spaces(line)
1582 if inisp < self.indent_current_nsp:
1588 if inisp < self.indent_current_nsp:
1583 self.indent_current_nsp = inisp
1589 self.indent_current_nsp = inisp
1584
1590
1585 if line[-1] == ':':
1591 if line[-1] == ':':
1586 self.indent_current_nsp += 4
1592 self.indent_current_nsp += 4
1587 elif dedent_re.match(line):
1593 elif dedent_re.match(line):
1588 self.indent_current_nsp -= 4
1594 self.indent_current_nsp -= 4
1589 else:
1595 else:
1590 self.indent_current_nsp = 0
1596 self.indent_current_nsp = 0
1591
1597
1592 def runlines(self,lines):
1598 def runlines(self,lines):
1593 """Run a string of one or more lines of source.
1599 """Run a string of one or more lines of source.
1594
1600
1595 This method is capable of running a string containing multiple source
1601 This method is capable of running a string containing multiple source
1596 lines, as if they had been entered at the IPython prompt. Since it
1602 lines, as if they had been entered at the IPython prompt. Since it
1597 exposes IPython's processing machinery, the given strings can contain
1603 exposes IPython's processing machinery, the given strings can contain
1598 magic calls (%magic), special shell access (!cmd), etc."""
1604 magic calls (%magic), special shell access (!cmd), etc."""
1599
1605
1600 # We must start with a clean buffer, in case this is run from an
1606 # We must start with a clean buffer, in case this is run from an
1601 # interactive IPython session (via a magic, for example).
1607 # interactive IPython session (via a magic, for example).
1602 self.resetbuffer()
1608 self.resetbuffer()
1603 lines = lines.split('\n')
1609 lines = lines.split('\n')
1604 more = 0
1610 more = 0
1605 for line in lines:
1611 for line in lines:
1606 # skip blank lines so we don't mess up the prompt counter, but do
1612 # skip blank lines so we don't mess up the prompt counter, but do
1607 # NOT skip even a blank line if we are in a code block (more is
1613 # NOT skip even a blank line if we are in a code block (more is
1608 # true)
1614 # true)
1609 if line or more:
1615 if line or more:
1610 more = self.push(self.prefilter(line,more))
1616 more = self.push(self.prefilter(line,more))
1611 # IPython's runsource returns None if there was an error
1617 # IPython's runsource returns None if there was an error
1612 # compiling the code. This allows us to stop processing right
1618 # compiling the code. This allows us to stop processing right
1613 # away, so the user gets the error message at the right place.
1619 # away, so the user gets the error message at the right place.
1614 if more is None:
1620 if more is None:
1615 break
1621 break
1616 # final newline in case the input didn't have it, so that the code
1622 # final newline in case the input didn't have it, so that the code
1617 # actually does get executed
1623 # actually does get executed
1618 if more:
1624 if more:
1619 self.push('\n')
1625 self.push('\n')
1620
1626
1621 def runsource(self, source, filename='<input>', symbol='single'):
1627 def runsource(self, source, filename='<input>', symbol='single'):
1622 """Compile and run some source in the interpreter.
1628 """Compile and run some source in the interpreter.
1623
1629
1624 Arguments are as for compile_command().
1630 Arguments are as for compile_command().
1625
1631
1626 One several things can happen:
1632 One several things can happen:
1627
1633
1628 1) The input is incorrect; compile_command() raised an
1634 1) The input is incorrect; compile_command() raised an
1629 exception (SyntaxError or OverflowError). A syntax traceback
1635 exception (SyntaxError or OverflowError). A syntax traceback
1630 will be printed by calling the showsyntaxerror() method.
1636 will be printed by calling the showsyntaxerror() method.
1631
1637
1632 2) The input is incomplete, and more input is required;
1638 2) The input is incomplete, and more input is required;
1633 compile_command() returned None. Nothing happens.
1639 compile_command() returned None. Nothing happens.
1634
1640
1635 3) The input is complete; compile_command() returned a code
1641 3) The input is complete; compile_command() returned a code
1636 object. The code is executed by calling self.runcode() (which
1642 object. The code is executed by calling self.runcode() (which
1637 also handles run-time exceptions, except for SystemExit).
1643 also handles run-time exceptions, except for SystemExit).
1638
1644
1639 The return value is:
1645 The return value is:
1640
1646
1641 - True in case 2
1647 - True in case 2
1642
1648
1643 - False in the other cases, unless an exception is raised, where
1649 - False in the other cases, unless an exception is raised, where
1644 None is returned instead. This can be used by external callers to
1650 None is returned instead. This can be used by external callers to
1645 know whether to continue feeding input or not.
1651 know whether to continue feeding input or not.
1646
1652
1647 The return value can be used to decide whether to use sys.ps1 or
1653 The return value can be used to decide whether to use sys.ps1 or
1648 sys.ps2 to prompt the next line."""
1654 sys.ps2 to prompt the next line."""
1649
1655
1650 try:
1656 try:
1651 code = self.compile(source,filename,symbol)
1657 code = self.compile(source,filename,symbol)
1652 except (OverflowError, SyntaxError, ValueError):
1658 except (OverflowError, SyntaxError, ValueError):
1653 # Case 1
1659 # Case 1
1654 self.showsyntaxerror(filename)
1660 self.showsyntaxerror(filename)
1655 return None
1661 return None
1656
1662
1657 if code is None:
1663 if code is None:
1658 # Case 2
1664 # Case 2
1659 return True
1665 return True
1660
1666
1661 # Case 3
1667 # Case 3
1662 # We store the code object so that threaded shells and
1668 # We store the code object so that threaded shells and
1663 # custom exception handlers can access all this info if needed.
1669 # custom exception handlers can access all this info if needed.
1664 # The source corresponding to this can be obtained from the
1670 # The source corresponding to this can be obtained from the
1665 # buffer attribute as '\n'.join(self.buffer).
1671 # buffer attribute as '\n'.join(self.buffer).
1666 self.code_to_run = code
1672 self.code_to_run = code
1667 # now actually execute the code object
1673 # now actually execute the code object
1668 if self.runcode(code) == 0:
1674 if self.runcode(code) == 0:
1669 return False
1675 return False
1670 else:
1676 else:
1671 return None
1677 return None
1672
1678
1673 def runcode(self,code_obj):
1679 def runcode(self,code_obj):
1674 """Execute a code object.
1680 """Execute a code object.
1675
1681
1676 When an exception occurs, self.showtraceback() is called to display a
1682 When an exception occurs, self.showtraceback() is called to display a
1677 traceback.
1683 traceback.
1678
1684
1679 Return value: a flag indicating whether the code to be run completed
1685 Return value: a flag indicating whether the code to be run completed
1680 successfully:
1686 successfully:
1681
1687
1682 - 0: successful execution.
1688 - 0: successful execution.
1683 - 1: an error occurred.
1689 - 1: an error occurred.
1684 """
1690 """
1685
1691
1686 # Set our own excepthook in case the user code tries to call it
1692 # Set our own excepthook in case the user code tries to call it
1687 # directly, so that the IPython crash handler doesn't get triggered
1693 # directly, so that the IPython crash handler doesn't get triggered
1688 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1694 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1689
1695
1690 # we save the original sys.excepthook in the instance, in case config
1696 # we save the original sys.excepthook in the instance, in case config
1691 # code (such as magics) needs access to it.
1697 # code (such as magics) needs access to it.
1692 self.sys_excepthook = old_excepthook
1698 self.sys_excepthook = old_excepthook
1693 outflag = 1 # happens in more places, so it's easier as default
1699 outflag = 1 # happens in more places, so it's easier as default
1694 try:
1700 try:
1695 try:
1701 try:
1696 # Embedded instances require separate global/local namespaces
1702 # Embedded instances require separate global/local namespaces
1697 # so they can see both the surrounding (local) namespace and
1703 # so they can see both the surrounding (local) namespace and
1698 # the module-level globals when called inside another function.
1704 # the module-level globals when called inside another function.
1699 if self.embedded:
1705 if self.embedded:
1700 exec code_obj in self.user_global_ns, self.user_ns
1706 exec code_obj in self.user_global_ns, self.user_ns
1701 # Normal (non-embedded) instances should only have a single
1707 # Normal (non-embedded) instances should only have a single
1702 # namespace for user code execution, otherwise functions won't
1708 # namespace for user code execution, otherwise functions won't
1703 # see interactive top-level globals.
1709 # see interactive top-level globals.
1704 else:
1710 else:
1705 exec code_obj in self.user_ns
1711 exec code_obj in self.user_ns
1706 finally:
1712 finally:
1707 # Reset our crash handler in place
1713 # Reset our crash handler in place
1708 sys.excepthook = old_excepthook
1714 sys.excepthook = old_excepthook
1709 except SystemExit:
1715 except SystemExit:
1710 self.resetbuffer()
1716 self.resetbuffer()
1711 self.showtraceback()
1717 self.showtraceback()
1712 warn("Type exit or quit to exit IPython "
1718 warn("Type exit or quit to exit IPython "
1713 "(%Exit or %Quit do so unconditionally).",level=1)
1719 "(%Exit or %Quit do so unconditionally).",level=1)
1714 except self.custom_exceptions:
1720 except self.custom_exceptions:
1715 etype,value,tb = sys.exc_info()
1721 etype,value,tb = sys.exc_info()
1716 self.CustomTB(etype,value,tb)
1722 self.CustomTB(etype,value,tb)
1717 except:
1723 except:
1718 self.showtraceback()
1724 self.showtraceback()
1719 else:
1725 else:
1720 outflag = 0
1726 outflag = 0
1721 if softspace(sys.stdout, 0):
1727 if softspace(sys.stdout, 0):
1722 print
1728 print
1723 # Flush out code object which has been run (and source)
1729 # Flush out code object which has been run (and source)
1724 self.code_to_run = None
1730 self.code_to_run = None
1725 return outflag
1731 return outflag
1726
1732
1727 def push(self, line):
1733 def push(self, line):
1728 """Push a line to the interpreter.
1734 """Push a line to the interpreter.
1729
1735
1730 The line should not have a trailing newline; it may have
1736 The line should not have a trailing newline; it may have
1731 internal newlines. The line is appended to a buffer and the
1737 internal newlines. The line is appended to a buffer and the
1732 interpreter's runsource() method is called with the
1738 interpreter's runsource() method is called with the
1733 concatenated contents of the buffer as source. If this
1739 concatenated contents of the buffer as source. If this
1734 indicates that the command was executed or invalid, the buffer
1740 indicates that the command was executed or invalid, the buffer
1735 is reset; otherwise, the command is incomplete, and the buffer
1741 is reset; otherwise, the command is incomplete, and the buffer
1736 is left as it was after the line was appended. The return
1742 is left as it was after the line was appended. The return
1737 value is 1 if more input is required, 0 if the line was dealt
1743 value is 1 if more input is required, 0 if the line was dealt
1738 with in some way (this is the same as runsource()).
1744 with in some way (this is the same as runsource()).
1739 """
1745 """
1740
1746
1741 # autoindent management should be done here, and not in the
1747 # autoindent management should be done here, and not in the
1742 # interactive loop, since that one is only seen by keyboard input. We
1748 # interactive loop, since that one is only seen by keyboard input. We
1743 # need this done correctly even for code run via runlines (which uses
1749 # need this done correctly even for code run via runlines (which uses
1744 # push).
1750 # push).
1745
1751
1746 #print 'push line: <%s>' % line # dbg
1752 #print 'push line: <%s>' % line # dbg
1747 self.autoindent_update(line)
1753 self.autoindent_update(line)
1748
1754
1749 self.buffer.append(line)
1755 self.buffer.append(line)
1750 more = self.runsource('\n'.join(self.buffer), self.filename)
1756 more = self.runsource('\n'.join(self.buffer), self.filename)
1751 if not more:
1757 if not more:
1752 self.resetbuffer()
1758 self.resetbuffer()
1753 return more
1759 return more
1754
1760
1755 def resetbuffer(self):
1761 def resetbuffer(self):
1756 """Reset the input buffer."""
1762 """Reset the input buffer."""
1757 self.buffer[:] = []
1763 self.buffer[:] = []
1758
1764
1759 def raw_input(self,prompt='',continue_prompt=False):
1765 def raw_input(self,prompt='',continue_prompt=False):
1760 """Write a prompt and read a line.
1766 """Write a prompt and read a line.
1761
1767
1762 The returned line does not include the trailing newline.
1768 The returned line does not include the trailing newline.
1763 When the user enters the EOF key sequence, EOFError is raised.
1769 When the user enters the EOF key sequence, EOFError is raised.
1764
1770
1765 Optional inputs:
1771 Optional inputs:
1766
1772
1767 - prompt(''): a string to be printed to prompt the user.
1773 - prompt(''): a string to be printed to prompt the user.
1768
1774
1769 - continue_prompt(False): whether this line is the first one or a
1775 - continue_prompt(False): whether this line is the first one or a
1770 continuation in a sequence of inputs.
1776 continuation in a sequence of inputs.
1771 """
1777 """
1772
1778
1773 line = raw_input_original(prompt)
1779 line = raw_input_original(prompt)
1774
1780
1775 # Try to be reasonably smart about not re-indenting pasted input more
1781 # Try to be reasonably smart about not re-indenting pasted input more
1776 # than necessary. We do this by trimming out the auto-indent initial
1782 # than necessary. We do this by trimming out the auto-indent initial
1777 # spaces, if the user's actual input started itself with whitespace.
1783 # spaces, if the user's actual input started itself with whitespace.
1778 #debugx('self.buffer[-1]')
1784 #debugx('self.buffer[-1]')
1779
1785
1780 if self.autoindent:
1786 if self.autoindent:
1781 if num_ini_spaces(line) > self.indent_current_nsp:
1787 if num_ini_spaces(line) > self.indent_current_nsp:
1782 line = line[self.indent_current_nsp:]
1788 line = line[self.indent_current_nsp:]
1783 self.indent_current_nsp = 0
1789 self.indent_current_nsp = 0
1784
1790
1785 # store the unfiltered input before the user has any chance to modify
1791 # store the unfiltered input before the user has any chance to modify
1786 # it.
1792 # it.
1787 if line.strip():
1793 if line.strip():
1788 if continue_prompt:
1794 if continue_prompt:
1789 self.input_hist_raw[-1] += '%s\n' % line
1795 self.input_hist_raw[-1] += '%s\n' % line
1790 else:
1796 else:
1791 self.input_hist_raw.append('%s\n' % line)
1797 self.input_hist_raw.append('%s\n' % line)
1792
1798
1793 lineout = self.prefilter(line,continue_prompt)
1799 lineout = self.prefilter(line,continue_prompt)
1794 return lineout
1800 return lineout
1795
1801
1796 def split_user_input(self,line):
1802 def split_user_input(self,line):
1797 """Split user input into pre-char, function part and rest."""
1803 """Split user input into pre-char, function part and rest."""
1798
1804
1799 lsplit = self.line_split.match(line)
1805 lsplit = self.line_split.match(line)
1800 if lsplit is None: # no regexp match returns None
1806 if lsplit is None: # no regexp match returns None
1801 try:
1807 try:
1802 iFun,theRest = line.split(None,1)
1808 iFun,theRest = line.split(None,1)
1803 except ValueError:
1809 except ValueError:
1804 iFun,theRest = line,''
1810 iFun,theRest = line,''
1805 pre = re.match('^(\s*)(.*)',line).groups()[0]
1811 pre = re.match('^(\s*)(.*)',line).groups()[0]
1806 else:
1812 else:
1807 pre,iFun,theRest = lsplit.groups()
1813 pre,iFun,theRest = lsplit.groups()
1808
1814
1809 #print 'line:<%s>' % line # dbg
1815 #print 'line:<%s>' % line # dbg
1810 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1816 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1811 return pre,iFun.strip(),theRest
1817 return pre,iFun.strip(),theRest
1812
1818
1813 def _prefilter(self, line, continue_prompt):
1819 def _prefilter(self, line, continue_prompt):
1814 """Calls different preprocessors, depending on the form of line."""
1820 """Calls different preprocessors, depending on the form of line."""
1815
1821
1816 # All handlers *must* return a value, even if it's blank ('').
1822 # All handlers *must* return a value, even if it's blank ('').
1817
1823
1818 # Lines are NOT logged here. Handlers should process the line as
1824 # Lines are NOT logged here. Handlers should process the line as
1819 # needed, update the cache AND log it (so that the input cache array
1825 # needed, update the cache AND log it (so that the input cache array
1820 # stays synced).
1826 # stays synced).
1821
1827
1822 # This function is _very_ delicate, and since it's also the one which
1828 # This function is _very_ delicate, and since it's also the one which
1823 # determines IPython's response to user input, it must be as efficient
1829 # determines IPython's response to user input, it must be as efficient
1824 # as possible. For this reason it has _many_ returns in it, trying
1830 # as possible. For this reason it has _many_ returns in it, trying
1825 # always to exit as quickly as it can figure out what it needs to do.
1831 # always to exit as quickly as it can figure out what it needs to do.
1826
1832
1827 # This function is the main responsible for maintaining IPython's
1833 # This function is the main responsible for maintaining IPython's
1828 # behavior respectful of Python's semantics. So be _very_ careful if
1834 # behavior respectful of Python's semantics. So be _very_ careful if
1829 # making changes to anything here.
1835 # making changes to anything here.
1830
1836
1831 #.....................................................................
1837 #.....................................................................
1832 # Code begins
1838 # Code begins
1833
1839
1834 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1840 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1835
1841
1836 # save the line away in case we crash, so the post-mortem handler can
1842 # save the line away in case we crash, so the post-mortem handler can
1837 # record it
1843 # record it
1838 self._last_input_line = line
1844 self._last_input_line = line
1839
1845
1840 #print '***line: <%s>' % line # dbg
1846 #print '***line: <%s>' % line # dbg
1841
1847
1842 # the input history needs to track even empty lines
1848 # the input history needs to track even empty lines
1843 stripped = line.strip()
1849 stripped = line.strip()
1844
1850
1845 if not stripped:
1851 if not stripped:
1846 if not continue_prompt:
1852 if not continue_prompt:
1847 self.outputcache.prompt_count -= 1
1853 self.outputcache.prompt_count -= 1
1848 return self.handle_normal(line,continue_prompt)
1854 return self.handle_normal(line,continue_prompt)
1849 #return self.handle_normal('',continue_prompt)
1855 #return self.handle_normal('',continue_prompt)
1850
1856
1851 # print '***cont',continue_prompt # dbg
1857 # print '***cont',continue_prompt # dbg
1852 # special handlers are only allowed for single line statements
1858 # special handlers are only allowed for single line statements
1853 if continue_prompt and not self.rc.multi_line_specials:
1859 if continue_prompt and not self.rc.multi_line_specials:
1854 return self.handle_normal(line,continue_prompt)
1860 return self.handle_normal(line,continue_prompt)
1855
1861
1856
1862
1857 # For the rest, we need the structure of the input
1863 # For the rest, we need the structure of the input
1858 pre,iFun,theRest = self.split_user_input(line)
1864 pre,iFun,theRest = self.split_user_input(line)
1859
1865
1860 # See whether any pre-existing handler can take care of it
1866 # See whether any pre-existing handler can take care of it
1861
1867
1862 rewritten = self.hooks.input_prefilter(stripped)
1868 rewritten = self.hooks.input_prefilter(stripped)
1863 if rewritten != stripped: # ok, some prefilter did something
1869 if rewritten != stripped: # ok, some prefilter did something
1864 rewritten = pre + rewritten # add indentation
1870 rewritten = pre + rewritten # add indentation
1865 return self.handle_normal(rewritten)
1871 return self.handle_normal(rewritten)
1866
1872
1867
1873
1868
1874
1869
1875
1870 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1876 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1871
1877
1872 # First check for explicit escapes in the last/first character
1878 # First check for explicit escapes in the last/first character
1873 handler = None
1879 handler = None
1874 if line[-1] == self.ESC_HELP:
1880 if line[-1] == self.ESC_HELP:
1875 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1881 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1876 if handler is None:
1882 if handler is None:
1877 # look at the first character of iFun, NOT of line, so we skip
1883 # look at the first character of iFun, NOT of line, so we skip
1878 # leading whitespace in multiline input
1884 # leading whitespace in multiline input
1879 handler = self.esc_handlers.get(iFun[0:1])
1885 handler = self.esc_handlers.get(iFun[0:1])
1880 if handler is not None:
1886 if handler is not None:
1881 return handler(line,continue_prompt,pre,iFun,theRest)
1887 return handler(line,continue_prompt,pre,iFun,theRest)
1882 # Emacs ipython-mode tags certain input lines
1888 # Emacs ipython-mode tags certain input lines
1883 if line.endswith('# PYTHON-MODE'):
1889 if line.endswith('# PYTHON-MODE'):
1884 return self.handle_emacs(line,continue_prompt)
1890 return self.handle_emacs(line,continue_prompt)
1885
1891
1886 # Next, check if we can automatically execute this thing
1892 # Next, check if we can automatically execute this thing
1887
1893
1888 # Allow ! in multi-line statements if multi_line_specials is on:
1894 # Allow ! in multi-line statements if multi_line_specials is on:
1889 if continue_prompt and self.rc.multi_line_specials and \
1895 if continue_prompt and self.rc.multi_line_specials and \
1890 iFun.startswith(self.ESC_SHELL):
1896 iFun.startswith(self.ESC_SHELL):
1891 return self.handle_shell_escape(line,continue_prompt,
1897 return self.handle_shell_escape(line,continue_prompt,
1892 pre=pre,iFun=iFun,
1898 pre=pre,iFun=iFun,
1893 theRest=theRest)
1899 theRest=theRest)
1894
1900
1895 # Let's try to find if the input line is a magic fn
1901 # Let's try to find if the input line is a magic fn
1896 oinfo = None
1902 oinfo = None
1897 if hasattr(self,'magic_'+iFun):
1903 if hasattr(self,'magic_'+iFun):
1898 # WARNING: _ofind uses getattr(), so it can consume generators and
1904 # WARNING: _ofind uses getattr(), so it can consume generators and
1899 # cause other side effects.
1905 # cause other side effects.
1900 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1906 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1901 if oinfo['ismagic']:
1907 if oinfo['ismagic']:
1902 # Be careful not to call magics when a variable assignment is
1908 # Be careful not to call magics when a variable assignment is
1903 # being made (ls='hi', for example)
1909 # being made (ls='hi', for example)
1904 if self.rc.automagic and \
1910 if self.rc.automagic and \
1905 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1911 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1906 (self.rc.multi_line_specials or not continue_prompt):
1912 (self.rc.multi_line_specials or not continue_prompt):
1907 return self.handle_magic(line,continue_prompt,
1913 return self.handle_magic(line,continue_prompt,
1908 pre,iFun,theRest)
1914 pre,iFun,theRest)
1909 else:
1915 else:
1910 return self.handle_normal(line,continue_prompt)
1916 return self.handle_normal(line,continue_prompt)
1911
1917
1912 # If the rest of the line begins with an (in)equality, assginment or
1918 # If the rest of the line begins with an (in)equality, assginment or
1913 # function call, we should not call _ofind but simply execute it.
1919 # function call, we should not call _ofind but simply execute it.
1914 # This avoids spurious geattr() accesses on objects upon assignment.
1920 # This avoids spurious geattr() accesses on objects upon assignment.
1915 #
1921 #
1916 # It also allows users to assign to either alias or magic names true
1922 # It also allows users to assign to either alias or magic names true
1917 # python variables (the magic/alias systems always take second seat to
1923 # python variables (the magic/alias systems always take second seat to
1918 # true python code).
1924 # true python code).
1919 if theRest and theRest[0] in '!=()':
1925 if theRest and theRest[0] in '!=()':
1920 return self.handle_normal(line,continue_prompt)
1926 return self.handle_normal(line,continue_prompt)
1921
1927
1922 if oinfo is None:
1928 if oinfo is None:
1923 # let's try to ensure that _oinfo is ONLY called when autocall is
1929 # let's try to ensure that _oinfo is ONLY called when autocall is
1924 # on. Since it has inevitable potential side effects, at least
1930 # on. Since it has inevitable potential side effects, at least
1925 # having autocall off should be a guarantee to the user that no
1931 # having autocall off should be a guarantee to the user that no
1926 # weird things will happen.
1932 # weird things will happen.
1927
1933
1928 if self.rc.autocall:
1934 if self.rc.autocall:
1929 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1935 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1930 else:
1936 else:
1931 # in this case, all that's left is either an alias or
1937 # in this case, all that's left is either an alias or
1932 # processing the line normally.
1938 # processing the line normally.
1933 if iFun in self.alias_table:
1939 if iFun in self.alias_table:
1934 return self.handle_alias(line,continue_prompt,
1940 return self.handle_alias(line,continue_prompt,
1935 pre,iFun,theRest)
1941 pre,iFun,theRest)
1936
1942
1937 else:
1943 else:
1938 return self.handle_normal(line,continue_prompt)
1944 return self.handle_normal(line,continue_prompt)
1939
1945
1940 if not oinfo['found']:
1946 if not oinfo['found']:
1941 return self.handle_normal(line,continue_prompt)
1947 return self.handle_normal(line,continue_prompt)
1942 else:
1948 else:
1943 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1949 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1944 if oinfo['isalias']:
1950 if oinfo['isalias']:
1945 return self.handle_alias(line,continue_prompt,
1951 return self.handle_alias(line,continue_prompt,
1946 pre,iFun,theRest)
1952 pre,iFun,theRest)
1947
1953
1948 if (self.rc.autocall
1954 if (self.rc.autocall
1949 and
1955 and
1950 (
1956 (
1951 #only consider exclusion re if not "," or ";" autoquoting
1957 #only consider exclusion re if not "," or ";" autoquoting
1952 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
1958 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
1953 or pre == self.ESC_PAREN) or
1959 or pre == self.ESC_PAREN) or
1954 (not self.re_exclude_auto.match(theRest)))
1960 (not self.re_exclude_auto.match(theRest)))
1955 and
1961 and
1956 self.re_fun_name.match(iFun) and
1962 self.re_fun_name.match(iFun) and
1957 callable(oinfo['obj'])) :
1963 callable(oinfo['obj'])) :
1958 #print 'going auto' # dbg
1964 #print 'going auto' # dbg
1959 return self.handle_auto(line,continue_prompt,
1965 return self.handle_auto(line,continue_prompt,
1960 pre,iFun,theRest,oinfo['obj'])
1966 pre,iFun,theRest,oinfo['obj'])
1961 else:
1967 else:
1962 #print 'was callable?', callable(oinfo['obj']) # dbg
1968 #print 'was callable?', callable(oinfo['obj']) # dbg
1963 return self.handle_normal(line,continue_prompt)
1969 return self.handle_normal(line,continue_prompt)
1964
1970
1965 # If we get here, we have a normal Python line. Log and return.
1971 # If we get here, we have a normal Python line. Log and return.
1966 return self.handle_normal(line,continue_prompt)
1972 return self.handle_normal(line,continue_prompt)
1967
1973
1968 def _prefilter_dumb(self, line, continue_prompt):
1974 def _prefilter_dumb(self, line, continue_prompt):
1969 """simple prefilter function, for debugging"""
1975 """simple prefilter function, for debugging"""
1970 return self.handle_normal(line,continue_prompt)
1976 return self.handle_normal(line,continue_prompt)
1971
1977
1972 # Set the default prefilter() function (this can be user-overridden)
1978 # Set the default prefilter() function (this can be user-overridden)
1973 prefilter = _prefilter
1979 prefilter = _prefilter
1974
1980
1975 def handle_normal(self,line,continue_prompt=None,
1981 def handle_normal(self,line,continue_prompt=None,
1976 pre=None,iFun=None,theRest=None):
1982 pre=None,iFun=None,theRest=None):
1977 """Handle normal input lines. Use as a template for handlers."""
1983 """Handle normal input lines. Use as a template for handlers."""
1978
1984
1979 # With autoindent on, we need some way to exit the input loop, and I
1985 # With autoindent on, we need some way to exit the input loop, and I
1980 # don't want to force the user to have to backspace all the way to
1986 # don't want to force the user to have to backspace all the way to
1981 # clear the line. The rule will be in this case, that either two
1987 # clear the line. The rule will be in this case, that either two
1982 # lines of pure whitespace in a row, or a line of pure whitespace but
1988 # lines of pure whitespace in a row, or a line of pure whitespace but
1983 # of a size different to the indent level, will exit the input loop.
1989 # of a size different to the indent level, will exit the input loop.
1984
1990
1985 if (continue_prompt and self.autoindent and line.isspace() and
1991 if (continue_prompt and self.autoindent and line.isspace() and
1986 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
1992 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
1987 (self.buffer[-1]).isspace() )):
1993 (self.buffer[-1]).isspace() )):
1988 line = ''
1994 line = ''
1989
1995
1990 self.log(line,continue_prompt)
1996 self.log(line,continue_prompt)
1991 return line
1997 return line
1992
1998
1993 def handle_alias(self,line,continue_prompt=None,
1999 def handle_alias(self,line,continue_prompt=None,
1994 pre=None,iFun=None,theRest=None):
2000 pre=None,iFun=None,theRest=None):
1995 """Handle alias input lines. """
2001 """Handle alias input lines. """
1996
2002
1997 # pre is needed, because it carries the leading whitespace. Otherwise
2003 # pre is needed, because it carries the leading whitespace. Otherwise
1998 # aliases won't work in indented sections.
2004 # aliases won't work in indented sections.
1999 transformed = self.transform_alias(iFun, theRest)
2005 transformed = self.transform_alias(iFun, theRest)
2000 line_out = '%s_ip.system(%s)' % (pre, make_quoted_expr( transformed ))
2006 line_out = '%s_ip.system(%s)' % (pre, make_quoted_expr( transformed ))
2001 self.log(line_out,continue_prompt)
2007 self.log(line_out,continue_prompt)
2002 return line_out
2008 return line_out
2003
2009
2004 def handle_shell_escape(self, line, continue_prompt=None,
2010 def handle_shell_escape(self, line, continue_prompt=None,
2005 pre=None,iFun=None,theRest=None):
2011 pre=None,iFun=None,theRest=None):
2006 """Execute the line in a shell, empty return value"""
2012 """Execute the line in a shell, empty return value"""
2007
2013
2008 #print 'line in :', `line` # dbg
2014 #print 'line in :', `line` # dbg
2009 # Example of a special handler. Others follow a similar pattern.
2015 # Example of a special handler. Others follow a similar pattern.
2010 if line.lstrip().startswith('!!'):
2016 if line.lstrip().startswith('!!'):
2011 # rewrite iFun/theRest to properly hold the call to %sx and
2017 # rewrite iFun/theRest to properly hold the call to %sx and
2012 # the actual command to be executed, so handle_magic can work
2018 # the actual command to be executed, so handle_magic can work
2013 # correctly
2019 # correctly
2014 theRest = '%s %s' % (iFun[2:],theRest)
2020 theRest = '%s %s' % (iFun[2:],theRest)
2015 iFun = 'sx'
2021 iFun = 'sx'
2016 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2022 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2017 line.lstrip()[2:]),
2023 line.lstrip()[2:]),
2018 continue_prompt,pre,iFun,theRest)
2024 continue_prompt,pre,iFun,theRest)
2019 else:
2025 else:
2020 cmd=line.lstrip().lstrip('!')
2026 cmd=line.lstrip().lstrip('!')
2021 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2027 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2022 # update cache/log and return
2028 # update cache/log and return
2023 self.log(line_out,continue_prompt)
2029 self.log(line_out,continue_prompt)
2024 return line_out
2030 return line_out
2025
2031
2026 def handle_magic(self, line, continue_prompt=None,
2032 def handle_magic(self, line, continue_prompt=None,
2027 pre=None,iFun=None,theRest=None):
2033 pre=None,iFun=None,theRest=None):
2028 """Execute magic functions."""
2034 """Execute magic functions."""
2029
2035
2030
2036
2031 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2037 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2032 self.log(cmd,continue_prompt)
2038 self.log(cmd,continue_prompt)
2033 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2039 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2034 return cmd
2040 return cmd
2035
2041
2036 def handle_auto(self, line, continue_prompt=None,
2042 def handle_auto(self, line, continue_prompt=None,
2037 pre=None,iFun=None,theRest=None,obj=None):
2043 pre=None,iFun=None,theRest=None,obj=None):
2038 """Hande lines which can be auto-executed, quoting if requested."""
2044 """Hande lines which can be auto-executed, quoting if requested."""
2039
2045
2040 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2046 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2041
2047
2042 # This should only be active for single-line input!
2048 # This should only be active for single-line input!
2043 if continue_prompt:
2049 if continue_prompt:
2044 self.log(line,continue_prompt)
2050 self.log(line,continue_prompt)
2045 return line
2051 return line
2046
2052
2047 auto_rewrite = True
2053 auto_rewrite = True
2048
2054
2049 if pre == self.ESC_QUOTE:
2055 if pre == self.ESC_QUOTE:
2050 # Auto-quote splitting on whitespace
2056 # Auto-quote splitting on whitespace
2051 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2057 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2052 elif pre == self.ESC_QUOTE2:
2058 elif pre == self.ESC_QUOTE2:
2053 # Auto-quote whole string
2059 # Auto-quote whole string
2054 newcmd = '%s("%s")' % (iFun,theRest)
2060 newcmd = '%s("%s")' % (iFun,theRest)
2055 elif pre == self.ESC_PAREN:
2061 elif pre == self.ESC_PAREN:
2056 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2062 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2057 else:
2063 else:
2058 # Auto-paren.
2064 # Auto-paren.
2059 # We only apply it to argument-less calls if the autocall
2065 # We only apply it to argument-less calls if the autocall
2060 # parameter is set to 2. We only need to check that autocall is <
2066 # parameter is set to 2. We only need to check that autocall is <
2061 # 2, since this function isn't called unless it's at least 1.
2067 # 2, since this function isn't called unless it's at least 1.
2062 if not theRest and (self.rc.autocall < 2):
2068 if not theRest and (self.rc.autocall < 2):
2063 newcmd = '%s %s' % (iFun,theRest)
2069 newcmd = '%s %s' % (iFun,theRest)
2064 auto_rewrite = False
2070 auto_rewrite = False
2065 else:
2071 else:
2066 if theRest.startswith('['):
2072 if theRest.startswith('['):
2067 if hasattr(obj,'__getitem__'):
2073 if hasattr(obj,'__getitem__'):
2068 # Don't autocall in this case: item access for an object
2074 # Don't autocall in this case: item access for an object
2069 # which is BOTH callable and implements __getitem__.
2075 # which is BOTH callable and implements __getitem__.
2070 newcmd = '%s %s' % (iFun,theRest)
2076 newcmd = '%s %s' % (iFun,theRest)
2071 auto_rewrite = False
2077 auto_rewrite = False
2072 else:
2078 else:
2073 # if the object doesn't support [] access, go ahead and
2079 # if the object doesn't support [] access, go ahead and
2074 # autocall
2080 # autocall
2075 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2081 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2076 elif theRest.endswith(';'):
2082 elif theRest.endswith(';'):
2077 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2083 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2078 else:
2084 else:
2079 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2085 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2080
2086
2081 if auto_rewrite:
2087 if auto_rewrite:
2082 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2088 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2083 # log what is now valid Python, not the actual user input (without the
2089 # log what is now valid Python, not the actual user input (without the
2084 # final newline)
2090 # final newline)
2085 self.log(newcmd,continue_prompt)
2091 self.log(newcmd,continue_prompt)
2086 return newcmd
2092 return newcmd
2087
2093
2088 def handle_help(self, line, continue_prompt=None,
2094 def handle_help(self, line, continue_prompt=None,
2089 pre=None,iFun=None,theRest=None):
2095 pre=None,iFun=None,theRest=None):
2090 """Try to get some help for the object.
2096 """Try to get some help for the object.
2091
2097
2092 obj? or ?obj -> basic information.
2098 obj? or ?obj -> basic information.
2093 obj?? or ??obj -> more details.
2099 obj?? or ??obj -> more details.
2094 """
2100 """
2095
2101
2096 # We need to make sure that we don't process lines which would be
2102 # We need to make sure that we don't process lines which would be
2097 # otherwise valid python, such as "x=1 # what?"
2103 # otherwise valid python, such as "x=1 # what?"
2098 try:
2104 try:
2099 codeop.compile_command(line)
2105 codeop.compile_command(line)
2100 except SyntaxError:
2106 except SyntaxError:
2101 # We should only handle as help stuff which is NOT valid syntax
2107 # We should only handle as help stuff which is NOT valid syntax
2102 if line[0]==self.ESC_HELP:
2108 if line[0]==self.ESC_HELP:
2103 line = line[1:]
2109 line = line[1:]
2104 elif line[-1]==self.ESC_HELP:
2110 elif line[-1]==self.ESC_HELP:
2105 line = line[:-1]
2111 line = line[:-1]
2106 self.log('#?'+line)
2112 self.log('#?'+line)
2107 if line:
2113 if line:
2108 self.magic_pinfo(line)
2114 self.magic_pinfo(line)
2109 else:
2115 else:
2110 page(self.usage,screen_lines=self.rc.screen_length)
2116 page(self.usage,screen_lines=self.rc.screen_length)
2111 return '' # Empty string is needed here!
2117 return '' # Empty string is needed here!
2112 except:
2118 except:
2113 # Pass any other exceptions through to the normal handler
2119 # Pass any other exceptions through to the normal handler
2114 return self.handle_normal(line,continue_prompt)
2120 return self.handle_normal(line,continue_prompt)
2115 else:
2121 else:
2116 # If the code compiles ok, we should handle it normally
2122 # If the code compiles ok, we should handle it normally
2117 return self.handle_normal(line,continue_prompt)
2123 return self.handle_normal(line,continue_prompt)
2118
2124
2119 def getapi(self):
2125 def getapi(self):
2120 """ Get an IPApi object for this shell instance
2126 """ Get an IPApi object for this shell instance
2121
2127
2122 Getting an IPApi object is always preferable to accessing the shell
2128 Getting an IPApi object is always preferable to accessing the shell
2123 directly, but this holds true especially for extensions.
2129 directly, but this holds true especially for extensions.
2124
2130
2125 It should always be possible to implement an extension with IPApi
2131 It should always be possible to implement an extension with IPApi
2126 alone. If not, contact maintainer to request an addition.
2132 alone. If not, contact maintainer to request an addition.
2127
2133
2128 """
2134 """
2129 return self.api
2135 return self.api
2130
2136
2131 def handle_emacs(self,line,continue_prompt=None,
2137 def handle_emacs(self,line,continue_prompt=None,
2132 pre=None,iFun=None,theRest=None):
2138 pre=None,iFun=None,theRest=None):
2133 """Handle input lines marked by python-mode."""
2139 """Handle input lines marked by python-mode."""
2134
2140
2135 # Currently, nothing is done. Later more functionality can be added
2141 # Currently, nothing is done. Later more functionality can be added
2136 # here if needed.
2142 # here if needed.
2137
2143
2138 # The input cache shouldn't be updated
2144 # The input cache shouldn't be updated
2139
2145
2140 return line
2146 return line
2141
2147
2142 def mktempfile(self,data=None):
2148 def mktempfile(self,data=None):
2143 """Make a new tempfile and return its filename.
2149 """Make a new tempfile and return its filename.
2144
2150
2145 This makes a call to tempfile.mktemp, but it registers the created
2151 This makes a call to tempfile.mktemp, but it registers the created
2146 filename internally so ipython cleans it up at exit time.
2152 filename internally so ipython cleans it up at exit time.
2147
2153
2148 Optional inputs:
2154 Optional inputs:
2149
2155
2150 - data(None): if data is given, it gets written out to the temp file
2156 - data(None): if data is given, it gets written out to the temp file
2151 immediately, and the file is closed again."""
2157 immediately, and the file is closed again."""
2152
2158
2153 filename = tempfile.mktemp('.py','ipython_edit_')
2159 filename = tempfile.mktemp('.py','ipython_edit_')
2154 self.tempfiles.append(filename)
2160 self.tempfiles.append(filename)
2155
2161
2156 if data:
2162 if data:
2157 tmp_file = open(filename,'w')
2163 tmp_file = open(filename,'w')
2158 tmp_file.write(data)
2164 tmp_file.write(data)
2159 tmp_file.close()
2165 tmp_file.close()
2160 return filename
2166 return filename
2161
2167
2162 def write(self,data):
2168 def write(self,data):
2163 """Write a string to the default output"""
2169 """Write a string to the default output"""
2164 Term.cout.write(data)
2170 Term.cout.write(data)
2165
2171
2166 def write_err(self,data):
2172 def write_err(self,data):
2167 """Write a string to the default error output"""
2173 """Write a string to the default error output"""
2168 Term.cerr.write(data)
2174 Term.cerr.write(data)
2169
2175
2170 def exit(self):
2176 def exit(self):
2171 """Handle interactive exit.
2177 """Handle interactive exit.
2172
2178
2173 This method sets the exit_now attribute."""
2179 This method sets the exit_now attribute."""
2174
2180
2175 if self.rc.confirm_exit:
2181 if self.rc.confirm_exit:
2176 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2182 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2177 self.exit_now = True
2183 self.exit_now = True
2178 else:
2184 else:
2179 self.exit_now = True
2185 self.exit_now = True
2180 return self.exit_now
2186 return self.exit_now
2181
2187
2182 def safe_execfile(self,fname,*where,**kw):
2188 def safe_execfile(self,fname,*where,**kw):
2183 fname = os.path.expanduser(fname)
2189 fname = os.path.expanduser(fname)
2184
2190
2185 # find things also in current directory
2191 # find things also in current directory
2186 dname = os.path.dirname(fname)
2192 dname = os.path.dirname(fname)
2187 if not sys.path.count(dname):
2193 if not sys.path.count(dname):
2188 sys.path.append(dname)
2194 sys.path.append(dname)
2189
2195
2190 try:
2196 try:
2191 xfile = open(fname)
2197 xfile = open(fname)
2192 except:
2198 except:
2193 print >> Term.cerr, \
2199 print >> Term.cerr, \
2194 'Could not open file <%s> for safe execution.' % fname
2200 'Could not open file <%s> for safe execution.' % fname
2195 return None
2201 return None
2196
2202
2197 kw.setdefault('islog',0)
2203 kw.setdefault('islog',0)
2198 kw.setdefault('quiet',1)
2204 kw.setdefault('quiet',1)
2199 kw.setdefault('exit_ignore',0)
2205 kw.setdefault('exit_ignore',0)
2200 first = xfile.readline()
2206 first = xfile.readline()
2201 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2207 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2202 xfile.close()
2208 xfile.close()
2203 # line by line execution
2209 # line by line execution
2204 if first.startswith(loghead) or kw['islog']:
2210 if first.startswith(loghead) or kw['islog']:
2205 print 'Loading log file <%s> one line at a time...' % fname
2211 print 'Loading log file <%s> one line at a time...' % fname
2206 if kw['quiet']:
2212 if kw['quiet']:
2207 stdout_save = sys.stdout
2213 stdout_save = sys.stdout
2208 sys.stdout = StringIO.StringIO()
2214 sys.stdout = StringIO.StringIO()
2209 try:
2215 try:
2210 globs,locs = where[0:2]
2216 globs,locs = where[0:2]
2211 except:
2217 except:
2212 try:
2218 try:
2213 globs = locs = where[0]
2219 globs = locs = where[0]
2214 except:
2220 except:
2215 globs = locs = globals()
2221 globs = locs = globals()
2216 badblocks = []
2222 badblocks = []
2217
2223
2218 # we also need to identify indented blocks of code when replaying
2224 # we also need to identify indented blocks of code when replaying
2219 # logs and put them together before passing them to an exec
2225 # logs and put them together before passing them to an exec
2220 # statement. This takes a bit of regexp and look-ahead work in the
2226 # statement. This takes a bit of regexp and look-ahead work in the
2221 # file. It's easiest if we swallow the whole thing in memory
2227 # file. It's easiest if we swallow the whole thing in memory
2222 # first, and manually walk through the lines list moving the
2228 # first, and manually walk through the lines list moving the
2223 # counter ourselves.
2229 # counter ourselves.
2224 indent_re = re.compile('\s+\S')
2230 indent_re = re.compile('\s+\S')
2225 xfile = open(fname)
2231 xfile = open(fname)
2226 filelines = xfile.readlines()
2232 filelines = xfile.readlines()
2227 xfile.close()
2233 xfile.close()
2228 nlines = len(filelines)
2234 nlines = len(filelines)
2229 lnum = 0
2235 lnum = 0
2230 while lnum < nlines:
2236 while lnum < nlines:
2231 line = filelines[lnum]
2237 line = filelines[lnum]
2232 lnum += 1
2238 lnum += 1
2233 # don't re-insert logger status info into cache
2239 # don't re-insert logger status info into cache
2234 if line.startswith('#log#'):
2240 if line.startswith('#log#'):
2235 continue
2241 continue
2236 else:
2242 else:
2237 # build a block of code (maybe a single line) for execution
2243 # build a block of code (maybe a single line) for execution
2238 block = line
2244 block = line
2239 try:
2245 try:
2240 next = filelines[lnum] # lnum has already incremented
2246 next = filelines[lnum] # lnum has already incremented
2241 except:
2247 except:
2242 next = None
2248 next = None
2243 while next and indent_re.match(next):
2249 while next and indent_re.match(next):
2244 block += next
2250 block += next
2245 lnum += 1
2251 lnum += 1
2246 try:
2252 try:
2247 next = filelines[lnum]
2253 next = filelines[lnum]
2248 except:
2254 except:
2249 next = None
2255 next = None
2250 # now execute the block of one or more lines
2256 # now execute the block of one or more lines
2251 try:
2257 try:
2252 exec block in globs,locs
2258 exec block in globs,locs
2253 except SystemExit:
2259 except SystemExit:
2254 pass
2260 pass
2255 except:
2261 except:
2256 badblocks.append(block.rstrip())
2262 badblocks.append(block.rstrip())
2257 if kw['quiet']: # restore stdout
2263 if kw['quiet']: # restore stdout
2258 sys.stdout.close()
2264 sys.stdout.close()
2259 sys.stdout = stdout_save
2265 sys.stdout = stdout_save
2260 print 'Finished replaying log file <%s>' % fname
2266 print 'Finished replaying log file <%s>' % fname
2261 if badblocks:
2267 if badblocks:
2262 print >> sys.stderr, ('\nThe following lines/blocks in file '
2268 print >> sys.stderr, ('\nThe following lines/blocks in file '
2263 '<%s> reported errors:' % fname)
2269 '<%s> reported errors:' % fname)
2264
2270
2265 for badline in badblocks:
2271 for badline in badblocks:
2266 print >> sys.stderr, badline
2272 print >> sys.stderr, badline
2267 else: # regular file execution
2273 else: # regular file execution
2268 try:
2274 try:
2269 execfile(fname,*where)
2275 execfile(fname,*where)
2270 except SyntaxError:
2276 except SyntaxError:
2271 self.showsyntaxerror()
2277 self.showsyntaxerror()
2272 warn('Failure executing file: <%s>' % fname)
2278 warn('Failure executing file: <%s>' % fname)
2273 except SystemExit,status:
2279 except SystemExit,status:
2274 if not kw['exit_ignore']:
2280 if not kw['exit_ignore']:
2275 self.showtraceback()
2281 self.showtraceback()
2276 warn('Failure executing file: <%s>' % fname)
2282 warn('Failure executing file: <%s>' % fname)
2277 except:
2283 except:
2278 self.showtraceback()
2284 self.showtraceback()
2279 warn('Failure executing file: <%s>' % fname)
2285 warn('Failure executing file: <%s>' % fname)
2280
2286
2281 #************************* end of file <iplib.py> *****************************
2287 #************************* end of file <iplib.py> *****************************
@@ -1,744 +1,750 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 IPython -- An enhanced Interactive Python
3 IPython -- An enhanced Interactive Python
4
4
5 Requires Python 2.1 or better.
5 Requires Python 2.1 or better.
6
6
7 This file contains the main make_IPython() starter function.
7 This file contains the main make_IPython() starter function.
8
8
9 $Id: ipmaker.py 1225 2006-03-28 09:11:52Z vivainio $"""
9 $Id: ipmaker.py 1260 2006-04-11 10:19:34Z vivainio $"""
10
10
11 #*****************************************************************************
11 #*****************************************************************************
12 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
12 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
13 #
13 #
14 # Distributed under the terms of the BSD License. The full license is in
14 # Distributed under the terms of the BSD License. The full license is in
15 # the file COPYING, distributed as part of this software.
15 # the file COPYING, distributed as part of this software.
16 #*****************************************************************************
16 #*****************************************************************************
17
17
18 from IPython import Release
18 from IPython import Release
19 __author__ = '%s <%s>' % Release.authors['Fernando']
19 __author__ = '%s <%s>' % Release.authors['Fernando']
20 __license__ = Release.license
20 __license__ = Release.license
21 __version__ = Release.version
21 __version__ = Release.version
22
22
23 credits._Printer__data = """
23 credits._Printer__data = """
24 Python: %s
24 Python: %s
25
25
26 IPython: Fernando Perez, Janko Hauser, Nathan Gray, and many users.
26 IPython: Fernando Perez, Janko Hauser, Nathan Gray, and many users.
27 See http://ipython.scipy.org for more information.""" \
27 See http://ipython.scipy.org for more information.""" \
28 % credits._Printer__data
28 % credits._Printer__data
29
29
30 copyright._Printer__data += """
30 copyright._Printer__data += """
31
31
32 Copyright (c) 2001-2004 Fernando Perez, Janko Hauser, Nathan Gray.
32 Copyright (c) 2001-2004 Fernando Perez, Janko Hauser, Nathan Gray.
33 All Rights Reserved."""
33 All Rights Reserved."""
34
34
35 #****************************************************************************
35 #****************************************************************************
36 # Required modules
36 # Required modules
37
37
38 # From the standard library
38 # From the standard library
39 import __main__
39 import __main__
40 import __builtin__
40 import __builtin__
41 import os
41 import os
42 import re
42 import re
43 import sys
43 import sys
44 import types
44 import types
45 from pprint import pprint,pformat
45 from pprint import pprint,pformat
46
46
47 # Our own
47 # Our own
48 from IPython import DPyGetOpt
48 from IPython import DPyGetOpt
49 from IPython.ipstruct import Struct
49 from IPython.ipstruct import Struct
50 from IPython.OutputTrap import OutputTrap
50 from IPython.OutputTrap import OutputTrap
51 from IPython.ConfigLoader import ConfigLoader
51 from IPython.ConfigLoader import ConfigLoader
52 from IPython.iplib import InteractiveShell
52 from IPython.iplib import InteractiveShell
53 from IPython.usage import cmd_line_usage,interactive_usage
53 from IPython.usage import cmd_line_usage,interactive_usage
54 from IPython.genutils import *
54 from IPython.genutils import *
55
55
56 #-----------------------------------------------------------------------------
56 #-----------------------------------------------------------------------------
57 def make_IPython(argv=None,user_ns=None,user_global_ns=None,debug=1,
57 def make_IPython(argv=None,user_ns=None,user_global_ns=None,debug=1,
58 rc_override=None,shell_class=InteractiveShell,
58 rc_override=None,shell_class=InteractiveShell,
59 embedded=False,**kw):
59 embedded=False,**kw):
60 """This is a dump of IPython into a single function.
60 """This is a dump of IPython into a single function.
61
61
62 Later it will have to be broken up in a sensible manner.
62 Later it will have to be broken up in a sensible manner.
63
63
64 Arguments:
64 Arguments:
65
65
66 - argv: a list similar to sys.argv[1:]. It should NOT contain the desired
66 - argv: a list similar to sys.argv[1:]. It should NOT contain the desired
67 script name, b/c DPyGetOpt strips the first argument only for the real
67 script name, b/c DPyGetOpt strips the first argument only for the real
68 sys.argv.
68 sys.argv.
69
69
70 - user_ns: a dict to be used as the user's namespace."""
70 - user_ns: a dict to be used as the user's namespace."""
71
71
72 #----------------------------------------------------------------------
72 #----------------------------------------------------------------------
73 # Defaults and initialization
73 # Defaults and initialization
74
74
75 # For developer debugging, deactivates crash handler and uses pdb.
75 # For developer debugging, deactivates crash handler and uses pdb.
76 DEVDEBUG = False
76 DEVDEBUG = False
77
77
78 if argv is None:
78 if argv is None:
79 argv = sys.argv
79 argv = sys.argv
80
80
81 # __IP is the main global that lives throughout and represents the whole
81 # __IP is the main global that lives throughout and represents the whole
82 # application. If the user redefines it, all bets are off as to what
82 # application. If the user redefines it, all bets are off as to what
83 # happens.
83 # happens.
84
84
85 # __IP is the name of he global which the caller will have accessible as
85 # __IP is the name of he global which the caller will have accessible as
86 # __IP.name. We set its name via the first parameter passed to
86 # __IP.name. We set its name via the first parameter passed to
87 # InteractiveShell:
87 # InteractiveShell:
88
88
89 IP = shell_class('__IP',user_ns=user_ns,user_global_ns=user_global_ns,
89 IP = shell_class('__IP',user_ns=user_ns,user_global_ns=user_global_ns,
90 embedded=embedded,**kw)
90 embedded=embedded,**kw)
91
91
92 # Put 'help' in the user namespace
92 # Put 'help' in the user namespace
93 from site import _Helper
93 from site import _Helper
94 IP.user_ns['help'] = _Helper()
94 IP.user_ns['help'] = _Helper()
95
95
96
96
97 if DEVDEBUG:
97 if DEVDEBUG:
98 # For developer debugging only (global flag)
98 # For developer debugging only (global flag)
99 from IPython import ultraTB
99 from IPython import ultraTB
100 sys.excepthook = ultraTB.VerboseTB(call_pdb=1)
100 sys.excepthook = ultraTB.VerboseTB(call_pdb=1)
101
101
102 IP.BANNER_PARTS = ['Python %s\n'
102 IP.BANNER_PARTS = ['Python %s\n'
103 'Type "copyright", "credits" or "license" '
103 'Type "copyright", "credits" or "license" '
104 'for more information.\n'
104 'for more information.\n'
105 % (sys.version.split('\n')[0],),
105 % (sys.version.split('\n')[0],),
106 "IPython %s -- An enhanced Interactive Python."
106 "IPython %s -- An enhanced Interactive Python."
107 % (__version__,),
107 % (__version__,),
108 """? -> Introduction to IPython's features.
108 """? -> Introduction to IPython's features.
109 %magic -> Information about IPython's 'magic' % functions.
109 %magic -> Information about IPython's 'magic' % functions.
110 help -> Python's own help system.
110 help -> Python's own help system.
111 object? -> Details about 'object'. ?object also works, ?? prints more.
111 object? -> Details about 'object'. ?object also works, ?? prints more.
112 """ ]
112 """ ]
113
113
114 IP.usage = interactive_usage
114 IP.usage = interactive_usage
115
115
116 # Platform-dependent suffix and directory names. We use _ipython instead
116 # Platform-dependent suffix and directory names. We use _ipython instead
117 # of .ipython under win32 b/c there's software that breaks with .named
117 # of .ipython under win32 b/c there's software that breaks with .named
118 # directories on that platform.
118 # directories on that platform.
119 if os.name == 'posix':
119 if os.name == 'posix':
120 rc_suffix = ''
120 rc_suffix = ''
121 ipdir_def = '.ipython'
121 ipdir_def = '.ipython'
122 else:
122 else:
123 rc_suffix = '.ini'
123 rc_suffix = '.ini'
124 ipdir_def = '_ipython'
124 ipdir_def = '_ipython'
125
125
126 # default directory for configuration
126 # default directory for configuration
127 ipythondir = os.path.abspath(os.environ.get('IPYTHONDIR',
127 ipythondir = os.path.abspath(os.environ.get('IPYTHONDIR',
128 os.path.join(IP.home_dir,ipdir_def)))
128 os.path.join(IP.home_dir,ipdir_def)))
129
129
130 # add personal .ipython dir to sys.path so that users can put things in
130 # add personal .ipython dir to sys.path so that users can put things in
131 # there for customization
131 # there for customization
132 sys.path.append(ipythondir)
132 sys.path.append(ipythondir)
133
133
134 sys.path.insert(0, '') # add . to sys.path. Fix from Prabhu Ramachandran
134 sys.path.insert(0, '') # add . to sys.path. Fix from Prabhu Ramachandran
135
135
136 # we need the directory where IPython itself is installed
136 # we need the directory where IPython itself is installed
137 import IPython
137 import IPython
138 IPython_dir = os.path.dirname(IPython.__file__)
138 IPython_dir = os.path.dirname(IPython.__file__)
139 del IPython
139 del IPython
140
140
141 #-------------------------------------------------------------------------
141 #-------------------------------------------------------------------------
142 # Command line handling
142 # Command line handling
143
143
144 # Valid command line options (uses DPyGetOpt syntax, like Perl's
144 # Valid command line options (uses DPyGetOpt syntax, like Perl's
145 # GetOpt::Long)
145 # GetOpt::Long)
146
146
147 # Any key not listed here gets deleted even if in the file (like session
147 # Any key not listed here gets deleted even if in the file (like session
148 # or profile). That's deliberate, to maintain the rc namespace clean.
148 # or profile). That's deliberate, to maintain the rc namespace clean.
149
149
150 # Each set of options appears twice: under _conv only the names are
150 # Each set of options appears twice: under _conv only the names are
151 # listed, indicating which type they must be converted to when reading the
151 # listed, indicating which type they must be converted to when reading the
152 # ipythonrc file. And under DPyGetOpt they are listed with the regular
152 # ipythonrc file. And under DPyGetOpt they are listed with the regular
153 # DPyGetOpt syntax (=s,=i,:f,etc).
153 # DPyGetOpt syntax (=s,=i,:f,etc).
154
154
155 # Make sure there's a space before each end of line (they get auto-joined!)
155 # Make sure there's a space before each end of line (they get auto-joined!)
156 cmdline_opts = ('autocall=i autoindent! automagic! banner! cache_size|cs=i '
156 cmdline_opts = ('autocall=i autoindent! automagic! banner! cache_size|cs=i '
157 'c=s classic|cl color_info! colors=s confirm_exit! '
157 'c=s classic|cl color_info! colors=s confirm_exit! '
158 'debug! deep_reload! editor=s log|l messages! nosep pdb! '
158 'debug! deep_reload! editor=s log|l messages! nosep pdb! '
159 'pprint! prompt_in1|pi1=s prompt_in2|pi2=s prompt_out|po=s '
159 'pprint! prompt_in1|pi1=s prompt_in2|pi2=s prompt_out|po=s '
160 'quick screen_length|sl=i prompts_pad_left=i '
160 'quick screen_length|sl=i prompts_pad_left=i '
161 'logfile|lf=s logplay|lp=s profile|p=s '
161 'logfile|lf=s logplay|lp=s profile|p=s '
162 'readline! readline_merge_completions! '
162 'readline! readline_merge_completions! '
163 'readline_omit__names! '
163 'readline_omit__names! '
164 'rcfile=s separate_in|si=s separate_out|so=s '
164 'rcfile=s separate_in|si=s separate_out|so=s '
165 'separate_out2|so2=s xmode=s wildcards_case_sensitive! '
165 'separate_out2|so2=s xmode=s wildcards_case_sensitive! '
166 'magic_docstrings system_verbose! '
166 'magic_docstrings system_verbose! '
167 'multi_line_specials! '
167 'multi_line_specials! '
168 'wxversion=s '
168 'wxversion=s '
169 'autoedit_syntax!')
169 'autoedit_syntax!')
170
170
171 # Options that can *only* appear at the cmd line (not in rcfiles).
171 # Options that can *only* appear at the cmd line (not in rcfiles).
172
172
173 # The "ignore" option is a kludge so that Emacs buffers don't crash, since
173 # The "ignore" option is a kludge so that Emacs buffers don't crash, since
174 # the 'C-c !' command in emacs automatically appends a -i option at the end.
174 # the 'C-c !' command in emacs automatically appends a -i option at the end.
175 cmdline_only = ('help ignore|i ipythondir=s Version upgrade '
175 cmdline_only = ('help ignore|i ipythondir=s Version upgrade '
176 'gthread! qthread! wthread! pylab! tk!')
176 'gthread! qthread! wthread! pylab! tk!')
177
177
178 # Build the actual name list to be used by DPyGetOpt
178 # Build the actual name list to be used by DPyGetOpt
179 opts_names = qw(cmdline_opts) + qw(cmdline_only)
179 opts_names = qw(cmdline_opts) + qw(cmdline_only)
180
180
181 # Set sensible command line defaults.
181 # Set sensible command line defaults.
182 # This should have everything from cmdline_opts and cmdline_only
182 # This should have everything from cmdline_opts and cmdline_only
183 opts_def = Struct(autocall = 1,
183 opts_def = Struct(autocall = 1,
184 autoedit_syntax = 1,
184 autoedit_syntax = 1,
185 autoindent=0,
185 autoindent=0,
186 automagic = 1,
186 automagic = 1,
187 banner = 1,
187 banner = 1,
188 cache_size = 1000,
188 cache_size = 1000,
189 c = '',
189 c = '',
190 classic = 0,
190 classic = 0,
191 colors = 'NoColor',
191 colors = 'NoColor',
192 color_info = 0,
192 color_info = 0,
193 confirm_exit = 1,
193 confirm_exit = 1,
194 debug = 0,
194 debug = 0,
195 deep_reload = 0,
195 deep_reload = 0,
196 editor = '0',
196 editor = '0',
197 help = 0,
197 help = 0,
198 ignore = 0,
198 ignore = 0,
199 ipythondir = ipythondir,
199 ipythondir = ipythondir,
200 log = 0,
200 log = 0,
201 logfile = '',
201 logfile = '',
202 logplay = '',
202 logplay = '',
203 multi_line_specials = 1,
203 multi_line_specials = 1,
204 messages = 1,
204 messages = 1,
205 nosep = 0,
205 nosep = 0,
206 pdb = 0,
206 pdb = 0,
207 pprint = 0,
207 pprint = 0,
208 profile = '',
208 profile = '',
209 prompt_in1 = 'In [\\#]: ',
209 prompt_in1 = 'In [\\#]: ',
210 prompt_in2 = ' .\\D.: ',
210 prompt_in2 = ' .\\D.: ',
211 prompt_out = 'Out[\\#]: ',
211 prompt_out = 'Out[\\#]: ',
212 prompts_pad_left = 1,
212 prompts_pad_left = 1,
213 quick = 0,
213 quick = 0,
214 readline = 1,
214 readline = 1,
215 readline_merge_completions = 1,
215 readline_merge_completions = 1,
216 readline_omit__names = 0,
216 readline_omit__names = 0,
217 rcfile = 'ipythonrc' + rc_suffix,
217 rcfile = 'ipythonrc' + rc_suffix,
218 screen_length = 0,
218 screen_length = 0,
219 separate_in = '\n',
219 separate_in = '\n',
220 separate_out = '\n',
220 separate_out = '\n',
221 separate_out2 = '',
221 separate_out2 = '',
222 system_verbose = 0,
222 system_verbose = 0,
223 gthread = 0,
223 gthread = 0,
224 qthread = 0,
224 qthread = 0,
225 wthread = 0,
225 wthread = 0,
226 pylab = 0,
226 pylab = 0,
227 tk = 0,
227 tk = 0,
228 upgrade = 0,
228 upgrade = 0,
229 Version = 0,
229 Version = 0,
230 xmode = 'Verbose',
230 xmode = 'Verbose',
231 wildcards_case_sensitive = 1,
231 wildcards_case_sensitive = 1,
232 wxversion = '0',
232 wxversion = '0',
233 magic_docstrings = 0, # undocumented, for doc generation
233 magic_docstrings = 0, # undocumented, for doc generation
234 )
234 )
235
235
236 # Things that will *only* appear in rcfiles (not at the command line).
236 # Things that will *only* appear in rcfiles (not at the command line).
237 # Make sure there's a space before each end of line (they get auto-joined!)
237 # Make sure there's a space before each end of line (they get auto-joined!)
238 rcfile_opts = { qwflat: 'include import_mod import_all execfile ',
238 rcfile_opts = { qwflat: 'include import_mod import_all execfile ',
239 qw_lol: 'import_some ',
239 qw_lol: 'import_some ',
240 # for things with embedded whitespace:
240 # for things with embedded whitespace:
241 list_strings:'execute alias readline_parse_and_bind ',
241 list_strings:'execute alias readline_parse_and_bind ',
242 # Regular strings need no conversion:
242 # Regular strings need no conversion:
243 None:'readline_remove_delims ',
243 None:'readline_remove_delims ',
244 }
244 }
245 # Default values for these
245 # Default values for these
246 rc_def = Struct(include = [],
246 rc_def = Struct(include = [],
247 import_mod = [],
247 import_mod = [],
248 import_all = [],
248 import_all = [],
249 import_some = [[]],
249 import_some = [[]],
250 execute = [],
250 execute = [],
251 execfile = [],
251 execfile = [],
252 alias = [],
252 alias = [],
253 readline_parse_and_bind = [],
253 readline_parse_and_bind = [],
254 readline_remove_delims = '',
254 readline_remove_delims = '',
255 )
255 )
256
256
257 # Build the type conversion dictionary from the above tables:
257 # Build the type conversion dictionary from the above tables:
258 typeconv = rcfile_opts.copy()
258 typeconv = rcfile_opts.copy()
259 typeconv.update(optstr2types(cmdline_opts))
259 typeconv.update(optstr2types(cmdline_opts))
260
260
261 # FIXME: the None key appears in both, put that back together by hand. Ugly!
261 # FIXME: the None key appears in both, put that back together by hand. Ugly!
262 typeconv[None] += ' ' + rcfile_opts[None]
262 typeconv[None] += ' ' + rcfile_opts[None]
263
263
264 # Remove quotes at ends of all strings (used to protect spaces)
264 # Remove quotes at ends of all strings (used to protect spaces)
265 typeconv[unquote_ends] = typeconv[None]
265 typeconv[unquote_ends] = typeconv[None]
266 del typeconv[None]
266 del typeconv[None]
267
267
268 # Build the list we'll use to make all config decisions with defaults:
268 # Build the list we'll use to make all config decisions with defaults:
269 opts_all = opts_def.copy()
269 opts_all = opts_def.copy()
270 opts_all.update(rc_def)
270 opts_all.update(rc_def)
271
271
272 # Build conflict resolver for recursive loading of config files:
272 # Build conflict resolver for recursive loading of config files:
273 # - preserve means the outermost file maintains the value, it is not
273 # - preserve means the outermost file maintains the value, it is not
274 # overwritten if an included file has the same key.
274 # overwritten if an included file has the same key.
275 # - add_flip applies + to the two values, so it better make sense to add
275 # - add_flip applies + to the two values, so it better make sense to add
276 # those types of keys. But it flips them first so that things loaded
276 # those types of keys. But it flips them first so that things loaded
277 # deeper in the inclusion chain have lower precedence.
277 # deeper in the inclusion chain have lower precedence.
278 conflict = {'preserve': ' '.join([ typeconv[int],
278 conflict = {'preserve': ' '.join([ typeconv[int],
279 typeconv[unquote_ends] ]),
279 typeconv[unquote_ends] ]),
280 'add_flip': ' '.join([ typeconv[qwflat],
280 'add_flip': ' '.join([ typeconv[qwflat],
281 typeconv[qw_lol],
281 typeconv[qw_lol],
282 typeconv[list_strings] ])
282 typeconv[list_strings] ])
283 }
283 }
284
284
285 # Now actually process the command line
285 # Now actually process the command line
286 getopt = DPyGetOpt.DPyGetOpt()
286 getopt = DPyGetOpt.DPyGetOpt()
287 getopt.setIgnoreCase(0)
287 getopt.setIgnoreCase(0)
288
288
289 getopt.parseConfiguration(opts_names)
289 getopt.parseConfiguration(opts_names)
290
290
291 try:
291 try:
292 getopt.processArguments(argv)
292 getopt.processArguments(argv)
293 except:
293 except:
294 print cmd_line_usage
294 print cmd_line_usage
295 warn('\nError in Arguments: ' + `sys.exc_value`)
295 warn('\nError in Arguments: ' + `sys.exc_value`)
296 sys.exit(1)
296 sys.exit(1)
297
297
298 # convert the options dict to a struct for much lighter syntax later
298 # convert the options dict to a struct for much lighter syntax later
299 opts = Struct(getopt.optionValues)
299 opts = Struct(getopt.optionValues)
300 args = getopt.freeValues
300 args = getopt.freeValues
301
301
302 # this is the struct (which has default values at this point) with which
302 # this is the struct (which has default values at this point) with which
303 # we make all decisions:
303 # we make all decisions:
304 opts_all.update(opts)
304 opts_all.update(opts)
305
305
306 # Options that force an immediate exit
306 # Options that force an immediate exit
307 if opts_all.help:
307 if opts_all.help:
308 page(cmd_line_usage)
308 page(cmd_line_usage)
309 sys.exit()
309 sys.exit()
310
310
311 if opts_all.Version:
311 if opts_all.Version:
312 print __version__
312 print __version__
313 sys.exit()
313 sys.exit()
314
314
315 if opts_all.magic_docstrings:
315 if opts_all.magic_docstrings:
316 IP.magic_magic('-latex')
316 IP.magic_magic('-latex')
317 sys.exit()
317 sys.exit()
318
318
319 # Create user config directory if it doesn't exist. This must be done
319 # Create user config directory if it doesn't exist. This must be done
320 # *after* getting the cmd line options.
320 # *after* getting the cmd line options.
321 if not os.path.isdir(opts_all.ipythondir):
321 if not os.path.isdir(opts_all.ipythondir):
322 IP.user_setup(opts_all.ipythondir,rc_suffix,'install')
322 IP.user_setup(opts_all.ipythondir,rc_suffix,'install')
323
323
324 # upgrade user config files while preserving a copy of the originals
324 # upgrade user config files while preserving a copy of the originals
325 if opts_all.upgrade:
325 if opts_all.upgrade:
326 IP.user_setup(opts_all.ipythondir,rc_suffix,'upgrade')
326 IP.user_setup(opts_all.ipythondir,rc_suffix,'upgrade')
327
327
328 # check mutually exclusive options in the *original* command line
328 # check mutually exclusive options in the *original* command line
329 mutex_opts(opts,[qw('log logfile'),qw('rcfile profile'),
329 mutex_opts(opts,[qw('log logfile'),qw('rcfile profile'),
330 qw('classic profile'),qw('classic rcfile')])
330 qw('classic profile'),qw('classic rcfile')])
331
331
332 #---------------------------------------------------------------------------
332 #---------------------------------------------------------------------------
333 # Log replay
333 # Log replay
334
334
335 # if -logplay, we need to 'become' the other session. That basically means
335 # if -logplay, we need to 'become' the other session. That basically means
336 # replacing the current command line environment with that of the old
336 # replacing the current command line environment with that of the old
337 # session and moving on.
337 # session and moving on.
338
338
339 # this is needed so that later we know we're in session reload mode, as
339 # this is needed so that later we know we're in session reload mode, as
340 # opts_all will get overwritten:
340 # opts_all will get overwritten:
341 load_logplay = 0
341 load_logplay = 0
342
342
343 if opts_all.logplay:
343 if opts_all.logplay:
344 load_logplay = opts_all.logplay
344 load_logplay = opts_all.logplay
345 opts_debug_save = opts_all.debug
345 opts_debug_save = opts_all.debug
346 try:
346 try:
347 logplay = open(opts_all.logplay)
347 logplay = open(opts_all.logplay)
348 except IOError:
348 except IOError:
349 if opts_all.debug: IP.InteractiveTB()
349 if opts_all.debug: IP.InteractiveTB()
350 warn('Could not open logplay file '+`opts_all.logplay`)
350 warn('Could not open logplay file '+`opts_all.logplay`)
351 # restore state as if nothing had happened and move on, but make
351 # restore state as if nothing had happened and move on, but make
352 # sure that later we don't try to actually load the session file
352 # sure that later we don't try to actually load the session file
353 logplay = None
353 logplay = None
354 load_logplay = 0
354 load_logplay = 0
355 del opts_all.logplay
355 del opts_all.logplay
356 else:
356 else:
357 try:
357 try:
358 logplay.readline()
358 logplay.readline()
359 logplay.readline();
359 logplay.readline();
360 # this reloads that session's command line
360 # this reloads that session's command line
361 cmd = logplay.readline()[6:]
361 cmd = logplay.readline()[6:]
362 exec cmd
362 exec cmd
363 # restore the true debug flag given so that the process of
363 # restore the true debug flag given so that the process of
364 # session loading itself can be monitored.
364 # session loading itself can be monitored.
365 opts.debug = opts_debug_save
365 opts.debug = opts_debug_save
366 # save the logplay flag so later we don't overwrite the log
366 # save the logplay flag so later we don't overwrite the log
367 opts.logplay = load_logplay
367 opts.logplay = load_logplay
368 # now we must update our own structure with defaults
368 # now we must update our own structure with defaults
369 opts_all.update(opts)
369 opts_all.update(opts)
370 # now load args
370 # now load args
371 cmd = logplay.readline()[6:]
371 cmd = logplay.readline()[6:]
372 exec cmd
372 exec cmd
373 logplay.close()
373 logplay.close()
374 except:
374 except:
375 logplay.close()
375 logplay.close()
376 if opts_all.debug: IP.InteractiveTB()
376 if opts_all.debug: IP.InteractiveTB()
377 warn("Logplay file lacking full configuration information.\n"
377 warn("Logplay file lacking full configuration information.\n"
378 "I'll try to read it, but some things may not work.")
378 "I'll try to read it, but some things may not work.")
379
379
380 #-------------------------------------------------------------------------
380 #-------------------------------------------------------------------------
381 # set up output traps: catch all output from files, being run, modules
381 # set up output traps: catch all output from files, being run, modules
382 # loaded, etc. Then give it to the user in a clean form at the end.
382 # loaded, etc. Then give it to the user in a clean form at the end.
383
383
384 msg_out = 'Output messages. '
384 msg_out = 'Output messages. '
385 msg_err = 'Error messages. '
385 msg_err = 'Error messages. '
386 msg_sep = '\n'
386 msg_sep = '\n'
387 msg = Struct(config = OutputTrap('Configuration Loader',msg_out,
387 msg = Struct(config = OutputTrap('Configuration Loader',msg_out,
388 msg_err,msg_sep,debug,
388 msg_err,msg_sep,debug,
389 quiet_out=1),
389 quiet_out=1),
390 user_exec = OutputTrap('User File Execution',msg_out,
390 user_exec = OutputTrap('User File Execution',msg_out,
391 msg_err,msg_sep,debug),
391 msg_err,msg_sep,debug),
392 logplay = OutputTrap('Log Loader',msg_out,
392 logplay = OutputTrap('Log Loader',msg_out,
393 msg_err,msg_sep,debug),
393 msg_err,msg_sep,debug),
394 summary = ''
394 summary = ''
395 )
395 )
396
396
397 #-------------------------------------------------------------------------
397 #-------------------------------------------------------------------------
398 # Process user ipythonrc-type configuration files
398 # Process user ipythonrc-type configuration files
399
399
400 # turn on output trapping and log to msg.config
400 # turn on output trapping and log to msg.config
401 # remember that with debug on, trapping is actually disabled
401 # remember that with debug on, trapping is actually disabled
402 msg.config.trap_all()
402 msg.config.trap_all()
403
403
404 # look for rcfile in current or default directory
404 # look for rcfile in current or default directory
405 try:
405 try:
406 opts_all.rcfile = filefind(opts_all.rcfile,opts_all.ipythondir)
406 opts_all.rcfile = filefind(opts_all.rcfile,opts_all.ipythondir)
407 except IOError:
407 except IOError:
408 if opts_all.debug: IP.InteractiveTB()
408 if opts_all.debug: IP.InteractiveTB()
409 warn('Configuration file %s not found. Ignoring request.'
409 warn('Configuration file %s not found. Ignoring request.'
410 % (opts_all.rcfile) )
410 % (opts_all.rcfile) )
411
411
412 # 'profiles' are a shorthand notation for config filenames
412 # 'profiles' are a shorthand notation for config filenames
413 if opts_all.profile:
413 if opts_all.profile:
414
414
415 try:
415 try:
416 opts_all.rcfile = filefind('ipythonrc-' + opts_all.profile
416 opts_all.rcfile = filefind('ipythonrc-' + opts_all.profile
417 + rc_suffix,
417 + rc_suffix,
418 opts_all.ipythondir)
418 opts_all.ipythondir)
419 except IOError:
419 except IOError:
420 if opts_all.debug: IP.InteractiveTB()
420 if opts_all.debug: IP.InteractiveTB()
421 opts.profile = '' # remove profile from options if invalid
421 opts.profile = '' # remove profile from options if invalid
422 # We won't warn anymore, primary method is ipy_profile_PROFNAME
422 # We won't warn anymore, primary method is ipy_profile_PROFNAME
423 # which does trigger a warning.
423 # which does trigger a warning.
424
424
425 # load the config file
425 # load the config file
426 rcfiledata = None
426 rcfiledata = None
427 if opts_all.quick:
427 if opts_all.quick:
428 print 'Launching IPython in quick mode. No config file read.'
428 print 'Launching IPython in quick mode. No config file read.'
429 elif opts_all.classic:
429 elif opts_all.classic:
430 print 'Launching IPython in classic mode. No config file read.'
430 print 'Launching IPython in classic mode. No config file read.'
431 elif opts_all.rcfile:
431 elif opts_all.rcfile:
432 try:
432 try:
433 cfg_loader = ConfigLoader(conflict)
433 cfg_loader = ConfigLoader(conflict)
434 rcfiledata = cfg_loader.load(opts_all.rcfile,typeconv,
434 rcfiledata = cfg_loader.load(opts_all.rcfile,typeconv,
435 'include',opts_all.ipythondir,
435 'include',opts_all.ipythondir,
436 purge = 1,
436 purge = 1,
437 unique = conflict['preserve'])
437 unique = conflict['preserve'])
438 except:
438 except:
439 IP.InteractiveTB()
439 IP.InteractiveTB()
440 warn('Problems loading configuration file '+
440 warn('Problems loading configuration file '+
441 `opts_all.rcfile`+
441 `opts_all.rcfile`+
442 '\nStarting with default -bare bones- configuration.')
442 '\nStarting with default -bare bones- configuration.')
443 else:
443 else:
444 warn('No valid configuration file found in either currrent directory\n'+
444 warn('No valid configuration file found in either currrent directory\n'+
445 'or in the IPython config. directory: '+`opts_all.ipythondir`+
445 'or in the IPython config. directory: '+`opts_all.ipythondir`+
446 '\nProceeding with internal defaults.')
446 '\nProceeding with internal defaults.')
447
447
448 #------------------------------------------------------------------------
448 #------------------------------------------------------------------------
449 # Set exception handlers in mode requested by user.
449 # Set exception handlers in mode requested by user.
450 otrap = OutputTrap(trap_out=1) # trap messages from magic_xmode
450 otrap = OutputTrap(trap_out=1) # trap messages from magic_xmode
451 IP.magic_xmode(opts_all.xmode)
451 IP.magic_xmode(opts_all.xmode)
452 otrap.release_out()
452 otrap.release_out()
453
453
454 #------------------------------------------------------------------------
454 #------------------------------------------------------------------------
455 # Execute user config
455 # Execute user config
456
456
457 # Create a valid config structure with the right precedence order:
457 # Create a valid config structure with the right precedence order:
458 # defaults < rcfile < command line. This needs to be in the instance, so
458 # defaults < rcfile < command line. This needs to be in the instance, so
459 # that method calls below that rely on it find it.
459 # that method calls below that rely on it find it.
460 IP.rc = rc_def.copy()
460 IP.rc = rc_def.copy()
461
461
462 # Work with a local alias inside this routine to avoid unnecessary
462 # Work with a local alias inside this routine to avoid unnecessary
463 # attribute lookups.
463 # attribute lookups.
464 IP_rc = IP.rc
464 IP_rc = IP.rc
465
465
466 IP_rc.update(opts_def)
466 IP_rc.update(opts_def)
467 if rcfiledata:
467 if rcfiledata:
468 # now we can update
468 # now we can update
469 IP_rc.update(rcfiledata)
469 IP_rc.update(rcfiledata)
470 IP_rc.update(opts)
470 IP_rc.update(opts)
471 IP_rc.update(rc_override)
471 IP_rc.update(rc_override)
472
472
473 # Store the original cmd line for reference:
473 # Store the original cmd line for reference:
474 IP_rc.opts = opts
474 IP_rc.opts = opts
475 IP_rc.args = args
475 IP_rc.args = args
476
476
477 # create a *runtime* Struct like rc for holding parameters which may be
477 # create a *runtime* Struct like rc for holding parameters which may be
478 # created and/or modified by runtime user extensions.
478 # created and/or modified by runtime user extensions.
479 IP.runtime_rc = Struct()
479 IP.runtime_rc = Struct()
480
480
481 # from this point on, all config should be handled through IP_rc,
481 # from this point on, all config should be handled through IP_rc,
482 # opts* shouldn't be used anymore.
482 # opts* shouldn't be used anymore.
483
483
484
484
485 # update IP_rc with some special things that need manual
485 # update IP_rc with some special things that need manual
486 # tweaks. Basically options which affect other options. I guess this
486 # tweaks. Basically options which affect other options. I guess this
487 # should just be written so that options are fully orthogonal and we
487 # should just be written so that options are fully orthogonal and we
488 # wouldn't worry about this stuff!
488 # wouldn't worry about this stuff!
489
489
490 if IP_rc.classic:
490 if IP_rc.classic:
491 IP_rc.quick = 1
491 IP_rc.quick = 1
492 IP_rc.cache_size = 0
492 IP_rc.cache_size = 0
493 IP_rc.pprint = 0
493 IP_rc.pprint = 0
494 IP_rc.prompt_in1 = '>>> '
494 IP_rc.prompt_in1 = '>>> '
495 IP_rc.prompt_in2 = '... '
495 IP_rc.prompt_in2 = '... '
496 IP_rc.prompt_out = ''
496 IP_rc.prompt_out = ''
497 IP_rc.separate_in = IP_rc.separate_out = IP_rc.separate_out2 = '0'
497 IP_rc.separate_in = IP_rc.separate_out = IP_rc.separate_out2 = '0'
498 IP_rc.colors = 'NoColor'
498 IP_rc.colors = 'NoColor'
499 IP_rc.xmode = 'Plain'
499 IP_rc.xmode = 'Plain'
500
500
501 IP.pre_config_initialization()
501 IP.pre_config_initialization()
502 # configure readline
502 # configure readline
503 # Define the history file for saving commands in between sessions
503 # Define the history file for saving commands in between sessions
504 if IP_rc.profile:
504 if IP_rc.profile:
505 histfname = 'history-%s' % IP_rc.profile
505 histfname = 'history-%s' % IP_rc.profile
506 else:
506 else:
507 histfname = 'history'
507 histfname = 'history'
508 IP.histfile = os.path.join(opts_all.ipythondir,histfname)
508 IP.histfile = os.path.join(opts_all.ipythondir,histfname)
509
509
510 # update exception handlers with rc file status
510 # update exception handlers with rc file status
511 otrap.trap_out() # I don't want these messages ever.
511 otrap.trap_out() # I don't want these messages ever.
512 IP.magic_xmode(IP_rc.xmode)
512 IP.magic_xmode(IP_rc.xmode)
513 otrap.release_out()
513 otrap.release_out()
514
514
515 # activate logging if requested and not reloading a log
515 # activate logging if requested and not reloading a log
516 if IP_rc.logplay:
516 if IP_rc.logplay:
517 IP.magic_logstart(IP_rc.logplay + ' append')
517 IP.magic_logstart(IP_rc.logplay + ' append')
518 elif IP_rc.logfile:
518 elif IP_rc.logfile:
519 IP.magic_logstart(IP_rc.logfile)
519 IP.magic_logstart(IP_rc.logfile)
520 elif IP_rc.log:
520 elif IP_rc.log:
521 IP.magic_logstart()
521 IP.magic_logstart()
522
522
523 # find user editor so that it we don't have to look it up constantly
523 # find user editor so that it we don't have to look it up constantly
524 if IP_rc.editor.strip()=='0':
524 if IP_rc.editor.strip()=='0':
525 try:
525 try:
526 ed = os.environ['EDITOR']
526 ed = os.environ['EDITOR']
527 except KeyError:
527 except KeyError:
528 if os.name == 'posix':
528 if os.name == 'posix':
529 ed = 'vi' # the only one guaranteed to be there!
529 ed = 'vi' # the only one guaranteed to be there!
530 else:
530 else:
531 ed = 'notepad' # same in Windows!
531 ed = 'notepad' # same in Windows!
532 IP_rc.editor = ed
532 IP_rc.editor = ed
533
533
534 # Keep track of whether this is an embedded instance or not (useful for
534 # Keep track of whether this is an embedded instance or not (useful for
535 # post-mortems).
535 # post-mortems).
536 IP_rc.embedded = IP.embedded
536 IP_rc.embedded = IP.embedded
537
537
538 # Recursive reload
538 # Recursive reload
539 try:
539 try:
540 from IPython import deep_reload
540 from IPython import deep_reload
541 if IP_rc.deep_reload:
541 if IP_rc.deep_reload:
542 __builtin__.reload = deep_reload.reload
542 __builtin__.reload = deep_reload.reload
543 else:
543 else:
544 __builtin__.dreload = deep_reload.reload
544 __builtin__.dreload = deep_reload.reload
545 del deep_reload
545 del deep_reload
546 except ImportError:
546 except ImportError:
547 pass
547 pass
548
548
549 # Save the current state of our namespace so that the interactive shell
549 # Save the current state of our namespace so that the interactive shell
550 # can later know which variables have been created by us from config files
550 # can later know which variables have been created by us from config files
551 # and loading. This way, loading a file (in any way) is treated just like
551 # and loading. This way, loading a file (in any way) is treated just like
552 # defining things on the command line, and %who works as expected.
552 # defining things on the command line, and %who works as expected.
553
553
554 # DON'T do anything that affects the namespace beyond this point!
554 # DON'T do anything that affects the namespace beyond this point!
555 IP.internal_ns.update(__main__.__dict__)
555 IP.internal_ns.update(__main__.__dict__)
556
556
557 #IP.internal_ns.update(locals()) # so our stuff doesn't show up in %who
557 #IP.internal_ns.update(locals()) # so our stuff doesn't show up in %who
558
558
559 # Now run through the different sections of the users's config
559 # Now run through the different sections of the users's config
560 if IP_rc.debug:
560 if IP_rc.debug:
561 print 'Trying to execute the following configuration structure:'
561 print 'Trying to execute the following configuration structure:'
562 print '(Things listed first are deeper in the inclusion tree and get'
562 print '(Things listed first are deeper in the inclusion tree and get'
563 print 'loaded first).\n'
563 print 'loaded first).\n'
564 pprint(IP_rc.__dict__)
564 pprint(IP_rc.__dict__)
565
565
566 for mod in IP_rc.import_mod:
566 for mod in IP_rc.import_mod:
567 try:
567 try:
568 exec 'import '+mod in IP.user_ns
568 exec 'import '+mod in IP.user_ns
569 except :
569 except :
570 IP.InteractiveTB()
570 IP.InteractiveTB()
571 import_fail_info(mod)
571 import_fail_info(mod)
572
572
573 for mod_fn in IP_rc.import_some:
573 for mod_fn in IP_rc.import_some:
574 if mod_fn == []: break
574 if mod_fn == []: break
575 mod,fn = mod_fn[0],','.join(mod_fn[1:])
575 mod,fn = mod_fn[0],','.join(mod_fn[1:])
576 try:
576 try:
577 exec 'from '+mod+' import '+fn in IP.user_ns
577 exec 'from '+mod+' import '+fn in IP.user_ns
578 except :
578 except :
579 IP.InteractiveTB()
579 IP.InteractiveTB()
580 import_fail_info(mod,fn)
580 import_fail_info(mod,fn)
581
581
582 for mod in IP_rc.import_all:
582 for mod in IP_rc.import_all:
583 try:
583 try:
584 exec 'from '+mod+' import *' in IP.user_ns
584 exec 'from '+mod+' import *' in IP.user_ns
585 except :
585 except :
586 IP.InteractiveTB()
586 IP.InteractiveTB()
587 import_fail_info(mod)
587 import_fail_info(mod)
588
588
589 for code in IP_rc.execute:
589 for code in IP_rc.execute:
590 try:
590 try:
591 exec code in IP.user_ns
591 exec code in IP.user_ns
592 except:
592 except:
593 IP.InteractiveTB()
593 IP.InteractiveTB()
594 warn('Failure executing code: ' + `code`)
594 warn('Failure executing code: ' + `code`)
595
595
596 # Execute the files the user wants in ipythonrc
596 # Execute the files the user wants in ipythonrc
597 for file in IP_rc.execfile:
597 for file in IP_rc.execfile:
598 try:
598 try:
599 file = filefind(file,sys.path+[IPython_dir])
599 file = filefind(file,sys.path+[IPython_dir])
600 except IOError:
600 except IOError:
601 warn(itpl('File $file not found. Skipping it.'))
601 warn(itpl('File $file not found. Skipping it.'))
602 else:
602 else:
603 IP.safe_execfile(os.path.expanduser(file),IP.user_ns)
603 IP.safe_execfile(os.path.expanduser(file),IP.user_ns)
604
604
605 # finally, try importing ipy_*_conf for final configuration
605 # finally, try importing ipy_*_conf for final configuration
606 try:
606 try:
607 import ipy_system_conf
607 import ipy_system_conf
608 except ImportError:
608 except ImportError:
609 if opts_all.debug: IP.InteractiveTB()
609 if opts_all.debug: IP.InteractiveTB()
610 warn("Could not import 'ipy_system_conf'")
610 warn("Could not import 'ipy_system_conf'")
611 except:
612 IP.InteractiveTB()
613 import_fail_info('ipy_system_conf')
611
614
612 if opts_all.profile:
615 if opts_all.profile:
613 profmodname = 'ipy_profile_' + opts_all.profile
616 profmodname = 'ipy_profile_' + opts_all.profile
614 try:
617 try:
615 __import__(profmodname)
618 __import__(profmodname)
616 except ImportError:
619 except ImportError:
617 # only warn if ipythonrc-PROFNAME didn't exist
620 # only warn if ipythonrc-PROFNAME didn't exist
618 if opts.profile =='':
621 if opts.profile =='':
619 warn("Could not start with profile '%s'!\n ('%s/%s.py' does not exist? run '%%upgrade')" % (
622 warn("Could not start with profile '%s'!\n ('%s/%s.py' does not exist? run '%%upgrade')" % (
620 opts_all.profile, ipythondir, profmodname)
623 opts_all.profile, ipythondir, profmodname)
621
624
622 )
625 )
623 except:
626 except:
624 print "Error importing",profmodname
627 print "Error importing",profmodname
625 IP.InteractiveTB()
628 IP.InteractiveTB()
629 import_fail_info(profmodname)
626
630
627 try:
631 try:
628 import ipy_user_conf
632 import ipy_user_conf
629 except ImportError:
633 except ImportError:
630 if opts_all.debug: IP.InteractiveTB()
634 if opts_all.debug: IP.InteractiveTB()
631 warn("Could not import user config!\n ('%s/ipy_user_conf.py' does not exist? Please run '%%upgrade')\n" %
635 warn("Could not import user config!\n ('%s/ipy_user_conf.py' does not exist? Please run '%%upgrade')\n" %
632 ipythondir)
636 ipythondir)
633 except:
637 except:
634 print "Error importing ipy_user_conf"
638 print "Error importing ipy_user_conf"
635 IP.InteractiveTB()
639 IP.InteractiveTB()
640 import_fail_info("ipy_user_conf")
636
641
637
642
638 # release stdout and stderr and save config log into a global summary
643 # release stdout and stderr and save config log into a global summary
639 msg.config.release_all()
644 msg.config.release_all()
640 if IP_rc.messages:
645 if IP_rc.messages:
641 msg.summary += msg.config.summary_all()
646 msg.summary += msg.config.summary_all()
642
647
643 #------------------------------------------------------------------------
648 #------------------------------------------------------------------------
644 # Setup interactive session
649 # Setup interactive session
645
650
646 # Now we should be fully configured. We can then execute files or load
651 # Now we should be fully configured. We can then execute files or load
647 # things only needed for interactive use. Then we'll open the shell.
652 # things only needed for interactive use. Then we'll open the shell.
648
653
649 # Take a snapshot of the user namespace before opening the shell. That way
654 # Take a snapshot of the user namespace before opening the shell. That way
650 # we'll be able to identify which things were interactively defined and
655 # we'll be able to identify which things were interactively defined and
651 # which were defined through config files.
656 # which were defined through config files.
652 IP.user_config_ns = IP.user_ns.copy()
657 IP.user_config_ns = IP.user_ns.copy()
653
658
654 # Force reading a file as if it were a session log. Slower but safer.
659 # Force reading a file as if it were a session log. Slower but safer.
655 if load_logplay:
660 if load_logplay:
656 print 'Replaying log...'
661 print 'Replaying log...'
657 try:
662 try:
658 if IP_rc.debug:
663 if IP_rc.debug:
659 logplay_quiet = 0
664 logplay_quiet = 0
660 else:
665 else:
661 logplay_quiet = 1
666 logplay_quiet = 1
662
667
663 msg.logplay.trap_all()
668 msg.logplay.trap_all()
664 IP.safe_execfile(load_logplay,IP.user_ns,
669 IP.safe_execfile(load_logplay,IP.user_ns,
665 islog = 1, quiet = logplay_quiet)
670 islog = 1, quiet = logplay_quiet)
666 msg.logplay.release_all()
671 msg.logplay.release_all()
667 if IP_rc.messages:
672 if IP_rc.messages:
668 msg.summary += msg.logplay.summary_all()
673 msg.summary += msg.logplay.summary_all()
669 except:
674 except:
670 warn('Problems replaying logfile %s.' % load_logplay)
675 warn('Problems replaying logfile %s.' % load_logplay)
671 IP.InteractiveTB()
676 IP.InteractiveTB()
672
677
673 # Load remaining files in command line
678 # Load remaining files in command line
674 msg.user_exec.trap_all()
679 msg.user_exec.trap_all()
675
680
676 # Do NOT execute files named in the command line as scripts to be loaded
681 # Do NOT execute files named in the command line as scripts to be loaded
677 # by embedded instances. Doing so has the potential for an infinite
682 # by embedded instances. Doing so has the potential for an infinite
678 # recursion if there are exceptions thrown in the process.
683 # recursion if there are exceptions thrown in the process.
679
684
680 # XXX FIXME: the execution of user files should be moved out to after
685 # XXX FIXME: the execution of user files should be moved out to after
681 # ipython is fully initialized, just as if they were run via %run at the
686 # ipython is fully initialized, just as if they were run via %run at the
682 # ipython prompt. This would also give them the benefit of ipython's
687 # ipython prompt. This would also give them the benefit of ipython's
683 # nice tracebacks.
688 # nice tracebacks.
684
689
685 if not embedded and IP_rc.args:
690 if (not embedded and IP_rc.args and
691 not IP_rc.args[0].lower().endswith('.ipy')):
686 name_save = IP.user_ns['__name__']
692 name_save = IP.user_ns['__name__']
687 IP.user_ns['__name__'] = '__main__'
693 IP.user_ns['__name__'] = '__main__'
688 # Set our own excepthook in case the user code tries to call it
694 # Set our own excepthook in case the user code tries to call it
689 # directly. This prevents triggering the IPython crash handler.
695 # directly. This prevents triggering the IPython crash handler.
690 old_excepthook,sys.excepthook = sys.excepthook, IP.excepthook
696 old_excepthook,sys.excepthook = sys.excepthook, IP.excepthook
691
697
692 save_argv = sys.argv[:] # save it for later restoring
698 save_argv = sys.argv[:] # save it for later restoring
693
699
694 sys.argv = args
700 sys.argv = args
695
701
696 try:
702 try:
697 IP.safe_execfile(args[0], IP.user_ns)
703 IP.safe_execfile(args[0], IP.user_ns)
698 finally:
704 finally:
699 # Reset our crash handler in place
705 # Reset our crash handler in place
700 sys.excepthook = old_excepthook
706 sys.excepthook = old_excepthook
701 sys.argv = save_argv
707 sys.argv = save_argv
702 IP.user_ns['__name__'] = name_save
708 IP.user_ns['__name__'] = name_save
703
709
704 msg.user_exec.release_all()
710 msg.user_exec.release_all()
705 if IP_rc.messages:
711 if IP_rc.messages:
706 msg.summary += msg.user_exec.summary_all()
712 msg.summary += msg.user_exec.summary_all()
707
713
708 # since we can't specify a null string on the cmd line, 0 is the equivalent:
714 # since we can't specify a null string on the cmd line, 0 is the equivalent:
709 if IP_rc.nosep:
715 if IP_rc.nosep:
710 IP_rc.separate_in = IP_rc.separate_out = IP_rc.separate_out2 = '0'
716 IP_rc.separate_in = IP_rc.separate_out = IP_rc.separate_out2 = '0'
711 if IP_rc.separate_in == '0': IP_rc.separate_in = ''
717 if IP_rc.separate_in == '0': IP_rc.separate_in = ''
712 if IP_rc.separate_out == '0': IP_rc.separate_out = ''
718 if IP_rc.separate_out == '0': IP_rc.separate_out = ''
713 if IP_rc.separate_out2 == '0': IP_rc.separate_out2 = ''
719 if IP_rc.separate_out2 == '0': IP_rc.separate_out2 = ''
714 IP_rc.separate_in = IP_rc.separate_in.replace('\\n','\n')
720 IP_rc.separate_in = IP_rc.separate_in.replace('\\n','\n')
715 IP_rc.separate_out = IP_rc.separate_out.replace('\\n','\n')
721 IP_rc.separate_out = IP_rc.separate_out.replace('\\n','\n')
716 IP_rc.separate_out2 = IP_rc.separate_out2.replace('\\n','\n')
722 IP_rc.separate_out2 = IP_rc.separate_out2.replace('\\n','\n')
717
723
718 # Determine how many lines at the bottom of the screen are needed for
724 # Determine how many lines at the bottom of the screen are needed for
719 # showing prompts, so we can know wheter long strings are to be printed or
725 # showing prompts, so we can know wheter long strings are to be printed or
720 # paged:
726 # paged:
721 num_lines_bot = IP_rc.separate_in.count('\n')+1
727 num_lines_bot = IP_rc.separate_in.count('\n')+1
722 IP_rc.screen_length = IP_rc.screen_length - num_lines_bot
728 IP_rc.screen_length = IP_rc.screen_length - num_lines_bot
723
729
724 # configure startup banner
730 # configure startup banner
725 if IP_rc.c: # regular python doesn't print the banner with -c
731 if IP_rc.c: # regular python doesn't print the banner with -c
726 IP_rc.banner = 0
732 IP_rc.banner = 0
727 if IP_rc.banner:
733 if IP_rc.banner:
728 BANN_P = IP.BANNER_PARTS
734 BANN_P = IP.BANNER_PARTS
729 else:
735 else:
730 BANN_P = []
736 BANN_P = []
731
737
732 if IP_rc.profile: BANN_P.append('IPython profile: %s\n' % IP_rc.profile)
738 if IP_rc.profile: BANN_P.append('IPython profile: %s\n' % IP_rc.profile)
733
739
734 # add message log (possibly empty)
740 # add message log (possibly empty)
735 if msg.summary: BANN_P.append(msg.summary)
741 if msg.summary: BANN_P.append(msg.summary)
736 # Final banner is a string
742 # Final banner is a string
737 IP.BANNER = '\n'.join(BANN_P)
743 IP.BANNER = '\n'.join(BANN_P)
738
744
739 # Finalize the IPython instance. This assumes the rc structure is fully
745 # Finalize the IPython instance. This assumes the rc structure is fully
740 # in place.
746 # in place.
741 IP.post_config_initialization()
747 IP.post_config_initialization()
742
748
743 return IP
749 return IP
744 #************************ end of file <ipmaker.py> **************************
750 #************************ end of file <ipmaker.py> **************************
@@ -1,5299 +1,5305 b''
1 2006-04-11 Ville Vainio <vivainio@gmail.com>
2
3 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
4 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
5 prefilters, allowing stuff like magics and aliases in the file.
6
1 2006-03-28 Ville Vainio <vivainio@gmail.com>
7 2006-03-28 Ville Vainio <vivainio@gmail.com>
2
8
3 * iplib.py: Fix quoting of aliases so that only argless ones
9 * iplib.py: Fix quoting of aliases so that only argless ones
4 are quoted
10 are quoted
5
11
6 2006-03-28 Ville Vainio <vivainio@gmail.com>
12 2006-03-28 Ville Vainio <vivainio@gmail.com>
7
13
8 * iplib.py: Quote aliases with spaces in the name.
14 * iplib.py: Quote aliases with spaces in the name.
9 "c:\program files\blah\bin" is now legal alias target.
15 "c:\program files\blah\bin" is now legal alias target.
10
16
11 * ext_rehashdir.py: Space no longer allowed as arg
17 * ext_rehashdir.py: Space no longer allowed as arg
12 separator, since space is legal in path names.
18 separator, since space is legal in path names.
13
19
14 2006-03-16 Ville Vainio <vivainio@gmail.com>
20 2006-03-16 Ville Vainio <vivainio@gmail.com>
15
21
16 * upgrade_dir.py: Take path.py from Extensions, correcting
22 * upgrade_dir.py: Take path.py from Extensions, correcting
17 %upgrade magic
23 %upgrade magic
18
24
19 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
25 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
20
26
21 * hooks.py: Only enclose editor binary in quotes if legal and
27 * hooks.py: Only enclose editor binary in quotes if legal and
22 necessary (space in the name, and is an existing file). Fixes a bug
28 necessary (space in the name, and is an existing file). Fixes a bug
23 reported by Zachary Pincus.
29 reported by Zachary Pincus.
24
30
25 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
31 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
26
32
27 * Manual: thanks to a tip on proper color handling for Emacs, by
33 * Manual: thanks to a tip on proper color handling for Emacs, by
28 Eric J Haywiser <ejh1-AT-MIT.EDU>.
34 Eric J Haywiser <ejh1-AT-MIT.EDU>.
29
35
30 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
36 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
31 by applying the provided patch. Thanks to Liu Jin
37 by applying the provided patch. Thanks to Liu Jin
32 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
38 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
33 XEmacs/Linux, I'm trusting the submitter that it actually helps
39 XEmacs/Linux, I'm trusting the submitter that it actually helps
34 under win32/GNU Emacs. Will revisit if any problems are reported.
40 under win32/GNU Emacs. Will revisit if any problems are reported.
35
41
36 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
42 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
37
43
38 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
44 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
39 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
45 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
40
46
41 2006-03-12 Ville Vainio <vivainio@gmail.com>
47 2006-03-12 Ville Vainio <vivainio@gmail.com>
42
48
43 * Magic.py (magic_timeit): Added %timeit magic, contributed by
49 * Magic.py (magic_timeit): Added %timeit magic, contributed by
44 Torsten Marek.
50 Torsten Marek.
45
51
46 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
52 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
47
53
48 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
54 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
49 line ranges works again.
55 line ranges works again.
50
56
51 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
57 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
52
58
53 * IPython/iplib.py (showtraceback): add back sys.last_traceback
59 * IPython/iplib.py (showtraceback): add back sys.last_traceback
54 and friends, after a discussion with Zach Pincus on ipython-user.
60 and friends, after a discussion with Zach Pincus on ipython-user.
55 I'm not 100% sure, but after thinking aobut it quite a bit, it may
61 I'm not 100% sure, but after thinking aobut it quite a bit, it may
56 be OK. Testing with the multithreaded shells didn't reveal any
62 be OK. Testing with the multithreaded shells didn't reveal any
57 problems, but let's keep an eye out.
63 problems, but let's keep an eye out.
58
64
59 In the process, I fixed a few things which were calling
65 In the process, I fixed a few things which were calling
60 self.InteractiveTB() directly (like safe_execfile), which is a
66 self.InteractiveTB() directly (like safe_execfile), which is a
61 mistake: ALL exception reporting should be done by calling
67 mistake: ALL exception reporting should be done by calling
62 self.showtraceback(), which handles state and tab-completion and
68 self.showtraceback(), which handles state and tab-completion and
63 more.
69 more.
64
70
65 2006-03-01 Ville Vainio <vivainio@gmail.com>
71 2006-03-01 Ville Vainio <vivainio@gmail.com>
66
72
67 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
73 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
68 To use, do "from ipipe import *".
74 To use, do "from ipipe import *".
69
75
70 2006-02-24 Ville Vainio <vivainio@gmail.com>
76 2006-02-24 Ville Vainio <vivainio@gmail.com>
71
77
72 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
78 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
73 "cleanly" and safely than the older upgrade mechanism.
79 "cleanly" and safely than the older upgrade mechanism.
74
80
75 2006-02-21 Ville Vainio <vivainio@gmail.com>
81 2006-02-21 Ville Vainio <vivainio@gmail.com>
76
82
77 * Magic.py: %save works again.
83 * Magic.py: %save works again.
78
84
79 2006-02-15 Ville Vainio <vivainio@gmail.com>
85 2006-02-15 Ville Vainio <vivainio@gmail.com>
80
86
81 * Magic.py: %Pprint works again
87 * Magic.py: %Pprint works again
82
88
83 * Extensions/ipy_sane_defaults.py: Provide everything provided
89 * Extensions/ipy_sane_defaults.py: Provide everything provided
84 in default ipythonrc, to make it possible to have a completely empty
90 in default ipythonrc, to make it possible to have a completely empty
85 ipythonrc (and thus completely rc-file free configuration)
91 ipythonrc (and thus completely rc-file free configuration)
86
92
87
93
88 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
94 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
89
95
90 * IPython/hooks.py (editor): quote the call to the editor command,
96 * IPython/hooks.py (editor): quote the call to the editor command,
91 to allow commands with spaces in them. Problem noted by watching
97 to allow commands with spaces in them. Problem noted by watching
92 Ian Oswald's video about textpad under win32 at
98 Ian Oswald's video about textpad under win32 at
93 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
99 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
94
100
95 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
101 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
96 describing magics (we haven't used @ for a loong time).
102 describing magics (we haven't used @ for a loong time).
97
103
98 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
104 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
99 contributed by marienz to close
105 contributed by marienz to close
100 http://www.scipy.net/roundup/ipython/issue53.
106 http://www.scipy.net/roundup/ipython/issue53.
101
107
102 2006-02-10 Ville Vainio <vivainio@gmail.com>
108 2006-02-10 Ville Vainio <vivainio@gmail.com>
103
109
104 * genutils.py: getoutput now works in win32 too
110 * genutils.py: getoutput now works in win32 too
105
111
106 * completer.py: alias and magic completion only invoked
112 * completer.py: alias and magic completion only invoked
107 at the first "item" in the line, to avoid "cd %store"
113 at the first "item" in the line, to avoid "cd %store"
108 nonsense.
114 nonsense.
109
115
110 2006-02-09 Ville Vainio <vivainio@gmail.com>
116 2006-02-09 Ville Vainio <vivainio@gmail.com>
111
117
112 * test/*: Added a unit testing framework (finally).
118 * test/*: Added a unit testing framework (finally).
113 '%run runtests.py' to run test_*.
119 '%run runtests.py' to run test_*.
114
120
115 * ipapi.py: Exposed runlines and set_custom_exc
121 * ipapi.py: Exposed runlines and set_custom_exc
116
122
117 2006-02-07 Ville Vainio <vivainio@gmail.com>
123 2006-02-07 Ville Vainio <vivainio@gmail.com>
118
124
119 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
125 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
120 instead use "f(1 2)" as before.
126 instead use "f(1 2)" as before.
121
127
122 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
128 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
123
129
124 * IPython/demo.py (IPythonDemo): Add new classes to the demo
130 * IPython/demo.py (IPythonDemo): Add new classes to the demo
125 facilities, for demos processed by the IPython input filter
131 facilities, for demos processed by the IPython input filter
126 (IPythonDemo), and for running a script one-line-at-a-time as a
132 (IPythonDemo), and for running a script one-line-at-a-time as a
127 demo, both for pure Python (LineDemo) and for IPython-processed
133 demo, both for pure Python (LineDemo) and for IPython-processed
128 input (IPythonLineDemo). After a request by Dave Kohel, from the
134 input (IPythonLineDemo). After a request by Dave Kohel, from the
129 SAGE team.
135 SAGE team.
130 (Demo.edit): added and edit() method to the demo objects, to edit
136 (Demo.edit): added and edit() method to the demo objects, to edit
131 the in-memory copy of the last executed block.
137 the in-memory copy of the last executed block.
132
138
133 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
139 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
134 processing to %edit, %macro and %save. These commands can now be
140 processing to %edit, %macro and %save. These commands can now be
135 invoked on the unprocessed input as it was typed by the user
141 invoked on the unprocessed input as it was typed by the user
136 (without any prefilters applied). After requests by the SAGE team
142 (without any prefilters applied). After requests by the SAGE team
137 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
143 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
138
144
139 2006-02-01 Ville Vainio <vivainio@gmail.com>
145 2006-02-01 Ville Vainio <vivainio@gmail.com>
140
146
141 * setup.py, eggsetup.py: easy_install ipython==dev works
147 * setup.py, eggsetup.py: easy_install ipython==dev works
142 correctly now (on Linux)
148 correctly now (on Linux)
143
149
144 * ipy_user_conf,ipmaker: user config changes, removed spurious
150 * ipy_user_conf,ipmaker: user config changes, removed spurious
145 warnings
151 warnings
146
152
147 * iplib: if rc.banner is string, use it as is.
153 * iplib: if rc.banner is string, use it as is.
148
154
149 * Magic: %pycat accepts a string argument and pages it's contents.
155 * Magic: %pycat accepts a string argument and pages it's contents.
150
156
151
157
152 2006-01-30 Ville Vainio <vivainio@gmail.com>
158 2006-01-30 Ville Vainio <vivainio@gmail.com>
153
159
154 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
160 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
155 Now %store and bookmarks work through PickleShare, meaning that
161 Now %store and bookmarks work through PickleShare, meaning that
156 concurrent access is possible and all ipython sessions see the
162 concurrent access is possible and all ipython sessions see the
157 same database situation all the time, instead of snapshot of
163 same database situation all the time, instead of snapshot of
158 the situation when the session was started. Hence, %bookmark
164 the situation when the session was started. Hence, %bookmark
159 results are immediately accessible from othes sessions. The database
165 results are immediately accessible from othes sessions. The database
160 is also available for use by user extensions. See:
166 is also available for use by user extensions. See:
161 http://www.python.org/pypi/pickleshare
167 http://www.python.org/pypi/pickleshare
162
168
163 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
169 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
164
170
165 * aliases can now be %store'd
171 * aliases can now be %store'd
166
172
167 * path.py move to Extensions so that pickleshare does not need
173 * path.py move to Extensions so that pickleshare does not need
168 IPython-specific import. Extensions added to pythonpath right
174 IPython-specific import. Extensions added to pythonpath right
169 at __init__.
175 at __init__.
170
176
171 * iplib.py: ipalias deprecated/redundant; aliases are converted and
177 * iplib.py: ipalias deprecated/redundant; aliases are converted and
172 called with _ip.system and the pre-transformed command string.
178 called with _ip.system and the pre-transformed command string.
173
179
174 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
180 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
175
181
176 * IPython/iplib.py (interact): Fix that we were not catching
182 * IPython/iplib.py (interact): Fix that we were not catching
177 KeyboardInterrupt exceptions properly. I'm not quite sure why the
183 KeyboardInterrupt exceptions properly. I'm not quite sure why the
178 logic here had to change, but it's fixed now.
184 logic here had to change, but it's fixed now.
179
185
180 2006-01-29 Ville Vainio <vivainio@gmail.com>
186 2006-01-29 Ville Vainio <vivainio@gmail.com>
181
187
182 * iplib.py: Try to import pyreadline on Windows.
188 * iplib.py: Try to import pyreadline on Windows.
183
189
184 2006-01-27 Ville Vainio <vivainio@gmail.com>
190 2006-01-27 Ville Vainio <vivainio@gmail.com>
185
191
186 * iplib.py: Expose ipapi as _ip in builtin namespace.
192 * iplib.py: Expose ipapi as _ip in builtin namespace.
187 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
193 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
188 and ip_set_hook (-> _ip.set_hook) redundant. % and !
194 and ip_set_hook (-> _ip.set_hook) redundant. % and !
189 syntax now produce _ip.* variant of the commands.
195 syntax now produce _ip.* variant of the commands.
190
196
191 * "_ip.options().autoedit_syntax = 2" automatically throws
197 * "_ip.options().autoedit_syntax = 2" automatically throws
192 user to editor for syntax error correction without prompting.
198 user to editor for syntax error correction without prompting.
193
199
194 2006-01-27 Ville Vainio <vivainio@gmail.com>
200 2006-01-27 Ville Vainio <vivainio@gmail.com>
195
201
196 * ipmaker.py: Give "realistic" sys.argv for scripts (without
202 * ipmaker.py: Give "realistic" sys.argv for scripts (without
197 'ipython' at argv[0]) executed through command line.
203 'ipython' at argv[0]) executed through command line.
198 NOTE: this DEPRECATES calling ipython with multiple scripts
204 NOTE: this DEPRECATES calling ipython with multiple scripts
199 ("ipython a.py b.py c.py")
205 ("ipython a.py b.py c.py")
200
206
201 * iplib.py, hooks.py: Added configurable input prefilter,
207 * iplib.py, hooks.py: Added configurable input prefilter,
202 named 'input_prefilter'. See ext_rescapture.py for example
208 named 'input_prefilter'. See ext_rescapture.py for example
203 usage.
209 usage.
204
210
205 * ext_rescapture.py, Magic.py: Better system command output capture
211 * ext_rescapture.py, Magic.py: Better system command output capture
206 through 'var = !ls' (deprecates user-visible %sc). Same notation
212 through 'var = !ls' (deprecates user-visible %sc). Same notation
207 applies for magics, 'var = %alias' assigns alias list to var.
213 applies for magics, 'var = %alias' assigns alias list to var.
208
214
209 * ipapi.py: added meta() for accessing extension-usable data store.
215 * ipapi.py: added meta() for accessing extension-usable data store.
210
216
211 * iplib.py: added InteractiveShell.getapi(). New magics should be
217 * iplib.py: added InteractiveShell.getapi(). New magics should be
212 written doing self.getapi() instead of using the shell directly.
218 written doing self.getapi() instead of using the shell directly.
213
219
214 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
220 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
215 %store foo >> ~/myfoo.txt to store variables to files (in clean
221 %store foo >> ~/myfoo.txt to store variables to files (in clean
216 textual form, not a restorable pickle).
222 textual form, not a restorable pickle).
217
223
218 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
224 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
219
225
220 * usage.py, Magic.py: added %quickref
226 * usage.py, Magic.py: added %quickref
221
227
222 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
228 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
223
229
224 * GetoptErrors when invoking magics etc. with wrong args
230 * GetoptErrors when invoking magics etc. with wrong args
225 are now more helpful:
231 are now more helpful:
226 GetoptError: option -l not recognized (allowed: "qb" )
232 GetoptError: option -l not recognized (allowed: "qb" )
227
233
228 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
234 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
229
235
230 * IPython/demo.py (Demo.show): Flush stdout after each block, so
236 * IPython/demo.py (Demo.show): Flush stdout after each block, so
231 computationally intensive blocks don't appear to stall the demo.
237 computationally intensive blocks don't appear to stall the demo.
232
238
233 2006-01-24 Ville Vainio <vivainio@gmail.com>
239 2006-01-24 Ville Vainio <vivainio@gmail.com>
234
240
235 * iplib.py, hooks.py: 'result_display' hook can return a non-None
241 * iplib.py, hooks.py: 'result_display' hook can return a non-None
236 value to manipulate resulting history entry.
242 value to manipulate resulting history entry.
237
243
238 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
244 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
239 to instance methods of IPApi class, to make extending an embedded
245 to instance methods of IPApi class, to make extending an embedded
240 IPython feasible. See ext_rehashdir.py for example usage.
246 IPython feasible. See ext_rehashdir.py for example usage.
241
247
242 * Merged 1071-1076 from banches/0.7.1
248 * Merged 1071-1076 from banches/0.7.1
243
249
244
250
245 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
251 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
246
252
247 * tools/release (daystamp): Fix build tools to use the new
253 * tools/release (daystamp): Fix build tools to use the new
248 eggsetup.py script to build lightweight eggs.
254 eggsetup.py script to build lightweight eggs.
249
255
250 * Applied changesets 1062 and 1064 before 0.7.1 release.
256 * Applied changesets 1062 and 1064 before 0.7.1 release.
251
257
252 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
258 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
253 see the raw input history (without conversions like %ls ->
259 see the raw input history (without conversions like %ls ->
254 ipmagic("ls")). After a request from W. Stein, SAGE
260 ipmagic("ls")). After a request from W. Stein, SAGE
255 (http://modular.ucsd.edu/sage) developer. This information is
261 (http://modular.ucsd.edu/sage) developer. This information is
256 stored in the input_hist_raw attribute of the IPython instance, so
262 stored in the input_hist_raw attribute of the IPython instance, so
257 developers can access it if needed (it's an InputList instance).
263 developers can access it if needed (it's an InputList instance).
258
264
259 * Versionstring = 0.7.2.svn
265 * Versionstring = 0.7.2.svn
260
266
261 * eggsetup.py: A separate script for constructing eggs, creates
267 * eggsetup.py: A separate script for constructing eggs, creates
262 proper launch scripts even on Windows (an .exe file in
268 proper launch scripts even on Windows (an .exe file in
263 \python24\scripts).
269 \python24\scripts).
264
270
265 * ipapi.py: launch_new_instance, launch entry point needed for the
271 * ipapi.py: launch_new_instance, launch entry point needed for the
266 egg.
272 egg.
267
273
268 2006-01-23 Ville Vainio <vivainio@gmail.com>
274 2006-01-23 Ville Vainio <vivainio@gmail.com>
269
275
270 * Added %cpaste magic for pasting python code
276 * Added %cpaste magic for pasting python code
271
277
272 2006-01-22 Ville Vainio <vivainio@gmail.com>
278 2006-01-22 Ville Vainio <vivainio@gmail.com>
273
279
274 * Merge from branches/0.7.1 into trunk, revs 1052-1057
280 * Merge from branches/0.7.1 into trunk, revs 1052-1057
275
281
276 * Versionstring = 0.7.2.svn
282 * Versionstring = 0.7.2.svn
277
283
278 * eggsetup.py: A separate script for constructing eggs, creates
284 * eggsetup.py: A separate script for constructing eggs, creates
279 proper launch scripts even on Windows (an .exe file in
285 proper launch scripts even on Windows (an .exe file in
280 \python24\scripts).
286 \python24\scripts).
281
287
282 * ipapi.py: launch_new_instance, launch entry point needed for the
288 * ipapi.py: launch_new_instance, launch entry point needed for the
283 egg.
289 egg.
284
290
285 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
291 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
286
292
287 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
293 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
288 %pfile foo would print the file for foo even if it was a binary.
294 %pfile foo would print the file for foo even if it was a binary.
289 Now, extensions '.so' and '.dll' are skipped.
295 Now, extensions '.so' and '.dll' are skipped.
290
296
291 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
297 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
292 bug, where macros would fail in all threaded modes. I'm not 100%
298 bug, where macros would fail in all threaded modes. I'm not 100%
293 sure, so I'm going to put out an rc instead of making a release
299 sure, so I'm going to put out an rc instead of making a release
294 today, and wait for feedback for at least a few days.
300 today, and wait for feedback for at least a few days.
295
301
296 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
302 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
297 it...) the handling of pasting external code with autoindent on.
303 it...) the handling of pasting external code with autoindent on.
298 To get out of a multiline input, the rule will appear for most
304 To get out of a multiline input, the rule will appear for most
299 users unchanged: two blank lines or change the indent level
305 users unchanged: two blank lines or change the indent level
300 proposed by IPython. But there is a twist now: you can
306 proposed by IPython. But there is a twist now: you can
301 add/subtract only *one or two spaces*. If you add/subtract three
307 add/subtract only *one or two spaces*. If you add/subtract three
302 or more (unless you completely delete the line), IPython will
308 or more (unless you completely delete the line), IPython will
303 accept that line, and you'll need to enter a second one of pure
309 accept that line, and you'll need to enter a second one of pure
304 whitespace. I know it sounds complicated, but I can't find a
310 whitespace. I know it sounds complicated, but I can't find a
305 different solution that covers all the cases, with the right
311 different solution that covers all the cases, with the right
306 heuristics. Hopefully in actual use, nobody will really notice
312 heuristics. Hopefully in actual use, nobody will really notice
307 all these strange rules and things will 'just work'.
313 all these strange rules and things will 'just work'.
308
314
309 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
315 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
310
316
311 * IPython/iplib.py (interact): catch exceptions which can be
317 * IPython/iplib.py (interact): catch exceptions which can be
312 triggered asynchronously by signal handlers. Thanks to an
318 triggered asynchronously by signal handlers. Thanks to an
313 automatic crash report, submitted by Colin Kingsley
319 automatic crash report, submitted by Colin Kingsley
314 <tercel-AT-gentoo.org>.
320 <tercel-AT-gentoo.org>.
315
321
316 2006-01-20 Ville Vainio <vivainio@gmail.com>
322 2006-01-20 Ville Vainio <vivainio@gmail.com>
317
323
318 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
324 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
319 (%rehashdir, very useful, try it out) of how to extend ipython
325 (%rehashdir, very useful, try it out) of how to extend ipython
320 with new magics. Also added Extensions dir to pythonpath to make
326 with new magics. Also added Extensions dir to pythonpath to make
321 importing extensions easy.
327 importing extensions easy.
322
328
323 * %store now complains when trying to store interactively declared
329 * %store now complains when trying to store interactively declared
324 classes / instances of those classes.
330 classes / instances of those classes.
325
331
326 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
332 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
327 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
333 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
328 if they exist, and ipy_user_conf.py with some defaults is created for
334 if they exist, and ipy_user_conf.py with some defaults is created for
329 the user.
335 the user.
330
336
331 * Startup rehashing done by the config file, not InterpreterExec.
337 * Startup rehashing done by the config file, not InterpreterExec.
332 This means system commands are available even without selecting the
338 This means system commands are available even without selecting the
333 pysh profile. It's the sensible default after all.
339 pysh profile. It's the sensible default after all.
334
340
335 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
341 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
336
342
337 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
343 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
338 multiline code with autoindent on working. But I am really not
344 multiline code with autoindent on working. But I am really not
339 sure, so this needs more testing. Will commit a debug-enabled
345 sure, so this needs more testing. Will commit a debug-enabled
340 version for now, while I test it some more, so that Ville and
346 version for now, while I test it some more, so that Ville and
341 others may also catch any problems. Also made
347 others may also catch any problems. Also made
342 self.indent_current_str() a method, to ensure that there's no
348 self.indent_current_str() a method, to ensure that there's no
343 chance of the indent space count and the corresponding string
349 chance of the indent space count and the corresponding string
344 falling out of sync. All code needing the string should just call
350 falling out of sync. All code needing the string should just call
345 the method.
351 the method.
346
352
347 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
353 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
348
354
349 * IPython/Magic.py (magic_edit): fix check for when users don't
355 * IPython/Magic.py (magic_edit): fix check for when users don't
350 save their output files, the try/except was in the wrong section.
356 save their output files, the try/except was in the wrong section.
351
357
352 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
358 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
353
359
354 * IPython/Magic.py (magic_run): fix __file__ global missing from
360 * IPython/Magic.py (magic_run): fix __file__ global missing from
355 script's namespace when executed via %run. After a report by
361 script's namespace when executed via %run. After a report by
356 Vivian.
362 Vivian.
357
363
358 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
364 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
359 when using python 2.4. The parent constructor changed in 2.4, and
365 when using python 2.4. The parent constructor changed in 2.4, and
360 we need to track it directly (we can't call it, as it messes up
366 we need to track it directly (we can't call it, as it messes up
361 readline and tab-completion inside our pdb would stop working).
367 readline and tab-completion inside our pdb would stop working).
362 After a bug report by R. Bernstein <rocky-AT-panix.com>.
368 After a bug report by R. Bernstein <rocky-AT-panix.com>.
363
369
364 2006-01-16 Ville Vainio <vivainio@gmail.com>
370 2006-01-16 Ville Vainio <vivainio@gmail.com>
365
371
366 * Ipython/magic.py:Reverted back to old %edit functionality
372 * Ipython/magic.py:Reverted back to old %edit functionality
367 that returns file contents on exit.
373 that returns file contents on exit.
368
374
369 * IPython/path.py: Added Jason Orendorff's "path" module to
375 * IPython/path.py: Added Jason Orendorff's "path" module to
370 IPython tree, http://www.jorendorff.com/articles/python/path/.
376 IPython tree, http://www.jorendorff.com/articles/python/path/.
371 You can get path objects conveniently through %sc, and !!, e.g.:
377 You can get path objects conveniently through %sc, and !!, e.g.:
372 sc files=ls
378 sc files=ls
373 for p in files.paths: # or files.p
379 for p in files.paths: # or files.p
374 print p,p.mtime
380 print p,p.mtime
375
381
376 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
382 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
377 now work again without considering the exclusion regexp -
383 now work again without considering the exclusion regexp -
378 hence, things like ',foo my/path' turn to 'foo("my/path")'
384 hence, things like ',foo my/path' turn to 'foo("my/path")'
379 instead of syntax error.
385 instead of syntax error.
380
386
381
387
382 2006-01-14 Ville Vainio <vivainio@gmail.com>
388 2006-01-14 Ville Vainio <vivainio@gmail.com>
383
389
384 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
390 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
385 ipapi decorators for python 2.4 users, options() provides access to rc
391 ipapi decorators for python 2.4 users, options() provides access to rc
386 data.
392 data.
387
393
388 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
394 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
389 as path separators (even on Linux ;-). Space character after
395 as path separators (even on Linux ;-). Space character after
390 backslash (as yielded by tab completer) is still space;
396 backslash (as yielded by tab completer) is still space;
391 "%cd long\ name" works as expected.
397 "%cd long\ name" works as expected.
392
398
393 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
399 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
394 as "chain of command", with priority. API stays the same,
400 as "chain of command", with priority. API stays the same,
395 TryNext exception raised by a hook function signals that
401 TryNext exception raised by a hook function signals that
396 current hook failed and next hook should try handling it, as
402 current hook failed and next hook should try handling it, as
397 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
403 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
398 requested configurable display hook, which is now implemented.
404 requested configurable display hook, which is now implemented.
399
405
400 2006-01-13 Ville Vainio <vivainio@gmail.com>
406 2006-01-13 Ville Vainio <vivainio@gmail.com>
401
407
402 * IPython/platutils*.py: platform specific utility functions,
408 * IPython/platutils*.py: platform specific utility functions,
403 so far only set_term_title is implemented (change terminal
409 so far only set_term_title is implemented (change terminal
404 label in windowing systems). %cd now changes the title to
410 label in windowing systems). %cd now changes the title to
405 current dir.
411 current dir.
406
412
407 * IPython/Release.py: Added myself to "authors" list,
413 * IPython/Release.py: Added myself to "authors" list,
408 had to create new files.
414 had to create new files.
409
415
410 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
416 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
411 shell escape; not a known bug but had potential to be one in the
417 shell escape; not a known bug but had potential to be one in the
412 future.
418 future.
413
419
414 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
420 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
415 extension API for IPython! See the module for usage example. Fix
421 extension API for IPython! See the module for usage example. Fix
416 OInspect for docstring-less magic functions.
422 OInspect for docstring-less magic functions.
417
423
418
424
419 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
425 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
420
426
421 * IPython/iplib.py (raw_input): temporarily deactivate all
427 * IPython/iplib.py (raw_input): temporarily deactivate all
422 attempts at allowing pasting of code with autoindent on. It
428 attempts at allowing pasting of code with autoindent on. It
423 introduced bugs (reported by Prabhu) and I can't seem to find a
429 introduced bugs (reported by Prabhu) and I can't seem to find a
424 robust combination which works in all cases. Will have to revisit
430 robust combination which works in all cases. Will have to revisit
425 later.
431 later.
426
432
427 * IPython/genutils.py: remove isspace() function. We've dropped
433 * IPython/genutils.py: remove isspace() function. We've dropped
428 2.2 compatibility, so it's OK to use the string method.
434 2.2 compatibility, so it's OK to use the string method.
429
435
430 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
436 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
431
437
432 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
438 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
433 matching what NOT to autocall on, to include all python binary
439 matching what NOT to autocall on, to include all python binary
434 operators (including things like 'and', 'or', 'is' and 'in').
440 operators (including things like 'and', 'or', 'is' and 'in').
435 Prompted by a bug report on 'foo & bar', but I realized we had
441 Prompted by a bug report on 'foo & bar', but I realized we had
436 many more potential bug cases with other operators. The regexp is
442 many more potential bug cases with other operators. The regexp is
437 self.re_exclude_auto, it's fairly commented.
443 self.re_exclude_auto, it's fairly commented.
438
444
439 2006-01-12 Ville Vainio <vivainio@gmail.com>
445 2006-01-12 Ville Vainio <vivainio@gmail.com>
440
446
441 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
447 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
442 Prettified and hardened string/backslash quoting with ipsystem(),
448 Prettified and hardened string/backslash quoting with ipsystem(),
443 ipalias() and ipmagic(). Now even \ characters are passed to
449 ipalias() and ipmagic(). Now even \ characters are passed to
444 %magics, !shell escapes and aliases exactly as they are in the
450 %magics, !shell escapes and aliases exactly as they are in the
445 ipython command line. Should improve backslash experience,
451 ipython command line. Should improve backslash experience,
446 particularly in Windows (path delimiter for some commands that
452 particularly in Windows (path delimiter for some commands that
447 won't understand '/'), but Unix benefits as well (regexps). %cd
453 won't understand '/'), but Unix benefits as well (regexps). %cd
448 magic still doesn't support backslash path delimiters, though. Also
454 magic still doesn't support backslash path delimiters, though. Also
449 deleted all pretense of supporting multiline command strings in
455 deleted all pretense of supporting multiline command strings in
450 !system or %magic commands. Thanks to Jerry McRae for suggestions.
456 !system or %magic commands. Thanks to Jerry McRae for suggestions.
451
457
452 * doc/build_doc_instructions.txt added. Documentation on how to
458 * doc/build_doc_instructions.txt added. Documentation on how to
453 use doc/update_manual.py, added yesterday. Both files contributed
459 use doc/update_manual.py, added yesterday. Both files contributed
454 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
460 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
455 doc/*.sh for deprecation at a later date.
461 doc/*.sh for deprecation at a later date.
456
462
457 * /ipython.py Added ipython.py to root directory for
463 * /ipython.py Added ipython.py to root directory for
458 zero-installation (tar xzvf ipython.tgz; cd ipython; python
464 zero-installation (tar xzvf ipython.tgz; cd ipython; python
459 ipython.py) and development convenience (no need to kee doing
465 ipython.py) and development convenience (no need to kee doing
460 "setup.py install" between changes).
466 "setup.py install" between changes).
461
467
462 * Made ! and !! shell escapes work (again) in multiline expressions:
468 * Made ! and !! shell escapes work (again) in multiline expressions:
463 if 1:
469 if 1:
464 !ls
470 !ls
465 !!ls
471 !!ls
466
472
467 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
473 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
468
474
469 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
475 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
470 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
476 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
471 module in case-insensitive installation. Was causing crashes
477 module in case-insensitive installation. Was causing crashes
472 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
478 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
473
479
474 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
480 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
475 <marienz-AT-gentoo.org>, closes
481 <marienz-AT-gentoo.org>, closes
476 http://www.scipy.net/roundup/ipython/issue51.
482 http://www.scipy.net/roundup/ipython/issue51.
477
483
478 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
484 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
479
485
480 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
486 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
481 problem of excessive CPU usage under *nix and keyboard lag under
487 problem of excessive CPU usage under *nix and keyboard lag under
482 win32.
488 win32.
483
489
484 2006-01-10 *** Released version 0.7.0
490 2006-01-10 *** Released version 0.7.0
485
491
486 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
492 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
487
493
488 * IPython/Release.py (revision): tag version number to 0.7.0,
494 * IPython/Release.py (revision): tag version number to 0.7.0,
489 ready for release.
495 ready for release.
490
496
491 * IPython/Magic.py (magic_edit): Add print statement to %edit so
497 * IPython/Magic.py (magic_edit): Add print statement to %edit so
492 it informs the user of the name of the temp. file used. This can
498 it informs the user of the name of the temp. file used. This can
493 help if you decide later to reuse that same file, so you know
499 help if you decide later to reuse that same file, so you know
494 where to copy the info from.
500 where to copy the info from.
495
501
496 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
502 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
497
503
498 * setup_bdist_egg.py: little script to build an egg. Added
504 * setup_bdist_egg.py: little script to build an egg. Added
499 support in the release tools as well.
505 support in the release tools as well.
500
506
501 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
507 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
502
508
503 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
509 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
504 version selection (new -wxversion command line and ipythonrc
510 version selection (new -wxversion command line and ipythonrc
505 parameter). Patch contributed by Arnd Baecker
511 parameter). Patch contributed by Arnd Baecker
506 <arnd.baecker-AT-web.de>.
512 <arnd.baecker-AT-web.de>.
507
513
508 * IPython/iplib.py (embed_mainloop): fix tab-completion in
514 * IPython/iplib.py (embed_mainloop): fix tab-completion in
509 embedded instances, for variables defined at the interactive
515 embedded instances, for variables defined at the interactive
510 prompt of the embedded ipython. Reported by Arnd.
516 prompt of the embedded ipython. Reported by Arnd.
511
517
512 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
518 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
513 it can be used as a (stateful) toggle, or with a direct parameter.
519 it can be used as a (stateful) toggle, or with a direct parameter.
514
520
515 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
521 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
516 could be triggered in certain cases and cause the traceback
522 could be triggered in certain cases and cause the traceback
517 printer not to work.
523 printer not to work.
518
524
519 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
525 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
520
526
521 * IPython/iplib.py (_should_recompile): Small fix, closes
527 * IPython/iplib.py (_should_recompile): Small fix, closes
522 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
528 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
523
529
524 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
530 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
525
531
526 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
532 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
527 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
533 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
528 Moad for help with tracking it down.
534 Moad for help with tracking it down.
529
535
530 * IPython/iplib.py (handle_auto): fix autocall handling for
536 * IPython/iplib.py (handle_auto): fix autocall handling for
531 objects which support BOTH __getitem__ and __call__ (so that f [x]
537 objects which support BOTH __getitem__ and __call__ (so that f [x]
532 is left alone, instead of becoming f([x]) automatically).
538 is left alone, instead of becoming f([x]) automatically).
533
539
534 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
540 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
535 Ville's patch.
541 Ville's patch.
536
542
537 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
543 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
538
544
539 * IPython/iplib.py (handle_auto): changed autocall semantics to
545 * IPython/iplib.py (handle_auto): changed autocall semantics to
540 include 'smart' mode, where the autocall transformation is NOT
546 include 'smart' mode, where the autocall transformation is NOT
541 applied if there are no arguments on the line. This allows you to
547 applied if there are no arguments on the line. This allows you to
542 just type 'foo' if foo is a callable to see its internal form,
548 just type 'foo' if foo is a callable to see its internal form,
543 instead of having it called with no arguments (typically a
549 instead of having it called with no arguments (typically a
544 mistake). The old 'full' autocall still exists: for that, you
550 mistake). The old 'full' autocall still exists: for that, you
545 need to set the 'autocall' parameter to 2 in your ipythonrc file.
551 need to set the 'autocall' parameter to 2 in your ipythonrc file.
546
552
547 * IPython/completer.py (Completer.attr_matches): add
553 * IPython/completer.py (Completer.attr_matches): add
548 tab-completion support for Enthoughts' traits. After a report by
554 tab-completion support for Enthoughts' traits. After a report by
549 Arnd and a patch by Prabhu.
555 Arnd and a patch by Prabhu.
550
556
551 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
557 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
552
558
553 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
559 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
554 Schmolck's patch to fix inspect.getinnerframes().
560 Schmolck's patch to fix inspect.getinnerframes().
555
561
556 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
562 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
557 for embedded instances, regarding handling of namespaces and items
563 for embedded instances, regarding handling of namespaces and items
558 added to the __builtin__ one. Multiple embedded instances and
564 added to the __builtin__ one. Multiple embedded instances and
559 recursive embeddings should work better now (though I'm not sure
565 recursive embeddings should work better now (though I'm not sure
560 I've got all the corner cases fixed, that code is a bit of a brain
566 I've got all the corner cases fixed, that code is a bit of a brain
561 twister).
567 twister).
562
568
563 * IPython/Magic.py (magic_edit): added support to edit in-memory
569 * IPython/Magic.py (magic_edit): added support to edit in-memory
564 macros (automatically creates the necessary temp files). %edit
570 macros (automatically creates the necessary temp files). %edit
565 also doesn't return the file contents anymore, it's just noise.
571 also doesn't return the file contents anymore, it's just noise.
566
572
567 * IPython/completer.py (Completer.attr_matches): revert change to
573 * IPython/completer.py (Completer.attr_matches): revert change to
568 complete only on attributes listed in __all__. I realized it
574 complete only on attributes listed in __all__. I realized it
569 cripples the tab-completion system as a tool for exploring the
575 cripples the tab-completion system as a tool for exploring the
570 internals of unknown libraries (it renders any non-__all__
576 internals of unknown libraries (it renders any non-__all__
571 attribute off-limits). I got bit by this when trying to see
577 attribute off-limits). I got bit by this when trying to see
572 something inside the dis module.
578 something inside the dis module.
573
579
574 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
580 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
575
581
576 * IPython/iplib.py (InteractiveShell.__init__): add .meta
582 * IPython/iplib.py (InteractiveShell.__init__): add .meta
577 namespace for users and extension writers to hold data in. This
583 namespace for users and extension writers to hold data in. This
578 follows the discussion in
584 follows the discussion in
579 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
585 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
580
586
581 * IPython/completer.py (IPCompleter.complete): small patch to help
587 * IPython/completer.py (IPCompleter.complete): small patch to help
582 tab-completion under Emacs, after a suggestion by John Barnard
588 tab-completion under Emacs, after a suggestion by John Barnard
583 <barnarj-AT-ccf.org>.
589 <barnarj-AT-ccf.org>.
584
590
585 * IPython/Magic.py (Magic.extract_input_slices): added support for
591 * IPython/Magic.py (Magic.extract_input_slices): added support for
586 the slice notation in magics to use N-M to represent numbers N...M
592 the slice notation in magics to use N-M to represent numbers N...M
587 (closed endpoints). This is used by %macro and %save.
593 (closed endpoints). This is used by %macro and %save.
588
594
589 * IPython/completer.py (Completer.attr_matches): for modules which
595 * IPython/completer.py (Completer.attr_matches): for modules which
590 define __all__, complete only on those. After a patch by Jeffrey
596 define __all__, complete only on those. After a patch by Jeffrey
591 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
597 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
592 speed up this routine.
598 speed up this routine.
593
599
594 * IPython/Logger.py (Logger.log): fix a history handling bug. I
600 * IPython/Logger.py (Logger.log): fix a history handling bug. I
595 don't know if this is the end of it, but the behavior now is
601 don't know if this is the end of it, but the behavior now is
596 certainly much more correct. Note that coupled with macros,
602 certainly much more correct. Note that coupled with macros,
597 slightly surprising (at first) behavior may occur: a macro will in
603 slightly surprising (at first) behavior may occur: a macro will in
598 general expand to multiple lines of input, so upon exiting, the
604 general expand to multiple lines of input, so upon exiting, the
599 in/out counters will both be bumped by the corresponding amount
605 in/out counters will both be bumped by the corresponding amount
600 (as if the macro's contents had been typed interactively). Typing
606 (as if the macro's contents had been typed interactively). Typing
601 %hist will reveal the intermediate (silently processed) lines.
607 %hist will reveal the intermediate (silently processed) lines.
602
608
603 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
609 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
604 pickle to fail (%run was overwriting __main__ and not restoring
610 pickle to fail (%run was overwriting __main__ and not restoring
605 it, but pickle relies on __main__ to operate).
611 it, but pickle relies on __main__ to operate).
606
612
607 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
613 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
608 using properties, but forgot to make the main InteractiveShell
614 using properties, but forgot to make the main InteractiveShell
609 class a new-style class. Properties fail silently, and
615 class a new-style class. Properties fail silently, and
610 misteriously, with old-style class (getters work, but
616 misteriously, with old-style class (getters work, but
611 setters don't do anything).
617 setters don't do anything).
612
618
613 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
619 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
614
620
615 * IPython/Magic.py (magic_history): fix history reporting bug (I
621 * IPython/Magic.py (magic_history): fix history reporting bug (I
616 know some nasties are still there, I just can't seem to find a
622 know some nasties are still there, I just can't seem to find a
617 reproducible test case to track them down; the input history is
623 reproducible test case to track them down; the input history is
618 falling out of sync...)
624 falling out of sync...)
619
625
620 * IPython/iplib.py (handle_shell_escape): fix bug where both
626 * IPython/iplib.py (handle_shell_escape): fix bug where both
621 aliases and system accesses where broken for indented code (such
627 aliases and system accesses where broken for indented code (such
622 as loops).
628 as loops).
623
629
624 * IPython/genutils.py (shell): fix small but critical bug for
630 * IPython/genutils.py (shell): fix small but critical bug for
625 win32 system access.
631 win32 system access.
626
632
627 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
633 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
628
634
629 * IPython/iplib.py (showtraceback): remove use of the
635 * IPython/iplib.py (showtraceback): remove use of the
630 sys.last_{type/value/traceback} structures, which are non
636 sys.last_{type/value/traceback} structures, which are non
631 thread-safe.
637 thread-safe.
632 (_prefilter): change control flow to ensure that we NEVER
638 (_prefilter): change control flow to ensure that we NEVER
633 introspect objects when autocall is off. This will guarantee that
639 introspect objects when autocall is off. This will guarantee that
634 having an input line of the form 'x.y', where access to attribute
640 having an input line of the form 'x.y', where access to attribute
635 'y' has side effects, doesn't trigger the side effect TWICE. It
641 'y' has side effects, doesn't trigger the side effect TWICE. It
636 is important to note that, with autocall on, these side effects
642 is important to note that, with autocall on, these side effects
637 can still happen.
643 can still happen.
638 (ipsystem): new builtin, to complete the ip{magic/alias/system}
644 (ipsystem): new builtin, to complete the ip{magic/alias/system}
639 trio. IPython offers these three kinds of special calls which are
645 trio. IPython offers these three kinds of special calls which are
640 not python code, and it's a good thing to have their call method
646 not python code, and it's a good thing to have their call method
641 be accessible as pure python functions (not just special syntax at
647 be accessible as pure python functions (not just special syntax at
642 the command line). It gives us a better internal implementation
648 the command line). It gives us a better internal implementation
643 structure, as well as exposing these for user scripting more
649 structure, as well as exposing these for user scripting more
644 cleanly.
650 cleanly.
645
651
646 * IPython/macro.py (Macro.__init__): moved macros to a standalone
652 * IPython/macro.py (Macro.__init__): moved macros to a standalone
647 file. Now that they'll be more likely to be used with the
653 file. Now that they'll be more likely to be used with the
648 persistance system (%store), I want to make sure their module path
654 persistance system (%store), I want to make sure their module path
649 doesn't change in the future, so that we don't break things for
655 doesn't change in the future, so that we don't break things for
650 users' persisted data.
656 users' persisted data.
651
657
652 * IPython/iplib.py (autoindent_update): move indentation
658 * IPython/iplib.py (autoindent_update): move indentation
653 management into the _text_ processing loop, not the keyboard
659 management into the _text_ processing loop, not the keyboard
654 interactive one. This is necessary to correctly process non-typed
660 interactive one. This is necessary to correctly process non-typed
655 multiline input (such as macros).
661 multiline input (such as macros).
656
662
657 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
663 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
658 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
664 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
659 which was producing problems in the resulting manual.
665 which was producing problems in the resulting manual.
660 (magic_whos): improve reporting of instances (show their class,
666 (magic_whos): improve reporting of instances (show their class,
661 instead of simply printing 'instance' which isn't terribly
667 instead of simply printing 'instance' which isn't terribly
662 informative).
668 informative).
663
669
664 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
670 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
665 (minor mods) to support network shares under win32.
671 (minor mods) to support network shares under win32.
666
672
667 * IPython/winconsole.py (get_console_size): add new winconsole
673 * IPython/winconsole.py (get_console_size): add new winconsole
668 module and fixes to page_dumb() to improve its behavior under
674 module and fixes to page_dumb() to improve its behavior under
669 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
675 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
670
676
671 * IPython/Magic.py (Macro): simplified Macro class to just
677 * IPython/Magic.py (Macro): simplified Macro class to just
672 subclass list. We've had only 2.2 compatibility for a very long
678 subclass list. We've had only 2.2 compatibility for a very long
673 time, yet I was still avoiding subclassing the builtin types. No
679 time, yet I was still avoiding subclassing the builtin types. No
674 more (I'm also starting to use properties, though I won't shift to
680 more (I'm also starting to use properties, though I won't shift to
675 2.3-specific features quite yet).
681 2.3-specific features quite yet).
676 (magic_store): added Ville's patch for lightweight variable
682 (magic_store): added Ville's patch for lightweight variable
677 persistence, after a request on the user list by Matt Wilkie
683 persistence, after a request on the user list by Matt Wilkie
678 <maphew-AT-gmail.com>. The new %store magic's docstring has full
684 <maphew-AT-gmail.com>. The new %store magic's docstring has full
679 details.
685 details.
680
686
681 * IPython/iplib.py (InteractiveShell.post_config_initialization):
687 * IPython/iplib.py (InteractiveShell.post_config_initialization):
682 changed the default logfile name from 'ipython.log' to
688 changed the default logfile name from 'ipython.log' to
683 'ipython_log.py'. These logs are real python files, and now that
689 'ipython_log.py'. These logs are real python files, and now that
684 we have much better multiline support, people are more likely to
690 we have much better multiline support, people are more likely to
685 want to use them as such. Might as well name them correctly.
691 want to use them as such. Might as well name them correctly.
686
692
687 * IPython/Magic.py: substantial cleanup. While we can't stop
693 * IPython/Magic.py: substantial cleanup. While we can't stop
688 using magics as mixins, due to the existing customizations 'out
694 using magics as mixins, due to the existing customizations 'out
689 there' which rely on the mixin naming conventions, at least I
695 there' which rely on the mixin naming conventions, at least I
690 cleaned out all cross-class name usage. So once we are OK with
696 cleaned out all cross-class name usage. So once we are OK with
691 breaking compatibility, the two systems can be separated.
697 breaking compatibility, the two systems can be separated.
692
698
693 * IPython/Logger.py: major cleanup. This one is NOT a mixin
699 * IPython/Logger.py: major cleanup. This one is NOT a mixin
694 anymore, and the class is a fair bit less hideous as well. New
700 anymore, and the class is a fair bit less hideous as well. New
695 features were also introduced: timestamping of input, and logging
701 features were also introduced: timestamping of input, and logging
696 of output results. These are user-visible with the -t and -o
702 of output results. These are user-visible with the -t and -o
697 options to %logstart. Closes
703 options to %logstart. Closes
698 http://www.scipy.net/roundup/ipython/issue11 and a request by
704 http://www.scipy.net/roundup/ipython/issue11 and a request by
699 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
705 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
700
706
701 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
707 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
702
708
703 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
709 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
704 better hadnle backslashes in paths. See the thread 'More Windows
710 better hadnle backslashes in paths. See the thread 'More Windows
705 questions part 2 - \/ characters revisited' on the iypthon user
711 questions part 2 - \/ characters revisited' on the iypthon user
706 list:
712 list:
707 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
713 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
708
714
709 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
715 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
710
716
711 (InteractiveShell.__init__): change threaded shells to not use the
717 (InteractiveShell.__init__): change threaded shells to not use the
712 ipython crash handler. This was causing more problems than not,
718 ipython crash handler. This was causing more problems than not,
713 as exceptions in the main thread (GUI code, typically) would
719 as exceptions in the main thread (GUI code, typically) would
714 always show up as a 'crash', when they really weren't.
720 always show up as a 'crash', when they really weren't.
715
721
716 The colors and exception mode commands (%colors/%xmode) have been
722 The colors and exception mode commands (%colors/%xmode) have been
717 synchronized to also take this into account, so users can get
723 synchronized to also take this into account, so users can get
718 verbose exceptions for their threaded code as well. I also added
724 verbose exceptions for their threaded code as well. I also added
719 support for activating pdb inside this exception handler as well,
725 support for activating pdb inside this exception handler as well,
720 so now GUI authors can use IPython's enhanced pdb at runtime.
726 so now GUI authors can use IPython's enhanced pdb at runtime.
721
727
722 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
728 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
723 true by default, and add it to the shipped ipythonrc file. Since
729 true by default, and add it to the shipped ipythonrc file. Since
724 this asks the user before proceeding, I think it's OK to make it
730 this asks the user before proceeding, I think it's OK to make it
725 true by default.
731 true by default.
726
732
727 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
733 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
728 of the previous special-casing of input in the eval loop. I think
734 of the previous special-casing of input in the eval loop. I think
729 this is cleaner, as they really are commands and shouldn't have
735 this is cleaner, as they really are commands and shouldn't have
730 a special role in the middle of the core code.
736 a special role in the middle of the core code.
731
737
732 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
738 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
733
739
734 * IPython/iplib.py (edit_syntax_error): added support for
740 * IPython/iplib.py (edit_syntax_error): added support for
735 automatically reopening the editor if the file had a syntax error
741 automatically reopening the editor if the file had a syntax error
736 in it. Thanks to scottt who provided the patch at:
742 in it. Thanks to scottt who provided the patch at:
737 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
743 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
738 version committed).
744 version committed).
739
745
740 * IPython/iplib.py (handle_normal): add suport for multi-line
746 * IPython/iplib.py (handle_normal): add suport for multi-line
741 input with emtpy lines. This fixes
747 input with emtpy lines. This fixes
742 http://www.scipy.net/roundup/ipython/issue43 and a similar
748 http://www.scipy.net/roundup/ipython/issue43 and a similar
743 discussion on the user list.
749 discussion on the user list.
744
750
745 WARNING: a behavior change is necessarily introduced to support
751 WARNING: a behavior change is necessarily introduced to support
746 blank lines: now a single blank line with whitespace does NOT
752 blank lines: now a single blank line with whitespace does NOT
747 break the input loop, which means that when autoindent is on, by
753 break the input loop, which means that when autoindent is on, by
748 default hitting return on the next (indented) line does NOT exit.
754 default hitting return on the next (indented) line does NOT exit.
749
755
750 Instead, to exit a multiline input you can either have:
756 Instead, to exit a multiline input you can either have:
751
757
752 - TWO whitespace lines (just hit return again), or
758 - TWO whitespace lines (just hit return again), or
753 - a single whitespace line of a different length than provided
759 - a single whitespace line of a different length than provided
754 by the autoindent (add or remove a space).
760 by the autoindent (add or remove a space).
755
761
756 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
762 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
757 module to better organize all readline-related functionality.
763 module to better organize all readline-related functionality.
758 I've deleted FlexCompleter and put all completion clases here.
764 I've deleted FlexCompleter and put all completion clases here.
759
765
760 * IPython/iplib.py (raw_input): improve indentation management.
766 * IPython/iplib.py (raw_input): improve indentation management.
761 It is now possible to paste indented code with autoindent on, and
767 It is now possible to paste indented code with autoindent on, and
762 the code is interpreted correctly (though it still looks bad on
768 the code is interpreted correctly (though it still looks bad on
763 screen, due to the line-oriented nature of ipython).
769 screen, due to the line-oriented nature of ipython).
764 (MagicCompleter.complete): change behavior so that a TAB key on an
770 (MagicCompleter.complete): change behavior so that a TAB key on an
765 otherwise empty line actually inserts a tab, instead of completing
771 otherwise empty line actually inserts a tab, instead of completing
766 on the entire global namespace. This makes it easier to use the
772 on the entire global namespace. This makes it easier to use the
767 TAB key for indentation. After a request by Hans Meine
773 TAB key for indentation. After a request by Hans Meine
768 <hans_meine-AT-gmx.net>
774 <hans_meine-AT-gmx.net>
769 (_prefilter): add support so that typing plain 'exit' or 'quit'
775 (_prefilter): add support so that typing plain 'exit' or 'quit'
770 does a sensible thing. Originally I tried to deviate as little as
776 does a sensible thing. Originally I tried to deviate as little as
771 possible from the default python behavior, but even that one may
777 possible from the default python behavior, but even that one may
772 change in this direction (thread on python-dev to that effect).
778 change in this direction (thread on python-dev to that effect).
773 Regardless, ipython should do the right thing even if CPython's
779 Regardless, ipython should do the right thing even if CPython's
774 '>>>' prompt doesn't.
780 '>>>' prompt doesn't.
775 (InteractiveShell): removed subclassing code.InteractiveConsole
781 (InteractiveShell): removed subclassing code.InteractiveConsole
776 class. By now we'd overridden just about all of its methods: I've
782 class. By now we'd overridden just about all of its methods: I've
777 copied the remaining two over, and now ipython is a standalone
783 copied the remaining two over, and now ipython is a standalone
778 class. This will provide a clearer picture for the chainsaw
784 class. This will provide a clearer picture for the chainsaw
779 branch refactoring.
785 branch refactoring.
780
786
781 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
787 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
782
788
783 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
789 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
784 failures for objects which break when dir() is called on them.
790 failures for objects which break when dir() is called on them.
785
791
786 * IPython/FlexCompleter.py (Completer.__init__): Added support for
792 * IPython/FlexCompleter.py (Completer.__init__): Added support for
787 distinct local and global namespaces in the completer API. This
793 distinct local and global namespaces in the completer API. This
788 change allows us top properly handle completion with distinct
794 change allows us top properly handle completion with distinct
789 scopes, including in embedded instances (this had never really
795 scopes, including in embedded instances (this had never really
790 worked correctly).
796 worked correctly).
791
797
792 Note: this introduces a change in the constructor for
798 Note: this introduces a change in the constructor for
793 MagicCompleter, as a new global_namespace parameter is now the
799 MagicCompleter, as a new global_namespace parameter is now the
794 second argument (the others were bumped one position).
800 second argument (the others were bumped one position).
795
801
796 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
802 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
797
803
798 * IPython/iplib.py (embed_mainloop): fix tab-completion in
804 * IPython/iplib.py (embed_mainloop): fix tab-completion in
799 embedded instances (which can be done now thanks to Vivian's
805 embedded instances (which can be done now thanks to Vivian's
800 frame-handling fixes for pdb).
806 frame-handling fixes for pdb).
801 (InteractiveShell.__init__): Fix namespace handling problem in
807 (InteractiveShell.__init__): Fix namespace handling problem in
802 embedded instances. We were overwriting __main__ unconditionally,
808 embedded instances. We were overwriting __main__ unconditionally,
803 and this should only be done for 'full' (non-embedded) IPython;
809 and this should only be done for 'full' (non-embedded) IPython;
804 embedded instances must respect the caller's __main__. Thanks to
810 embedded instances must respect the caller's __main__. Thanks to
805 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
811 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
806
812
807 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
813 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
808
814
809 * setup.py: added download_url to setup(). This registers the
815 * setup.py: added download_url to setup(). This registers the
810 download address at PyPI, which is not only useful to humans
816 download address at PyPI, which is not only useful to humans
811 browsing the site, but is also picked up by setuptools (the Eggs
817 browsing the site, but is also picked up by setuptools (the Eggs
812 machinery). Thanks to Ville and R. Kern for the info/discussion
818 machinery). Thanks to Ville and R. Kern for the info/discussion
813 on this.
819 on this.
814
820
815 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
821 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
816
822
817 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
823 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
818 This brings a lot of nice functionality to the pdb mode, which now
824 This brings a lot of nice functionality to the pdb mode, which now
819 has tab-completion, syntax highlighting, and better stack handling
825 has tab-completion, syntax highlighting, and better stack handling
820 than before. Many thanks to Vivian De Smedt
826 than before. Many thanks to Vivian De Smedt
821 <vivian-AT-vdesmedt.com> for the original patches.
827 <vivian-AT-vdesmedt.com> for the original patches.
822
828
823 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
829 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
824
830
825 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
831 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
826 sequence to consistently accept the banner argument. The
832 sequence to consistently accept the banner argument. The
827 inconsistency was tripping SAGE, thanks to Gary Zablackis
833 inconsistency was tripping SAGE, thanks to Gary Zablackis
828 <gzabl-AT-yahoo.com> for the report.
834 <gzabl-AT-yahoo.com> for the report.
829
835
830 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
836 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
831
837
832 * IPython/iplib.py (InteractiveShell.post_config_initialization):
838 * IPython/iplib.py (InteractiveShell.post_config_initialization):
833 Fix bug where a naked 'alias' call in the ipythonrc file would
839 Fix bug where a naked 'alias' call in the ipythonrc file would
834 cause a crash. Bug reported by Jorgen Stenarson.
840 cause a crash. Bug reported by Jorgen Stenarson.
835
841
836 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
842 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
837
843
838 * IPython/ipmaker.py (make_IPython): cleanups which should improve
844 * IPython/ipmaker.py (make_IPython): cleanups which should improve
839 startup time.
845 startup time.
840
846
841 * IPython/iplib.py (runcode): my globals 'fix' for embedded
847 * IPython/iplib.py (runcode): my globals 'fix' for embedded
842 instances had introduced a bug with globals in normal code. Now
848 instances had introduced a bug with globals in normal code. Now
843 it's working in all cases.
849 it's working in all cases.
844
850
845 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
851 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
846 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
852 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
847 has been introduced to set the default case sensitivity of the
853 has been introduced to set the default case sensitivity of the
848 searches. Users can still select either mode at runtime on a
854 searches. Users can still select either mode at runtime on a
849 per-search basis.
855 per-search basis.
850
856
851 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
857 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
852
858
853 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
859 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
854 attributes in wildcard searches for subclasses. Modified version
860 attributes in wildcard searches for subclasses. Modified version
855 of a patch by Jorgen.
861 of a patch by Jorgen.
856
862
857 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
863 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
858
864
859 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
865 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
860 embedded instances. I added a user_global_ns attribute to the
866 embedded instances. I added a user_global_ns attribute to the
861 InteractiveShell class to handle this.
867 InteractiveShell class to handle this.
862
868
863 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
869 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
864
870
865 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
871 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
866 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
872 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
867 (reported under win32, but may happen also in other platforms).
873 (reported under win32, but may happen also in other platforms).
868 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
874 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
869
875
870 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
876 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
871
877
872 * IPython/Magic.py (magic_psearch): new support for wildcard
878 * IPython/Magic.py (magic_psearch): new support for wildcard
873 patterns. Now, typing ?a*b will list all names which begin with a
879 patterns. Now, typing ?a*b will list all names which begin with a
874 and end in b, for example. The %psearch magic has full
880 and end in b, for example. The %psearch magic has full
875 docstrings. Many thanks to JΓΆrgen Stenarson
881 docstrings. Many thanks to JΓΆrgen Stenarson
876 <jorgen.stenarson-AT-bostream.nu>, author of the patches
882 <jorgen.stenarson-AT-bostream.nu>, author of the patches
877 implementing this functionality.
883 implementing this functionality.
878
884
879 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
885 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
880
886
881 * Manual: fixed long-standing annoyance of double-dashes (as in
887 * Manual: fixed long-standing annoyance of double-dashes (as in
882 --prefix=~, for example) being stripped in the HTML version. This
888 --prefix=~, for example) being stripped in the HTML version. This
883 is a latex2html bug, but a workaround was provided. Many thanks
889 is a latex2html bug, but a workaround was provided. Many thanks
884 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
890 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
885 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
891 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
886 rolling. This seemingly small issue had tripped a number of users
892 rolling. This seemingly small issue had tripped a number of users
887 when first installing, so I'm glad to see it gone.
893 when first installing, so I'm glad to see it gone.
888
894
889 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
895 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
890
896
891 * IPython/Extensions/numeric_formats.py: fix missing import,
897 * IPython/Extensions/numeric_formats.py: fix missing import,
892 reported by Stephen Walton.
898 reported by Stephen Walton.
893
899
894 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
900 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
895
901
896 * IPython/demo.py: finish demo module, fully documented now.
902 * IPython/demo.py: finish demo module, fully documented now.
897
903
898 * IPython/genutils.py (file_read): simple little utility to read a
904 * IPython/genutils.py (file_read): simple little utility to read a
899 file and ensure it's closed afterwards.
905 file and ensure it's closed afterwards.
900
906
901 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
907 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
902
908
903 * IPython/demo.py (Demo.__init__): added support for individually
909 * IPython/demo.py (Demo.__init__): added support for individually
904 tagging blocks for automatic execution.
910 tagging blocks for automatic execution.
905
911
906 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
912 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
907 syntax-highlighted python sources, requested by John.
913 syntax-highlighted python sources, requested by John.
908
914
909 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
915 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
910
916
911 * IPython/demo.py (Demo.again): fix bug where again() blocks after
917 * IPython/demo.py (Demo.again): fix bug where again() blocks after
912 finishing.
918 finishing.
913
919
914 * IPython/genutils.py (shlex_split): moved from Magic to here,
920 * IPython/genutils.py (shlex_split): moved from Magic to here,
915 where all 2.2 compatibility stuff lives. I needed it for demo.py.
921 where all 2.2 compatibility stuff lives. I needed it for demo.py.
916
922
917 * IPython/demo.py (Demo.__init__): added support for silent
923 * IPython/demo.py (Demo.__init__): added support for silent
918 blocks, improved marks as regexps, docstrings written.
924 blocks, improved marks as regexps, docstrings written.
919 (Demo.__init__): better docstring, added support for sys.argv.
925 (Demo.__init__): better docstring, added support for sys.argv.
920
926
921 * IPython/genutils.py (marquee): little utility used by the demo
927 * IPython/genutils.py (marquee): little utility used by the demo
922 code, handy in general.
928 code, handy in general.
923
929
924 * IPython/demo.py (Demo.__init__): new class for interactive
930 * IPython/demo.py (Demo.__init__): new class for interactive
925 demos. Not documented yet, I just wrote it in a hurry for
931 demos. Not documented yet, I just wrote it in a hurry for
926 scipy'05. Will docstring later.
932 scipy'05. Will docstring later.
927
933
928 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
934 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
929
935
930 * IPython/Shell.py (sigint_handler): Drastic simplification which
936 * IPython/Shell.py (sigint_handler): Drastic simplification which
931 also seems to make Ctrl-C work correctly across threads! This is
937 also seems to make Ctrl-C work correctly across threads! This is
932 so simple, that I can't beleive I'd missed it before. Needs more
938 so simple, that I can't beleive I'd missed it before. Needs more
933 testing, though.
939 testing, though.
934 (KBINT): Never mind, revert changes. I'm sure I'd tried something
940 (KBINT): Never mind, revert changes. I'm sure I'd tried something
935 like this before...
941 like this before...
936
942
937 * IPython/genutils.py (get_home_dir): add protection against
943 * IPython/genutils.py (get_home_dir): add protection against
938 non-dirs in win32 registry.
944 non-dirs in win32 registry.
939
945
940 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
946 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
941 bug where dict was mutated while iterating (pysh crash).
947 bug where dict was mutated while iterating (pysh crash).
942
948
943 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
949 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
944
950
945 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
951 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
946 spurious newlines added by this routine. After a report by
952 spurious newlines added by this routine. After a report by
947 F. Mantegazza.
953 F. Mantegazza.
948
954
949 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
955 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
950
956
951 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
957 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
952 calls. These were a leftover from the GTK 1.x days, and can cause
958 calls. These were a leftover from the GTK 1.x days, and can cause
953 problems in certain cases (after a report by John Hunter).
959 problems in certain cases (after a report by John Hunter).
954
960
955 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
961 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
956 os.getcwd() fails at init time. Thanks to patch from David Remahl
962 os.getcwd() fails at init time. Thanks to patch from David Remahl
957 <chmod007-AT-mac.com>.
963 <chmod007-AT-mac.com>.
958 (InteractiveShell.__init__): prevent certain special magics from
964 (InteractiveShell.__init__): prevent certain special magics from
959 being shadowed by aliases. Closes
965 being shadowed by aliases. Closes
960 http://www.scipy.net/roundup/ipython/issue41.
966 http://www.scipy.net/roundup/ipython/issue41.
961
967
962 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
968 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
963
969
964 * IPython/iplib.py (InteractiveShell.complete): Added new
970 * IPython/iplib.py (InteractiveShell.complete): Added new
965 top-level completion method to expose the completion mechanism
971 top-level completion method to expose the completion mechanism
966 beyond readline-based environments.
972 beyond readline-based environments.
967
973
968 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
974 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
969
975
970 * tools/ipsvnc (svnversion): fix svnversion capture.
976 * tools/ipsvnc (svnversion): fix svnversion capture.
971
977
972 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
978 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
973 attribute to self, which was missing. Before, it was set by a
979 attribute to self, which was missing. Before, it was set by a
974 routine which in certain cases wasn't being called, so the
980 routine which in certain cases wasn't being called, so the
975 instance could end up missing the attribute. This caused a crash.
981 instance could end up missing the attribute. This caused a crash.
976 Closes http://www.scipy.net/roundup/ipython/issue40.
982 Closes http://www.scipy.net/roundup/ipython/issue40.
977
983
978 2005-08-16 Fernando Perez <fperez@colorado.edu>
984 2005-08-16 Fernando Perez <fperez@colorado.edu>
979
985
980 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
986 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
981 contains non-string attribute. Closes
987 contains non-string attribute. Closes
982 http://www.scipy.net/roundup/ipython/issue38.
988 http://www.scipy.net/roundup/ipython/issue38.
983
989
984 2005-08-14 Fernando Perez <fperez@colorado.edu>
990 2005-08-14 Fernando Perez <fperez@colorado.edu>
985
991
986 * tools/ipsvnc: Minor improvements, to add changeset info.
992 * tools/ipsvnc: Minor improvements, to add changeset info.
987
993
988 2005-08-12 Fernando Perez <fperez@colorado.edu>
994 2005-08-12 Fernando Perez <fperez@colorado.edu>
989
995
990 * IPython/iplib.py (runsource): remove self.code_to_run_src
996 * IPython/iplib.py (runsource): remove self.code_to_run_src
991 attribute. I realized this is nothing more than
997 attribute. I realized this is nothing more than
992 '\n'.join(self.buffer), and having the same data in two different
998 '\n'.join(self.buffer), and having the same data in two different
993 places is just asking for synchronization bugs. This may impact
999 places is just asking for synchronization bugs. This may impact
994 people who have custom exception handlers, so I need to warn
1000 people who have custom exception handlers, so I need to warn
995 ipython-dev about it (F. Mantegazza may use them).
1001 ipython-dev about it (F. Mantegazza may use them).
996
1002
997 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1003 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
998
1004
999 * IPython/genutils.py: fix 2.2 compatibility (generators)
1005 * IPython/genutils.py: fix 2.2 compatibility (generators)
1000
1006
1001 2005-07-18 Fernando Perez <fperez@colorado.edu>
1007 2005-07-18 Fernando Perez <fperez@colorado.edu>
1002
1008
1003 * IPython/genutils.py (get_home_dir): fix to help users with
1009 * IPython/genutils.py (get_home_dir): fix to help users with
1004 invalid $HOME under win32.
1010 invalid $HOME under win32.
1005
1011
1006 2005-07-17 Fernando Perez <fperez@colorado.edu>
1012 2005-07-17 Fernando Perez <fperez@colorado.edu>
1007
1013
1008 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1014 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1009 some old hacks and clean up a bit other routines; code should be
1015 some old hacks and clean up a bit other routines; code should be
1010 simpler and a bit faster.
1016 simpler and a bit faster.
1011
1017
1012 * IPython/iplib.py (interact): removed some last-resort attempts
1018 * IPython/iplib.py (interact): removed some last-resort attempts
1013 to survive broken stdout/stderr. That code was only making it
1019 to survive broken stdout/stderr. That code was only making it
1014 harder to abstract out the i/o (necessary for gui integration),
1020 harder to abstract out the i/o (necessary for gui integration),
1015 and the crashes it could prevent were extremely rare in practice
1021 and the crashes it could prevent were extremely rare in practice
1016 (besides being fully user-induced in a pretty violent manner).
1022 (besides being fully user-induced in a pretty violent manner).
1017
1023
1018 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1024 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1019 Nothing major yet, but the code is simpler to read; this should
1025 Nothing major yet, but the code is simpler to read; this should
1020 make it easier to do more serious modifications in the future.
1026 make it easier to do more serious modifications in the future.
1021
1027
1022 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1028 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1023 which broke in .15 (thanks to a report by Ville).
1029 which broke in .15 (thanks to a report by Ville).
1024
1030
1025 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1031 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1026 be quite correct, I know next to nothing about unicode). This
1032 be quite correct, I know next to nothing about unicode). This
1027 will allow unicode strings to be used in prompts, amongst other
1033 will allow unicode strings to be used in prompts, amongst other
1028 cases. It also will prevent ipython from crashing when unicode
1034 cases. It also will prevent ipython from crashing when unicode
1029 shows up unexpectedly in many places. If ascii encoding fails, we
1035 shows up unexpectedly in many places. If ascii encoding fails, we
1030 assume utf_8. Currently the encoding is not a user-visible
1036 assume utf_8. Currently the encoding is not a user-visible
1031 setting, though it could be made so if there is demand for it.
1037 setting, though it could be made so if there is demand for it.
1032
1038
1033 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1039 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1034
1040
1035 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1041 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1036
1042
1037 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1043 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1038
1044
1039 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1045 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1040 code can work transparently for 2.2/2.3.
1046 code can work transparently for 2.2/2.3.
1041
1047
1042 2005-07-16 Fernando Perez <fperez@colorado.edu>
1048 2005-07-16 Fernando Perez <fperez@colorado.edu>
1043
1049
1044 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1050 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1045 out of the color scheme table used for coloring exception
1051 out of the color scheme table used for coloring exception
1046 tracebacks. This allows user code to add new schemes at runtime.
1052 tracebacks. This allows user code to add new schemes at runtime.
1047 This is a minimally modified version of the patch at
1053 This is a minimally modified version of the patch at
1048 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1054 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1049 for the contribution.
1055 for the contribution.
1050
1056
1051 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1057 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1052 slightly modified version of the patch in
1058 slightly modified version of the patch in
1053 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1059 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1054 to remove the previous try/except solution (which was costlier).
1060 to remove the previous try/except solution (which was costlier).
1055 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1061 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1056
1062
1057 2005-06-08 Fernando Perez <fperez@colorado.edu>
1063 2005-06-08 Fernando Perez <fperez@colorado.edu>
1058
1064
1059 * IPython/iplib.py (write/write_err): Add methods to abstract all
1065 * IPython/iplib.py (write/write_err): Add methods to abstract all
1060 I/O a bit more.
1066 I/O a bit more.
1061
1067
1062 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1068 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1063 warning, reported by Aric Hagberg, fix by JD Hunter.
1069 warning, reported by Aric Hagberg, fix by JD Hunter.
1064
1070
1065 2005-06-02 *** Released version 0.6.15
1071 2005-06-02 *** Released version 0.6.15
1066
1072
1067 2005-06-01 Fernando Perez <fperez@colorado.edu>
1073 2005-06-01 Fernando Perez <fperez@colorado.edu>
1068
1074
1069 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1075 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1070 tab-completion of filenames within open-quoted strings. Note that
1076 tab-completion of filenames within open-quoted strings. Note that
1071 this requires that in ~/.ipython/ipythonrc, users change the
1077 this requires that in ~/.ipython/ipythonrc, users change the
1072 readline delimiters configuration to read:
1078 readline delimiters configuration to read:
1073
1079
1074 readline_remove_delims -/~
1080 readline_remove_delims -/~
1075
1081
1076
1082
1077 2005-05-31 *** Released version 0.6.14
1083 2005-05-31 *** Released version 0.6.14
1078
1084
1079 2005-05-29 Fernando Perez <fperez@colorado.edu>
1085 2005-05-29 Fernando Perez <fperez@colorado.edu>
1080
1086
1081 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1087 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1082 with files not on the filesystem. Reported by Eliyahu Sandler
1088 with files not on the filesystem. Reported by Eliyahu Sandler
1083 <eli@gondolin.net>
1089 <eli@gondolin.net>
1084
1090
1085 2005-05-22 Fernando Perez <fperez@colorado.edu>
1091 2005-05-22 Fernando Perez <fperez@colorado.edu>
1086
1092
1087 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1093 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1088 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1094 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1089
1095
1090 2005-05-19 Fernando Perez <fperez@colorado.edu>
1096 2005-05-19 Fernando Perez <fperez@colorado.edu>
1091
1097
1092 * IPython/iplib.py (safe_execfile): close a file which could be
1098 * IPython/iplib.py (safe_execfile): close a file which could be
1093 left open (causing problems in win32, which locks open files).
1099 left open (causing problems in win32, which locks open files).
1094 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1100 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1095
1101
1096 2005-05-18 Fernando Perez <fperez@colorado.edu>
1102 2005-05-18 Fernando Perez <fperez@colorado.edu>
1097
1103
1098 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1104 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1099 keyword arguments correctly to safe_execfile().
1105 keyword arguments correctly to safe_execfile().
1100
1106
1101 2005-05-13 Fernando Perez <fperez@colorado.edu>
1107 2005-05-13 Fernando Perez <fperez@colorado.edu>
1102
1108
1103 * ipython.1: Added info about Qt to manpage, and threads warning
1109 * ipython.1: Added info about Qt to manpage, and threads warning
1104 to usage page (invoked with --help).
1110 to usage page (invoked with --help).
1105
1111
1106 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1112 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1107 new matcher (it goes at the end of the priority list) to do
1113 new matcher (it goes at the end of the priority list) to do
1108 tab-completion on named function arguments. Submitted by George
1114 tab-completion on named function arguments. Submitted by George
1109 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1115 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1110 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1116 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1111 for more details.
1117 for more details.
1112
1118
1113 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1119 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1114 SystemExit exceptions in the script being run. Thanks to a report
1120 SystemExit exceptions in the script being run. Thanks to a report
1115 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1121 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1116 producing very annoying behavior when running unit tests.
1122 producing very annoying behavior when running unit tests.
1117
1123
1118 2005-05-12 Fernando Perez <fperez@colorado.edu>
1124 2005-05-12 Fernando Perez <fperez@colorado.edu>
1119
1125
1120 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1126 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1121 which I'd broken (again) due to a changed regexp. In the process,
1127 which I'd broken (again) due to a changed regexp. In the process,
1122 added ';' as an escape to auto-quote the whole line without
1128 added ';' as an escape to auto-quote the whole line without
1123 splitting its arguments. Thanks to a report by Jerry McRae
1129 splitting its arguments. Thanks to a report by Jerry McRae
1124 <qrs0xyc02-AT-sneakemail.com>.
1130 <qrs0xyc02-AT-sneakemail.com>.
1125
1131
1126 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1132 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1127 possible crashes caused by a TokenError. Reported by Ed Schofield
1133 possible crashes caused by a TokenError. Reported by Ed Schofield
1128 <schofield-AT-ftw.at>.
1134 <schofield-AT-ftw.at>.
1129
1135
1130 2005-05-06 Fernando Perez <fperez@colorado.edu>
1136 2005-05-06 Fernando Perez <fperez@colorado.edu>
1131
1137
1132 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1138 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1133
1139
1134 2005-04-29 Fernando Perez <fperez@colorado.edu>
1140 2005-04-29 Fernando Perez <fperez@colorado.edu>
1135
1141
1136 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1142 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1137 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1143 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1138 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1144 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1139 which provides support for Qt interactive usage (similar to the
1145 which provides support for Qt interactive usage (similar to the
1140 existing one for WX and GTK). This had been often requested.
1146 existing one for WX and GTK). This had been often requested.
1141
1147
1142 2005-04-14 *** Released version 0.6.13
1148 2005-04-14 *** Released version 0.6.13
1143
1149
1144 2005-04-08 Fernando Perez <fperez@colorado.edu>
1150 2005-04-08 Fernando Perez <fperez@colorado.edu>
1145
1151
1146 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1152 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1147 from _ofind, which gets called on almost every input line. Now,
1153 from _ofind, which gets called on almost every input line. Now,
1148 we only try to get docstrings if they are actually going to be
1154 we only try to get docstrings if they are actually going to be
1149 used (the overhead of fetching unnecessary docstrings can be
1155 used (the overhead of fetching unnecessary docstrings can be
1150 noticeable for certain objects, such as Pyro proxies).
1156 noticeable for certain objects, such as Pyro proxies).
1151
1157
1152 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1158 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1153 for completers. For some reason I had been passing them the state
1159 for completers. For some reason I had been passing them the state
1154 variable, which completers never actually need, and was in
1160 variable, which completers never actually need, and was in
1155 conflict with the rlcompleter API. Custom completers ONLY need to
1161 conflict with the rlcompleter API. Custom completers ONLY need to
1156 take the text parameter.
1162 take the text parameter.
1157
1163
1158 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1164 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1159 work correctly in pysh. I've also moved all the logic which used
1165 work correctly in pysh. I've also moved all the logic which used
1160 to be in pysh.py here, which will prevent problems with future
1166 to be in pysh.py here, which will prevent problems with future
1161 upgrades. However, this time I must warn users to update their
1167 upgrades. However, this time I must warn users to update their
1162 pysh profile to include the line
1168 pysh profile to include the line
1163
1169
1164 import_all IPython.Extensions.InterpreterExec
1170 import_all IPython.Extensions.InterpreterExec
1165
1171
1166 because otherwise things won't work for them. They MUST also
1172 because otherwise things won't work for them. They MUST also
1167 delete pysh.py and the line
1173 delete pysh.py and the line
1168
1174
1169 execfile pysh.py
1175 execfile pysh.py
1170
1176
1171 from their ipythonrc-pysh.
1177 from their ipythonrc-pysh.
1172
1178
1173 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1179 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1174 robust in the face of objects whose dir() returns non-strings
1180 robust in the face of objects whose dir() returns non-strings
1175 (which it shouldn't, but some broken libs like ITK do). Thanks to
1181 (which it shouldn't, but some broken libs like ITK do). Thanks to
1176 a patch by John Hunter (implemented differently, though). Also
1182 a patch by John Hunter (implemented differently, though). Also
1177 minor improvements by using .extend instead of + on lists.
1183 minor improvements by using .extend instead of + on lists.
1178
1184
1179 * pysh.py:
1185 * pysh.py:
1180
1186
1181 2005-04-06 Fernando Perez <fperez@colorado.edu>
1187 2005-04-06 Fernando Perez <fperez@colorado.edu>
1182
1188
1183 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1189 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1184 by default, so that all users benefit from it. Those who don't
1190 by default, so that all users benefit from it. Those who don't
1185 want it can still turn it off.
1191 want it can still turn it off.
1186
1192
1187 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1193 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1188 config file, I'd forgotten about this, so users were getting it
1194 config file, I'd forgotten about this, so users were getting it
1189 off by default.
1195 off by default.
1190
1196
1191 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1197 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1192 consistency. Now magics can be called in multiline statements,
1198 consistency. Now magics can be called in multiline statements,
1193 and python variables can be expanded in magic calls via $var.
1199 and python variables can be expanded in magic calls via $var.
1194 This makes the magic system behave just like aliases or !system
1200 This makes the magic system behave just like aliases or !system
1195 calls.
1201 calls.
1196
1202
1197 2005-03-28 Fernando Perez <fperez@colorado.edu>
1203 2005-03-28 Fernando Perez <fperez@colorado.edu>
1198
1204
1199 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1205 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1200 expensive string additions for building command. Add support for
1206 expensive string additions for building command. Add support for
1201 trailing ';' when autocall is used.
1207 trailing ';' when autocall is used.
1202
1208
1203 2005-03-26 Fernando Perez <fperez@colorado.edu>
1209 2005-03-26 Fernando Perez <fperez@colorado.edu>
1204
1210
1205 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1211 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1206 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1212 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1207 ipython.el robust against prompts with any number of spaces
1213 ipython.el robust against prompts with any number of spaces
1208 (including 0) after the ':' character.
1214 (including 0) after the ':' character.
1209
1215
1210 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1216 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1211 continuation prompt, which misled users to think the line was
1217 continuation prompt, which misled users to think the line was
1212 already indented. Closes debian Bug#300847, reported to me by
1218 already indented. Closes debian Bug#300847, reported to me by
1213 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1219 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1214
1220
1215 2005-03-23 Fernando Perez <fperez@colorado.edu>
1221 2005-03-23 Fernando Perez <fperez@colorado.edu>
1216
1222
1217 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1223 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1218 properly aligned if they have embedded newlines.
1224 properly aligned if they have embedded newlines.
1219
1225
1220 * IPython/iplib.py (runlines): Add a public method to expose
1226 * IPython/iplib.py (runlines): Add a public method to expose
1221 IPython's code execution machinery, so that users can run strings
1227 IPython's code execution machinery, so that users can run strings
1222 as if they had been typed at the prompt interactively.
1228 as if they had been typed at the prompt interactively.
1223 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1229 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1224 methods which can call the system shell, but with python variable
1230 methods which can call the system shell, but with python variable
1225 expansion. The three such methods are: __IPYTHON__.system,
1231 expansion. The three such methods are: __IPYTHON__.system,
1226 .getoutput and .getoutputerror. These need to be documented in a
1232 .getoutput and .getoutputerror. These need to be documented in a
1227 'public API' section (to be written) of the manual.
1233 'public API' section (to be written) of the manual.
1228
1234
1229 2005-03-20 Fernando Perez <fperez@colorado.edu>
1235 2005-03-20 Fernando Perez <fperez@colorado.edu>
1230
1236
1231 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1237 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1232 for custom exception handling. This is quite powerful, and it
1238 for custom exception handling. This is quite powerful, and it
1233 allows for user-installable exception handlers which can trap
1239 allows for user-installable exception handlers which can trap
1234 custom exceptions at runtime and treat them separately from
1240 custom exceptions at runtime and treat them separately from
1235 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1241 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1236 Mantegazza <mantegazza-AT-ill.fr>.
1242 Mantegazza <mantegazza-AT-ill.fr>.
1237 (InteractiveShell.set_custom_completer): public API function to
1243 (InteractiveShell.set_custom_completer): public API function to
1238 add new completers at runtime.
1244 add new completers at runtime.
1239
1245
1240 2005-03-19 Fernando Perez <fperez@colorado.edu>
1246 2005-03-19 Fernando Perez <fperez@colorado.edu>
1241
1247
1242 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1248 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1243 allow objects which provide their docstrings via non-standard
1249 allow objects which provide their docstrings via non-standard
1244 mechanisms (like Pyro proxies) to still be inspected by ipython's
1250 mechanisms (like Pyro proxies) to still be inspected by ipython's
1245 ? system.
1251 ? system.
1246
1252
1247 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1253 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1248 automatic capture system. I tried quite hard to make it work
1254 automatic capture system. I tried quite hard to make it work
1249 reliably, and simply failed. I tried many combinations with the
1255 reliably, and simply failed. I tried many combinations with the
1250 subprocess module, but eventually nothing worked in all needed
1256 subprocess module, but eventually nothing worked in all needed
1251 cases (not blocking stdin for the child, duplicating stdout
1257 cases (not blocking stdin for the child, duplicating stdout
1252 without blocking, etc). The new %sc/%sx still do capture to these
1258 without blocking, etc). The new %sc/%sx still do capture to these
1253 magical list/string objects which make shell use much more
1259 magical list/string objects which make shell use much more
1254 conveninent, so not all is lost.
1260 conveninent, so not all is lost.
1255
1261
1256 XXX - FIX MANUAL for the change above!
1262 XXX - FIX MANUAL for the change above!
1257
1263
1258 (runsource): I copied code.py's runsource() into ipython to modify
1264 (runsource): I copied code.py's runsource() into ipython to modify
1259 it a bit. Now the code object and source to be executed are
1265 it a bit. Now the code object and source to be executed are
1260 stored in ipython. This makes this info accessible to third-party
1266 stored in ipython. This makes this info accessible to third-party
1261 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1267 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1262 Mantegazza <mantegazza-AT-ill.fr>.
1268 Mantegazza <mantegazza-AT-ill.fr>.
1263
1269
1264 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1270 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1265 history-search via readline (like C-p/C-n). I'd wanted this for a
1271 history-search via readline (like C-p/C-n). I'd wanted this for a
1266 long time, but only recently found out how to do it. For users
1272 long time, but only recently found out how to do it. For users
1267 who already have their ipythonrc files made and want this, just
1273 who already have their ipythonrc files made and want this, just
1268 add:
1274 add:
1269
1275
1270 readline_parse_and_bind "\e[A": history-search-backward
1276 readline_parse_and_bind "\e[A": history-search-backward
1271 readline_parse_and_bind "\e[B": history-search-forward
1277 readline_parse_and_bind "\e[B": history-search-forward
1272
1278
1273 2005-03-18 Fernando Perez <fperez@colorado.edu>
1279 2005-03-18 Fernando Perez <fperez@colorado.edu>
1274
1280
1275 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1281 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1276 LSString and SList classes which allow transparent conversions
1282 LSString and SList classes which allow transparent conversions
1277 between list mode and whitespace-separated string.
1283 between list mode and whitespace-separated string.
1278 (magic_r): Fix recursion problem in %r.
1284 (magic_r): Fix recursion problem in %r.
1279
1285
1280 * IPython/genutils.py (LSString): New class to be used for
1286 * IPython/genutils.py (LSString): New class to be used for
1281 automatic storage of the results of all alias/system calls in _o
1287 automatic storage of the results of all alias/system calls in _o
1282 and _e (stdout/err). These provide a .l/.list attribute which
1288 and _e (stdout/err). These provide a .l/.list attribute which
1283 does automatic splitting on newlines. This means that for most
1289 does automatic splitting on newlines. This means that for most
1284 uses, you'll never need to do capturing of output with %sc/%sx
1290 uses, you'll never need to do capturing of output with %sc/%sx
1285 anymore, since ipython keeps this always done for you. Note that
1291 anymore, since ipython keeps this always done for you. Note that
1286 only the LAST results are stored, the _o/e variables are
1292 only the LAST results are stored, the _o/e variables are
1287 overwritten on each call. If you need to save their contents
1293 overwritten on each call. If you need to save their contents
1288 further, simply bind them to any other name.
1294 further, simply bind them to any other name.
1289
1295
1290 2005-03-17 Fernando Perez <fperez@colorado.edu>
1296 2005-03-17 Fernando Perez <fperez@colorado.edu>
1291
1297
1292 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1298 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1293 prompt namespace handling.
1299 prompt namespace handling.
1294
1300
1295 2005-03-16 Fernando Perez <fperez@colorado.edu>
1301 2005-03-16 Fernando Perez <fperez@colorado.edu>
1296
1302
1297 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1303 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1298 classic prompts to be '>>> ' (final space was missing, and it
1304 classic prompts to be '>>> ' (final space was missing, and it
1299 trips the emacs python mode).
1305 trips the emacs python mode).
1300 (BasePrompt.__str__): Added safe support for dynamic prompt
1306 (BasePrompt.__str__): Added safe support for dynamic prompt
1301 strings. Now you can set your prompt string to be '$x', and the
1307 strings. Now you can set your prompt string to be '$x', and the
1302 value of x will be printed from your interactive namespace. The
1308 value of x will be printed from your interactive namespace. The
1303 interpolation syntax includes the full Itpl support, so
1309 interpolation syntax includes the full Itpl support, so
1304 ${foo()+x+bar()} is a valid prompt string now, and the function
1310 ${foo()+x+bar()} is a valid prompt string now, and the function
1305 calls will be made at runtime.
1311 calls will be made at runtime.
1306
1312
1307 2005-03-15 Fernando Perez <fperez@colorado.edu>
1313 2005-03-15 Fernando Perez <fperez@colorado.edu>
1308
1314
1309 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1315 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1310 avoid name clashes in pylab. %hist still works, it just forwards
1316 avoid name clashes in pylab. %hist still works, it just forwards
1311 the call to %history.
1317 the call to %history.
1312
1318
1313 2005-03-02 *** Released version 0.6.12
1319 2005-03-02 *** Released version 0.6.12
1314
1320
1315 2005-03-02 Fernando Perez <fperez@colorado.edu>
1321 2005-03-02 Fernando Perez <fperez@colorado.edu>
1316
1322
1317 * IPython/iplib.py (handle_magic): log magic calls properly as
1323 * IPython/iplib.py (handle_magic): log magic calls properly as
1318 ipmagic() function calls.
1324 ipmagic() function calls.
1319
1325
1320 * IPython/Magic.py (magic_time): Improved %time to support
1326 * IPython/Magic.py (magic_time): Improved %time to support
1321 statements and provide wall-clock as well as CPU time.
1327 statements and provide wall-clock as well as CPU time.
1322
1328
1323 2005-02-27 Fernando Perez <fperez@colorado.edu>
1329 2005-02-27 Fernando Perez <fperez@colorado.edu>
1324
1330
1325 * IPython/hooks.py: New hooks module, to expose user-modifiable
1331 * IPython/hooks.py: New hooks module, to expose user-modifiable
1326 IPython functionality in a clean manner. For now only the editor
1332 IPython functionality in a clean manner. For now only the editor
1327 hook is actually written, and other thigns which I intend to turn
1333 hook is actually written, and other thigns which I intend to turn
1328 into proper hooks aren't yet there. The display and prefilter
1334 into proper hooks aren't yet there. The display and prefilter
1329 stuff, for example, should be hooks. But at least now the
1335 stuff, for example, should be hooks. But at least now the
1330 framework is in place, and the rest can be moved here with more
1336 framework is in place, and the rest can be moved here with more
1331 time later. IPython had had a .hooks variable for a long time for
1337 time later. IPython had had a .hooks variable for a long time for
1332 this purpose, but I'd never actually used it for anything.
1338 this purpose, but I'd never actually used it for anything.
1333
1339
1334 2005-02-26 Fernando Perez <fperez@colorado.edu>
1340 2005-02-26 Fernando Perez <fperez@colorado.edu>
1335
1341
1336 * IPython/ipmaker.py (make_IPython): make the default ipython
1342 * IPython/ipmaker.py (make_IPython): make the default ipython
1337 directory be called _ipython under win32, to follow more the
1343 directory be called _ipython under win32, to follow more the
1338 naming peculiarities of that platform (where buggy software like
1344 naming peculiarities of that platform (where buggy software like
1339 Visual Sourcesafe breaks with .named directories). Reported by
1345 Visual Sourcesafe breaks with .named directories). Reported by
1340 Ville Vainio.
1346 Ville Vainio.
1341
1347
1342 2005-02-23 Fernando Perez <fperez@colorado.edu>
1348 2005-02-23 Fernando Perez <fperez@colorado.edu>
1343
1349
1344 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1350 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1345 auto_aliases for win32 which were causing problems. Users can
1351 auto_aliases for win32 which were causing problems. Users can
1346 define the ones they personally like.
1352 define the ones they personally like.
1347
1353
1348 2005-02-21 Fernando Perez <fperez@colorado.edu>
1354 2005-02-21 Fernando Perez <fperez@colorado.edu>
1349
1355
1350 * IPython/Magic.py (magic_time): new magic to time execution of
1356 * IPython/Magic.py (magic_time): new magic to time execution of
1351 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1357 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1352
1358
1353 2005-02-19 Fernando Perez <fperez@colorado.edu>
1359 2005-02-19 Fernando Perez <fperez@colorado.edu>
1354
1360
1355 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1361 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1356 into keys (for prompts, for example).
1362 into keys (for prompts, for example).
1357
1363
1358 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1364 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1359 prompts in case users want them. This introduces a small behavior
1365 prompts in case users want them. This introduces a small behavior
1360 change: ipython does not automatically add a space to all prompts
1366 change: ipython does not automatically add a space to all prompts
1361 anymore. To get the old prompts with a space, users should add it
1367 anymore. To get the old prompts with a space, users should add it
1362 manually to their ipythonrc file, so for example prompt_in1 should
1368 manually to their ipythonrc file, so for example prompt_in1 should
1363 now read 'In [\#]: ' instead of 'In [\#]:'.
1369 now read 'In [\#]: ' instead of 'In [\#]:'.
1364 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1370 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1365 file) to control left-padding of secondary prompts.
1371 file) to control left-padding of secondary prompts.
1366
1372
1367 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1373 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1368 the profiler can't be imported. Fix for Debian, which removed
1374 the profiler can't be imported. Fix for Debian, which removed
1369 profile.py because of License issues. I applied a slightly
1375 profile.py because of License issues. I applied a slightly
1370 modified version of the original Debian patch at
1376 modified version of the original Debian patch at
1371 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1377 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1372
1378
1373 2005-02-17 Fernando Perez <fperez@colorado.edu>
1379 2005-02-17 Fernando Perez <fperez@colorado.edu>
1374
1380
1375 * IPython/genutils.py (native_line_ends): Fix bug which would
1381 * IPython/genutils.py (native_line_ends): Fix bug which would
1376 cause improper line-ends under win32 b/c I was not opening files
1382 cause improper line-ends under win32 b/c I was not opening files
1377 in binary mode. Bug report and fix thanks to Ville.
1383 in binary mode. Bug report and fix thanks to Ville.
1378
1384
1379 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1385 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1380 trying to catch spurious foo[1] autocalls. My fix actually broke
1386 trying to catch spurious foo[1] autocalls. My fix actually broke
1381 ',/' autoquote/call with explicit escape (bad regexp).
1387 ',/' autoquote/call with explicit escape (bad regexp).
1382
1388
1383 2005-02-15 *** Released version 0.6.11
1389 2005-02-15 *** Released version 0.6.11
1384
1390
1385 2005-02-14 Fernando Perez <fperez@colorado.edu>
1391 2005-02-14 Fernando Perez <fperez@colorado.edu>
1386
1392
1387 * IPython/background_jobs.py: New background job management
1393 * IPython/background_jobs.py: New background job management
1388 subsystem. This is implemented via a new set of classes, and
1394 subsystem. This is implemented via a new set of classes, and
1389 IPython now provides a builtin 'jobs' object for background job
1395 IPython now provides a builtin 'jobs' object for background job
1390 execution. A convenience %bg magic serves as a lightweight
1396 execution. A convenience %bg magic serves as a lightweight
1391 frontend for starting the more common type of calls. This was
1397 frontend for starting the more common type of calls. This was
1392 inspired by discussions with B. Granger and the BackgroundCommand
1398 inspired by discussions with B. Granger and the BackgroundCommand
1393 class described in the book Python Scripting for Computational
1399 class described in the book Python Scripting for Computational
1394 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1400 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1395 (although ultimately no code from this text was used, as IPython's
1401 (although ultimately no code from this text was used, as IPython's
1396 system is a separate implementation).
1402 system is a separate implementation).
1397
1403
1398 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1404 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1399 to control the completion of single/double underscore names
1405 to control the completion of single/double underscore names
1400 separately. As documented in the example ipytonrc file, the
1406 separately. As documented in the example ipytonrc file, the
1401 readline_omit__names variable can now be set to 2, to omit even
1407 readline_omit__names variable can now be set to 2, to omit even
1402 single underscore names. Thanks to a patch by Brian Wong
1408 single underscore names. Thanks to a patch by Brian Wong
1403 <BrianWong-AT-AirgoNetworks.Com>.
1409 <BrianWong-AT-AirgoNetworks.Com>.
1404 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1410 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1405 be autocalled as foo([1]) if foo were callable. A problem for
1411 be autocalled as foo([1]) if foo were callable. A problem for
1406 things which are both callable and implement __getitem__.
1412 things which are both callable and implement __getitem__.
1407 (init_readline): Fix autoindentation for win32. Thanks to a patch
1413 (init_readline): Fix autoindentation for win32. Thanks to a patch
1408 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1414 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1409
1415
1410 2005-02-12 Fernando Perez <fperez@colorado.edu>
1416 2005-02-12 Fernando Perez <fperez@colorado.edu>
1411
1417
1412 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1418 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1413 which I had written long ago to sort out user error messages which
1419 which I had written long ago to sort out user error messages which
1414 may occur during startup. This seemed like a good idea initially,
1420 may occur during startup. This seemed like a good idea initially,
1415 but it has proven a disaster in retrospect. I don't want to
1421 but it has proven a disaster in retrospect. I don't want to
1416 change much code for now, so my fix is to set the internal 'debug'
1422 change much code for now, so my fix is to set the internal 'debug'
1417 flag to true everywhere, whose only job was precisely to control
1423 flag to true everywhere, whose only job was precisely to control
1418 this subsystem. This closes issue 28 (as well as avoiding all
1424 this subsystem. This closes issue 28 (as well as avoiding all
1419 sorts of strange hangups which occur from time to time).
1425 sorts of strange hangups which occur from time to time).
1420
1426
1421 2005-02-07 Fernando Perez <fperez@colorado.edu>
1427 2005-02-07 Fernando Perez <fperez@colorado.edu>
1422
1428
1423 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1429 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1424 previous call produced a syntax error.
1430 previous call produced a syntax error.
1425
1431
1426 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1432 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1427 classes without constructor.
1433 classes without constructor.
1428
1434
1429 2005-02-06 Fernando Perez <fperez@colorado.edu>
1435 2005-02-06 Fernando Perez <fperez@colorado.edu>
1430
1436
1431 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1437 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1432 completions with the results of each matcher, so we return results
1438 completions with the results of each matcher, so we return results
1433 to the user from all namespaces. This breaks with ipython
1439 to the user from all namespaces. This breaks with ipython
1434 tradition, but I think it's a nicer behavior. Now you get all
1440 tradition, but I think it's a nicer behavior. Now you get all
1435 possible completions listed, from all possible namespaces (python,
1441 possible completions listed, from all possible namespaces (python,
1436 filesystem, magics...) After a request by John Hunter
1442 filesystem, magics...) After a request by John Hunter
1437 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1443 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1438
1444
1439 2005-02-05 Fernando Perez <fperez@colorado.edu>
1445 2005-02-05 Fernando Perez <fperez@colorado.edu>
1440
1446
1441 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1447 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1442 the call had quote characters in it (the quotes were stripped).
1448 the call had quote characters in it (the quotes were stripped).
1443
1449
1444 2005-01-31 Fernando Perez <fperez@colorado.edu>
1450 2005-01-31 Fernando Perez <fperez@colorado.edu>
1445
1451
1446 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1452 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1447 Itpl.itpl() to make the code more robust against psyco
1453 Itpl.itpl() to make the code more robust against psyco
1448 optimizations.
1454 optimizations.
1449
1455
1450 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1456 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1451 of causing an exception. Quicker, cleaner.
1457 of causing an exception. Quicker, cleaner.
1452
1458
1453 2005-01-28 Fernando Perez <fperez@colorado.edu>
1459 2005-01-28 Fernando Perez <fperez@colorado.edu>
1454
1460
1455 * scripts/ipython_win_post_install.py (install): hardcode
1461 * scripts/ipython_win_post_install.py (install): hardcode
1456 sys.prefix+'python.exe' as the executable path. It turns out that
1462 sys.prefix+'python.exe' as the executable path. It turns out that
1457 during the post-installation run, sys.executable resolves to the
1463 during the post-installation run, sys.executable resolves to the
1458 name of the binary installer! I should report this as a distutils
1464 name of the binary installer! I should report this as a distutils
1459 bug, I think. I updated the .10 release with this tiny fix, to
1465 bug, I think. I updated the .10 release with this tiny fix, to
1460 avoid annoying the lists further.
1466 avoid annoying the lists further.
1461
1467
1462 2005-01-27 *** Released version 0.6.10
1468 2005-01-27 *** Released version 0.6.10
1463
1469
1464 2005-01-27 Fernando Perez <fperez@colorado.edu>
1470 2005-01-27 Fernando Perez <fperez@colorado.edu>
1465
1471
1466 * IPython/numutils.py (norm): Added 'inf' as optional name for
1472 * IPython/numutils.py (norm): Added 'inf' as optional name for
1467 L-infinity norm, included references to mathworld.com for vector
1473 L-infinity norm, included references to mathworld.com for vector
1468 norm definitions.
1474 norm definitions.
1469 (amin/amax): added amin/amax for array min/max. Similar to what
1475 (amin/amax): added amin/amax for array min/max. Similar to what
1470 pylab ships with after the recent reorganization of names.
1476 pylab ships with after the recent reorganization of names.
1471 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1477 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1472
1478
1473 * ipython.el: committed Alex's recent fixes and improvements.
1479 * ipython.el: committed Alex's recent fixes and improvements.
1474 Tested with python-mode from CVS, and it looks excellent. Since
1480 Tested with python-mode from CVS, and it looks excellent. Since
1475 python-mode hasn't released anything in a while, I'm temporarily
1481 python-mode hasn't released anything in a while, I'm temporarily
1476 putting a copy of today's CVS (v 4.70) of python-mode in:
1482 putting a copy of today's CVS (v 4.70) of python-mode in:
1477 http://ipython.scipy.org/tmp/python-mode.el
1483 http://ipython.scipy.org/tmp/python-mode.el
1478
1484
1479 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1485 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1480 sys.executable for the executable name, instead of assuming it's
1486 sys.executable for the executable name, instead of assuming it's
1481 called 'python.exe' (the post-installer would have produced broken
1487 called 'python.exe' (the post-installer would have produced broken
1482 setups on systems with a differently named python binary).
1488 setups on systems with a differently named python binary).
1483
1489
1484 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1490 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1485 references to os.linesep, to make the code more
1491 references to os.linesep, to make the code more
1486 platform-independent. This is also part of the win32 coloring
1492 platform-independent. This is also part of the win32 coloring
1487 fixes.
1493 fixes.
1488
1494
1489 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1495 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1490 lines, which actually cause coloring bugs because the length of
1496 lines, which actually cause coloring bugs because the length of
1491 the line is very difficult to correctly compute with embedded
1497 the line is very difficult to correctly compute with embedded
1492 escapes. This was the source of all the coloring problems under
1498 escapes. This was the source of all the coloring problems under
1493 Win32. I think that _finally_, Win32 users have a properly
1499 Win32. I think that _finally_, Win32 users have a properly
1494 working ipython in all respects. This would never have happened
1500 working ipython in all respects. This would never have happened
1495 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1501 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1496
1502
1497 2005-01-26 *** Released version 0.6.9
1503 2005-01-26 *** Released version 0.6.9
1498
1504
1499 2005-01-25 Fernando Perez <fperez@colorado.edu>
1505 2005-01-25 Fernando Perez <fperez@colorado.edu>
1500
1506
1501 * setup.py: finally, we have a true Windows installer, thanks to
1507 * setup.py: finally, we have a true Windows installer, thanks to
1502 the excellent work of Viktor Ransmayr
1508 the excellent work of Viktor Ransmayr
1503 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1509 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1504 Windows users. The setup routine is quite a bit cleaner thanks to
1510 Windows users. The setup routine is quite a bit cleaner thanks to
1505 this, and the post-install script uses the proper functions to
1511 this, and the post-install script uses the proper functions to
1506 allow a clean de-installation using the standard Windows Control
1512 allow a clean de-installation using the standard Windows Control
1507 Panel.
1513 Panel.
1508
1514
1509 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1515 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1510 environment variable under all OSes (including win32) if
1516 environment variable under all OSes (including win32) if
1511 available. This will give consistency to win32 users who have set
1517 available. This will give consistency to win32 users who have set
1512 this variable for any reason. If os.environ['HOME'] fails, the
1518 this variable for any reason. If os.environ['HOME'] fails, the
1513 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1519 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1514
1520
1515 2005-01-24 Fernando Perez <fperez@colorado.edu>
1521 2005-01-24 Fernando Perez <fperez@colorado.edu>
1516
1522
1517 * IPython/numutils.py (empty_like): add empty_like(), similar to
1523 * IPython/numutils.py (empty_like): add empty_like(), similar to
1518 zeros_like() but taking advantage of the new empty() Numeric routine.
1524 zeros_like() but taking advantage of the new empty() Numeric routine.
1519
1525
1520 2005-01-23 *** Released version 0.6.8
1526 2005-01-23 *** Released version 0.6.8
1521
1527
1522 2005-01-22 Fernando Perez <fperez@colorado.edu>
1528 2005-01-22 Fernando Perez <fperez@colorado.edu>
1523
1529
1524 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1530 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1525 automatic show() calls. After discussing things with JDH, it
1531 automatic show() calls. After discussing things with JDH, it
1526 turns out there are too many corner cases where this can go wrong.
1532 turns out there are too many corner cases where this can go wrong.
1527 It's best not to try to be 'too smart', and simply have ipython
1533 It's best not to try to be 'too smart', and simply have ipython
1528 reproduce as much as possible the default behavior of a normal
1534 reproduce as much as possible the default behavior of a normal
1529 python shell.
1535 python shell.
1530
1536
1531 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1537 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1532 line-splitting regexp and _prefilter() to avoid calling getattr()
1538 line-splitting regexp and _prefilter() to avoid calling getattr()
1533 on assignments. This closes
1539 on assignments. This closes
1534 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1540 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1535 readline uses getattr(), so a simple <TAB> keypress is still
1541 readline uses getattr(), so a simple <TAB> keypress is still
1536 enough to trigger getattr() calls on an object.
1542 enough to trigger getattr() calls on an object.
1537
1543
1538 2005-01-21 Fernando Perez <fperez@colorado.edu>
1544 2005-01-21 Fernando Perez <fperez@colorado.edu>
1539
1545
1540 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1546 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1541 docstring under pylab so it doesn't mask the original.
1547 docstring under pylab so it doesn't mask the original.
1542
1548
1543 2005-01-21 *** Released version 0.6.7
1549 2005-01-21 *** Released version 0.6.7
1544
1550
1545 2005-01-21 Fernando Perez <fperez@colorado.edu>
1551 2005-01-21 Fernando Perez <fperez@colorado.edu>
1546
1552
1547 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1553 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1548 signal handling for win32 users in multithreaded mode.
1554 signal handling for win32 users in multithreaded mode.
1549
1555
1550 2005-01-17 Fernando Perez <fperez@colorado.edu>
1556 2005-01-17 Fernando Perez <fperez@colorado.edu>
1551
1557
1552 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1558 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1553 instances with no __init__. After a crash report by Norbert Nemec
1559 instances with no __init__. After a crash report by Norbert Nemec
1554 <Norbert-AT-nemec-online.de>.
1560 <Norbert-AT-nemec-online.de>.
1555
1561
1556 2005-01-14 Fernando Perez <fperez@colorado.edu>
1562 2005-01-14 Fernando Perez <fperez@colorado.edu>
1557
1563
1558 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1564 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1559 names for verbose exceptions, when multiple dotted names and the
1565 names for verbose exceptions, when multiple dotted names and the
1560 'parent' object were present on the same line.
1566 'parent' object were present on the same line.
1561
1567
1562 2005-01-11 Fernando Perez <fperez@colorado.edu>
1568 2005-01-11 Fernando Perez <fperez@colorado.edu>
1563
1569
1564 * IPython/genutils.py (flag_calls): new utility to trap and flag
1570 * IPython/genutils.py (flag_calls): new utility to trap and flag
1565 calls in functions. I need it to clean up matplotlib support.
1571 calls in functions. I need it to clean up matplotlib support.
1566 Also removed some deprecated code in genutils.
1572 Also removed some deprecated code in genutils.
1567
1573
1568 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1574 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1569 that matplotlib scripts called with %run, which don't call show()
1575 that matplotlib scripts called with %run, which don't call show()
1570 themselves, still have their plotting windows open.
1576 themselves, still have their plotting windows open.
1571
1577
1572 2005-01-05 Fernando Perez <fperez@colorado.edu>
1578 2005-01-05 Fernando Perez <fperez@colorado.edu>
1573
1579
1574 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1580 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1575 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1581 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1576
1582
1577 2004-12-19 Fernando Perez <fperez@colorado.edu>
1583 2004-12-19 Fernando Perez <fperez@colorado.edu>
1578
1584
1579 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1585 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1580 parent_runcode, which was an eyesore. The same result can be
1586 parent_runcode, which was an eyesore. The same result can be
1581 obtained with Python's regular superclass mechanisms.
1587 obtained with Python's regular superclass mechanisms.
1582
1588
1583 2004-12-17 Fernando Perez <fperez@colorado.edu>
1589 2004-12-17 Fernando Perez <fperez@colorado.edu>
1584
1590
1585 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1591 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1586 reported by Prabhu.
1592 reported by Prabhu.
1587 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1593 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1588 sys.stderr) instead of explicitly calling sys.stderr. This helps
1594 sys.stderr) instead of explicitly calling sys.stderr. This helps
1589 maintain our I/O abstractions clean, for future GUI embeddings.
1595 maintain our I/O abstractions clean, for future GUI embeddings.
1590
1596
1591 * IPython/genutils.py (info): added new utility for sys.stderr
1597 * IPython/genutils.py (info): added new utility for sys.stderr
1592 unified info message handling (thin wrapper around warn()).
1598 unified info message handling (thin wrapper around warn()).
1593
1599
1594 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1600 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1595 composite (dotted) names on verbose exceptions.
1601 composite (dotted) names on verbose exceptions.
1596 (VerboseTB.nullrepr): harden against another kind of errors which
1602 (VerboseTB.nullrepr): harden against another kind of errors which
1597 Python's inspect module can trigger, and which were crashing
1603 Python's inspect module can trigger, and which were crashing
1598 IPython. Thanks to a report by Marco Lombardi
1604 IPython. Thanks to a report by Marco Lombardi
1599 <mlombard-AT-ma010192.hq.eso.org>.
1605 <mlombard-AT-ma010192.hq.eso.org>.
1600
1606
1601 2004-12-13 *** Released version 0.6.6
1607 2004-12-13 *** Released version 0.6.6
1602
1608
1603 2004-12-12 Fernando Perez <fperez@colorado.edu>
1609 2004-12-12 Fernando Perez <fperez@colorado.edu>
1604
1610
1605 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1611 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1606 generated by pygtk upon initialization if it was built without
1612 generated by pygtk upon initialization if it was built without
1607 threads (for matplotlib users). After a crash reported by
1613 threads (for matplotlib users). After a crash reported by
1608 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1614 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1609
1615
1610 * IPython/ipmaker.py (make_IPython): fix small bug in the
1616 * IPython/ipmaker.py (make_IPython): fix small bug in the
1611 import_some parameter for multiple imports.
1617 import_some parameter for multiple imports.
1612
1618
1613 * IPython/iplib.py (ipmagic): simplified the interface of
1619 * IPython/iplib.py (ipmagic): simplified the interface of
1614 ipmagic() to take a single string argument, just as it would be
1620 ipmagic() to take a single string argument, just as it would be
1615 typed at the IPython cmd line.
1621 typed at the IPython cmd line.
1616 (ipalias): Added new ipalias() with an interface identical to
1622 (ipalias): Added new ipalias() with an interface identical to
1617 ipmagic(). This completes exposing a pure python interface to the
1623 ipmagic(). This completes exposing a pure python interface to the
1618 alias and magic system, which can be used in loops or more complex
1624 alias and magic system, which can be used in loops or more complex
1619 code where IPython's automatic line mangling is not active.
1625 code where IPython's automatic line mangling is not active.
1620
1626
1621 * IPython/genutils.py (timing): changed interface of timing to
1627 * IPython/genutils.py (timing): changed interface of timing to
1622 simply run code once, which is the most common case. timings()
1628 simply run code once, which is the most common case. timings()
1623 remains unchanged, for the cases where you want multiple runs.
1629 remains unchanged, for the cases where you want multiple runs.
1624
1630
1625 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1631 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1626 bug where Python2.2 crashes with exec'ing code which does not end
1632 bug where Python2.2 crashes with exec'ing code which does not end
1627 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1633 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1628 before.
1634 before.
1629
1635
1630 2004-12-10 Fernando Perez <fperez@colorado.edu>
1636 2004-12-10 Fernando Perez <fperez@colorado.edu>
1631
1637
1632 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1638 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1633 -t to -T, to accomodate the new -t flag in %run (the %run and
1639 -t to -T, to accomodate the new -t flag in %run (the %run and
1634 %prun options are kind of intermixed, and it's not easy to change
1640 %prun options are kind of intermixed, and it's not easy to change
1635 this with the limitations of python's getopt).
1641 this with the limitations of python's getopt).
1636
1642
1637 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1643 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1638 the execution of scripts. It's not as fine-tuned as timeit.py,
1644 the execution of scripts. It's not as fine-tuned as timeit.py,
1639 but it works from inside ipython (and under 2.2, which lacks
1645 but it works from inside ipython (and under 2.2, which lacks
1640 timeit.py). Optionally a number of runs > 1 can be given for
1646 timeit.py). Optionally a number of runs > 1 can be given for
1641 timing very short-running code.
1647 timing very short-running code.
1642
1648
1643 * IPython/genutils.py (uniq_stable): new routine which returns a
1649 * IPython/genutils.py (uniq_stable): new routine which returns a
1644 list of unique elements in any iterable, but in stable order of
1650 list of unique elements in any iterable, but in stable order of
1645 appearance. I needed this for the ultraTB fixes, and it's a handy
1651 appearance. I needed this for the ultraTB fixes, and it's a handy
1646 utility.
1652 utility.
1647
1653
1648 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1654 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1649 dotted names in Verbose exceptions. This had been broken since
1655 dotted names in Verbose exceptions. This had been broken since
1650 the very start, now x.y will properly be printed in a Verbose
1656 the very start, now x.y will properly be printed in a Verbose
1651 traceback, instead of x being shown and y appearing always as an
1657 traceback, instead of x being shown and y appearing always as an
1652 'undefined global'. Getting this to work was a bit tricky,
1658 'undefined global'. Getting this to work was a bit tricky,
1653 because by default python tokenizers are stateless. Saved by
1659 because by default python tokenizers are stateless. Saved by
1654 python's ability to easily add a bit of state to an arbitrary
1660 python's ability to easily add a bit of state to an arbitrary
1655 function (without needing to build a full-blown callable object).
1661 function (without needing to build a full-blown callable object).
1656
1662
1657 Also big cleanup of this code, which had horrendous runtime
1663 Also big cleanup of this code, which had horrendous runtime
1658 lookups of zillions of attributes for colorization. Moved all
1664 lookups of zillions of attributes for colorization. Moved all
1659 this code into a few templates, which make it cleaner and quicker.
1665 this code into a few templates, which make it cleaner and quicker.
1660
1666
1661 Printout quality was also improved for Verbose exceptions: one
1667 Printout quality was also improved for Verbose exceptions: one
1662 variable per line, and memory addresses are printed (this can be
1668 variable per line, and memory addresses are printed (this can be
1663 quite handy in nasty debugging situations, which is what Verbose
1669 quite handy in nasty debugging situations, which is what Verbose
1664 is for).
1670 is for).
1665
1671
1666 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1672 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1667 the command line as scripts to be loaded by embedded instances.
1673 the command line as scripts to be loaded by embedded instances.
1668 Doing so has the potential for an infinite recursion if there are
1674 Doing so has the potential for an infinite recursion if there are
1669 exceptions thrown in the process. This fixes a strange crash
1675 exceptions thrown in the process. This fixes a strange crash
1670 reported by Philippe MULLER <muller-AT-irit.fr>.
1676 reported by Philippe MULLER <muller-AT-irit.fr>.
1671
1677
1672 2004-12-09 Fernando Perez <fperez@colorado.edu>
1678 2004-12-09 Fernando Perez <fperez@colorado.edu>
1673
1679
1674 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1680 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1675 to reflect new names in matplotlib, which now expose the
1681 to reflect new names in matplotlib, which now expose the
1676 matlab-compatible interface via a pylab module instead of the
1682 matlab-compatible interface via a pylab module instead of the
1677 'matlab' name. The new code is backwards compatible, so users of
1683 'matlab' name. The new code is backwards compatible, so users of
1678 all matplotlib versions are OK. Patch by J. Hunter.
1684 all matplotlib versions are OK. Patch by J. Hunter.
1679
1685
1680 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1686 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1681 of __init__ docstrings for instances (class docstrings are already
1687 of __init__ docstrings for instances (class docstrings are already
1682 automatically printed). Instances with customized docstrings
1688 automatically printed). Instances with customized docstrings
1683 (indep. of the class) are also recognized and all 3 separate
1689 (indep. of the class) are also recognized and all 3 separate
1684 docstrings are printed (instance, class, constructor). After some
1690 docstrings are printed (instance, class, constructor). After some
1685 comments/suggestions by J. Hunter.
1691 comments/suggestions by J. Hunter.
1686
1692
1687 2004-12-05 Fernando Perez <fperez@colorado.edu>
1693 2004-12-05 Fernando Perez <fperez@colorado.edu>
1688
1694
1689 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1695 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1690 warnings when tab-completion fails and triggers an exception.
1696 warnings when tab-completion fails and triggers an exception.
1691
1697
1692 2004-12-03 Fernando Perez <fperez@colorado.edu>
1698 2004-12-03 Fernando Perez <fperez@colorado.edu>
1693
1699
1694 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1700 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1695 be triggered when using 'run -p'. An incorrect option flag was
1701 be triggered when using 'run -p'. An incorrect option flag was
1696 being set ('d' instead of 'D').
1702 being set ('d' instead of 'D').
1697 (manpage): fix missing escaped \- sign.
1703 (manpage): fix missing escaped \- sign.
1698
1704
1699 2004-11-30 *** Released version 0.6.5
1705 2004-11-30 *** Released version 0.6.5
1700
1706
1701 2004-11-30 Fernando Perez <fperez@colorado.edu>
1707 2004-11-30 Fernando Perez <fperez@colorado.edu>
1702
1708
1703 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1709 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1704 setting with -d option.
1710 setting with -d option.
1705
1711
1706 * setup.py (docfiles): Fix problem where the doc glob I was using
1712 * setup.py (docfiles): Fix problem where the doc glob I was using
1707 was COMPLETELY BROKEN. It was giving the right files by pure
1713 was COMPLETELY BROKEN. It was giving the right files by pure
1708 accident, but failed once I tried to include ipython.el. Note:
1714 accident, but failed once I tried to include ipython.el. Note:
1709 glob() does NOT allow you to do exclusion on multiple endings!
1715 glob() does NOT allow you to do exclusion on multiple endings!
1710
1716
1711 2004-11-29 Fernando Perez <fperez@colorado.edu>
1717 2004-11-29 Fernando Perez <fperez@colorado.edu>
1712
1718
1713 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1719 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1714 the manpage as the source. Better formatting & consistency.
1720 the manpage as the source. Better formatting & consistency.
1715
1721
1716 * IPython/Magic.py (magic_run): Added new -d option, to run
1722 * IPython/Magic.py (magic_run): Added new -d option, to run
1717 scripts under the control of the python pdb debugger. Note that
1723 scripts under the control of the python pdb debugger. Note that
1718 this required changing the %prun option -d to -D, to avoid a clash
1724 this required changing the %prun option -d to -D, to avoid a clash
1719 (since %run must pass options to %prun, and getopt is too dumb to
1725 (since %run must pass options to %prun, and getopt is too dumb to
1720 handle options with string values with embedded spaces). Thanks
1726 handle options with string values with embedded spaces). Thanks
1721 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1727 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1722 (magic_who_ls): added type matching to %who and %whos, so that one
1728 (magic_who_ls): added type matching to %who and %whos, so that one
1723 can filter their output to only include variables of certain
1729 can filter their output to only include variables of certain
1724 types. Another suggestion by Matthew.
1730 types. Another suggestion by Matthew.
1725 (magic_whos): Added memory summaries in kb and Mb for arrays.
1731 (magic_whos): Added memory summaries in kb and Mb for arrays.
1726 (magic_who): Improve formatting (break lines every 9 vars).
1732 (magic_who): Improve formatting (break lines every 9 vars).
1727
1733
1728 2004-11-28 Fernando Perez <fperez@colorado.edu>
1734 2004-11-28 Fernando Perez <fperez@colorado.edu>
1729
1735
1730 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1736 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1731 cache when empty lines were present.
1737 cache when empty lines were present.
1732
1738
1733 2004-11-24 Fernando Perez <fperez@colorado.edu>
1739 2004-11-24 Fernando Perez <fperez@colorado.edu>
1734
1740
1735 * IPython/usage.py (__doc__): document the re-activated threading
1741 * IPython/usage.py (__doc__): document the re-activated threading
1736 options for WX and GTK.
1742 options for WX and GTK.
1737
1743
1738 2004-11-23 Fernando Perez <fperez@colorado.edu>
1744 2004-11-23 Fernando Perez <fperez@colorado.edu>
1739
1745
1740 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1746 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1741 the -wthread and -gthread options, along with a new -tk one to try
1747 the -wthread and -gthread options, along with a new -tk one to try
1742 and coordinate Tk threading with wx/gtk. The tk support is very
1748 and coordinate Tk threading with wx/gtk. The tk support is very
1743 platform dependent, since it seems to require Tcl and Tk to be
1749 platform dependent, since it seems to require Tcl and Tk to be
1744 built with threads (Fedora1/2 appears NOT to have it, but in
1750 built with threads (Fedora1/2 appears NOT to have it, but in
1745 Prabhu's Debian boxes it works OK). But even with some Tk
1751 Prabhu's Debian boxes it works OK). But even with some Tk
1746 limitations, this is a great improvement.
1752 limitations, this is a great improvement.
1747
1753
1748 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1754 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1749 info in user prompts. Patch by Prabhu.
1755 info in user prompts. Patch by Prabhu.
1750
1756
1751 2004-11-18 Fernando Perez <fperez@colorado.edu>
1757 2004-11-18 Fernando Perez <fperez@colorado.edu>
1752
1758
1753 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1759 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1754 EOFErrors and bail, to avoid infinite loops if a non-terminating
1760 EOFErrors and bail, to avoid infinite loops if a non-terminating
1755 file is fed into ipython. Patch submitted in issue 19 by user,
1761 file is fed into ipython. Patch submitted in issue 19 by user,
1756 many thanks.
1762 many thanks.
1757
1763
1758 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1764 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1759 autoquote/parens in continuation prompts, which can cause lots of
1765 autoquote/parens in continuation prompts, which can cause lots of
1760 problems. Closes roundup issue 20.
1766 problems. Closes roundup issue 20.
1761
1767
1762 2004-11-17 Fernando Perez <fperez@colorado.edu>
1768 2004-11-17 Fernando Perez <fperez@colorado.edu>
1763
1769
1764 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1770 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1765 reported as debian bug #280505. I'm not sure my local changelog
1771 reported as debian bug #280505. I'm not sure my local changelog
1766 entry has the proper debian format (Jack?).
1772 entry has the proper debian format (Jack?).
1767
1773
1768 2004-11-08 *** Released version 0.6.4
1774 2004-11-08 *** Released version 0.6.4
1769
1775
1770 2004-11-08 Fernando Perez <fperez@colorado.edu>
1776 2004-11-08 Fernando Perez <fperez@colorado.edu>
1771
1777
1772 * IPython/iplib.py (init_readline): Fix exit message for Windows
1778 * IPython/iplib.py (init_readline): Fix exit message for Windows
1773 when readline is active. Thanks to a report by Eric Jones
1779 when readline is active. Thanks to a report by Eric Jones
1774 <eric-AT-enthought.com>.
1780 <eric-AT-enthought.com>.
1775
1781
1776 2004-11-07 Fernando Perez <fperez@colorado.edu>
1782 2004-11-07 Fernando Perez <fperez@colorado.edu>
1777
1783
1778 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1784 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1779 sometimes seen by win2k/cygwin users.
1785 sometimes seen by win2k/cygwin users.
1780
1786
1781 2004-11-06 Fernando Perez <fperez@colorado.edu>
1787 2004-11-06 Fernando Perez <fperez@colorado.edu>
1782
1788
1783 * IPython/iplib.py (interact): Change the handling of %Exit from
1789 * IPython/iplib.py (interact): Change the handling of %Exit from
1784 trying to propagate a SystemExit to an internal ipython flag.
1790 trying to propagate a SystemExit to an internal ipython flag.
1785 This is less elegant than using Python's exception mechanism, but
1791 This is less elegant than using Python's exception mechanism, but
1786 I can't get that to work reliably with threads, so under -pylab
1792 I can't get that to work reliably with threads, so under -pylab
1787 %Exit was hanging IPython. Cross-thread exception handling is
1793 %Exit was hanging IPython. Cross-thread exception handling is
1788 really a bitch. Thaks to a bug report by Stephen Walton
1794 really a bitch. Thaks to a bug report by Stephen Walton
1789 <stephen.walton-AT-csun.edu>.
1795 <stephen.walton-AT-csun.edu>.
1790
1796
1791 2004-11-04 Fernando Perez <fperez@colorado.edu>
1797 2004-11-04 Fernando Perez <fperez@colorado.edu>
1792
1798
1793 * IPython/iplib.py (raw_input_original): store a pointer to the
1799 * IPython/iplib.py (raw_input_original): store a pointer to the
1794 true raw_input to harden against code which can modify it
1800 true raw_input to harden against code which can modify it
1795 (wx.py.PyShell does this and would otherwise crash ipython).
1801 (wx.py.PyShell does this and would otherwise crash ipython).
1796 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1802 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1797
1803
1798 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1804 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1799 Ctrl-C problem, which does not mess up the input line.
1805 Ctrl-C problem, which does not mess up the input line.
1800
1806
1801 2004-11-03 Fernando Perez <fperez@colorado.edu>
1807 2004-11-03 Fernando Perez <fperez@colorado.edu>
1802
1808
1803 * IPython/Release.py: Changed licensing to BSD, in all files.
1809 * IPython/Release.py: Changed licensing to BSD, in all files.
1804 (name): lowercase name for tarball/RPM release.
1810 (name): lowercase name for tarball/RPM release.
1805
1811
1806 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1812 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1807 use throughout ipython.
1813 use throughout ipython.
1808
1814
1809 * IPython/Magic.py (Magic._ofind): Switch to using the new
1815 * IPython/Magic.py (Magic._ofind): Switch to using the new
1810 OInspect.getdoc() function.
1816 OInspect.getdoc() function.
1811
1817
1812 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1818 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1813 of the line currently being canceled via Ctrl-C. It's extremely
1819 of the line currently being canceled via Ctrl-C. It's extremely
1814 ugly, but I don't know how to do it better (the problem is one of
1820 ugly, but I don't know how to do it better (the problem is one of
1815 handling cross-thread exceptions).
1821 handling cross-thread exceptions).
1816
1822
1817 2004-10-28 Fernando Perez <fperez@colorado.edu>
1823 2004-10-28 Fernando Perez <fperez@colorado.edu>
1818
1824
1819 * IPython/Shell.py (signal_handler): add signal handlers to trap
1825 * IPython/Shell.py (signal_handler): add signal handlers to trap
1820 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1826 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1821 report by Francesc Alted.
1827 report by Francesc Alted.
1822
1828
1823 2004-10-21 Fernando Perez <fperez@colorado.edu>
1829 2004-10-21 Fernando Perez <fperez@colorado.edu>
1824
1830
1825 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1831 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1826 to % for pysh syntax extensions.
1832 to % for pysh syntax extensions.
1827
1833
1828 2004-10-09 Fernando Perez <fperez@colorado.edu>
1834 2004-10-09 Fernando Perez <fperez@colorado.edu>
1829
1835
1830 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1836 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1831 arrays to print a more useful summary, without calling str(arr).
1837 arrays to print a more useful summary, without calling str(arr).
1832 This avoids the problem of extremely lengthy computations which
1838 This avoids the problem of extremely lengthy computations which
1833 occur if arr is large, and appear to the user as a system lockup
1839 occur if arr is large, and appear to the user as a system lockup
1834 with 100% cpu activity. After a suggestion by Kristian Sandberg
1840 with 100% cpu activity. After a suggestion by Kristian Sandberg
1835 <Kristian.Sandberg@colorado.edu>.
1841 <Kristian.Sandberg@colorado.edu>.
1836 (Magic.__init__): fix bug in global magic escapes not being
1842 (Magic.__init__): fix bug in global magic escapes not being
1837 correctly set.
1843 correctly set.
1838
1844
1839 2004-10-08 Fernando Perez <fperez@colorado.edu>
1845 2004-10-08 Fernando Perez <fperez@colorado.edu>
1840
1846
1841 * IPython/Magic.py (__license__): change to absolute imports of
1847 * IPython/Magic.py (__license__): change to absolute imports of
1842 ipython's own internal packages, to start adapting to the absolute
1848 ipython's own internal packages, to start adapting to the absolute
1843 import requirement of PEP-328.
1849 import requirement of PEP-328.
1844
1850
1845 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1851 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1846 files, and standardize author/license marks through the Release
1852 files, and standardize author/license marks through the Release
1847 module instead of having per/file stuff (except for files with
1853 module instead of having per/file stuff (except for files with
1848 particular licenses, like the MIT/PSF-licensed codes).
1854 particular licenses, like the MIT/PSF-licensed codes).
1849
1855
1850 * IPython/Debugger.py: remove dead code for python 2.1
1856 * IPython/Debugger.py: remove dead code for python 2.1
1851
1857
1852 2004-10-04 Fernando Perez <fperez@colorado.edu>
1858 2004-10-04 Fernando Perez <fperez@colorado.edu>
1853
1859
1854 * IPython/iplib.py (ipmagic): New function for accessing magics
1860 * IPython/iplib.py (ipmagic): New function for accessing magics
1855 via a normal python function call.
1861 via a normal python function call.
1856
1862
1857 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1863 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1858 from '@' to '%', to accomodate the new @decorator syntax of python
1864 from '@' to '%', to accomodate the new @decorator syntax of python
1859 2.4.
1865 2.4.
1860
1866
1861 2004-09-29 Fernando Perez <fperez@colorado.edu>
1867 2004-09-29 Fernando Perez <fperez@colorado.edu>
1862
1868
1863 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1869 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1864 matplotlib.use to prevent running scripts which try to switch
1870 matplotlib.use to prevent running scripts which try to switch
1865 interactive backends from within ipython. This will just crash
1871 interactive backends from within ipython. This will just crash
1866 the python interpreter, so we can't allow it (but a detailed error
1872 the python interpreter, so we can't allow it (but a detailed error
1867 is given to the user).
1873 is given to the user).
1868
1874
1869 2004-09-28 Fernando Perez <fperez@colorado.edu>
1875 2004-09-28 Fernando Perez <fperez@colorado.edu>
1870
1876
1871 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1877 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1872 matplotlib-related fixes so that using @run with non-matplotlib
1878 matplotlib-related fixes so that using @run with non-matplotlib
1873 scripts doesn't pop up spurious plot windows. This requires
1879 scripts doesn't pop up spurious plot windows. This requires
1874 matplotlib >= 0.63, where I had to make some changes as well.
1880 matplotlib >= 0.63, where I had to make some changes as well.
1875
1881
1876 * IPython/ipmaker.py (make_IPython): update version requirement to
1882 * IPython/ipmaker.py (make_IPython): update version requirement to
1877 python 2.2.
1883 python 2.2.
1878
1884
1879 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1885 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1880 banner arg for embedded customization.
1886 banner arg for embedded customization.
1881
1887
1882 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1888 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1883 explicit uses of __IP as the IPython's instance name. Now things
1889 explicit uses of __IP as the IPython's instance name. Now things
1884 are properly handled via the shell.name value. The actual code
1890 are properly handled via the shell.name value. The actual code
1885 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1891 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1886 is much better than before. I'll clean things completely when the
1892 is much better than before. I'll clean things completely when the
1887 magic stuff gets a real overhaul.
1893 magic stuff gets a real overhaul.
1888
1894
1889 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1895 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1890 minor changes to debian dir.
1896 minor changes to debian dir.
1891
1897
1892 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1898 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1893 pointer to the shell itself in the interactive namespace even when
1899 pointer to the shell itself in the interactive namespace even when
1894 a user-supplied dict is provided. This is needed for embedding
1900 a user-supplied dict is provided. This is needed for embedding
1895 purposes (found by tests with Michel Sanner).
1901 purposes (found by tests with Michel Sanner).
1896
1902
1897 2004-09-27 Fernando Perez <fperez@colorado.edu>
1903 2004-09-27 Fernando Perez <fperez@colorado.edu>
1898
1904
1899 * IPython/UserConfig/ipythonrc: remove []{} from
1905 * IPython/UserConfig/ipythonrc: remove []{} from
1900 readline_remove_delims, so that things like [modname.<TAB> do
1906 readline_remove_delims, so that things like [modname.<TAB> do
1901 proper completion. This disables [].TAB, but that's a less common
1907 proper completion. This disables [].TAB, but that's a less common
1902 case than module names in list comprehensions, for example.
1908 case than module names in list comprehensions, for example.
1903 Thanks to a report by Andrea Riciputi.
1909 Thanks to a report by Andrea Riciputi.
1904
1910
1905 2004-09-09 Fernando Perez <fperez@colorado.edu>
1911 2004-09-09 Fernando Perez <fperez@colorado.edu>
1906
1912
1907 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1913 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1908 blocking problems in win32 and osx. Fix by John.
1914 blocking problems in win32 and osx. Fix by John.
1909
1915
1910 2004-09-08 Fernando Perez <fperez@colorado.edu>
1916 2004-09-08 Fernando Perez <fperez@colorado.edu>
1911
1917
1912 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1918 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1913 for Win32 and OSX. Fix by John Hunter.
1919 for Win32 and OSX. Fix by John Hunter.
1914
1920
1915 2004-08-30 *** Released version 0.6.3
1921 2004-08-30 *** Released version 0.6.3
1916
1922
1917 2004-08-30 Fernando Perez <fperez@colorado.edu>
1923 2004-08-30 Fernando Perez <fperez@colorado.edu>
1918
1924
1919 * setup.py (isfile): Add manpages to list of dependent files to be
1925 * setup.py (isfile): Add manpages to list of dependent files to be
1920 updated.
1926 updated.
1921
1927
1922 2004-08-27 Fernando Perez <fperez@colorado.edu>
1928 2004-08-27 Fernando Perez <fperez@colorado.edu>
1923
1929
1924 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1930 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1925 for now. They don't really work with standalone WX/GTK code
1931 for now. They don't really work with standalone WX/GTK code
1926 (though matplotlib IS working fine with both of those backends).
1932 (though matplotlib IS working fine with both of those backends).
1927 This will neeed much more testing. I disabled most things with
1933 This will neeed much more testing. I disabled most things with
1928 comments, so turning it back on later should be pretty easy.
1934 comments, so turning it back on later should be pretty easy.
1929
1935
1930 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1936 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1931 autocalling of expressions like r'foo', by modifying the line
1937 autocalling of expressions like r'foo', by modifying the line
1932 split regexp. Closes
1938 split regexp. Closes
1933 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1939 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1934 Riley <ipythonbugs-AT-sabi.net>.
1940 Riley <ipythonbugs-AT-sabi.net>.
1935 (InteractiveShell.mainloop): honor --nobanner with banner
1941 (InteractiveShell.mainloop): honor --nobanner with banner
1936 extensions.
1942 extensions.
1937
1943
1938 * IPython/Shell.py: Significant refactoring of all classes, so
1944 * IPython/Shell.py: Significant refactoring of all classes, so
1939 that we can really support ALL matplotlib backends and threading
1945 that we can really support ALL matplotlib backends and threading
1940 models (John spotted a bug with Tk which required this). Now we
1946 models (John spotted a bug with Tk which required this). Now we
1941 should support single-threaded, WX-threads and GTK-threads, both
1947 should support single-threaded, WX-threads and GTK-threads, both
1942 for generic code and for matplotlib.
1948 for generic code and for matplotlib.
1943
1949
1944 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1950 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1945 -pylab, to simplify things for users. Will also remove the pylab
1951 -pylab, to simplify things for users. Will also remove the pylab
1946 profile, since now all of matplotlib configuration is directly
1952 profile, since now all of matplotlib configuration is directly
1947 handled here. This also reduces startup time.
1953 handled here. This also reduces startup time.
1948
1954
1949 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1955 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1950 shell wasn't being correctly called. Also in IPShellWX.
1956 shell wasn't being correctly called. Also in IPShellWX.
1951
1957
1952 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1958 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1953 fine-tune banner.
1959 fine-tune banner.
1954
1960
1955 * IPython/numutils.py (spike): Deprecate these spike functions,
1961 * IPython/numutils.py (spike): Deprecate these spike functions,
1956 delete (long deprecated) gnuplot_exec handler.
1962 delete (long deprecated) gnuplot_exec handler.
1957
1963
1958 2004-08-26 Fernando Perez <fperez@colorado.edu>
1964 2004-08-26 Fernando Perez <fperez@colorado.edu>
1959
1965
1960 * ipython.1: Update for threading options, plus some others which
1966 * ipython.1: Update for threading options, plus some others which
1961 were missing.
1967 were missing.
1962
1968
1963 * IPython/ipmaker.py (__call__): Added -wthread option for
1969 * IPython/ipmaker.py (__call__): Added -wthread option for
1964 wxpython thread handling. Make sure threading options are only
1970 wxpython thread handling. Make sure threading options are only
1965 valid at the command line.
1971 valid at the command line.
1966
1972
1967 * scripts/ipython: moved shell selection into a factory function
1973 * scripts/ipython: moved shell selection into a factory function
1968 in Shell.py, to keep the starter script to a minimum.
1974 in Shell.py, to keep the starter script to a minimum.
1969
1975
1970 2004-08-25 Fernando Perez <fperez@colorado.edu>
1976 2004-08-25 Fernando Perez <fperez@colorado.edu>
1971
1977
1972 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1978 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1973 John. Along with some recent changes he made to matplotlib, the
1979 John. Along with some recent changes he made to matplotlib, the
1974 next versions of both systems should work very well together.
1980 next versions of both systems should work very well together.
1975
1981
1976 2004-08-24 Fernando Perez <fperez@colorado.edu>
1982 2004-08-24 Fernando Perez <fperez@colorado.edu>
1977
1983
1978 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1984 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1979 tried to switch the profiling to using hotshot, but I'm getting
1985 tried to switch the profiling to using hotshot, but I'm getting
1980 strange errors from prof.runctx() there. I may be misreading the
1986 strange errors from prof.runctx() there. I may be misreading the
1981 docs, but it looks weird. For now the profiling code will
1987 docs, but it looks weird. For now the profiling code will
1982 continue to use the standard profiler.
1988 continue to use the standard profiler.
1983
1989
1984 2004-08-23 Fernando Perez <fperez@colorado.edu>
1990 2004-08-23 Fernando Perez <fperez@colorado.edu>
1985
1991
1986 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1992 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1987 threaded shell, by John Hunter. It's not quite ready yet, but
1993 threaded shell, by John Hunter. It's not quite ready yet, but
1988 close.
1994 close.
1989
1995
1990 2004-08-22 Fernando Perez <fperez@colorado.edu>
1996 2004-08-22 Fernando Perez <fperez@colorado.edu>
1991
1997
1992 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1998 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1993 in Magic and ultraTB.
1999 in Magic and ultraTB.
1994
2000
1995 * ipython.1: document threading options in manpage.
2001 * ipython.1: document threading options in manpage.
1996
2002
1997 * scripts/ipython: Changed name of -thread option to -gthread,
2003 * scripts/ipython: Changed name of -thread option to -gthread,
1998 since this is GTK specific. I want to leave the door open for a
2004 since this is GTK specific. I want to leave the door open for a
1999 -wthread option for WX, which will most likely be necessary. This
2005 -wthread option for WX, which will most likely be necessary. This
2000 change affects usage and ipmaker as well.
2006 change affects usage and ipmaker as well.
2001
2007
2002 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2008 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2003 handle the matplotlib shell issues. Code by John Hunter
2009 handle the matplotlib shell issues. Code by John Hunter
2004 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2010 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2005 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2011 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2006 broken (and disabled for end users) for now, but it puts the
2012 broken (and disabled for end users) for now, but it puts the
2007 infrastructure in place.
2013 infrastructure in place.
2008
2014
2009 2004-08-21 Fernando Perez <fperez@colorado.edu>
2015 2004-08-21 Fernando Perez <fperez@colorado.edu>
2010
2016
2011 * ipythonrc-pylab: Add matplotlib support.
2017 * ipythonrc-pylab: Add matplotlib support.
2012
2018
2013 * matplotlib_config.py: new files for matplotlib support, part of
2019 * matplotlib_config.py: new files for matplotlib support, part of
2014 the pylab profile.
2020 the pylab profile.
2015
2021
2016 * IPython/usage.py (__doc__): documented the threading options.
2022 * IPython/usage.py (__doc__): documented the threading options.
2017
2023
2018 2004-08-20 Fernando Perez <fperez@colorado.edu>
2024 2004-08-20 Fernando Perez <fperez@colorado.edu>
2019
2025
2020 * ipython: Modified the main calling routine to handle the -thread
2026 * ipython: Modified the main calling routine to handle the -thread
2021 and -mpthread options. This needs to be done as a top-level hack,
2027 and -mpthread options. This needs to be done as a top-level hack,
2022 because it determines which class to instantiate for IPython
2028 because it determines which class to instantiate for IPython
2023 itself.
2029 itself.
2024
2030
2025 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2031 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2026 classes to support multithreaded GTK operation without blocking,
2032 classes to support multithreaded GTK operation without blocking,
2027 and matplotlib with all backends. This is a lot of still very
2033 and matplotlib with all backends. This is a lot of still very
2028 experimental code, and threads are tricky. So it may still have a
2034 experimental code, and threads are tricky. So it may still have a
2029 few rough edges... This code owes a lot to
2035 few rough edges... This code owes a lot to
2030 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2036 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2031 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2037 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2032 to John Hunter for all the matplotlib work.
2038 to John Hunter for all the matplotlib work.
2033
2039
2034 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2040 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2035 options for gtk thread and matplotlib support.
2041 options for gtk thread and matplotlib support.
2036
2042
2037 2004-08-16 Fernando Perez <fperez@colorado.edu>
2043 2004-08-16 Fernando Perez <fperez@colorado.edu>
2038
2044
2039 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2045 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2040 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2046 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2041 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2047 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2042
2048
2043 2004-08-11 Fernando Perez <fperez@colorado.edu>
2049 2004-08-11 Fernando Perez <fperez@colorado.edu>
2044
2050
2045 * setup.py (isfile): Fix build so documentation gets updated for
2051 * setup.py (isfile): Fix build so documentation gets updated for
2046 rpms (it was only done for .tgz builds).
2052 rpms (it was only done for .tgz builds).
2047
2053
2048 2004-08-10 Fernando Perez <fperez@colorado.edu>
2054 2004-08-10 Fernando Perez <fperez@colorado.edu>
2049
2055
2050 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2056 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2051
2057
2052 * iplib.py : Silence syntax error exceptions in tab-completion.
2058 * iplib.py : Silence syntax error exceptions in tab-completion.
2053
2059
2054 2004-08-05 Fernando Perez <fperez@colorado.edu>
2060 2004-08-05 Fernando Perez <fperez@colorado.edu>
2055
2061
2056 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2062 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2057 'color off' mark for continuation prompts. This was causing long
2063 'color off' mark for continuation prompts. This was causing long
2058 continuation lines to mis-wrap.
2064 continuation lines to mis-wrap.
2059
2065
2060 2004-08-01 Fernando Perez <fperez@colorado.edu>
2066 2004-08-01 Fernando Perez <fperez@colorado.edu>
2061
2067
2062 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2068 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2063 for building ipython to be a parameter. All this is necessary
2069 for building ipython to be a parameter. All this is necessary
2064 right now to have a multithreaded version, but this insane
2070 right now to have a multithreaded version, but this insane
2065 non-design will be cleaned up soon. For now, it's a hack that
2071 non-design will be cleaned up soon. For now, it's a hack that
2066 works.
2072 works.
2067
2073
2068 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2074 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2069 args in various places. No bugs so far, but it's a dangerous
2075 args in various places. No bugs so far, but it's a dangerous
2070 practice.
2076 practice.
2071
2077
2072 2004-07-31 Fernando Perez <fperez@colorado.edu>
2078 2004-07-31 Fernando Perez <fperez@colorado.edu>
2073
2079
2074 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2080 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2075 fix completion of files with dots in their names under most
2081 fix completion of files with dots in their names under most
2076 profiles (pysh was OK because the completion order is different).
2082 profiles (pysh was OK because the completion order is different).
2077
2083
2078 2004-07-27 Fernando Perez <fperez@colorado.edu>
2084 2004-07-27 Fernando Perez <fperez@colorado.edu>
2079
2085
2080 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2086 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2081 keywords manually, b/c the one in keyword.py was removed in python
2087 keywords manually, b/c the one in keyword.py was removed in python
2082 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2088 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2083 This is NOT a bug under python 2.3 and earlier.
2089 This is NOT a bug under python 2.3 and earlier.
2084
2090
2085 2004-07-26 Fernando Perez <fperez@colorado.edu>
2091 2004-07-26 Fernando Perez <fperez@colorado.edu>
2086
2092
2087 * IPython/ultraTB.py (VerboseTB.text): Add another
2093 * IPython/ultraTB.py (VerboseTB.text): Add another
2088 linecache.checkcache() call to try to prevent inspect.py from
2094 linecache.checkcache() call to try to prevent inspect.py from
2089 crashing under python 2.3. I think this fixes
2095 crashing under python 2.3. I think this fixes
2090 http://www.scipy.net/roundup/ipython/issue17.
2096 http://www.scipy.net/roundup/ipython/issue17.
2091
2097
2092 2004-07-26 *** Released version 0.6.2
2098 2004-07-26 *** Released version 0.6.2
2093
2099
2094 2004-07-26 Fernando Perez <fperez@colorado.edu>
2100 2004-07-26 Fernando Perez <fperez@colorado.edu>
2095
2101
2096 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2102 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2097 fail for any number.
2103 fail for any number.
2098 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2104 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2099 empty bookmarks.
2105 empty bookmarks.
2100
2106
2101 2004-07-26 *** Released version 0.6.1
2107 2004-07-26 *** Released version 0.6.1
2102
2108
2103 2004-07-26 Fernando Perez <fperez@colorado.edu>
2109 2004-07-26 Fernando Perez <fperez@colorado.edu>
2104
2110
2105 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2111 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2106
2112
2107 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2113 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2108 escaping '()[]{}' in filenames.
2114 escaping '()[]{}' in filenames.
2109
2115
2110 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2116 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2111 Python 2.2 users who lack a proper shlex.split.
2117 Python 2.2 users who lack a proper shlex.split.
2112
2118
2113 2004-07-19 Fernando Perez <fperez@colorado.edu>
2119 2004-07-19 Fernando Perez <fperez@colorado.edu>
2114
2120
2115 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2121 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2116 for reading readline's init file. I follow the normal chain:
2122 for reading readline's init file. I follow the normal chain:
2117 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2123 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2118 report by Mike Heeter. This closes
2124 report by Mike Heeter. This closes
2119 http://www.scipy.net/roundup/ipython/issue16.
2125 http://www.scipy.net/roundup/ipython/issue16.
2120
2126
2121 2004-07-18 Fernando Perez <fperez@colorado.edu>
2127 2004-07-18 Fernando Perez <fperez@colorado.edu>
2122
2128
2123 * IPython/iplib.py (__init__): Add better handling of '\' under
2129 * IPython/iplib.py (__init__): Add better handling of '\' under
2124 Win32 for filenames. After a patch by Ville.
2130 Win32 for filenames. After a patch by Ville.
2125
2131
2126 2004-07-17 Fernando Perez <fperez@colorado.edu>
2132 2004-07-17 Fernando Perez <fperez@colorado.edu>
2127
2133
2128 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2134 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2129 autocalling would be triggered for 'foo is bar' if foo is
2135 autocalling would be triggered for 'foo is bar' if foo is
2130 callable. I also cleaned up the autocall detection code to use a
2136 callable. I also cleaned up the autocall detection code to use a
2131 regexp, which is faster. Bug reported by Alexander Schmolck.
2137 regexp, which is faster. Bug reported by Alexander Schmolck.
2132
2138
2133 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2139 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2134 '?' in them would confuse the help system. Reported by Alex
2140 '?' in them would confuse the help system. Reported by Alex
2135 Schmolck.
2141 Schmolck.
2136
2142
2137 2004-07-16 Fernando Perez <fperez@colorado.edu>
2143 2004-07-16 Fernando Perez <fperez@colorado.edu>
2138
2144
2139 * IPython/GnuplotInteractive.py (__all__): added plot2.
2145 * IPython/GnuplotInteractive.py (__all__): added plot2.
2140
2146
2141 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2147 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2142 plotting dictionaries, lists or tuples of 1d arrays.
2148 plotting dictionaries, lists or tuples of 1d arrays.
2143
2149
2144 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2150 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2145 optimizations.
2151 optimizations.
2146
2152
2147 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2153 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2148 the information which was there from Janko's original IPP code:
2154 the information which was there from Janko's original IPP code:
2149
2155
2150 03.05.99 20:53 porto.ifm.uni-kiel.de
2156 03.05.99 20:53 porto.ifm.uni-kiel.de
2151 --Started changelog.
2157 --Started changelog.
2152 --make clear do what it say it does
2158 --make clear do what it say it does
2153 --added pretty output of lines from inputcache
2159 --added pretty output of lines from inputcache
2154 --Made Logger a mixin class, simplifies handling of switches
2160 --Made Logger a mixin class, simplifies handling of switches
2155 --Added own completer class. .string<TAB> expands to last history
2161 --Added own completer class. .string<TAB> expands to last history
2156 line which starts with string. The new expansion is also present
2162 line which starts with string. The new expansion is also present
2157 with Ctrl-r from the readline library. But this shows, who this
2163 with Ctrl-r from the readline library. But this shows, who this
2158 can be done for other cases.
2164 can be done for other cases.
2159 --Added convention that all shell functions should accept a
2165 --Added convention that all shell functions should accept a
2160 parameter_string This opens the door for different behaviour for
2166 parameter_string This opens the door for different behaviour for
2161 each function. @cd is a good example of this.
2167 each function. @cd is a good example of this.
2162
2168
2163 04.05.99 12:12 porto.ifm.uni-kiel.de
2169 04.05.99 12:12 porto.ifm.uni-kiel.de
2164 --added logfile rotation
2170 --added logfile rotation
2165 --added new mainloop method which freezes first the namespace
2171 --added new mainloop method which freezes first the namespace
2166
2172
2167 07.05.99 21:24 porto.ifm.uni-kiel.de
2173 07.05.99 21:24 porto.ifm.uni-kiel.de
2168 --added the docreader classes. Now there is a help system.
2174 --added the docreader classes. Now there is a help system.
2169 -This is only a first try. Currently it's not easy to put new
2175 -This is only a first try. Currently it's not easy to put new
2170 stuff in the indices. But this is the way to go. Info would be
2176 stuff in the indices. But this is the way to go. Info would be
2171 better, but HTML is every where and not everybody has an info
2177 better, but HTML is every where and not everybody has an info
2172 system installed and it's not so easy to change html-docs to info.
2178 system installed and it's not so easy to change html-docs to info.
2173 --added global logfile option
2179 --added global logfile option
2174 --there is now a hook for object inspection method pinfo needs to
2180 --there is now a hook for object inspection method pinfo needs to
2175 be provided for this. Can be reached by two '??'.
2181 be provided for this. Can be reached by two '??'.
2176
2182
2177 08.05.99 20:51 porto.ifm.uni-kiel.de
2183 08.05.99 20:51 porto.ifm.uni-kiel.de
2178 --added a README
2184 --added a README
2179 --bug in rc file. Something has changed so functions in the rc
2185 --bug in rc file. Something has changed so functions in the rc
2180 file need to reference the shell and not self. Not clear if it's a
2186 file need to reference the shell and not self. Not clear if it's a
2181 bug or feature.
2187 bug or feature.
2182 --changed rc file for new behavior
2188 --changed rc file for new behavior
2183
2189
2184 2004-07-15 Fernando Perez <fperez@colorado.edu>
2190 2004-07-15 Fernando Perez <fperez@colorado.edu>
2185
2191
2186 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2192 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2187 cache was falling out of sync in bizarre manners when multi-line
2193 cache was falling out of sync in bizarre manners when multi-line
2188 input was present. Minor optimizations and cleanup.
2194 input was present. Minor optimizations and cleanup.
2189
2195
2190 (Logger): Remove old Changelog info for cleanup. This is the
2196 (Logger): Remove old Changelog info for cleanup. This is the
2191 information which was there from Janko's original code:
2197 information which was there from Janko's original code:
2192
2198
2193 Changes to Logger: - made the default log filename a parameter
2199 Changes to Logger: - made the default log filename a parameter
2194
2200
2195 - put a check for lines beginning with !@? in log(). Needed
2201 - put a check for lines beginning with !@? in log(). Needed
2196 (even if the handlers properly log their lines) for mid-session
2202 (even if the handlers properly log their lines) for mid-session
2197 logging activation to work properly. Without this, lines logged
2203 logging activation to work properly. Without this, lines logged
2198 in mid session, which get read from the cache, would end up
2204 in mid session, which get read from the cache, would end up
2199 'bare' (with !@? in the open) in the log. Now they are caught
2205 'bare' (with !@? in the open) in the log. Now they are caught
2200 and prepended with a #.
2206 and prepended with a #.
2201
2207
2202 * IPython/iplib.py (InteractiveShell.init_readline): added check
2208 * IPython/iplib.py (InteractiveShell.init_readline): added check
2203 in case MagicCompleter fails to be defined, so we don't crash.
2209 in case MagicCompleter fails to be defined, so we don't crash.
2204
2210
2205 2004-07-13 Fernando Perez <fperez@colorado.edu>
2211 2004-07-13 Fernando Perez <fperez@colorado.edu>
2206
2212
2207 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2213 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2208 of EPS if the requested filename ends in '.eps'.
2214 of EPS if the requested filename ends in '.eps'.
2209
2215
2210 2004-07-04 Fernando Perez <fperez@colorado.edu>
2216 2004-07-04 Fernando Perez <fperez@colorado.edu>
2211
2217
2212 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2218 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2213 escaping of quotes when calling the shell.
2219 escaping of quotes when calling the shell.
2214
2220
2215 2004-07-02 Fernando Perez <fperez@colorado.edu>
2221 2004-07-02 Fernando Perez <fperez@colorado.edu>
2216
2222
2217 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2223 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2218 gettext not working because we were clobbering '_'. Fixes
2224 gettext not working because we were clobbering '_'. Fixes
2219 http://www.scipy.net/roundup/ipython/issue6.
2225 http://www.scipy.net/roundup/ipython/issue6.
2220
2226
2221 2004-07-01 Fernando Perez <fperez@colorado.edu>
2227 2004-07-01 Fernando Perez <fperez@colorado.edu>
2222
2228
2223 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2229 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2224 into @cd. Patch by Ville.
2230 into @cd. Patch by Ville.
2225
2231
2226 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2232 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2227 new function to store things after ipmaker runs. Patch by Ville.
2233 new function to store things after ipmaker runs. Patch by Ville.
2228 Eventually this will go away once ipmaker is removed and the class
2234 Eventually this will go away once ipmaker is removed and the class
2229 gets cleaned up, but for now it's ok. Key functionality here is
2235 gets cleaned up, but for now it's ok. Key functionality here is
2230 the addition of the persistent storage mechanism, a dict for
2236 the addition of the persistent storage mechanism, a dict for
2231 keeping data across sessions (for now just bookmarks, but more can
2237 keeping data across sessions (for now just bookmarks, but more can
2232 be implemented later).
2238 be implemented later).
2233
2239
2234 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2240 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2235 persistent across sections. Patch by Ville, I modified it
2241 persistent across sections. Patch by Ville, I modified it
2236 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2242 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2237 added a '-l' option to list all bookmarks.
2243 added a '-l' option to list all bookmarks.
2238
2244
2239 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2245 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2240 center for cleanup. Registered with atexit.register(). I moved
2246 center for cleanup. Registered with atexit.register(). I moved
2241 here the old exit_cleanup(). After a patch by Ville.
2247 here the old exit_cleanup(). After a patch by Ville.
2242
2248
2243 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2249 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2244 characters in the hacked shlex_split for python 2.2.
2250 characters in the hacked shlex_split for python 2.2.
2245
2251
2246 * IPython/iplib.py (file_matches): more fixes to filenames with
2252 * IPython/iplib.py (file_matches): more fixes to filenames with
2247 whitespace in them. It's not perfect, but limitations in python's
2253 whitespace in them. It's not perfect, but limitations in python's
2248 readline make it impossible to go further.
2254 readline make it impossible to go further.
2249
2255
2250 2004-06-29 Fernando Perez <fperez@colorado.edu>
2256 2004-06-29 Fernando Perez <fperez@colorado.edu>
2251
2257
2252 * IPython/iplib.py (file_matches): escape whitespace correctly in
2258 * IPython/iplib.py (file_matches): escape whitespace correctly in
2253 filename completions. Bug reported by Ville.
2259 filename completions. Bug reported by Ville.
2254
2260
2255 2004-06-28 Fernando Perez <fperez@colorado.edu>
2261 2004-06-28 Fernando Perez <fperez@colorado.edu>
2256
2262
2257 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2263 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2258 the history file will be called 'history-PROFNAME' (or just
2264 the history file will be called 'history-PROFNAME' (or just
2259 'history' if no profile is loaded). I was getting annoyed at
2265 'history' if no profile is loaded). I was getting annoyed at
2260 getting my Numerical work history clobbered by pysh sessions.
2266 getting my Numerical work history clobbered by pysh sessions.
2261
2267
2262 * IPython/iplib.py (InteractiveShell.__init__): Internal
2268 * IPython/iplib.py (InteractiveShell.__init__): Internal
2263 getoutputerror() function so that we can honor the system_verbose
2269 getoutputerror() function so that we can honor the system_verbose
2264 flag for _all_ system calls. I also added escaping of #
2270 flag for _all_ system calls. I also added escaping of #
2265 characters here to avoid confusing Itpl.
2271 characters here to avoid confusing Itpl.
2266
2272
2267 * IPython/Magic.py (shlex_split): removed call to shell in
2273 * IPython/Magic.py (shlex_split): removed call to shell in
2268 parse_options and replaced it with shlex.split(). The annoying
2274 parse_options and replaced it with shlex.split(). The annoying
2269 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2275 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2270 to backport it from 2.3, with several frail hacks (the shlex
2276 to backport it from 2.3, with several frail hacks (the shlex
2271 module is rather limited in 2.2). Thanks to a suggestion by Ville
2277 module is rather limited in 2.2). Thanks to a suggestion by Ville
2272 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2278 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2273 problem.
2279 problem.
2274
2280
2275 (Magic.magic_system_verbose): new toggle to print the actual
2281 (Magic.magic_system_verbose): new toggle to print the actual
2276 system calls made by ipython. Mainly for debugging purposes.
2282 system calls made by ipython. Mainly for debugging purposes.
2277
2283
2278 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2284 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2279 doesn't support persistence. Reported (and fix suggested) by
2285 doesn't support persistence. Reported (and fix suggested) by
2280 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2286 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2281
2287
2282 2004-06-26 Fernando Perez <fperez@colorado.edu>
2288 2004-06-26 Fernando Perez <fperez@colorado.edu>
2283
2289
2284 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2290 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2285 continue prompts.
2291 continue prompts.
2286
2292
2287 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2293 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2288 function (basically a big docstring) and a few more things here to
2294 function (basically a big docstring) and a few more things here to
2289 speedup startup. pysh.py is now very lightweight. We want because
2295 speedup startup. pysh.py is now very lightweight. We want because
2290 it gets execfile'd, while InterpreterExec gets imported, so
2296 it gets execfile'd, while InterpreterExec gets imported, so
2291 byte-compilation saves time.
2297 byte-compilation saves time.
2292
2298
2293 2004-06-25 Fernando Perez <fperez@colorado.edu>
2299 2004-06-25 Fernando Perez <fperez@colorado.edu>
2294
2300
2295 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2301 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2296 -NUM', which was recently broken.
2302 -NUM', which was recently broken.
2297
2303
2298 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2304 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2299 in multi-line input (but not !!, which doesn't make sense there).
2305 in multi-line input (but not !!, which doesn't make sense there).
2300
2306
2301 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2307 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2302 It's just too useful, and people can turn it off in the less
2308 It's just too useful, and people can turn it off in the less
2303 common cases where it's a problem.
2309 common cases where it's a problem.
2304
2310
2305 2004-06-24 Fernando Perez <fperez@colorado.edu>
2311 2004-06-24 Fernando Perez <fperez@colorado.edu>
2306
2312
2307 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2313 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2308 special syntaxes (like alias calling) is now allied in multi-line
2314 special syntaxes (like alias calling) is now allied in multi-line
2309 input. This is still _very_ experimental, but it's necessary for
2315 input. This is still _very_ experimental, but it's necessary for
2310 efficient shell usage combining python looping syntax with system
2316 efficient shell usage combining python looping syntax with system
2311 calls. For now it's restricted to aliases, I don't think it
2317 calls. For now it's restricted to aliases, I don't think it
2312 really even makes sense to have this for magics.
2318 really even makes sense to have this for magics.
2313
2319
2314 2004-06-23 Fernando Perez <fperez@colorado.edu>
2320 2004-06-23 Fernando Perez <fperez@colorado.edu>
2315
2321
2316 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2322 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2317 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2323 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2318
2324
2319 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2325 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2320 extensions under Windows (after code sent by Gary Bishop). The
2326 extensions under Windows (after code sent by Gary Bishop). The
2321 extensions considered 'executable' are stored in IPython's rc
2327 extensions considered 'executable' are stored in IPython's rc
2322 structure as win_exec_ext.
2328 structure as win_exec_ext.
2323
2329
2324 * IPython/genutils.py (shell): new function, like system() but
2330 * IPython/genutils.py (shell): new function, like system() but
2325 without return value. Very useful for interactive shell work.
2331 without return value. Very useful for interactive shell work.
2326
2332
2327 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2333 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2328 delete aliases.
2334 delete aliases.
2329
2335
2330 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2336 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2331 sure that the alias table doesn't contain python keywords.
2337 sure that the alias table doesn't contain python keywords.
2332
2338
2333 2004-06-21 Fernando Perez <fperez@colorado.edu>
2339 2004-06-21 Fernando Perez <fperez@colorado.edu>
2334
2340
2335 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2341 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2336 non-existent items are found in $PATH. Reported by Thorsten.
2342 non-existent items are found in $PATH. Reported by Thorsten.
2337
2343
2338 2004-06-20 Fernando Perez <fperez@colorado.edu>
2344 2004-06-20 Fernando Perez <fperez@colorado.edu>
2339
2345
2340 * IPython/iplib.py (complete): modified the completer so that the
2346 * IPython/iplib.py (complete): modified the completer so that the
2341 order of priorities can be easily changed at runtime.
2347 order of priorities can be easily changed at runtime.
2342
2348
2343 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2349 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2344 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2350 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2345
2351
2346 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2352 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2347 expand Python variables prepended with $ in all system calls. The
2353 expand Python variables prepended with $ in all system calls. The
2348 same was done to InteractiveShell.handle_shell_escape. Now all
2354 same was done to InteractiveShell.handle_shell_escape. Now all
2349 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2355 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2350 expansion of python variables and expressions according to the
2356 expansion of python variables and expressions according to the
2351 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2357 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2352
2358
2353 Though PEP-215 has been rejected, a similar (but simpler) one
2359 Though PEP-215 has been rejected, a similar (but simpler) one
2354 seems like it will go into Python 2.4, PEP-292 -
2360 seems like it will go into Python 2.4, PEP-292 -
2355 http://www.python.org/peps/pep-0292.html.
2361 http://www.python.org/peps/pep-0292.html.
2356
2362
2357 I'll keep the full syntax of PEP-215, since IPython has since the
2363 I'll keep the full syntax of PEP-215, since IPython has since the
2358 start used Ka-Ping Yee's reference implementation discussed there
2364 start used Ka-Ping Yee's reference implementation discussed there
2359 (Itpl), and I actually like the powerful semantics it offers.
2365 (Itpl), and I actually like the powerful semantics it offers.
2360
2366
2361 In order to access normal shell variables, the $ has to be escaped
2367 In order to access normal shell variables, the $ has to be escaped
2362 via an extra $. For example:
2368 via an extra $. For example:
2363
2369
2364 In [7]: PATH='a python variable'
2370 In [7]: PATH='a python variable'
2365
2371
2366 In [8]: !echo $PATH
2372 In [8]: !echo $PATH
2367 a python variable
2373 a python variable
2368
2374
2369 In [9]: !echo $$PATH
2375 In [9]: !echo $$PATH
2370 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2376 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2371
2377
2372 (Magic.parse_options): escape $ so the shell doesn't evaluate
2378 (Magic.parse_options): escape $ so the shell doesn't evaluate
2373 things prematurely.
2379 things prematurely.
2374
2380
2375 * IPython/iplib.py (InteractiveShell.call_alias): added the
2381 * IPython/iplib.py (InteractiveShell.call_alias): added the
2376 ability for aliases to expand python variables via $.
2382 ability for aliases to expand python variables via $.
2377
2383
2378 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2384 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2379 system, now there's a @rehash/@rehashx pair of magics. These work
2385 system, now there's a @rehash/@rehashx pair of magics. These work
2380 like the csh rehash command, and can be invoked at any time. They
2386 like the csh rehash command, and can be invoked at any time. They
2381 build a table of aliases to everything in the user's $PATH
2387 build a table of aliases to everything in the user's $PATH
2382 (@rehash uses everything, @rehashx is slower but only adds
2388 (@rehash uses everything, @rehashx is slower but only adds
2383 executable files). With this, the pysh.py-based shell profile can
2389 executable files). With this, the pysh.py-based shell profile can
2384 now simply call rehash upon startup, and full access to all
2390 now simply call rehash upon startup, and full access to all
2385 programs in the user's path is obtained.
2391 programs in the user's path is obtained.
2386
2392
2387 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2393 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2388 functionality is now fully in place. I removed the old dynamic
2394 functionality is now fully in place. I removed the old dynamic
2389 code generation based approach, in favor of a much lighter one
2395 code generation based approach, in favor of a much lighter one
2390 based on a simple dict. The advantage is that this allows me to
2396 based on a simple dict. The advantage is that this allows me to
2391 now have thousands of aliases with negligible cost (unthinkable
2397 now have thousands of aliases with negligible cost (unthinkable
2392 with the old system).
2398 with the old system).
2393
2399
2394 2004-06-19 Fernando Perez <fperez@colorado.edu>
2400 2004-06-19 Fernando Perez <fperez@colorado.edu>
2395
2401
2396 * IPython/iplib.py (__init__): extended MagicCompleter class to
2402 * IPython/iplib.py (__init__): extended MagicCompleter class to
2397 also complete (last in priority) on user aliases.
2403 also complete (last in priority) on user aliases.
2398
2404
2399 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2405 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2400 call to eval.
2406 call to eval.
2401 (ItplNS.__init__): Added a new class which functions like Itpl,
2407 (ItplNS.__init__): Added a new class which functions like Itpl,
2402 but allows configuring the namespace for the evaluation to occur
2408 but allows configuring the namespace for the evaluation to occur
2403 in.
2409 in.
2404
2410
2405 2004-06-18 Fernando Perez <fperez@colorado.edu>
2411 2004-06-18 Fernando Perez <fperez@colorado.edu>
2406
2412
2407 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2413 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2408 better message when 'exit' or 'quit' are typed (a common newbie
2414 better message when 'exit' or 'quit' are typed (a common newbie
2409 confusion).
2415 confusion).
2410
2416
2411 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2417 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2412 check for Windows users.
2418 check for Windows users.
2413
2419
2414 * IPython/iplib.py (InteractiveShell.user_setup): removed
2420 * IPython/iplib.py (InteractiveShell.user_setup): removed
2415 disabling of colors for Windows. I'll test at runtime and issue a
2421 disabling of colors for Windows. I'll test at runtime and issue a
2416 warning if Gary's readline isn't found, as to nudge users to
2422 warning if Gary's readline isn't found, as to nudge users to
2417 download it.
2423 download it.
2418
2424
2419 2004-06-16 Fernando Perez <fperez@colorado.edu>
2425 2004-06-16 Fernando Perez <fperez@colorado.edu>
2420
2426
2421 * IPython/genutils.py (Stream.__init__): changed to print errors
2427 * IPython/genutils.py (Stream.__init__): changed to print errors
2422 to sys.stderr. I had a circular dependency here. Now it's
2428 to sys.stderr. I had a circular dependency here. Now it's
2423 possible to run ipython as IDLE's shell (consider this pre-alpha,
2429 possible to run ipython as IDLE's shell (consider this pre-alpha,
2424 since true stdout things end up in the starting terminal instead
2430 since true stdout things end up in the starting terminal instead
2425 of IDLE's out).
2431 of IDLE's out).
2426
2432
2427 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2433 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2428 users who haven't # updated their prompt_in2 definitions. Remove
2434 users who haven't # updated their prompt_in2 definitions. Remove
2429 eventually.
2435 eventually.
2430 (multiple_replace): added credit to original ASPN recipe.
2436 (multiple_replace): added credit to original ASPN recipe.
2431
2437
2432 2004-06-15 Fernando Perez <fperez@colorado.edu>
2438 2004-06-15 Fernando Perez <fperez@colorado.edu>
2433
2439
2434 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2440 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2435 list of auto-defined aliases.
2441 list of auto-defined aliases.
2436
2442
2437 2004-06-13 Fernando Perez <fperez@colorado.edu>
2443 2004-06-13 Fernando Perez <fperez@colorado.edu>
2438
2444
2439 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2445 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2440 install was really requested (so setup.py can be used for other
2446 install was really requested (so setup.py can be used for other
2441 things under Windows).
2447 things under Windows).
2442
2448
2443 2004-06-10 Fernando Perez <fperez@colorado.edu>
2449 2004-06-10 Fernando Perez <fperez@colorado.edu>
2444
2450
2445 * IPython/Logger.py (Logger.create_log): Manually remove any old
2451 * IPython/Logger.py (Logger.create_log): Manually remove any old
2446 backup, since os.remove may fail under Windows. Fixes bug
2452 backup, since os.remove may fail under Windows. Fixes bug
2447 reported by Thorsten.
2453 reported by Thorsten.
2448
2454
2449 2004-06-09 Fernando Perez <fperez@colorado.edu>
2455 2004-06-09 Fernando Perez <fperez@colorado.edu>
2450
2456
2451 * examples/example-embed.py: fixed all references to %n (replaced
2457 * examples/example-embed.py: fixed all references to %n (replaced
2452 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2458 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2453 for all examples and the manual as well.
2459 for all examples and the manual as well.
2454
2460
2455 2004-06-08 Fernando Perez <fperez@colorado.edu>
2461 2004-06-08 Fernando Perez <fperez@colorado.edu>
2456
2462
2457 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2463 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2458 alignment and color management. All 3 prompt subsystems now
2464 alignment and color management. All 3 prompt subsystems now
2459 inherit from BasePrompt.
2465 inherit from BasePrompt.
2460
2466
2461 * tools/release: updates for windows installer build and tag rpms
2467 * tools/release: updates for windows installer build and tag rpms
2462 with python version (since paths are fixed).
2468 with python version (since paths are fixed).
2463
2469
2464 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2470 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2465 which will become eventually obsolete. Also fixed the default
2471 which will become eventually obsolete. Also fixed the default
2466 prompt_in2 to use \D, so at least new users start with the correct
2472 prompt_in2 to use \D, so at least new users start with the correct
2467 defaults.
2473 defaults.
2468 WARNING: Users with existing ipythonrc files will need to apply
2474 WARNING: Users with existing ipythonrc files will need to apply
2469 this fix manually!
2475 this fix manually!
2470
2476
2471 * setup.py: make windows installer (.exe). This is finally the
2477 * setup.py: make windows installer (.exe). This is finally the
2472 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2478 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2473 which I hadn't included because it required Python 2.3 (or recent
2479 which I hadn't included because it required Python 2.3 (or recent
2474 distutils).
2480 distutils).
2475
2481
2476 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2482 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2477 usage of new '\D' escape.
2483 usage of new '\D' escape.
2478
2484
2479 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2485 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2480 lacks os.getuid())
2486 lacks os.getuid())
2481 (CachedOutput.set_colors): Added the ability to turn coloring
2487 (CachedOutput.set_colors): Added the ability to turn coloring
2482 on/off with @colors even for manually defined prompt colors. It
2488 on/off with @colors even for manually defined prompt colors. It
2483 uses a nasty global, but it works safely and via the generic color
2489 uses a nasty global, but it works safely and via the generic color
2484 handling mechanism.
2490 handling mechanism.
2485 (Prompt2.__init__): Introduced new escape '\D' for continuation
2491 (Prompt2.__init__): Introduced new escape '\D' for continuation
2486 prompts. It represents the counter ('\#') as dots.
2492 prompts. It represents the counter ('\#') as dots.
2487 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2493 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2488 need to update their ipythonrc files and replace '%n' with '\D' in
2494 need to update their ipythonrc files and replace '%n' with '\D' in
2489 their prompt_in2 settings everywhere. Sorry, but there's
2495 their prompt_in2 settings everywhere. Sorry, but there's
2490 otherwise no clean way to get all prompts to properly align. The
2496 otherwise no clean way to get all prompts to properly align. The
2491 ipythonrc shipped with IPython has been updated.
2497 ipythonrc shipped with IPython has been updated.
2492
2498
2493 2004-06-07 Fernando Perez <fperez@colorado.edu>
2499 2004-06-07 Fernando Perez <fperez@colorado.edu>
2494
2500
2495 * setup.py (isfile): Pass local_icons option to latex2html, so the
2501 * setup.py (isfile): Pass local_icons option to latex2html, so the
2496 resulting HTML file is self-contained. Thanks to
2502 resulting HTML file is self-contained. Thanks to
2497 dryice-AT-liu.com.cn for the tip.
2503 dryice-AT-liu.com.cn for the tip.
2498
2504
2499 * pysh.py: I created a new profile 'shell', which implements a
2505 * pysh.py: I created a new profile 'shell', which implements a
2500 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2506 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2501 system shell, nor will it become one anytime soon. It's mainly
2507 system shell, nor will it become one anytime soon. It's mainly
2502 meant to illustrate the use of the new flexible bash-like prompts.
2508 meant to illustrate the use of the new flexible bash-like prompts.
2503 I guess it could be used by hardy souls for true shell management,
2509 I guess it could be used by hardy souls for true shell management,
2504 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2510 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2505 profile. This uses the InterpreterExec extension provided by
2511 profile. This uses the InterpreterExec extension provided by
2506 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2512 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2507
2513
2508 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2514 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2509 auto-align itself with the length of the previous input prompt
2515 auto-align itself with the length of the previous input prompt
2510 (taking into account the invisible color escapes).
2516 (taking into account the invisible color escapes).
2511 (CachedOutput.__init__): Large restructuring of this class. Now
2517 (CachedOutput.__init__): Large restructuring of this class. Now
2512 all three prompts (primary1, primary2, output) are proper objects,
2518 all three prompts (primary1, primary2, output) are proper objects,
2513 managed by the 'parent' CachedOutput class. The code is still a
2519 managed by the 'parent' CachedOutput class. The code is still a
2514 bit hackish (all prompts share state via a pointer to the cache),
2520 bit hackish (all prompts share state via a pointer to the cache),
2515 but it's overall far cleaner than before.
2521 but it's overall far cleaner than before.
2516
2522
2517 * IPython/genutils.py (getoutputerror): modified to add verbose,
2523 * IPython/genutils.py (getoutputerror): modified to add verbose,
2518 debug and header options. This makes the interface of all getout*
2524 debug and header options. This makes the interface of all getout*
2519 functions uniform.
2525 functions uniform.
2520 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2526 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2521
2527
2522 * IPython/Magic.py (Magic.default_option): added a function to
2528 * IPython/Magic.py (Magic.default_option): added a function to
2523 allow registering default options for any magic command. This
2529 allow registering default options for any magic command. This
2524 makes it easy to have profiles which customize the magics globally
2530 makes it easy to have profiles which customize the magics globally
2525 for a certain use. The values set through this function are
2531 for a certain use. The values set through this function are
2526 picked up by the parse_options() method, which all magics should
2532 picked up by the parse_options() method, which all magics should
2527 use to parse their options.
2533 use to parse their options.
2528
2534
2529 * IPython/genutils.py (warn): modified the warnings framework to
2535 * IPython/genutils.py (warn): modified the warnings framework to
2530 use the Term I/O class. I'm trying to slowly unify all of
2536 use the Term I/O class. I'm trying to slowly unify all of
2531 IPython's I/O operations to pass through Term.
2537 IPython's I/O operations to pass through Term.
2532
2538
2533 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2539 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2534 the secondary prompt to correctly match the length of the primary
2540 the secondary prompt to correctly match the length of the primary
2535 one for any prompt. Now multi-line code will properly line up
2541 one for any prompt. Now multi-line code will properly line up
2536 even for path dependent prompts, such as the new ones available
2542 even for path dependent prompts, such as the new ones available
2537 via the prompt_specials.
2543 via the prompt_specials.
2538
2544
2539 2004-06-06 Fernando Perez <fperez@colorado.edu>
2545 2004-06-06 Fernando Perez <fperez@colorado.edu>
2540
2546
2541 * IPython/Prompts.py (prompt_specials): Added the ability to have
2547 * IPython/Prompts.py (prompt_specials): Added the ability to have
2542 bash-like special sequences in the prompts, which get
2548 bash-like special sequences in the prompts, which get
2543 automatically expanded. Things like hostname, current working
2549 automatically expanded. Things like hostname, current working
2544 directory and username are implemented already, but it's easy to
2550 directory and username are implemented already, but it's easy to
2545 add more in the future. Thanks to a patch by W.J. van der Laan
2551 add more in the future. Thanks to a patch by W.J. van der Laan
2546 <gnufnork-AT-hetdigitalegat.nl>
2552 <gnufnork-AT-hetdigitalegat.nl>
2547 (prompt_specials): Added color support for prompt strings, so
2553 (prompt_specials): Added color support for prompt strings, so
2548 users can define arbitrary color setups for their prompts.
2554 users can define arbitrary color setups for their prompts.
2549
2555
2550 2004-06-05 Fernando Perez <fperez@colorado.edu>
2556 2004-06-05 Fernando Perez <fperez@colorado.edu>
2551
2557
2552 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2558 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2553 code to load Gary Bishop's readline and configure it
2559 code to load Gary Bishop's readline and configure it
2554 automatically. Thanks to Gary for help on this.
2560 automatically. Thanks to Gary for help on this.
2555
2561
2556 2004-06-01 Fernando Perez <fperez@colorado.edu>
2562 2004-06-01 Fernando Perez <fperez@colorado.edu>
2557
2563
2558 * IPython/Logger.py (Logger.create_log): fix bug for logging
2564 * IPython/Logger.py (Logger.create_log): fix bug for logging
2559 with no filename (previous fix was incomplete).
2565 with no filename (previous fix was incomplete).
2560
2566
2561 2004-05-25 Fernando Perez <fperez@colorado.edu>
2567 2004-05-25 Fernando Perez <fperez@colorado.edu>
2562
2568
2563 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2569 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2564 parens would get passed to the shell.
2570 parens would get passed to the shell.
2565
2571
2566 2004-05-20 Fernando Perez <fperez@colorado.edu>
2572 2004-05-20 Fernando Perez <fperez@colorado.edu>
2567
2573
2568 * IPython/Magic.py (Magic.magic_prun): changed default profile
2574 * IPython/Magic.py (Magic.magic_prun): changed default profile
2569 sort order to 'time' (the more common profiling need).
2575 sort order to 'time' (the more common profiling need).
2570
2576
2571 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2577 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2572 so that source code shown is guaranteed in sync with the file on
2578 so that source code shown is guaranteed in sync with the file on
2573 disk (also changed in psource). Similar fix to the one for
2579 disk (also changed in psource). Similar fix to the one for
2574 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2580 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2575 <yann.ledu-AT-noos.fr>.
2581 <yann.ledu-AT-noos.fr>.
2576
2582
2577 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2583 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2578 with a single option would not be correctly parsed. Closes
2584 with a single option would not be correctly parsed. Closes
2579 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2585 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2580 introduced in 0.6.0 (on 2004-05-06).
2586 introduced in 0.6.0 (on 2004-05-06).
2581
2587
2582 2004-05-13 *** Released version 0.6.0
2588 2004-05-13 *** Released version 0.6.0
2583
2589
2584 2004-05-13 Fernando Perez <fperez@colorado.edu>
2590 2004-05-13 Fernando Perez <fperez@colorado.edu>
2585
2591
2586 * debian/: Added debian/ directory to CVS, so that debian support
2592 * debian/: Added debian/ directory to CVS, so that debian support
2587 is publicly accessible. The debian package is maintained by Jack
2593 is publicly accessible. The debian package is maintained by Jack
2588 Moffit <jack-AT-xiph.org>.
2594 Moffit <jack-AT-xiph.org>.
2589
2595
2590 * Documentation: included the notes about an ipython-based system
2596 * Documentation: included the notes about an ipython-based system
2591 shell (the hypothetical 'pysh') into the new_design.pdf document,
2597 shell (the hypothetical 'pysh') into the new_design.pdf document,
2592 so that these ideas get distributed to users along with the
2598 so that these ideas get distributed to users along with the
2593 official documentation.
2599 official documentation.
2594
2600
2595 2004-05-10 Fernando Perez <fperez@colorado.edu>
2601 2004-05-10 Fernando Perez <fperez@colorado.edu>
2596
2602
2597 * IPython/Logger.py (Logger.create_log): fix recently introduced
2603 * IPython/Logger.py (Logger.create_log): fix recently introduced
2598 bug (misindented line) where logstart would fail when not given an
2604 bug (misindented line) where logstart would fail when not given an
2599 explicit filename.
2605 explicit filename.
2600
2606
2601 2004-05-09 Fernando Perez <fperez@colorado.edu>
2607 2004-05-09 Fernando Perez <fperez@colorado.edu>
2602
2608
2603 * IPython/Magic.py (Magic.parse_options): skip system call when
2609 * IPython/Magic.py (Magic.parse_options): skip system call when
2604 there are no options to look for. Faster, cleaner for the common
2610 there are no options to look for. Faster, cleaner for the common
2605 case.
2611 case.
2606
2612
2607 * Documentation: many updates to the manual: describing Windows
2613 * Documentation: many updates to the manual: describing Windows
2608 support better, Gnuplot updates, credits, misc small stuff. Also
2614 support better, Gnuplot updates, credits, misc small stuff. Also
2609 updated the new_design doc a bit.
2615 updated the new_design doc a bit.
2610
2616
2611 2004-05-06 *** Released version 0.6.0.rc1
2617 2004-05-06 *** Released version 0.6.0.rc1
2612
2618
2613 2004-05-06 Fernando Perez <fperez@colorado.edu>
2619 2004-05-06 Fernando Perez <fperez@colorado.edu>
2614
2620
2615 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2621 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2616 operations to use the vastly more efficient list/''.join() method.
2622 operations to use the vastly more efficient list/''.join() method.
2617 (FormattedTB.text): Fix
2623 (FormattedTB.text): Fix
2618 http://www.scipy.net/roundup/ipython/issue12 - exception source
2624 http://www.scipy.net/roundup/ipython/issue12 - exception source
2619 extract not updated after reload. Thanks to Mike Salib
2625 extract not updated after reload. Thanks to Mike Salib
2620 <msalib-AT-mit.edu> for pinning the source of the problem.
2626 <msalib-AT-mit.edu> for pinning the source of the problem.
2621 Fortunately, the solution works inside ipython and doesn't require
2627 Fortunately, the solution works inside ipython and doesn't require
2622 any changes to python proper.
2628 any changes to python proper.
2623
2629
2624 * IPython/Magic.py (Magic.parse_options): Improved to process the
2630 * IPython/Magic.py (Magic.parse_options): Improved to process the
2625 argument list as a true shell would (by actually using the
2631 argument list as a true shell would (by actually using the
2626 underlying system shell). This way, all @magics automatically get
2632 underlying system shell). This way, all @magics automatically get
2627 shell expansion for variables. Thanks to a comment by Alex
2633 shell expansion for variables. Thanks to a comment by Alex
2628 Schmolck.
2634 Schmolck.
2629
2635
2630 2004-04-04 Fernando Perez <fperez@colorado.edu>
2636 2004-04-04 Fernando Perez <fperez@colorado.edu>
2631
2637
2632 * IPython/iplib.py (InteractiveShell.interact): Added a special
2638 * IPython/iplib.py (InteractiveShell.interact): Added a special
2633 trap for a debugger quit exception, which is basically impossible
2639 trap for a debugger quit exception, which is basically impossible
2634 to handle by normal mechanisms, given what pdb does to the stack.
2640 to handle by normal mechanisms, given what pdb does to the stack.
2635 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2641 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2636
2642
2637 2004-04-03 Fernando Perez <fperez@colorado.edu>
2643 2004-04-03 Fernando Perez <fperez@colorado.edu>
2638
2644
2639 * IPython/genutils.py (Term): Standardized the names of the Term
2645 * IPython/genutils.py (Term): Standardized the names of the Term
2640 class streams to cin/cout/cerr, following C++ naming conventions
2646 class streams to cin/cout/cerr, following C++ naming conventions
2641 (I can't use in/out/err because 'in' is not a valid attribute
2647 (I can't use in/out/err because 'in' is not a valid attribute
2642 name).
2648 name).
2643
2649
2644 * IPython/iplib.py (InteractiveShell.interact): don't increment
2650 * IPython/iplib.py (InteractiveShell.interact): don't increment
2645 the prompt if there's no user input. By Daniel 'Dang' Griffith
2651 the prompt if there's no user input. By Daniel 'Dang' Griffith
2646 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2652 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2647 Francois Pinard.
2653 Francois Pinard.
2648
2654
2649 2004-04-02 Fernando Perez <fperez@colorado.edu>
2655 2004-04-02 Fernando Perez <fperez@colorado.edu>
2650
2656
2651 * IPython/genutils.py (Stream.__init__): Modified to survive at
2657 * IPython/genutils.py (Stream.__init__): Modified to survive at
2652 least importing in contexts where stdin/out/err aren't true file
2658 least importing in contexts where stdin/out/err aren't true file
2653 objects, such as PyCrust (they lack fileno() and mode). However,
2659 objects, such as PyCrust (they lack fileno() and mode). However,
2654 the recovery facilities which rely on these things existing will
2660 the recovery facilities which rely on these things existing will
2655 not work.
2661 not work.
2656
2662
2657 2004-04-01 Fernando Perez <fperez@colorado.edu>
2663 2004-04-01 Fernando Perez <fperez@colorado.edu>
2658
2664
2659 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2665 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2660 use the new getoutputerror() function, so it properly
2666 use the new getoutputerror() function, so it properly
2661 distinguishes stdout/err.
2667 distinguishes stdout/err.
2662
2668
2663 * IPython/genutils.py (getoutputerror): added a function to
2669 * IPython/genutils.py (getoutputerror): added a function to
2664 capture separately the standard output and error of a command.
2670 capture separately the standard output and error of a command.
2665 After a comment from dang on the mailing lists. This code is
2671 After a comment from dang on the mailing lists. This code is
2666 basically a modified version of commands.getstatusoutput(), from
2672 basically a modified version of commands.getstatusoutput(), from
2667 the standard library.
2673 the standard library.
2668
2674
2669 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2675 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2670 '!!' as a special syntax (shorthand) to access @sx.
2676 '!!' as a special syntax (shorthand) to access @sx.
2671
2677
2672 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2678 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2673 command and return its output as a list split on '\n'.
2679 command and return its output as a list split on '\n'.
2674
2680
2675 2004-03-31 Fernando Perez <fperez@colorado.edu>
2681 2004-03-31 Fernando Perez <fperez@colorado.edu>
2676
2682
2677 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2683 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2678 method to dictionaries used as FakeModule instances if they lack
2684 method to dictionaries used as FakeModule instances if they lack
2679 it. At least pydoc in python2.3 breaks for runtime-defined
2685 it. At least pydoc in python2.3 breaks for runtime-defined
2680 functions without this hack. At some point I need to _really_
2686 functions without this hack. At some point I need to _really_
2681 understand what FakeModule is doing, because it's a gross hack.
2687 understand what FakeModule is doing, because it's a gross hack.
2682 But it solves Arnd's problem for now...
2688 But it solves Arnd's problem for now...
2683
2689
2684 2004-02-27 Fernando Perez <fperez@colorado.edu>
2690 2004-02-27 Fernando Perez <fperez@colorado.edu>
2685
2691
2686 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2692 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2687 mode would behave erratically. Also increased the number of
2693 mode would behave erratically. Also increased the number of
2688 possible logs in rotate mod to 999. Thanks to Rod Holland
2694 possible logs in rotate mod to 999. Thanks to Rod Holland
2689 <rhh@StructureLABS.com> for the report and fixes.
2695 <rhh@StructureLABS.com> for the report and fixes.
2690
2696
2691 2004-02-26 Fernando Perez <fperez@colorado.edu>
2697 2004-02-26 Fernando Perez <fperez@colorado.edu>
2692
2698
2693 * IPython/genutils.py (page): Check that the curses module really
2699 * IPython/genutils.py (page): Check that the curses module really
2694 has the initscr attribute before trying to use it. For some
2700 has the initscr attribute before trying to use it. For some
2695 reason, the Solaris curses module is missing this. I think this
2701 reason, the Solaris curses module is missing this. I think this
2696 should be considered a Solaris python bug, but I'm not sure.
2702 should be considered a Solaris python bug, but I'm not sure.
2697
2703
2698 2004-01-17 Fernando Perez <fperez@colorado.edu>
2704 2004-01-17 Fernando Perez <fperez@colorado.edu>
2699
2705
2700 * IPython/genutils.py (Stream.__init__): Changes to try to make
2706 * IPython/genutils.py (Stream.__init__): Changes to try to make
2701 ipython robust against stdin/out/err being closed by the user.
2707 ipython robust against stdin/out/err being closed by the user.
2702 This is 'user error' (and blocks a normal python session, at least
2708 This is 'user error' (and blocks a normal python session, at least
2703 the stdout case). However, Ipython should be able to survive such
2709 the stdout case). However, Ipython should be able to survive such
2704 instances of abuse as gracefully as possible. To simplify the
2710 instances of abuse as gracefully as possible. To simplify the
2705 coding and maintain compatibility with Gary Bishop's Term
2711 coding and maintain compatibility with Gary Bishop's Term
2706 contributions, I've made use of classmethods for this. I think
2712 contributions, I've made use of classmethods for this. I think
2707 this introduces a dependency on python 2.2.
2713 this introduces a dependency on python 2.2.
2708
2714
2709 2004-01-13 Fernando Perez <fperez@colorado.edu>
2715 2004-01-13 Fernando Perez <fperez@colorado.edu>
2710
2716
2711 * IPython/numutils.py (exp_safe): simplified the code a bit and
2717 * IPython/numutils.py (exp_safe): simplified the code a bit and
2712 removed the need for importing the kinds module altogether.
2718 removed the need for importing the kinds module altogether.
2713
2719
2714 2004-01-06 Fernando Perez <fperez@colorado.edu>
2720 2004-01-06 Fernando Perez <fperez@colorado.edu>
2715
2721
2716 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2722 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2717 a magic function instead, after some community feedback. No
2723 a magic function instead, after some community feedback. No
2718 special syntax will exist for it, but its name is deliberately
2724 special syntax will exist for it, but its name is deliberately
2719 very short.
2725 very short.
2720
2726
2721 2003-12-20 Fernando Perez <fperez@colorado.edu>
2727 2003-12-20 Fernando Perez <fperez@colorado.edu>
2722
2728
2723 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2729 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2724 new functionality, to automagically assign the result of a shell
2730 new functionality, to automagically assign the result of a shell
2725 command to a variable. I'll solicit some community feedback on
2731 command to a variable. I'll solicit some community feedback on
2726 this before making it permanent.
2732 this before making it permanent.
2727
2733
2728 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2734 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2729 requested about callables for which inspect couldn't obtain a
2735 requested about callables for which inspect couldn't obtain a
2730 proper argspec. Thanks to a crash report sent by Etienne
2736 proper argspec. Thanks to a crash report sent by Etienne
2731 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2737 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2732
2738
2733 2003-12-09 Fernando Perez <fperez@colorado.edu>
2739 2003-12-09 Fernando Perez <fperez@colorado.edu>
2734
2740
2735 * IPython/genutils.py (page): patch for the pager to work across
2741 * IPython/genutils.py (page): patch for the pager to work across
2736 various versions of Windows. By Gary Bishop.
2742 various versions of Windows. By Gary Bishop.
2737
2743
2738 2003-12-04 Fernando Perez <fperez@colorado.edu>
2744 2003-12-04 Fernando Perez <fperez@colorado.edu>
2739
2745
2740 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2746 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2741 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2747 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2742 While I tested this and it looks ok, there may still be corner
2748 While I tested this and it looks ok, there may still be corner
2743 cases I've missed.
2749 cases I've missed.
2744
2750
2745 2003-12-01 Fernando Perez <fperez@colorado.edu>
2751 2003-12-01 Fernando Perez <fperez@colorado.edu>
2746
2752
2747 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2753 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2748 where a line like 'p,q=1,2' would fail because the automagic
2754 where a line like 'p,q=1,2' would fail because the automagic
2749 system would be triggered for @p.
2755 system would be triggered for @p.
2750
2756
2751 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2757 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2752 cleanups, code unmodified.
2758 cleanups, code unmodified.
2753
2759
2754 * IPython/genutils.py (Term): added a class for IPython to handle
2760 * IPython/genutils.py (Term): added a class for IPython to handle
2755 output. In most cases it will just be a proxy for stdout/err, but
2761 output. In most cases it will just be a proxy for stdout/err, but
2756 having this allows modifications to be made for some platforms,
2762 having this allows modifications to be made for some platforms,
2757 such as handling color escapes under Windows. All of this code
2763 such as handling color escapes under Windows. All of this code
2758 was contributed by Gary Bishop, with minor modifications by me.
2764 was contributed by Gary Bishop, with minor modifications by me.
2759 The actual changes affect many files.
2765 The actual changes affect many files.
2760
2766
2761 2003-11-30 Fernando Perez <fperez@colorado.edu>
2767 2003-11-30 Fernando Perez <fperez@colorado.edu>
2762
2768
2763 * IPython/iplib.py (file_matches): new completion code, courtesy
2769 * IPython/iplib.py (file_matches): new completion code, courtesy
2764 of Jeff Collins. This enables filename completion again under
2770 of Jeff Collins. This enables filename completion again under
2765 python 2.3, which disabled it at the C level.
2771 python 2.3, which disabled it at the C level.
2766
2772
2767 2003-11-11 Fernando Perez <fperez@colorado.edu>
2773 2003-11-11 Fernando Perez <fperez@colorado.edu>
2768
2774
2769 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2775 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2770 for Numeric.array(map(...)), but often convenient.
2776 for Numeric.array(map(...)), but often convenient.
2771
2777
2772 2003-11-05 Fernando Perez <fperez@colorado.edu>
2778 2003-11-05 Fernando Perez <fperez@colorado.edu>
2773
2779
2774 * IPython/numutils.py (frange): Changed a call from int() to
2780 * IPython/numutils.py (frange): Changed a call from int() to
2775 int(round()) to prevent a problem reported with arange() in the
2781 int(round()) to prevent a problem reported with arange() in the
2776 numpy list.
2782 numpy list.
2777
2783
2778 2003-10-06 Fernando Perez <fperez@colorado.edu>
2784 2003-10-06 Fernando Perez <fperez@colorado.edu>
2779
2785
2780 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2786 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2781 prevent crashes if sys lacks an argv attribute (it happens with
2787 prevent crashes if sys lacks an argv attribute (it happens with
2782 embedded interpreters which build a bare-bones sys module).
2788 embedded interpreters which build a bare-bones sys module).
2783 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2789 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2784
2790
2785 2003-09-24 Fernando Perez <fperez@colorado.edu>
2791 2003-09-24 Fernando Perez <fperez@colorado.edu>
2786
2792
2787 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2793 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2788 to protect against poorly written user objects where __getattr__
2794 to protect against poorly written user objects where __getattr__
2789 raises exceptions other than AttributeError. Thanks to a bug
2795 raises exceptions other than AttributeError. Thanks to a bug
2790 report by Oliver Sander <osander-AT-gmx.de>.
2796 report by Oliver Sander <osander-AT-gmx.de>.
2791
2797
2792 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2798 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2793 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2799 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2794
2800
2795 2003-09-09 Fernando Perez <fperez@colorado.edu>
2801 2003-09-09 Fernando Perez <fperez@colorado.edu>
2796
2802
2797 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2803 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2798 unpacking a list whith a callable as first element would
2804 unpacking a list whith a callable as first element would
2799 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2805 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2800 Collins.
2806 Collins.
2801
2807
2802 2003-08-25 *** Released version 0.5.0
2808 2003-08-25 *** Released version 0.5.0
2803
2809
2804 2003-08-22 Fernando Perez <fperez@colorado.edu>
2810 2003-08-22 Fernando Perez <fperez@colorado.edu>
2805
2811
2806 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2812 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2807 improperly defined user exceptions. Thanks to feedback from Mark
2813 improperly defined user exceptions. Thanks to feedback from Mark
2808 Russell <mrussell-AT-verio.net>.
2814 Russell <mrussell-AT-verio.net>.
2809
2815
2810 2003-08-20 Fernando Perez <fperez@colorado.edu>
2816 2003-08-20 Fernando Perez <fperez@colorado.edu>
2811
2817
2812 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2818 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2813 printing so that it would print multi-line string forms starting
2819 printing so that it would print multi-line string forms starting
2814 with a new line. This way the formatting is better respected for
2820 with a new line. This way the formatting is better respected for
2815 objects which work hard to make nice string forms.
2821 objects which work hard to make nice string forms.
2816
2822
2817 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2823 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2818 autocall would overtake data access for objects with both
2824 autocall would overtake data access for objects with both
2819 __getitem__ and __call__.
2825 __getitem__ and __call__.
2820
2826
2821 2003-08-19 *** Released version 0.5.0-rc1
2827 2003-08-19 *** Released version 0.5.0-rc1
2822
2828
2823 2003-08-19 Fernando Perez <fperez@colorado.edu>
2829 2003-08-19 Fernando Perez <fperez@colorado.edu>
2824
2830
2825 * IPython/deep_reload.py (load_tail): single tiny change here
2831 * IPython/deep_reload.py (load_tail): single tiny change here
2826 seems to fix the long-standing bug of dreload() failing to work
2832 seems to fix the long-standing bug of dreload() failing to work
2827 for dotted names. But this module is pretty tricky, so I may have
2833 for dotted names. But this module is pretty tricky, so I may have
2828 missed some subtlety. Needs more testing!.
2834 missed some subtlety. Needs more testing!.
2829
2835
2830 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2836 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2831 exceptions which have badly implemented __str__ methods.
2837 exceptions which have badly implemented __str__ methods.
2832 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2838 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2833 which I've been getting reports about from Python 2.3 users. I
2839 which I've been getting reports about from Python 2.3 users. I
2834 wish I had a simple test case to reproduce the problem, so I could
2840 wish I had a simple test case to reproduce the problem, so I could
2835 either write a cleaner workaround or file a bug report if
2841 either write a cleaner workaround or file a bug report if
2836 necessary.
2842 necessary.
2837
2843
2838 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2844 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2839 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2845 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2840 a bug report by Tjabo Kloppenburg.
2846 a bug report by Tjabo Kloppenburg.
2841
2847
2842 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2848 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2843 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2849 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2844 seems rather unstable. Thanks to a bug report by Tjabo
2850 seems rather unstable. Thanks to a bug report by Tjabo
2845 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2851 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2846
2852
2847 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2853 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2848 this out soon because of the critical fixes in the inner loop for
2854 this out soon because of the critical fixes in the inner loop for
2849 generators.
2855 generators.
2850
2856
2851 * IPython/Magic.py (Magic.getargspec): removed. This (and
2857 * IPython/Magic.py (Magic.getargspec): removed. This (and
2852 _get_def) have been obsoleted by OInspect for a long time, I
2858 _get_def) have been obsoleted by OInspect for a long time, I
2853 hadn't noticed that they were dead code.
2859 hadn't noticed that they were dead code.
2854 (Magic._ofind): restored _ofind functionality for a few literals
2860 (Magic._ofind): restored _ofind functionality for a few literals
2855 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2861 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2856 for things like "hello".capitalize?, since that would require a
2862 for things like "hello".capitalize?, since that would require a
2857 potentially dangerous eval() again.
2863 potentially dangerous eval() again.
2858
2864
2859 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2865 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2860 logic a bit more to clean up the escapes handling and minimize the
2866 logic a bit more to clean up the escapes handling and minimize the
2861 use of _ofind to only necessary cases. The interactive 'feel' of
2867 use of _ofind to only necessary cases. The interactive 'feel' of
2862 IPython should have improved quite a bit with the changes in
2868 IPython should have improved quite a bit with the changes in
2863 _prefilter and _ofind (besides being far safer than before).
2869 _prefilter and _ofind (besides being far safer than before).
2864
2870
2865 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2871 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2866 obscure, never reported). Edit would fail to find the object to
2872 obscure, never reported). Edit would fail to find the object to
2867 edit under some circumstances.
2873 edit under some circumstances.
2868 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2874 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2869 which were causing double-calling of generators. Those eval calls
2875 which were causing double-calling of generators. Those eval calls
2870 were _very_ dangerous, since code with side effects could be
2876 were _very_ dangerous, since code with side effects could be
2871 triggered. As they say, 'eval is evil'... These were the
2877 triggered. As they say, 'eval is evil'... These were the
2872 nastiest evals in IPython. Besides, _ofind is now far simpler,
2878 nastiest evals in IPython. Besides, _ofind is now far simpler,
2873 and it should also be quite a bit faster. Its use of inspect is
2879 and it should also be quite a bit faster. Its use of inspect is
2874 also safer, so perhaps some of the inspect-related crashes I've
2880 also safer, so perhaps some of the inspect-related crashes I've
2875 seen lately with Python 2.3 might be taken care of. That will
2881 seen lately with Python 2.3 might be taken care of. That will
2876 need more testing.
2882 need more testing.
2877
2883
2878 2003-08-17 Fernando Perez <fperez@colorado.edu>
2884 2003-08-17 Fernando Perez <fperez@colorado.edu>
2879
2885
2880 * IPython/iplib.py (InteractiveShell._prefilter): significant
2886 * IPython/iplib.py (InteractiveShell._prefilter): significant
2881 simplifications to the logic for handling user escapes. Faster
2887 simplifications to the logic for handling user escapes. Faster
2882 and simpler code.
2888 and simpler code.
2883
2889
2884 2003-08-14 Fernando Perez <fperez@colorado.edu>
2890 2003-08-14 Fernando Perez <fperez@colorado.edu>
2885
2891
2886 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2892 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2887 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2893 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2888 but it should be quite a bit faster. And the recursive version
2894 but it should be quite a bit faster. And the recursive version
2889 generated O(log N) intermediate storage for all rank>1 arrays,
2895 generated O(log N) intermediate storage for all rank>1 arrays,
2890 even if they were contiguous.
2896 even if they were contiguous.
2891 (l1norm): Added this function.
2897 (l1norm): Added this function.
2892 (norm): Added this function for arbitrary norms (including
2898 (norm): Added this function for arbitrary norms (including
2893 l-infinity). l1 and l2 are still special cases for convenience
2899 l-infinity). l1 and l2 are still special cases for convenience
2894 and speed.
2900 and speed.
2895
2901
2896 2003-08-03 Fernando Perez <fperez@colorado.edu>
2902 2003-08-03 Fernando Perez <fperez@colorado.edu>
2897
2903
2898 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2904 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2899 exceptions, which now raise PendingDeprecationWarnings in Python
2905 exceptions, which now raise PendingDeprecationWarnings in Python
2900 2.3. There were some in Magic and some in Gnuplot2.
2906 2.3. There were some in Magic and some in Gnuplot2.
2901
2907
2902 2003-06-30 Fernando Perez <fperez@colorado.edu>
2908 2003-06-30 Fernando Perez <fperez@colorado.edu>
2903
2909
2904 * IPython/genutils.py (page): modified to call curses only for
2910 * IPython/genutils.py (page): modified to call curses only for
2905 terminals where TERM=='xterm'. After problems under many other
2911 terminals where TERM=='xterm'. After problems under many other
2906 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2912 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2907
2913
2908 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2914 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2909 would be triggered when readline was absent. This was just an old
2915 would be triggered when readline was absent. This was just an old
2910 debugging statement I'd forgotten to take out.
2916 debugging statement I'd forgotten to take out.
2911
2917
2912 2003-06-20 Fernando Perez <fperez@colorado.edu>
2918 2003-06-20 Fernando Perez <fperez@colorado.edu>
2913
2919
2914 * IPython/genutils.py (clock): modified to return only user time
2920 * IPython/genutils.py (clock): modified to return only user time
2915 (not counting system time), after a discussion on scipy. While
2921 (not counting system time), after a discussion on scipy. While
2916 system time may be a useful quantity occasionally, it may much
2922 system time may be a useful quantity occasionally, it may much
2917 more easily be skewed by occasional swapping or other similar
2923 more easily be skewed by occasional swapping or other similar
2918 activity.
2924 activity.
2919
2925
2920 2003-06-05 Fernando Perez <fperez@colorado.edu>
2926 2003-06-05 Fernando Perez <fperez@colorado.edu>
2921
2927
2922 * IPython/numutils.py (identity): new function, for building
2928 * IPython/numutils.py (identity): new function, for building
2923 arbitrary rank Kronecker deltas (mostly backwards compatible with
2929 arbitrary rank Kronecker deltas (mostly backwards compatible with
2924 Numeric.identity)
2930 Numeric.identity)
2925
2931
2926 2003-06-03 Fernando Perez <fperez@colorado.edu>
2932 2003-06-03 Fernando Perez <fperez@colorado.edu>
2927
2933
2928 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2934 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2929 arguments passed to magics with spaces, to allow trailing '\' to
2935 arguments passed to magics with spaces, to allow trailing '\' to
2930 work normally (mainly for Windows users).
2936 work normally (mainly for Windows users).
2931
2937
2932 2003-05-29 Fernando Perez <fperez@colorado.edu>
2938 2003-05-29 Fernando Perez <fperez@colorado.edu>
2933
2939
2934 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2940 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2935 instead of pydoc.help. This fixes a bizarre behavior where
2941 instead of pydoc.help. This fixes a bizarre behavior where
2936 printing '%s' % locals() would trigger the help system. Now
2942 printing '%s' % locals() would trigger the help system. Now
2937 ipython behaves like normal python does.
2943 ipython behaves like normal python does.
2938
2944
2939 Note that if one does 'from pydoc import help', the bizarre
2945 Note that if one does 'from pydoc import help', the bizarre
2940 behavior returns, but this will also happen in normal python, so
2946 behavior returns, but this will also happen in normal python, so
2941 it's not an ipython bug anymore (it has to do with how pydoc.help
2947 it's not an ipython bug anymore (it has to do with how pydoc.help
2942 is implemented).
2948 is implemented).
2943
2949
2944 2003-05-22 Fernando Perez <fperez@colorado.edu>
2950 2003-05-22 Fernando Perez <fperez@colorado.edu>
2945
2951
2946 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2952 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2947 return [] instead of None when nothing matches, also match to end
2953 return [] instead of None when nothing matches, also match to end
2948 of line. Patch by Gary Bishop.
2954 of line. Patch by Gary Bishop.
2949
2955
2950 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2956 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2951 protection as before, for files passed on the command line. This
2957 protection as before, for files passed on the command line. This
2952 prevents the CrashHandler from kicking in if user files call into
2958 prevents the CrashHandler from kicking in if user files call into
2953 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2959 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2954 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2960 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2955
2961
2956 2003-05-20 *** Released version 0.4.0
2962 2003-05-20 *** Released version 0.4.0
2957
2963
2958 2003-05-20 Fernando Perez <fperez@colorado.edu>
2964 2003-05-20 Fernando Perez <fperez@colorado.edu>
2959
2965
2960 * setup.py: added support for manpages. It's a bit hackish b/c of
2966 * setup.py: added support for manpages. It's a bit hackish b/c of
2961 a bug in the way the bdist_rpm distutils target handles gzipped
2967 a bug in the way the bdist_rpm distutils target handles gzipped
2962 manpages, but it works. After a patch by Jack.
2968 manpages, but it works. After a patch by Jack.
2963
2969
2964 2003-05-19 Fernando Perez <fperez@colorado.edu>
2970 2003-05-19 Fernando Perez <fperez@colorado.edu>
2965
2971
2966 * IPython/numutils.py: added a mockup of the kinds module, since
2972 * IPython/numutils.py: added a mockup of the kinds module, since
2967 it was recently removed from Numeric. This way, numutils will
2973 it was recently removed from Numeric. This way, numutils will
2968 work for all users even if they are missing kinds.
2974 work for all users even if they are missing kinds.
2969
2975
2970 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2976 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2971 failure, which can occur with SWIG-wrapped extensions. After a
2977 failure, which can occur with SWIG-wrapped extensions. After a
2972 crash report from Prabhu.
2978 crash report from Prabhu.
2973
2979
2974 2003-05-16 Fernando Perez <fperez@colorado.edu>
2980 2003-05-16 Fernando Perez <fperez@colorado.edu>
2975
2981
2976 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2982 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2977 protect ipython from user code which may call directly
2983 protect ipython from user code which may call directly
2978 sys.excepthook (this looks like an ipython crash to the user, even
2984 sys.excepthook (this looks like an ipython crash to the user, even
2979 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2985 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2980 This is especially important to help users of WxWindows, but may
2986 This is especially important to help users of WxWindows, but may
2981 also be useful in other cases.
2987 also be useful in other cases.
2982
2988
2983 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2989 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2984 an optional tb_offset to be specified, and to preserve exception
2990 an optional tb_offset to be specified, and to preserve exception
2985 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2991 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2986
2992
2987 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2993 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2988
2994
2989 2003-05-15 Fernando Perez <fperez@colorado.edu>
2995 2003-05-15 Fernando Perez <fperez@colorado.edu>
2990
2996
2991 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2997 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2992 installing for a new user under Windows.
2998 installing for a new user under Windows.
2993
2999
2994 2003-05-12 Fernando Perez <fperez@colorado.edu>
3000 2003-05-12 Fernando Perez <fperez@colorado.edu>
2995
3001
2996 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3002 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2997 handler for Emacs comint-based lines. Currently it doesn't do
3003 handler for Emacs comint-based lines. Currently it doesn't do
2998 much (but importantly, it doesn't update the history cache). In
3004 much (but importantly, it doesn't update the history cache). In
2999 the future it may be expanded if Alex needs more functionality
3005 the future it may be expanded if Alex needs more functionality
3000 there.
3006 there.
3001
3007
3002 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3008 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3003 info to crash reports.
3009 info to crash reports.
3004
3010
3005 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3011 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3006 just like Python's -c. Also fixed crash with invalid -color
3012 just like Python's -c. Also fixed crash with invalid -color
3007 option value at startup. Thanks to Will French
3013 option value at startup. Thanks to Will French
3008 <wfrench-AT-bestweb.net> for the bug report.
3014 <wfrench-AT-bestweb.net> for the bug report.
3009
3015
3010 2003-05-09 Fernando Perez <fperez@colorado.edu>
3016 2003-05-09 Fernando Perez <fperez@colorado.edu>
3011
3017
3012 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3018 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3013 to EvalDict (it's a mapping, after all) and simplified its code
3019 to EvalDict (it's a mapping, after all) and simplified its code
3014 quite a bit, after a nice discussion on c.l.py where Gustavo
3020 quite a bit, after a nice discussion on c.l.py where Gustavo
3015 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3021 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3016
3022
3017 2003-04-30 Fernando Perez <fperez@colorado.edu>
3023 2003-04-30 Fernando Perez <fperez@colorado.edu>
3018
3024
3019 * IPython/genutils.py (timings_out): modified it to reduce its
3025 * IPython/genutils.py (timings_out): modified it to reduce its
3020 overhead in the common reps==1 case.
3026 overhead in the common reps==1 case.
3021
3027
3022 2003-04-29 Fernando Perez <fperez@colorado.edu>
3028 2003-04-29 Fernando Perez <fperez@colorado.edu>
3023
3029
3024 * IPython/genutils.py (timings_out): Modified to use the resource
3030 * IPython/genutils.py (timings_out): Modified to use the resource
3025 module, which avoids the wraparound problems of time.clock().
3031 module, which avoids the wraparound problems of time.clock().
3026
3032
3027 2003-04-17 *** Released version 0.2.15pre4
3033 2003-04-17 *** Released version 0.2.15pre4
3028
3034
3029 2003-04-17 Fernando Perez <fperez@colorado.edu>
3035 2003-04-17 Fernando Perez <fperez@colorado.edu>
3030
3036
3031 * setup.py (scriptfiles): Split windows-specific stuff over to a
3037 * setup.py (scriptfiles): Split windows-specific stuff over to a
3032 separate file, in an attempt to have a Windows GUI installer.
3038 separate file, in an attempt to have a Windows GUI installer.
3033 That didn't work, but part of the groundwork is done.
3039 That didn't work, but part of the groundwork is done.
3034
3040
3035 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3041 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3036 indent/unindent with 4 spaces. Particularly useful in combination
3042 indent/unindent with 4 spaces. Particularly useful in combination
3037 with the new auto-indent option.
3043 with the new auto-indent option.
3038
3044
3039 2003-04-16 Fernando Perez <fperez@colorado.edu>
3045 2003-04-16 Fernando Perez <fperez@colorado.edu>
3040
3046
3041 * IPython/Magic.py: various replacements of self.rc for
3047 * IPython/Magic.py: various replacements of self.rc for
3042 self.shell.rc. A lot more remains to be done to fully disentangle
3048 self.shell.rc. A lot more remains to be done to fully disentangle
3043 this class from the main Shell class.
3049 this class from the main Shell class.
3044
3050
3045 * IPython/GnuplotRuntime.py: added checks for mouse support so
3051 * IPython/GnuplotRuntime.py: added checks for mouse support so
3046 that we don't try to enable it if the current gnuplot doesn't
3052 that we don't try to enable it if the current gnuplot doesn't
3047 really support it. Also added checks so that we don't try to
3053 really support it. Also added checks so that we don't try to
3048 enable persist under Windows (where Gnuplot doesn't recognize the
3054 enable persist under Windows (where Gnuplot doesn't recognize the
3049 option).
3055 option).
3050
3056
3051 * IPython/iplib.py (InteractiveShell.interact): Added optional
3057 * IPython/iplib.py (InteractiveShell.interact): Added optional
3052 auto-indenting code, after a patch by King C. Shu
3058 auto-indenting code, after a patch by King C. Shu
3053 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3059 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3054 get along well with pasting indented code. If I ever figure out
3060 get along well with pasting indented code. If I ever figure out
3055 how to make that part go well, it will become on by default.
3061 how to make that part go well, it will become on by default.
3056
3062
3057 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3063 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3058 crash ipython if there was an unmatched '%' in the user's prompt
3064 crash ipython if there was an unmatched '%' in the user's prompt
3059 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3065 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3060
3066
3061 * IPython/iplib.py (InteractiveShell.interact): removed the
3067 * IPython/iplib.py (InteractiveShell.interact): removed the
3062 ability to ask the user whether he wants to crash or not at the
3068 ability to ask the user whether he wants to crash or not at the
3063 'last line' exception handler. Calling functions at that point
3069 'last line' exception handler. Calling functions at that point
3064 changes the stack, and the error reports would have incorrect
3070 changes the stack, and the error reports would have incorrect
3065 tracebacks.
3071 tracebacks.
3066
3072
3067 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3073 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3068 pass through a peger a pretty-printed form of any object. After a
3074 pass through a peger a pretty-printed form of any object. After a
3069 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3075 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3070
3076
3071 2003-04-14 Fernando Perez <fperez@colorado.edu>
3077 2003-04-14 Fernando Perez <fperez@colorado.edu>
3072
3078
3073 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3079 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3074 all files in ~ would be modified at first install (instead of
3080 all files in ~ would be modified at first install (instead of
3075 ~/.ipython). This could be potentially disastrous, as the
3081 ~/.ipython). This could be potentially disastrous, as the
3076 modification (make line-endings native) could damage binary files.
3082 modification (make line-endings native) could damage binary files.
3077
3083
3078 2003-04-10 Fernando Perez <fperez@colorado.edu>
3084 2003-04-10 Fernando Perez <fperez@colorado.edu>
3079
3085
3080 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3086 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3081 handle only lines which are invalid python. This now means that
3087 handle only lines which are invalid python. This now means that
3082 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3088 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3083 for the bug report.
3089 for the bug report.
3084
3090
3085 2003-04-01 Fernando Perez <fperez@colorado.edu>
3091 2003-04-01 Fernando Perez <fperez@colorado.edu>
3086
3092
3087 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3093 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3088 where failing to set sys.last_traceback would crash pdb.pm().
3094 where failing to set sys.last_traceback would crash pdb.pm().
3089 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3095 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3090 report.
3096 report.
3091
3097
3092 2003-03-25 Fernando Perez <fperez@colorado.edu>
3098 2003-03-25 Fernando Perez <fperez@colorado.edu>
3093
3099
3094 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3100 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3095 before printing it (it had a lot of spurious blank lines at the
3101 before printing it (it had a lot of spurious blank lines at the
3096 end).
3102 end).
3097
3103
3098 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3104 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3099 output would be sent 21 times! Obviously people don't use this
3105 output would be sent 21 times! Obviously people don't use this
3100 too often, or I would have heard about it.
3106 too often, or I would have heard about it.
3101
3107
3102 2003-03-24 Fernando Perez <fperez@colorado.edu>
3108 2003-03-24 Fernando Perez <fperez@colorado.edu>
3103
3109
3104 * setup.py (scriptfiles): renamed the data_files parameter from
3110 * setup.py (scriptfiles): renamed the data_files parameter from
3105 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3111 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3106 for the patch.
3112 for the patch.
3107
3113
3108 2003-03-20 Fernando Perez <fperez@colorado.edu>
3114 2003-03-20 Fernando Perez <fperez@colorado.edu>
3109
3115
3110 * IPython/genutils.py (error): added error() and fatal()
3116 * IPython/genutils.py (error): added error() and fatal()
3111 functions.
3117 functions.
3112
3118
3113 2003-03-18 *** Released version 0.2.15pre3
3119 2003-03-18 *** Released version 0.2.15pre3
3114
3120
3115 2003-03-18 Fernando Perez <fperez@colorado.edu>
3121 2003-03-18 Fernando Perez <fperez@colorado.edu>
3116
3122
3117 * setupext/install_data_ext.py
3123 * setupext/install_data_ext.py
3118 (install_data_ext.initialize_options): Class contributed by Jack
3124 (install_data_ext.initialize_options): Class contributed by Jack
3119 Moffit for fixing the old distutils hack. He is sending this to
3125 Moffit for fixing the old distutils hack. He is sending this to
3120 the distutils folks so in the future we may not need it as a
3126 the distutils folks so in the future we may not need it as a
3121 private fix.
3127 private fix.
3122
3128
3123 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3129 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3124 changes for Debian packaging. See his patch for full details.
3130 changes for Debian packaging. See his patch for full details.
3125 The old distutils hack of making the ipythonrc* files carry a
3131 The old distutils hack of making the ipythonrc* files carry a
3126 bogus .py extension is gone, at last. Examples were moved to a
3132 bogus .py extension is gone, at last. Examples were moved to a
3127 separate subdir under doc/, and the separate executable scripts
3133 separate subdir under doc/, and the separate executable scripts
3128 now live in their own directory. Overall a great cleanup. The
3134 now live in their own directory. Overall a great cleanup. The
3129 manual was updated to use the new files, and setup.py has been
3135 manual was updated to use the new files, and setup.py has been
3130 fixed for this setup.
3136 fixed for this setup.
3131
3137
3132 * IPython/PyColorize.py (Parser.usage): made non-executable and
3138 * IPython/PyColorize.py (Parser.usage): made non-executable and
3133 created a pycolor wrapper around it to be included as a script.
3139 created a pycolor wrapper around it to be included as a script.
3134
3140
3135 2003-03-12 *** Released version 0.2.15pre2
3141 2003-03-12 *** Released version 0.2.15pre2
3136
3142
3137 2003-03-12 Fernando Perez <fperez@colorado.edu>
3143 2003-03-12 Fernando Perez <fperez@colorado.edu>
3138
3144
3139 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3145 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3140 long-standing problem with garbage characters in some terminals.
3146 long-standing problem with garbage characters in some terminals.
3141 The issue was really that the \001 and \002 escapes must _only_ be
3147 The issue was really that the \001 and \002 escapes must _only_ be
3142 passed to input prompts (which call readline), but _never_ to
3148 passed to input prompts (which call readline), but _never_ to
3143 normal text to be printed on screen. I changed ColorANSI to have
3149 normal text to be printed on screen. I changed ColorANSI to have
3144 two classes: TermColors and InputTermColors, each with the
3150 two classes: TermColors and InputTermColors, each with the
3145 appropriate escapes for input prompts or normal text. The code in
3151 appropriate escapes for input prompts or normal text. The code in
3146 Prompts.py got slightly more complicated, but this very old and
3152 Prompts.py got slightly more complicated, but this very old and
3147 annoying bug is finally fixed.
3153 annoying bug is finally fixed.
3148
3154
3149 All the credit for nailing down the real origin of this problem
3155 All the credit for nailing down the real origin of this problem
3150 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3156 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3151 *Many* thanks to him for spending quite a bit of effort on this.
3157 *Many* thanks to him for spending quite a bit of effort on this.
3152
3158
3153 2003-03-05 *** Released version 0.2.15pre1
3159 2003-03-05 *** Released version 0.2.15pre1
3154
3160
3155 2003-03-03 Fernando Perez <fperez@colorado.edu>
3161 2003-03-03 Fernando Perez <fperez@colorado.edu>
3156
3162
3157 * IPython/FakeModule.py: Moved the former _FakeModule to a
3163 * IPython/FakeModule.py: Moved the former _FakeModule to a
3158 separate file, because it's also needed by Magic (to fix a similar
3164 separate file, because it's also needed by Magic (to fix a similar
3159 pickle-related issue in @run).
3165 pickle-related issue in @run).
3160
3166
3161 2003-03-02 Fernando Perez <fperez@colorado.edu>
3167 2003-03-02 Fernando Perez <fperez@colorado.edu>
3162
3168
3163 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3169 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3164 the autocall option at runtime.
3170 the autocall option at runtime.
3165 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3171 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3166 across Magic.py to start separating Magic from InteractiveShell.
3172 across Magic.py to start separating Magic from InteractiveShell.
3167 (Magic._ofind): Fixed to return proper namespace for dotted
3173 (Magic._ofind): Fixed to return proper namespace for dotted
3168 names. Before, a dotted name would always return 'not currently
3174 names. Before, a dotted name would always return 'not currently
3169 defined', because it would find the 'parent'. s.x would be found,
3175 defined', because it would find the 'parent'. s.x would be found,
3170 but since 'x' isn't defined by itself, it would get confused.
3176 but since 'x' isn't defined by itself, it would get confused.
3171 (Magic.magic_run): Fixed pickling problems reported by Ralf
3177 (Magic.magic_run): Fixed pickling problems reported by Ralf
3172 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3178 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3173 that I'd used when Mike Heeter reported similar issues at the
3179 that I'd used when Mike Heeter reported similar issues at the
3174 top-level, but now for @run. It boils down to injecting the
3180 top-level, but now for @run. It boils down to injecting the
3175 namespace where code is being executed with something that looks
3181 namespace where code is being executed with something that looks
3176 enough like a module to fool pickle.dump(). Since a pickle stores
3182 enough like a module to fool pickle.dump(). Since a pickle stores
3177 a named reference to the importing module, we need this for
3183 a named reference to the importing module, we need this for
3178 pickles to save something sensible.
3184 pickles to save something sensible.
3179
3185
3180 * IPython/ipmaker.py (make_IPython): added an autocall option.
3186 * IPython/ipmaker.py (make_IPython): added an autocall option.
3181
3187
3182 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3188 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3183 the auto-eval code. Now autocalling is an option, and the code is
3189 the auto-eval code. Now autocalling is an option, and the code is
3184 also vastly safer. There is no more eval() involved at all.
3190 also vastly safer. There is no more eval() involved at all.
3185
3191
3186 2003-03-01 Fernando Perez <fperez@colorado.edu>
3192 2003-03-01 Fernando Perez <fperez@colorado.edu>
3187
3193
3188 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3194 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3189 dict with named keys instead of a tuple.
3195 dict with named keys instead of a tuple.
3190
3196
3191 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3197 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3192
3198
3193 * setup.py (make_shortcut): Fixed message about directories
3199 * setup.py (make_shortcut): Fixed message about directories
3194 created during Windows installation (the directories were ok, just
3200 created during Windows installation (the directories were ok, just
3195 the printed message was misleading). Thanks to Chris Liechti
3201 the printed message was misleading). Thanks to Chris Liechti
3196 <cliechti-AT-gmx.net> for the heads up.
3202 <cliechti-AT-gmx.net> for the heads up.
3197
3203
3198 2003-02-21 Fernando Perez <fperez@colorado.edu>
3204 2003-02-21 Fernando Perez <fperez@colorado.edu>
3199
3205
3200 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3206 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3201 of ValueError exception when checking for auto-execution. This
3207 of ValueError exception when checking for auto-execution. This
3202 one is raised by things like Numeric arrays arr.flat when the
3208 one is raised by things like Numeric arrays arr.flat when the
3203 array is non-contiguous.
3209 array is non-contiguous.
3204
3210
3205 2003-01-31 Fernando Perez <fperez@colorado.edu>
3211 2003-01-31 Fernando Perez <fperez@colorado.edu>
3206
3212
3207 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3213 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3208 not return any value at all (even though the command would get
3214 not return any value at all (even though the command would get
3209 executed).
3215 executed).
3210 (xsys): Flush stdout right after printing the command to ensure
3216 (xsys): Flush stdout right after printing the command to ensure
3211 proper ordering of commands and command output in the total
3217 proper ordering of commands and command output in the total
3212 output.
3218 output.
3213 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3219 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3214 system/getoutput as defaults. The old ones are kept for
3220 system/getoutput as defaults. The old ones are kept for
3215 compatibility reasons, so no code which uses this library needs
3221 compatibility reasons, so no code which uses this library needs
3216 changing.
3222 changing.
3217
3223
3218 2003-01-27 *** Released version 0.2.14
3224 2003-01-27 *** Released version 0.2.14
3219
3225
3220 2003-01-25 Fernando Perez <fperez@colorado.edu>
3226 2003-01-25 Fernando Perez <fperez@colorado.edu>
3221
3227
3222 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3228 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3223 functions defined in previous edit sessions could not be re-edited
3229 functions defined in previous edit sessions could not be re-edited
3224 (because the temp files were immediately removed). Now temp files
3230 (because the temp files were immediately removed). Now temp files
3225 are removed only at IPython's exit.
3231 are removed only at IPython's exit.
3226 (Magic.magic_run): Improved @run to perform shell-like expansions
3232 (Magic.magic_run): Improved @run to perform shell-like expansions
3227 on its arguments (~users and $VARS). With this, @run becomes more
3233 on its arguments (~users and $VARS). With this, @run becomes more
3228 like a normal command-line.
3234 like a normal command-line.
3229
3235
3230 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3236 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3231 bugs related to embedding and cleaned up that code. A fairly
3237 bugs related to embedding and cleaned up that code. A fairly
3232 important one was the impossibility to access the global namespace
3238 important one was the impossibility to access the global namespace
3233 through the embedded IPython (only local variables were visible).
3239 through the embedded IPython (only local variables were visible).
3234
3240
3235 2003-01-14 Fernando Perez <fperez@colorado.edu>
3241 2003-01-14 Fernando Perez <fperez@colorado.edu>
3236
3242
3237 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3243 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3238 auto-calling to be a bit more conservative. Now it doesn't get
3244 auto-calling to be a bit more conservative. Now it doesn't get
3239 triggered if any of '!=()<>' are in the rest of the input line, to
3245 triggered if any of '!=()<>' are in the rest of the input line, to
3240 allow comparing callables. Thanks to Alex for the heads up.
3246 allow comparing callables. Thanks to Alex for the heads up.
3241
3247
3242 2003-01-07 Fernando Perez <fperez@colorado.edu>
3248 2003-01-07 Fernando Perez <fperez@colorado.edu>
3243
3249
3244 * IPython/genutils.py (page): fixed estimation of the number of
3250 * IPython/genutils.py (page): fixed estimation of the number of
3245 lines in a string to be paged to simply count newlines. This
3251 lines in a string to be paged to simply count newlines. This
3246 prevents over-guessing due to embedded escape sequences. A better
3252 prevents over-guessing due to embedded escape sequences. A better
3247 long-term solution would involve stripping out the control chars
3253 long-term solution would involve stripping out the control chars
3248 for the count, but it's potentially so expensive I just don't
3254 for the count, but it's potentially so expensive I just don't
3249 think it's worth doing.
3255 think it's worth doing.
3250
3256
3251 2002-12-19 *** Released version 0.2.14pre50
3257 2002-12-19 *** Released version 0.2.14pre50
3252
3258
3253 2002-12-19 Fernando Perez <fperez@colorado.edu>
3259 2002-12-19 Fernando Perez <fperez@colorado.edu>
3254
3260
3255 * tools/release (version): Changed release scripts to inform
3261 * tools/release (version): Changed release scripts to inform
3256 Andrea and build a NEWS file with a list of recent changes.
3262 Andrea and build a NEWS file with a list of recent changes.
3257
3263
3258 * IPython/ColorANSI.py (__all__): changed terminal detection
3264 * IPython/ColorANSI.py (__all__): changed terminal detection
3259 code. Seems to work better for xterms without breaking
3265 code. Seems to work better for xterms without breaking
3260 konsole. Will need more testing to determine if WinXP and Mac OSX
3266 konsole. Will need more testing to determine if WinXP and Mac OSX
3261 also work ok.
3267 also work ok.
3262
3268
3263 2002-12-18 *** Released version 0.2.14pre49
3269 2002-12-18 *** Released version 0.2.14pre49
3264
3270
3265 2002-12-18 Fernando Perez <fperez@colorado.edu>
3271 2002-12-18 Fernando Perez <fperez@colorado.edu>
3266
3272
3267 * Docs: added new info about Mac OSX, from Andrea.
3273 * Docs: added new info about Mac OSX, from Andrea.
3268
3274
3269 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3275 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3270 allow direct plotting of python strings whose format is the same
3276 allow direct plotting of python strings whose format is the same
3271 of gnuplot data files.
3277 of gnuplot data files.
3272
3278
3273 2002-12-16 Fernando Perez <fperez@colorado.edu>
3279 2002-12-16 Fernando Perez <fperez@colorado.edu>
3274
3280
3275 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3281 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3276 value of exit question to be acknowledged.
3282 value of exit question to be acknowledged.
3277
3283
3278 2002-12-03 Fernando Perez <fperez@colorado.edu>
3284 2002-12-03 Fernando Perez <fperez@colorado.edu>
3279
3285
3280 * IPython/ipmaker.py: removed generators, which had been added
3286 * IPython/ipmaker.py: removed generators, which had been added
3281 by mistake in an earlier debugging run. This was causing trouble
3287 by mistake in an earlier debugging run. This was causing trouble
3282 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3288 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3283 for pointing this out.
3289 for pointing this out.
3284
3290
3285 2002-11-17 Fernando Perez <fperez@colorado.edu>
3291 2002-11-17 Fernando Perez <fperez@colorado.edu>
3286
3292
3287 * Manual: updated the Gnuplot section.
3293 * Manual: updated the Gnuplot section.
3288
3294
3289 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3295 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3290 a much better split of what goes in Runtime and what goes in
3296 a much better split of what goes in Runtime and what goes in
3291 Interactive.
3297 Interactive.
3292
3298
3293 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3299 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3294 being imported from iplib.
3300 being imported from iplib.
3295
3301
3296 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3302 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3297 for command-passing. Now the global Gnuplot instance is called
3303 for command-passing. Now the global Gnuplot instance is called
3298 'gp' instead of 'g', which was really a far too fragile and
3304 'gp' instead of 'g', which was really a far too fragile and
3299 common name.
3305 common name.
3300
3306
3301 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3307 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3302 bounding boxes generated by Gnuplot for square plots.
3308 bounding boxes generated by Gnuplot for square plots.
3303
3309
3304 * IPython/genutils.py (popkey): new function added. I should
3310 * IPython/genutils.py (popkey): new function added. I should
3305 suggest this on c.l.py as a dict method, it seems useful.
3311 suggest this on c.l.py as a dict method, it seems useful.
3306
3312
3307 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3313 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3308 to transparently handle PostScript generation. MUCH better than
3314 to transparently handle PostScript generation. MUCH better than
3309 the previous plot_eps/replot_eps (which I removed now). The code
3315 the previous plot_eps/replot_eps (which I removed now). The code
3310 is also fairly clean and well documented now (including
3316 is also fairly clean and well documented now (including
3311 docstrings).
3317 docstrings).
3312
3318
3313 2002-11-13 Fernando Perez <fperez@colorado.edu>
3319 2002-11-13 Fernando Perez <fperez@colorado.edu>
3314
3320
3315 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3321 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3316 (inconsistent with options).
3322 (inconsistent with options).
3317
3323
3318 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3324 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3319 manually disabled, I don't know why. Fixed it.
3325 manually disabled, I don't know why. Fixed it.
3320 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3326 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3321 eps output.
3327 eps output.
3322
3328
3323 2002-11-12 Fernando Perez <fperez@colorado.edu>
3329 2002-11-12 Fernando Perez <fperez@colorado.edu>
3324
3330
3325 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3331 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3326 don't propagate up to caller. Fixes crash reported by François
3332 don't propagate up to caller. Fixes crash reported by François
3327 Pinard.
3333 Pinard.
3328
3334
3329 2002-11-09 Fernando Perez <fperez@colorado.edu>
3335 2002-11-09 Fernando Perez <fperez@colorado.edu>
3330
3336
3331 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3337 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3332 history file for new users.
3338 history file for new users.
3333 (make_IPython): fixed bug where initial install would leave the
3339 (make_IPython): fixed bug where initial install would leave the
3334 user running in the .ipython dir.
3340 user running in the .ipython dir.
3335 (make_IPython): fixed bug where config dir .ipython would be
3341 (make_IPython): fixed bug where config dir .ipython would be
3336 created regardless of the given -ipythondir option. Thanks to Cory
3342 created regardless of the given -ipythondir option. Thanks to Cory
3337 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3343 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3338
3344
3339 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3345 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3340 type confirmations. Will need to use it in all of IPython's code
3346 type confirmations. Will need to use it in all of IPython's code
3341 consistently.
3347 consistently.
3342
3348
3343 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3349 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3344 context to print 31 lines instead of the default 5. This will make
3350 context to print 31 lines instead of the default 5. This will make
3345 the crash reports extremely detailed in case the problem is in
3351 the crash reports extremely detailed in case the problem is in
3346 libraries I don't have access to.
3352 libraries I don't have access to.
3347
3353
3348 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3354 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3349 line of defense' code to still crash, but giving users fair
3355 line of defense' code to still crash, but giving users fair
3350 warning. I don't want internal errors to go unreported: if there's
3356 warning. I don't want internal errors to go unreported: if there's
3351 an internal problem, IPython should crash and generate a full
3357 an internal problem, IPython should crash and generate a full
3352 report.
3358 report.
3353
3359
3354 2002-11-08 Fernando Perez <fperez@colorado.edu>
3360 2002-11-08 Fernando Perez <fperez@colorado.edu>
3355
3361
3356 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3362 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3357 otherwise uncaught exceptions which can appear if people set
3363 otherwise uncaught exceptions which can appear if people set
3358 sys.stdout to something badly broken. Thanks to a crash report
3364 sys.stdout to something badly broken. Thanks to a crash report
3359 from henni-AT-mail.brainbot.com.
3365 from henni-AT-mail.brainbot.com.
3360
3366
3361 2002-11-04 Fernando Perez <fperez@colorado.edu>
3367 2002-11-04 Fernando Perez <fperez@colorado.edu>
3362
3368
3363 * IPython/iplib.py (InteractiveShell.interact): added
3369 * IPython/iplib.py (InteractiveShell.interact): added
3364 __IPYTHON__active to the builtins. It's a flag which goes on when
3370 __IPYTHON__active to the builtins. It's a flag which goes on when
3365 the interaction starts and goes off again when it stops. This
3371 the interaction starts and goes off again when it stops. This
3366 allows embedding code to detect being inside IPython. Before this
3372 allows embedding code to detect being inside IPython. Before this
3367 was done via __IPYTHON__, but that only shows that an IPython
3373 was done via __IPYTHON__, but that only shows that an IPython
3368 instance has been created.
3374 instance has been created.
3369
3375
3370 * IPython/Magic.py (Magic.magic_env): I realized that in a
3376 * IPython/Magic.py (Magic.magic_env): I realized that in a
3371 UserDict, instance.data holds the data as a normal dict. So I
3377 UserDict, instance.data holds the data as a normal dict. So I
3372 modified @env to return os.environ.data instead of rebuilding a
3378 modified @env to return os.environ.data instead of rebuilding a
3373 dict by hand.
3379 dict by hand.
3374
3380
3375 2002-11-02 Fernando Perez <fperez@colorado.edu>
3381 2002-11-02 Fernando Perez <fperez@colorado.edu>
3376
3382
3377 * IPython/genutils.py (warn): changed so that level 1 prints no
3383 * IPython/genutils.py (warn): changed so that level 1 prints no
3378 header. Level 2 is now the default (with 'WARNING' header, as
3384 header. Level 2 is now the default (with 'WARNING' header, as
3379 before). I think I tracked all places where changes were needed in
3385 before). I think I tracked all places where changes were needed in
3380 IPython, but outside code using the old level numbering may have
3386 IPython, but outside code using the old level numbering may have
3381 broken.
3387 broken.
3382
3388
3383 * IPython/iplib.py (InteractiveShell.runcode): added this to
3389 * IPython/iplib.py (InteractiveShell.runcode): added this to
3384 handle the tracebacks in SystemExit traps correctly. The previous
3390 handle the tracebacks in SystemExit traps correctly. The previous
3385 code (through interact) was printing more of the stack than
3391 code (through interact) was printing more of the stack than
3386 necessary, showing IPython internal code to the user.
3392 necessary, showing IPython internal code to the user.
3387
3393
3388 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3394 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3389 default. Now that the default at the confirmation prompt is yes,
3395 default. Now that the default at the confirmation prompt is yes,
3390 it's not so intrusive. François' argument that ipython sessions
3396 it's not so intrusive. François' argument that ipython sessions
3391 tend to be complex enough not to lose them from an accidental C-d,
3397 tend to be complex enough not to lose them from an accidental C-d,
3392 is a valid one.
3398 is a valid one.
3393
3399
3394 * IPython/iplib.py (InteractiveShell.interact): added a
3400 * IPython/iplib.py (InteractiveShell.interact): added a
3395 showtraceback() call to the SystemExit trap, and modified the exit
3401 showtraceback() call to the SystemExit trap, and modified the exit
3396 confirmation to have yes as the default.
3402 confirmation to have yes as the default.
3397
3403
3398 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3404 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3399 this file. It's been gone from the code for a long time, this was
3405 this file. It's been gone from the code for a long time, this was
3400 simply leftover junk.
3406 simply leftover junk.
3401
3407
3402 2002-11-01 Fernando Perez <fperez@colorado.edu>
3408 2002-11-01 Fernando Perez <fperez@colorado.edu>
3403
3409
3404 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3410 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3405 added. If set, IPython now traps EOF and asks for
3411 added. If set, IPython now traps EOF and asks for
3406 confirmation. After a request by François Pinard.
3412 confirmation. After a request by François Pinard.
3407
3413
3408 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3414 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3409 of @abort, and with a new (better) mechanism for handling the
3415 of @abort, and with a new (better) mechanism for handling the
3410 exceptions.
3416 exceptions.
3411
3417
3412 2002-10-27 Fernando Perez <fperez@colorado.edu>
3418 2002-10-27 Fernando Perez <fperez@colorado.edu>
3413
3419
3414 * IPython/usage.py (__doc__): updated the --help information and
3420 * IPython/usage.py (__doc__): updated the --help information and
3415 the ipythonrc file to indicate that -log generates
3421 the ipythonrc file to indicate that -log generates
3416 ./ipython.log. Also fixed the corresponding info in @logstart.
3422 ./ipython.log. Also fixed the corresponding info in @logstart.
3417 This and several other fixes in the manuals thanks to reports by
3423 This and several other fixes in the manuals thanks to reports by
3418 François Pinard <pinard-AT-iro.umontreal.ca>.
3424 François Pinard <pinard-AT-iro.umontreal.ca>.
3419
3425
3420 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3426 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3421 refer to @logstart (instead of @log, which doesn't exist).
3427 refer to @logstart (instead of @log, which doesn't exist).
3422
3428
3423 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3429 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3424 AttributeError crash. Thanks to Christopher Armstrong
3430 AttributeError crash. Thanks to Christopher Armstrong
3425 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3431 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3426 introduced recently (in 0.2.14pre37) with the fix to the eval
3432 introduced recently (in 0.2.14pre37) with the fix to the eval
3427 problem mentioned below.
3433 problem mentioned below.
3428
3434
3429 2002-10-17 Fernando Perez <fperez@colorado.edu>
3435 2002-10-17 Fernando Perez <fperez@colorado.edu>
3430
3436
3431 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3437 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3432 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3438 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3433
3439
3434 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3440 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3435 this function to fix a problem reported by Alex Schmolck. He saw
3441 this function to fix a problem reported by Alex Schmolck. He saw
3436 it with list comprehensions and generators, which were getting
3442 it with list comprehensions and generators, which were getting
3437 called twice. The real problem was an 'eval' call in testing for
3443 called twice. The real problem was an 'eval' call in testing for
3438 automagic which was evaluating the input line silently.
3444 automagic which was evaluating the input line silently.
3439
3445
3440 This is a potentially very nasty bug, if the input has side
3446 This is a potentially very nasty bug, if the input has side
3441 effects which must not be repeated. The code is much cleaner now,
3447 effects which must not be repeated. The code is much cleaner now,
3442 without any blanket 'except' left and with a regexp test for
3448 without any blanket 'except' left and with a regexp test for
3443 actual function names.
3449 actual function names.
3444
3450
3445 But an eval remains, which I'm not fully comfortable with. I just
3451 But an eval remains, which I'm not fully comfortable with. I just
3446 don't know how to find out if an expression could be a callable in
3452 don't know how to find out if an expression could be a callable in
3447 the user's namespace without doing an eval on the string. However
3453 the user's namespace without doing an eval on the string. However
3448 that string is now much more strictly checked so that no code
3454 that string is now much more strictly checked so that no code
3449 slips by, so the eval should only happen for things that can
3455 slips by, so the eval should only happen for things that can
3450 really be only function/method names.
3456 really be only function/method names.
3451
3457
3452 2002-10-15 Fernando Perez <fperez@colorado.edu>
3458 2002-10-15 Fernando Perez <fperez@colorado.edu>
3453
3459
3454 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3460 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3455 OSX information to main manual, removed README_Mac_OSX file from
3461 OSX information to main manual, removed README_Mac_OSX file from
3456 distribution. Also updated credits for recent additions.
3462 distribution. Also updated credits for recent additions.
3457
3463
3458 2002-10-10 Fernando Perez <fperez@colorado.edu>
3464 2002-10-10 Fernando Perez <fperez@colorado.edu>
3459
3465
3460 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3466 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3461 terminal-related issues. Many thanks to Andrea Riciputi
3467 terminal-related issues. Many thanks to Andrea Riciputi
3462 <andrea.riciputi-AT-libero.it> for writing it.
3468 <andrea.riciputi-AT-libero.it> for writing it.
3463
3469
3464 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3470 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3465 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3471 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3466
3472
3467 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3473 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3468 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3474 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3469 <syver-en-AT-online.no> who both submitted patches for this problem.
3475 <syver-en-AT-online.no> who both submitted patches for this problem.
3470
3476
3471 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3477 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3472 global embedding to make sure that things don't overwrite user
3478 global embedding to make sure that things don't overwrite user
3473 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3479 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3474
3480
3475 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3481 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3476 compatibility. Thanks to Hayden Callow
3482 compatibility. Thanks to Hayden Callow
3477 <h.callow-AT-elec.canterbury.ac.nz>
3483 <h.callow-AT-elec.canterbury.ac.nz>
3478
3484
3479 2002-10-04 Fernando Perez <fperez@colorado.edu>
3485 2002-10-04 Fernando Perez <fperez@colorado.edu>
3480
3486
3481 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3487 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3482 Gnuplot.File objects.
3488 Gnuplot.File objects.
3483
3489
3484 2002-07-23 Fernando Perez <fperez@colorado.edu>
3490 2002-07-23 Fernando Perez <fperez@colorado.edu>
3485
3491
3486 * IPython/genutils.py (timing): Added timings() and timing() for
3492 * IPython/genutils.py (timing): Added timings() and timing() for
3487 quick access to the most commonly needed data, the execution
3493 quick access to the most commonly needed data, the execution
3488 times. Old timing() renamed to timings_out().
3494 times. Old timing() renamed to timings_out().
3489
3495
3490 2002-07-18 Fernando Perez <fperez@colorado.edu>
3496 2002-07-18 Fernando Perez <fperez@colorado.edu>
3491
3497
3492 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3498 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3493 bug with nested instances disrupting the parent's tab completion.
3499 bug with nested instances disrupting the parent's tab completion.
3494
3500
3495 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3501 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3496 all_completions code to begin the emacs integration.
3502 all_completions code to begin the emacs integration.
3497
3503
3498 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3504 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3499 argument to allow titling individual arrays when plotting.
3505 argument to allow titling individual arrays when plotting.
3500
3506
3501 2002-07-15 Fernando Perez <fperez@colorado.edu>
3507 2002-07-15 Fernando Perez <fperez@colorado.edu>
3502
3508
3503 * setup.py (make_shortcut): changed to retrieve the value of
3509 * setup.py (make_shortcut): changed to retrieve the value of
3504 'Program Files' directory from the registry (this value changes in
3510 'Program Files' directory from the registry (this value changes in
3505 non-english versions of Windows). Thanks to Thomas Fanslau
3511 non-english versions of Windows). Thanks to Thomas Fanslau
3506 <tfanslau-AT-gmx.de> for the report.
3512 <tfanslau-AT-gmx.de> for the report.
3507
3513
3508 2002-07-10 Fernando Perez <fperez@colorado.edu>
3514 2002-07-10 Fernando Perez <fperez@colorado.edu>
3509
3515
3510 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3516 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3511 a bug in pdb, which crashes if a line with only whitespace is
3517 a bug in pdb, which crashes if a line with only whitespace is
3512 entered. Bug report submitted to sourceforge.
3518 entered. Bug report submitted to sourceforge.
3513
3519
3514 2002-07-09 Fernando Perez <fperez@colorado.edu>
3520 2002-07-09 Fernando Perez <fperez@colorado.edu>
3515
3521
3516 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3522 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3517 reporting exceptions (it's a bug in inspect.py, I just set a
3523 reporting exceptions (it's a bug in inspect.py, I just set a
3518 workaround).
3524 workaround).
3519
3525
3520 2002-07-08 Fernando Perez <fperez@colorado.edu>
3526 2002-07-08 Fernando Perez <fperez@colorado.edu>
3521
3527
3522 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3528 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3523 __IPYTHON__ in __builtins__ to show up in user_ns.
3529 __IPYTHON__ in __builtins__ to show up in user_ns.
3524
3530
3525 2002-07-03 Fernando Perez <fperez@colorado.edu>
3531 2002-07-03 Fernando Perez <fperez@colorado.edu>
3526
3532
3527 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3533 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3528 name from @gp_set_instance to @gp_set_default.
3534 name from @gp_set_instance to @gp_set_default.
3529
3535
3530 * IPython/ipmaker.py (make_IPython): default editor value set to
3536 * IPython/ipmaker.py (make_IPython): default editor value set to
3531 '0' (a string), to match the rc file. Otherwise will crash when
3537 '0' (a string), to match the rc file. Otherwise will crash when
3532 .strip() is called on it.
3538 .strip() is called on it.
3533
3539
3534
3540
3535 2002-06-28 Fernando Perez <fperez@colorado.edu>
3541 2002-06-28 Fernando Perez <fperez@colorado.edu>
3536
3542
3537 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3543 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3538 of files in current directory when a file is executed via
3544 of files in current directory when a file is executed via
3539 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3545 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3540
3546
3541 * setup.py (manfiles): fix for rpm builds, submitted by RA
3547 * setup.py (manfiles): fix for rpm builds, submitted by RA
3542 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3548 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3543
3549
3544 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3550 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3545 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3551 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3546 string!). A. Schmolck caught this one.
3552 string!). A. Schmolck caught this one.
3547
3553
3548 2002-06-27 Fernando Perez <fperez@colorado.edu>
3554 2002-06-27 Fernando Perez <fperez@colorado.edu>
3549
3555
3550 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3556 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3551 defined files at the cmd line. __name__ wasn't being set to
3557 defined files at the cmd line. __name__ wasn't being set to
3552 __main__.
3558 __main__.
3553
3559
3554 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3560 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3555 regular lists and tuples besides Numeric arrays.
3561 regular lists and tuples besides Numeric arrays.
3556
3562
3557 * IPython/Prompts.py (CachedOutput.__call__): Added output
3563 * IPython/Prompts.py (CachedOutput.__call__): Added output
3558 supression for input ending with ';'. Similar to Mathematica and
3564 supression for input ending with ';'. Similar to Mathematica and
3559 Matlab. The _* vars and Out[] list are still updated, just like
3565 Matlab. The _* vars and Out[] list are still updated, just like
3560 Mathematica behaves.
3566 Mathematica behaves.
3561
3567
3562 2002-06-25 Fernando Perez <fperez@colorado.edu>
3568 2002-06-25 Fernando Perez <fperez@colorado.edu>
3563
3569
3564 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3570 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3565 .ini extensions for profiels under Windows.
3571 .ini extensions for profiels under Windows.
3566
3572
3567 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3573 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3568 string form. Fix contributed by Alexander Schmolck
3574 string form. Fix contributed by Alexander Schmolck
3569 <a.schmolck-AT-gmx.net>
3575 <a.schmolck-AT-gmx.net>
3570
3576
3571 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3577 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3572 pre-configured Gnuplot instance.
3578 pre-configured Gnuplot instance.
3573
3579
3574 2002-06-21 Fernando Perez <fperez@colorado.edu>
3580 2002-06-21 Fernando Perez <fperez@colorado.edu>
3575
3581
3576 * IPython/numutils.py (exp_safe): new function, works around the
3582 * IPython/numutils.py (exp_safe): new function, works around the
3577 underflow problems in Numeric.
3583 underflow problems in Numeric.
3578 (log2): New fn. Safe log in base 2: returns exact integer answer
3584 (log2): New fn. Safe log in base 2: returns exact integer answer
3579 for exact integer powers of 2.
3585 for exact integer powers of 2.
3580
3586
3581 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3587 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3582 properly.
3588 properly.
3583
3589
3584 2002-06-20 Fernando Perez <fperez@colorado.edu>
3590 2002-06-20 Fernando Perez <fperez@colorado.edu>
3585
3591
3586 * IPython/genutils.py (timing): new function like
3592 * IPython/genutils.py (timing): new function like
3587 Mathematica's. Similar to time_test, but returns more info.
3593 Mathematica's. Similar to time_test, but returns more info.
3588
3594
3589 2002-06-18 Fernando Perez <fperez@colorado.edu>
3595 2002-06-18 Fernando Perez <fperez@colorado.edu>
3590
3596
3591 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3597 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3592 according to Mike Heeter's suggestions.
3598 according to Mike Heeter's suggestions.
3593
3599
3594 2002-06-16 Fernando Perez <fperez@colorado.edu>
3600 2002-06-16 Fernando Perez <fperez@colorado.edu>
3595
3601
3596 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3602 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3597 system. GnuplotMagic is gone as a user-directory option. New files
3603 system. GnuplotMagic is gone as a user-directory option. New files
3598 make it easier to use all the gnuplot stuff both from external
3604 make it easier to use all the gnuplot stuff both from external
3599 programs as well as from IPython. Had to rewrite part of
3605 programs as well as from IPython. Had to rewrite part of
3600 hardcopy() b/c of a strange bug: often the ps files simply don't
3606 hardcopy() b/c of a strange bug: often the ps files simply don't
3601 get created, and require a repeat of the command (often several
3607 get created, and require a repeat of the command (often several
3602 times).
3608 times).
3603
3609
3604 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3610 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3605 resolve output channel at call time, so that if sys.stderr has
3611 resolve output channel at call time, so that if sys.stderr has
3606 been redirected by user this gets honored.
3612 been redirected by user this gets honored.
3607
3613
3608 2002-06-13 Fernando Perez <fperez@colorado.edu>
3614 2002-06-13 Fernando Perez <fperez@colorado.edu>
3609
3615
3610 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3616 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3611 IPShell. Kept a copy with the old names to avoid breaking people's
3617 IPShell. Kept a copy with the old names to avoid breaking people's
3612 embedded code.
3618 embedded code.
3613
3619
3614 * IPython/ipython: simplified it to the bare minimum after
3620 * IPython/ipython: simplified it to the bare minimum after
3615 Holger's suggestions. Added info about how to use it in
3621 Holger's suggestions. Added info about how to use it in
3616 PYTHONSTARTUP.
3622 PYTHONSTARTUP.
3617
3623
3618 * IPython/Shell.py (IPythonShell): changed the options passing
3624 * IPython/Shell.py (IPythonShell): changed the options passing
3619 from a string with funky %s replacements to a straight list. Maybe
3625 from a string with funky %s replacements to a straight list. Maybe
3620 a bit more typing, but it follows sys.argv conventions, so there's
3626 a bit more typing, but it follows sys.argv conventions, so there's
3621 less special-casing to remember.
3627 less special-casing to remember.
3622
3628
3623 2002-06-12 Fernando Perez <fperez@colorado.edu>
3629 2002-06-12 Fernando Perez <fperez@colorado.edu>
3624
3630
3625 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3631 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3626 command. Thanks to a suggestion by Mike Heeter.
3632 command. Thanks to a suggestion by Mike Heeter.
3627 (Magic.magic_pfile): added behavior to look at filenames if given
3633 (Magic.magic_pfile): added behavior to look at filenames if given
3628 arg is not a defined object.
3634 arg is not a defined object.
3629 (Magic.magic_save): New @save function to save code snippets. Also
3635 (Magic.magic_save): New @save function to save code snippets. Also
3630 a Mike Heeter idea.
3636 a Mike Heeter idea.
3631
3637
3632 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3638 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3633 plot() and replot(). Much more convenient now, especially for
3639 plot() and replot(). Much more convenient now, especially for
3634 interactive use.
3640 interactive use.
3635
3641
3636 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3642 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3637 filenames.
3643 filenames.
3638
3644
3639 2002-06-02 Fernando Perez <fperez@colorado.edu>
3645 2002-06-02 Fernando Perez <fperez@colorado.edu>
3640
3646
3641 * IPython/Struct.py (Struct.__init__): modified to admit
3647 * IPython/Struct.py (Struct.__init__): modified to admit
3642 initialization via another struct.
3648 initialization via another struct.
3643
3649
3644 * IPython/genutils.py (SystemExec.__init__): New stateful
3650 * IPython/genutils.py (SystemExec.__init__): New stateful
3645 interface to xsys and bq. Useful for writing system scripts.
3651 interface to xsys and bq. Useful for writing system scripts.
3646
3652
3647 2002-05-30 Fernando Perez <fperez@colorado.edu>
3653 2002-05-30 Fernando Perez <fperez@colorado.edu>
3648
3654
3649 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3655 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3650 documents. This will make the user download smaller (it's getting
3656 documents. This will make the user download smaller (it's getting
3651 too big).
3657 too big).
3652
3658
3653 2002-05-29 Fernando Perez <fperez@colorado.edu>
3659 2002-05-29 Fernando Perez <fperez@colorado.edu>
3654
3660
3655 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3661 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3656 fix problems with shelve and pickle. Seems to work, but I don't
3662 fix problems with shelve and pickle. Seems to work, but I don't
3657 know if corner cases break it. Thanks to Mike Heeter
3663 know if corner cases break it. Thanks to Mike Heeter
3658 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3664 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3659
3665
3660 2002-05-24 Fernando Perez <fperez@colorado.edu>
3666 2002-05-24 Fernando Perez <fperez@colorado.edu>
3661
3667
3662 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3668 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3663 macros having broken.
3669 macros having broken.
3664
3670
3665 2002-05-21 Fernando Perez <fperez@colorado.edu>
3671 2002-05-21 Fernando Perez <fperez@colorado.edu>
3666
3672
3667 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3673 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3668 introduced logging bug: all history before logging started was
3674 introduced logging bug: all history before logging started was
3669 being written one character per line! This came from the redesign
3675 being written one character per line! This came from the redesign
3670 of the input history as a special list which slices to strings,
3676 of the input history as a special list which slices to strings,
3671 not to lists.
3677 not to lists.
3672
3678
3673 2002-05-20 Fernando Perez <fperez@colorado.edu>
3679 2002-05-20 Fernando Perez <fperez@colorado.edu>
3674
3680
3675 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3681 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3676 be an attribute of all classes in this module. The design of these
3682 be an attribute of all classes in this module. The design of these
3677 classes needs some serious overhauling.
3683 classes needs some serious overhauling.
3678
3684
3679 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3685 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3680 which was ignoring '_' in option names.
3686 which was ignoring '_' in option names.
3681
3687
3682 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3688 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3683 'Verbose_novars' to 'Context' and made it the new default. It's a
3689 'Verbose_novars' to 'Context' and made it the new default. It's a
3684 bit more readable and also safer than verbose.
3690 bit more readable and also safer than verbose.
3685
3691
3686 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3692 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3687 triple-quoted strings.
3693 triple-quoted strings.
3688
3694
3689 * IPython/OInspect.py (__all__): new module exposing the object
3695 * IPython/OInspect.py (__all__): new module exposing the object
3690 introspection facilities. Now the corresponding magics are dummy
3696 introspection facilities. Now the corresponding magics are dummy
3691 wrappers around this. Having this module will make it much easier
3697 wrappers around this. Having this module will make it much easier
3692 to put these functions into our modified pdb.
3698 to put these functions into our modified pdb.
3693 This new object inspector system uses the new colorizing module,
3699 This new object inspector system uses the new colorizing module,
3694 so source code and other things are nicely syntax highlighted.
3700 so source code and other things are nicely syntax highlighted.
3695
3701
3696 2002-05-18 Fernando Perez <fperez@colorado.edu>
3702 2002-05-18 Fernando Perez <fperez@colorado.edu>
3697
3703
3698 * IPython/ColorANSI.py: Split the coloring tools into a separate
3704 * IPython/ColorANSI.py: Split the coloring tools into a separate
3699 module so I can use them in other code easier (they were part of
3705 module so I can use them in other code easier (they were part of
3700 ultraTB).
3706 ultraTB).
3701
3707
3702 2002-05-17 Fernando Perez <fperez@colorado.edu>
3708 2002-05-17 Fernando Perez <fperez@colorado.edu>
3703
3709
3704 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3710 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3705 fixed it to set the global 'g' also to the called instance, as
3711 fixed it to set the global 'g' also to the called instance, as
3706 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3712 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3707 user's 'g' variables).
3713 user's 'g' variables).
3708
3714
3709 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3715 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3710 global variables (aliases to _ih,_oh) so that users which expect
3716 global variables (aliases to _ih,_oh) so that users which expect
3711 In[5] or Out[7] to work aren't unpleasantly surprised.
3717 In[5] or Out[7] to work aren't unpleasantly surprised.
3712 (InputList.__getslice__): new class to allow executing slices of
3718 (InputList.__getslice__): new class to allow executing slices of
3713 input history directly. Very simple class, complements the use of
3719 input history directly. Very simple class, complements the use of
3714 macros.
3720 macros.
3715
3721
3716 2002-05-16 Fernando Perez <fperez@colorado.edu>
3722 2002-05-16 Fernando Perez <fperez@colorado.edu>
3717
3723
3718 * setup.py (docdirbase): make doc directory be just doc/IPython
3724 * setup.py (docdirbase): make doc directory be just doc/IPython
3719 without version numbers, it will reduce clutter for users.
3725 without version numbers, it will reduce clutter for users.
3720
3726
3721 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3727 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3722 execfile call to prevent possible memory leak. See for details:
3728 execfile call to prevent possible memory leak. See for details:
3723 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3729 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3724
3730
3725 2002-05-15 Fernando Perez <fperez@colorado.edu>
3731 2002-05-15 Fernando Perez <fperez@colorado.edu>
3726
3732
3727 * IPython/Magic.py (Magic.magic_psource): made the object
3733 * IPython/Magic.py (Magic.magic_psource): made the object
3728 introspection names be more standard: pdoc, pdef, pfile and
3734 introspection names be more standard: pdoc, pdef, pfile and
3729 psource. They all print/page their output, and it makes
3735 psource. They all print/page their output, and it makes
3730 remembering them easier. Kept old names for compatibility as
3736 remembering them easier. Kept old names for compatibility as
3731 aliases.
3737 aliases.
3732
3738
3733 2002-05-14 Fernando Perez <fperez@colorado.edu>
3739 2002-05-14 Fernando Perez <fperez@colorado.edu>
3734
3740
3735 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3741 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3736 what the mouse problem was. The trick is to use gnuplot with temp
3742 what the mouse problem was. The trick is to use gnuplot with temp
3737 files and NOT with pipes (for data communication), because having
3743 files and NOT with pipes (for data communication), because having
3738 both pipes and the mouse on is bad news.
3744 both pipes and the mouse on is bad news.
3739
3745
3740 2002-05-13 Fernando Perez <fperez@colorado.edu>
3746 2002-05-13 Fernando Perez <fperez@colorado.edu>
3741
3747
3742 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3748 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3743 bug. Information would be reported about builtins even when
3749 bug. Information would be reported about builtins even when
3744 user-defined functions overrode them.
3750 user-defined functions overrode them.
3745
3751
3746 2002-05-11 Fernando Perez <fperez@colorado.edu>
3752 2002-05-11 Fernando Perez <fperez@colorado.edu>
3747
3753
3748 * IPython/__init__.py (__all__): removed FlexCompleter from
3754 * IPython/__init__.py (__all__): removed FlexCompleter from
3749 __all__ so that things don't fail in platforms without readline.
3755 __all__ so that things don't fail in platforms without readline.
3750
3756
3751 2002-05-10 Fernando Perez <fperez@colorado.edu>
3757 2002-05-10 Fernando Perez <fperez@colorado.edu>
3752
3758
3753 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3759 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3754 it requires Numeric, effectively making Numeric a dependency for
3760 it requires Numeric, effectively making Numeric a dependency for
3755 IPython.
3761 IPython.
3756
3762
3757 * Released 0.2.13
3763 * Released 0.2.13
3758
3764
3759 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3765 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3760 profiler interface. Now all the major options from the profiler
3766 profiler interface. Now all the major options from the profiler
3761 module are directly supported in IPython, both for single
3767 module are directly supported in IPython, both for single
3762 expressions (@prun) and for full programs (@run -p).
3768 expressions (@prun) and for full programs (@run -p).
3763
3769
3764 2002-05-09 Fernando Perez <fperez@colorado.edu>
3770 2002-05-09 Fernando Perez <fperez@colorado.edu>
3765
3771
3766 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3772 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3767 magic properly formatted for screen.
3773 magic properly formatted for screen.
3768
3774
3769 * setup.py (make_shortcut): Changed things to put pdf version in
3775 * setup.py (make_shortcut): Changed things to put pdf version in
3770 doc/ instead of doc/manual (had to change lyxport a bit).
3776 doc/ instead of doc/manual (had to change lyxport a bit).
3771
3777
3772 * IPython/Magic.py (Profile.string_stats): made profile runs go
3778 * IPython/Magic.py (Profile.string_stats): made profile runs go
3773 through pager (they are long and a pager allows searching, saving,
3779 through pager (they are long and a pager allows searching, saving,
3774 etc.)
3780 etc.)
3775
3781
3776 2002-05-08 Fernando Perez <fperez@colorado.edu>
3782 2002-05-08 Fernando Perez <fperez@colorado.edu>
3777
3783
3778 * Released 0.2.12
3784 * Released 0.2.12
3779
3785
3780 2002-05-06 Fernando Perez <fperez@colorado.edu>
3786 2002-05-06 Fernando Perez <fperez@colorado.edu>
3781
3787
3782 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3788 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3783 introduced); 'hist n1 n2' was broken.
3789 introduced); 'hist n1 n2' was broken.
3784 (Magic.magic_pdb): added optional on/off arguments to @pdb
3790 (Magic.magic_pdb): added optional on/off arguments to @pdb
3785 (Magic.magic_run): added option -i to @run, which executes code in
3791 (Magic.magic_run): added option -i to @run, which executes code in
3786 the IPython namespace instead of a clean one. Also added @irun as
3792 the IPython namespace instead of a clean one. Also added @irun as
3787 an alias to @run -i.
3793 an alias to @run -i.
3788
3794
3789 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3795 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3790 fixed (it didn't really do anything, the namespaces were wrong).
3796 fixed (it didn't really do anything, the namespaces were wrong).
3791
3797
3792 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3798 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3793
3799
3794 * IPython/__init__.py (__all__): Fixed package namespace, now
3800 * IPython/__init__.py (__all__): Fixed package namespace, now
3795 'import IPython' does give access to IPython.<all> as
3801 'import IPython' does give access to IPython.<all> as
3796 expected. Also renamed __release__ to Release.
3802 expected. Also renamed __release__ to Release.
3797
3803
3798 * IPython/Debugger.py (__license__): created new Pdb class which
3804 * IPython/Debugger.py (__license__): created new Pdb class which
3799 functions like a drop-in for the normal pdb.Pdb but does NOT
3805 functions like a drop-in for the normal pdb.Pdb but does NOT
3800 import readline by default. This way it doesn't muck up IPython's
3806 import readline by default. This way it doesn't muck up IPython's
3801 readline handling, and now tab-completion finally works in the
3807 readline handling, and now tab-completion finally works in the
3802 debugger -- sort of. It completes things globally visible, but the
3808 debugger -- sort of. It completes things globally visible, but the
3803 completer doesn't track the stack as pdb walks it. That's a bit
3809 completer doesn't track the stack as pdb walks it. That's a bit
3804 tricky, and I'll have to implement it later.
3810 tricky, and I'll have to implement it later.
3805
3811
3806 2002-05-05 Fernando Perez <fperez@colorado.edu>
3812 2002-05-05 Fernando Perez <fperez@colorado.edu>
3807
3813
3808 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3814 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3809 magic docstrings when printed via ? (explicit \'s were being
3815 magic docstrings when printed via ? (explicit \'s were being
3810 printed).
3816 printed).
3811
3817
3812 * IPython/ipmaker.py (make_IPython): fixed namespace
3818 * IPython/ipmaker.py (make_IPython): fixed namespace
3813 identification bug. Now variables loaded via logs or command-line
3819 identification bug. Now variables loaded via logs or command-line
3814 files are recognized in the interactive namespace by @who.
3820 files are recognized in the interactive namespace by @who.
3815
3821
3816 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3822 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3817 log replay system stemming from the string form of Structs.
3823 log replay system stemming from the string form of Structs.
3818
3824
3819 * IPython/Magic.py (Macro.__init__): improved macros to properly
3825 * IPython/Magic.py (Macro.__init__): improved macros to properly
3820 handle magic commands in them.
3826 handle magic commands in them.
3821 (Magic.magic_logstart): usernames are now expanded so 'logstart
3827 (Magic.magic_logstart): usernames are now expanded so 'logstart
3822 ~/mylog' now works.
3828 ~/mylog' now works.
3823
3829
3824 * IPython/iplib.py (complete): fixed bug where paths starting with
3830 * IPython/iplib.py (complete): fixed bug where paths starting with
3825 '/' would be completed as magic names.
3831 '/' would be completed as magic names.
3826
3832
3827 2002-05-04 Fernando Perez <fperez@colorado.edu>
3833 2002-05-04 Fernando Perez <fperez@colorado.edu>
3828
3834
3829 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3835 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3830 allow running full programs under the profiler's control.
3836 allow running full programs under the profiler's control.
3831
3837
3832 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3838 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3833 mode to report exceptions verbosely but without formatting
3839 mode to report exceptions verbosely but without formatting
3834 variables. This addresses the issue of ipython 'freezing' (it's
3840 variables. This addresses the issue of ipython 'freezing' (it's
3835 not frozen, but caught in an expensive formatting loop) when huge
3841 not frozen, but caught in an expensive formatting loop) when huge
3836 variables are in the context of an exception.
3842 variables are in the context of an exception.
3837 (VerboseTB.text): Added '--->' markers at line where exception was
3843 (VerboseTB.text): Added '--->' markers at line where exception was
3838 triggered. Much clearer to read, especially in NoColor modes.
3844 triggered. Much clearer to read, especially in NoColor modes.
3839
3845
3840 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3846 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3841 implemented in reverse when changing to the new parse_options().
3847 implemented in reverse when changing to the new parse_options().
3842
3848
3843 2002-05-03 Fernando Perez <fperez@colorado.edu>
3849 2002-05-03 Fernando Perez <fperez@colorado.edu>
3844
3850
3845 * IPython/Magic.py (Magic.parse_options): new function so that
3851 * IPython/Magic.py (Magic.parse_options): new function so that
3846 magics can parse options easier.
3852 magics can parse options easier.
3847 (Magic.magic_prun): new function similar to profile.run(),
3853 (Magic.magic_prun): new function similar to profile.run(),
3848 suggested by Chris Hart.
3854 suggested by Chris Hart.
3849 (Magic.magic_cd): fixed behavior so that it only changes if
3855 (Magic.magic_cd): fixed behavior so that it only changes if
3850 directory actually is in history.
3856 directory actually is in history.
3851
3857
3852 * IPython/usage.py (__doc__): added information about potential
3858 * IPython/usage.py (__doc__): added information about potential
3853 slowness of Verbose exception mode when there are huge data
3859 slowness of Verbose exception mode when there are huge data
3854 structures to be formatted (thanks to Archie Paulson).
3860 structures to be formatted (thanks to Archie Paulson).
3855
3861
3856 * IPython/ipmaker.py (make_IPython): Changed default logging
3862 * IPython/ipmaker.py (make_IPython): Changed default logging
3857 (when simply called with -log) to use curr_dir/ipython.log in
3863 (when simply called with -log) to use curr_dir/ipython.log in
3858 rotate mode. Fixed crash which was occuring with -log before
3864 rotate mode. Fixed crash which was occuring with -log before
3859 (thanks to Jim Boyle).
3865 (thanks to Jim Boyle).
3860
3866
3861 2002-05-01 Fernando Perez <fperez@colorado.edu>
3867 2002-05-01 Fernando Perez <fperez@colorado.edu>
3862
3868
3863 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3869 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3864 was nasty -- though somewhat of a corner case).
3870 was nasty -- though somewhat of a corner case).
3865
3871
3866 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3872 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3867 text (was a bug).
3873 text (was a bug).
3868
3874
3869 2002-04-30 Fernando Perez <fperez@colorado.edu>
3875 2002-04-30 Fernando Perez <fperez@colorado.edu>
3870
3876
3871 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3877 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3872 a print after ^D or ^C from the user so that the In[] prompt
3878 a print after ^D or ^C from the user so that the In[] prompt
3873 doesn't over-run the gnuplot one.
3879 doesn't over-run the gnuplot one.
3874
3880
3875 2002-04-29 Fernando Perez <fperez@colorado.edu>
3881 2002-04-29 Fernando Perez <fperez@colorado.edu>
3876
3882
3877 * Released 0.2.10
3883 * Released 0.2.10
3878
3884
3879 * IPython/__release__.py (version): get date dynamically.
3885 * IPython/__release__.py (version): get date dynamically.
3880
3886
3881 * Misc. documentation updates thanks to Arnd's comments. Also ran
3887 * Misc. documentation updates thanks to Arnd's comments. Also ran
3882 a full spellcheck on the manual (hadn't been done in a while).
3888 a full spellcheck on the manual (hadn't been done in a while).
3883
3889
3884 2002-04-27 Fernando Perez <fperez@colorado.edu>
3890 2002-04-27 Fernando Perez <fperez@colorado.edu>
3885
3891
3886 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3892 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3887 starting a log in mid-session would reset the input history list.
3893 starting a log in mid-session would reset the input history list.
3888
3894
3889 2002-04-26 Fernando Perez <fperez@colorado.edu>
3895 2002-04-26 Fernando Perez <fperez@colorado.edu>
3890
3896
3891 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3897 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3892 all files were being included in an update. Now anything in
3898 all files were being included in an update. Now anything in
3893 UserConfig that matches [A-Za-z]*.py will go (this excludes
3899 UserConfig that matches [A-Za-z]*.py will go (this excludes
3894 __init__.py)
3900 __init__.py)
3895
3901
3896 2002-04-25 Fernando Perez <fperez@colorado.edu>
3902 2002-04-25 Fernando Perez <fperez@colorado.edu>
3897
3903
3898 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3904 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3899 to __builtins__ so that any form of embedded or imported code can
3905 to __builtins__ so that any form of embedded or imported code can
3900 test for being inside IPython.
3906 test for being inside IPython.
3901
3907
3902 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3908 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3903 changed to GnuplotMagic because it's now an importable module,
3909 changed to GnuplotMagic because it's now an importable module,
3904 this makes the name follow that of the standard Gnuplot module.
3910 this makes the name follow that of the standard Gnuplot module.
3905 GnuplotMagic can now be loaded at any time in mid-session.
3911 GnuplotMagic can now be loaded at any time in mid-session.
3906
3912
3907 2002-04-24 Fernando Perez <fperez@colorado.edu>
3913 2002-04-24 Fernando Perez <fperez@colorado.edu>
3908
3914
3909 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3915 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3910 the globals (IPython has its own namespace) and the
3916 the globals (IPython has its own namespace) and the
3911 PhysicalQuantity stuff is much better anyway.
3917 PhysicalQuantity stuff is much better anyway.
3912
3918
3913 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3919 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3914 embedding example to standard user directory for
3920 embedding example to standard user directory for
3915 distribution. Also put it in the manual.
3921 distribution. Also put it in the manual.
3916
3922
3917 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3923 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3918 instance as first argument (so it doesn't rely on some obscure
3924 instance as first argument (so it doesn't rely on some obscure
3919 hidden global).
3925 hidden global).
3920
3926
3921 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3927 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3922 delimiters. While it prevents ().TAB from working, it allows
3928 delimiters. While it prevents ().TAB from working, it allows
3923 completions in open (... expressions. This is by far a more common
3929 completions in open (... expressions. This is by far a more common
3924 case.
3930 case.
3925
3931
3926 2002-04-23 Fernando Perez <fperez@colorado.edu>
3932 2002-04-23 Fernando Perez <fperez@colorado.edu>
3927
3933
3928 * IPython/Extensions/InterpreterPasteInput.py: new
3934 * IPython/Extensions/InterpreterPasteInput.py: new
3929 syntax-processing module for pasting lines with >>> or ... at the
3935 syntax-processing module for pasting lines with >>> or ... at the
3930 start.
3936 start.
3931
3937
3932 * IPython/Extensions/PhysicalQ_Interactive.py
3938 * IPython/Extensions/PhysicalQ_Interactive.py
3933 (PhysicalQuantityInteractive.__int__): fixed to work with either
3939 (PhysicalQuantityInteractive.__int__): fixed to work with either
3934 Numeric or math.
3940 Numeric or math.
3935
3941
3936 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3942 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3937 provided profiles. Now we have:
3943 provided profiles. Now we have:
3938 -math -> math module as * and cmath with its own namespace.
3944 -math -> math module as * and cmath with its own namespace.
3939 -numeric -> Numeric as *, plus gnuplot & grace
3945 -numeric -> Numeric as *, plus gnuplot & grace
3940 -physics -> same as before
3946 -physics -> same as before
3941
3947
3942 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3948 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3943 user-defined magics wouldn't be found by @magic if they were
3949 user-defined magics wouldn't be found by @magic if they were
3944 defined as class methods. Also cleaned up the namespace search
3950 defined as class methods. Also cleaned up the namespace search
3945 logic and the string building (to use %s instead of many repeated
3951 logic and the string building (to use %s instead of many repeated
3946 string adds).
3952 string adds).
3947
3953
3948 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3954 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3949 of user-defined magics to operate with class methods (cleaner, in
3955 of user-defined magics to operate with class methods (cleaner, in
3950 line with the gnuplot code).
3956 line with the gnuplot code).
3951
3957
3952 2002-04-22 Fernando Perez <fperez@colorado.edu>
3958 2002-04-22 Fernando Perez <fperez@colorado.edu>
3953
3959
3954 * setup.py: updated dependency list so that manual is updated when
3960 * setup.py: updated dependency list so that manual is updated when
3955 all included files change.
3961 all included files change.
3956
3962
3957 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3963 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3958 the delimiter removal option (the fix is ugly right now).
3964 the delimiter removal option (the fix is ugly right now).
3959
3965
3960 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3966 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3961 all of the math profile (quicker loading, no conflict between
3967 all of the math profile (quicker loading, no conflict between
3962 g-9.8 and g-gnuplot).
3968 g-9.8 and g-gnuplot).
3963
3969
3964 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3970 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3965 name of post-mortem files to IPython_crash_report.txt.
3971 name of post-mortem files to IPython_crash_report.txt.
3966
3972
3967 * Cleanup/update of the docs. Added all the new readline info and
3973 * Cleanup/update of the docs. Added all the new readline info and
3968 formatted all lists as 'real lists'.
3974 formatted all lists as 'real lists'.
3969
3975
3970 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3976 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3971 tab-completion options, since the full readline parse_and_bind is
3977 tab-completion options, since the full readline parse_and_bind is
3972 now accessible.
3978 now accessible.
3973
3979
3974 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3980 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3975 handling of readline options. Now users can specify any string to
3981 handling of readline options. Now users can specify any string to
3976 be passed to parse_and_bind(), as well as the delimiters to be
3982 be passed to parse_and_bind(), as well as the delimiters to be
3977 removed.
3983 removed.
3978 (InteractiveShell.__init__): Added __name__ to the global
3984 (InteractiveShell.__init__): Added __name__ to the global
3979 namespace so that things like Itpl which rely on its existence
3985 namespace so that things like Itpl which rely on its existence
3980 don't crash.
3986 don't crash.
3981 (InteractiveShell._prefilter): Defined the default with a _ so
3987 (InteractiveShell._prefilter): Defined the default with a _ so
3982 that prefilter() is easier to override, while the default one
3988 that prefilter() is easier to override, while the default one
3983 remains available.
3989 remains available.
3984
3990
3985 2002-04-18 Fernando Perez <fperez@colorado.edu>
3991 2002-04-18 Fernando Perez <fperez@colorado.edu>
3986
3992
3987 * Added information about pdb in the docs.
3993 * Added information about pdb in the docs.
3988
3994
3989 2002-04-17 Fernando Perez <fperez@colorado.edu>
3995 2002-04-17 Fernando Perez <fperez@colorado.edu>
3990
3996
3991 * IPython/ipmaker.py (make_IPython): added rc_override option to
3997 * IPython/ipmaker.py (make_IPython): added rc_override option to
3992 allow passing config options at creation time which may override
3998 allow passing config options at creation time which may override
3993 anything set in the config files or command line. This is
3999 anything set in the config files or command line. This is
3994 particularly useful for configuring embedded instances.
4000 particularly useful for configuring embedded instances.
3995
4001
3996 2002-04-15 Fernando Perez <fperez@colorado.edu>
4002 2002-04-15 Fernando Perez <fperez@colorado.edu>
3997
4003
3998 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4004 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3999 crash embedded instances because of the input cache falling out of
4005 crash embedded instances because of the input cache falling out of
4000 sync with the output counter.
4006 sync with the output counter.
4001
4007
4002 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4008 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4003 mode which calls pdb after an uncaught exception in IPython itself.
4009 mode which calls pdb after an uncaught exception in IPython itself.
4004
4010
4005 2002-04-14 Fernando Perez <fperez@colorado.edu>
4011 2002-04-14 Fernando Perez <fperez@colorado.edu>
4006
4012
4007 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4013 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4008 readline, fix it back after each call.
4014 readline, fix it back after each call.
4009
4015
4010 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4016 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4011 method to force all access via __call__(), which guarantees that
4017 method to force all access via __call__(), which guarantees that
4012 traceback references are properly deleted.
4018 traceback references are properly deleted.
4013
4019
4014 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4020 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4015 improve printing when pprint is in use.
4021 improve printing when pprint is in use.
4016
4022
4017 2002-04-13 Fernando Perez <fperez@colorado.edu>
4023 2002-04-13 Fernando Perez <fperez@colorado.edu>
4018
4024
4019 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4025 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4020 exceptions aren't caught anymore. If the user triggers one, he
4026 exceptions aren't caught anymore. If the user triggers one, he
4021 should know why he's doing it and it should go all the way up,
4027 should know why he's doing it and it should go all the way up,
4022 just like any other exception. So now @abort will fully kill the
4028 just like any other exception. So now @abort will fully kill the
4023 embedded interpreter and the embedding code (unless that happens
4029 embedded interpreter and the embedding code (unless that happens
4024 to catch SystemExit).
4030 to catch SystemExit).
4025
4031
4026 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4032 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4027 and a debugger() method to invoke the interactive pdb debugger
4033 and a debugger() method to invoke the interactive pdb debugger
4028 after printing exception information. Also added the corresponding
4034 after printing exception information. Also added the corresponding
4029 -pdb option and @pdb magic to control this feature, and updated
4035 -pdb option and @pdb magic to control this feature, and updated
4030 the docs. After a suggestion from Christopher Hart
4036 the docs. After a suggestion from Christopher Hart
4031 (hart-AT-caltech.edu).
4037 (hart-AT-caltech.edu).
4032
4038
4033 2002-04-12 Fernando Perez <fperez@colorado.edu>
4039 2002-04-12 Fernando Perez <fperez@colorado.edu>
4034
4040
4035 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4041 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4036 the exception handlers defined by the user (not the CrashHandler)
4042 the exception handlers defined by the user (not the CrashHandler)
4037 so that user exceptions don't trigger an ipython bug report.
4043 so that user exceptions don't trigger an ipython bug report.
4038
4044
4039 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4045 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4040 configurable (it should have always been so).
4046 configurable (it should have always been so).
4041
4047
4042 2002-03-26 Fernando Perez <fperez@colorado.edu>
4048 2002-03-26 Fernando Perez <fperez@colorado.edu>
4043
4049
4044 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4050 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4045 and there to fix embedding namespace issues. This should all be
4051 and there to fix embedding namespace issues. This should all be
4046 done in a more elegant way.
4052 done in a more elegant way.
4047
4053
4048 2002-03-25 Fernando Perez <fperez@colorado.edu>
4054 2002-03-25 Fernando Perez <fperez@colorado.edu>
4049
4055
4050 * IPython/genutils.py (get_home_dir): Try to make it work under
4056 * IPython/genutils.py (get_home_dir): Try to make it work under
4051 win9x also.
4057 win9x also.
4052
4058
4053 2002-03-20 Fernando Perez <fperez@colorado.edu>
4059 2002-03-20 Fernando Perez <fperez@colorado.edu>
4054
4060
4055 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4061 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4056 sys.displayhook untouched upon __init__.
4062 sys.displayhook untouched upon __init__.
4057
4063
4058 2002-03-19 Fernando Perez <fperez@colorado.edu>
4064 2002-03-19 Fernando Perez <fperez@colorado.edu>
4059
4065
4060 * Released 0.2.9 (for embedding bug, basically).
4066 * Released 0.2.9 (for embedding bug, basically).
4061
4067
4062 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4068 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4063 exceptions so that enclosing shell's state can be restored.
4069 exceptions so that enclosing shell's state can be restored.
4064
4070
4065 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4071 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4066 naming conventions in the .ipython/ dir.
4072 naming conventions in the .ipython/ dir.
4067
4073
4068 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4074 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4069 from delimiters list so filenames with - in them get expanded.
4075 from delimiters list so filenames with - in them get expanded.
4070
4076
4071 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4077 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4072 sys.displayhook not being properly restored after an embedded call.
4078 sys.displayhook not being properly restored after an embedded call.
4073
4079
4074 2002-03-18 Fernando Perez <fperez@colorado.edu>
4080 2002-03-18 Fernando Perez <fperez@colorado.edu>
4075
4081
4076 * Released 0.2.8
4082 * Released 0.2.8
4077
4083
4078 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4084 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4079 some files weren't being included in a -upgrade.
4085 some files weren't being included in a -upgrade.
4080 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4086 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4081 on' so that the first tab completes.
4087 on' so that the first tab completes.
4082 (InteractiveShell.handle_magic): fixed bug with spaces around
4088 (InteractiveShell.handle_magic): fixed bug with spaces around
4083 quotes breaking many magic commands.
4089 quotes breaking many magic commands.
4084
4090
4085 * setup.py: added note about ignoring the syntax error messages at
4091 * setup.py: added note about ignoring the syntax error messages at
4086 installation.
4092 installation.
4087
4093
4088 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4094 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4089 streamlining the gnuplot interface, now there's only one magic @gp.
4095 streamlining the gnuplot interface, now there's only one magic @gp.
4090
4096
4091 2002-03-17 Fernando Perez <fperez@colorado.edu>
4097 2002-03-17 Fernando Perez <fperez@colorado.edu>
4092
4098
4093 * IPython/UserConfig/magic_gnuplot.py: new name for the
4099 * IPython/UserConfig/magic_gnuplot.py: new name for the
4094 example-magic_pm.py file. Much enhanced system, now with a shell
4100 example-magic_pm.py file. Much enhanced system, now with a shell
4095 for communicating directly with gnuplot, one command at a time.
4101 for communicating directly with gnuplot, one command at a time.
4096
4102
4097 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4103 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4098 setting __name__=='__main__'.
4104 setting __name__=='__main__'.
4099
4105
4100 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4106 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4101 mini-shell for accessing gnuplot from inside ipython. Should
4107 mini-shell for accessing gnuplot from inside ipython. Should
4102 extend it later for grace access too. Inspired by Arnd's
4108 extend it later for grace access too. Inspired by Arnd's
4103 suggestion.
4109 suggestion.
4104
4110
4105 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4111 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4106 calling magic functions with () in their arguments. Thanks to Arnd
4112 calling magic functions with () in their arguments. Thanks to Arnd
4107 Baecker for pointing this to me.
4113 Baecker for pointing this to me.
4108
4114
4109 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4115 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4110 infinitely for integer or complex arrays (only worked with floats).
4116 infinitely for integer or complex arrays (only worked with floats).
4111
4117
4112 2002-03-16 Fernando Perez <fperez@colorado.edu>
4118 2002-03-16 Fernando Perez <fperez@colorado.edu>
4113
4119
4114 * setup.py: Merged setup and setup_windows into a single script
4120 * setup.py: Merged setup and setup_windows into a single script
4115 which properly handles things for windows users.
4121 which properly handles things for windows users.
4116
4122
4117 2002-03-15 Fernando Perez <fperez@colorado.edu>
4123 2002-03-15 Fernando Perez <fperez@colorado.edu>
4118
4124
4119 * Big change to the manual: now the magics are all automatically
4125 * Big change to the manual: now the magics are all automatically
4120 documented. This information is generated from their docstrings
4126 documented. This information is generated from their docstrings
4121 and put in a latex file included by the manual lyx file. This way
4127 and put in a latex file included by the manual lyx file. This way
4122 we get always up to date information for the magics. The manual
4128 we get always up to date information for the magics. The manual
4123 now also has proper version information, also auto-synced.
4129 now also has proper version information, also auto-synced.
4124
4130
4125 For this to work, an undocumented --magic_docstrings option was added.
4131 For this to work, an undocumented --magic_docstrings option was added.
4126
4132
4127 2002-03-13 Fernando Perez <fperez@colorado.edu>
4133 2002-03-13 Fernando Perez <fperez@colorado.edu>
4128
4134
4129 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4135 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4130 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4136 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4131
4137
4132 2002-03-12 Fernando Perez <fperez@colorado.edu>
4138 2002-03-12 Fernando Perez <fperez@colorado.edu>
4133
4139
4134 * IPython/ultraTB.py (TermColors): changed color escapes again to
4140 * IPython/ultraTB.py (TermColors): changed color escapes again to
4135 fix the (old, reintroduced) line-wrapping bug. Basically, if
4141 fix the (old, reintroduced) line-wrapping bug. Basically, if
4136 \001..\002 aren't given in the color escapes, lines get wrapped
4142 \001..\002 aren't given in the color escapes, lines get wrapped
4137 weirdly. But giving those screws up old xterms and emacs terms. So
4143 weirdly. But giving those screws up old xterms and emacs terms. So
4138 I added some logic for emacs terms to be ok, but I can't identify old
4144 I added some logic for emacs terms to be ok, but I can't identify old
4139 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4145 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4140
4146
4141 2002-03-10 Fernando Perez <fperez@colorado.edu>
4147 2002-03-10 Fernando Perez <fperez@colorado.edu>
4142
4148
4143 * IPython/usage.py (__doc__): Various documentation cleanups and
4149 * IPython/usage.py (__doc__): Various documentation cleanups and
4144 updates, both in usage docstrings and in the manual.
4150 updates, both in usage docstrings and in the manual.
4145
4151
4146 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4152 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4147 handling of caching. Set minimum acceptabe value for having a
4153 handling of caching. Set minimum acceptabe value for having a
4148 cache at 20 values.
4154 cache at 20 values.
4149
4155
4150 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4156 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4151 install_first_time function to a method, renamed it and added an
4157 install_first_time function to a method, renamed it and added an
4152 'upgrade' mode. Now people can update their config directory with
4158 'upgrade' mode. Now people can update their config directory with
4153 a simple command line switch (-upgrade, also new).
4159 a simple command line switch (-upgrade, also new).
4154
4160
4155 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4161 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4156 @file (convenient for automagic users under Python >= 2.2).
4162 @file (convenient for automagic users under Python >= 2.2).
4157 Removed @files (it seemed more like a plural than an abbrev. of
4163 Removed @files (it seemed more like a plural than an abbrev. of
4158 'file show').
4164 'file show').
4159
4165
4160 * IPython/iplib.py (install_first_time): Fixed crash if there were
4166 * IPython/iplib.py (install_first_time): Fixed crash if there were
4161 backup files ('~') in .ipython/ install directory.
4167 backup files ('~') in .ipython/ install directory.
4162
4168
4163 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4169 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4164 system. Things look fine, but these changes are fairly
4170 system. Things look fine, but these changes are fairly
4165 intrusive. Test them for a few days.
4171 intrusive. Test them for a few days.
4166
4172
4167 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4173 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4168 the prompts system. Now all in/out prompt strings are user
4174 the prompts system. Now all in/out prompt strings are user
4169 controllable. This is particularly useful for embedding, as one
4175 controllable. This is particularly useful for embedding, as one
4170 can tag embedded instances with particular prompts.
4176 can tag embedded instances with particular prompts.
4171
4177
4172 Also removed global use of sys.ps1/2, which now allows nested
4178 Also removed global use of sys.ps1/2, which now allows nested
4173 embeddings without any problems. Added command-line options for
4179 embeddings without any problems. Added command-line options for
4174 the prompt strings.
4180 the prompt strings.
4175
4181
4176 2002-03-08 Fernando Perez <fperez@colorado.edu>
4182 2002-03-08 Fernando Perez <fperez@colorado.edu>
4177
4183
4178 * IPython/UserConfig/example-embed-short.py (ipshell): added
4184 * IPython/UserConfig/example-embed-short.py (ipshell): added
4179 example file with the bare minimum code for embedding.
4185 example file with the bare minimum code for embedding.
4180
4186
4181 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4187 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4182 functionality for the embeddable shell to be activated/deactivated
4188 functionality for the embeddable shell to be activated/deactivated
4183 either globally or at each call.
4189 either globally or at each call.
4184
4190
4185 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4191 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4186 rewriting the prompt with '--->' for auto-inputs with proper
4192 rewriting the prompt with '--->' for auto-inputs with proper
4187 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4193 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4188 this is handled by the prompts class itself, as it should.
4194 this is handled by the prompts class itself, as it should.
4189
4195
4190 2002-03-05 Fernando Perez <fperez@colorado.edu>
4196 2002-03-05 Fernando Perez <fperez@colorado.edu>
4191
4197
4192 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4198 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4193 @logstart to avoid name clashes with the math log function.
4199 @logstart to avoid name clashes with the math log function.
4194
4200
4195 * Big updates to X/Emacs section of the manual.
4201 * Big updates to X/Emacs section of the manual.
4196
4202
4197 * Removed ipython_emacs. Milan explained to me how to pass
4203 * Removed ipython_emacs. Milan explained to me how to pass
4198 arguments to ipython through Emacs. Some day I'm going to end up
4204 arguments to ipython through Emacs. Some day I'm going to end up
4199 learning some lisp...
4205 learning some lisp...
4200
4206
4201 2002-03-04 Fernando Perez <fperez@colorado.edu>
4207 2002-03-04 Fernando Perez <fperez@colorado.edu>
4202
4208
4203 * IPython/ipython_emacs: Created script to be used as the
4209 * IPython/ipython_emacs: Created script to be used as the
4204 py-python-command Emacs variable so we can pass IPython
4210 py-python-command Emacs variable so we can pass IPython
4205 parameters. I can't figure out how to tell Emacs directly to pass
4211 parameters. I can't figure out how to tell Emacs directly to pass
4206 parameters to IPython, so a dummy shell script will do it.
4212 parameters to IPython, so a dummy shell script will do it.
4207
4213
4208 Other enhancements made for things to work better under Emacs'
4214 Other enhancements made for things to work better under Emacs'
4209 various types of terminals. Many thanks to Milan Zamazal
4215 various types of terminals. Many thanks to Milan Zamazal
4210 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4216 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4211
4217
4212 2002-03-01 Fernando Perez <fperez@colorado.edu>
4218 2002-03-01 Fernando Perez <fperez@colorado.edu>
4213
4219
4214 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4220 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4215 that loading of readline is now optional. This gives better
4221 that loading of readline is now optional. This gives better
4216 control to emacs users.
4222 control to emacs users.
4217
4223
4218 * IPython/ultraTB.py (__date__): Modified color escape sequences
4224 * IPython/ultraTB.py (__date__): Modified color escape sequences
4219 and now things work fine under xterm and in Emacs' term buffers
4225 and now things work fine under xterm and in Emacs' term buffers
4220 (though not shell ones). Well, in emacs you get colors, but all
4226 (though not shell ones). Well, in emacs you get colors, but all
4221 seem to be 'light' colors (no difference between dark and light
4227 seem to be 'light' colors (no difference between dark and light
4222 ones). But the garbage chars are gone, and also in xterms. It
4228 ones). But the garbage chars are gone, and also in xterms. It
4223 seems that now I'm using 'cleaner' ansi sequences.
4229 seems that now I'm using 'cleaner' ansi sequences.
4224
4230
4225 2002-02-21 Fernando Perez <fperez@colorado.edu>
4231 2002-02-21 Fernando Perez <fperez@colorado.edu>
4226
4232
4227 * Released 0.2.7 (mainly to publish the scoping fix).
4233 * Released 0.2.7 (mainly to publish the scoping fix).
4228
4234
4229 * IPython/Logger.py (Logger.logstate): added. A corresponding
4235 * IPython/Logger.py (Logger.logstate): added. A corresponding
4230 @logstate magic was created.
4236 @logstate magic was created.
4231
4237
4232 * IPython/Magic.py: fixed nested scoping problem under Python
4238 * IPython/Magic.py: fixed nested scoping problem under Python
4233 2.1.x (automagic wasn't working).
4239 2.1.x (automagic wasn't working).
4234
4240
4235 2002-02-20 Fernando Perez <fperez@colorado.edu>
4241 2002-02-20 Fernando Perez <fperez@colorado.edu>
4236
4242
4237 * Released 0.2.6.
4243 * Released 0.2.6.
4238
4244
4239 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4245 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4240 option so that logs can come out without any headers at all.
4246 option so that logs can come out without any headers at all.
4241
4247
4242 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4248 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4243 SciPy.
4249 SciPy.
4244
4250
4245 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4251 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4246 that embedded IPython calls don't require vars() to be explicitly
4252 that embedded IPython calls don't require vars() to be explicitly
4247 passed. Now they are extracted from the caller's frame (code
4253 passed. Now they are extracted from the caller's frame (code
4248 snatched from Eric Jones' weave). Added better documentation to
4254 snatched from Eric Jones' weave). Added better documentation to
4249 the section on embedding and the example file.
4255 the section on embedding and the example file.
4250
4256
4251 * IPython/genutils.py (page): Changed so that under emacs, it just
4257 * IPython/genutils.py (page): Changed so that under emacs, it just
4252 prints the string. You can then page up and down in the emacs
4258 prints the string. You can then page up and down in the emacs
4253 buffer itself. This is how the builtin help() works.
4259 buffer itself. This is how the builtin help() works.
4254
4260
4255 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4261 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4256 macro scoping: macros need to be executed in the user's namespace
4262 macro scoping: macros need to be executed in the user's namespace
4257 to work as if they had been typed by the user.
4263 to work as if they had been typed by the user.
4258
4264
4259 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4265 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4260 execute automatically (no need to type 'exec...'). They then
4266 execute automatically (no need to type 'exec...'). They then
4261 behave like 'true macros'. The printing system was also modified
4267 behave like 'true macros'. The printing system was also modified
4262 for this to work.
4268 for this to work.
4263
4269
4264 2002-02-19 Fernando Perez <fperez@colorado.edu>
4270 2002-02-19 Fernando Perez <fperez@colorado.edu>
4265
4271
4266 * IPython/genutils.py (page_file): new function for paging files
4272 * IPython/genutils.py (page_file): new function for paging files
4267 in an OS-independent way. Also necessary for file viewing to work
4273 in an OS-independent way. Also necessary for file viewing to work
4268 well inside Emacs buffers.
4274 well inside Emacs buffers.
4269 (page): Added checks for being in an emacs buffer.
4275 (page): Added checks for being in an emacs buffer.
4270 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4276 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4271 same bug in iplib.
4277 same bug in iplib.
4272
4278
4273 2002-02-18 Fernando Perez <fperez@colorado.edu>
4279 2002-02-18 Fernando Perez <fperez@colorado.edu>
4274
4280
4275 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4281 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4276 of readline so that IPython can work inside an Emacs buffer.
4282 of readline so that IPython can work inside an Emacs buffer.
4277
4283
4278 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4284 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4279 method signatures (they weren't really bugs, but it looks cleaner
4285 method signatures (they weren't really bugs, but it looks cleaner
4280 and keeps PyChecker happy).
4286 and keeps PyChecker happy).
4281
4287
4282 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4288 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4283 for implementing various user-defined hooks. Currently only
4289 for implementing various user-defined hooks. Currently only
4284 display is done.
4290 display is done.
4285
4291
4286 * IPython/Prompts.py (CachedOutput._display): changed display
4292 * IPython/Prompts.py (CachedOutput._display): changed display
4287 functions so that they can be dynamically changed by users easily.
4293 functions so that they can be dynamically changed by users easily.
4288
4294
4289 * IPython/Extensions/numeric_formats.py (num_display): added an
4295 * IPython/Extensions/numeric_formats.py (num_display): added an
4290 extension for printing NumPy arrays in flexible manners. It
4296 extension for printing NumPy arrays in flexible manners. It
4291 doesn't do anything yet, but all the structure is in
4297 doesn't do anything yet, but all the structure is in
4292 place. Ultimately the plan is to implement output format control
4298 place. Ultimately the plan is to implement output format control
4293 like in Octave.
4299 like in Octave.
4294
4300
4295 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4301 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4296 methods are found at run-time by all the automatic machinery.
4302 methods are found at run-time by all the automatic machinery.
4297
4303
4298 2002-02-17 Fernando Perez <fperez@colorado.edu>
4304 2002-02-17 Fernando Perez <fperez@colorado.edu>
4299
4305
4300 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4306 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4301 whole file a little.
4307 whole file a little.
4302
4308
4303 * ToDo: closed this document. Now there's a new_design.lyx
4309 * ToDo: closed this document. Now there's a new_design.lyx
4304 document for all new ideas. Added making a pdf of it for the
4310 document for all new ideas. Added making a pdf of it for the
4305 end-user distro.
4311 end-user distro.
4306
4312
4307 * IPython/Logger.py (Logger.switch_log): Created this to replace
4313 * IPython/Logger.py (Logger.switch_log): Created this to replace
4308 logon() and logoff(). It also fixes a nasty crash reported by
4314 logon() and logoff(). It also fixes a nasty crash reported by
4309 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4315 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4310
4316
4311 * IPython/iplib.py (complete): got auto-completion to work with
4317 * IPython/iplib.py (complete): got auto-completion to work with
4312 automagic (I had wanted this for a long time).
4318 automagic (I had wanted this for a long time).
4313
4319
4314 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4320 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4315 to @file, since file() is now a builtin and clashes with automagic
4321 to @file, since file() is now a builtin and clashes with automagic
4316 for @file.
4322 for @file.
4317
4323
4318 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4324 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4319 of this was previously in iplib, which had grown to more than 2000
4325 of this was previously in iplib, which had grown to more than 2000
4320 lines, way too long. No new functionality, but it makes managing
4326 lines, way too long. No new functionality, but it makes managing
4321 the code a bit easier.
4327 the code a bit easier.
4322
4328
4323 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4329 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4324 information to crash reports.
4330 information to crash reports.
4325
4331
4326 2002-02-12 Fernando Perez <fperez@colorado.edu>
4332 2002-02-12 Fernando Perez <fperez@colorado.edu>
4327
4333
4328 * Released 0.2.5.
4334 * Released 0.2.5.
4329
4335
4330 2002-02-11 Fernando Perez <fperez@colorado.edu>
4336 2002-02-11 Fernando Perez <fperez@colorado.edu>
4331
4337
4332 * Wrote a relatively complete Windows installer. It puts
4338 * Wrote a relatively complete Windows installer. It puts
4333 everything in place, creates Start Menu entries and fixes the
4339 everything in place, creates Start Menu entries and fixes the
4334 color issues. Nothing fancy, but it works.
4340 color issues. Nothing fancy, but it works.
4335
4341
4336 2002-02-10 Fernando Perez <fperez@colorado.edu>
4342 2002-02-10 Fernando Perez <fperez@colorado.edu>
4337
4343
4338 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4344 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4339 os.path.expanduser() call so that we can type @run ~/myfile.py and
4345 os.path.expanduser() call so that we can type @run ~/myfile.py and
4340 have thigs work as expected.
4346 have thigs work as expected.
4341
4347
4342 * IPython/genutils.py (page): fixed exception handling so things
4348 * IPython/genutils.py (page): fixed exception handling so things
4343 work both in Unix and Windows correctly. Quitting a pager triggers
4349 work both in Unix and Windows correctly. Quitting a pager triggers
4344 an IOError/broken pipe in Unix, and in windows not finding a pager
4350 an IOError/broken pipe in Unix, and in windows not finding a pager
4345 is also an IOError, so I had to actually look at the return value
4351 is also an IOError, so I had to actually look at the return value
4346 of the exception, not just the exception itself. Should be ok now.
4352 of the exception, not just the exception itself. Should be ok now.
4347
4353
4348 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4354 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4349 modified to allow case-insensitive color scheme changes.
4355 modified to allow case-insensitive color scheme changes.
4350
4356
4351 2002-02-09 Fernando Perez <fperez@colorado.edu>
4357 2002-02-09 Fernando Perez <fperez@colorado.edu>
4352
4358
4353 * IPython/genutils.py (native_line_ends): new function to leave
4359 * IPython/genutils.py (native_line_ends): new function to leave
4354 user config files with os-native line-endings.
4360 user config files with os-native line-endings.
4355
4361
4356 * README and manual updates.
4362 * README and manual updates.
4357
4363
4358 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4364 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4359 instead of StringType to catch Unicode strings.
4365 instead of StringType to catch Unicode strings.
4360
4366
4361 * IPython/genutils.py (filefind): fixed bug for paths with
4367 * IPython/genutils.py (filefind): fixed bug for paths with
4362 embedded spaces (very common in Windows).
4368 embedded spaces (very common in Windows).
4363
4369
4364 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4370 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4365 files under Windows, so that they get automatically associated
4371 files under Windows, so that they get automatically associated
4366 with a text editor. Windows makes it a pain to handle
4372 with a text editor. Windows makes it a pain to handle
4367 extension-less files.
4373 extension-less files.
4368
4374
4369 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4375 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4370 warning about readline only occur for Posix. In Windows there's no
4376 warning about readline only occur for Posix. In Windows there's no
4371 way to get readline, so why bother with the warning.
4377 way to get readline, so why bother with the warning.
4372
4378
4373 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4379 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4374 for __str__ instead of dir(self), since dir() changed in 2.2.
4380 for __str__ instead of dir(self), since dir() changed in 2.2.
4375
4381
4376 * Ported to Windows! Tested on XP, I suspect it should work fine
4382 * Ported to Windows! Tested on XP, I suspect it should work fine
4377 on NT/2000, but I don't think it will work on 98 et al. That
4383 on NT/2000, but I don't think it will work on 98 et al. That
4378 series of Windows is such a piece of junk anyway that I won't try
4384 series of Windows is such a piece of junk anyway that I won't try
4379 porting it there. The XP port was straightforward, showed a few
4385 porting it there. The XP port was straightforward, showed a few
4380 bugs here and there (fixed all), in particular some string
4386 bugs here and there (fixed all), in particular some string
4381 handling stuff which required considering Unicode strings (which
4387 handling stuff which required considering Unicode strings (which
4382 Windows uses). This is good, but hasn't been too tested :) No
4388 Windows uses). This is good, but hasn't been too tested :) No
4383 fancy installer yet, I'll put a note in the manual so people at
4389 fancy installer yet, I'll put a note in the manual so people at
4384 least make manually a shortcut.
4390 least make manually a shortcut.
4385
4391
4386 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4392 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4387 into a single one, "colors". This now controls both prompt and
4393 into a single one, "colors". This now controls both prompt and
4388 exception color schemes, and can be changed both at startup
4394 exception color schemes, and can be changed both at startup
4389 (either via command-line switches or via ipythonrc files) and at
4395 (either via command-line switches or via ipythonrc files) and at
4390 runtime, with @colors.
4396 runtime, with @colors.
4391 (Magic.magic_run): renamed @prun to @run and removed the old
4397 (Magic.magic_run): renamed @prun to @run and removed the old
4392 @run. The two were too similar to warrant keeping both.
4398 @run. The two were too similar to warrant keeping both.
4393
4399
4394 2002-02-03 Fernando Perez <fperez@colorado.edu>
4400 2002-02-03 Fernando Perez <fperez@colorado.edu>
4395
4401
4396 * IPython/iplib.py (install_first_time): Added comment on how to
4402 * IPython/iplib.py (install_first_time): Added comment on how to
4397 configure the color options for first-time users. Put a <return>
4403 configure the color options for first-time users. Put a <return>
4398 request at the end so that small-terminal users get a chance to
4404 request at the end so that small-terminal users get a chance to
4399 read the startup info.
4405 read the startup info.
4400
4406
4401 2002-01-23 Fernando Perez <fperez@colorado.edu>
4407 2002-01-23 Fernando Perez <fperez@colorado.edu>
4402
4408
4403 * IPython/iplib.py (CachedOutput.update): Changed output memory
4409 * IPython/iplib.py (CachedOutput.update): Changed output memory
4404 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4410 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4405 input history we still use _i. Did this b/c these variable are
4411 input history we still use _i. Did this b/c these variable are
4406 very commonly used in interactive work, so the less we need to
4412 very commonly used in interactive work, so the less we need to
4407 type the better off we are.
4413 type the better off we are.
4408 (Magic.magic_prun): updated @prun to better handle the namespaces
4414 (Magic.magic_prun): updated @prun to better handle the namespaces
4409 the file will run in, including a fix for __name__ not being set
4415 the file will run in, including a fix for __name__ not being set
4410 before.
4416 before.
4411
4417
4412 2002-01-20 Fernando Perez <fperez@colorado.edu>
4418 2002-01-20 Fernando Perez <fperez@colorado.edu>
4413
4419
4414 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4420 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4415 extra garbage for Python 2.2. Need to look more carefully into
4421 extra garbage for Python 2.2. Need to look more carefully into
4416 this later.
4422 this later.
4417
4423
4418 2002-01-19 Fernando Perez <fperez@colorado.edu>
4424 2002-01-19 Fernando Perez <fperez@colorado.edu>
4419
4425
4420 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4426 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4421 display SyntaxError exceptions properly formatted when they occur
4427 display SyntaxError exceptions properly formatted when they occur
4422 (they can be triggered by imported code).
4428 (they can be triggered by imported code).
4423
4429
4424 2002-01-18 Fernando Perez <fperez@colorado.edu>
4430 2002-01-18 Fernando Perez <fperez@colorado.edu>
4425
4431
4426 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4432 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4427 SyntaxError exceptions are reported nicely formatted, instead of
4433 SyntaxError exceptions are reported nicely formatted, instead of
4428 spitting out only offset information as before.
4434 spitting out only offset information as before.
4429 (Magic.magic_prun): Added the @prun function for executing
4435 (Magic.magic_prun): Added the @prun function for executing
4430 programs with command line args inside IPython.
4436 programs with command line args inside IPython.
4431
4437
4432 2002-01-16 Fernando Perez <fperez@colorado.edu>
4438 2002-01-16 Fernando Perez <fperez@colorado.edu>
4433
4439
4434 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4440 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4435 to *not* include the last item given in a range. This brings their
4441 to *not* include the last item given in a range. This brings their
4436 behavior in line with Python's slicing:
4442 behavior in line with Python's slicing:
4437 a[n1:n2] -> a[n1]...a[n2-1]
4443 a[n1:n2] -> a[n1]...a[n2-1]
4438 It may be a bit less convenient, but I prefer to stick to Python's
4444 It may be a bit less convenient, but I prefer to stick to Python's
4439 conventions *everywhere*, so users never have to wonder.
4445 conventions *everywhere*, so users never have to wonder.
4440 (Magic.magic_macro): Added @macro function to ease the creation of
4446 (Magic.magic_macro): Added @macro function to ease the creation of
4441 macros.
4447 macros.
4442
4448
4443 2002-01-05 Fernando Perez <fperez@colorado.edu>
4449 2002-01-05 Fernando Perez <fperez@colorado.edu>
4444
4450
4445 * Released 0.2.4.
4451 * Released 0.2.4.
4446
4452
4447 * IPython/iplib.py (Magic.magic_pdef):
4453 * IPython/iplib.py (Magic.magic_pdef):
4448 (InteractiveShell.safe_execfile): report magic lines and error
4454 (InteractiveShell.safe_execfile): report magic lines and error
4449 lines without line numbers so one can easily copy/paste them for
4455 lines without line numbers so one can easily copy/paste them for
4450 re-execution.
4456 re-execution.
4451
4457
4452 * Updated manual with recent changes.
4458 * Updated manual with recent changes.
4453
4459
4454 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4460 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4455 docstring printing when class? is called. Very handy for knowing
4461 docstring printing when class? is called. Very handy for knowing
4456 how to create class instances (as long as __init__ is well
4462 how to create class instances (as long as __init__ is well
4457 documented, of course :)
4463 documented, of course :)
4458 (Magic.magic_doc): print both class and constructor docstrings.
4464 (Magic.magic_doc): print both class and constructor docstrings.
4459 (Magic.magic_pdef): give constructor info if passed a class and
4465 (Magic.magic_pdef): give constructor info if passed a class and
4460 __call__ info for callable object instances.
4466 __call__ info for callable object instances.
4461
4467
4462 2002-01-04 Fernando Perez <fperez@colorado.edu>
4468 2002-01-04 Fernando Perez <fperez@colorado.edu>
4463
4469
4464 * Made deep_reload() off by default. It doesn't always work
4470 * Made deep_reload() off by default. It doesn't always work
4465 exactly as intended, so it's probably safer to have it off. It's
4471 exactly as intended, so it's probably safer to have it off. It's
4466 still available as dreload() anyway, so nothing is lost.
4472 still available as dreload() anyway, so nothing is lost.
4467
4473
4468 2002-01-02 Fernando Perez <fperez@colorado.edu>
4474 2002-01-02 Fernando Perez <fperez@colorado.edu>
4469
4475
4470 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4476 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4471 so I wanted an updated release).
4477 so I wanted an updated release).
4472
4478
4473 2001-12-27 Fernando Perez <fperez@colorado.edu>
4479 2001-12-27 Fernando Perez <fperez@colorado.edu>
4474
4480
4475 * IPython/iplib.py (InteractiveShell.interact): Added the original
4481 * IPython/iplib.py (InteractiveShell.interact): Added the original
4476 code from 'code.py' for this module in order to change the
4482 code from 'code.py' for this module in order to change the
4477 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4483 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4478 the history cache would break when the user hit Ctrl-C, and
4484 the history cache would break when the user hit Ctrl-C, and
4479 interact() offers no way to add any hooks to it.
4485 interact() offers no way to add any hooks to it.
4480
4486
4481 2001-12-23 Fernando Perez <fperez@colorado.edu>
4487 2001-12-23 Fernando Perez <fperez@colorado.edu>
4482
4488
4483 * setup.py: added check for 'MANIFEST' before trying to remove
4489 * setup.py: added check for 'MANIFEST' before trying to remove
4484 it. Thanks to Sean Reifschneider.
4490 it. Thanks to Sean Reifschneider.
4485
4491
4486 2001-12-22 Fernando Perez <fperez@colorado.edu>
4492 2001-12-22 Fernando Perez <fperez@colorado.edu>
4487
4493
4488 * Released 0.2.2.
4494 * Released 0.2.2.
4489
4495
4490 * Finished (reasonably) writing the manual. Later will add the
4496 * Finished (reasonably) writing the manual. Later will add the
4491 python-standard navigation stylesheets, but for the time being
4497 python-standard navigation stylesheets, but for the time being
4492 it's fairly complete. Distribution will include html and pdf
4498 it's fairly complete. Distribution will include html and pdf
4493 versions.
4499 versions.
4494
4500
4495 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4501 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4496 (MayaVi author).
4502 (MayaVi author).
4497
4503
4498 2001-12-21 Fernando Perez <fperez@colorado.edu>
4504 2001-12-21 Fernando Perez <fperez@colorado.edu>
4499
4505
4500 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4506 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4501 good public release, I think (with the manual and the distutils
4507 good public release, I think (with the manual and the distutils
4502 installer). The manual can use some work, but that can go
4508 installer). The manual can use some work, but that can go
4503 slowly. Otherwise I think it's quite nice for end users. Next
4509 slowly. Otherwise I think it's quite nice for end users. Next
4504 summer, rewrite the guts of it...
4510 summer, rewrite the guts of it...
4505
4511
4506 * Changed format of ipythonrc files to use whitespace as the
4512 * Changed format of ipythonrc files to use whitespace as the
4507 separator instead of an explicit '='. Cleaner.
4513 separator instead of an explicit '='. Cleaner.
4508
4514
4509 2001-12-20 Fernando Perez <fperez@colorado.edu>
4515 2001-12-20 Fernando Perez <fperez@colorado.edu>
4510
4516
4511 * Started a manual in LyX. For now it's just a quick merge of the
4517 * Started a manual in LyX. For now it's just a quick merge of the
4512 various internal docstrings and READMEs. Later it may grow into a
4518 various internal docstrings and READMEs. Later it may grow into a
4513 nice, full-blown manual.
4519 nice, full-blown manual.
4514
4520
4515 * Set up a distutils based installer. Installation should now be
4521 * Set up a distutils based installer. Installation should now be
4516 trivially simple for end-users.
4522 trivially simple for end-users.
4517
4523
4518 2001-12-11 Fernando Perez <fperez@colorado.edu>
4524 2001-12-11 Fernando Perez <fperez@colorado.edu>
4519
4525
4520 * Released 0.2.0. First public release, announced it at
4526 * Released 0.2.0. First public release, announced it at
4521 comp.lang.python. From now on, just bugfixes...
4527 comp.lang.python. From now on, just bugfixes...
4522
4528
4523 * Went through all the files, set copyright/license notices and
4529 * Went through all the files, set copyright/license notices and
4524 cleaned up things. Ready for release.
4530 cleaned up things. Ready for release.
4525
4531
4526 2001-12-10 Fernando Perez <fperez@colorado.edu>
4532 2001-12-10 Fernando Perez <fperez@colorado.edu>
4527
4533
4528 * Changed the first-time installer not to use tarfiles. It's more
4534 * Changed the first-time installer not to use tarfiles. It's more
4529 robust now and less unix-dependent. Also makes it easier for
4535 robust now and less unix-dependent. Also makes it easier for
4530 people to later upgrade versions.
4536 people to later upgrade versions.
4531
4537
4532 * Changed @exit to @abort to reflect the fact that it's pretty
4538 * Changed @exit to @abort to reflect the fact that it's pretty
4533 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4539 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4534 becomes significant only when IPyhton is embedded: in that case,
4540 becomes significant only when IPyhton is embedded: in that case,
4535 C-D closes IPython only, but @abort kills the enclosing program
4541 C-D closes IPython only, but @abort kills the enclosing program
4536 too (unless it had called IPython inside a try catching
4542 too (unless it had called IPython inside a try catching
4537 SystemExit).
4543 SystemExit).
4538
4544
4539 * Created Shell module which exposes the actuall IPython Shell
4545 * Created Shell module which exposes the actuall IPython Shell
4540 classes, currently the normal and the embeddable one. This at
4546 classes, currently the normal and the embeddable one. This at
4541 least offers a stable interface we won't need to change when
4547 least offers a stable interface we won't need to change when
4542 (later) the internals are rewritten. That rewrite will be confined
4548 (later) the internals are rewritten. That rewrite will be confined
4543 to iplib and ipmaker, but the Shell interface should remain as is.
4549 to iplib and ipmaker, but the Shell interface should remain as is.
4544
4550
4545 * Added embed module which offers an embeddable IPShell object,
4551 * Added embed module which offers an embeddable IPShell object,
4546 useful to fire up IPython *inside* a running program. Great for
4552 useful to fire up IPython *inside* a running program. Great for
4547 debugging or dynamical data analysis.
4553 debugging or dynamical data analysis.
4548
4554
4549 2001-12-08 Fernando Perez <fperez@colorado.edu>
4555 2001-12-08 Fernando Perez <fperez@colorado.edu>
4550
4556
4551 * Fixed small bug preventing seeing info from methods of defined
4557 * Fixed small bug preventing seeing info from methods of defined
4552 objects (incorrect namespace in _ofind()).
4558 objects (incorrect namespace in _ofind()).
4553
4559
4554 * Documentation cleanup. Moved the main usage docstrings to a
4560 * Documentation cleanup. Moved the main usage docstrings to a
4555 separate file, usage.py (cleaner to maintain, and hopefully in the
4561 separate file, usage.py (cleaner to maintain, and hopefully in the
4556 future some perlpod-like way of producing interactive, man and
4562 future some perlpod-like way of producing interactive, man and
4557 html docs out of it will be found).
4563 html docs out of it will be found).
4558
4564
4559 * Added @profile to see your profile at any time.
4565 * Added @profile to see your profile at any time.
4560
4566
4561 * Added @p as an alias for 'print'. It's especially convenient if
4567 * Added @p as an alias for 'print'. It's especially convenient if
4562 using automagic ('p x' prints x).
4568 using automagic ('p x' prints x).
4563
4569
4564 * Small cleanups and fixes after a pychecker run.
4570 * Small cleanups and fixes after a pychecker run.
4565
4571
4566 * Changed the @cd command to handle @cd - and @cd -<n> for
4572 * Changed the @cd command to handle @cd - and @cd -<n> for
4567 visiting any directory in _dh.
4573 visiting any directory in _dh.
4568
4574
4569 * Introduced _dh, a history of visited directories. @dhist prints
4575 * Introduced _dh, a history of visited directories. @dhist prints
4570 it out with numbers.
4576 it out with numbers.
4571
4577
4572 2001-12-07 Fernando Perez <fperez@colorado.edu>
4578 2001-12-07 Fernando Perez <fperez@colorado.edu>
4573
4579
4574 * Released 0.1.22
4580 * Released 0.1.22
4575
4581
4576 * Made initialization a bit more robust against invalid color
4582 * Made initialization a bit more robust against invalid color
4577 options in user input (exit, not traceback-crash).
4583 options in user input (exit, not traceback-crash).
4578
4584
4579 * Changed the bug crash reporter to write the report only in the
4585 * Changed the bug crash reporter to write the report only in the
4580 user's .ipython directory. That way IPython won't litter people's
4586 user's .ipython directory. That way IPython won't litter people's
4581 hard disks with crash files all over the place. Also print on
4587 hard disks with crash files all over the place. Also print on
4582 screen the necessary mail command.
4588 screen the necessary mail command.
4583
4589
4584 * With the new ultraTB, implemented LightBG color scheme for light
4590 * With the new ultraTB, implemented LightBG color scheme for light
4585 background terminals. A lot of people like white backgrounds, so I
4591 background terminals. A lot of people like white backgrounds, so I
4586 guess we should at least give them something readable.
4592 guess we should at least give them something readable.
4587
4593
4588 2001-12-06 Fernando Perez <fperez@colorado.edu>
4594 2001-12-06 Fernando Perez <fperez@colorado.edu>
4589
4595
4590 * Modified the structure of ultraTB. Now there's a proper class
4596 * Modified the structure of ultraTB. Now there's a proper class
4591 for tables of color schemes which allow adding schemes easily and
4597 for tables of color schemes which allow adding schemes easily and
4592 switching the active scheme without creating a new instance every
4598 switching the active scheme without creating a new instance every
4593 time (which was ridiculous). The syntax for creating new schemes
4599 time (which was ridiculous). The syntax for creating new schemes
4594 is also cleaner. I think ultraTB is finally done, with a clean
4600 is also cleaner. I think ultraTB is finally done, with a clean
4595 class structure. Names are also much cleaner (now there's proper
4601 class structure. Names are also much cleaner (now there's proper
4596 color tables, no need for every variable to also have 'color' in
4602 color tables, no need for every variable to also have 'color' in
4597 its name).
4603 its name).
4598
4604
4599 * Broke down genutils into separate files. Now genutils only
4605 * Broke down genutils into separate files. Now genutils only
4600 contains utility functions, and classes have been moved to their
4606 contains utility functions, and classes have been moved to their
4601 own files (they had enough independent functionality to warrant
4607 own files (they had enough independent functionality to warrant
4602 it): ConfigLoader, OutputTrap, Struct.
4608 it): ConfigLoader, OutputTrap, Struct.
4603
4609
4604 2001-12-05 Fernando Perez <fperez@colorado.edu>
4610 2001-12-05 Fernando Perez <fperez@colorado.edu>
4605
4611
4606 * IPython turns 21! Released version 0.1.21, as a candidate for
4612 * IPython turns 21! Released version 0.1.21, as a candidate for
4607 public consumption. If all goes well, release in a few days.
4613 public consumption. If all goes well, release in a few days.
4608
4614
4609 * Fixed path bug (files in Extensions/ directory wouldn't be found
4615 * Fixed path bug (files in Extensions/ directory wouldn't be found
4610 unless IPython/ was explicitly in sys.path).
4616 unless IPython/ was explicitly in sys.path).
4611
4617
4612 * Extended the FlexCompleter class as MagicCompleter to allow
4618 * Extended the FlexCompleter class as MagicCompleter to allow
4613 completion of @-starting lines.
4619 completion of @-starting lines.
4614
4620
4615 * Created __release__.py file as a central repository for release
4621 * Created __release__.py file as a central repository for release
4616 info that other files can read from.
4622 info that other files can read from.
4617
4623
4618 * Fixed small bug in logging: when logging was turned on in
4624 * Fixed small bug in logging: when logging was turned on in
4619 mid-session, old lines with special meanings (!@?) were being
4625 mid-session, old lines with special meanings (!@?) were being
4620 logged without the prepended comment, which is necessary since
4626 logged without the prepended comment, which is necessary since
4621 they are not truly valid python syntax. This should make session
4627 they are not truly valid python syntax. This should make session
4622 restores produce less errors.
4628 restores produce less errors.
4623
4629
4624 * The namespace cleanup forced me to make a FlexCompleter class
4630 * The namespace cleanup forced me to make a FlexCompleter class
4625 which is nothing but a ripoff of rlcompleter, but with selectable
4631 which is nothing but a ripoff of rlcompleter, but with selectable
4626 namespace (rlcompleter only works in __main__.__dict__). I'll try
4632 namespace (rlcompleter only works in __main__.__dict__). I'll try
4627 to submit a note to the authors to see if this change can be
4633 to submit a note to the authors to see if this change can be
4628 incorporated in future rlcompleter releases (Dec.6: done)
4634 incorporated in future rlcompleter releases (Dec.6: done)
4629
4635
4630 * More fixes to namespace handling. It was a mess! Now all
4636 * More fixes to namespace handling. It was a mess! Now all
4631 explicit references to __main__.__dict__ are gone (except when
4637 explicit references to __main__.__dict__ are gone (except when
4632 really needed) and everything is handled through the namespace
4638 really needed) and everything is handled through the namespace
4633 dicts in the IPython instance. We seem to be getting somewhere
4639 dicts in the IPython instance. We seem to be getting somewhere
4634 with this, finally...
4640 with this, finally...
4635
4641
4636 * Small documentation updates.
4642 * Small documentation updates.
4637
4643
4638 * Created the Extensions directory under IPython (with an
4644 * Created the Extensions directory under IPython (with an
4639 __init__.py). Put the PhysicalQ stuff there. This directory should
4645 __init__.py). Put the PhysicalQ stuff there. This directory should
4640 be used for all special-purpose extensions.
4646 be used for all special-purpose extensions.
4641
4647
4642 * File renaming:
4648 * File renaming:
4643 ipythonlib --> ipmaker
4649 ipythonlib --> ipmaker
4644 ipplib --> iplib
4650 ipplib --> iplib
4645 This makes a bit more sense in terms of what these files actually do.
4651 This makes a bit more sense in terms of what these files actually do.
4646
4652
4647 * Moved all the classes and functions in ipythonlib to ipplib, so
4653 * Moved all the classes and functions in ipythonlib to ipplib, so
4648 now ipythonlib only has make_IPython(). This will ease up its
4654 now ipythonlib only has make_IPython(). This will ease up its
4649 splitting in smaller functional chunks later.
4655 splitting in smaller functional chunks later.
4650
4656
4651 * Cleaned up (done, I think) output of @whos. Better column
4657 * Cleaned up (done, I think) output of @whos. Better column
4652 formatting, and now shows str(var) for as much as it can, which is
4658 formatting, and now shows str(var) for as much as it can, which is
4653 typically what one gets with a 'print var'.
4659 typically what one gets with a 'print var'.
4654
4660
4655 2001-12-04 Fernando Perez <fperez@colorado.edu>
4661 2001-12-04 Fernando Perez <fperez@colorado.edu>
4656
4662
4657 * Fixed namespace problems. Now builtin/IPyhton/user names get
4663 * Fixed namespace problems. Now builtin/IPyhton/user names get
4658 properly reported in their namespace. Internal namespace handling
4664 properly reported in their namespace. Internal namespace handling
4659 is finally getting decent (not perfect yet, but much better than
4665 is finally getting decent (not perfect yet, but much better than
4660 the ad-hoc mess we had).
4666 the ad-hoc mess we had).
4661
4667
4662 * Removed -exit option. If people just want to run a python
4668 * Removed -exit option. If people just want to run a python
4663 script, that's what the normal interpreter is for. Less
4669 script, that's what the normal interpreter is for. Less
4664 unnecessary options, less chances for bugs.
4670 unnecessary options, less chances for bugs.
4665
4671
4666 * Added a crash handler which generates a complete post-mortem if
4672 * Added a crash handler which generates a complete post-mortem if
4667 IPython crashes. This will help a lot in tracking bugs down the
4673 IPython crashes. This will help a lot in tracking bugs down the
4668 road.
4674 road.
4669
4675
4670 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4676 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4671 which were boud to functions being reassigned would bypass the
4677 which were boud to functions being reassigned would bypass the
4672 logger, breaking the sync of _il with the prompt counter. This
4678 logger, breaking the sync of _il with the prompt counter. This
4673 would then crash IPython later when a new line was logged.
4679 would then crash IPython later when a new line was logged.
4674
4680
4675 2001-12-02 Fernando Perez <fperez@colorado.edu>
4681 2001-12-02 Fernando Perez <fperez@colorado.edu>
4676
4682
4677 * Made IPython a package. This means people don't have to clutter
4683 * Made IPython a package. This means people don't have to clutter
4678 their sys.path with yet another directory. Changed the INSTALL
4684 their sys.path with yet another directory. Changed the INSTALL
4679 file accordingly.
4685 file accordingly.
4680
4686
4681 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4687 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4682 sorts its output (so @who shows it sorted) and @whos formats the
4688 sorts its output (so @who shows it sorted) and @whos formats the
4683 table according to the width of the first column. Nicer, easier to
4689 table according to the width of the first column. Nicer, easier to
4684 read. Todo: write a generic table_format() which takes a list of
4690 read. Todo: write a generic table_format() which takes a list of
4685 lists and prints it nicely formatted, with optional row/column
4691 lists and prints it nicely formatted, with optional row/column
4686 separators and proper padding and justification.
4692 separators and proper padding and justification.
4687
4693
4688 * Released 0.1.20
4694 * Released 0.1.20
4689
4695
4690 * Fixed bug in @log which would reverse the inputcache list (a
4696 * Fixed bug in @log which would reverse the inputcache list (a
4691 copy operation was missing).
4697 copy operation was missing).
4692
4698
4693 * Code cleanup. @config was changed to use page(). Better, since
4699 * Code cleanup. @config was changed to use page(). Better, since
4694 its output is always quite long.
4700 its output is always quite long.
4695
4701
4696 * Itpl is back as a dependency. I was having too many problems
4702 * Itpl is back as a dependency. I was having too many problems
4697 getting the parametric aliases to work reliably, and it's just
4703 getting the parametric aliases to work reliably, and it's just
4698 easier to code weird string operations with it than playing %()s
4704 easier to code weird string operations with it than playing %()s
4699 games. It's only ~6k, so I don't think it's too big a deal.
4705 games. It's only ~6k, so I don't think it's too big a deal.
4700
4706
4701 * Found (and fixed) a very nasty bug with history. !lines weren't
4707 * Found (and fixed) a very nasty bug with history. !lines weren't
4702 getting cached, and the out of sync caches would crash
4708 getting cached, and the out of sync caches would crash
4703 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4709 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4704 division of labor a bit better. Bug fixed, cleaner structure.
4710 division of labor a bit better. Bug fixed, cleaner structure.
4705
4711
4706 2001-12-01 Fernando Perez <fperez@colorado.edu>
4712 2001-12-01 Fernando Perez <fperez@colorado.edu>
4707
4713
4708 * Released 0.1.19
4714 * Released 0.1.19
4709
4715
4710 * Added option -n to @hist to prevent line number printing. Much
4716 * Added option -n to @hist to prevent line number printing. Much
4711 easier to copy/paste code this way.
4717 easier to copy/paste code this way.
4712
4718
4713 * Created global _il to hold the input list. Allows easy
4719 * Created global _il to hold the input list. Allows easy
4714 re-execution of blocks of code by slicing it (inspired by Janko's
4720 re-execution of blocks of code by slicing it (inspired by Janko's
4715 comment on 'macros').
4721 comment on 'macros').
4716
4722
4717 * Small fixes and doc updates.
4723 * Small fixes and doc updates.
4718
4724
4719 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4725 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4720 much too fragile with automagic. Handles properly multi-line
4726 much too fragile with automagic. Handles properly multi-line
4721 statements and takes parameters.
4727 statements and takes parameters.
4722
4728
4723 2001-11-30 Fernando Perez <fperez@colorado.edu>
4729 2001-11-30 Fernando Perez <fperez@colorado.edu>
4724
4730
4725 * Version 0.1.18 released.
4731 * Version 0.1.18 released.
4726
4732
4727 * Fixed nasty namespace bug in initial module imports.
4733 * Fixed nasty namespace bug in initial module imports.
4728
4734
4729 * Added copyright/license notes to all code files (except
4735 * Added copyright/license notes to all code files (except
4730 DPyGetOpt). For the time being, LGPL. That could change.
4736 DPyGetOpt). For the time being, LGPL. That could change.
4731
4737
4732 * Rewrote a much nicer README, updated INSTALL, cleaned up
4738 * Rewrote a much nicer README, updated INSTALL, cleaned up
4733 ipythonrc-* samples.
4739 ipythonrc-* samples.
4734
4740
4735 * Overall code/documentation cleanup. Basically ready for
4741 * Overall code/documentation cleanup. Basically ready for
4736 release. Only remaining thing: licence decision (LGPL?).
4742 release. Only remaining thing: licence decision (LGPL?).
4737
4743
4738 * Converted load_config to a class, ConfigLoader. Now recursion
4744 * Converted load_config to a class, ConfigLoader. Now recursion
4739 control is better organized. Doesn't include the same file twice.
4745 control is better organized. Doesn't include the same file twice.
4740
4746
4741 2001-11-29 Fernando Perez <fperez@colorado.edu>
4747 2001-11-29 Fernando Perez <fperez@colorado.edu>
4742
4748
4743 * Got input history working. Changed output history variables from
4749 * Got input history working. Changed output history variables from
4744 _p to _o so that _i is for input and _o for output. Just cleaner
4750 _p to _o so that _i is for input and _o for output. Just cleaner
4745 convention.
4751 convention.
4746
4752
4747 * Implemented parametric aliases. This pretty much allows the
4753 * Implemented parametric aliases. This pretty much allows the
4748 alias system to offer full-blown shell convenience, I think.
4754 alias system to offer full-blown shell convenience, I think.
4749
4755
4750 * Version 0.1.17 released, 0.1.18 opened.
4756 * Version 0.1.17 released, 0.1.18 opened.
4751
4757
4752 * dot_ipython/ipythonrc (alias): added documentation.
4758 * dot_ipython/ipythonrc (alias): added documentation.
4753 (xcolor): Fixed small bug (xcolors -> xcolor)
4759 (xcolor): Fixed small bug (xcolors -> xcolor)
4754
4760
4755 * Changed the alias system. Now alias is a magic command to define
4761 * Changed the alias system. Now alias is a magic command to define
4756 aliases just like the shell. Rationale: the builtin magics should
4762 aliases just like the shell. Rationale: the builtin magics should
4757 be there for things deeply connected to IPython's
4763 be there for things deeply connected to IPython's
4758 architecture. And this is a much lighter system for what I think
4764 architecture. And this is a much lighter system for what I think
4759 is the really important feature: allowing users to define quickly
4765 is the really important feature: allowing users to define quickly
4760 magics that will do shell things for them, so they can customize
4766 magics that will do shell things for them, so they can customize
4761 IPython easily to match their work habits. If someone is really
4767 IPython easily to match their work habits. If someone is really
4762 desperate to have another name for a builtin alias, they can
4768 desperate to have another name for a builtin alias, they can
4763 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4769 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4764 works.
4770 works.
4765
4771
4766 2001-11-28 Fernando Perez <fperez@colorado.edu>
4772 2001-11-28 Fernando Perez <fperez@colorado.edu>
4767
4773
4768 * Changed @file so that it opens the source file at the proper
4774 * Changed @file so that it opens the source file at the proper
4769 line. Since it uses less, if your EDITOR environment is
4775 line. Since it uses less, if your EDITOR environment is
4770 configured, typing v will immediately open your editor of choice
4776 configured, typing v will immediately open your editor of choice
4771 right at the line where the object is defined. Not as quick as
4777 right at the line where the object is defined. Not as quick as
4772 having a direct @edit command, but for all intents and purposes it
4778 having a direct @edit command, but for all intents and purposes it
4773 works. And I don't have to worry about writing @edit to deal with
4779 works. And I don't have to worry about writing @edit to deal with
4774 all the editors, less does that.
4780 all the editors, less does that.
4775
4781
4776 * Version 0.1.16 released, 0.1.17 opened.
4782 * Version 0.1.16 released, 0.1.17 opened.
4777
4783
4778 * Fixed some nasty bugs in the page/page_dumb combo that could
4784 * Fixed some nasty bugs in the page/page_dumb combo that could
4779 crash IPython.
4785 crash IPython.
4780
4786
4781 2001-11-27 Fernando Perez <fperez@colorado.edu>
4787 2001-11-27 Fernando Perez <fperez@colorado.edu>
4782
4788
4783 * Version 0.1.15 released, 0.1.16 opened.
4789 * Version 0.1.15 released, 0.1.16 opened.
4784
4790
4785 * Finally got ? and ?? to work for undefined things: now it's
4791 * Finally got ? and ?? to work for undefined things: now it's
4786 possible to type {}.get? and get information about the get method
4792 possible to type {}.get? and get information about the get method
4787 of dicts, or os.path? even if only os is defined (so technically
4793 of dicts, or os.path? even if only os is defined (so technically
4788 os.path isn't). Works at any level. For example, after import os,
4794 os.path isn't). Works at any level. For example, after import os,
4789 os?, os.path?, os.path.abspath? all work. This is great, took some
4795 os?, os.path?, os.path.abspath? all work. This is great, took some
4790 work in _ofind.
4796 work in _ofind.
4791
4797
4792 * Fixed more bugs with logging. The sanest way to do it was to add
4798 * Fixed more bugs with logging. The sanest way to do it was to add
4793 to @log a 'mode' parameter. Killed two in one shot (this mode
4799 to @log a 'mode' parameter. Killed two in one shot (this mode
4794 option was a request of Janko's). I think it's finally clean
4800 option was a request of Janko's). I think it's finally clean
4795 (famous last words).
4801 (famous last words).
4796
4802
4797 * Added a page_dumb() pager which does a decent job of paging on
4803 * Added a page_dumb() pager which does a decent job of paging on
4798 screen, if better things (like less) aren't available. One less
4804 screen, if better things (like less) aren't available. One less
4799 unix dependency (someday maybe somebody will port this to
4805 unix dependency (someday maybe somebody will port this to
4800 windows).
4806 windows).
4801
4807
4802 * Fixed problem in magic_log: would lock of logging out if log
4808 * Fixed problem in magic_log: would lock of logging out if log
4803 creation failed (because it would still think it had succeeded).
4809 creation failed (because it would still think it had succeeded).
4804
4810
4805 * Improved the page() function using curses to auto-detect screen
4811 * Improved the page() function using curses to auto-detect screen
4806 size. Now it can make a much better decision on whether to print
4812 size. Now it can make a much better decision on whether to print
4807 or page a string. Option screen_length was modified: a value 0
4813 or page a string. Option screen_length was modified: a value 0
4808 means auto-detect, and that's the default now.
4814 means auto-detect, and that's the default now.
4809
4815
4810 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4816 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4811 go out. I'll test it for a few days, then talk to Janko about
4817 go out. I'll test it for a few days, then talk to Janko about
4812 licences and announce it.
4818 licences and announce it.
4813
4819
4814 * Fixed the length of the auto-generated ---> prompt which appears
4820 * Fixed the length of the auto-generated ---> prompt which appears
4815 for auto-parens and auto-quotes. Getting this right isn't trivial,
4821 for auto-parens and auto-quotes. Getting this right isn't trivial,
4816 with all the color escapes, different prompt types and optional
4822 with all the color escapes, different prompt types and optional
4817 separators. But it seems to be working in all the combinations.
4823 separators. But it seems to be working in all the combinations.
4818
4824
4819 2001-11-26 Fernando Perez <fperez@colorado.edu>
4825 2001-11-26 Fernando Perez <fperez@colorado.edu>
4820
4826
4821 * Wrote a regexp filter to get option types from the option names
4827 * Wrote a regexp filter to get option types from the option names
4822 string. This eliminates the need to manually keep two duplicate
4828 string. This eliminates the need to manually keep two duplicate
4823 lists.
4829 lists.
4824
4830
4825 * Removed the unneeded check_option_names. Now options are handled
4831 * Removed the unneeded check_option_names. Now options are handled
4826 in a much saner manner and it's easy to visually check that things
4832 in a much saner manner and it's easy to visually check that things
4827 are ok.
4833 are ok.
4828
4834
4829 * Updated version numbers on all files I modified to carry a
4835 * Updated version numbers on all files I modified to carry a
4830 notice so Janko and Nathan have clear version markers.
4836 notice so Janko and Nathan have clear version markers.
4831
4837
4832 * Updated docstring for ultraTB with my changes. I should send
4838 * Updated docstring for ultraTB with my changes. I should send
4833 this to Nathan.
4839 this to Nathan.
4834
4840
4835 * Lots of small fixes. Ran everything through pychecker again.
4841 * Lots of small fixes. Ran everything through pychecker again.
4836
4842
4837 * Made loading of deep_reload an cmd line option. If it's not too
4843 * Made loading of deep_reload an cmd line option. If it's not too
4838 kosher, now people can just disable it. With -nodeep_reload it's
4844 kosher, now people can just disable it. With -nodeep_reload it's
4839 still available as dreload(), it just won't overwrite reload().
4845 still available as dreload(), it just won't overwrite reload().
4840
4846
4841 * Moved many options to the no| form (-opt and -noopt
4847 * Moved many options to the no| form (-opt and -noopt
4842 accepted). Cleaner.
4848 accepted). Cleaner.
4843
4849
4844 * Changed magic_log so that if called with no parameters, it uses
4850 * Changed magic_log so that if called with no parameters, it uses
4845 'rotate' mode. That way auto-generated logs aren't automatically
4851 'rotate' mode. That way auto-generated logs aren't automatically
4846 over-written. For normal logs, now a backup is made if it exists
4852 over-written. For normal logs, now a backup is made if it exists
4847 (only 1 level of backups). A new 'backup' mode was added to the
4853 (only 1 level of backups). A new 'backup' mode was added to the
4848 Logger class to support this. This was a request by Janko.
4854 Logger class to support this. This was a request by Janko.
4849
4855
4850 * Added @logoff/@logon to stop/restart an active log.
4856 * Added @logoff/@logon to stop/restart an active log.
4851
4857
4852 * Fixed a lot of bugs in log saving/replay. It was pretty
4858 * Fixed a lot of bugs in log saving/replay. It was pretty
4853 broken. Now special lines (!@,/) appear properly in the command
4859 broken. Now special lines (!@,/) appear properly in the command
4854 history after a log replay.
4860 history after a log replay.
4855
4861
4856 * Tried and failed to implement full session saving via pickle. My
4862 * Tried and failed to implement full session saving via pickle. My
4857 idea was to pickle __main__.__dict__, but modules can't be
4863 idea was to pickle __main__.__dict__, but modules can't be
4858 pickled. This would be a better alternative to replaying logs, but
4864 pickled. This would be a better alternative to replaying logs, but
4859 seems quite tricky to get to work. Changed -session to be called
4865 seems quite tricky to get to work. Changed -session to be called
4860 -logplay, which more accurately reflects what it does. And if we
4866 -logplay, which more accurately reflects what it does. And if we
4861 ever get real session saving working, -session is now available.
4867 ever get real session saving working, -session is now available.
4862
4868
4863 * Implemented color schemes for prompts also. As for tracebacks,
4869 * Implemented color schemes for prompts also. As for tracebacks,
4864 currently only NoColor and Linux are supported. But now the
4870 currently only NoColor and Linux are supported. But now the
4865 infrastructure is in place, based on a generic ColorScheme
4871 infrastructure is in place, based on a generic ColorScheme
4866 class. So writing and activating new schemes both for the prompts
4872 class. So writing and activating new schemes both for the prompts
4867 and the tracebacks should be straightforward.
4873 and the tracebacks should be straightforward.
4868
4874
4869 * Version 0.1.13 released, 0.1.14 opened.
4875 * Version 0.1.13 released, 0.1.14 opened.
4870
4876
4871 * Changed handling of options for output cache. Now counter is
4877 * Changed handling of options for output cache. Now counter is
4872 hardwired starting at 1 and one specifies the maximum number of
4878 hardwired starting at 1 and one specifies the maximum number of
4873 entries *in the outcache* (not the max prompt counter). This is
4879 entries *in the outcache* (not the max prompt counter). This is
4874 much better, since many statements won't increase the cache
4880 much better, since many statements won't increase the cache
4875 count. It also eliminated some confusing options, now there's only
4881 count. It also eliminated some confusing options, now there's only
4876 one: cache_size.
4882 one: cache_size.
4877
4883
4878 * Added 'alias' magic function and magic_alias option in the
4884 * Added 'alias' magic function and magic_alias option in the
4879 ipythonrc file. Now the user can easily define whatever names he
4885 ipythonrc file. Now the user can easily define whatever names he
4880 wants for the magic functions without having to play weird
4886 wants for the magic functions without having to play weird
4881 namespace games. This gives IPython a real shell-like feel.
4887 namespace games. This gives IPython a real shell-like feel.
4882
4888
4883 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4889 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4884 @ or not).
4890 @ or not).
4885
4891
4886 This was one of the last remaining 'visible' bugs (that I know
4892 This was one of the last remaining 'visible' bugs (that I know
4887 of). I think if I can clean up the session loading so it works
4893 of). I think if I can clean up the session loading so it works
4888 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4894 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4889 about licensing).
4895 about licensing).
4890
4896
4891 2001-11-25 Fernando Perez <fperez@colorado.edu>
4897 2001-11-25 Fernando Perez <fperez@colorado.edu>
4892
4898
4893 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4899 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4894 there's a cleaner distinction between what ? and ?? show.
4900 there's a cleaner distinction between what ? and ?? show.
4895
4901
4896 * Added screen_length option. Now the user can define his own
4902 * Added screen_length option. Now the user can define his own
4897 screen size for page() operations.
4903 screen size for page() operations.
4898
4904
4899 * Implemented magic shell-like functions with automatic code
4905 * Implemented magic shell-like functions with automatic code
4900 generation. Now adding another function is just a matter of adding
4906 generation. Now adding another function is just a matter of adding
4901 an entry to a dict, and the function is dynamically generated at
4907 an entry to a dict, and the function is dynamically generated at
4902 run-time. Python has some really cool features!
4908 run-time. Python has some really cool features!
4903
4909
4904 * Renamed many options to cleanup conventions a little. Now all
4910 * Renamed many options to cleanup conventions a little. Now all
4905 are lowercase, and only underscores where needed. Also in the code
4911 are lowercase, and only underscores where needed. Also in the code
4906 option name tables are clearer.
4912 option name tables are clearer.
4907
4913
4908 * Changed prompts a little. Now input is 'In [n]:' instead of
4914 * Changed prompts a little. Now input is 'In [n]:' instead of
4909 'In[n]:='. This allows it the numbers to be aligned with the
4915 'In[n]:='. This allows it the numbers to be aligned with the
4910 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4916 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4911 Python (it was a Mathematica thing). The '...' continuation prompt
4917 Python (it was a Mathematica thing). The '...' continuation prompt
4912 was also changed a little to align better.
4918 was also changed a little to align better.
4913
4919
4914 * Fixed bug when flushing output cache. Not all _p<n> variables
4920 * Fixed bug when flushing output cache. Not all _p<n> variables
4915 exist, so their deletion needs to be wrapped in a try:
4921 exist, so their deletion needs to be wrapped in a try:
4916
4922
4917 * Figured out how to properly use inspect.formatargspec() (it
4923 * Figured out how to properly use inspect.formatargspec() (it
4918 requires the args preceded by *). So I removed all the code from
4924 requires the args preceded by *). So I removed all the code from
4919 _get_pdef in Magic, which was just replicating that.
4925 _get_pdef in Magic, which was just replicating that.
4920
4926
4921 * Added test to prefilter to allow redefining magic function names
4927 * Added test to prefilter to allow redefining magic function names
4922 as variables. This is ok, since the @ form is always available,
4928 as variables. This is ok, since the @ form is always available,
4923 but whe should allow the user to define a variable called 'ls' if
4929 but whe should allow the user to define a variable called 'ls' if
4924 he needs it.
4930 he needs it.
4925
4931
4926 * Moved the ToDo information from README into a separate ToDo.
4932 * Moved the ToDo information from README into a separate ToDo.
4927
4933
4928 * General code cleanup and small bugfixes. I think it's close to a
4934 * General code cleanup and small bugfixes. I think it's close to a
4929 state where it can be released, obviously with a big 'beta'
4935 state where it can be released, obviously with a big 'beta'
4930 warning on it.
4936 warning on it.
4931
4937
4932 * Got the magic function split to work. Now all magics are defined
4938 * Got the magic function split to work. Now all magics are defined
4933 in a separate class. It just organizes things a bit, and now
4939 in a separate class. It just organizes things a bit, and now
4934 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4940 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4935 was too long).
4941 was too long).
4936
4942
4937 * Changed @clear to @reset to avoid potential confusions with
4943 * Changed @clear to @reset to avoid potential confusions with
4938 the shell command clear. Also renamed @cl to @clear, which does
4944 the shell command clear. Also renamed @cl to @clear, which does
4939 exactly what people expect it to from their shell experience.
4945 exactly what people expect it to from their shell experience.
4940
4946
4941 Added a check to the @reset command (since it's so
4947 Added a check to the @reset command (since it's so
4942 destructive, it's probably a good idea to ask for confirmation).
4948 destructive, it's probably a good idea to ask for confirmation).
4943 But now reset only works for full namespace resetting. Since the
4949 But now reset only works for full namespace resetting. Since the
4944 del keyword is already there for deleting a few specific
4950 del keyword is already there for deleting a few specific
4945 variables, I don't see the point of having a redundant magic
4951 variables, I don't see the point of having a redundant magic
4946 function for the same task.
4952 function for the same task.
4947
4953
4948 2001-11-24 Fernando Perez <fperez@colorado.edu>
4954 2001-11-24 Fernando Perez <fperez@colorado.edu>
4949
4955
4950 * Updated the builtin docs (esp. the ? ones).
4956 * Updated the builtin docs (esp. the ? ones).
4951
4957
4952 * Ran all the code through pychecker. Not terribly impressed with
4958 * Ran all the code through pychecker. Not terribly impressed with
4953 it: lots of spurious warnings and didn't really find anything of
4959 it: lots of spurious warnings and didn't really find anything of
4954 substance (just a few modules being imported and not used).
4960 substance (just a few modules being imported and not used).
4955
4961
4956 * Implemented the new ultraTB functionality into IPython. New
4962 * Implemented the new ultraTB functionality into IPython. New
4957 option: xcolors. This chooses color scheme. xmode now only selects
4963 option: xcolors. This chooses color scheme. xmode now only selects
4958 between Plain and Verbose. Better orthogonality.
4964 between Plain and Verbose. Better orthogonality.
4959
4965
4960 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4966 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4961 mode and color scheme for the exception handlers. Now it's
4967 mode and color scheme for the exception handlers. Now it's
4962 possible to have the verbose traceback with no coloring.
4968 possible to have the verbose traceback with no coloring.
4963
4969
4964 2001-11-23 Fernando Perez <fperez@colorado.edu>
4970 2001-11-23 Fernando Perez <fperez@colorado.edu>
4965
4971
4966 * Version 0.1.12 released, 0.1.13 opened.
4972 * Version 0.1.12 released, 0.1.13 opened.
4967
4973
4968 * Removed option to set auto-quote and auto-paren escapes by
4974 * Removed option to set auto-quote and auto-paren escapes by
4969 user. The chances of breaking valid syntax are just too high. If
4975 user. The chances of breaking valid syntax are just too high. If
4970 someone *really* wants, they can always dig into the code.
4976 someone *really* wants, they can always dig into the code.
4971
4977
4972 * Made prompt separators configurable.
4978 * Made prompt separators configurable.
4973
4979
4974 2001-11-22 Fernando Perez <fperez@colorado.edu>
4980 2001-11-22 Fernando Perez <fperez@colorado.edu>
4975
4981
4976 * Small bugfixes in many places.
4982 * Small bugfixes in many places.
4977
4983
4978 * Removed the MyCompleter class from ipplib. It seemed redundant
4984 * Removed the MyCompleter class from ipplib. It seemed redundant
4979 with the C-p,C-n history search functionality. Less code to
4985 with the C-p,C-n history search functionality. Less code to
4980 maintain.
4986 maintain.
4981
4987
4982 * Moved all the original ipython.py code into ipythonlib.py. Right
4988 * Moved all the original ipython.py code into ipythonlib.py. Right
4983 now it's just one big dump into a function called make_IPython, so
4989 now it's just one big dump into a function called make_IPython, so
4984 no real modularity has been gained. But at least it makes the
4990 no real modularity has been gained. But at least it makes the
4985 wrapper script tiny, and since ipythonlib is a module, it gets
4991 wrapper script tiny, and since ipythonlib is a module, it gets
4986 compiled and startup is much faster.
4992 compiled and startup is much faster.
4987
4993
4988 This is a reasobably 'deep' change, so we should test it for a
4994 This is a reasobably 'deep' change, so we should test it for a
4989 while without messing too much more with the code.
4995 while without messing too much more with the code.
4990
4996
4991 2001-11-21 Fernando Perez <fperez@colorado.edu>
4997 2001-11-21 Fernando Perez <fperez@colorado.edu>
4992
4998
4993 * Version 0.1.11 released, 0.1.12 opened for further work.
4999 * Version 0.1.11 released, 0.1.12 opened for further work.
4994
5000
4995 * Removed dependency on Itpl. It was only needed in one place. It
5001 * Removed dependency on Itpl. It was only needed in one place. It
4996 would be nice if this became part of python, though. It makes life
5002 would be nice if this became part of python, though. It makes life
4997 *a lot* easier in some cases.
5003 *a lot* easier in some cases.
4998
5004
4999 * Simplified the prefilter code a bit. Now all handlers are
5005 * Simplified the prefilter code a bit. Now all handlers are
5000 expected to explicitly return a value (at least a blank string).
5006 expected to explicitly return a value (at least a blank string).
5001
5007
5002 * Heavy edits in ipplib. Removed the help system altogether. Now
5008 * Heavy edits in ipplib. Removed the help system altogether. Now
5003 obj?/?? is used for inspecting objects, a magic @doc prints
5009 obj?/?? is used for inspecting objects, a magic @doc prints
5004 docstrings, and full-blown Python help is accessed via the 'help'
5010 docstrings, and full-blown Python help is accessed via the 'help'
5005 keyword. This cleans up a lot of code (less to maintain) and does
5011 keyword. This cleans up a lot of code (less to maintain) and does
5006 the job. Since 'help' is now a standard Python component, might as
5012 the job. Since 'help' is now a standard Python component, might as
5007 well use it and remove duplicate functionality.
5013 well use it and remove duplicate functionality.
5008
5014
5009 Also removed the option to use ipplib as a standalone program. By
5015 Also removed the option to use ipplib as a standalone program. By
5010 now it's too dependent on other parts of IPython to function alone.
5016 now it's too dependent on other parts of IPython to function alone.
5011
5017
5012 * Fixed bug in genutils.pager. It would crash if the pager was
5018 * Fixed bug in genutils.pager. It would crash if the pager was
5013 exited immediately after opening (broken pipe).
5019 exited immediately after opening (broken pipe).
5014
5020
5015 * Trimmed down the VerboseTB reporting a little. The header is
5021 * Trimmed down the VerboseTB reporting a little. The header is
5016 much shorter now and the repeated exception arguments at the end
5022 much shorter now and the repeated exception arguments at the end
5017 have been removed. For interactive use the old header seemed a bit
5023 have been removed. For interactive use the old header seemed a bit
5018 excessive.
5024 excessive.
5019
5025
5020 * Fixed small bug in output of @whos for variables with multi-word
5026 * Fixed small bug in output of @whos for variables with multi-word
5021 types (only first word was displayed).
5027 types (only first word was displayed).
5022
5028
5023 2001-11-17 Fernando Perez <fperez@colorado.edu>
5029 2001-11-17 Fernando Perez <fperez@colorado.edu>
5024
5030
5025 * Version 0.1.10 released, 0.1.11 opened for further work.
5031 * Version 0.1.10 released, 0.1.11 opened for further work.
5026
5032
5027 * Modified dirs and friends. dirs now *returns* the stack (not
5033 * Modified dirs and friends. dirs now *returns* the stack (not
5028 prints), so one can manipulate it as a variable. Convenient to
5034 prints), so one can manipulate it as a variable. Convenient to
5029 travel along many directories.
5035 travel along many directories.
5030
5036
5031 * Fixed bug in magic_pdef: would only work with functions with
5037 * Fixed bug in magic_pdef: would only work with functions with
5032 arguments with default values.
5038 arguments with default values.
5033
5039
5034 2001-11-14 Fernando Perez <fperez@colorado.edu>
5040 2001-11-14 Fernando Perez <fperez@colorado.edu>
5035
5041
5036 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5042 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5037 example with IPython. Various other minor fixes and cleanups.
5043 example with IPython. Various other minor fixes and cleanups.
5038
5044
5039 * Version 0.1.9 released, 0.1.10 opened for further work.
5045 * Version 0.1.9 released, 0.1.10 opened for further work.
5040
5046
5041 * Added sys.path to the list of directories searched in the
5047 * Added sys.path to the list of directories searched in the
5042 execfile= option. It used to be the current directory and the
5048 execfile= option. It used to be the current directory and the
5043 user's IPYTHONDIR only.
5049 user's IPYTHONDIR only.
5044
5050
5045 2001-11-13 Fernando Perez <fperez@colorado.edu>
5051 2001-11-13 Fernando Perez <fperez@colorado.edu>
5046
5052
5047 * Reinstated the raw_input/prefilter separation that Janko had
5053 * Reinstated the raw_input/prefilter separation that Janko had
5048 initially. This gives a more convenient setup for extending the
5054 initially. This gives a more convenient setup for extending the
5049 pre-processor from the outside: raw_input always gets a string,
5055 pre-processor from the outside: raw_input always gets a string,
5050 and prefilter has to process it. We can then redefine prefilter
5056 and prefilter has to process it. We can then redefine prefilter
5051 from the outside and implement extensions for special
5057 from the outside and implement extensions for special
5052 purposes.
5058 purposes.
5053
5059
5054 Today I got one for inputting PhysicalQuantity objects
5060 Today I got one for inputting PhysicalQuantity objects
5055 (from Scientific) without needing any function calls at
5061 (from Scientific) without needing any function calls at
5056 all. Extremely convenient, and it's all done as a user-level
5062 all. Extremely convenient, and it's all done as a user-level
5057 extension (no IPython code was touched). Now instead of:
5063 extension (no IPython code was touched). Now instead of:
5058 a = PhysicalQuantity(4.2,'m/s**2')
5064 a = PhysicalQuantity(4.2,'m/s**2')
5059 one can simply say
5065 one can simply say
5060 a = 4.2 m/s**2
5066 a = 4.2 m/s**2
5061 or even
5067 or even
5062 a = 4.2 m/s^2
5068 a = 4.2 m/s^2
5063
5069
5064 I use this, but it's also a proof of concept: IPython really is
5070 I use this, but it's also a proof of concept: IPython really is
5065 fully user-extensible, even at the level of the parsing of the
5071 fully user-extensible, even at the level of the parsing of the
5066 command line. It's not trivial, but it's perfectly doable.
5072 command line. It's not trivial, but it's perfectly doable.
5067
5073
5068 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5074 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5069 the problem of modules being loaded in the inverse order in which
5075 the problem of modules being loaded in the inverse order in which
5070 they were defined in
5076 they were defined in
5071
5077
5072 * Version 0.1.8 released, 0.1.9 opened for further work.
5078 * Version 0.1.8 released, 0.1.9 opened for further work.
5073
5079
5074 * Added magics pdef, source and file. They respectively show the
5080 * Added magics pdef, source and file. They respectively show the
5075 definition line ('prototype' in C), source code and full python
5081 definition line ('prototype' in C), source code and full python
5076 file for any callable object. The object inspector oinfo uses
5082 file for any callable object. The object inspector oinfo uses
5077 these to show the same information.
5083 these to show the same information.
5078
5084
5079 * Version 0.1.7 released, 0.1.8 opened for further work.
5085 * Version 0.1.7 released, 0.1.8 opened for further work.
5080
5086
5081 * Separated all the magic functions into a class called Magic. The
5087 * Separated all the magic functions into a class called Magic. The
5082 InteractiveShell class was becoming too big for Xemacs to handle
5088 InteractiveShell class was becoming too big for Xemacs to handle
5083 (de-indenting a line would lock it up for 10 seconds while it
5089 (de-indenting a line would lock it up for 10 seconds while it
5084 backtracked on the whole class!)
5090 backtracked on the whole class!)
5085
5091
5086 FIXME: didn't work. It can be done, but right now namespaces are
5092 FIXME: didn't work. It can be done, but right now namespaces are
5087 all messed up. Do it later (reverted it for now, so at least
5093 all messed up. Do it later (reverted it for now, so at least
5088 everything works as before).
5094 everything works as before).
5089
5095
5090 * Got the object introspection system (magic_oinfo) working! I
5096 * Got the object introspection system (magic_oinfo) working! I
5091 think this is pretty much ready for release to Janko, so he can
5097 think this is pretty much ready for release to Janko, so he can
5092 test it for a while and then announce it. Pretty much 100% of what
5098 test it for a while and then announce it. Pretty much 100% of what
5093 I wanted for the 'phase 1' release is ready. Happy, tired.
5099 I wanted for the 'phase 1' release is ready. Happy, tired.
5094
5100
5095 2001-11-12 Fernando Perez <fperez@colorado.edu>
5101 2001-11-12 Fernando Perez <fperez@colorado.edu>
5096
5102
5097 * Version 0.1.6 released, 0.1.7 opened for further work.
5103 * Version 0.1.6 released, 0.1.7 opened for further work.
5098
5104
5099 * Fixed bug in printing: it used to test for truth before
5105 * Fixed bug in printing: it used to test for truth before
5100 printing, so 0 wouldn't print. Now checks for None.
5106 printing, so 0 wouldn't print. Now checks for None.
5101
5107
5102 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5108 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5103 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5109 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5104 reaches by hand into the outputcache. Think of a better way to do
5110 reaches by hand into the outputcache. Think of a better way to do
5105 this later.
5111 this later.
5106
5112
5107 * Various small fixes thanks to Nathan's comments.
5113 * Various small fixes thanks to Nathan's comments.
5108
5114
5109 * Changed magic_pprint to magic_Pprint. This way it doesn't
5115 * Changed magic_pprint to magic_Pprint. This way it doesn't
5110 collide with pprint() and the name is consistent with the command
5116 collide with pprint() and the name is consistent with the command
5111 line option.
5117 line option.
5112
5118
5113 * Changed prompt counter behavior to be fully like
5119 * Changed prompt counter behavior to be fully like
5114 Mathematica's. That is, even input that doesn't return a result
5120 Mathematica's. That is, even input that doesn't return a result
5115 raises the prompt counter. The old behavior was kind of confusing
5121 raises the prompt counter. The old behavior was kind of confusing
5116 (getting the same prompt number several times if the operation
5122 (getting the same prompt number several times if the operation
5117 didn't return a result).
5123 didn't return a result).
5118
5124
5119 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5125 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5120
5126
5121 * Fixed -Classic mode (wasn't working anymore).
5127 * Fixed -Classic mode (wasn't working anymore).
5122
5128
5123 * Added colored prompts using Nathan's new code. Colors are
5129 * Added colored prompts using Nathan's new code. Colors are
5124 currently hardwired, they can be user-configurable. For
5130 currently hardwired, they can be user-configurable. For
5125 developers, they can be chosen in file ipythonlib.py, at the
5131 developers, they can be chosen in file ipythonlib.py, at the
5126 beginning of the CachedOutput class def.
5132 beginning of the CachedOutput class def.
5127
5133
5128 2001-11-11 Fernando Perez <fperez@colorado.edu>
5134 2001-11-11 Fernando Perez <fperez@colorado.edu>
5129
5135
5130 * Version 0.1.5 released, 0.1.6 opened for further work.
5136 * Version 0.1.5 released, 0.1.6 opened for further work.
5131
5137
5132 * Changed magic_env to *return* the environment as a dict (not to
5138 * Changed magic_env to *return* the environment as a dict (not to
5133 print it). This way it prints, but it can also be processed.
5139 print it). This way it prints, but it can also be processed.
5134
5140
5135 * Added Verbose exception reporting to interactive
5141 * Added Verbose exception reporting to interactive
5136 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5142 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5137 traceback. Had to make some changes to the ultraTB file. This is
5143 traceback. Had to make some changes to the ultraTB file. This is
5138 probably the last 'big' thing in my mental todo list. This ties
5144 probably the last 'big' thing in my mental todo list. This ties
5139 in with the next entry:
5145 in with the next entry:
5140
5146
5141 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5147 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5142 has to specify is Plain, Color or Verbose for all exception
5148 has to specify is Plain, Color or Verbose for all exception
5143 handling.
5149 handling.
5144
5150
5145 * Removed ShellServices option. All this can really be done via
5151 * Removed ShellServices option. All this can really be done via
5146 the magic system. It's easier to extend, cleaner and has automatic
5152 the magic system. It's easier to extend, cleaner and has automatic
5147 namespace protection and documentation.
5153 namespace protection and documentation.
5148
5154
5149 2001-11-09 Fernando Perez <fperez@colorado.edu>
5155 2001-11-09 Fernando Perez <fperez@colorado.edu>
5150
5156
5151 * Fixed bug in output cache flushing (missing parameter to
5157 * Fixed bug in output cache flushing (missing parameter to
5152 __init__). Other small bugs fixed (found using pychecker).
5158 __init__). Other small bugs fixed (found using pychecker).
5153
5159
5154 * Version 0.1.4 opened for bugfixing.
5160 * Version 0.1.4 opened for bugfixing.
5155
5161
5156 2001-11-07 Fernando Perez <fperez@colorado.edu>
5162 2001-11-07 Fernando Perez <fperez@colorado.edu>
5157
5163
5158 * Version 0.1.3 released, mainly because of the raw_input bug.
5164 * Version 0.1.3 released, mainly because of the raw_input bug.
5159
5165
5160 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5166 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5161 and when testing for whether things were callable, a call could
5167 and when testing for whether things were callable, a call could
5162 actually be made to certain functions. They would get called again
5168 actually be made to certain functions. They would get called again
5163 once 'really' executed, with a resulting double call. A disaster
5169 once 'really' executed, with a resulting double call. A disaster
5164 in many cases (list.reverse() would never work!).
5170 in many cases (list.reverse() would never work!).
5165
5171
5166 * Removed prefilter() function, moved its code to raw_input (which
5172 * Removed prefilter() function, moved its code to raw_input (which
5167 after all was just a near-empty caller for prefilter). This saves
5173 after all was just a near-empty caller for prefilter). This saves
5168 a function call on every prompt, and simplifies the class a tiny bit.
5174 a function call on every prompt, and simplifies the class a tiny bit.
5169
5175
5170 * Fix _ip to __ip name in magic example file.
5176 * Fix _ip to __ip name in magic example file.
5171
5177
5172 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5178 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5173 work with non-gnu versions of tar.
5179 work with non-gnu versions of tar.
5174
5180
5175 2001-11-06 Fernando Perez <fperez@colorado.edu>
5181 2001-11-06 Fernando Perez <fperez@colorado.edu>
5176
5182
5177 * Version 0.1.2. Just to keep track of the recent changes.
5183 * Version 0.1.2. Just to keep track of the recent changes.
5178
5184
5179 * Fixed nasty bug in output prompt routine. It used to check 'if
5185 * Fixed nasty bug in output prompt routine. It used to check 'if
5180 arg != None...'. Problem is, this fails if arg implements a
5186 arg != None...'. Problem is, this fails if arg implements a
5181 special comparison (__cmp__) which disallows comparing to
5187 special comparison (__cmp__) which disallows comparing to
5182 None. Found it when trying to use the PhysicalQuantity module from
5188 None. Found it when trying to use the PhysicalQuantity module from
5183 ScientificPython.
5189 ScientificPython.
5184
5190
5185 2001-11-05 Fernando Perez <fperez@colorado.edu>
5191 2001-11-05 Fernando Perez <fperez@colorado.edu>
5186
5192
5187 * Also added dirs. Now the pushd/popd/dirs family functions
5193 * Also added dirs. Now the pushd/popd/dirs family functions
5188 basically like the shell, with the added convenience of going home
5194 basically like the shell, with the added convenience of going home
5189 when called with no args.
5195 when called with no args.
5190
5196
5191 * pushd/popd slightly modified to mimic shell behavior more
5197 * pushd/popd slightly modified to mimic shell behavior more
5192 closely.
5198 closely.
5193
5199
5194 * Added env,pushd,popd from ShellServices as magic functions. I
5200 * Added env,pushd,popd from ShellServices as magic functions. I
5195 think the cleanest will be to port all desired functions from
5201 think the cleanest will be to port all desired functions from
5196 ShellServices as magics and remove ShellServices altogether. This
5202 ShellServices as magics and remove ShellServices altogether. This
5197 will provide a single, clean way of adding functionality
5203 will provide a single, clean way of adding functionality
5198 (shell-type or otherwise) to IP.
5204 (shell-type or otherwise) to IP.
5199
5205
5200 2001-11-04 Fernando Perez <fperez@colorado.edu>
5206 2001-11-04 Fernando Perez <fperez@colorado.edu>
5201
5207
5202 * Added .ipython/ directory to sys.path. This way users can keep
5208 * Added .ipython/ directory to sys.path. This way users can keep
5203 customizations there and access them via import.
5209 customizations there and access them via import.
5204
5210
5205 2001-11-03 Fernando Perez <fperez@colorado.edu>
5211 2001-11-03 Fernando Perez <fperez@colorado.edu>
5206
5212
5207 * Opened version 0.1.1 for new changes.
5213 * Opened version 0.1.1 for new changes.
5208
5214
5209 * Changed version number to 0.1.0: first 'public' release, sent to
5215 * Changed version number to 0.1.0: first 'public' release, sent to
5210 Nathan and Janko.
5216 Nathan and Janko.
5211
5217
5212 * Lots of small fixes and tweaks.
5218 * Lots of small fixes and tweaks.
5213
5219
5214 * Minor changes to whos format. Now strings are shown, snipped if
5220 * Minor changes to whos format. Now strings are shown, snipped if
5215 too long.
5221 too long.
5216
5222
5217 * Changed ShellServices to work on __main__ so they show up in @who
5223 * Changed ShellServices to work on __main__ so they show up in @who
5218
5224
5219 * Help also works with ? at the end of a line:
5225 * Help also works with ? at the end of a line:
5220 ?sin and sin?
5226 ?sin and sin?
5221 both produce the same effect. This is nice, as often I use the
5227 both produce the same effect. This is nice, as often I use the
5222 tab-complete to find the name of a method, but I used to then have
5228 tab-complete to find the name of a method, but I used to then have
5223 to go to the beginning of the line to put a ? if I wanted more
5229 to go to the beginning of the line to put a ? if I wanted more
5224 info. Now I can just add the ? and hit return. Convenient.
5230 info. Now I can just add the ? and hit return. Convenient.
5225
5231
5226 2001-11-02 Fernando Perez <fperez@colorado.edu>
5232 2001-11-02 Fernando Perez <fperez@colorado.edu>
5227
5233
5228 * Python version check (>=2.1) added.
5234 * Python version check (>=2.1) added.
5229
5235
5230 * Added LazyPython documentation. At this point the docs are quite
5236 * Added LazyPython documentation. At this point the docs are quite
5231 a mess. A cleanup is in order.
5237 a mess. A cleanup is in order.
5232
5238
5233 * Auto-installer created. For some bizarre reason, the zipfiles
5239 * Auto-installer created. For some bizarre reason, the zipfiles
5234 module isn't working on my system. So I made a tar version
5240 module isn't working on my system. So I made a tar version
5235 (hopefully the command line options in various systems won't kill
5241 (hopefully the command line options in various systems won't kill
5236 me).
5242 me).
5237
5243
5238 * Fixes to Struct in genutils. Now all dictionary-like methods are
5244 * Fixes to Struct in genutils. Now all dictionary-like methods are
5239 protected (reasonably).
5245 protected (reasonably).
5240
5246
5241 * Added pager function to genutils and changed ? to print usage
5247 * Added pager function to genutils and changed ? to print usage
5242 note through it (it was too long).
5248 note through it (it was too long).
5243
5249
5244 * Added the LazyPython functionality. Works great! I changed the
5250 * Added the LazyPython functionality. Works great! I changed the
5245 auto-quote escape to ';', it's on home row and next to '. But
5251 auto-quote escape to ';', it's on home row and next to '. But
5246 both auto-quote and auto-paren (still /) escapes are command-line
5252 both auto-quote and auto-paren (still /) escapes are command-line
5247 parameters.
5253 parameters.
5248
5254
5249
5255
5250 2001-11-01 Fernando Perez <fperez@colorado.edu>
5256 2001-11-01 Fernando Perez <fperez@colorado.edu>
5251
5257
5252 * Version changed to 0.0.7. Fairly large change: configuration now
5258 * Version changed to 0.0.7. Fairly large change: configuration now
5253 is all stored in a directory, by default .ipython. There, all
5259 is all stored in a directory, by default .ipython. There, all
5254 config files have normal looking names (not .names)
5260 config files have normal looking names (not .names)
5255
5261
5256 * Version 0.0.6 Released first to Lucas and Archie as a test
5262 * Version 0.0.6 Released first to Lucas and Archie as a test
5257 run. Since it's the first 'semi-public' release, change version to
5263 run. Since it's the first 'semi-public' release, change version to
5258 > 0.0.6 for any changes now.
5264 > 0.0.6 for any changes now.
5259
5265
5260 * Stuff I had put in the ipplib.py changelog:
5266 * Stuff I had put in the ipplib.py changelog:
5261
5267
5262 Changes to InteractiveShell:
5268 Changes to InteractiveShell:
5263
5269
5264 - Made the usage message a parameter.
5270 - Made the usage message a parameter.
5265
5271
5266 - Require the name of the shell variable to be given. It's a bit
5272 - Require the name of the shell variable to be given. It's a bit
5267 of a hack, but allows the name 'shell' not to be hardwire in the
5273 of a hack, but allows the name 'shell' not to be hardwire in the
5268 magic (@) handler, which is problematic b/c it requires
5274 magic (@) handler, which is problematic b/c it requires
5269 polluting the global namespace with 'shell'. This in turn is
5275 polluting the global namespace with 'shell'. This in turn is
5270 fragile: if a user redefines a variable called shell, things
5276 fragile: if a user redefines a variable called shell, things
5271 break.
5277 break.
5272
5278
5273 - magic @: all functions available through @ need to be defined
5279 - magic @: all functions available through @ need to be defined
5274 as magic_<name>, even though they can be called simply as
5280 as magic_<name>, even though they can be called simply as
5275 @<name>. This allows the special command @magic to gather
5281 @<name>. This allows the special command @magic to gather
5276 information automatically about all existing magic functions,
5282 information automatically about all existing magic functions,
5277 even if they are run-time user extensions, by parsing the shell
5283 even if they are run-time user extensions, by parsing the shell
5278 instance __dict__ looking for special magic_ names.
5284 instance __dict__ looking for special magic_ names.
5279
5285
5280 - mainloop: added *two* local namespace parameters. This allows
5286 - mainloop: added *two* local namespace parameters. This allows
5281 the class to differentiate between parameters which were there
5287 the class to differentiate between parameters which were there
5282 before and after command line initialization was processed. This
5288 before and after command line initialization was processed. This
5283 way, later @who can show things loaded at startup by the
5289 way, later @who can show things loaded at startup by the
5284 user. This trick was necessary to make session saving/reloading
5290 user. This trick was necessary to make session saving/reloading
5285 really work: ideally after saving/exiting/reloading a session,
5291 really work: ideally after saving/exiting/reloading a session,
5286 *everythin* should look the same, including the output of @who. I
5292 *everythin* should look the same, including the output of @who. I
5287 was only able to make this work with this double namespace
5293 was only able to make this work with this double namespace
5288 trick.
5294 trick.
5289
5295
5290 - added a header to the logfile which allows (almost) full
5296 - added a header to the logfile which allows (almost) full
5291 session restoring.
5297 session restoring.
5292
5298
5293 - prepend lines beginning with @ or !, with a and log
5299 - prepend lines beginning with @ or !, with a and log
5294 them. Why? !lines: may be useful to know what you did @lines:
5300 them. Why? !lines: may be useful to know what you did @lines:
5295 they may affect session state. So when restoring a session, at
5301 they may affect session state. So when restoring a session, at
5296 least inform the user of their presence. I couldn't quite get
5302 least inform the user of their presence. I couldn't quite get
5297 them to properly re-execute, but at least the user is warned.
5303 them to properly re-execute, but at least the user is warned.
5298
5304
5299 * Started ChangeLog.
5305 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now