##// END OF EJS Templates
Sort directoy listings (case sensitive with files and dirs mixed).
walter.doerwald -
Show More
@@ -1,2153 +1,2153 b''
1 # -*- coding: iso-8859-1 -*-
1 # -*- coding: iso-8859-1 -*-
2
2
3 """
3 """
4 ``ipipe`` provides classes to be used in an interactive Python session. Doing a
4 ``ipipe`` provides classes to be used in an interactive Python session. Doing a
5 ``from ipipe import *`` is the preferred way to do this. The name of all
5 ``from ipipe import *`` is the preferred way to do this. The name of all
6 objects imported this way starts with ``i`` to minimize collisions.
6 objects imported this way starts with ``i`` to minimize collisions.
7
7
8 ``ipipe`` supports "pipeline expressions", which is something resembling Unix
8 ``ipipe`` supports "pipeline expressions", which is something resembling Unix
9 pipes. An example is:
9 pipes. An example is:
10
10
11 >>> ienv | isort("key.lower()")
11 >>> ienv | isort("key.lower()")
12
12
13 This gives a listing of all environment variables sorted by name.
13 This gives a listing of all environment variables sorted by name.
14
14
15
15
16 There are three types of objects in a pipeline expression:
16 There are three types of objects in a pipeline expression:
17
17
18 * ``Table``s: These objects produce items. Examples are ``ils`` (listing the
18 * ``Table``s: These objects produce items. Examples are ``ils`` (listing the
19 current directory, ``ienv`` (listing environment variables), ``ipwd`` (listing
19 current directory, ``ienv`` (listing environment variables), ``ipwd`` (listing
20 user accounts) and ``igrp`` (listing user groups). A ``Table`` must be the
20 user accounts) and ``igrp`` (listing user groups). A ``Table`` must be the
21 first object in a pipe expression.
21 first object in a pipe expression.
22
22
23 * ``Pipe``s: These objects sit in the middle of a pipe expression. They
23 * ``Pipe``s: These objects sit in the middle of a pipe expression. They
24 transform the input in some way (e.g. filtering or sorting it). Examples are:
24 transform the input in some way (e.g. filtering or sorting it). Examples are:
25 ``ifilter`` (which filters the input pipe), ``isort`` (which sorts the input
25 ``ifilter`` (which filters the input pipe), ``isort`` (which sorts the input
26 pipe) and ``ieval`` (which evaluates a function or expression for each object
26 pipe) and ``ieval`` (which evaluates a function or expression for each object
27 in the input pipe).
27 in the input pipe).
28
28
29 * ``Display``s: These objects can be put as the last object in a pipeline
29 * ``Display``s: These objects can be put as the last object in a pipeline
30 expression. There are responsible for displaying the result of the pipeline
30 expression. There are responsible for displaying the result of the pipeline
31 expression. If a pipeline expression doesn't end in a display object a default
31 expression. If a pipeline expression doesn't end in a display object a default
32 display objects will be used. One example is ``ibrowse`` which is a ``curses``
32 display objects will be used. One example is ``ibrowse`` which is a ``curses``
33 based browser.
33 based browser.
34
34
35
35
36 Adding support for pipeline expressions to your own objects can be done through
36 Adding support for pipeline expressions to your own objects can be done through
37 three extensions points (all of them optional):
37 three extensions points (all of them optional):
38
38
39 * An object that will be displayed as a row by a ``Display`` object should
39 * An object that will be displayed as a row by a ``Display`` object should
40 implement the method ``__xattrs__(self, mode)`` method or register an
40 implement the method ``__xattrs__(self, mode)`` method or register an
41 implementation of the generic function ``xattrs``. For more info see ``xattrs``.
41 implementation of the generic function ``xattrs``. For more info see ``xattrs``.
42
42
43 * When an object ``foo`` is displayed by a ``Display`` object, the generic
43 * When an object ``foo`` is displayed by a ``Display`` object, the generic
44 function ``xrepr`` is used.
44 function ``xrepr`` is used.
45
45
46 * Objects that can be iterated by ``Pipe``s must iterable. For special cases,
46 * Objects that can be iterated by ``Pipe``s must iterable. For special cases,
47 where iteration for display is different than the normal iteration a special
47 where iteration for display is different than the normal iteration a special
48 implementation can be registered with the generic function ``xiter``. This makes
48 implementation can be registered with the generic function ``xiter``. This makes
49 it possible to use dictionaries and modules in pipeline expressions, for example:
49 it possible to use dictionaries and modules in pipeline expressions, for example:
50
50
51 >>> import sys
51 >>> import sys
52 >>> sys | ifilter("isinstance(value, int)") | idump
52 >>> sys | ifilter("isinstance(value, int)") | idump
53 key |value
53 key |value
54 api_version| 1012
54 api_version| 1012
55 dllhandle | 503316480
55 dllhandle | 503316480
56 hexversion | 33817328
56 hexversion | 33817328
57 maxint |2147483647
57 maxint |2147483647
58 maxunicode | 65535
58 maxunicode | 65535
59 >>> sys.modules | ifilter("_.value is not None") | isort("_.key.lower()")
59 >>> sys.modules | ifilter("_.value is not None") | isort("_.key.lower()")
60 ...
60 ...
61
61
62 Note: The expression strings passed to ``ifilter()`` and ``isort()`` can
62 Note: The expression strings passed to ``ifilter()`` and ``isort()`` can
63 refer to the object to be filtered or sorted via the variable ``_`` and to any
63 refer to the object to be filtered or sorted via the variable ``_`` and to any
64 of the attributes of the object, i.e.:
64 of the attributes of the object, i.e.:
65
65
66 >>> sys.modules | ifilter("_.value is not None") | isort("_.key.lower()")
66 >>> sys.modules | ifilter("_.value is not None") | isort("_.key.lower()")
67
67
68 does the same as
68 does the same as
69
69
70 >>> sys.modules | ifilter("value is not None") | isort("key.lower()")
70 >>> sys.modules | ifilter("value is not None") | isort("key.lower()")
71
71
72 In addition to expression strings, it's possible to pass callables (taking
72 In addition to expression strings, it's possible to pass callables (taking
73 the object as an argument) to ``ifilter()``, ``isort()`` and ``ieval()``:
73 the object as an argument) to ``ifilter()``, ``isort()`` and ``ieval()``:
74
74
75 >>> sys | ifilter(lambda _:isinstance(_.value, int)) \
75 >>> sys | ifilter(lambda _:isinstance(_.value, int)) \
76 ... | ieval(lambda _: (_.key, hex(_.value))) | idump
76 ... | ieval(lambda _: (_.key, hex(_.value))) | idump
77 0 |1
77 0 |1
78 api_version|0x3f4
78 api_version|0x3f4
79 dllhandle |0x1e000000
79 dllhandle |0x1e000000
80 hexversion |0x20402f0
80 hexversion |0x20402f0
81 maxint |0x7fffffff
81 maxint |0x7fffffff
82 maxunicode |0xffff
82 maxunicode |0xffff
83 """
83 """
84
84
85 import sys, os, os.path, stat, glob, new, csv, datetime, types
85 import sys, os, os.path, stat, glob, new, csv, datetime, types
86 import itertools, mimetypes
86 import itertools, mimetypes
87
87
88 try: # Python 2.3 compatibility
88 try: # Python 2.3 compatibility
89 import collections
89 import collections
90 except ImportError:
90 except ImportError:
91 deque = list
91 deque = list
92 else:
92 else:
93 deque = collections.deque
93 deque = collections.deque
94
94
95 try: # Python 2.3 compatibility
95 try: # Python 2.3 compatibility
96 set
96 set
97 except NameError:
97 except NameError:
98 import sets
98 import sets
99 set = sets.Set
99 set = sets.Set
100
100
101 try: # Python 2.3 compatibility
101 try: # Python 2.3 compatibility
102 sorted
102 sorted
103 except NameError:
103 except NameError:
104 def sorted(iterator, key=None, reverse=False):
104 def sorted(iterator, key=None, reverse=False):
105 items = list(iterator)
105 items = list(iterator)
106 if key is not None:
106 if key is not None:
107 items.sort(lambda i1, i2: cmp(key(i1), key(i2)))
107 items.sort(lambda i1, i2: cmp(key(i1), key(i2)))
108 else:
108 else:
109 items.sort()
109 items.sort()
110 if reverse:
110 if reverse:
111 items.reverse()
111 items.reverse()
112 return items
112 return items
113
113
114 try:
114 try:
115 import pwd
115 import pwd
116 except ImportError:
116 except ImportError:
117 pwd = None
117 pwd = None
118
118
119 try:
119 try:
120 import grp
120 import grp
121 except ImportError:
121 except ImportError:
122 grp = None
122 grp = None
123
123
124 from IPython.external import simplegeneric
124 from IPython.external import simplegeneric
125
125
126 import path
126 import path
127 try:
127 try:
128 from IPython import genutils, ipapi
128 from IPython import genutils, ipapi
129 except ImportError:
129 except ImportError:
130 genutils = None
130 genutils = None
131 ipapi = None
131 ipapi = None
132
132
133 import astyle
133 import astyle
134
134
135
135
136 __all__ = [
136 __all__ = [
137 "ifile", "ils", "iglob", "iwalk", "ipwdentry", "ipwd", "igrpentry", "igrp",
137 "ifile", "ils", "iglob", "iwalk", "ipwdentry", "ipwd", "igrpentry", "igrp",
138 "icsv", "ix", "ichain", "isort", "ifilter", "ieval", "ienum", "ienv",
138 "icsv", "ix", "ichain", "isort", "ifilter", "ieval", "ienum", "ienv",
139 "idump", "iless"
139 "idump", "iless"
140 ]
140 ]
141
141
142
142
143 os.stat_float_times(True) # enable microseconds
143 os.stat_float_times(True) # enable microseconds
144
144
145
145
146 class AttrNamespace(object):
146 class AttrNamespace(object):
147 """
147 """
148 Helper class that is used for providing a namespace for evaluating
148 Helper class that is used for providing a namespace for evaluating
149 expressions containing attribute names of an object.
149 expressions containing attribute names of an object.
150 """
150 """
151 def __init__(self, wrapped):
151 def __init__(self, wrapped):
152 self.wrapped = wrapped
152 self.wrapped = wrapped
153
153
154 def __getitem__(self, name):
154 def __getitem__(self, name):
155 if name == "_":
155 if name == "_":
156 return self.wrapped
156 return self.wrapped
157 try:
157 try:
158 return getattr(self.wrapped, name)
158 return getattr(self.wrapped, name)
159 except AttributeError:
159 except AttributeError:
160 raise KeyError(name)
160 raise KeyError(name)
161
161
162 # Python 2.3 compatibility
162 # Python 2.3 compatibility
163 # use eval workaround to find out which names are used in the
163 # use eval workaround to find out which names are used in the
164 # eval string and put them into the locals. This works for most
164 # eval string and put them into the locals. This works for most
165 # normal uses case, bizarre ones like accessing the locals()
165 # normal uses case, bizarre ones like accessing the locals()
166 # will fail
166 # will fail
167 try:
167 try:
168 eval("_", None, AttrNamespace(None))
168 eval("_", None, AttrNamespace(None))
169 except TypeError:
169 except TypeError:
170 real_eval = eval
170 real_eval = eval
171 def eval(codestring, _globals, _locals):
171 def eval(codestring, _globals, _locals):
172 """
172 """
173 eval(source[, globals[, locals]]) -> value
173 eval(source[, globals[, locals]]) -> value
174
174
175 Evaluate the source in the context of globals and locals.
175 Evaluate the source in the context of globals and locals.
176 The source may be a string representing a Python expression
176 The source may be a string representing a Python expression
177 or a code object as returned by compile().
177 or a code object as returned by compile().
178 The globals must be a dictionary and locals can be any mappping.
178 The globals must be a dictionary and locals can be any mappping.
179
179
180 This function is a workaround for the shortcomings of
180 This function is a workaround for the shortcomings of
181 Python 2.3's eval.
181 Python 2.3's eval.
182 """
182 """
183
183
184 if isinstance(codestring, basestring):
184 if isinstance(codestring, basestring):
185 code = compile(codestring, "_eval", "eval")
185 code = compile(codestring, "_eval", "eval")
186 else:
186 else:
187 code = codestring
187 code = codestring
188 newlocals = {}
188 newlocals = {}
189 for name in code.co_names:
189 for name in code.co_names:
190 try:
190 try:
191 newlocals[name] = _locals[name]
191 newlocals[name] = _locals[name]
192 except KeyError:
192 except KeyError:
193 pass
193 pass
194 return real_eval(code, _globals, newlocals)
194 return real_eval(code, _globals, newlocals)
195
195
196
196
197 noitem = object()
197 noitem = object()
198
198
199
199
200 def item(iterator, index, default=noitem):
200 def item(iterator, index, default=noitem):
201 """
201 """
202 Return the ``index``th item from the iterator ``iterator``.
202 Return the ``index``th item from the iterator ``iterator``.
203 ``index`` must be an integer (negative integers are relative to the
203 ``index`` must be an integer (negative integers are relative to the
204 end (i.e. the last items produced by the iterator)).
204 end (i.e. the last items produced by the iterator)).
205
205
206 If ``default`` is given, this will be the default value when
206 If ``default`` is given, this will be the default value when
207 the iterator doesn't contain an item at this position. Otherwise an
207 the iterator doesn't contain an item at this position. Otherwise an
208 ``IndexError`` will be raised.
208 ``IndexError`` will be raised.
209
209
210 Note that using this function will partially or totally exhaust the
210 Note that using this function will partially or totally exhaust the
211 iterator.
211 iterator.
212 """
212 """
213 i = index
213 i = index
214 if i>=0:
214 if i>=0:
215 for item in iterator:
215 for item in iterator:
216 if not i:
216 if not i:
217 return item
217 return item
218 i -= 1
218 i -= 1
219 else:
219 else:
220 i = -index
220 i = -index
221 cache = deque()
221 cache = deque()
222 for item in iterator:
222 for item in iterator:
223 cache.append(item)
223 cache.append(item)
224 if len(cache)>i:
224 if len(cache)>i:
225 cache.popleft()
225 cache.popleft()
226 if len(cache)==i:
226 if len(cache)==i:
227 return cache.popleft()
227 return cache.popleft()
228 if default is noitem:
228 if default is noitem:
229 raise IndexError(index)
229 raise IndexError(index)
230 else:
230 else:
231 return default
231 return default
232
232
233
233
234 def getglobals(g):
234 def getglobals(g):
235 """
235 """
236 Return the global namespace that is used for expression strings in
236 Return the global namespace that is used for expression strings in
237 ``ifilter`` and others. This is ``g`` or (if ``g`` is ``None``) IPython's
237 ``ifilter`` and others. This is ``g`` or (if ``g`` is ``None``) IPython's
238 user namespace.
238 user namespace.
239 """
239 """
240 if g is None:
240 if g is None:
241 if ipapi is not None:
241 if ipapi is not None:
242 api = ipapi.get()
242 api = ipapi.get()
243 if api is not None:
243 if api is not None:
244 return api.user_ns
244 return api.user_ns
245 return globals()
245 return globals()
246 return g
246 return g
247
247
248
248
249 class Descriptor(object):
249 class Descriptor(object):
250 """
250 """
251 A ``Descriptor`` object is used for describing the attributes of objects.
251 A ``Descriptor`` object is used for describing the attributes of objects.
252 """
252 """
253 def __hash__(self):
253 def __hash__(self):
254 return hash(self.__class__) ^ hash(self.key())
254 return hash(self.__class__) ^ hash(self.key())
255
255
256 def __eq__(self, other):
256 def __eq__(self, other):
257 return self.__class__ is other.__class__ and self.key() == other.key()
257 return self.__class__ is other.__class__ and self.key() == other.key()
258
258
259 def __ne__(self, other):
259 def __ne__(self, other):
260 return self.__class__ is not other.__class__ or self.key() != other.key()
260 return self.__class__ is not other.__class__ or self.key() != other.key()
261
261
262 def key(self):
262 def key(self):
263 pass
263 pass
264
264
265 def name(self):
265 def name(self):
266 """
266 """
267 Return the name of this attribute for display by a ``Display`` object
267 Return the name of this attribute for display by a ``Display`` object
268 (e.g. as a column title).
268 (e.g. as a column title).
269 """
269 """
270 key = self.key()
270 key = self.key()
271 if key is None:
271 if key is None:
272 return "_"
272 return "_"
273 return str(key)
273 return str(key)
274
274
275 def attrtype(self, obj):
275 def attrtype(self, obj):
276 """
276 """
277 Return the type of this attribute (i.e. something like "attribute" or
277 Return the type of this attribute (i.e. something like "attribute" or
278 "method").
278 "method").
279 """
279 """
280
280
281 def valuetype(self, obj):
281 def valuetype(self, obj):
282 """
282 """
283 Return the type of this attribute value of the object ``obj``.
283 Return the type of this attribute value of the object ``obj``.
284 """
284 """
285
285
286 def value(self, obj):
286 def value(self, obj):
287 """
287 """
288 Return the value of this attribute of the object ``obj``.
288 Return the value of this attribute of the object ``obj``.
289 """
289 """
290
290
291 def doc(self, obj):
291 def doc(self, obj):
292 """
292 """
293 Return the documentation for this attribute.
293 Return the documentation for this attribute.
294 """
294 """
295
295
296 def shortdoc(self, obj):
296 def shortdoc(self, obj):
297 """
297 """
298 Return a short documentation for this attribute (defaulting to the
298 Return a short documentation for this attribute (defaulting to the
299 first line).
299 first line).
300 """
300 """
301 doc = self.doc(obj)
301 doc = self.doc(obj)
302 if doc is not None:
302 if doc is not None:
303 doc = doc.strip().splitlines()[0].strip()
303 doc = doc.strip().splitlines()[0].strip()
304 return doc
304 return doc
305
305
306 def iter(self, obj):
306 def iter(self, obj):
307 """
307 """
308 Return an iterator for this attribute of the object ``obj``.
308 Return an iterator for this attribute of the object ``obj``.
309 """
309 """
310 return xiter(self.value(obj))
310 return xiter(self.value(obj))
311
311
312
312
313 class SelfDescriptor(Descriptor):
313 class SelfDescriptor(Descriptor):
314 """
314 """
315 A ``SelfDescriptor`` describes the object itself.
315 A ``SelfDescriptor`` describes the object itself.
316 """
316 """
317 def key(self):
317 def key(self):
318 return None
318 return None
319
319
320 def attrtype(self, obj):
320 def attrtype(self, obj):
321 return "self"
321 return "self"
322
322
323 def valuetype(self, obj):
323 def valuetype(self, obj):
324 return type(obj)
324 return type(obj)
325
325
326 def value(self, obj):
326 def value(self, obj):
327 return obj
327 return obj
328
328
329 def __repr__(self):
329 def __repr__(self):
330 return "Self"
330 return "Self"
331
331
332 selfdescriptor = SelfDescriptor() # there's no need for more than one
332 selfdescriptor = SelfDescriptor() # there's no need for more than one
333
333
334
334
335 class AttributeDescriptor(Descriptor):
335 class AttributeDescriptor(Descriptor):
336 """
336 """
337 An ``AttributeDescriptor`` describes a simple attribute of an object.
337 An ``AttributeDescriptor`` describes a simple attribute of an object.
338 """
338 """
339 __slots__ = ("_name", "_doc")
339 __slots__ = ("_name", "_doc")
340
340
341 def __init__(self, name, doc=None):
341 def __init__(self, name, doc=None):
342 self._name = name
342 self._name = name
343 self._doc = doc
343 self._doc = doc
344
344
345 def key(self):
345 def key(self):
346 return self._name
346 return self._name
347
347
348 def doc(self, obj):
348 def doc(self, obj):
349 return self._doc
349 return self._doc
350
350
351 def attrtype(self, obj):
351 def attrtype(self, obj):
352 return "attr"
352 return "attr"
353
353
354 def valuetype(self, obj):
354 def valuetype(self, obj):
355 return type(getattr(obj, self._name))
355 return type(getattr(obj, self._name))
356
356
357 def value(self, obj):
357 def value(self, obj):
358 return getattr(obj, self._name)
358 return getattr(obj, self._name)
359
359
360 def __repr__(self):
360 def __repr__(self):
361 if self._doc is None:
361 if self._doc is None:
362 return "Attribute(%r)" % self._name
362 return "Attribute(%r)" % self._name
363 else:
363 else:
364 return "Attribute(%r, %r)" % (self._name, self._doc)
364 return "Attribute(%r, %r)" % (self._name, self._doc)
365
365
366
366
367 class IndexDescriptor(Descriptor):
367 class IndexDescriptor(Descriptor):
368 """
368 """
369 An ``IndexDescriptor`` describes an "attribute" of an object that is fetched
369 An ``IndexDescriptor`` describes an "attribute" of an object that is fetched
370 via ``__getitem__``.
370 via ``__getitem__``.
371 """
371 """
372 __slots__ = ("_index",)
372 __slots__ = ("_index",)
373
373
374 def __init__(self, index):
374 def __init__(self, index):
375 self._index = index
375 self._index = index
376
376
377 def key(self):
377 def key(self):
378 return self._index
378 return self._index
379
379
380 def attrtype(self, obj):
380 def attrtype(self, obj):
381 return "item"
381 return "item"
382
382
383 def valuetype(self, obj):
383 def valuetype(self, obj):
384 return type(obj[self._index])
384 return type(obj[self._index])
385
385
386 def value(self, obj):
386 def value(self, obj):
387 return obj[self._index]
387 return obj[self._index]
388
388
389 def __repr__(self):
389 def __repr__(self):
390 return "Index(%r)" % self._index
390 return "Index(%r)" % self._index
391
391
392
392
393 class MethodDescriptor(Descriptor):
393 class MethodDescriptor(Descriptor):
394 """
394 """
395 A ``MethodDescriptor`` describes a method of an object that can be called
395 A ``MethodDescriptor`` describes a method of an object that can be called
396 without argument. Note that this method shouldn't change the object.
396 without argument. Note that this method shouldn't change the object.
397 """
397 """
398 __slots__ = ("_name", "_doc")
398 __slots__ = ("_name", "_doc")
399
399
400 def __init__(self, name, doc=None):
400 def __init__(self, name, doc=None):
401 self._name = name
401 self._name = name
402 self._doc = doc
402 self._doc = doc
403
403
404 def key(self):
404 def key(self):
405 return self._name
405 return self._name
406
406
407 def doc(self, obj):
407 def doc(self, obj):
408 if self._doc is None:
408 if self._doc is None:
409 return getattr(obj, self._name).__doc__
409 return getattr(obj, self._name).__doc__
410 return self._doc
410 return self._doc
411
411
412 def attrtype(self, obj):
412 def attrtype(self, obj):
413 return "method"
413 return "method"
414
414
415 def valuetype(self, obj):
415 def valuetype(self, obj):
416 return type(self.value(obj))
416 return type(self.value(obj))
417
417
418 def value(self, obj):
418 def value(self, obj):
419 return getattr(obj, self._name)()
419 return getattr(obj, self._name)()
420
420
421 def __repr__(self):
421 def __repr__(self):
422 if self._doc is None:
422 if self._doc is None:
423 return "Method(%r)" % self._name
423 return "Method(%r)" % self._name
424 else:
424 else:
425 return "Method(%r, %r)" % (self._name, self._doc)
425 return "Method(%r, %r)" % (self._name, self._doc)
426
426
427
427
428 class IterAttributeDescriptor(Descriptor):
428 class IterAttributeDescriptor(Descriptor):
429 """
429 """
430 An ``IterAttributeDescriptor`` works like an ``AttributeDescriptor`` but
430 An ``IterAttributeDescriptor`` works like an ``AttributeDescriptor`` but
431 doesn't return an attribute values (because this value might be e.g. a large
431 doesn't return an attribute values (because this value might be e.g. a large
432 list).
432 list).
433 """
433 """
434 __slots__ = ("_name", "_doc")
434 __slots__ = ("_name", "_doc")
435
435
436 def __init__(self, name, doc=None):
436 def __init__(self, name, doc=None):
437 self._name = name
437 self._name = name
438 self._doc = doc
438 self._doc = doc
439
439
440 def key(self):
440 def key(self):
441 return self._name
441 return self._name
442
442
443 def doc(self, obj):
443 def doc(self, obj):
444 return self._doc
444 return self._doc
445
445
446 def attrtype(self, obj):
446 def attrtype(self, obj):
447 return "iter"
447 return "iter"
448
448
449 def valuetype(self, obj):
449 def valuetype(self, obj):
450 return noitem
450 return noitem
451
451
452 def value(self, obj):
452 def value(self, obj):
453 return noitem
453 return noitem
454
454
455 def iter(self, obj):
455 def iter(self, obj):
456 return xiter(getattr(obj, self._name))
456 return xiter(getattr(obj, self._name))
457
457
458 def __repr__(self):
458 def __repr__(self):
459 if self._doc is None:
459 if self._doc is None:
460 return "IterAttribute(%r)" % self._name
460 return "IterAttribute(%r)" % self._name
461 else:
461 else:
462 return "IterAttribute(%r, %r)" % (self._name, self._doc)
462 return "IterAttribute(%r, %r)" % (self._name, self._doc)
463
463
464
464
465 class IterMethodDescriptor(Descriptor):
465 class IterMethodDescriptor(Descriptor):
466 """
466 """
467 An ``IterMethodDescriptor`` works like an ``MethodDescriptor`` but doesn't
467 An ``IterMethodDescriptor`` works like an ``MethodDescriptor`` but doesn't
468 return an attribute values (because this value might be e.g. a large list).
468 return an attribute values (because this value might be e.g. a large list).
469 """
469 """
470 __slots__ = ("_name", "_doc")
470 __slots__ = ("_name", "_doc")
471
471
472 def __init__(self, name, doc=None):
472 def __init__(self, name, doc=None):
473 self._name = name
473 self._name = name
474 self._doc = doc
474 self._doc = doc
475
475
476 def key(self):
476 def key(self):
477 return self._name
477 return self._name
478
478
479 def doc(self, obj):
479 def doc(self, obj):
480 if self._doc is None:
480 if self._doc is None:
481 return getattr(obj, self._name).__doc__
481 return getattr(obj, self._name).__doc__
482 return self._doc
482 return self._doc
483
483
484 def attrtype(self, obj):
484 def attrtype(self, obj):
485 return "itermethod"
485 return "itermethod"
486
486
487 def valuetype(self, obj):
487 def valuetype(self, obj):
488 return noitem
488 return noitem
489
489
490 def value(self, obj):
490 def value(self, obj):
491 return noitem
491 return noitem
492
492
493 def iter(self, obj):
493 def iter(self, obj):
494 return xiter(getattr(obj, self._name)())
494 return xiter(getattr(obj, self._name)())
495
495
496 def __repr__(self):
496 def __repr__(self):
497 if self._doc is None:
497 if self._doc is None:
498 return "IterMethod(%r)" % self._name
498 return "IterMethod(%r)" % self._name
499 else:
499 else:
500 return "IterMethod(%r, %r)" % (self._name, self._doc)
500 return "IterMethod(%r, %r)" % (self._name, self._doc)
501
501
502
502
503 class FunctionDescriptor(Descriptor):
503 class FunctionDescriptor(Descriptor):
504 """
504 """
505 A ``FunctionDescriptor`` turns a function into a descriptor. The function
505 A ``FunctionDescriptor`` turns a function into a descriptor. The function
506 will be called with the object to get the type and value of the attribute.
506 will be called with the object to get the type and value of the attribute.
507 """
507 """
508 __slots__ = ("_function", "_name", "_doc")
508 __slots__ = ("_function", "_name", "_doc")
509
509
510 def __init__(self, function, name=None, doc=None):
510 def __init__(self, function, name=None, doc=None):
511 self._function = function
511 self._function = function
512 self._name = name
512 self._name = name
513 self._doc = doc
513 self._doc = doc
514
514
515 def key(self):
515 def key(self):
516 return self._function
516 return self._function
517
517
518 def name(self):
518 def name(self):
519 if self._name is not None:
519 if self._name is not None:
520 return self._name
520 return self._name
521 return getattr(self._function, "__xname__", self._function.__name__)
521 return getattr(self._function, "__xname__", self._function.__name__)
522
522
523 def doc(self, obj):
523 def doc(self, obj):
524 if self._doc is None:
524 if self._doc is None:
525 return self._function.__doc__
525 return self._function.__doc__
526 return self._doc
526 return self._doc
527
527
528 def attrtype(self, obj):
528 def attrtype(self, obj):
529 return "function"
529 return "function"
530
530
531 def valuetype(self, obj):
531 def valuetype(self, obj):
532 return type(self._function(obj))
532 return type(self._function(obj))
533
533
534 def value(self, obj):
534 def value(self, obj):
535 return self._function(obj)
535 return self._function(obj)
536
536
537 def __repr__(self):
537 def __repr__(self):
538 if self._doc is None:
538 if self._doc is None:
539 return "Function(%r)" % self._name
539 return "Function(%r)" % self._name
540 else:
540 else:
541 return "Function(%r, %r)" % (self._name, self._doc)
541 return "Function(%r, %r)" % (self._name, self._doc)
542
542
543
543
544 class Table(object):
544 class Table(object):
545 """
545 """
546 A ``Table`` is an object that produces items (just like a normal Python
546 A ``Table`` is an object that produces items (just like a normal Python
547 iterator/generator does) and can be used as the first object in a pipeline
547 iterator/generator does) and can be used as the first object in a pipeline
548 expression. The displayhook will open the default browser for such an object
548 expression. The displayhook will open the default browser for such an object
549 (instead of simply printing the ``repr()`` result).
549 (instead of simply printing the ``repr()`` result).
550 """
550 """
551
551
552 # We want to support ``foo`` and ``foo()`` in pipeline expression:
552 # We want to support ``foo`` and ``foo()`` in pipeline expression:
553 # So we implement the required operators (``|`` and ``+``) in the metaclass,
553 # So we implement the required operators (``|`` and ``+``) in the metaclass,
554 # instantiate the class and forward the operator to the instance
554 # instantiate the class and forward the operator to the instance
555 class __metaclass__(type):
555 class __metaclass__(type):
556 def __iter__(self):
556 def __iter__(self):
557 return iter(self())
557 return iter(self())
558
558
559 def __or__(self, other):
559 def __or__(self, other):
560 return self() | other
560 return self() | other
561
561
562 def __add__(self, other):
562 def __add__(self, other):
563 return self() + other
563 return self() + other
564
564
565 def __radd__(self, other):
565 def __radd__(self, other):
566 return other + self()
566 return other + self()
567
567
568 def __getitem__(self, index):
568 def __getitem__(self, index):
569 return self()[index]
569 return self()[index]
570
570
571 def __getitem__(self, index):
571 def __getitem__(self, index):
572 return item(self, index)
572 return item(self, index)
573
573
574 def __contains__(self, item):
574 def __contains__(self, item):
575 for haveitem in self:
575 for haveitem in self:
576 if item == haveitem:
576 if item == haveitem:
577 return True
577 return True
578 return False
578 return False
579
579
580 def __or__(self, other):
580 def __or__(self, other):
581 # autoinstantiate right hand side
581 # autoinstantiate right hand side
582 if isinstance(other, type) and issubclass(other, (Table, Display)):
582 if isinstance(other, type) and issubclass(other, (Table, Display)):
583 other = other()
583 other = other()
584 # treat simple strings and functions as ``ieval`` instances
584 # treat simple strings and functions as ``ieval`` instances
585 elif not isinstance(other, Display) and not isinstance(other, Table):
585 elif not isinstance(other, Display) and not isinstance(other, Table):
586 other = ieval(other)
586 other = ieval(other)
587 # forward operations to the right hand side
587 # forward operations to the right hand side
588 return other.__ror__(self)
588 return other.__ror__(self)
589
589
590 def __add__(self, other):
590 def __add__(self, other):
591 # autoinstantiate right hand side
591 # autoinstantiate right hand side
592 if isinstance(other, type) and issubclass(other, Table):
592 if isinstance(other, type) and issubclass(other, Table):
593 other = other()
593 other = other()
594 return ichain(self, other)
594 return ichain(self, other)
595
595
596 def __radd__(self, other):
596 def __radd__(self, other):
597 # autoinstantiate left hand side
597 # autoinstantiate left hand side
598 if isinstance(other, type) and issubclass(other, Table):
598 if isinstance(other, type) and issubclass(other, Table):
599 other = other()
599 other = other()
600 return ichain(other, self)
600 return ichain(other, self)
601
601
602
602
603 class Pipe(Table):
603 class Pipe(Table):
604 """
604 """
605 A ``Pipe`` is an object that can be used in a pipeline expression. It
605 A ``Pipe`` is an object that can be used in a pipeline expression. It
606 processes the objects it gets from its input ``Table``/``Pipe``. Note that
606 processes the objects it gets from its input ``Table``/``Pipe``. Note that
607 a ``Pipe`` object can't be used as the first object in a pipeline
607 a ``Pipe`` object can't be used as the first object in a pipeline
608 expression, as it doesn't produces items itself.
608 expression, as it doesn't produces items itself.
609 """
609 """
610 class __metaclass__(Table.__metaclass__):
610 class __metaclass__(Table.__metaclass__):
611 def __ror__(self, input):
611 def __ror__(self, input):
612 return input | self()
612 return input | self()
613
613
614 def __ror__(self, input):
614 def __ror__(self, input):
615 # autoinstantiate left hand side
615 # autoinstantiate left hand side
616 if isinstance(input, type) and issubclass(input, Table):
616 if isinstance(input, type) and issubclass(input, Table):
617 input = input()
617 input = input()
618 self.input = input
618 self.input = input
619 return self
619 return self
620
620
621
621
622 def xrepr(item, mode="default"):
622 def xrepr(item, mode="default"):
623 """
623 """
624 Generic function that adds color output and different display modes to ``repr``.
624 Generic function that adds color output and different display modes to ``repr``.
625
625
626 The result of an ``xrepr`` call is iterable and consists of ``(style, string)``
626 The result of an ``xrepr`` call is iterable and consists of ``(style, string)``
627 tuples. The ``style`` in this tuple must be a ``Style`` object from the
627 tuples. The ``style`` in this tuple must be a ``Style`` object from the
628 ``astring`` module. To reconfigure the output the first yielded tuple can be
628 ``astring`` module. To reconfigure the output the first yielded tuple can be
629 a ``(aligment, full)`` tuple instead of a ``(style, string)`` tuple.
629 a ``(aligment, full)`` tuple instead of a ``(style, string)`` tuple.
630 ``alignment`` can be -1 for left aligned, 0 for centered and 1 for right
630 ``alignment`` can be -1 for left aligned, 0 for centered and 1 for right
631 aligned (the default is left alignment). ``full`` is a boolean that specifies
631 aligned (the default is left alignment). ``full`` is a boolean that specifies
632 whether the complete output must be displayed or the ``Display`` object is
632 whether the complete output must be displayed or the ``Display`` object is
633 allowed to stop output after enough text has been produced (e.g. a syntax
633 allowed to stop output after enough text has been produced (e.g. a syntax
634 highlighted text line would use ``True``, but for a large data structure
634 highlighted text line would use ``True``, but for a large data structure
635 (i.e. a nested list, tuple or dictionary) ``False`` would be used).
635 (i.e. a nested list, tuple or dictionary) ``False`` would be used).
636 The default is full output.
636 The default is full output.
637
637
638 There are four different possible values for ``mode`` depending on where
638 There are four different possible values for ``mode`` depending on where
639 the ``Display`` object will display ``item``:
639 the ``Display`` object will display ``item``:
640
640
641 * ``"header"``: ``item`` will be displayed in a header line (this is used by
641 * ``"header"``: ``item`` will be displayed in a header line (this is used by
642 ``ibrowse``).
642 ``ibrowse``).
643 * ``"footer"``: ``item`` will be displayed in a footer line (this is used by
643 * ``"footer"``: ``item`` will be displayed in a footer line (this is used by
644 ``ibrowse``).
644 ``ibrowse``).
645 * ``"cell"``: ``item`` will be displayed in a table cell/list.
645 * ``"cell"``: ``item`` will be displayed in a table cell/list.
646 * ``"default"``: default mode. If an ``xrepr`` implementation recursively
646 * ``"default"``: default mode. If an ``xrepr`` implementation recursively
647 outputs objects, ``"default"`` must be passed in the recursive calls to
647 outputs objects, ``"default"`` must be passed in the recursive calls to
648 ``xrepr``.
648 ``xrepr``.
649
649
650 If no implementation is registered for ``item``, ``xrepr`` will try the
650 If no implementation is registered for ``item``, ``xrepr`` will try the
651 ``__xrepr__`` method on ``item``. If ``item`` doesn't have an ``__xrepr__``
651 ``__xrepr__`` method on ``item``. If ``item`` doesn't have an ``__xrepr__``
652 method it falls back to ``repr``/``__repr__`` for all modes.
652 method it falls back to ``repr``/``__repr__`` for all modes.
653 """
653 """
654 try:
654 try:
655 func = item.__xrepr__
655 func = item.__xrepr__
656 except AttributeError:
656 except AttributeError:
657 yield (astyle.style_default, repr(item))
657 yield (astyle.style_default, repr(item))
658 else:
658 else:
659 try:
659 try:
660 for x in func(mode):
660 for x in func(mode):
661 yield x
661 yield x
662 except (KeyboardInterrupt, SystemExit):
662 except (KeyboardInterrupt, SystemExit):
663 raise
663 raise
664 except Exception:
664 except Exception:
665 yield (astyle.style_default, repr(item))
665 yield (astyle.style_default, repr(item))
666 xrepr = simplegeneric.generic(xrepr)
666 xrepr = simplegeneric.generic(xrepr)
667
667
668
668
669 def xrepr_none(self, mode="default"):
669 def xrepr_none(self, mode="default"):
670 yield (astyle.style_type_none, repr(self))
670 yield (astyle.style_type_none, repr(self))
671 xrepr.when_object(None)(xrepr_none)
671 xrepr.when_object(None)(xrepr_none)
672
672
673
673
674 def xrepr_noitem(self, mode="default"):
674 def xrepr_noitem(self, mode="default"):
675 yield (2, True)
675 yield (2, True)
676 yield (astyle.style_nodata, "<?>")
676 yield (astyle.style_nodata, "<?>")
677 xrepr.when_object(noitem)(xrepr_noitem)
677 xrepr.when_object(noitem)(xrepr_noitem)
678
678
679
679
680 def xrepr_bool(self, mode="default"):
680 def xrepr_bool(self, mode="default"):
681 yield (astyle.style_type_bool, repr(self))
681 yield (astyle.style_type_bool, repr(self))
682 xrepr.when_type(bool)(xrepr_bool)
682 xrepr.when_type(bool)(xrepr_bool)
683
683
684
684
685 def xrepr_str(self, mode="default"):
685 def xrepr_str(self, mode="default"):
686 if mode == "cell":
686 if mode == "cell":
687 yield (astyle.style_default, repr(self.expandtabs(tab))[1:-1])
687 yield (astyle.style_default, repr(self.expandtabs(tab))[1:-1])
688 else:
688 else:
689 yield (astyle.style_default, repr(self))
689 yield (astyle.style_default, repr(self))
690 xrepr.when_type(str)(xrepr_str)
690 xrepr.when_type(str)(xrepr_str)
691
691
692
692
693 def xrepr_unicode(self, mode="default"):
693 def xrepr_unicode(self, mode="default"):
694 if mode == "cell":
694 if mode == "cell":
695 yield (astyle.style_default, repr(self.expandtabs(tab))[2:-1])
695 yield (astyle.style_default, repr(self.expandtabs(tab))[2:-1])
696 else:
696 else:
697 yield (astyle.style_default, repr(self))
697 yield (astyle.style_default, repr(self))
698 xrepr.when_type(unicode)(xrepr_unicode)
698 xrepr.when_type(unicode)(xrepr_unicode)
699
699
700
700
701 def xrepr_number(self, mode="default"):
701 def xrepr_number(self, mode="default"):
702 yield (1, True)
702 yield (1, True)
703 yield (astyle.style_type_number, repr(self))
703 yield (astyle.style_type_number, repr(self))
704 xrepr.when_type(int)(xrepr_number)
704 xrepr.when_type(int)(xrepr_number)
705 xrepr.when_type(long)(xrepr_number)
705 xrepr.when_type(long)(xrepr_number)
706 xrepr.when_type(float)(xrepr_number)
706 xrepr.when_type(float)(xrepr_number)
707
707
708
708
709 def xrepr_complex(self, mode="default"):
709 def xrepr_complex(self, mode="default"):
710 yield (astyle.style_type_number, repr(self))
710 yield (astyle.style_type_number, repr(self))
711 xrepr.when_type(complex)(xrepr_number)
711 xrepr.when_type(complex)(xrepr_number)
712
712
713
713
714 def xrepr_datetime(self, mode="default"):
714 def xrepr_datetime(self, mode="default"):
715 if mode == "cell":
715 if mode == "cell":
716 # Don't use strftime() here, as this requires year >= 1900
716 # Don't use strftime() here, as this requires year >= 1900
717 yield (astyle.style_type_datetime,
717 yield (astyle.style_type_datetime,
718 "%04d-%02d-%02d %02d:%02d:%02d.%06d" % \
718 "%04d-%02d-%02d %02d:%02d:%02d.%06d" % \
719 (self.year, self.month, self.day,
719 (self.year, self.month, self.day,
720 self.hour, self.minute, self.second,
720 self.hour, self.minute, self.second,
721 self.microsecond),
721 self.microsecond),
722 )
722 )
723 else:
723 else:
724 yield (astyle.style_type_datetime, repr(self))
724 yield (astyle.style_type_datetime, repr(self))
725 xrepr.when_type(datetime.datetime)(xrepr_datetime)
725 xrepr.when_type(datetime.datetime)(xrepr_datetime)
726
726
727
727
728 def xrepr_date(self, mode="default"):
728 def xrepr_date(self, mode="default"):
729 if mode == "cell":
729 if mode == "cell":
730 yield (astyle.style_type_datetime,
730 yield (astyle.style_type_datetime,
731 "%04d-%02d-%02d" % (self.year, self.month, self.day))
731 "%04d-%02d-%02d" % (self.year, self.month, self.day))
732 else:
732 else:
733 yield (astyle.style_type_datetime, repr(self))
733 yield (astyle.style_type_datetime, repr(self))
734 xrepr.when_type(datetime.date)(xrepr_date)
734 xrepr.when_type(datetime.date)(xrepr_date)
735
735
736
736
737 def xrepr_time(self, mode="default"):
737 def xrepr_time(self, mode="default"):
738 if mode == "cell":
738 if mode == "cell":
739 yield (astyle.style_type_datetime,
739 yield (astyle.style_type_datetime,
740 "%02d:%02d:%02d.%06d" % \
740 "%02d:%02d:%02d.%06d" % \
741 (self.hour, self.minute, self.second, self.microsecond))
741 (self.hour, self.minute, self.second, self.microsecond))
742 else:
742 else:
743 yield (astyle.style_type_datetime, repr(self))
743 yield (astyle.style_type_datetime, repr(self))
744 xrepr.when_type(datetime.time)(xrepr_time)
744 xrepr.when_type(datetime.time)(xrepr_time)
745
745
746
746
747 def xrepr_timedelta(self, mode="default"):
747 def xrepr_timedelta(self, mode="default"):
748 yield (astyle.style_type_datetime, repr(self))
748 yield (astyle.style_type_datetime, repr(self))
749 xrepr.when_type(datetime.timedelta)(xrepr_timedelta)
749 xrepr.when_type(datetime.timedelta)(xrepr_timedelta)
750
750
751
751
752 def xrepr_type(self, mode="default"):
752 def xrepr_type(self, mode="default"):
753 if self.__module__ == "__builtin__":
753 if self.__module__ == "__builtin__":
754 yield (astyle.style_type_type, self.__name__)
754 yield (astyle.style_type_type, self.__name__)
755 else:
755 else:
756 yield (astyle.style_type_type, "%s.%s" % (self.__module__, self.__name__))
756 yield (astyle.style_type_type, "%s.%s" % (self.__module__, self.__name__))
757 xrepr.when_type(type)(xrepr_type)
757 xrepr.when_type(type)(xrepr_type)
758
758
759
759
760 def xrepr_exception(self, mode="default"):
760 def xrepr_exception(self, mode="default"):
761 if self.__class__.__module__ == "exceptions":
761 if self.__class__.__module__ == "exceptions":
762 classname = self.__class__.__name__
762 classname = self.__class__.__name__
763 else:
763 else:
764 classname = "%s.%s" % \
764 classname = "%s.%s" % \
765 (self.__class__.__module__, self.__class__.__name__)
765 (self.__class__.__module__, self.__class__.__name__)
766 if mode == "header" or mode == "footer":
766 if mode == "header" or mode == "footer":
767 yield (astyle.style_error, "%s: %s" % (classname, self))
767 yield (astyle.style_error, "%s: %s" % (classname, self))
768 else:
768 else:
769 yield (astyle.style_error, classname)
769 yield (astyle.style_error, classname)
770 xrepr.when_type(Exception)(xrepr_exception)
770 xrepr.when_type(Exception)(xrepr_exception)
771
771
772
772
773 def xrepr_listtuple(self, mode="default"):
773 def xrepr_listtuple(self, mode="default"):
774 if mode == "header" or mode == "footer":
774 if mode == "header" or mode == "footer":
775 if self.__class__.__module__ == "__builtin__":
775 if self.__class__.__module__ == "__builtin__":
776 classname = self.__class__.__name__
776 classname = self.__class__.__name__
777 else:
777 else:
778 classname = "%s.%s" % \
778 classname = "%s.%s" % \
779 (self.__class__.__module__,self.__class__.__name__)
779 (self.__class__.__module__,self.__class__.__name__)
780 yield (astyle.style_default,
780 yield (astyle.style_default,
781 "<%s object with %d items at 0x%x>" % \
781 "<%s object with %d items at 0x%x>" % \
782 (classname, len(self), id(self)))
782 (classname, len(self), id(self)))
783 else:
783 else:
784 yield (-1, False)
784 yield (-1, False)
785 if isinstance(self, list):
785 if isinstance(self, list):
786 yield (astyle.style_default, "[")
786 yield (astyle.style_default, "[")
787 end = "]"
787 end = "]"
788 else:
788 else:
789 yield (astyle.style_default, "(")
789 yield (astyle.style_default, "(")
790 end = ")"
790 end = ")"
791 for (i, subself) in enumerate(self):
791 for (i, subself) in enumerate(self):
792 if i:
792 if i:
793 yield (astyle.style_default, ", ")
793 yield (astyle.style_default, ", ")
794 for part in xrepr(subself, "default"):
794 for part in xrepr(subself, "default"):
795 yield part
795 yield part
796 yield (astyle.style_default, end)
796 yield (astyle.style_default, end)
797 xrepr.when_type(list)(xrepr_listtuple)
797 xrepr.when_type(list)(xrepr_listtuple)
798 xrepr.when_type(tuple)(xrepr_listtuple)
798 xrepr.when_type(tuple)(xrepr_listtuple)
799
799
800
800
801 def xrepr_dict(self, mode="default"):
801 def xrepr_dict(self, mode="default"):
802 if mode == "header" or mode == "footer":
802 if mode == "header" or mode == "footer":
803 if self.__class__.__module__ == "__builtin__":
803 if self.__class__.__module__ == "__builtin__":
804 classname = self.__class__.__name__
804 classname = self.__class__.__name__
805 else:
805 else:
806 classname = "%s.%s" % \
806 classname = "%s.%s" % \
807 (self.__class__.__module__,self.__class__.__name__)
807 (self.__class__.__module__,self.__class__.__name__)
808 yield (astyle.style_default,
808 yield (astyle.style_default,
809 "<%s object with %d items at 0x%x>" % \
809 "<%s object with %d items at 0x%x>" % \
810 (classname, len(self), id(self)))
810 (classname, len(self), id(self)))
811 else:
811 else:
812 yield (-1, False)
812 yield (-1, False)
813 if isinstance(self, dict):
813 if isinstance(self, dict):
814 yield (astyle.style_default, "{")
814 yield (astyle.style_default, "{")
815 end = "}"
815 end = "}"
816 else:
816 else:
817 yield (astyle.style_default, "dictproxy((")
817 yield (astyle.style_default, "dictproxy((")
818 end = "})"
818 end = "})"
819 for (i, (key, value)) in enumerate(self.iteritems()):
819 for (i, (key, value)) in enumerate(self.iteritems()):
820 if i:
820 if i:
821 yield (astyle.style_default, ", ")
821 yield (astyle.style_default, ", ")
822 for part in xrepr(key, "default"):
822 for part in xrepr(key, "default"):
823 yield part
823 yield part
824 yield (astyle.style_default, ": ")
824 yield (astyle.style_default, ": ")
825 for part in xrepr(value, "default"):
825 for part in xrepr(value, "default"):
826 yield part
826 yield part
827 yield (astyle.style_default, end)
827 yield (astyle.style_default, end)
828 xrepr.when_type(dict)(xrepr_dict)
828 xrepr.when_type(dict)(xrepr_dict)
829 xrepr.when_type(types.DictProxyType)(xrepr_dict)
829 xrepr.when_type(types.DictProxyType)(xrepr_dict)
830
830
831
831
832 def upgradexattr(attr):
832 def upgradexattr(attr):
833 """
833 """
834 Convert an attribute descriptor string to a real descriptor object.
834 Convert an attribute descriptor string to a real descriptor object.
835
835
836 If attr already is a descriptor object return if unmodified. A
836 If attr already is a descriptor object return if unmodified. A
837 ``SelfDescriptor`` will be returned if ``attr`` is ``None``. ``"foo"``
837 ``SelfDescriptor`` will be returned if ``attr`` is ``None``. ``"foo"``
838 returns an ``AttributeDescriptor`` for the attribute named ``"foo"``.
838 returns an ``AttributeDescriptor`` for the attribute named ``"foo"``.
839 ``"foo()"`` returns a ``MethodDescriptor`` for the method named ``"foo"``.
839 ``"foo()"`` returns a ``MethodDescriptor`` for the method named ``"foo"``.
840 ``"-foo"`` will return an ``IterAttributeDescriptor`` for the attribute
840 ``"-foo"`` will return an ``IterAttributeDescriptor`` for the attribute
841 named ``"foo"`` and ``"-foo()"`` will return an ``IterMethodDescriptor``
841 named ``"foo"`` and ``"-foo()"`` will return an ``IterMethodDescriptor``
842 for the method named ``"foo"``. Furthermore integer will return the appropriate
842 for the method named ``"foo"``. Furthermore integer will return the appropriate
843 ``IndexDescriptor`` and callables will return a ``FunctionDescriptor``.
843 ``IndexDescriptor`` and callables will return a ``FunctionDescriptor``.
844 """
844 """
845 if attr is None:
845 if attr is None:
846 return selfdescriptor
846 return selfdescriptor
847 elif isinstance(attr, Descriptor):
847 elif isinstance(attr, Descriptor):
848 return attr
848 return attr
849 elif isinstance(attr, str):
849 elif isinstance(attr, str):
850 if attr.endswith("()"):
850 if attr.endswith("()"):
851 if attr.startswith("-"):
851 if attr.startswith("-"):
852 return IterMethodDescriptor(attr[1:-2])
852 return IterMethodDescriptor(attr[1:-2])
853 else:
853 else:
854 return MethodDescriptor(attr[:-2])
854 return MethodDescriptor(attr[:-2])
855 else:
855 else:
856 if attr.startswith("-"):
856 if attr.startswith("-"):
857 return IterAttributeDescriptor(attr[1:])
857 return IterAttributeDescriptor(attr[1:])
858 else:
858 else:
859 return AttributeDescriptor(attr)
859 return AttributeDescriptor(attr)
860 elif isinstance(attr, (int, long)):
860 elif isinstance(attr, (int, long)):
861 return IndexDescriptor(attr)
861 return IndexDescriptor(attr)
862 elif callable(attr):
862 elif callable(attr):
863 return FunctionDescriptor(attr)
863 return FunctionDescriptor(attr)
864 else:
864 else:
865 raise TypeError("can't handle descriptor %r" % attr)
865 raise TypeError("can't handle descriptor %r" % attr)
866
866
867
867
868 def xattrs(item, mode="default"):
868 def xattrs(item, mode="default"):
869 """
869 """
870 Generic function that returns an iterable of attribute descriptors
870 Generic function that returns an iterable of attribute descriptors
871 to be used for displaying the attributes ob the object ``item`` in display
871 to be used for displaying the attributes ob the object ``item`` in display
872 mode ``mode``.
872 mode ``mode``.
873
873
874 There are two possible modes:
874 There are two possible modes:
875
875
876 * ``"detail"``: The ``Display`` object wants to display a detailed list
876 * ``"detail"``: The ``Display`` object wants to display a detailed list
877 of the object attributes.
877 of the object attributes.
878 * ``"default"``: The ``Display`` object wants to display the object in a
878 * ``"default"``: The ``Display`` object wants to display the object in a
879 list view.
879 list view.
880
880
881 If no implementation is registered for the object ``item`` ``xattrs`` falls
881 If no implementation is registered for the object ``item`` ``xattrs`` falls
882 back to trying the ``__xattrs__`` method of the object. If this doesn't
882 back to trying the ``__xattrs__`` method of the object. If this doesn't
883 exist either, ``dir(item)`` is used for ``"detail"`` mode and ``(None,)``
883 exist either, ``dir(item)`` is used for ``"detail"`` mode and ``(None,)``
884 for ``"default"`` mode.
884 for ``"default"`` mode.
885
885
886 The implementation must yield attribute descriptor (see the class
886 The implementation must yield attribute descriptor (see the class
887 ``Descriptor`` for more info). The ``__xattrs__`` method may also return
887 ``Descriptor`` for more info). The ``__xattrs__`` method may also return
888 attribute descriptor string (and ``None``) which will be converted to real
888 attribute descriptor string (and ``None``) which will be converted to real
889 descriptors by ``upgradexattr()``.
889 descriptors by ``upgradexattr()``.
890 """
890 """
891 try:
891 try:
892 func = item.__xattrs__
892 func = item.__xattrs__
893 except AttributeError:
893 except AttributeError:
894 if mode == "detail":
894 if mode == "detail":
895 for attrname in dir(item):
895 for attrname in dir(item):
896 yield AttributeDescriptor(attrname)
896 yield AttributeDescriptor(attrname)
897 else:
897 else:
898 yield selfdescriptor
898 yield selfdescriptor
899 else:
899 else:
900 for attr in func(mode):
900 for attr in func(mode):
901 yield upgradexattr(attr)
901 yield upgradexattr(attr)
902 xattrs = simplegeneric.generic(xattrs)
902 xattrs = simplegeneric.generic(xattrs)
903
903
904
904
905 def xattrs_complex(self, mode="default"):
905 def xattrs_complex(self, mode="default"):
906 if mode == "detail":
906 if mode == "detail":
907 return (AttributeDescriptor("real"), AttributeDescriptor("imag"))
907 return (AttributeDescriptor("real"), AttributeDescriptor("imag"))
908 return (selfdescriptor,)
908 return (selfdescriptor,)
909 xattrs.when_type(complex)(xattrs_complex)
909 xattrs.when_type(complex)(xattrs_complex)
910
910
911
911
912 def _isdict(item):
912 def _isdict(item):
913 try:
913 try:
914 itermeth = item.__class__.__iter__
914 itermeth = item.__class__.__iter__
915 except (AttributeError, TypeError):
915 except (AttributeError, TypeError):
916 return False
916 return False
917 return itermeth is dict.__iter__ or itermeth is types.DictProxyType.__iter__
917 return itermeth is dict.__iter__ or itermeth is types.DictProxyType.__iter__
918
918
919
919
920 def _isstr(item):
920 def _isstr(item):
921 if not isinstance(item, basestring):
921 if not isinstance(item, basestring):
922 return False
922 return False
923 try:
923 try:
924 itermeth = item.__class__.__iter__
924 itermeth = item.__class__.__iter__
925 except AttributeError:
925 except AttributeError:
926 return True
926 return True
927 return False # ``__iter__`` has been redefined
927 return False # ``__iter__`` has been redefined
928
928
929
929
930 def xiter(item):
930 def xiter(item):
931 """
931 """
932 Generic function that implements iteration for pipeline expression. If no
932 Generic function that implements iteration for pipeline expression. If no
933 implementation is registered for ``item`` ``xiter`` falls back to ``iter``.
933 implementation is registered for ``item`` ``xiter`` falls back to ``iter``.
934 """
934 """
935 try:
935 try:
936 func = item.__xiter__
936 func = item.__xiter__
937 except AttributeError:
937 except AttributeError:
938 if _isdict(item):
938 if _isdict(item):
939 def items(item):
939 def items(item):
940 fields = ("key", "value")
940 fields = ("key", "value")
941 for (key, value) in item.iteritems():
941 for (key, value) in item.iteritems():
942 yield Fields(fields, key=key, value=value)
942 yield Fields(fields, key=key, value=value)
943 return items(item)
943 return items(item)
944 elif isinstance(item, new.module):
944 elif isinstance(item, new.module):
945 def items(item):
945 def items(item):
946 fields = ("key", "value")
946 fields = ("key", "value")
947 for key in sorted(item.__dict__):
947 for key in sorted(item.__dict__):
948 yield Fields(fields, key=key, value=getattr(item, key))
948 yield Fields(fields, key=key, value=getattr(item, key))
949 return items(item)
949 return items(item)
950 elif _isstr(item):
950 elif _isstr(item):
951 if not item:
951 if not item:
952 raise ValueError("can't enter empty string")
952 raise ValueError("can't enter empty string")
953 lines = item.splitlines()
953 lines = item.splitlines()
954 if len(lines) == 1:
954 if len(lines) == 1:
955 def iterone(item):
955 def iterone(item):
956 yield item
956 yield item
957 return iterone(item)
957 return iterone(item)
958 else:
958 else:
959 return iter(lines)
959 return iter(lines)
960 return iter(item)
960 return iter(item)
961 else:
961 else:
962 return iter(func()) # iter() just to be safe
962 return iter(func()) # iter() just to be safe
963 xiter = simplegeneric.generic(xiter)
963 xiter = simplegeneric.generic(xiter)
964
964
965
965
966 class ichain(Pipe):
966 class ichain(Pipe):
967 """
967 """
968 Chains multiple ``Table``s into one.
968 Chains multiple ``Table``s into one.
969 """
969 """
970
970
971 def __init__(self, *iters):
971 def __init__(self, *iters):
972 self.iters = iters
972 self.iters = iters
973
973
974 def __iter__(self):
974 def __iter__(self):
975 return itertools.chain(*self.iters)
975 return itertools.chain(*self.iters)
976
976
977 def __xrepr__(self, mode="default"):
977 def __xrepr__(self, mode="default"):
978 if mode == "header" or mode == "footer":
978 if mode == "header" or mode == "footer":
979 for (i, item) in enumerate(self.iters):
979 for (i, item) in enumerate(self.iters):
980 if i:
980 if i:
981 yield (astyle.style_default, "+")
981 yield (astyle.style_default, "+")
982 if isinstance(item, Pipe):
982 if isinstance(item, Pipe):
983 yield (astyle.style_default, "(")
983 yield (astyle.style_default, "(")
984 for part in xrepr(item, mode):
984 for part in xrepr(item, mode):
985 yield part
985 yield part
986 if isinstance(item, Pipe):
986 if isinstance(item, Pipe):
987 yield (astyle.style_default, ")")
987 yield (astyle.style_default, ")")
988 else:
988 else:
989 yield (astyle.style_default, repr(self))
989 yield (astyle.style_default, repr(self))
990
990
991 def __repr__(self):
991 def __repr__(self):
992 args = ", ".join([repr(it) for it in self.iters])
992 args = ", ".join([repr(it) for it in self.iters])
993 return "%s.%s(%s)" % \
993 return "%s.%s(%s)" % \
994 (self.__class__.__module__, self.__class__.__name__, args)
994 (self.__class__.__module__, self.__class__.__name__, args)
995
995
996
996
997 class ifile(path.path):
997 class ifile(path.path):
998 """
998 """
999 file (or directory) object.
999 file (or directory) object.
1000 """
1000 """
1001
1001
1002 def getmode(self):
1002 def getmode(self):
1003 return self.stat().st_mode
1003 return self.stat().st_mode
1004 mode = property(getmode, None, None, "Access mode")
1004 mode = property(getmode, None, None, "Access mode")
1005
1005
1006 def gettype(self):
1006 def gettype(self):
1007 data = [
1007 data = [
1008 (stat.S_ISREG, "file"),
1008 (stat.S_ISREG, "file"),
1009 (stat.S_ISDIR, "dir"),
1009 (stat.S_ISDIR, "dir"),
1010 (stat.S_ISCHR, "chardev"),
1010 (stat.S_ISCHR, "chardev"),
1011 (stat.S_ISBLK, "blockdev"),
1011 (stat.S_ISBLK, "blockdev"),
1012 (stat.S_ISFIFO, "fifo"),
1012 (stat.S_ISFIFO, "fifo"),
1013 (stat.S_ISLNK, "symlink"),
1013 (stat.S_ISLNK, "symlink"),
1014 (stat.S_ISSOCK,"socket"),
1014 (stat.S_ISSOCK,"socket"),
1015 ]
1015 ]
1016 lstat = self.lstat()
1016 lstat = self.lstat()
1017 if lstat is not None:
1017 if lstat is not None:
1018 types = set([text for (func, text) in data if func(lstat.st_mode)])
1018 types = set([text for (func, text) in data if func(lstat.st_mode)])
1019 else:
1019 else:
1020 types = set()
1020 types = set()
1021 m = self.mode
1021 m = self.mode
1022 types.update([text for (func, text) in data if func(m)])
1022 types.update([text for (func, text) in data if func(m)])
1023 return ", ".join(types)
1023 return ", ".join(types)
1024 type = property(gettype, None, None, "file type (file, directory, link, etc.)")
1024 type = property(gettype, None, None, "file type (file, directory, link, etc.)")
1025
1025
1026 def getmodestr(self):
1026 def getmodestr(self):
1027 m = self.mode
1027 m = self.mode
1028 data = [
1028 data = [
1029 (stat.S_IRUSR, "-r"),
1029 (stat.S_IRUSR, "-r"),
1030 (stat.S_IWUSR, "-w"),
1030 (stat.S_IWUSR, "-w"),
1031 (stat.S_IXUSR, "-x"),
1031 (stat.S_IXUSR, "-x"),
1032 (stat.S_IRGRP, "-r"),
1032 (stat.S_IRGRP, "-r"),
1033 (stat.S_IWGRP, "-w"),
1033 (stat.S_IWGRP, "-w"),
1034 (stat.S_IXGRP, "-x"),
1034 (stat.S_IXGRP, "-x"),
1035 (stat.S_IROTH, "-r"),
1035 (stat.S_IROTH, "-r"),
1036 (stat.S_IWOTH, "-w"),
1036 (stat.S_IWOTH, "-w"),
1037 (stat.S_IXOTH, "-x"),
1037 (stat.S_IXOTH, "-x"),
1038 ]
1038 ]
1039 return "".join([text[bool(m&bit)] for (bit, text) in data])
1039 return "".join([text[bool(m&bit)] for (bit, text) in data])
1040
1040
1041 modestr = property(getmodestr, None, None, "Access mode as string")
1041 modestr = property(getmodestr, None, None, "Access mode as string")
1042
1042
1043 def getblocks(self):
1043 def getblocks(self):
1044 return self.stat().st_blocks
1044 return self.stat().st_blocks
1045 blocks = property(getblocks, None, None, "File size in blocks")
1045 blocks = property(getblocks, None, None, "File size in blocks")
1046
1046
1047 def getblksize(self):
1047 def getblksize(self):
1048 return self.stat().st_blksize
1048 return self.stat().st_blksize
1049 blksize = property(getblksize, None, None, "Filesystem block size")
1049 blksize = property(getblksize, None, None, "Filesystem block size")
1050
1050
1051 def getdev(self):
1051 def getdev(self):
1052 return self.stat().st_dev
1052 return self.stat().st_dev
1053 dev = property(getdev)
1053 dev = property(getdev)
1054
1054
1055 def getnlink(self):
1055 def getnlink(self):
1056 return self.stat().st_nlink
1056 return self.stat().st_nlink
1057 nlink = property(getnlink, None, None, "Number of links")
1057 nlink = property(getnlink, None, None, "Number of links")
1058
1058
1059 def getuid(self):
1059 def getuid(self):
1060 return self.stat().st_uid
1060 return self.stat().st_uid
1061 uid = property(getuid, None, None, "User id of file owner")
1061 uid = property(getuid, None, None, "User id of file owner")
1062
1062
1063 def getgid(self):
1063 def getgid(self):
1064 return self.stat().st_gid
1064 return self.stat().st_gid
1065 gid = property(getgid, None, None, "Group id of file owner")
1065 gid = property(getgid, None, None, "Group id of file owner")
1066
1066
1067 def getowner(self):
1067 def getowner(self):
1068 stat = self.stat()
1068 stat = self.stat()
1069 try:
1069 try:
1070 return pwd.getpwuid(stat.st_uid).pw_name
1070 return pwd.getpwuid(stat.st_uid).pw_name
1071 except KeyError:
1071 except KeyError:
1072 return stat.st_uid
1072 return stat.st_uid
1073 owner = property(getowner, None, None, "Owner name (or id)")
1073 owner = property(getowner, None, None, "Owner name (or id)")
1074
1074
1075 def getgroup(self):
1075 def getgroup(self):
1076 stat = self.stat()
1076 stat = self.stat()
1077 try:
1077 try:
1078 return grp.getgrgid(stat.st_gid).gr_name
1078 return grp.getgrgid(stat.st_gid).gr_name
1079 except KeyError:
1079 except KeyError:
1080 return stat.st_gid
1080 return stat.st_gid
1081 group = property(getgroup, None, None, "Group name (or id)")
1081 group = property(getgroup, None, None, "Group name (or id)")
1082
1082
1083 def getadate(self):
1083 def getadate(self):
1084 return datetime.datetime.utcfromtimestamp(self.atime)
1084 return datetime.datetime.utcfromtimestamp(self.atime)
1085 adate = property(getadate, None, None, "Access date")
1085 adate = property(getadate, None, None, "Access date")
1086
1086
1087 def getcdate(self):
1087 def getcdate(self):
1088 return datetime.datetime.utcfromtimestamp(self.ctime)
1088 return datetime.datetime.utcfromtimestamp(self.ctime)
1089 cdate = property(getcdate, None, None, "Creation date")
1089 cdate = property(getcdate, None, None, "Creation date")
1090
1090
1091 def getmdate(self):
1091 def getmdate(self):
1092 return datetime.datetime.utcfromtimestamp(self.mtime)
1092 return datetime.datetime.utcfromtimestamp(self.mtime)
1093 mdate = property(getmdate, None, None, "Modification date")
1093 mdate = property(getmdate, None, None, "Modification date")
1094
1094
1095 def mimetype(self):
1095 def mimetype(self):
1096 """
1096 """
1097 Return MIME type guessed from the extension.
1097 Return MIME type guessed from the extension.
1098 """
1098 """
1099 return mimetypes.guess_type(self.basename())[0]
1099 return mimetypes.guess_type(self.basename())[0]
1100
1100
1101 def encoding(self):
1101 def encoding(self):
1102 """
1102 """
1103 Return guessed compression (like "compress" or "gzip").
1103 Return guessed compression (like "compress" or "gzip").
1104 """
1104 """
1105 return mimetypes.guess_type(self.basename())[1]
1105 return mimetypes.guess_type(self.basename())[1]
1106
1106
1107 def __repr__(self):
1107 def __repr__(self):
1108 return "ifile(%s)" % path._base.__repr__(self)
1108 return "ifile(%s)" % path._base.__repr__(self)
1109
1109
1110 if sys.platform == "win32":
1110 if sys.platform == "win32":
1111 defaultattrs = (None, "type", "size", "modestr", "mdate")
1111 defaultattrs = (None, "type", "size", "modestr", "mdate")
1112 else:
1112 else:
1113 defaultattrs = (None, "type", "size", "modestr", "owner", "group", "mdate")
1113 defaultattrs = (None, "type", "size", "modestr", "owner", "group", "mdate")
1114
1114
1115 def __xattrs__(self, mode="default"):
1115 def __xattrs__(self, mode="default"):
1116 if mode == "detail":
1116 if mode == "detail":
1117 return (
1117 return (
1118 "name",
1118 "name",
1119 "basename()",
1119 "basename()",
1120 "abspath()",
1120 "abspath()",
1121 "realpath()",
1121 "realpath()",
1122 "type",
1122 "type",
1123 "mode",
1123 "mode",
1124 "modestr",
1124 "modestr",
1125 "stat()",
1125 "stat()",
1126 "lstat()",
1126 "lstat()",
1127 "uid",
1127 "uid",
1128 "gid",
1128 "gid",
1129 "owner",
1129 "owner",
1130 "group",
1130 "group",
1131 "dev",
1131 "dev",
1132 "nlink",
1132 "nlink",
1133 "ctime",
1133 "ctime",
1134 "mtime",
1134 "mtime",
1135 "atime",
1135 "atime",
1136 "cdate",
1136 "cdate",
1137 "mdate",
1137 "mdate",
1138 "adate",
1138 "adate",
1139 "size",
1139 "size",
1140 "blocks",
1140 "blocks",
1141 "blksize",
1141 "blksize",
1142 "isdir()",
1142 "isdir()",
1143 "islink()",
1143 "islink()",
1144 "mimetype()",
1144 "mimetype()",
1145 "encoding()",
1145 "encoding()",
1146 "-listdir()",
1146 "-listdir()",
1147 "-dirs()",
1147 "-dirs()",
1148 "-files()",
1148 "-files()",
1149 "-walk()",
1149 "-walk()",
1150 "-walkdirs()",
1150 "-walkdirs()",
1151 "-walkfiles()",
1151 "-walkfiles()",
1152 )
1152 )
1153 else:
1153 else:
1154 return self.defaultattrs
1154 return self.defaultattrs
1155
1155
1156
1156
1157 def xiter_ifile(self):
1157 def xiter_ifile(self):
1158 if self.isdir():
1158 if self.isdir():
1159 yield (self / os.pardir).abspath()
1159 yield (self / os.pardir).abspath()
1160 for child in sorted(self.listdir()):
1160 for child in sorted(self.listdir()):
1161 yield child
1161 yield child
1162 else:
1162 else:
1163 f = self.open("rb")
1163 f = self.open("rb")
1164 for line in f:
1164 for line in f:
1165 yield line
1165 yield line
1166 f.close()
1166 f.close()
1167 xiter.when_type(ifile)(xiter_ifile)
1167 xiter.when_type(ifile)(xiter_ifile)
1168
1168
1169
1169
1170 # We need to implement ``xrepr`` for ``ifile`` as a generic function, because
1170 # We need to implement ``xrepr`` for ``ifile`` as a generic function, because
1171 # otherwise ``xrepr_str`` would kick in.
1171 # otherwise ``xrepr_str`` would kick in.
1172 def xrepr_ifile(self, mode="default"):
1172 def xrepr_ifile(self, mode="default"):
1173 try:
1173 try:
1174 if self.isdir():
1174 if self.isdir():
1175 name = "idir"
1175 name = "idir"
1176 style = astyle.style_dir
1176 style = astyle.style_dir
1177 else:
1177 else:
1178 name = "ifile"
1178 name = "ifile"
1179 style = astyle.style_file
1179 style = astyle.style_file
1180 except IOError:
1180 except IOError:
1181 name = "ifile"
1181 name = "ifile"
1182 style = astyle.style_default
1182 style = astyle.style_default
1183 if mode == "cell" or mode in "header" or mode == "footer":
1183 if mode == "cell" or mode in "header" or mode == "footer":
1184 abspath = repr(path._base(self.normpath()))
1184 abspath = repr(path._base(self.normpath()))
1185 if abspath.startswith("u"):
1185 if abspath.startswith("u"):
1186 abspath = abspath[2:-1]
1186 abspath = abspath[2:-1]
1187 else:
1187 else:
1188 abspath = abspath[1:-1]
1188 abspath = abspath[1:-1]
1189 if mode == "cell":
1189 if mode == "cell":
1190 yield (style, abspath)
1190 yield (style, abspath)
1191 else:
1191 else:
1192 yield (style, "%s(%s)" % (name, abspath))
1192 yield (style, "%s(%s)" % (name, abspath))
1193 else:
1193 else:
1194 yield (style, repr(self))
1194 yield (style, repr(self))
1195 xrepr.when_type(ifile)(xrepr_ifile)
1195 xrepr.when_type(ifile)(xrepr_ifile)
1196
1196
1197
1197
1198 class ils(Table):
1198 class ils(Table):
1199 """
1199 """
1200 List the current (or a specified) directory.
1200 List the current (or a specified) directory.
1201
1201
1202 Examples:
1202 Examples:
1203
1203
1204 >>> ils
1204 >>> ils
1205 >>> ils("/usr/local/lib/python2.4")
1205 >>> ils("/usr/local/lib/python2.4")
1206 >>> ils("~")
1206 >>> ils("~")
1207 """
1207 """
1208 def __init__(self, base=os.curdir, dirs=True, files=True):
1208 def __init__(self, base=os.curdir, dirs=True, files=True):
1209 self.base = os.path.expanduser(base)
1209 self.base = os.path.expanduser(base)
1210 self.dirs = dirs
1210 self.dirs = dirs
1211 self.files = files
1211 self.files = files
1212
1212
1213 def __iter__(self):
1213 def __iter__(self):
1214 base = ifile(self.base)
1214 base = ifile(self.base)
1215 yield (base / os.pardir).abspath()
1215 yield (base / os.pardir).abspath()
1216 for child in base.listdir():
1216 for child in sorted(base.listdir()):
1217 if self.dirs:
1217 if self.dirs:
1218 if self.files:
1218 if self.files:
1219 yield child
1219 yield child
1220 else:
1220 else:
1221 if child.isdir():
1221 if child.isdir():
1222 yield child
1222 yield child
1223 elif self.files:
1223 elif self.files:
1224 if not child.isdir():
1224 if not child.isdir():
1225 yield child
1225 yield child
1226
1226
1227 def __xrepr__(self, mode="default"):
1227 def __xrepr__(self, mode="default"):
1228 return xrepr(ifile(self.base), mode)
1228 return xrepr(ifile(self.base), mode)
1229
1229
1230 def __repr__(self):
1230 def __repr__(self):
1231 return "%s.%s(%r)" % \
1231 return "%s.%s(%r)" % \
1232 (self.__class__.__module__, self.__class__.__name__, self.base)
1232 (self.__class__.__module__, self.__class__.__name__, self.base)
1233
1233
1234
1234
1235 class iglob(Table):
1235 class iglob(Table):
1236 """
1236 """
1237 List all files and directories matching a specified pattern.
1237 List all files and directories matching a specified pattern.
1238 (See ``glob.glob()`` for more info.).
1238 (See ``glob.glob()`` for more info.).
1239
1239
1240 Examples:
1240 Examples:
1241
1241
1242 >>> iglob("*.py")
1242 >>> iglob("*.py")
1243 """
1243 """
1244 def __init__(self, glob):
1244 def __init__(self, glob):
1245 self.glob = glob
1245 self.glob = glob
1246
1246
1247 def __iter__(self):
1247 def __iter__(self):
1248 for name in glob.glob(self.glob):
1248 for name in glob.glob(self.glob):
1249 yield ifile(name)
1249 yield ifile(name)
1250
1250
1251 def __xrepr__(self, mode="default"):
1251 def __xrepr__(self, mode="default"):
1252 if mode == "header" or mode == "footer" or mode == "cell":
1252 if mode == "header" or mode == "footer" or mode == "cell":
1253 yield (astyle.style_default,
1253 yield (astyle.style_default,
1254 "%s(%r)" % (self.__class__.__name__, self.glob))
1254 "%s(%r)" % (self.__class__.__name__, self.glob))
1255 else:
1255 else:
1256 yield (astyle.style_default, repr(self))
1256 yield (astyle.style_default, repr(self))
1257
1257
1258 def __repr__(self):
1258 def __repr__(self):
1259 return "%s.%s(%r)" % \
1259 return "%s.%s(%r)" % \
1260 (self.__class__.__module__, self.__class__.__name__, self.glob)
1260 (self.__class__.__module__, self.__class__.__name__, self.glob)
1261
1261
1262
1262
1263 class iwalk(Table):
1263 class iwalk(Table):
1264 """
1264 """
1265 List all files and directories in a directory and it's subdirectory.
1265 List all files and directories in a directory and it's subdirectory.
1266
1266
1267 >>> iwalk
1267 >>> iwalk
1268 >>> iwalk("/usr/local/lib/python2.4")
1268 >>> iwalk("/usr/local/lib/python2.4")
1269 >>> iwalk("~")
1269 >>> iwalk("~")
1270 """
1270 """
1271 def __init__(self, base=os.curdir, dirs=True, files=True):
1271 def __init__(self, base=os.curdir, dirs=True, files=True):
1272 self.base = os.path.expanduser(base)
1272 self.base = os.path.expanduser(base)
1273 self.dirs = dirs
1273 self.dirs = dirs
1274 self.files = files
1274 self.files = files
1275
1275
1276 def __iter__(self):
1276 def __iter__(self):
1277 for (dirpath, dirnames, filenames) in os.walk(self.base):
1277 for (dirpath, dirnames, filenames) in os.walk(self.base):
1278 if self.dirs:
1278 if self.dirs:
1279 for name in sorted(dirnames):
1279 for name in sorted(dirnames):
1280 yield ifile(os.path.join(dirpath, name))
1280 yield ifile(os.path.join(dirpath, name))
1281 if self.files:
1281 if self.files:
1282 for name in sorted(filenames):
1282 for name in sorted(filenames):
1283 yield ifile(os.path.join(dirpath, name))
1283 yield ifile(os.path.join(dirpath, name))
1284
1284
1285 def __xrepr__(self, mode="default"):
1285 def __xrepr__(self, mode="default"):
1286 if mode == "header" or mode == "footer" or mode == "cell":
1286 if mode == "header" or mode == "footer" or mode == "cell":
1287 yield (astyle.style_default,
1287 yield (astyle.style_default,
1288 "%s(%r)" % (self.__class__.__name__, self.base))
1288 "%s(%r)" % (self.__class__.__name__, self.base))
1289 else:
1289 else:
1290 yield (astyle.style_default, repr(self))
1290 yield (astyle.style_default, repr(self))
1291
1291
1292 def __repr__(self):
1292 def __repr__(self):
1293 return "%s.%s(%r)" % \
1293 return "%s.%s(%r)" % \
1294 (self.__class__.__module__, self.__class__.__name__, self.base)
1294 (self.__class__.__module__, self.__class__.__name__, self.base)
1295
1295
1296
1296
1297 class ipwdentry(object):
1297 class ipwdentry(object):
1298 """
1298 """
1299 ``ipwdentry`` objects encapsulate entries in the Unix user account and
1299 ``ipwdentry`` objects encapsulate entries in the Unix user account and
1300 password database.
1300 password database.
1301 """
1301 """
1302 def __init__(self, id):
1302 def __init__(self, id):
1303 self._id = id
1303 self._id = id
1304 self._entry = None
1304 self._entry = None
1305
1305
1306 def __eq__(self, other):
1306 def __eq__(self, other):
1307 return self.__class__ is other.__class__ and self._id == other._id
1307 return self.__class__ is other.__class__ and self._id == other._id
1308
1308
1309 def __ne__(self, other):
1309 def __ne__(self, other):
1310 return self.__class__ is not other.__class__ or self._id != other._id
1310 return self.__class__ is not other.__class__ or self._id != other._id
1311
1311
1312 def _getentry(self):
1312 def _getentry(self):
1313 if self._entry is None:
1313 if self._entry is None:
1314 if isinstance(self._id, basestring):
1314 if isinstance(self._id, basestring):
1315 self._entry = pwd.getpwnam(self._id)
1315 self._entry = pwd.getpwnam(self._id)
1316 else:
1316 else:
1317 self._entry = pwd.getpwuid(self._id)
1317 self._entry = pwd.getpwuid(self._id)
1318 return self._entry
1318 return self._entry
1319
1319
1320 def getname(self):
1320 def getname(self):
1321 if isinstance(self._id, basestring):
1321 if isinstance(self._id, basestring):
1322 return self._id
1322 return self._id
1323 else:
1323 else:
1324 return self._getentry().pw_name
1324 return self._getentry().pw_name
1325 name = property(getname, None, None, "User name")
1325 name = property(getname, None, None, "User name")
1326
1326
1327 def getpasswd(self):
1327 def getpasswd(self):
1328 return self._getentry().pw_passwd
1328 return self._getentry().pw_passwd
1329 passwd = property(getpasswd, None, None, "Password")
1329 passwd = property(getpasswd, None, None, "Password")
1330
1330
1331 def getuid(self):
1331 def getuid(self):
1332 if isinstance(self._id, basestring):
1332 if isinstance(self._id, basestring):
1333 return self._getentry().pw_uid
1333 return self._getentry().pw_uid
1334 else:
1334 else:
1335 return self._id
1335 return self._id
1336 uid = property(getuid, None, None, "User id")
1336 uid = property(getuid, None, None, "User id")
1337
1337
1338 def getgid(self):
1338 def getgid(self):
1339 return self._getentry().pw_gid
1339 return self._getentry().pw_gid
1340 gid = property(getgid, None, None, "Primary group id")
1340 gid = property(getgid, None, None, "Primary group id")
1341
1341
1342 def getgroup(self):
1342 def getgroup(self):
1343 return igrpentry(self.gid)
1343 return igrpentry(self.gid)
1344 group = property(getgroup, None, None, "Group")
1344 group = property(getgroup, None, None, "Group")
1345
1345
1346 def getgecos(self):
1346 def getgecos(self):
1347 return self._getentry().pw_gecos
1347 return self._getentry().pw_gecos
1348 gecos = property(getgecos, None, None, "Information (e.g. full user name)")
1348 gecos = property(getgecos, None, None, "Information (e.g. full user name)")
1349
1349
1350 def getdir(self):
1350 def getdir(self):
1351 return self._getentry().pw_dir
1351 return self._getentry().pw_dir
1352 dir = property(getdir, None, None, "$HOME directory")
1352 dir = property(getdir, None, None, "$HOME directory")
1353
1353
1354 def getshell(self):
1354 def getshell(self):
1355 return self._getentry().pw_shell
1355 return self._getentry().pw_shell
1356 shell = property(getshell, None, None, "Login shell")
1356 shell = property(getshell, None, None, "Login shell")
1357
1357
1358 def __xattrs__(self, mode="default"):
1358 def __xattrs__(self, mode="default"):
1359 return ("name", "passwd", "uid", "gid", "gecos", "dir", "shell")
1359 return ("name", "passwd", "uid", "gid", "gecos", "dir", "shell")
1360
1360
1361 def __repr__(self):
1361 def __repr__(self):
1362 return "%s.%s(%r)" % \
1362 return "%s.%s(%r)" % \
1363 (self.__class__.__module__, self.__class__.__name__, self._id)
1363 (self.__class__.__module__, self.__class__.__name__, self._id)
1364
1364
1365
1365
1366 class ipwd(Table):
1366 class ipwd(Table):
1367 """
1367 """
1368 List all entries in the Unix user account and password database.
1368 List all entries in the Unix user account and password database.
1369
1369
1370 Example:
1370 Example:
1371
1371
1372 >>> ipwd | isort("uid")
1372 >>> ipwd | isort("uid")
1373 """
1373 """
1374 def __iter__(self):
1374 def __iter__(self):
1375 for entry in pwd.getpwall():
1375 for entry in pwd.getpwall():
1376 yield ipwdentry(entry.pw_name)
1376 yield ipwdentry(entry.pw_name)
1377
1377
1378 def __xrepr__(self, mode="default"):
1378 def __xrepr__(self, mode="default"):
1379 if mode == "header" or mode == "footer" or mode == "cell":
1379 if mode == "header" or mode == "footer" or mode == "cell":
1380 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1380 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1381 else:
1381 else:
1382 yield (astyle.style_default, repr(self))
1382 yield (astyle.style_default, repr(self))
1383
1383
1384
1384
1385 class igrpentry(object):
1385 class igrpentry(object):
1386 """
1386 """
1387 ``igrpentry`` objects encapsulate entries in the Unix group database.
1387 ``igrpentry`` objects encapsulate entries in the Unix group database.
1388 """
1388 """
1389 def __init__(self, id):
1389 def __init__(self, id):
1390 self._id = id
1390 self._id = id
1391 self._entry = None
1391 self._entry = None
1392
1392
1393 def __eq__(self, other):
1393 def __eq__(self, other):
1394 return self.__class__ is other.__class__ and self._id == other._id
1394 return self.__class__ is other.__class__ and self._id == other._id
1395
1395
1396 def __ne__(self, other):
1396 def __ne__(self, other):
1397 return self.__class__ is not other.__class__ or self._id != other._id
1397 return self.__class__ is not other.__class__ or self._id != other._id
1398
1398
1399 def _getentry(self):
1399 def _getentry(self):
1400 if self._entry is None:
1400 if self._entry is None:
1401 if isinstance(self._id, basestring):
1401 if isinstance(self._id, basestring):
1402 self._entry = grp.getgrnam(self._id)
1402 self._entry = grp.getgrnam(self._id)
1403 else:
1403 else:
1404 self._entry = grp.getgrgid(self._id)
1404 self._entry = grp.getgrgid(self._id)
1405 return self._entry
1405 return self._entry
1406
1406
1407 def getname(self):
1407 def getname(self):
1408 if isinstance(self._id, basestring):
1408 if isinstance(self._id, basestring):
1409 return self._id
1409 return self._id
1410 else:
1410 else:
1411 return self._getentry().gr_name
1411 return self._getentry().gr_name
1412 name = property(getname, None, None, "Group name")
1412 name = property(getname, None, None, "Group name")
1413
1413
1414 def getpasswd(self):
1414 def getpasswd(self):
1415 return self._getentry().gr_passwd
1415 return self._getentry().gr_passwd
1416 passwd = property(getpasswd, None, None, "Password")
1416 passwd = property(getpasswd, None, None, "Password")
1417
1417
1418 def getgid(self):
1418 def getgid(self):
1419 if isinstance(self._id, basestring):
1419 if isinstance(self._id, basestring):
1420 return self._getentry().gr_gid
1420 return self._getentry().gr_gid
1421 else:
1421 else:
1422 return self._id
1422 return self._id
1423 gid = property(getgid, None, None, "Group id")
1423 gid = property(getgid, None, None, "Group id")
1424
1424
1425 def getmem(self):
1425 def getmem(self):
1426 return self._getentry().gr_mem
1426 return self._getentry().gr_mem
1427 mem = property(getmem, None, None, "Members")
1427 mem = property(getmem, None, None, "Members")
1428
1428
1429 def __xattrs__(self, mode="default"):
1429 def __xattrs__(self, mode="default"):
1430 return ("name", "passwd", "gid", "mem")
1430 return ("name", "passwd", "gid", "mem")
1431
1431
1432 def __xrepr__(self, mode="default"):
1432 def __xrepr__(self, mode="default"):
1433 if mode == "header" or mode == "footer" or mode == "cell":
1433 if mode == "header" or mode == "footer" or mode == "cell":
1434 yield (astyle.style_default, "group ")
1434 yield (astyle.style_default, "group ")
1435 try:
1435 try:
1436 yield (astyle.style_default, self.name)
1436 yield (astyle.style_default, self.name)
1437 except KeyError:
1437 except KeyError:
1438 if isinstance(self._id, basestring):
1438 if isinstance(self._id, basestring):
1439 yield (astyle.style_default, self.name_id)
1439 yield (astyle.style_default, self.name_id)
1440 else:
1440 else:
1441 yield (astyle.style_type_number, str(self._id))
1441 yield (astyle.style_type_number, str(self._id))
1442 else:
1442 else:
1443 yield (astyle.style_default, repr(self))
1443 yield (astyle.style_default, repr(self))
1444
1444
1445 def __iter__(self):
1445 def __iter__(self):
1446 for member in self.mem:
1446 for member in self.mem:
1447 yield ipwdentry(member)
1447 yield ipwdentry(member)
1448
1448
1449 def __repr__(self):
1449 def __repr__(self):
1450 return "%s.%s(%r)" % \
1450 return "%s.%s(%r)" % \
1451 (self.__class__.__module__, self.__class__.__name__, self._id)
1451 (self.__class__.__module__, self.__class__.__name__, self._id)
1452
1452
1453
1453
1454 class igrp(Table):
1454 class igrp(Table):
1455 """
1455 """
1456 This ``Table`` lists all entries in the Unix group database.
1456 This ``Table`` lists all entries in the Unix group database.
1457 """
1457 """
1458 def __iter__(self):
1458 def __iter__(self):
1459 for entry in grp.getgrall():
1459 for entry in grp.getgrall():
1460 yield igrpentry(entry.gr_name)
1460 yield igrpentry(entry.gr_name)
1461
1461
1462 def __xrepr__(self, mode="default"):
1462 def __xrepr__(self, mode="default"):
1463 if mode == "header" or mode == "footer":
1463 if mode == "header" or mode == "footer":
1464 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1464 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1465 else:
1465 else:
1466 yield (astyle.style_default, repr(self))
1466 yield (astyle.style_default, repr(self))
1467
1467
1468
1468
1469 class Fields(object):
1469 class Fields(object):
1470 def __init__(self, fieldnames, **fields):
1470 def __init__(self, fieldnames, **fields):
1471 self.__fieldnames = [upgradexattr(fieldname) for fieldname in fieldnames]
1471 self.__fieldnames = [upgradexattr(fieldname) for fieldname in fieldnames]
1472 for (key, value) in fields.iteritems():
1472 for (key, value) in fields.iteritems():
1473 setattr(self, key, value)
1473 setattr(self, key, value)
1474
1474
1475 def __xattrs__(self, mode="default"):
1475 def __xattrs__(self, mode="default"):
1476 return self.__fieldnames
1476 return self.__fieldnames
1477
1477
1478 def __xrepr__(self, mode="default"):
1478 def __xrepr__(self, mode="default"):
1479 yield (-1, False)
1479 yield (-1, False)
1480 if mode == "header" or mode == "cell":
1480 if mode == "header" or mode == "cell":
1481 yield (astyle.style_default, self.__class__.__name__)
1481 yield (astyle.style_default, self.__class__.__name__)
1482 yield (astyle.style_default, "(")
1482 yield (astyle.style_default, "(")
1483 for (i, f) in enumerate(self.__fieldnames):
1483 for (i, f) in enumerate(self.__fieldnames):
1484 if i:
1484 if i:
1485 yield (astyle.style_default, ", ")
1485 yield (astyle.style_default, ", ")
1486 yield (astyle.style_default, f.name())
1486 yield (astyle.style_default, f.name())
1487 yield (astyle.style_default, "=")
1487 yield (astyle.style_default, "=")
1488 for part in xrepr(getattr(self, f), "default"):
1488 for part in xrepr(getattr(self, f), "default"):
1489 yield part
1489 yield part
1490 yield (astyle.style_default, ")")
1490 yield (astyle.style_default, ")")
1491 elif mode == "footer":
1491 elif mode == "footer":
1492 yield (astyle.style_default, self.__class__.__name__)
1492 yield (astyle.style_default, self.__class__.__name__)
1493 yield (astyle.style_default, "(")
1493 yield (astyle.style_default, "(")
1494 for (i, f) in enumerate(self.__fieldnames):
1494 for (i, f) in enumerate(self.__fieldnames):
1495 if i:
1495 if i:
1496 yield (astyle.style_default, ", ")
1496 yield (astyle.style_default, ", ")
1497 yield (astyle.style_default, f.name())
1497 yield (astyle.style_default, f.name())
1498 yield (astyle.style_default, ")")
1498 yield (astyle.style_default, ")")
1499 else:
1499 else:
1500 yield (astyle.style_default, repr(self))
1500 yield (astyle.style_default, repr(self))
1501
1501
1502
1502
1503 class FieldTable(Table, list):
1503 class FieldTable(Table, list):
1504 def __init__(self, *fields):
1504 def __init__(self, *fields):
1505 Table.__init__(self)
1505 Table.__init__(self)
1506 list.__init__(self)
1506 list.__init__(self)
1507 self.fields = fields
1507 self.fields = fields
1508
1508
1509 def add(self, **fields):
1509 def add(self, **fields):
1510 self.append(Fields(self.fields, **fields))
1510 self.append(Fields(self.fields, **fields))
1511
1511
1512 def __xrepr__(self, mode="default"):
1512 def __xrepr__(self, mode="default"):
1513 yield (-1, False)
1513 yield (-1, False)
1514 if mode == "header" or mode == "footer":
1514 if mode == "header" or mode == "footer":
1515 yield (astyle.style_default, self.__class__.__name__)
1515 yield (astyle.style_default, self.__class__.__name__)
1516 yield (astyle.style_default, "(")
1516 yield (astyle.style_default, "(")
1517 for (i, f) in enumerate(self.__fieldnames):
1517 for (i, f) in enumerate(self.__fieldnames):
1518 if i:
1518 if i:
1519 yield (astyle.style_default, ", ")
1519 yield (astyle.style_default, ", ")
1520 yield (astyle.style_default, f)
1520 yield (astyle.style_default, f)
1521 yield (astyle.style_default, ")")
1521 yield (astyle.style_default, ")")
1522 else:
1522 else:
1523 yield (astyle.style_default, repr(self))
1523 yield (astyle.style_default, repr(self))
1524
1524
1525 def __repr__(self):
1525 def __repr__(self):
1526 return "<%s.%s object with fields=%r at 0x%x>" % \
1526 return "<%s.%s object with fields=%r at 0x%x>" % \
1527 (self.__class__.__module__, self.__class__.__name__,
1527 (self.__class__.__module__, self.__class__.__name__,
1528 ", ".join(map(repr, self.fields)), id(self))
1528 ", ".join(map(repr, self.fields)), id(self))
1529
1529
1530
1530
1531 class List(list):
1531 class List(list):
1532 def __xattrs__(self, mode="default"):
1532 def __xattrs__(self, mode="default"):
1533 return xrange(len(self))
1533 return xrange(len(self))
1534
1534
1535 def __xrepr__(self, mode="default"):
1535 def __xrepr__(self, mode="default"):
1536 yield (-1, False)
1536 yield (-1, False)
1537 if mode == "header" or mode == "cell" or mode == "footer" or mode == "default":
1537 if mode == "header" or mode == "cell" or mode == "footer" or mode == "default":
1538 yield (astyle.style_default, self.__class__.__name__)
1538 yield (astyle.style_default, self.__class__.__name__)
1539 yield (astyle.style_default, "(")
1539 yield (astyle.style_default, "(")
1540 for (i, item) in enumerate(self):
1540 for (i, item) in enumerate(self):
1541 if i:
1541 if i:
1542 yield (astyle.style_default, ", ")
1542 yield (astyle.style_default, ", ")
1543 for part in xrepr(item, "default"):
1543 for part in xrepr(item, "default"):
1544 yield part
1544 yield part
1545 yield (astyle.style_default, ")")
1545 yield (astyle.style_default, ")")
1546 else:
1546 else:
1547 yield (astyle.style_default, repr(self))
1547 yield (astyle.style_default, repr(self))
1548
1548
1549
1549
1550 class ienv(Table):
1550 class ienv(Table):
1551 """
1551 """
1552 List environment variables.
1552 List environment variables.
1553
1553
1554 Example:
1554 Example:
1555
1555
1556 >>> ienv
1556 >>> ienv
1557 """
1557 """
1558
1558
1559 def __iter__(self):
1559 def __iter__(self):
1560 fields = ("key", "value")
1560 fields = ("key", "value")
1561 for (key, value) in os.environ.iteritems():
1561 for (key, value) in os.environ.iteritems():
1562 yield Fields(fields, key=key, value=value)
1562 yield Fields(fields, key=key, value=value)
1563
1563
1564 def __xrepr__(self, mode="default"):
1564 def __xrepr__(self, mode="default"):
1565 if mode == "header" or mode == "cell":
1565 if mode == "header" or mode == "cell":
1566 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1566 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1567 else:
1567 else:
1568 yield (astyle.style_default, repr(self))
1568 yield (astyle.style_default, repr(self))
1569
1569
1570
1570
1571 class icsv(Pipe):
1571 class icsv(Pipe):
1572 """
1572 """
1573 This ``Pipe`` lists turn the input (with must be a pipe outputting lines
1573 This ``Pipe`` lists turn the input (with must be a pipe outputting lines
1574 or an ``ifile``) into lines of CVS columns.
1574 or an ``ifile``) into lines of CVS columns.
1575 """
1575 """
1576 def __init__(self, **csvargs):
1576 def __init__(self, **csvargs):
1577 """
1577 """
1578 Create an ``icsv`` object. ``cvsargs`` will be passed through as
1578 Create an ``icsv`` object. ``cvsargs`` will be passed through as
1579 keyword arguments to ``cvs.reader()``.
1579 keyword arguments to ``cvs.reader()``.
1580 """
1580 """
1581 self.csvargs = csvargs
1581 self.csvargs = csvargs
1582
1582
1583 def __iter__(self):
1583 def __iter__(self):
1584 input = self.input
1584 input = self.input
1585 if isinstance(input, ifile):
1585 if isinstance(input, ifile):
1586 input = input.open("rb")
1586 input = input.open("rb")
1587 reader = csv.reader(input, **self.csvargs)
1587 reader = csv.reader(input, **self.csvargs)
1588 for line in reader:
1588 for line in reader:
1589 yield List(line)
1589 yield List(line)
1590
1590
1591 def __xrepr__(self, mode="default"):
1591 def __xrepr__(self, mode="default"):
1592 yield (-1, False)
1592 yield (-1, False)
1593 if mode == "header" or mode == "footer":
1593 if mode == "header" or mode == "footer":
1594 input = getattr(self, "input", None)
1594 input = getattr(self, "input", None)
1595 if input is not None:
1595 if input is not None:
1596 for part in xrepr(input, mode):
1596 for part in xrepr(input, mode):
1597 yield part
1597 yield part
1598 yield (astyle.style_default, " | ")
1598 yield (astyle.style_default, " | ")
1599 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1599 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1600 for (i, (name, value)) in enumerate(self.csvargs.iteritems()):
1600 for (i, (name, value)) in enumerate(self.csvargs.iteritems()):
1601 if i:
1601 if i:
1602 yield (astyle.style_default, ", ")
1602 yield (astyle.style_default, ", ")
1603 yield (astyle.style_default, name)
1603 yield (astyle.style_default, name)
1604 yield (astyle.style_default, "=")
1604 yield (astyle.style_default, "=")
1605 for part in xrepr(value, "default"):
1605 for part in xrepr(value, "default"):
1606 yield part
1606 yield part
1607 yield (astyle.style_default, ")")
1607 yield (astyle.style_default, ")")
1608 else:
1608 else:
1609 yield (astyle.style_default, repr(self))
1609 yield (astyle.style_default, repr(self))
1610
1610
1611 def __repr__(self):
1611 def __repr__(self):
1612 args = ", ".join(["%s=%r" % item for item in self.csvargs.iteritems()])
1612 args = ", ".join(["%s=%r" % item for item in self.csvargs.iteritems()])
1613 return "<%s.%s %s at 0x%x>" % \
1613 return "<%s.%s %s at 0x%x>" % \
1614 (self.__class__.__module__, self.__class__.__name__, args, id(self))
1614 (self.__class__.__module__, self.__class__.__name__, args, id(self))
1615
1615
1616
1616
1617 class ix(Table):
1617 class ix(Table):
1618 """
1618 """
1619 Execute a system command and list its output as lines
1619 Execute a system command and list its output as lines
1620 (similar to ``os.popen()``).
1620 (similar to ``os.popen()``).
1621
1621
1622 Examples:
1622 Examples:
1623
1623
1624 >>> ix("ps x")
1624 >>> ix("ps x")
1625 >>> ix("find .") | ifile
1625 >>> ix("find .") | ifile
1626 """
1626 """
1627 def __init__(self, cmd):
1627 def __init__(self, cmd):
1628 self.cmd = cmd
1628 self.cmd = cmd
1629 self._pipeout = None
1629 self._pipeout = None
1630
1630
1631 def __iter__(self):
1631 def __iter__(self):
1632 (_pipein, self._pipeout) = os.popen4(self.cmd)
1632 (_pipein, self._pipeout) = os.popen4(self.cmd)
1633 _pipein.close()
1633 _pipein.close()
1634 for l in self._pipeout:
1634 for l in self._pipeout:
1635 yield l.rstrip("\r\n")
1635 yield l.rstrip("\r\n")
1636 self._pipeout.close()
1636 self._pipeout.close()
1637 self._pipeout = None
1637 self._pipeout = None
1638
1638
1639 def __del__(self):
1639 def __del__(self):
1640 if self._pipeout is not None and not self._pipeout.closed:
1640 if self._pipeout is not None and not self._pipeout.closed:
1641 self._pipeout.close()
1641 self._pipeout.close()
1642 self._pipeout = None
1642 self._pipeout = None
1643
1643
1644 def __xrepr__(self, mode="default"):
1644 def __xrepr__(self, mode="default"):
1645 if mode == "header" or mode == "footer":
1645 if mode == "header" or mode == "footer":
1646 yield (astyle.style_default,
1646 yield (astyle.style_default,
1647 "%s(%r)" % (self.__class__.__name__, self.cmd))
1647 "%s(%r)" % (self.__class__.__name__, self.cmd))
1648 else:
1648 else:
1649 yield (astyle.style_default, repr(self))
1649 yield (astyle.style_default, repr(self))
1650
1650
1651 def __repr__(self):
1651 def __repr__(self):
1652 return "%s.%s(%r)" % \
1652 return "%s.%s(%r)" % \
1653 (self.__class__.__module__, self.__class__.__name__, self.cmd)
1653 (self.__class__.__module__, self.__class__.__name__, self.cmd)
1654
1654
1655
1655
1656 class ifilter(Pipe):
1656 class ifilter(Pipe):
1657 """
1657 """
1658 Filter an input pipe. Only objects where an expression evaluates to true
1658 Filter an input pipe. Only objects where an expression evaluates to true
1659 (and doesn't raise an exception) are listed.
1659 (and doesn't raise an exception) are listed.
1660
1660
1661 Examples:
1661 Examples:
1662
1662
1663 >>> ils | ifilter("_.isfile() and size>1000")
1663 >>> ils | ifilter("_.isfile() and size>1000")
1664 >>> igrp | ifilter("len(mem)")
1664 >>> igrp | ifilter("len(mem)")
1665 >>> sys.modules | ifilter(lambda _:_.value is not None)
1665 >>> sys.modules | ifilter(lambda _:_.value is not None)
1666 """
1666 """
1667
1667
1668 def __init__(self, expr, globals=None, errors="raiseifallfail"):
1668 def __init__(self, expr, globals=None, errors="raiseifallfail"):
1669 """
1669 """
1670 Create an ``ifilter`` object. ``expr`` can be a callable or a string
1670 Create an ``ifilter`` object. ``expr`` can be a callable or a string
1671 containing an expression. ``globals`` will be used as the global
1671 containing an expression. ``globals`` will be used as the global
1672 namespace for calling string expressions (defaulting to IPython's
1672 namespace for calling string expressions (defaulting to IPython's
1673 user namespace). ``errors`` specifies how exception during evaluation
1673 user namespace). ``errors`` specifies how exception during evaluation
1674 of ``expr`` are handled:
1674 of ``expr`` are handled:
1675
1675
1676 * ``drop``: drop all items that have errors;
1676 * ``drop``: drop all items that have errors;
1677
1677
1678 * ``keep``: keep all items that have errors;
1678 * ``keep``: keep all items that have errors;
1679
1679
1680 * ``keeperror``: keep the exception of all items that have errors;
1680 * ``keeperror``: keep the exception of all items that have errors;
1681
1681
1682 * ``raise``: raise the exception;
1682 * ``raise``: raise the exception;
1683
1683
1684 * ``raiseifallfail``: raise the first exception if all items have errors;
1684 * ``raiseifallfail``: raise the first exception if all items have errors;
1685 otherwise drop those with errors (this is the default).
1685 otherwise drop those with errors (this is the default).
1686 """
1686 """
1687 self.expr = expr
1687 self.expr = expr
1688 self.globals = globals
1688 self.globals = globals
1689 self.errors = errors
1689 self.errors = errors
1690
1690
1691 def __iter__(self):
1691 def __iter__(self):
1692 if callable(self.expr):
1692 if callable(self.expr):
1693 test = self.expr
1693 test = self.expr
1694 else:
1694 else:
1695 g = getglobals(self.globals)
1695 g = getglobals(self.globals)
1696 expr = compile(self.expr, "ipipe-expression", "eval")
1696 expr = compile(self.expr, "ipipe-expression", "eval")
1697 def test(item):
1697 def test(item):
1698 return eval(expr, g, AttrNamespace(item))
1698 return eval(expr, g, AttrNamespace(item))
1699
1699
1700 ok = 0
1700 ok = 0
1701 exc_info = None
1701 exc_info = None
1702 for item in xiter(self.input):
1702 for item in xiter(self.input):
1703 try:
1703 try:
1704 if test(item):
1704 if test(item):
1705 yield item
1705 yield item
1706 ok += 1
1706 ok += 1
1707 except (KeyboardInterrupt, SystemExit):
1707 except (KeyboardInterrupt, SystemExit):
1708 raise
1708 raise
1709 except Exception, exc:
1709 except Exception, exc:
1710 if self.errors == "drop":
1710 if self.errors == "drop":
1711 pass # Ignore errors
1711 pass # Ignore errors
1712 elif self.errors == "keep":
1712 elif self.errors == "keep":
1713 yield item
1713 yield item
1714 elif self.errors == "keeperror":
1714 elif self.errors == "keeperror":
1715 yield exc
1715 yield exc
1716 elif self.errors == "raise":
1716 elif self.errors == "raise":
1717 raise
1717 raise
1718 elif self.errors == "raiseifallfail":
1718 elif self.errors == "raiseifallfail":
1719 if exc_info is None:
1719 if exc_info is None:
1720 exc_info = sys.exc_info()
1720 exc_info = sys.exc_info()
1721 if not ok and exc_info is not None:
1721 if not ok and exc_info is not None:
1722 raise exc_info[0], exc_info[1], exc_info[2]
1722 raise exc_info[0], exc_info[1], exc_info[2]
1723
1723
1724 def __xrepr__(self, mode="default"):
1724 def __xrepr__(self, mode="default"):
1725 if mode == "header" or mode == "footer":
1725 if mode == "header" or mode == "footer":
1726 input = getattr(self, "input", None)
1726 input = getattr(self, "input", None)
1727 if input is not None:
1727 if input is not None:
1728 for part in xrepr(input, mode):
1728 for part in xrepr(input, mode):
1729 yield part
1729 yield part
1730 yield (astyle.style_default, " | ")
1730 yield (astyle.style_default, " | ")
1731 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1731 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1732 for part in xrepr(self.expr, "default"):
1732 for part in xrepr(self.expr, "default"):
1733 yield part
1733 yield part
1734 yield (astyle.style_default, ")")
1734 yield (astyle.style_default, ")")
1735 else:
1735 else:
1736 yield (astyle.style_default, repr(self))
1736 yield (astyle.style_default, repr(self))
1737
1737
1738 def __repr__(self):
1738 def __repr__(self):
1739 return "<%s.%s expr=%r at 0x%x>" % \
1739 return "<%s.%s expr=%r at 0x%x>" % \
1740 (self.__class__.__module__, self.__class__.__name__,
1740 (self.__class__.__module__, self.__class__.__name__,
1741 self.expr, id(self))
1741 self.expr, id(self))
1742
1742
1743
1743
1744 class ieval(Pipe):
1744 class ieval(Pipe):
1745 """
1745 """
1746 Evaluate an expression for each object in the input pipe.
1746 Evaluate an expression for each object in the input pipe.
1747
1747
1748 Examples:
1748 Examples:
1749
1749
1750 >>> ils | ieval("_.abspath()")
1750 >>> ils | ieval("_.abspath()")
1751 >>> sys.path | ieval(ifile)
1751 >>> sys.path | ieval(ifile)
1752 """
1752 """
1753
1753
1754 def __init__(self, expr, globals=None, errors="raiseifallfail"):
1754 def __init__(self, expr, globals=None, errors="raiseifallfail"):
1755 """
1755 """
1756 Create an ``ieval`` object. ``expr`` can be a callable or a string
1756 Create an ``ieval`` object. ``expr`` can be a callable or a string
1757 containing an expression. For the meaning of ``globals`` and
1757 containing an expression. For the meaning of ``globals`` and
1758 ``errors`` see ``ifilter``.
1758 ``errors`` see ``ifilter``.
1759 """
1759 """
1760 self.expr = expr
1760 self.expr = expr
1761 self.globals = globals
1761 self.globals = globals
1762 self.errors = errors
1762 self.errors = errors
1763
1763
1764 def __iter__(self):
1764 def __iter__(self):
1765 if callable(self.expr):
1765 if callable(self.expr):
1766 do = self.expr
1766 do = self.expr
1767 else:
1767 else:
1768 g = getglobals(self.globals)
1768 g = getglobals(self.globals)
1769 expr = compile(self.expr, "ipipe-expression", "eval")
1769 expr = compile(self.expr, "ipipe-expression", "eval")
1770 def do(item):
1770 def do(item):
1771 return eval(expr, g, AttrNamespace(item))
1771 return eval(expr, g, AttrNamespace(item))
1772
1772
1773 ok = 0
1773 ok = 0
1774 exc_info = None
1774 exc_info = None
1775 for item in xiter(self.input):
1775 for item in xiter(self.input):
1776 try:
1776 try:
1777 yield do(item)
1777 yield do(item)
1778 except (KeyboardInterrupt, SystemExit):
1778 except (KeyboardInterrupt, SystemExit):
1779 raise
1779 raise
1780 except Exception, exc:
1780 except Exception, exc:
1781 if self.errors == "drop":
1781 if self.errors == "drop":
1782 pass # Ignore errors
1782 pass # Ignore errors
1783 elif self.errors == "keep":
1783 elif self.errors == "keep":
1784 yield item
1784 yield item
1785 elif self.errors == "keeperror":
1785 elif self.errors == "keeperror":
1786 yield exc
1786 yield exc
1787 elif self.errors == "raise":
1787 elif self.errors == "raise":
1788 raise
1788 raise
1789 elif self.errors == "raiseifallfail":
1789 elif self.errors == "raiseifallfail":
1790 if exc_info is None:
1790 if exc_info is None:
1791 exc_info = sys.exc_info()
1791 exc_info = sys.exc_info()
1792 if not ok and exc_info is not None:
1792 if not ok and exc_info is not None:
1793 raise exc_info[0], exc_info[1], exc_info[2]
1793 raise exc_info[0], exc_info[1], exc_info[2]
1794
1794
1795 def __xrepr__(self, mode="default"):
1795 def __xrepr__(self, mode="default"):
1796 if mode == "header" or mode == "footer":
1796 if mode == "header" or mode == "footer":
1797 input = getattr(self, "input", None)
1797 input = getattr(self, "input", None)
1798 if input is not None:
1798 if input is not None:
1799 for part in xrepr(input, mode):
1799 for part in xrepr(input, mode):
1800 yield part
1800 yield part
1801 yield (astyle.style_default, " | ")
1801 yield (astyle.style_default, " | ")
1802 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1802 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1803 for part in xrepr(self.expr, "default"):
1803 for part in xrepr(self.expr, "default"):
1804 yield part
1804 yield part
1805 yield (astyle.style_default, ")")
1805 yield (astyle.style_default, ")")
1806 else:
1806 else:
1807 yield (astyle.style_default, repr(self))
1807 yield (astyle.style_default, repr(self))
1808
1808
1809 def __repr__(self):
1809 def __repr__(self):
1810 return "<%s.%s expr=%r at 0x%x>" % \
1810 return "<%s.%s expr=%r at 0x%x>" % \
1811 (self.__class__.__module__, self.__class__.__name__,
1811 (self.__class__.__module__, self.__class__.__name__,
1812 self.expr, id(self))
1812 self.expr, id(self))
1813
1813
1814
1814
1815 class ienum(Pipe):
1815 class ienum(Pipe):
1816 """
1816 """
1817 Enumerate the input pipe (i.e. wrap each input object in an object
1817 Enumerate the input pipe (i.e. wrap each input object in an object
1818 with ``index`` and ``object`` attributes).
1818 with ``index`` and ``object`` attributes).
1819
1819
1820 Examples:
1820 Examples:
1821
1821
1822 >>> xrange(20) | ieval("_,_*_") | ienum | ifilter("index % 2 == 0") | ieval("object")
1822 >>> xrange(20) | ieval("_,_*_") | ienum | ifilter("index % 2 == 0") | ieval("object")
1823 """
1823 """
1824 def __iter__(self):
1824 def __iter__(self):
1825 fields = ("index", "object")
1825 fields = ("index", "object")
1826 for (index, object) in enumerate(xiter(self.input)):
1826 for (index, object) in enumerate(xiter(self.input)):
1827 yield Fields(fields, index=index, object=object)
1827 yield Fields(fields, index=index, object=object)
1828
1828
1829
1829
1830 class isort(Pipe):
1830 class isort(Pipe):
1831 """
1831 """
1832 Sorts the input pipe.
1832 Sorts the input pipe.
1833
1833
1834 Examples:
1834 Examples:
1835
1835
1836 >>> ils | isort("size")
1836 >>> ils | isort("size")
1837 >>> ils | isort("_.isdir(), _.lower()", reverse=True)
1837 >>> ils | isort("_.isdir(), _.lower()", reverse=True)
1838 """
1838 """
1839
1839
1840 def __init__(self, key=None, globals=None, reverse=False):
1840 def __init__(self, key=None, globals=None, reverse=False):
1841 """
1841 """
1842 Create an ``isort`` object. ``key`` can be a callable or a string
1842 Create an ``isort`` object. ``key`` can be a callable or a string
1843 containing an expression (or ``None`` in which case the items
1843 containing an expression (or ``None`` in which case the items
1844 themselves will be sorted). If ``reverse`` is true the sort order
1844 themselves will be sorted). If ``reverse`` is true the sort order
1845 will be reversed. For the meaning of ``globals`` see ``ifilter``.
1845 will be reversed. For the meaning of ``globals`` see ``ifilter``.
1846 """
1846 """
1847 self.key = key
1847 self.key = key
1848 self.globals = globals
1848 self.globals = globals
1849 self.reverse = reverse
1849 self.reverse = reverse
1850
1850
1851 def __iter__(self):
1851 def __iter__(self):
1852 if self.key is None:
1852 if self.key is None:
1853 items = sorted(xiter(self.input), reverse=self.reverse)
1853 items = sorted(xiter(self.input), reverse=self.reverse)
1854 elif callable(self.key):
1854 elif callable(self.key):
1855 items = sorted(xiter(self.input), key=self.key, reverse=self.reverse)
1855 items = sorted(xiter(self.input), key=self.key, reverse=self.reverse)
1856 else:
1856 else:
1857 g = getglobals(self.globals)
1857 g = getglobals(self.globals)
1858 key = compile(self.key, "ipipe-expression", "eval")
1858 key = compile(self.key, "ipipe-expression", "eval")
1859 def realkey(item):
1859 def realkey(item):
1860 return eval(key, g, AttrNamespace(item))
1860 return eval(key, g, AttrNamespace(item))
1861 items = sorted(xiter(self.input), key=realkey, reverse=self.reverse)
1861 items = sorted(xiter(self.input), key=realkey, reverse=self.reverse)
1862 for item in items:
1862 for item in items:
1863 yield item
1863 yield item
1864
1864
1865 def __xrepr__(self, mode="default"):
1865 def __xrepr__(self, mode="default"):
1866 if mode == "header" or mode == "footer":
1866 if mode == "header" or mode == "footer":
1867 input = getattr(self, "input", None)
1867 input = getattr(self, "input", None)
1868 if input is not None:
1868 if input is not None:
1869 for part in xrepr(input, mode):
1869 for part in xrepr(input, mode):
1870 yield part
1870 yield part
1871 yield (astyle.style_default, " | ")
1871 yield (astyle.style_default, " | ")
1872 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1872 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1873 for part in xrepr(self.key, "default"):
1873 for part in xrepr(self.key, "default"):
1874 yield part
1874 yield part
1875 if self.reverse:
1875 if self.reverse:
1876 yield (astyle.style_default, ", ")
1876 yield (astyle.style_default, ", ")
1877 for part in xrepr(True, "default"):
1877 for part in xrepr(True, "default"):
1878 yield part
1878 yield part
1879 yield (astyle.style_default, ")")
1879 yield (astyle.style_default, ")")
1880 else:
1880 else:
1881 yield (astyle.style_default, repr(self))
1881 yield (astyle.style_default, repr(self))
1882
1882
1883 def __repr__(self):
1883 def __repr__(self):
1884 return "<%s.%s key=%r reverse=%r at 0x%x>" % \
1884 return "<%s.%s key=%r reverse=%r at 0x%x>" % \
1885 (self.__class__.__module__, self.__class__.__name__,
1885 (self.__class__.__module__, self.__class__.__name__,
1886 self.key, self.reverse, id(self))
1886 self.key, self.reverse, id(self))
1887
1887
1888
1888
1889 tab = 3 # for expandtabs()
1889 tab = 3 # for expandtabs()
1890
1890
1891 def _format(field):
1891 def _format(field):
1892 if isinstance(field, str):
1892 if isinstance(field, str):
1893 text = repr(field.expandtabs(tab))[1:-1]
1893 text = repr(field.expandtabs(tab))[1:-1]
1894 elif isinstance(field, unicode):
1894 elif isinstance(field, unicode):
1895 text = repr(field.expandtabs(tab))[2:-1]
1895 text = repr(field.expandtabs(tab))[2:-1]
1896 elif isinstance(field, datetime.datetime):
1896 elif isinstance(field, datetime.datetime):
1897 # Don't use strftime() here, as this requires year >= 1900
1897 # Don't use strftime() here, as this requires year >= 1900
1898 text = "%04d-%02d-%02d %02d:%02d:%02d.%06d" % \
1898 text = "%04d-%02d-%02d %02d:%02d:%02d.%06d" % \
1899 (field.year, field.month, field.day,
1899 (field.year, field.month, field.day,
1900 field.hour, field.minute, field.second, field.microsecond)
1900 field.hour, field.minute, field.second, field.microsecond)
1901 elif isinstance(field, datetime.date):
1901 elif isinstance(field, datetime.date):
1902 text = "%04d-%02d-%02d" % (field.year, field.month, field.day)
1902 text = "%04d-%02d-%02d" % (field.year, field.month, field.day)
1903 else:
1903 else:
1904 text = repr(field)
1904 text = repr(field)
1905 return text
1905 return text
1906
1906
1907
1907
1908 class Display(object):
1908 class Display(object):
1909 class __metaclass__(type):
1909 class __metaclass__(type):
1910 def __ror__(self, input):
1910 def __ror__(self, input):
1911 return input | self()
1911 return input | self()
1912
1912
1913 def __ror__(self, input):
1913 def __ror__(self, input):
1914 self.input = input
1914 self.input = input
1915 return self
1915 return self
1916
1916
1917 def display(self):
1917 def display(self):
1918 pass
1918 pass
1919
1919
1920
1920
1921 class iless(Display):
1921 class iless(Display):
1922 cmd = "less --quit-if-one-screen --LONG-PROMPT --LINE-NUMBERS --chop-long-lines --shift=8 --RAW-CONTROL-CHARS"
1922 cmd = "less --quit-if-one-screen --LONG-PROMPT --LINE-NUMBERS --chop-long-lines --shift=8 --RAW-CONTROL-CHARS"
1923
1923
1924 def display(self):
1924 def display(self):
1925 try:
1925 try:
1926 pager = os.popen(self.cmd, "w")
1926 pager = os.popen(self.cmd, "w")
1927 try:
1927 try:
1928 for item in xiter(self.input):
1928 for item in xiter(self.input):
1929 first = False
1929 first = False
1930 for attr in xattrs(item, "default"):
1930 for attr in xattrs(item, "default"):
1931 if first:
1931 if first:
1932 first = False
1932 first = False
1933 else:
1933 else:
1934 pager.write(" ")
1934 pager.write(" ")
1935 attr = upgradexattr(attr)
1935 attr = upgradexattr(attr)
1936 if not isinstance(attr, SelfDescriptor):
1936 if not isinstance(attr, SelfDescriptor):
1937 pager.write(attr.name())
1937 pager.write(attr.name())
1938 pager.write("=")
1938 pager.write("=")
1939 pager.write(str(attr.value(item)))
1939 pager.write(str(attr.value(item)))
1940 pager.write("\n")
1940 pager.write("\n")
1941 finally:
1941 finally:
1942 pager.close()
1942 pager.close()
1943 except Exception, exc:
1943 except Exception, exc:
1944 print "%s: %s" % (exc.__class__.__name__, str(exc))
1944 print "%s: %s" % (exc.__class__.__name__, str(exc))
1945
1945
1946
1946
1947 def xformat(value, mode, maxlength):
1947 def xformat(value, mode, maxlength):
1948 align = None
1948 align = None
1949 full = True
1949 full = True
1950 width = 0
1950 width = 0
1951 text = astyle.Text()
1951 text = astyle.Text()
1952 for (style, part) in xrepr(value, mode):
1952 for (style, part) in xrepr(value, mode):
1953 # only consider the first result
1953 # only consider the first result
1954 if align is None:
1954 if align is None:
1955 if isinstance(style, int):
1955 if isinstance(style, int):
1956 # (style, text) really is (alignment, stop)
1956 # (style, text) really is (alignment, stop)
1957 align = style
1957 align = style
1958 full = part
1958 full = part
1959 continue
1959 continue
1960 else:
1960 else:
1961 align = -1
1961 align = -1
1962 full = True
1962 full = True
1963 if not isinstance(style, int):
1963 if not isinstance(style, int):
1964 text.append((style, part))
1964 text.append((style, part))
1965 width += len(part)
1965 width += len(part)
1966 if width >= maxlength and not full:
1966 if width >= maxlength and not full:
1967 text.append((astyle.style_ellisis, "..."))
1967 text.append((astyle.style_ellisis, "..."))
1968 width += 3
1968 width += 3
1969 break
1969 break
1970 if align is None: # default to left alignment
1970 if align is None: # default to left alignment
1971 align = -1
1971 align = -1
1972 return (align, width, text)
1972 return (align, width, text)
1973
1973
1974
1974
1975 class idump(Display):
1975 class idump(Display):
1976 # The approximate maximum length of a column entry
1976 # The approximate maximum length of a column entry
1977 maxattrlength = 200
1977 maxattrlength = 200
1978
1978
1979 # Style for column names
1979 # Style for column names
1980 style_header = astyle.Style.fromstr("white:black:bold")
1980 style_header = astyle.Style.fromstr("white:black:bold")
1981
1981
1982 def __init__(self, *attrs):
1982 def __init__(self, *attrs):
1983 self.attrs = [upgradexattr(attr) for attr in attrs]
1983 self.attrs = [upgradexattr(attr) for attr in attrs]
1984 self.headerpadchar = " "
1984 self.headerpadchar = " "
1985 self.headersepchar = "|"
1985 self.headersepchar = "|"
1986 self.datapadchar = " "
1986 self.datapadchar = " "
1987 self.datasepchar = "|"
1987 self.datasepchar = "|"
1988
1988
1989 def display(self):
1989 def display(self):
1990 stream = genutils.Term.cout
1990 stream = genutils.Term.cout
1991 allattrs = []
1991 allattrs = []
1992 attrset = set()
1992 attrset = set()
1993 colwidths = {}
1993 colwidths = {}
1994 rows = []
1994 rows = []
1995 for item in xiter(self.input):
1995 for item in xiter(self.input):
1996 row = {}
1996 row = {}
1997 attrs = self.attrs
1997 attrs = self.attrs
1998 if not attrs:
1998 if not attrs:
1999 attrs = xattrs(item, "default")
1999 attrs = xattrs(item, "default")
2000 for attr in attrs:
2000 for attr in attrs:
2001 if attr not in attrset:
2001 if attr not in attrset:
2002 allattrs.append(attr)
2002 allattrs.append(attr)
2003 attrset.add(attr)
2003 attrset.add(attr)
2004 colwidths[attr] = len(attr.name())
2004 colwidths[attr] = len(attr.name())
2005 try:
2005 try:
2006 value = attr.value(item)
2006 value = attr.value(item)
2007 except (KeyboardInterrupt, SystemExit):
2007 except (KeyboardInterrupt, SystemExit):
2008 raise
2008 raise
2009 except Exception, exc:
2009 except Exception, exc:
2010 value = exc
2010 value = exc
2011 (align, width, text) = xformat(value, "cell", self.maxattrlength)
2011 (align, width, text) = xformat(value, "cell", self.maxattrlength)
2012 colwidths[attr] = max(colwidths[attr], width)
2012 colwidths[attr] = max(colwidths[attr], width)
2013 # remember alignment, length and colored parts
2013 # remember alignment, length and colored parts
2014 row[attr] = (align, width, text)
2014 row[attr] = (align, width, text)
2015 rows.append(row)
2015 rows.append(row)
2016
2016
2017 stream.write("\n")
2017 stream.write("\n")
2018 for (i, attr) in enumerate(allattrs):
2018 for (i, attr) in enumerate(allattrs):
2019 attrname = attr.name()
2019 attrname = attr.name()
2020 self.style_header(attrname).write(stream)
2020 self.style_header(attrname).write(stream)
2021 spc = colwidths[attr] - len(attrname)
2021 spc = colwidths[attr] - len(attrname)
2022 if i < len(colwidths)-1:
2022 if i < len(colwidths)-1:
2023 stream.write(self.headerpadchar*spc)
2023 stream.write(self.headerpadchar*spc)
2024 stream.write(self.headersepchar)
2024 stream.write(self.headersepchar)
2025 stream.write("\n")
2025 stream.write("\n")
2026
2026
2027 for row in rows:
2027 for row in rows:
2028 for (i, attr) in enumerate(allattrs):
2028 for (i, attr) in enumerate(allattrs):
2029 (align, width, text) = row[attr]
2029 (align, width, text) = row[attr]
2030 spc = colwidths[attr] - width
2030 spc = colwidths[attr] - width
2031 if align == -1:
2031 if align == -1:
2032 text.write(stream)
2032 text.write(stream)
2033 if i < len(colwidths)-1:
2033 if i < len(colwidths)-1:
2034 stream.write(self.datapadchar*spc)
2034 stream.write(self.datapadchar*spc)
2035 elif align == 0:
2035 elif align == 0:
2036 spc = colwidths[attr] - width
2036 spc = colwidths[attr] - width
2037 spc1 = spc//2
2037 spc1 = spc//2
2038 spc2 = spc-spc1
2038 spc2 = spc-spc1
2039 stream.write(self.datapadchar*spc1)
2039 stream.write(self.datapadchar*spc1)
2040 text.write(stream)
2040 text.write(stream)
2041 if i < len(colwidths)-1:
2041 if i < len(colwidths)-1:
2042 stream.write(self.datapadchar*spc2)
2042 stream.write(self.datapadchar*spc2)
2043 else:
2043 else:
2044 stream.write(self.datapadchar*spc)
2044 stream.write(self.datapadchar*spc)
2045 text.write(stream)
2045 text.write(stream)
2046 if i < len(colwidths)-1:
2046 if i < len(colwidths)-1:
2047 stream.write(self.datasepchar)
2047 stream.write(self.datasepchar)
2048 stream.write("\n")
2048 stream.write("\n")
2049
2049
2050
2050
2051 class AttributeDetail(Table):
2051 class AttributeDetail(Table):
2052 """
2052 """
2053 ``AttributeDetail`` objects are use for displaying a detailed list of object
2053 ``AttributeDetail`` objects are use for displaying a detailed list of object
2054 attributes.
2054 attributes.
2055 """
2055 """
2056 def __init__(self, object, descriptor):
2056 def __init__(self, object, descriptor):
2057 self.object = object
2057 self.object = object
2058 self.descriptor = descriptor
2058 self.descriptor = descriptor
2059
2059
2060 def __iter__(self):
2060 def __iter__(self):
2061 return self.descriptor.iter(self.object)
2061 return self.descriptor.iter(self.object)
2062
2062
2063 def name(self):
2063 def name(self):
2064 return self.descriptor.name()
2064 return self.descriptor.name()
2065
2065
2066 def attrtype(self):
2066 def attrtype(self):
2067 return self.descriptor.attrtype(self.object)
2067 return self.descriptor.attrtype(self.object)
2068
2068
2069 def valuetype(self):
2069 def valuetype(self):
2070 return self.descriptor.valuetype(self.object)
2070 return self.descriptor.valuetype(self.object)
2071
2071
2072 def doc(self):
2072 def doc(self):
2073 return self.descriptor.doc(self.object)
2073 return self.descriptor.doc(self.object)
2074
2074
2075 def shortdoc(self):
2075 def shortdoc(self):
2076 return self.descriptor.shortdoc(self.object)
2076 return self.descriptor.shortdoc(self.object)
2077
2077
2078 def value(self):
2078 def value(self):
2079 return self.descriptor.value(self.object)
2079 return self.descriptor.value(self.object)
2080
2080
2081 def __xattrs__(self, mode="default"):
2081 def __xattrs__(self, mode="default"):
2082 attrs = ("name()", "attrtype()", "valuetype()", "value()", "shortdoc()")
2082 attrs = ("name()", "attrtype()", "valuetype()", "value()", "shortdoc()")
2083 if mode == "detail":
2083 if mode == "detail":
2084 attrs += ("doc()",)
2084 attrs += ("doc()",)
2085 return attrs
2085 return attrs
2086
2086
2087 def __xrepr__(self, mode="default"):
2087 def __xrepr__(self, mode="default"):
2088 yield (-1, True)
2088 yield (-1, True)
2089 valuetype = self.valuetype()
2089 valuetype = self.valuetype()
2090 if valuetype is not noitem:
2090 if valuetype is not noitem:
2091 for part in xrepr(valuetype):
2091 for part in xrepr(valuetype):
2092 yield part
2092 yield part
2093 yield (astyle.style_default, " ")
2093 yield (astyle.style_default, " ")
2094 yield (astyle.style_default, self.attrtype())
2094 yield (astyle.style_default, self.attrtype())
2095 yield (astyle.style_default, " ")
2095 yield (astyle.style_default, " ")
2096 yield (astyle.style_default, self.name())
2096 yield (astyle.style_default, self.name())
2097 yield (astyle.style_default, " of ")
2097 yield (astyle.style_default, " of ")
2098 for part in xrepr(self.object):
2098 for part in xrepr(self.object):
2099 yield part
2099 yield part
2100
2100
2101
2101
2102 try:
2102 try:
2103 from ibrowse import ibrowse
2103 from ibrowse import ibrowse
2104 except ImportError:
2104 except ImportError:
2105 # No curses (probably Windows)
2105 # No curses (probably Windows)
2106 try:
2106 try:
2107 from igrid import igrid
2107 from igrid import igrid
2108 except ImportError:
2108 except ImportError:
2109 # no wx eithevn do => use ``idump`` as the default display.
2109 # no wx eithevn do => use ``idump`` as the default display.
2110 defaultdisplay = idump
2110 defaultdisplay = idump
2111 else:
2111 else:
2112 defaultdisplay = igrid
2112 defaultdisplay = igrid
2113 __all__.append("igrid")
2113 __all__.append("igrid")
2114 else:
2114 else:
2115 defaultdisplay = ibrowse
2115 defaultdisplay = ibrowse
2116 __all__.append("ibrowse")
2116 __all__.append("ibrowse")
2117
2117
2118
2118
2119 # If we're running under IPython, install an IPython displayhook that
2119 # If we're running under IPython, install an IPython displayhook that
2120 # returns the object from Display.display(), else install a displayhook
2120 # returns the object from Display.display(), else install a displayhook
2121 # directly as sys.displayhook
2121 # directly as sys.displayhook
2122 api = None
2122 api = None
2123 if ipapi is not None:
2123 if ipapi is not None:
2124 try:
2124 try:
2125 api = ipapi.get()
2125 api = ipapi.get()
2126 except AttributeError:
2126 except AttributeError:
2127 pass
2127 pass
2128
2128
2129 if api is not None:
2129 if api is not None:
2130 def displayhook(self, obj):
2130 def displayhook(self, obj):
2131 if isinstance(obj, type) and issubclass(obj, Table):
2131 if isinstance(obj, type) and issubclass(obj, Table):
2132 obj = obj()
2132 obj = obj()
2133 if isinstance(obj, Table):
2133 if isinstance(obj, Table):
2134 obj = obj | defaultdisplay
2134 obj = obj | defaultdisplay
2135 if isinstance(obj, Display):
2135 if isinstance(obj, Display):
2136 return obj.display()
2136 return obj.display()
2137 else:
2137 else:
2138 raise ipapi.TryNext
2138 raise ipapi.TryNext
2139 api.set_hook("result_display", displayhook)
2139 api.set_hook("result_display", displayhook)
2140 else:
2140 else:
2141 def installdisplayhook():
2141 def installdisplayhook():
2142 _originalhook = sys.displayhook
2142 _originalhook = sys.displayhook
2143 def displayhook(obj):
2143 def displayhook(obj):
2144 if isinstance(obj, type) and issubclass(obj, Table):
2144 if isinstance(obj, type) and issubclass(obj, Table):
2145 obj = obj()
2145 obj = obj()
2146 if isinstance(obj, Table):
2146 if isinstance(obj, Table):
2147 obj = obj | defaultdisplay
2147 obj = obj | defaultdisplay
2148 if isinstance(obj, Display):
2148 if isinstance(obj, Display):
2149 return obj.display()
2149 return obj.display()
2150 else:
2150 else:
2151 _originalhook(obj)
2151 _originalhook(obj)
2152 sys.displayhook = displayhook
2152 sys.displayhook = displayhook
2153 installdisplayhook()
2153 installdisplayhook()
@@ -1,6531 +1,6536 b''
1 2007-04-12 Walter Doerwald <walter@livinglogic.de>
2
3 * IPython/Extensions/ipipe.py: (ils) Directoy listings are now
4 sorted (case sensitive with files and dirs mixed).
5
1 2007-04-10 Fernando Perez <Fernando.Perez@colorado.edu>
6 2007-04-10 Fernando Perez <Fernando.Perez@colorado.edu>
2
7
3 * IPython/Release.py (version): Open trunk for 0.8.1 development.
8 * IPython/Release.py (version): Open trunk for 0.8.1 development.
4
9
5 2007-04-10 *** Released version 0.8.0
10 2007-04-10 *** Released version 0.8.0
6
11
7 2007-04-07 Fernando Perez <Fernando.Perez@colorado.edu>
12 2007-04-07 Fernando Perez <Fernando.Perez@colorado.edu>
8
13
9 * Tag 0.8.0 for release.
14 * Tag 0.8.0 for release.
10
15
11 * IPython/iplib.py (reloadhist): add API function to cleanly
16 * IPython/iplib.py (reloadhist): add API function to cleanly
12 reload the readline history, which was growing inappropriately on
17 reload the readline history, which was growing inappropriately on
13 every %run call.
18 every %run call.
14
19
15 * win32_manual_post_install.py (run): apply last part of Nicolas
20 * win32_manual_post_install.py (run): apply last part of Nicolas
16 Pernetty's patch (I'd accidentally applied it in a different
21 Pernetty's patch (I'd accidentally applied it in a different
17 directory and this particular file didn't get patched).
22 directory and this particular file didn't get patched).
18
23
19 2007-04-05 Fernando Perez <Fernando.Perez@colorado.edu>
24 2007-04-05 Fernando Perez <Fernando.Perez@colorado.edu>
20
25
21 * IPython/Shell.py (MAIN_THREAD_ID): get rid of my stupid hack to
26 * IPython/Shell.py (MAIN_THREAD_ID): get rid of my stupid hack to
22 find the main thread id and use the proper API call. Thanks to
27 find the main thread id and use the proper API call. Thanks to
23 Stefan for the fix.
28 Stefan for the fix.
24
29
25 * test/test_prefilter.py (esc_handler_tests): udpate one of Dan's
30 * test/test_prefilter.py (esc_handler_tests): udpate one of Dan's
26 unit tests to reflect fixed ticket #52, and add more tests sent by
31 unit tests to reflect fixed ticket #52, and add more tests sent by
27 him.
32 him.
28
33
29 * IPython/iplib.py (raw_input): restore the readline completer
34 * IPython/iplib.py (raw_input): restore the readline completer
30 state on every input, in case third-party code messed it up.
35 state on every input, in case third-party code messed it up.
31 (_prefilter): revert recent addition of early-escape checks which
36 (_prefilter): revert recent addition of early-escape checks which
32 prevent many valid alias calls from working.
37 prevent many valid alias calls from working.
33
38
34 * IPython/Shell.py (MTInteractiveShell.runcode): add a tracking
39 * IPython/Shell.py (MTInteractiveShell.runcode): add a tracking
35 flag for sigint handler so we don't run a full signal() call on
40 flag for sigint handler so we don't run a full signal() call on
36 each runcode access.
41 each runcode access.
37
42
38 * IPython/Magic.py (magic_whos): small improvement to diagnostic
43 * IPython/Magic.py (magic_whos): small improvement to diagnostic
39 message.
44 message.
40
45
41 2007-04-04 Fernando Perez <Fernando.Perez@colorado.edu>
46 2007-04-04 Fernando Perez <Fernando.Perez@colorado.edu>
42
47
43 * IPython/Shell.py (sigint_handler): I *THINK* I finally got
48 * IPython/Shell.py (sigint_handler): I *THINK* I finally got
44 asynchronous exceptions working, i.e., Ctrl-C can actually
49 asynchronous exceptions working, i.e., Ctrl-C can actually
45 interrupt long-running code in the multithreaded shells.
50 interrupt long-running code in the multithreaded shells.
46
51
47 This is using Tomer Filiba's great ctypes-based trick:
52 This is using Tomer Filiba's great ctypes-based trick:
48 http://sebulba.wikispaces.com/recipe+thread2. I'd already tried
53 http://sebulba.wikispaces.com/recipe+thread2. I'd already tried
49 this in the past, but hadn't been able to make it work before. So
54 this in the past, but hadn't been able to make it work before. So
50 far it looks like it's actually running, but this needs more
55 far it looks like it's actually running, but this needs more
51 testing. If it really works, I'll be *very* happy, and we'll owe
56 testing. If it really works, I'll be *very* happy, and we'll owe
52 a huge thank you to Tomer. My current implementation is ugly,
57 a huge thank you to Tomer. My current implementation is ugly,
53 hackish and uses nasty globals, but I don't want to try and clean
58 hackish and uses nasty globals, but I don't want to try and clean
54 anything up until we know if it actually works.
59 anything up until we know if it actually works.
55
60
56 NOTE: this feature needs ctypes to work. ctypes is included in
61 NOTE: this feature needs ctypes to work. ctypes is included in
57 Python2.5, but 2.4 users will need to manually install it. This
62 Python2.5, but 2.4 users will need to manually install it. This
58 feature makes multi-threaded shells so much more usable that it's
63 feature makes multi-threaded shells so much more usable that it's
59 a minor price to pay (ctypes is very easy to install, already a
64 a minor price to pay (ctypes is very easy to install, already a
60 requirement for win32 and available in major linux distros).
65 requirement for win32 and available in major linux distros).
61
66
62 2007-04-04 Ville Vainio <vivainio@gmail.com>
67 2007-04-04 Ville Vainio <vivainio@gmail.com>
63
68
64 * Extensions/ipy_completers.py, ipy_stock_completers.py:
69 * Extensions/ipy_completers.py, ipy_stock_completers.py:
65 Moved implementations of 'bundled' completers to ipy_completers.py,
70 Moved implementations of 'bundled' completers to ipy_completers.py,
66 they are only enabled in ipy_stock_completers.py.
71 they are only enabled in ipy_stock_completers.py.
67
72
68 2007-04-04 Fernando Perez <Fernando.Perez@colorado.edu>
73 2007-04-04 Fernando Perez <Fernando.Perez@colorado.edu>
69
74
70 * IPython/PyColorize.py (Parser.format2): Fix identation of
75 * IPython/PyColorize.py (Parser.format2): Fix identation of
71 colorzied output and return early if color scheme is NoColor, to
76 colorzied output and return early if color scheme is NoColor, to
72 avoid unnecessary and expensive tokenization. Closes #131.
77 avoid unnecessary and expensive tokenization. Closes #131.
73
78
74 2007-04-03 Fernando Perez <Fernando.Perez@colorado.edu>
79 2007-04-03 Fernando Perez <Fernando.Perez@colorado.edu>
75
80
76 * IPython/Debugger.py: disable the use of pydb version 1.17. It
81 * IPython/Debugger.py: disable the use of pydb version 1.17. It
77 has a critical bug (a missing import that makes post-mortem not
82 has a critical bug (a missing import that makes post-mortem not
78 work at all). Unfortunately as of this time, this is the version
83 work at all). Unfortunately as of this time, this is the version
79 shipped with Ubuntu Edgy, so quite a few people have this one. I
84 shipped with Ubuntu Edgy, so quite a few people have this one. I
80 hope Edgy will update to a more recent package.
85 hope Edgy will update to a more recent package.
81
86
82 2007-04-02 Fernando Perez <Fernando.Perez@colorado.edu>
87 2007-04-02 Fernando Perez <Fernando.Perez@colorado.edu>
83
88
84 * IPython/iplib.py (_prefilter): close #52, second part of a patch
89 * IPython/iplib.py (_prefilter): close #52, second part of a patch
85 set by Stefan (only the first part had been applied before).
90 set by Stefan (only the first part had been applied before).
86
91
87 * IPython/Extensions/ipy_stock_completers.py (module_completer):
92 * IPython/Extensions/ipy_stock_completers.py (module_completer):
88 remove usage of the dangerous pkgutil.walk_packages(). See
93 remove usage of the dangerous pkgutil.walk_packages(). See
89 details in comments left in the code.
94 details in comments left in the code.
90
95
91 * IPython/Magic.py (magic_whos): add support for numpy arrays
96 * IPython/Magic.py (magic_whos): add support for numpy arrays
92 similar to what we had for Numeric.
97 similar to what we had for Numeric.
93
98
94 * IPython/completer.py (IPCompleter.complete): extend the
99 * IPython/completer.py (IPCompleter.complete): extend the
95 complete() call API to support completions by other mechanisms
100 complete() call API to support completions by other mechanisms
96 than readline. Closes #109.
101 than readline. Closes #109.
97
102
98 * IPython/iplib.py (safe_execfile): add a safeguard under Win32 to
103 * IPython/iplib.py (safe_execfile): add a safeguard under Win32 to
99 protect against a bug in Python's execfile(). Closes #123.
104 protect against a bug in Python's execfile(). Closes #123.
100
105
101 2007-04-01 Fernando Perez <Fernando.Perez@colorado.edu>
106 2007-04-01 Fernando Perez <Fernando.Perez@colorado.edu>
102
107
103 * IPython/iplib.py (split_user_input): ensure that when splitting
108 * IPython/iplib.py (split_user_input): ensure that when splitting
104 user input, the part that can be treated as a python name is pure
109 user input, the part that can be treated as a python name is pure
105 ascii (Python identifiers MUST be pure ascii). Part of the
110 ascii (Python identifiers MUST be pure ascii). Part of the
106 ongoing Unicode support work.
111 ongoing Unicode support work.
107
112
108 * IPython/Prompts.py (prompt_specials_color): Add \N for the
113 * IPython/Prompts.py (prompt_specials_color): Add \N for the
109 actual prompt number, without any coloring. This allows users to
114 actual prompt number, without any coloring. This allows users to
110 produce numbered prompts with their own colors. Added after a
115 produce numbered prompts with their own colors. Added after a
111 report/request by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
116 report/request by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
112
117
113 2007-03-31 Walter Doerwald <walter@livinglogic.de>
118 2007-03-31 Walter Doerwald <walter@livinglogic.de>
114
119
115 * IPython/Extensions/igrid.py: Map the return key
120 * IPython/Extensions/igrid.py: Map the return key
116 to enter() and shift-return to enterattr().
121 to enter() and shift-return to enterattr().
117
122
118 2007-03-30 Fernando Perez <Fernando.Perez@colorado.edu>
123 2007-03-30 Fernando Perez <Fernando.Perez@colorado.edu>
119
124
120 * IPython/Magic.py (magic_psearch): add unicode support by
125 * IPython/Magic.py (magic_psearch): add unicode support by
121 encoding to ascii the input, since this routine also only deals
126 encoding to ascii the input, since this routine also only deals
122 with valid Python names. Fixes a bug reported by Stefan.
127 with valid Python names. Fixes a bug reported by Stefan.
123
128
124 2007-03-29 Fernando Perez <Fernando.Perez@colorado.edu>
129 2007-03-29 Fernando Perez <Fernando.Perez@colorado.edu>
125
130
126 * IPython/Magic.py (_inspect): convert unicode input into ascii
131 * IPython/Magic.py (_inspect): convert unicode input into ascii
127 before trying to evaluate it as a Python identifier. This fixes a
132 before trying to evaluate it as a Python identifier. This fixes a
128 problem that the new unicode support had introduced when analyzing
133 problem that the new unicode support had introduced when analyzing
129 long definition lines for functions.
134 long definition lines for functions.
130
135
131 2007-03-24 Walter Doerwald <walter@livinglogic.de>
136 2007-03-24 Walter Doerwald <walter@livinglogic.de>
132
137
133 * IPython/Extensions/igrid.py: Fix picking. Using
138 * IPython/Extensions/igrid.py: Fix picking. Using
134 igrid with wxPython 2.6 and -wthread should work now.
139 igrid with wxPython 2.6 and -wthread should work now.
135 igrid.display() simply tries to create a frame without
140 igrid.display() simply tries to create a frame without
136 an application. Only if this fails an application is created.
141 an application. Only if this fails an application is created.
137
142
138 2007-03-23 Walter Doerwald <walter@livinglogic.de>
143 2007-03-23 Walter Doerwald <walter@livinglogic.de>
139
144
140 * IPython/Extensions/path.py: Updated to version 2.2.
145 * IPython/Extensions/path.py: Updated to version 2.2.
141
146
142 2007-03-23 Ville Vainio <vivainio@gmail.com>
147 2007-03-23 Ville Vainio <vivainio@gmail.com>
143
148
144 * iplib.py: recursive alias expansion now works better, so that
149 * iplib.py: recursive alias expansion now works better, so that
145 cases like 'top' -> 'd:/cygwin/top' -> 'ls :/cygwin/top'
150 cases like 'top' -> 'd:/cygwin/top' -> 'ls :/cygwin/top'
146 doesn't trip up the process, if 'd' has been aliased to 'ls'.
151 doesn't trip up the process, if 'd' has been aliased to 'ls'.
147
152
148 * Extensions/ipy_gnuglobal.py added, provides %global magic
153 * Extensions/ipy_gnuglobal.py added, provides %global magic
149 for users of http://www.gnu.org/software/global
154 for users of http://www.gnu.org/software/global
150
155
151 * iplib.py: '!command /?' now doesn't invoke IPython's help system.
156 * iplib.py: '!command /?' now doesn't invoke IPython's help system.
152 Closes #52. Patch by Stefan van der Walt.
157 Closes #52. Patch by Stefan van der Walt.
153
158
154 2007-03-23 Fernando Perez <Fernando.Perez@colorado.edu>
159 2007-03-23 Fernando Perez <Fernando.Perez@colorado.edu>
155
160
156 * IPython/FakeModule.py (FakeModule.__init__): Small fix to
161 * IPython/FakeModule.py (FakeModule.__init__): Small fix to
157 respect the __file__ attribute when using %run. Thanks to a bug
162 respect the __file__ attribute when using %run. Thanks to a bug
158 report by Sebastian Rooks <sebastian.rooks-AT-free.fr>.
163 report by Sebastian Rooks <sebastian.rooks-AT-free.fr>.
159
164
160 2007-03-22 Fernando Perez <Fernando.Perez@colorado.edu>
165 2007-03-22 Fernando Perez <Fernando.Perez@colorado.edu>
161
166
162 * IPython/iplib.py (raw_input): Fix mishandling of unicode at
167 * IPython/iplib.py (raw_input): Fix mishandling of unicode at
163 input. Patch sent by Stefan.
168 input. Patch sent by Stefan.
164
169
165 2007-03-20 JοΏ½rgen Stenarson <jorgen.stenarson@bostream.nu>
170 2007-03-20 JοΏ½rgen Stenarson <jorgen.stenarson@bostream.nu>
166 * IPython/Extensions/ipy_stock_completer.py
171 * IPython/Extensions/ipy_stock_completer.py
167 shlex_split, fix bug in shlex_split. len function
172 shlex_split, fix bug in shlex_split. len function
168 call was missing an if statement. Caused shlex_split to
173 call was missing an if statement. Caused shlex_split to
169 sometimes return "" as last element.
174 sometimes return "" as last element.
170
175
171 2007-03-18 Fernando Perez <Fernando.Perez@colorado.edu>
176 2007-03-18 Fernando Perez <Fernando.Perez@colorado.edu>
172
177
173 * IPython/completer.py
178 * IPython/completer.py
174 (IPCompleter.file_matches.single_dir_expand): fix a problem
179 (IPCompleter.file_matches.single_dir_expand): fix a problem
175 reported by Stefan, where directories containign a single subdir
180 reported by Stefan, where directories containign a single subdir
176 would be completed too early.
181 would be completed too early.
177
182
178 * IPython/Shell.py (_load_pylab): Make the execution of 'from
183 * IPython/Shell.py (_load_pylab): Make the execution of 'from
179 pylab import *' when -pylab is given be optional. A new flag,
184 pylab import *' when -pylab is given be optional. A new flag,
180 pylab_import_all controls this behavior, the default is True for
185 pylab_import_all controls this behavior, the default is True for
181 backwards compatibility.
186 backwards compatibility.
182
187
183 * IPython/ultraTB.py (_formatTracebackLines): Added (slightly
188 * IPython/ultraTB.py (_formatTracebackLines): Added (slightly
184 modified) R. Bernstein's patch for fully syntax highlighted
189 modified) R. Bernstein's patch for fully syntax highlighted
185 tracebacks. The functionality is also available under ultraTB for
190 tracebacks. The functionality is also available under ultraTB for
186 non-ipython users (someone using ultraTB but outside an ipython
191 non-ipython users (someone using ultraTB but outside an ipython
187 session). They can select the color scheme by setting the
192 session). They can select the color scheme by setting the
188 module-level global DEFAULT_SCHEME. The highlight functionality
193 module-level global DEFAULT_SCHEME. The highlight functionality
189 also works when debugging.
194 also works when debugging.
190
195
191 * IPython/genutils.py (IOStream.close): small patch by
196 * IPython/genutils.py (IOStream.close): small patch by
192 R. Bernstein for improved pydb support.
197 R. Bernstein for improved pydb support.
193
198
194 * IPython/Debugger.py (Pdb.format_stack_entry): Added patch by
199 * IPython/Debugger.py (Pdb.format_stack_entry): Added patch by
195 DaveS <davls@telus.net> to improve support of debugging under
200 DaveS <davls@telus.net> to improve support of debugging under
196 NTEmacs, including improved pydb behavior.
201 NTEmacs, including improved pydb behavior.
197
202
198 * IPython/Magic.py (magic_prun): Fix saving of profile info for
203 * IPython/Magic.py (magic_prun): Fix saving of profile info for
199 Python 2.5, where the stats object API changed a little. Thanks
204 Python 2.5, where the stats object API changed a little. Thanks
200 to a bug report by Paul Smith <paul.smith-AT-catugmt.com>.
205 to a bug report by Paul Smith <paul.smith-AT-catugmt.com>.
201
206
202 * IPython/ColorANSI.py (InputTermColors.Normal): applied Nicolas
207 * IPython/ColorANSI.py (InputTermColors.Normal): applied Nicolas
203 Pernetty's patch to improve support for (X)Emacs under Win32.
208 Pernetty's patch to improve support for (X)Emacs under Win32.
204
209
205 2007-03-17 Fernando Perez <Fernando.Perez@colorado.edu>
210 2007-03-17 Fernando Perez <Fernando.Perez@colorado.edu>
206
211
207 * IPython/Shell.py (hijack_wx): ipmort WX with current semantics
212 * IPython/Shell.py (hijack_wx): ipmort WX with current semantics
208 to quiet a deprecation warning that fires with Wx 2.8. Thanks to
213 to quiet a deprecation warning that fires with Wx 2.8. Thanks to
209 a report by Nik Tautenhahn.
214 a report by Nik Tautenhahn.
210
215
211 2007-03-16 Walter Doerwald <walter@livinglogic.de>
216 2007-03-16 Walter Doerwald <walter@livinglogic.de>
212
217
213 * setup.py: Add the igrid help files to the list of data files
218 * setup.py: Add the igrid help files to the list of data files
214 to be installed alongside igrid.
219 to be installed alongside igrid.
215 * IPython/Extensions/igrid.py: (Patch by Nik Tautenhahn)
220 * IPython/Extensions/igrid.py: (Patch by Nik Tautenhahn)
216 Show the input object of the igrid browser as the window tile.
221 Show the input object of the igrid browser as the window tile.
217 Show the object the cursor is on in the statusbar.
222 Show the object the cursor is on in the statusbar.
218
223
219 2007-03-15 Ville Vainio <vivainio@gmail.com>
224 2007-03-15 Ville Vainio <vivainio@gmail.com>
220
225
221 * Extensions/ipy_stock_completers.py: Fixed exception
226 * Extensions/ipy_stock_completers.py: Fixed exception
222 on mismatching quotes in %run completer. Patch by
227 on mismatching quotes in %run completer. Patch by
223 JοΏ½rgen Stenarson. Closes #127.
228 JοΏ½rgen Stenarson. Closes #127.
224
229
225 2007-03-14 Ville Vainio <vivainio@gmail.com>
230 2007-03-14 Ville Vainio <vivainio@gmail.com>
226
231
227 * Extensions/ext_rehashdir.py: Do not do auto_alias
232 * Extensions/ext_rehashdir.py: Do not do auto_alias
228 in %rehashdir, it clobbers %store'd aliases.
233 in %rehashdir, it clobbers %store'd aliases.
229
234
230 * UserConfig/ipy_profile_sh.py: envpersist.py extension
235 * UserConfig/ipy_profile_sh.py: envpersist.py extension
231 (beefed up %env) imported for sh profile.
236 (beefed up %env) imported for sh profile.
232
237
233 2007-03-10 Walter Doerwald <walter@livinglogic.de>
238 2007-03-10 Walter Doerwald <walter@livinglogic.de>
234
239
235 * IPython/Extensions/ipipe.py: Prefer ibrowse over igrid
240 * IPython/Extensions/ipipe.py: Prefer ibrowse over igrid
236 as the default browser.
241 as the default browser.
237 * IPython/Extensions/igrid.py: Make a few igrid attributes private.
242 * IPython/Extensions/igrid.py: Make a few igrid attributes private.
238 As igrid displays all attributes it ever encounters, fetch() (which has
243 As igrid displays all attributes it ever encounters, fetch() (which has
239 been renamed to _fetch()) doesn't have to recalculate the display attributes
244 been renamed to _fetch()) doesn't have to recalculate the display attributes
240 every time a new item is fetched. This should speed up scrolling.
245 every time a new item is fetched. This should speed up scrolling.
241
246
242 2007-03-10 Fernando Perez <Fernando.Perez@colorado.edu>
247 2007-03-10 Fernando Perez <Fernando.Perez@colorado.edu>
243
248
244 * IPython/iplib.py (InteractiveShell.__init__): fix for Alex
249 * IPython/iplib.py (InteractiveShell.__init__): fix for Alex
245 Schmolck's recently reported tab-completion bug (my previous one
250 Schmolck's recently reported tab-completion bug (my previous one
246 had a problem). Patch by Dan Milstein <danmil-AT-comcast.net>.
251 had a problem). Patch by Dan Milstein <danmil-AT-comcast.net>.
247
252
248 2007-03-09 Walter Doerwald <walter@livinglogic.de>
253 2007-03-09 Walter Doerwald <walter@livinglogic.de>
249
254
250 * IPython/Extensions/igrid.py: Patch by Nik Tautenhahn:
255 * IPython/Extensions/igrid.py: Patch by Nik Tautenhahn:
251 Close help window if exiting igrid.
256 Close help window if exiting igrid.
252
257
253 2007-03-02 JοΏ½rgen Stenarson <jorgen.stenarson@bostream.nu>
258 2007-03-02 JοΏ½rgen Stenarson <jorgen.stenarson@bostream.nu>
254
259
255 * IPython/Extensions/ipy_defaults.py: Check if readline is available
260 * IPython/Extensions/ipy_defaults.py: Check if readline is available
256 before calling functions from readline.
261 before calling functions from readline.
257
262
258 2007-03-02 Walter Doerwald <walter@livinglogic.de>
263 2007-03-02 Walter Doerwald <walter@livinglogic.de>
259
264
260 * IPython/Extensions/igrid.py: Add Nik Tautenhahns igrid extension.
265 * IPython/Extensions/igrid.py: Add Nik Tautenhahns igrid extension.
261 igrid is a wxPython-based display object for ipipe. If your system has
266 igrid is a wxPython-based display object for ipipe. If your system has
262 wx installed igrid will be the default display. Without wx ipipe falls
267 wx installed igrid will be the default display. Without wx ipipe falls
263 back to ibrowse (which needs curses). If no curses is installed ipipe
268 back to ibrowse (which needs curses). If no curses is installed ipipe
264 falls back to idump.
269 falls back to idump.
265
270
266 2007-03-01 Fernando Perez <Fernando.Perez@colorado.edu>
271 2007-03-01 Fernando Perez <Fernando.Perez@colorado.edu>
267
272
268 * IPython/iplib.py (split_user_inputBROKEN): temporarily disable
273 * IPython/iplib.py (split_user_inputBROKEN): temporarily disable
269 my changes from yesterday, they introduced bugs. Will reactivate
274 my changes from yesterday, they introduced bugs. Will reactivate
270 once I get a correct solution, which will be much easier thanks to
275 once I get a correct solution, which will be much easier thanks to
271 Dan Milstein's new prefilter test suite.
276 Dan Milstein's new prefilter test suite.
272
277
273 2007-02-28 Fernando Perez <Fernando.Perez@colorado.edu>
278 2007-02-28 Fernando Perez <Fernando.Perez@colorado.edu>
274
279
275 * IPython/iplib.py (split_user_input): fix input splitting so we
280 * IPython/iplib.py (split_user_input): fix input splitting so we
276 don't attempt attribute accesses on things that can't possibly be
281 don't attempt attribute accesses on things that can't possibly be
277 valid Python attributes. After a bug report by Alex Schmolck.
282 valid Python attributes. After a bug report by Alex Schmolck.
278 (InteractiveShell.__init__): brown-paper bag fix; regexp broke
283 (InteractiveShell.__init__): brown-paper bag fix; regexp broke
279 %magic with explicit % prefix.
284 %magic with explicit % prefix.
280
285
281 2007-02-27 Fernando Perez <Fernando.Perez@colorado.edu>
286 2007-02-27 Fernando Perez <Fernando.Perez@colorado.edu>
282
287
283 * IPython/Shell.py (IPShellGTK.mainloop): update threads calls to
288 * IPython/Shell.py (IPShellGTK.mainloop): update threads calls to
284 avoid a DeprecationWarning from GTK.
289 avoid a DeprecationWarning from GTK.
285
290
286 2007-02-22 Fernando Perez <Fernando.Perez@colorado.edu>
291 2007-02-22 Fernando Perez <Fernando.Perez@colorado.edu>
287
292
288 * IPython/genutils.py (clock): I modified clock() to return total
293 * IPython/genutils.py (clock): I modified clock() to return total
289 time, user+system. This is a more commonly needed metric. I also
294 time, user+system. This is a more commonly needed metric. I also
290 introduced the new clocku/clocks to get only user/system time if
295 introduced the new clocku/clocks to get only user/system time if
291 one wants those instead.
296 one wants those instead.
292
297
293 ***WARNING: API CHANGE*** clock() used to return only user time,
298 ***WARNING: API CHANGE*** clock() used to return only user time,
294 so if you want exactly the same results as before, use clocku
299 so if you want exactly the same results as before, use clocku
295 instead.
300 instead.
296
301
297 2007-02-22 Ville Vainio <vivainio@gmail.com>
302 2007-02-22 Ville Vainio <vivainio@gmail.com>
298
303
299 * IPython/Extensions/ipy_p4.py: Extension for improved
304 * IPython/Extensions/ipy_p4.py: Extension for improved
300 p4 (perforce version control system) experience.
305 p4 (perforce version control system) experience.
301 Adds %p4 magic with p4 command completion and
306 Adds %p4 magic with p4 command completion and
302 automatic -G argument (marshall output as python dict)
307 automatic -G argument (marshall output as python dict)
303
308
304 2007-02-19 Fernando Perez <Fernando.Perez@colorado.edu>
309 2007-02-19 Fernando Perez <Fernando.Perez@colorado.edu>
305
310
306 * IPython/demo.py (Demo.re_stop): make dashes optional in demo
311 * IPython/demo.py (Demo.re_stop): make dashes optional in demo
307 stop marks.
312 stop marks.
308 (ClearingMixin): a simple mixin to easily make a Demo class clear
313 (ClearingMixin): a simple mixin to easily make a Demo class clear
309 the screen in between blocks and have empty marquees. The
314 the screen in between blocks and have empty marquees. The
310 ClearDemo and ClearIPDemo classes that use it are included.
315 ClearDemo and ClearIPDemo classes that use it are included.
311
316
312 2007-02-18 Fernando Perez <Fernando.Perez@colorado.edu>
317 2007-02-18 Fernando Perez <Fernando.Perez@colorado.edu>
313
318
314 * IPython/irunner.py (pexpect_monkeypatch): patch pexpect to
319 * IPython/irunner.py (pexpect_monkeypatch): patch pexpect to
315 protect against exceptions at Python shutdown time. Patch
320 protect against exceptions at Python shutdown time. Patch
316 sumbmitted to upstream.
321 sumbmitted to upstream.
317
322
318 2007-02-14 Walter Doerwald <walter@livinglogic.de>
323 2007-02-14 Walter Doerwald <walter@livinglogic.de>
319
324
320 * IPython/Extensions/ibrowse.py: If entering the first object level
325 * IPython/Extensions/ibrowse.py: If entering the first object level
321 (i.e. the object for which the browser has been started) fails,
326 (i.e. the object for which the browser has been started) fails,
322 now the error is raised directly (aborting the browser) instead of
327 now the error is raised directly (aborting the browser) instead of
323 running into an empty levels list later.
328 running into an empty levels list later.
324
329
325 2007-02-03 Walter Doerwald <walter@livinglogic.de>
330 2007-02-03 Walter Doerwald <walter@livinglogic.de>
326
331
327 * IPython/Extensions/ipipe.py: Add an xrepr implementation
332 * IPython/Extensions/ipipe.py: Add an xrepr implementation
328 for the noitem object.
333 for the noitem object.
329
334
330 2007-01-31 Fernando Perez <Fernando.Perez@colorado.edu>
335 2007-01-31 Fernando Perez <Fernando.Perez@colorado.edu>
331
336
332 * IPython/completer.py (Completer.attr_matches): Fix small
337 * IPython/completer.py (Completer.attr_matches): Fix small
333 tab-completion bug with Enthought Traits objects with units.
338 tab-completion bug with Enthought Traits objects with units.
334 Thanks to a bug report by Tom Denniston
339 Thanks to a bug report by Tom Denniston
335 <tom.denniston-AT-alum.dartmouth.org>.
340 <tom.denniston-AT-alum.dartmouth.org>.
336
341
337 2007-01-27 Fernando Perez <Fernando.Perez@colorado.edu>
342 2007-01-27 Fernando Perez <Fernando.Perez@colorado.edu>
338
343
339 * IPython/Extensions/ipy_stock_completers.py (runlistpy): fix a
344 * IPython/Extensions/ipy_stock_completers.py (runlistpy): fix a
340 bug where only .ipy or .py would be completed. Once the first
345 bug where only .ipy or .py would be completed. Once the first
341 argument to %run has been given, all completions are valid because
346 argument to %run has been given, all completions are valid because
342 they are the arguments to the script, which may well be non-python
347 they are the arguments to the script, which may well be non-python
343 filenames.
348 filenames.
344
349
345 * IPython/irunner.py (InteractiveRunner.run_source): major updates
350 * IPython/irunner.py (InteractiveRunner.run_source): major updates
346 to irunner to allow it to correctly support real doctesting of
351 to irunner to allow it to correctly support real doctesting of
347 out-of-process ipython code.
352 out-of-process ipython code.
348
353
349 * IPython/Magic.py (magic_cd): Make the setting of the terminal
354 * IPython/Magic.py (magic_cd): Make the setting of the terminal
350 title an option (-noterm_title) because it completely breaks
355 title an option (-noterm_title) because it completely breaks
351 doctesting.
356 doctesting.
352
357
353 * IPython/demo.py: fix IPythonDemo class that was not actually working.
358 * IPython/demo.py: fix IPythonDemo class that was not actually working.
354
359
355 2007-01-24 Fernando Perez <Fernando.Perez@colorado.edu>
360 2007-01-24 Fernando Perez <Fernando.Perez@colorado.edu>
356
361
357 * IPython/irunner.py (main): fix small bug where extensions were
362 * IPython/irunner.py (main): fix small bug where extensions were
358 not being correctly recognized.
363 not being correctly recognized.
359
364
360 2007-01-23 Walter Doerwald <walter@livinglogic.de>
365 2007-01-23 Walter Doerwald <walter@livinglogic.de>
361
366
362 * IPython/Extensions/ipipe.py (xiter): Make sure that iterating
367 * IPython/Extensions/ipipe.py (xiter): Make sure that iterating
363 a string containing a single line yields the string itself as the
368 a string containing a single line yields the string itself as the
364 only item.
369 only item.
365
370
366 * IPython/Extensions/ibrowse.py (ibrowse): Avoid entering an
371 * IPython/Extensions/ibrowse.py (ibrowse): Avoid entering an
367 object if it's the same as the one on the last level (This avoids
372 object if it's the same as the one on the last level (This avoids
368 infinite recursion for one line strings).
373 infinite recursion for one line strings).
369
374
370 2007-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
375 2007-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
371
376
372 * IPython/ultraTB.py (AutoFormattedTB.__call__): properly flush
377 * IPython/ultraTB.py (AutoFormattedTB.__call__): properly flush
373 all output streams before printing tracebacks. This ensures that
378 all output streams before printing tracebacks. This ensures that
374 user output doesn't end up interleaved with traceback output.
379 user output doesn't end up interleaved with traceback output.
375
380
376 2007-01-10 Ville Vainio <vivainio@gmail.com>
381 2007-01-10 Ville Vainio <vivainio@gmail.com>
377
382
378 * Extensions/envpersist.py: Turbocharged %env that remembers
383 * Extensions/envpersist.py: Turbocharged %env that remembers
379 env vars across sessions; e.g. "%env PATH+=;/opt/scripts" or
384 env vars across sessions; e.g. "%env PATH+=;/opt/scripts" or
380 "%env VISUAL=jed".
385 "%env VISUAL=jed".
381
386
382 2007-01-05 Fernando Perez <Fernando.Perez@colorado.edu>
387 2007-01-05 Fernando Perez <Fernando.Perez@colorado.edu>
383
388
384 * IPython/iplib.py (showtraceback): ensure that we correctly call
389 * IPython/iplib.py (showtraceback): ensure that we correctly call
385 custom handlers in all cases (some with pdb were slipping through,
390 custom handlers in all cases (some with pdb were slipping through,
386 but I'm not exactly sure why).
391 but I'm not exactly sure why).
387
392
388 * IPython/Debugger.py (Tracer.__init__): added new class to
393 * IPython/Debugger.py (Tracer.__init__): added new class to
389 support set_trace-like usage of IPython's enhanced debugger.
394 support set_trace-like usage of IPython's enhanced debugger.
390
395
391 2006-12-24 Ville Vainio <vivainio@gmail.com>
396 2006-12-24 Ville Vainio <vivainio@gmail.com>
392
397
393 * ipmaker.py: more informative message when ipy_user_conf
398 * ipmaker.py: more informative message when ipy_user_conf
394 import fails (suggest running %upgrade).
399 import fails (suggest running %upgrade).
395
400
396 * tools/run_ipy_in_profiler.py: Utility to see where
401 * tools/run_ipy_in_profiler.py: Utility to see where
397 the time during IPython startup is spent.
402 the time during IPython startup is spent.
398
403
399 2006-12-20 Ville Vainio <vivainio@gmail.com>
404 2006-12-20 Ville Vainio <vivainio@gmail.com>
400
405
401 * 0.7.3 is out - merge all from 0.7.3 branch to trunk
406 * 0.7.3 is out - merge all from 0.7.3 branch to trunk
402
407
403 * ipapi.py: Add new ipapi method, expand_alias.
408 * ipapi.py: Add new ipapi method, expand_alias.
404
409
405 * Release.py: Bump up version to 0.7.4.svn
410 * Release.py: Bump up version to 0.7.4.svn
406
411
407 2006-12-17 Ville Vainio <vivainio@gmail.com>
412 2006-12-17 Ville Vainio <vivainio@gmail.com>
408
413
409 * Extensions/jobctrl.py: Fixed &cmd arg arg...
414 * Extensions/jobctrl.py: Fixed &cmd arg arg...
410 to work properly on posix too
415 to work properly on posix too
411
416
412 * Release.py: Update revnum (version is still just 0.7.3).
417 * Release.py: Update revnum (version is still just 0.7.3).
413
418
414 2006-12-15 Ville Vainio <vivainio@gmail.com>
419 2006-12-15 Ville Vainio <vivainio@gmail.com>
415
420
416 * scripts/ipython_win_post_install: create ipython.py in
421 * scripts/ipython_win_post_install: create ipython.py in
417 prefix + "/scripts".
422 prefix + "/scripts".
418
423
419 * Release.py: Update version to 0.7.3.
424 * Release.py: Update version to 0.7.3.
420
425
421 2006-12-14 Ville Vainio <vivainio@gmail.com>
426 2006-12-14 Ville Vainio <vivainio@gmail.com>
422
427
423 * scripts/ipython_win_post_install: Overwrite old shortcuts
428 * scripts/ipython_win_post_install: Overwrite old shortcuts
424 if they already exist
429 if they already exist
425
430
426 * Release.py: release 0.7.3rc2
431 * Release.py: release 0.7.3rc2
427
432
428 2006-12-13 Ville Vainio <vivainio@gmail.com>
433 2006-12-13 Ville Vainio <vivainio@gmail.com>
429
434
430 * Branch and update Release.py for 0.7.3rc1
435 * Branch and update Release.py for 0.7.3rc1
431
436
432 2006-12-13 Fernando Perez <Fernando.Perez@colorado.edu>
437 2006-12-13 Fernando Perez <Fernando.Perez@colorado.edu>
433
438
434 * IPython/Shell.py (IPShellWX): update for current WX naming
439 * IPython/Shell.py (IPShellWX): update for current WX naming
435 conventions, to avoid a deprecation warning with current WX
440 conventions, to avoid a deprecation warning with current WX
436 versions. Thanks to a report by Danny Shevitz.
441 versions. Thanks to a report by Danny Shevitz.
437
442
438 2006-12-12 Ville Vainio <vivainio@gmail.com>
443 2006-12-12 Ville Vainio <vivainio@gmail.com>
439
444
440 * ipmaker.py: apply david cournapeau's patch to make
445 * ipmaker.py: apply david cournapeau's patch to make
441 import_some work properly even when ipythonrc does
446 import_some work properly even when ipythonrc does
442 import_some on empty list (it was an old bug!).
447 import_some on empty list (it was an old bug!).
443
448
444 * UserConfig/ipy_user_conf.py, UserConfig/ipythonrc:
449 * UserConfig/ipy_user_conf.py, UserConfig/ipythonrc:
445 Add deprecation note to ipythonrc and a url to wiki
450 Add deprecation note to ipythonrc and a url to wiki
446 in ipy_user_conf.py
451 in ipy_user_conf.py
447
452
448
453
449 * Magic.py (%run): %run myscript.ipy now runs myscript.ipy
454 * Magic.py (%run): %run myscript.ipy now runs myscript.ipy
450 as if it was typed on IPython command prompt, i.e.
455 as if it was typed on IPython command prompt, i.e.
451 as IPython script.
456 as IPython script.
452
457
453 * example-magic.py, magic_grepl.py: remove outdated examples
458 * example-magic.py, magic_grepl.py: remove outdated examples
454
459
455 2006-12-11 Fernando Perez <Fernando.Perez@colorado.edu>
460 2006-12-11 Fernando Perez <Fernando.Perez@colorado.edu>
456
461
457 * IPython/iplib.py (debugger): prevent a nasty traceback if %debug
462 * IPython/iplib.py (debugger): prevent a nasty traceback if %debug
458 is called before any exception has occurred.
463 is called before any exception has occurred.
459
464
460 2006-12-08 Ville Vainio <vivainio@gmail.com>
465 2006-12-08 Ville Vainio <vivainio@gmail.com>
461
466
462 * Extensions/ipy_stock_completers.py: fix cd completer
467 * Extensions/ipy_stock_completers.py: fix cd completer
463 to translate /'s to \'s again.
468 to translate /'s to \'s again.
464
469
465 * completer.py: prevent traceback on file completions w/
470 * completer.py: prevent traceback on file completions w/
466 backslash.
471 backslash.
467
472
468 * Release.py: Update release number to 0.7.3b3 for release
473 * Release.py: Update release number to 0.7.3b3 for release
469
474
470 2006-12-07 Ville Vainio <vivainio@gmail.com>
475 2006-12-07 Ville Vainio <vivainio@gmail.com>
471
476
472 * Extensions/ipy_signals.py: Ignore ctrl+C in IPython process
477 * Extensions/ipy_signals.py: Ignore ctrl+C in IPython process
473 while executing external code. Provides more shell-like behaviour
478 while executing external code. Provides more shell-like behaviour
474 and overall better response to ctrl + C / ctrl + break.
479 and overall better response to ctrl + C / ctrl + break.
475
480
476 * tools/make_tarball.py: new script to create tarball straight from svn
481 * tools/make_tarball.py: new script to create tarball straight from svn
477 (setup.py sdist doesn't work on win32).
482 (setup.py sdist doesn't work on win32).
478
483
479 * Extensions/ipy_stock_completers.py: fix cd completer to give up
484 * Extensions/ipy_stock_completers.py: fix cd completer to give up
480 on dirnames with spaces and use the default completer instead.
485 on dirnames with spaces and use the default completer instead.
481
486
482 * Revision.py: Change version to 0.7.3b2 for release.
487 * Revision.py: Change version to 0.7.3b2 for release.
483
488
484 2006-12-05 Ville Vainio <vivainio@gmail.com>
489 2006-12-05 Ville Vainio <vivainio@gmail.com>
485
490
486 * Magic.py, iplib.py, completer.py: Apply R. Bernstein's
491 * Magic.py, iplib.py, completer.py: Apply R. Bernstein's
487 pydb patch 4 (rm debug printing, py 2.5 checking)
492 pydb patch 4 (rm debug printing, py 2.5 checking)
488
493
489 2006-11-30 Walter Doerwald <walter@livinglogic.de>
494 2006-11-30 Walter Doerwald <walter@livinglogic.de>
490 * IPython/Extensions/ibrowse.py: Add two new commands to ibrowse:
495 * IPython/Extensions/ibrowse.py: Add two new commands to ibrowse:
491 "refresh" (mapped to "r") refreshes the screen by restarting the iterator.
496 "refresh" (mapped to "r") refreshes the screen by restarting the iterator.
492 "refreshfind" (mapped to "R") does the same but tries to go back to the same
497 "refreshfind" (mapped to "R") does the same but tries to go back to the same
493 object the cursor was on before the refresh. The command "markrange" is
498 object the cursor was on before the refresh. The command "markrange" is
494 mapped to "%" now.
499 mapped to "%" now.
495 * IPython/Extensions/ibrowse.py: Make igrpentry and ipwdentry comparable.
500 * IPython/Extensions/ibrowse.py: Make igrpentry and ipwdentry comparable.
496
501
497 2006-11-29 Fernando Perez <Fernando.Perez@colorado.edu>
502 2006-11-29 Fernando Perez <Fernando.Perez@colorado.edu>
498
503
499 * IPython/Magic.py (magic_debug): new %debug magic to activate the
504 * IPython/Magic.py (magic_debug): new %debug magic to activate the
500 interactive debugger on the last traceback, without having to call
505 interactive debugger on the last traceback, without having to call
501 %pdb and rerun your code. Made minor changes in various modules,
506 %pdb and rerun your code. Made minor changes in various modules,
502 should automatically recognize pydb if available.
507 should automatically recognize pydb if available.
503
508
504 2006-11-28 Ville Vainio <vivainio@gmail.com>
509 2006-11-28 Ville Vainio <vivainio@gmail.com>
505
510
506 * completer.py: If the text start with !, show file completions
511 * completer.py: If the text start with !, show file completions
507 properly. This helps when trying to complete command name
512 properly. This helps when trying to complete command name
508 for shell escapes.
513 for shell escapes.
509
514
510 2006-11-27 Ville Vainio <vivainio@gmail.com>
515 2006-11-27 Ville Vainio <vivainio@gmail.com>
511
516
512 * ipy_stock_completers.py: bzr completer submitted by Stefan van
517 * ipy_stock_completers.py: bzr completer submitted by Stefan van
513 der Walt. Clean up svn and hg completers by using a common
518 der Walt. Clean up svn and hg completers by using a common
514 vcs_completer.
519 vcs_completer.
515
520
516 2006-11-26 Ville Vainio <vivainio@gmail.com>
521 2006-11-26 Ville Vainio <vivainio@gmail.com>
517
522
518 * Remove ipconfig and %config; you should use _ip.options structure
523 * Remove ipconfig and %config; you should use _ip.options structure
519 directly instead!
524 directly instead!
520
525
521 * genutils.py: add wrap_deprecated function for deprecating callables
526 * genutils.py: add wrap_deprecated function for deprecating callables
522
527
523 * iplib.py: deprecate ipmagic, ipsystem, ipalias. Use _ip.magic and
528 * iplib.py: deprecate ipmagic, ipsystem, ipalias. Use _ip.magic and
524 _ip.system instead. ipalias is redundant.
529 _ip.system instead. ipalias is redundant.
525
530
526 * Magic.py: %rehashdir no longer aliases 'cmdname' to 'cmdname.exe' on
531 * Magic.py: %rehashdir no longer aliases 'cmdname' to 'cmdname.exe' on
527 win32, but just 'cmdname'. Other extensions (non-'exe') are still made
532 win32, but just 'cmdname'. Other extensions (non-'exe') are still made
528 explicit.
533 explicit.
529
534
530 * ipy_stock_completers.py: 'hg' (mercurial VCS) now has a custom
535 * ipy_stock_completers.py: 'hg' (mercurial VCS) now has a custom
531 completer. Try it by entering 'hg ' and pressing tab.
536 completer. Try it by entering 'hg ' and pressing tab.
532
537
533 * macro.py: Give Macro a useful __repr__ method
538 * macro.py: Give Macro a useful __repr__ method
534
539
535 * Magic.py: %whos abbreviates the typename of Macro for brevity.
540 * Magic.py: %whos abbreviates the typename of Macro for brevity.
536
541
537 2006-11-24 Walter Doerwald <walter@livinglogic.de>
542 2006-11-24 Walter Doerwald <walter@livinglogic.de>
538 * IPython/Extensions/astyle.py: Do a relative import of ipipe, so that
543 * IPython/Extensions/astyle.py: Do a relative import of ipipe, so that
539 we don't get a duplicate ipipe module, where registration of the xrepr
544 we don't get a duplicate ipipe module, where registration of the xrepr
540 implementation for Text is useless.
545 implementation for Text is useless.
541
546
542 * IPython/Extensions/ipipe.py: Fix __xrepr__() implementation for ils.
547 * IPython/Extensions/ipipe.py: Fix __xrepr__() implementation for ils.
543
548
544 * IPython/Extensions/ibrowse.py: Fix keymapping for the enter command.
549 * IPython/Extensions/ibrowse.py: Fix keymapping for the enter command.
545
550
546 2006-11-24 Ville Vainio <vivainio@gmail.com>
551 2006-11-24 Ville Vainio <vivainio@gmail.com>
547
552
548 * Magic.py, manual_base.lyx: Kirill Smelkov patch:
553 * Magic.py, manual_base.lyx: Kirill Smelkov patch:
549 try to use "cProfile" instead of the slower pure python
554 try to use "cProfile" instead of the slower pure python
550 "profile"
555 "profile"
551
556
552 2006-11-23 Ville Vainio <vivainio@gmail.com>
557 2006-11-23 Ville Vainio <vivainio@gmail.com>
553
558
554 * manual_base.lyx: Kirill Smelkov patch: Fix wrong
559 * manual_base.lyx: Kirill Smelkov patch: Fix wrong
555 Qt+IPython+Designer link in documentation.
560 Qt+IPython+Designer link in documentation.
556
561
557 * Extensions/ipy_pydb.py: R. Bernstein's patch for passing
562 * Extensions/ipy_pydb.py: R. Bernstein's patch for passing
558 correct Pdb object to %pydb.
563 correct Pdb object to %pydb.
559
564
560
565
561 2006-11-22 Walter Doerwald <walter@livinglogic.de>
566 2006-11-22 Walter Doerwald <walter@livinglogic.de>
562 * IPython/Extensions/astyle.py: Text needs it's own implemenation of the
567 * IPython/Extensions/astyle.py: Text needs it's own implemenation of the
563 generic xrepr(), otherwise the list implementation would kick in.
568 generic xrepr(), otherwise the list implementation would kick in.
564
569
565 2006-11-21 Ville Vainio <vivainio@gmail.com>
570 2006-11-21 Ville Vainio <vivainio@gmail.com>
566
571
567 * upgrade_dir.py: Now actually overwrites a nonmodified user file
572 * upgrade_dir.py: Now actually overwrites a nonmodified user file
568 with one from UserConfig.
573 with one from UserConfig.
569
574
570 * ipy_profile_sh.py: Add dummy "depth" to var_expand lambda,
575 * ipy_profile_sh.py: Add dummy "depth" to var_expand lambda,
571 it was missing which broke the sh profile.
576 it was missing which broke the sh profile.
572
577
573 * completer.py: file completer now uses explicit '/' instead
578 * completer.py: file completer now uses explicit '/' instead
574 of os.path.join, expansion of 'foo' was broken on win32
579 of os.path.join, expansion of 'foo' was broken on win32
575 if there was one directory with name 'foobar'.
580 if there was one directory with name 'foobar'.
576
581
577 * A bunch of patches from Kirill Smelkov:
582 * A bunch of patches from Kirill Smelkov:
578
583
579 * [patch 9/9] doc: point bug-tracker URL to IPythons trac-tickets.
584 * [patch 9/9] doc: point bug-tracker URL to IPythons trac-tickets.
580
585
581 * [patch 7/9] Implement %page -r (page in raw mode) -
586 * [patch 7/9] Implement %page -r (page in raw mode) -
582
587
583 * [patch 5/9] ScientificPython webpage has moved
588 * [patch 5/9] ScientificPython webpage has moved
584
589
585 * [patch 4/9] The manual mentions %ds, should be %dhist
590 * [patch 4/9] The manual mentions %ds, should be %dhist
586
591
587 * [patch 3/9] Kill old bits from %prun doc.
592 * [patch 3/9] Kill old bits from %prun doc.
588
593
589 * [patch 1/9] Fix typos here and there.
594 * [patch 1/9] Fix typos here and there.
590
595
591 2006-11-08 Ville Vainio <vivainio@gmail.com>
596 2006-11-08 Ville Vainio <vivainio@gmail.com>
592
597
593 * completer.py (attr_matches): catch all exceptions raised
598 * completer.py (attr_matches): catch all exceptions raised
594 by eval of expr with dots.
599 by eval of expr with dots.
595
600
596 2006-11-07 Fernando Perez <Fernando.Perez@colorado.edu>
601 2006-11-07 Fernando Perez <Fernando.Perez@colorado.edu>
597
602
598 * IPython/iplib.py (runsource): Prepend an 'if 1:' to the user
603 * IPython/iplib.py (runsource): Prepend an 'if 1:' to the user
599 input if it starts with whitespace. This allows you to paste
604 input if it starts with whitespace. This allows you to paste
600 indented input from any editor without manually having to type in
605 indented input from any editor without manually having to type in
601 the 'if 1:', which is convenient when working interactively.
606 the 'if 1:', which is convenient when working interactively.
602 Slightly modifed version of a patch by Bo Peng
607 Slightly modifed version of a patch by Bo Peng
603 <bpeng-AT-rice.edu>.
608 <bpeng-AT-rice.edu>.
604
609
605 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
610 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
606
611
607 * IPython/irunner.py (main): modified irunner so it automatically
612 * IPython/irunner.py (main): modified irunner so it automatically
608 recognizes the right runner to use based on the extension (.py for
613 recognizes the right runner to use based on the extension (.py for
609 python, .ipy for ipython and .sage for sage).
614 python, .ipy for ipython and .sage for sage).
610
615
611 * IPython/iplib.py (InteractiveShell.ipconfig): new builtin, also
616 * IPython/iplib.py (InteractiveShell.ipconfig): new builtin, also
612 visible in ipapi as ip.config(), to programatically control the
617 visible in ipapi as ip.config(), to programatically control the
613 internal rc object. There's an accompanying %config magic for
618 internal rc object. There's an accompanying %config magic for
614 interactive use, which has been enhanced to match the
619 interactive use, which has been enhanced to match the
615 funtionality in ipconfig.
620 funtionality in ipconfig.
616
621
617 * IPython/Magic.py (magic_system_verbose): Change %system_verbose
622 * IPython/Magic.py (magic_system_verbose): Change %system_verbose
618 so it's not just a toggle, it now takes an argument. Add support
623 so it's not just a toggle, it now takes an argument. Add support
619 for a customizable header when making system calls, as the new
624 for a customizable header when making system calls, as the new
620 system_header variable in the ipythonrc file.
625 system_header variable in the ipythonrc file.
621
626
622 2006-11-03 Walter Doerwald <walter@livinglogic.de>
627 2006-11-03 Walter Doerwald <walter@livinglogic.de>
623
628
624 * IPython/Extensions/ipipe.py: xrepr(), xiter() and xattrs() are now
629 * IPython/Extensions/ipipe.py: xrepr(), xiter() and xattrs() are now
625 generic functions (using Philip J. Eby's simplegeneric package).
630 generic functions (using Philip J. Eby's simplegeneric package).
626 This makes it possible to customize the display of third-party classes
631 This makes it possible to customize the display of third-party classes
627 without having to monkeypatch them. xiter() no longer supports a mode
632 without having to monkeypatch them. xiter() no longer supports a mode
628 argument and the XMode class has been removed. The same functionality can
633 argument and the XMode class has been removed. The same functionality can
629 be implemented via IterAttributeDescriptor and IterMethodDescriptor.
634 be implemented via IterAttributeDescriptor and IterMethodDescriptor.
630 One consequence of the switch to generic functions is that xrepr() and
635 One consequence of the switch to generic functions is that xrepr() and
631 xattrs() implementation must define the default value for the mode
636 xattrs() implementation must define the default value for the mode
632 argument themselves and xattrs() implementations must return real
637 argument themselves and xattrs() implementations must return real
633 descriptors.
638 descriptors.
634
639
635 * IPython/external: This new subpackage will contain all third-party
640 * IPython/external: This new subpackage will contain all third-party
636 packages that are bundled with IPython. (The first one is simplegeneric).
641 packages that are bundled with IPython. (The first one is simplegeneric).
637
642
638 * IPython/Extensions/ipipe.py (ifile/ils): Readd output of the parent
643 * IPython/Extensions/ipipe.py (ifile/ils): Readd output of the parent
639 directory which as been dropped in r1703.
644 directory which as been dropped in r1703.
640
645
641 * IPython/Extensions/ipipe.py (iless): Fixed.
646 * IPython/Extensions/ipipe.py (iless): Fixed.
642
647
643 * IPython/Extensions/ibrowse: Fixed sorting under Python 2.3.
648 * IPython/Extensions/ibrowse: Fixed sorting under Python 2.3.
644
649
645 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
650 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
646
651
647 * IPython/iplib.py (InteractiveShell.var_expand): fix stack
652 * IPython/iplib.py (InteractiveShell.var_expand): fix stack
648 handling in variable expansion so that shells and magics recognize
653 handling in variable expansion so that shells and magics recognize
649 function local scopes correctly. Bug reported by Brian.
654 function local scopes correctly. Bug reported by Brian.
650
655
651 * scripts/ipython: remove the very first entry in sys.path which
656 * scripts/ipython: remove the very first entry in sys.path which
652 Python auto-inserts for scripts, so that sys.path under IPython is
657 Python auto-inserts for scripts, so that sys.path under IPython is
653 as similar as possible to that under plain Python.
658 as similar as possible to that under plain Python.
654
659
655 * IPython/completer.py (IPCompleter.file_matches): Fix
660 * IPython/completer.py (IPCompleter.file_matches): Fix
656 tab-completion so that quotes are not closed unless the completion
661 tab-completion so that quotes are not closed unless the completion
657 is unambiguous. After a request by Stefan. Minor cleanups in
662 is unambiguous. After a request by Stefan. Minor cleanups in
658 ipy_stock_completers.
663 ipy_stock_completers.
659
664
660 2006-11-02 Ville Vainio <vivainio@gmail.com>
665 2006-11-02 Ville Vainio <vivainio@gmail.com>
661
666
662 * ipy_stock_completers.py: Add %run and %cd completers.
667 * ipy_stock_completers.py: Add %run and %cd completers.
663
668
664 * completer.py: Try running custom completer for both
669 * completer.py: Try running custom completer for both
665 "foo" and "%foo" if the command is just "foo". Ignore case
670 "foo" and "%foo" if the command is just "foo". Ignore case
666 when filtering possible completions.
671 when filtering possible completions.
667
672
668 * UserConfig/ipy_user_conf.py: install stock completers as default
673 * UserConfig/ipy_user_conf.py: install stock completers as default
669
674
670 * iplib.py (history_saving_wrapper), debugger(), ipy_pydb.py:
675 * iplib.py (history_saving_wrapper), debugger(), ipy_pydb.py:
671 simplified readline history save / restore through a wrapper
676 simplified readline history save / restore through a wrapper
672 function
677 function
673
678
674
679
675 2006-10-31 Ville Vainio <vivainio@gmail.com>
680 2006-10-31 Ville Vainio <vivainio@gmail.com>
676
681
677 * strdispatch.py, completer.py, ipy_stock_completers.py:
682 * strdispatch.py, completer.py, ipy_stock_completers.py:
678 Allow str_key ("command") in completer hooks. Implement
683 Allow str_key ("command") in completer hooks. Implement
679 trivial completer for 'import' (stdlib modules only). Rename
684 trivial completer for 'import' (stdlib modules only). Rename
680 ipy_linux_package_managers.py to ipy_stock_completers.py.
685 ipy_linux_package_managers.py to ipy_stock_completers.py.
681 SVN completer.
686 SVN completer.
682
687
683 * Extensions/ledit.py: %magic line editor for easily and
688 * Extensions/ledit.py: %magic line editor for easily and
684 incrementally manipulating lists of strings. The magic command
689 incrementally manipulating lists of strings. The magic command
685 name is %led.
690 name is %led.
686
691
687 2006-10-30 Ville Vainio <vivainio@gmail.com>
692 2006-10-30 Ville Vainio <vivainio@gmail.com>
688
693
689 * Debugger.py, iplib.py (debugger()): Add last set of Rocky
694 * Debugger.py, iplib.py (debugger()): Add last set of Rocky
690 Bernsteins's patches for pydb integration.
695 Bernsteins's patches for pydb integration.
691 http://bashdb.sourceforge.net/pydb/
696 http://bashdb.sourceforge.net/pydb/
692
697
693 * strdispatch.py, iplib.py, completer.py, IPython/__init__.py,
698 * strdispatch.py, iplib.py, completer.py, IPython/__init__.py,
694 Extensions/ipy_linux_package_managers.py, hooks.py: Implement
699 Extensions/ipy_linux_package_managers.py, hooks.py: Implement
695 custom completer hook to allow the users to implement their own
700 custom completer hook to allow the users to implement their own
696 completers. See ipy_linux_package_managers.py for example. The
701 completers. See ipy_linux_package_managers.py for example. The
697 hook name is 'complete_command'.
702 hook name is 'complete_command'.
698
703
699 2006-10-28 Fernando Perez <Fernando.Perez@colorado.edu>
704 2006-10-28 Fernando Perez <Fernando.Perez@colorado.edu>
700
705
701 * IPython/UserConfig/ipythonrc-scipy: minor cleanups to remove old
706 * IPython/UserConfig/ipythonrc-scipy: minor cleanups to remove old
702 Numeric leftovers.
707 Numeric leftovers.
703
708
704 * ipython.el (py-execute-region): apply Stefan's patch to fix
709 * ipython.el (py-execute-region): apply Stefan's patch to fix
705 garbled results if the python shell hasn't been previously started.
710 garbled results if the python shell hasn't been previously started.
706
711
707 * IPython/genutils.py (arg_split): moved to genutils, since it's a
712 * IPython/genutils.py (arg_split): moved to genutils, since it's a
708 pretty generic function and useful for other things.
713 pretty generic function and useful for other things.
709
714
710 * IPython/OInspect.py (getsource): Add customizable source
715 * IPython/OInspect.py (getsource): Add customizable source
711 extractor. After a request/patch form W. Stein (SAGE).
716 extractor. After a request/patch form W. Stein (SAGE).
712
717
713 * IPython/irunner.py (InteractiveRunner.run_source): reset tty
718 * IPython/irunner.py (InteractiveRunner.run_source): reset tty
714 window size to a more reasonable value from what pexpect does,
719 window size to a more reasonable value from what pexpect does,
715 since their choice causes wrapping bugs with long input lines.
720 since their choice causes wrapping bugs with long input lines.
716
721
717 2006-10-28 Ville Vainio <vivainio@gmail.com>
722 2006-10-28 Ville Vainio <vivainio@gmail.com>
718
723
719 * Magic.py (%run): Save and restore the readline history from
724 * Magic.py (%run): Save and restore the readline history from
720 file around %run commands to prevent side effects from
725 file around %run commands to prevent side effects from
721 %runned programs that might use readline (e.g. pydb).
726 %runned programs that might use readline (e.g. pydb).
722
727
723 * extensions/ipy_pydb.py: Adds %pydb magic when imported, for
728 * extensions/ipy_pydb.py: Adds %pydb magic when imported, for
724 invoking the pydb enhanced debugger.
729 invoking the pydb enhanced debugger.
725
730
726 2006-10-23 Walter Doerwald <walter@livinglogic.de>
731 2006-10-23 Walter Doerwald <walter@livinglogic.de>
727
732
728 * IPython/Extensions/ipipe.py (ifile): Remove all methods that
733 * IPython/Extensions/ipipe.py (ifile): Remove all methods that
729 call the base class method and propagate the return value to
734 call the base class method and propagate the return value to
730 ifile. This is now done by path itself.
735 ifile. This is now done by path itself.
731
736
732 2006-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
737 2006-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
733
738
734 * IPython/ipapi.py (IPApi.__init__): Added new entry to public
739 * IPython/ipapi.py (IPApi.__init__): Added new entry to public
735 api: set_crash_handler(), to expose the ability to change the
740 api: set_crash_handler(), to expose the ability to change the
736 internal crash handler.
741 internal crash handler.
737
742
738 * IPython/CrashHandler.py (CrashHandler.__init__): abstract out
743 * IPython/CrashHandler.py (CrashHandler.__init__): abstract out
739 the various parameters of the crash handler so that apps using
744 the various parameters of the crash handler so that apps using
740 IPython as their engine can customize crash handling. Ipmlemented
745 IPython as their engine can customize crash handling. Ipmlemented
741 at the request of SAGE.
746 at the request of SAGE.
742
747
743 2006-10-14 Ville Vainio <vivainio@gmail.com>
748 2006-10-14 Ville Vainio <vivainio@gmail.com>
744
749
745 * Magic.py, ipython.el: applied first "safe" part of Rocky
750 * Magic.py, ipython.el: applied first "safe" part of Rocky
746 Bernstein's patch set for pydb integration.
751 Bernstein's patch set for pydb integration.
747
752
748 * Magic.py (%unalias, %alias): %store'd aliases can now be
753 * Magic.py (%unalias, %alias): %store'd aliases can now be
749 removed with '%unalias'. %alias w/o args now shows most
754 removed with '%unalias'. %alias w/o args now shows most
750 interesting (stored / manually defined) aliases last
755 interesting (stored / manually defined) aliases last
751 where they catch the eye w/o scrolling.
756 where they catch the eye w/o scrolling.
752
757
753 * Magic.py (%rehashx), ext_rehashdir.py: files with
758 * Magic.py (%rehashx), ext_rehashdir.py: files with
754 'py' extension are always considered executable, even
759 'py' extension are always considered executable, even
755 when not in PATHEXT environment variable.
760 when not in PATHEXT environment variable.
756
761
757 2006-10-12 Ville Vainio <vivainio@gmail.com>
762 2006-10-12 Ville Vainio <vivainio@gmail.com>
758
763
759 * jobctrl.py: Add new "jobctrl" extension for spawning background
764 * jobctrl.py: Add new "jobctrl" extension for spawning background
760 processes with "&find /". 'import jobctrl' to try it out. Requires
765 processes with "&find /". 'import jobctrl' to try it out. Requires
761 'subprocess' module, standard in python 2.4+.
766 'subprocess' module, standard in python 2.4+.
762
767
763 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
768 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
764 so if foo -> bar and bar -> baz, then foo -> baz.
769 so if foo -> bar and bar -> baz, then foo -> baz.
765
770
766 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
771 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
767
772
768 * IPython/Magic.py (Magic.parse_options): add a new posix option
773 * IPython/Magic.py (Magic.parse_options): add a new posix option
769 to allow parsing of input args in magics that doesn't strip quotes
774 to allow parsing of input args in magics that doesn't strip quotes
770 (if posix=False). This also closes %timeit bug reported by
775 (if posix=False). This also closes %timeit bug reported by
771 Stefan.
776 Stefan.
772
777
773 2006-10-03 Ville Vainio <vivainio@gmail.com>
778 2006-10-03 Ville Vainio <vivainio@gmail.com>
774
779
775 * iplib.py (raw_input, interact): Return ValueError catching for
780 * iplib.py (raw_input, interact): Return ValueError catching for
776 raw_input. Fixes infinite loop for sys.stdin.close() or
781 raw_input. Fixes infinite loop for sys.stdin.close() or
777 sys.stdout.close().
782 sys.stdout.close().
778
783
779 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
784 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
780
785
781 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
786 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
782 to help in handling doctests. irunner is now pretty useful for
787 to help in handling doctests. irunner is now pretty useful for
783 running standalone scripts and simulate a full interactive session
788 running standalone scripts and simulate a full interactive session
784 in a format that can be then pasted as a doctest.
789 in a format that can be then pasted as a doctest.
785
790
786 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
791 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
787 on top of the default (useless) ones. This also fixes the nasty
792 on top of the default (useless) ones. This also fixes the nasty
788 way in which 2.5's Quitter() exits (reverted [1785]).
793 way in which 2.5's Quitter() exits (reverted [1785]).
789
794
790 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
795 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
791 2.5.
796 2.5.
792
797
793 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
798 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
794 color scheme is updated as well when color scheme is changed
799 color scheme is updated as well when color scheme is changed
795 interactively.
800 interactively.
796
801
797 2006-09-27 Ville Vainio <vivainio@gmail.com>
802 2006-09-27 Ville Vainio <vivainio@gmail.com>
798
803
799 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
804 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
800 infinite loop and just exit. It's a hack, but will do for a while.
805 infinite loop and just exit. It's a hack, but will do for a while.
801
806
802 2006-08-25 Walter Doerwald <walter@livinglogic.de>
807 2006-08-25 Walter Doerwald <walter@livinglogic.de>
803
808
804 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
809 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
805 the constructor, this makes it possible to get a list of only directories
810 the constructor, this makes it possible to get a list of only directories
806 or only files.
811 or only files.
807
812
808 2006-08-12 Ville Vainio <vivainio@gmail.com>
813 2006-08-12 Ville Vainio <vivainio@gmail.com>
809
814
810 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
815 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
811 they broke unittest
816 they broke unittest
812
817
813 2006-08-11 Ville Vainio <vivainio@gmail.com>
818 2006-08-11 Ville Vainio <vivainio@gmail.com>
814
819
815 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
820 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
816 by resolving issue properly, i.e. by inheriting FakeModule
821 by resolving issue properly, i.e. by inheriting FakeModule
817 from types.ModuleType. Pickling ipython interactive data
822 from types.ModuleType. Pickling ipython interactive data
818 should still work as usual (testing appreciated).
823 should still work as usual (testing appreciated).
819
824
820 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
825 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
821
826
822 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
827 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
823 running under python 2.3 with code from 2.4 to fix a bug with
828 running under python 2.3 with code from 2.4 to fix a bug with
824 help(). Reported by the Debian maintainers, Norbert Tretkowski
829 help(). Reported by the Debian maintainers, Norbert Tretkowski
825 <norbert-AT-tretkowski.de> and Alexandre Fayolle
830 <norbert-AT-tretkowski.de> and Alexandre Fayolle
826 <afayolle-AT-debian.org>.
831 <afayolle-AT-debian.org>.
827
832
828 2006-08-04 Walter Doerwald <walter@livinglogic.de>
833 2006-08-04 Walter Doerwald <walter@livinglogic.de>
829
834
830 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
835 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
831 (which was displaying "quit" twice).
836 (which was displaying "quit" twice).
832
837
833 2006-07-28 Walter Doerwald <walter@livinglogic.de>
838 2006-07-28 Walter Doerwald <walter@livinglogic.de>
834
839
835 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
840 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
836 the mode argument).
841 the mode argument).
837
842
838 2006-07-27 Walter Doerwald <walter@livinglogic.de>
843 2006-07-27 Walter Doerwald <walter@livinglogic.de>
839
844
840 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
845 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
841 not running under IPython.
846 not running under IPython.
842
847
843 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
848 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
844 and make it iterable (iterating over the attribute itself). Add two new
849 and make it iterable (iterating over the attribute itself). Add two new
845 magic strings for __xattrs__(): If the string starts with "-", the attribute
850 magic strings for __xattrs__(): If the string starts with "-", the attribute
846 will not be displayed in ibrowse's detail view (but it can still be
851 will not be displayed in ibrowse's detail view (but it can still be
847 iterated over). This makes it possible to add attributes that are large
852 iterated over). This makes it possible to add attributes that are large
848 lists or generator methods to the detail view. Replace magic attribute names
853 lists or generator methods to the detail view. Replace magic attribute names
849 and _attrname() and _getattr() with "descriptors": For each type of magic
854 and _attrname() and _getattr() with "descriptors": For each type of magic
850 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
855 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
851 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
856 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
852 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
857 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
853 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
858 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
854 are still supported.
859 are still supported.
855
860
856 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
861 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
857 fails in ibrowse.fetch(), the exception object is added as the last item
862 fails in ibrowse.fetch(), the exception object is added as the last item
858 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
863 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
859 a generator throws an exception midway through execution.
864 a generator throws an exception midway through execution.
860
865
861 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
866 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
862 encoding into methods.
867 encoding into methods.
863
868
864 2006-07-26 Ville Vainio <vivainio@gmail.com>
869 2006-07-26 Ville Vainio <vivainio@gmail.com>
865
870
866 * iplib.py: history now stores multiline input as single
871 * iplib.py: history now stores multiline input as single
867 history entries. Patch by Jorgen Cederlof.
872 history entries. Patch by Jorgen Cederlof.
868
873
869 2006-07-18 Walter Doerwald <walter@livinglogic.de>
874 2006-07-18 Walter Doerwald <walter@livinglogic.de>
870
875
871 * IPython/Extensions/ibrowse.py: Make cursor visible over
876 * IPython/Extensions/ibrowse.py: Make cursor visible over
872 non existing attributes.
877 non existing attributes.
873
878
874 2006-07-14 Walter Doerwald <walter@livinglogic.de>
879 2006-07-14 Walter Doerwald <walter@livinglogic.de>
875
880
876 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
881 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
877 error output of the running command doesn't mess up the screen.
882 error output of the running command doesn't mess up the screen.
878
883
879 2006-07-13 Walter Doerwald <walter@livinglogic.de>
884 2006-07-13 Walter Doerwald <walter@livinglogic.de>
880
885
881 * IPython/Extensions/ipipe.py (isort): Make isort usable without
886 * IPython/Extensions/ipipe.py (isort): Make isort usable without
882 argument. This sorts the items themselves.
887 argument. This sorts the items themselves.
883
888
884 2006-07-12 Walter Doerwald <walter@livinglogic.de>
889 2006-07-12 Walter Doerwald <walter@livinglogic.de>
885
890
886 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
891 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
887 Compile expression strings into code objects. This should speed
892 Compile expression strings into code objects. This should speed
888 up ifilter and friends somewhat.
893 up ifilter and friends somewhat.
889
894
890 2006-07-08 Ville Vainio <vivainio@gmail.com>
895 2006-07-08 Ville Vainio <vivainio@gmail.com>
891
896
892 * Magic.py: %cpaste now strips > from the beginning of lines
897 * Magic.py: %cpaste now strips > from the beginning of lines
893 to ease pasting quoted code from emails. Contributed by
898 to ease pasting quoted code from emails. Contributed by
894 Stefan van der Walt.
899 Stefan van der Walt.
895
900
896 2006-06-29 Ville Vainio <vivainio@gmail.com>
901 2006-06-29 Ville Vainio <vivainio@gmail.com>
897
902
898 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
903 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
899 mode, patch contributed by Darren Dale. NEEDS TESTING!
904 mode, patch contributed by Darren Dale. NEEDS TESTING!
900
905
901 2006-06-28 Walter Doerwald <walter@livinglogic.de>
906 2006-06-28 Walter Doerwald <walter@livinglogic.de>
902
907
903 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
908 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
904 a blue background. Fix fetching new display rows when the browser
909 a blue background. Fix fetching new display rows when the browser
905 scrolls more than a screenful (e.g. by using the goto command).
910 scrolls more than a screenful (e.g. by using the goto command).
906
911
907 2006-06-27 Ville Vainio <vivainio@gmail.com>
912 2006-06-27 Ville Vainio <vivainio@gmail.com>
908
913
909 * Magic.py (_inspect, _ofind) Apply David Huard's
914 * Magic.py (_inspect, _ofind) Apply David Huard's
910 patch for displaying the correct docstring for 'property'
915 patch for displaying the correct docstring for 'property'
911 attributes.
916 attributes.
912
917
913 2006-06-23 Walter Doerwald <walter@livinglogic.de>
918 2006-06-23 Walter Doerwald <walter@livinglogic.de>
914
919
915 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
920 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
916 commands into the methods implementing them.
921 commands into the methods implementing them.
917
922
918 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
923 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
919
924
920 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
925 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
921 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
926 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
922 autoindent support was authored by Jin Liu.
927 autoindent support was authored by Jin Liu.
923
928
924 2006-06-22 Walter Doerwald <walter@livinglogic.de>
929 2006-06-22 Walter Doerwald <walter@livinglogic.de>
925
930
926 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
931 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
927 for keymaps with a custom class that simplifies handling.
932 for keymaps with a custom class that simplifies handling.
928
933
929 2006-06-19 Walter Doerwald <walter@livinglogic.de>
934 2006-06-19 Walter Doerwald <walter@livinglogic.de>
930
935
931 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
936 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
932 resizing. This requires Python 2.5 to work.
937 resizing. This requires Python 2.5 to work.
933
938
934 2006-06-16 Walter Doerwald <walter@livinglogic.de>
939 2006-06-16 Walter Doerwald <walter@livinglogic.de>
935
940
936 * IPython/Extensions/ibrowse.py: Add two new commands to
941 * IPython/Extensions/ibrowse.py: Add two new commands to
937 ibrowse: "hideattr" (mapped to "h") hides the attribute under
942 ibrowse: "hideattr" (mapped to "h") hides the attribute under
938 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
943 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
939 attributes again. Remapped the help command to "?". Display
944 attributes again. Remapped the help command to "?". Display
940 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
945 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
941 as keys for the "home" and "end" commands. Add three new commands
946 as keys for the "home" and "end" commands. Add three new commands
942 to the input mode for "find" and friends: "delend" (CTRL-K)
947 to the input mode for "find" and friends: "delend" (CTRL-K)
943 deletes to the end of line. "incsearchup" searches upwards in the
948 deletes to the end of line. "incsearchup" searches upwards in the
944 command history for an input that starts with the text before the cursor.
949 command history for an input that starts with the text before the cursor.
945 "incsearchdown" does the same downwards. Removed a bogus mapping of
950 "incsearchdown" does the same downwards. Removed a bogus mapping of
946 the x key to "delete".
951 the x key to "delete".
947
952
948 2006-06-15 Ville Vainio <vivainio@gmail.com>
953 2006-06-15 Ville Vainio <vivainio@gmail.com>
949
954
950 * iplib.py, hooks.py: Added new generate_prompt hook that can be
955 * iplib.py, hooks.py: Added new generate_prompt hook that can be
951 used to create prompts dynamically, instead of the "old" way of
956 used to create prompts dynamically, instead of the "old" way of
952 assigning "magic" strings to prompt_in1 and prompt_in2. The old
957 assigning "magic" strings to prompt_in1 and prompt_in2. The old
953 way still works (it's invoked by the default hook), of course.
958 way still works (it's invoked by the default hook), of course.
954
959
955 * Prompts.py: added generate_output_prompt hook for altering output
960 * Prompts.py: added generate_output_prompt hook for altering output
956 prompt
961 prompt
957
962
958 * Release.py: Changed version string to 0.7.3.svn.
963 * Release.py: Changed version string to 0.7.3.svn.
959
964
960 2006-06-15 Walter Doerwald <walter@livinglogic.de>
965 2006-06-15 Walter Doerwald <walter@livinglogic.de>
961
966
962 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
967 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
963 the call to fetch() always tries to fetch enough data for at least one
968 the call to fetch() always tries to fetch enough data for at least one
964 full screen. This makes it possible to simply call moveto(0,0,True) in
969 full screen. This makes it possible to simply call moveto(0,0,True) in
965 the constructor. Fix typos and removed the obsolete goto attribute.
970 the constructor. Fix typos and removed the obsolete goto attribute.
966
971
967 2006-06-12 Ville Vainio <vivainio@gmail.com>
972 2006-06-12 Ville Vainio <vivainio@gmail.com>
968
973
969 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
974 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
970 allowing $variable interpolation within multiline statements,
975 allowing $variable interpolation within multiline statements,
971 though so far only with "sh" profile for a testing period.
976 though so far only with "sh" profile for a testing period.
972 The patch also enables splitting long commands with \ but it
977 The patch also enables splitting long commands with \ but it
973 doesn't work properly yet.
978 doesn't work properly yet.
974
979
975 2006-06-12 Walter Doerwald <walter@livinglogic.de>
980 2006-06-12 Walter Doerwald <walter@livinglogic.de>
976
981
977 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
982 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
978 input history and the position of the cursor in the input history for
983 input history and the position of the cursor in the input history for
979 the find, findbackwards and goto command.
984 the find, findbackwards and goto command.
980
985
981 2006-06-10 Walter Doerwald <walter@livinglogic.de>
986 2006-06-10 Walter Doerwald <walter@livinglogic.de>
982
987
983 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
988 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
984 implements the basic functionality of browser commands that require
989 implements the basic functionality of browser commands that require
985 input. Reimplement the goto, find and findbackwards commands as
990 input. Reimplement the goto, find and findbackwards commands as
986 subclasses of _CommandInput. Add an input history and keymaps to those
991 subclasses of _CommandInput. Add an input history and keymaps to those
987 commands. Add "\r" as a keyboard shortcut for the enterdefault and
992 commands. Add "\r" as a keyboard shortcut for the enterdefault and
988 execute commands.
993 execute commands.
989
994
990 2006-06-07 Ville Vainio <vivainio@gmail.com>
995 2006-06-07 Ville Vainio <vivainio@gmail.com>
991
996
992 * iplib.py: ipython mybatch.ipy exits ipython immediately after
997 * iplib.py: ipython mybatch.ipy exits ipython immediately after
993 running the batch files instead of leaving the session open.
998 running the batch files instead of leaving the session open.
994
999
995 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
1000 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
996
1001
997 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
1002 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
998 the original fix was incomplete. Patch submitted by W. Maier.
1003 the original fix was incomplete. Patch submitted by W. Maier.
999
1004
1000 2006-06-07 Ville Vainio <vivainio@gmail.com>
1005 2006-06-07 Ville Vainio <vivainio@gmail.com>
1001
1006
1002 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
1007 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
1003 Confirmation prompts can be supressed by 'quiet' option.
1008 Confirmation prompts can be supressed by 'quiet' option.
1004 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
1009 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
1005
1010
1006 2006-06-06 *** Released version 0.7.2
1011 2006-06-06 *** Released version 0.7.2
1007
1012
1008 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
1013 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
1009
1014
1010 * IPython/Release.py (version): Made 0.7.2 final for release.
1015 * IPython/Release.py (version): Made 0.7.2 final for release.
1011 Repo tagged and release cut.
1016 Repo tagged and release cut.
1012
1017
1013 2006-06-05 Ville Vainio <vivainio@gmail.com>
1018 2006-06-05 Ville Vainio <vivainio@gmail.com>
1014
1019
1015 * Magic.py (magic_rehashx): Honor no_alias list earlier in
1020 * Magic.py (magic_rehashx): Honor no_alias list earlier in
1016 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
1021 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
1017
1022
1018 * upgrade_dir.py: try import 'path' module a bit harder
1023 * upgrade_dir.py: try import 'path' module a bit harder
1019 (for %upgrade)
1024 (for %upgrade)
1020
1025
1021 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
1026 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
1022
1027
1023 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
1028 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
1024 instead of looping 20 times.
1029 instead of looping 20 times.
1025
1030
1026 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
1031 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
1027 correctly at initialization time. Bug reported by Krishna Mohan
1032 correctly at initialization time. Bug reported by Krishna Mohan
1028 Gundu <gkmohan-AT-gmail.com> on the user list.
1033 Gundu <gkmohan-AT-gmail.com> on the user list.
1029
1034
1030 * IPython/Release.py (version): Mark 0.7.2 version to start
1035 * IPython/Release.py (version): Mark 0.7.2 version to start
1031 testing for release on 06/06.
1036 testing for release on 06/06.
1032
1037
1033 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
1038 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
1034
1039
1035 * scripts/irunner: thin script interface so users don't have to
1040 * scripts/irunner: thin script interface so users don't have to
1036 find the module and call it as an executable, since modules rarely
1041 find the module and call it as an executable, since modules rarely
1037 live in people's PATH.
1042 live in people's PATH.
1038
1043
1039 * IPython/irunner.py (InteractiveRunner.__init__): added
1044 * IPython/irunner.py (InteractiveRunner.__init__): added
1040 delaybeforesend attribute to control delays with newer versions of
1045 delaybeforesend attribute to control delays with newer versions of
1041 pexpect. Thanks to detailed help from pexpect's author, Noah
1046 pexpect. Thanks to detailed help from pexpect's author, Noah
1042 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
1047 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
1043 correctly (it works in NoColor mode).
1048 correctly (it works in NoColor mode).
1044
1049
1045 * IPython/iplib.py (handle_normal): fix nasty crash reported on
1050 * IPython/iplib.py (handle_normal): fix nasty crash reported on
1046 SAGE list, from improper log() calls.
1051 SAGE list, from improper log() calls.
1047
1052
1048 2006-05-31 Ville Vainio <vivainio@gmail.com>
1053 2006-05-31 Ville Vainio <vivainio@gmail.com>
1049
1054
1050 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
1055 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
1051 with args in parens to work correctly with dirs that have spaces.
1056 with args in parens to work correctly with dirs that have spaces.
1052
1057
1053 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
1058 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
1054
1059
1055 * IPython/Logger.py (Logger.logstart): add option to log raw input
1060 * IPython/Logger.py (Logger.logstart): add option to log raw input
1056 instead of the processed one. A -r flag was added to the
1061 instead of the processed one. A -r flag was added to the
1057 %logstart magic used for controlling logging.
1062 %logstart magic used for controlling logging.
1058
1063
1059 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
1064 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
1060
1065
1061 * IPython/iplib.py (InteractiveShell.__init__): add check for the
1066 * IPython/iplib.py (InteractiveShell.__init__): add check for the
1062 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
1067 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
1063 recognize the option. After a bug report by Will Maier. This
1068 recognize the option. After a bug report by Will Maier. This
1064 closes #64 (will do it after confirmation from W. Maier).
1069 closes #64 (will do it after confirmation from W. Maier).
1065
1070
1066 * IPython/irunner.py: New module to run scripts as if manually
1071 * IPython/irunner.py: New module to run scripts as if manually
1067 typed into an interactive environment, based on pexpect. After a
1072 typed into an interactive environment, based on pexpect. After a
1068 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
1073 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
1069 ipython-user list. Simple unittests in the tests/ directory.
1074 ipython-user list. Simple unittests in the tests/ directory.
1070
1075
1071 * tools/release: add Will Maier, OpenBSD port maintainer, to
1076 * tools/release: add Will Maier, OpenBSD port maintainer, to
1072 recepients list. We are now officially part of the OpenBSD ports:
1077 recepients list. We are now officially part of the OpenBSD ports:
1073 http://www.openbsd.org/ports.html ! Many thanks to Will for the
1078 http://www.openbsd.org/ports.html ! Many thanks to Will for the
1074 work.
1079 work.
1075
1080
1076 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
1081 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
1077
1082
1078 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
1083 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
1079 so that it doesn't break tkinter apps.
1084 so that it doesn't break tkinter apps.
1080
1085
1081 * IPython/iplib.py (_prefilter): fix bug where aliases would
1086 * IPython/iplib.py (_prefilter): fix bug where aliases would
1082 shadow variables when autocall was fully off. Reported by SAGE
1087 shadow variables when autocall was fully off. Reported by SAGE
1083 author William Stein.
1088 author William Stein.
1084
1089
1085 * IPython/OInspect.py (Inspector.__init__): add a flag to control
1090 * IPython/OInspect.py (Inspector.__init__): add a flag to control
1086 at what detail level strings are computed when foo? is requested.
1091 at what detail level strings are computed when foo? is requested.
1087 This allows users to ask for example that the string form of an
1092 This allows users to ask for example that the string form of an
1088 object is only computed when foo?? is called, or even never, by
1093 object is only computed when foo?? is called, or even never, by
1089 setting the object_info_string_level >= 2 in the configuration
1094 setting the object_info_string_level >= 2 in the configuration
1090 file. This new option has been added and documented. After a
1095 file. This new option has been added and documented. After a
1091 request by SAGE to be able to control the printing of very large
1096 request by SAGE to be able to control the printing of very large
1092 objects more easily.
1097 objects more easily.
1093
1098
1094 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
1099 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
1095
1100
1096 * IPython/ipmaker.py (make_IPython): remove the ipython call path
1101 * IPython/ipmaker.py (make_IPython): remove the ipython call path
1097 from sys.argv, to be 100% consistent with how Python itself works
1102 from sys.argv, to be 100% consistent with how Python itself works
1098 (as seen for example with python -i file.py). After a bug report
1103 (as seen for example with python -i file.py). After a bug report
1099 by Jeffrey Collins.
1104 by Jeffrey Collins.
1100
1105
1101 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
1106 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
1102 nasty bug which was preventing custom namespaces with -pylab,
1107 nasty bug which was preventing custom namespaces with -pylab,
1103 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
1108 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
1104 compatibility (long gone from mpl).
1109 compatibility (long gone from mpl).
1105
1110
1106 * IPython/ipapi.py (make_session): name change: create->make. We
1111 * IPython/ipapi.py (make_session): name change: create->make. We
1107 use make in other places (ipmaker,...), it's shorter and easier to
1112 use make in other places (ipmaker,...), it's shorter and easier to
1108 type and say, etc. I'm trying to clean things before 0.7.2 so
1113 type and say, etc. I'm trying to clean things before 0.7.2 so
1109 that I can keep things stable wrt to ipapi in the chainsaw branch.
1114 that I can keep things stable wrt to ipapi in the chainsaw branch.
1110
1115
1111 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
1116 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
1112 python-mode recognizes our debugger mode. Add support for
1117 python-mode recognizes our debugger mode. Add support for
1113 autoindent inside (X)emacs. After a patch sent in by Jin Liu
1118 autoindent inside (X)emacs. After a patch sent in by Jin Liu
1114 <m.liu.jin-AT-gmail.com> originally written by
1119 <m.liu.jin-AT-gmail.com> originally written by
1115 doxgen-AT-newsmth.net (with minor modifications for xemacs
1120 doxgen-AT-newsmth.net (with minor modifications for xemacs
1116 compatibility)
1121 compatibility)
1117
1122
1118 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
1123 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
1119 tracebacks when walking the stack so that the stack tracking system
1124 tracebacks when walking the stack so that the stack tracking system
1120 in emacs' python-mode can identify the frames correctly.
1125 in emacs' python-mode can identify the frames correctly.
1121
1126
1122 * IPython/ipmaker.py (make_IPython): make the internal (and
1127 * IPython/ipmaker.py (make_IPython): make the internal (and
1123 default config) autoedit_syntax value false by default. Too many
1128 default config) autoedit_syntax value false by default. Too many
1124 users have complained to me (both on and off-list) about problems
1129 users have complained to me (both on and off-list) about problems
1125 with this option being on by default, so I'm making it default to
1130 with this option being on by default, so I'm making it default to
1126 off. It can still be enabled by anyone via the usual mechanisms.
1131 off. It can still be enabled by anyone via the usual mechanisms.
1127
1132
1128 * IPython/completer.py (Completer.attr_matches): add support for
1133 * IPython/completer.py (Completer.attr_matches): add support for
1129 PyCrust-style _getAttributeNames magic method. Patch contributed
1134 PyCrust-style _getAttributeNames magic method. Patch contributed
1130 by <mscott-AT-goldenspud.com>. Closes #50.
1135 by <mscott-AT-goldenspud.com>. Closes #50.
1131
1136
1132 * IPython/iplib.py (InteractiveShell.__init__): remove the
1137 * IPython/iplib.py (InteractiveShell.__init__): remove the
1133 deletion of exit/quit from __builtin__, which can break
1138 deletion of exit/quit from __builtin__, which can break
1134 third-party tools like the Zope debugging console. The
1139 third-party tools like the Zope debugging console. The
1135 %exit/%quit magics remain. In general, it's probably a good idea
1140 %exit/%quit magics remain. In general, it's probably a good idea
1136 not to delete anything from __builtin__, since we never know what
1141 not to delete anything from __builtin__, since we never know what
1137 that will break. In any case, python now (for 2.5) will support
1142 that will break. In any case, python now (for 2.5) will support
1138 'real' exit/quit, so this issue is moot. Closes #55.
1143 'real' exit/quit, so this issue is moot. Closes #55.
1139
1144
1140 * IPython/genutils.py (with_obj): rename the 'with' function to
1145 * IPython/genutils.py (with_obj): rename the 'with' function to
1141 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
1146 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
1142 becomes a language keyword. Closes #53.
1147 becomes a language keyword. Closes #53.
1143
1148
1144 * IPython/FakeModule.py (FakeModule.__init__): add a proper
1149 * IPython/FakeModule.py (FakeModule.__init__): add a proper
1145 __file__ attribute to this so it fools more things into thinking
1150 __file__ attribute to this so it fools more things into thinking
1146 it is a real module. Closes #59.
1151 it is a real module. Closes #59.
1147
1152
1148 * IPython/Magic.py (magic_edit): add -n option to open the editor
1153 * IPython/Magic.py (magic_edit): add -n option to open the editor
1149 at a specific line number. After a patch by Stefan van der Walt.
1154 at a specific line number. After a patch by Stefan van der Walt.
1150
1155
1151 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
1156 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
1152
1157
1153 * IPython/iplib.py (edit_syntax_error): fix crash when for some
1158 * IPython/iplib.py (edit_syntax_error): fix crash when for some
1154 reason the file could not be opened. After automatic crash
1159 reason the file could not be opened. After automatic crash
1155 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
1160 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
1156 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
1161 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
1157 (_should_recompile): Don't fire editor if using %bg, since there
1162 (_should_recompile): Don't fire editor if using %bg, since there
1158 is no file in the first place. From the same report as above.
1163 is no file in the first place. From the same report as above.
1159 (raw_input): protect against faulty third-party prefilters. After
1164 (raw_input): protect against faulty third-party prefilters. After
1160 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
1165 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
1161 while running under SAGE.
1166 while running under SAGE.
1162
1167
1163 2006-05-23 Ville Vainio <vivainio@gmail.com>
1168 2006-05-23 Ville Vainio <vivainio@gmail.com>
1164
1169
1165 * ipapi.py: Stripped down ip.to_user_ns() to work only as
1170 * ipapi.py: Stripped down ip.to_user_ns() to work only as
1166 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
1171 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
1167 now returns None (again), unless dummy is specifically allowed by
1172 now returns None (again), unless dummy is specifically allowed by
1168 ipapi.get(allow_dummy=True).
1173 ipapi.get(allow_dummy=True).
1169
1174
1170 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
1175 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
1171
1176
1172 * IPython: remove all 2.2-compatibility objects and hacks from
1177 * IPython: remove all 2.2-compatibility objects and hacks from
1173 everywhere, since we only support 2.3 at this point. Docs
1178 everywhere, since we only support 2.3 at this point. Docs
1174 updated.
1179 updated.
1175
1180
1176 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
1181 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
1177 Anything requiring extra validation can be turned into a Python
1182 Anything requiring extra validation can be turned into a Python
1178 property in the future. I used a property for the db one b/c
1183 property in the future. I used a property for the db one b/c
1179 there was a nasty circularity problem with the initialization
1184 there was a nasty circularity problem with the initialization
1180 order, which right now I don't have time to clean up.
1185 order, which right now I don't have time to clean up.
1181
1186
1182 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
1187 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
1183 another locking bug reported by Jorgen. I'm not 100% sure though,
1188 another locking bug reported by Jorgen. I'm not 100% sure though,
1184 so more testing is needed...
1189 so more testing is needed...
1185
1190
1186 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
1191 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
1187
1192
1188 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
1193 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
1189 local variables from any routine in user code (typically executed
1194 local variables from any routine in user code (typically executed
1190 with %run) directly into the interactive namespace. Very useful
1195 with %run) directly into the interactive namespace. Very useful
1191 when doing complex debugging.
1196 when doing complex debugging.
1192 (IPythonNotRunning): Changed the default None object to a dummy
1197 (IPythonNotRunning): Changed the default None object to a dummy
1193 whose attributes can be queried as well as called without
1198 whose attributes can be queried as well as called without
1194 exploding, to ease writing code which works transparently both in
1199 exploding, to ease writing code which works transparently both in
1195 and out of ipython and uses some of this API.
1200 and out of ipython and uses some of this API.
1196
1201
1197 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
1202 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
1198
1203
1199 * IPython/hooks.py (result_display): Fix the fact that our display
1204 * IPython/hooks.py (result_display): Fix the fact that our display
1200 hook was using str() instead of repr(), as the default python
1205 hook was using str() instead of repr(), as the default python
1201 console does. This had gone unnoticed b/c it only happened if
1206 console does. This had gone unnoticed b/c it only happened if
1202 %Pprint was off, but the inconsistency was there.
1207 %Pprint was off, but the inconsistency was there.
1203
1208
1204 2006-05-15 Ville Vainio <vivainio@gmail.com>
1209 2006-05-15 Ville Vainio <vivainio@gmail.com>
1205
1210
1206 * Oinspect.py: Only show docstring for nonexisting/binary files
1211 * Oinspect.py: Only show docstring for nonexisting/binary files
1207 when doing object??, closing ticket #62
1212 when doing object??, closing ticket #62
1208
1213
1209 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
1214 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
1210
1215
1211 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
1216 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
1212 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
1217 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
1213 was being released in a routine which hadn't checked if it had
1218 was being released in a routine which hadn't checked if it had
1214 been the one to acquire it.
1219 been the one to acquire it.
1215
1220
1216 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
1221 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
1217
1222
1218 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
1223 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
1219
1224
1220 2006-04-11 Ville Vainio <vivainio@gmail.com>
1225 2006-04-11 Ville Vainio <vivainio@gmail.com>
1221
1226
1222 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
1227 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
1223 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
1228 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
1224 prefilters, allowing stuff like magics and aliases in the file.
1229 prefilters, allowing stuff like magics and aliases in the file.
1225
1230
1226 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
1231 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
1227 added. Supported now are "%clear in" and "%clear out" (clear input and
1232 added. Supported now are "%clear in" and "%clear out" (clear input and
1228 output history, respectively). Also fixed CachedOutput.flush to
1233 output history, respectively). Also fixed CachedOutput.flush to
1229 properly flush the output cache.
1234 properly flush the output cache.
1230
1235
1231 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
1236 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
1232 half-success (and fail explicitly).
1237 half-success (and fail explicitly).
1233
1238
1234 2006-03-28 Ville Vainio <vivainio@gmail.com>
1239 2006-03-28 Ville Vainio <vivainio@gmail.com>
1235
1240
1236 * iplib.py: Fix quoting of aliases so that only argless ones
1241 * iplib.py: Fix quoting of aliases so that only argless ones
1237 are quoted
1242 are quoted
1238
1243
1239 2006-03-28 Ville Vainio <vivainio@gmail.com>
1244 2006-03-28 Ville Vainio <vivainio@gmail.com>
1240
1245
1241 * iplib.py: Quote aliases with spaces in the name.
1246 * iplib.py: Quote aliases with spaces in the name.
1242 "c:\program files\blah\bin" is now legal alias target.
1247 "c:\program files\blah\bin" is now legal alias target.
1243
1248
1244 * ext_rehashdir.py: Space no longer allowed as arg
1249 * ext_rehashdir.py: Space no longer allowed as arg
1245 separator, since space is legal in path names.
1250 separator, since space is legal in path names.
1246
1251
1247 2006-03-16 Ville Vainio <vivainio@gmail.com>
1252 2006-03-16 Ville Vainio <vivainio@gmail.com>
1248
1253
1249 * upgrade_dir.py: Take path.py from Extensions, correcting
1254 * upgrade_dir.py: Take path.py from Extensions, correcting
1250 %upgrade magic
1255 %upgrade magic
1251
1256
1252 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
1257 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
1253
1258
1254 * hooks.py: Only enclose editor binary in quotes if legal and
1259 * hooks.py: Only enclose editor binary in quotes if legal and
1255 necessary (space in the name, and is an existing file). Fixes a bug
1260 necessary (space in the name, and is an existing file). Fixes a bug
1256 reported by Zachary Pincus.
1261 reported by Zachary Pincus.
1257
1262
1258 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
1263 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
1259
1264
1260 * Manual: thanks to a tip on proper color handling for Emacs, by
1265 * Manual: thanks to a tip on proper color handling for Emacs, by
1261 Eric J Haywiser <ejh1-AT-MIT.EDU>.
1266 Eric J Haywiser <ejh1-AT-MIT.EDU>.
1262
1267
1263 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
1268 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
1264 by applying the provided patch. Thanks to Liu Jin
1269 by applying the provided patch. Thanks to Liu Jin
1265 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
1270 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
1266 XEmacs/Linux, I'm trusting the submitter that it actually helps
1271 XEmacs/Linux, I'm trusting the submitter that it actually helps
1267 under win32/GNU Emacs. Will revisit if any problems are reported.
1272 under win32/GNU Emacs. Will revisit if any problems are reported.
1268
1273
1269 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1274 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1270
1275
1271 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
1276 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
1272 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
1277 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
1273
1278
1274 2006-03-12 Ville Vainio <vivainio@gmail.com>
1279 2006-03-12 Ville Vainio <vivainio@gmail.com>
1275
1280
1276 * Magic.py (magic_timeit): Added %timeit magic, contributed by
1281 * Magic.py (magic_timeit): Added %timeit magic, contributed by
1277 Torsten Marek.
1282 Torsten Marek.
1278
1283
1279 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1284 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1280
1285
1281 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
1286 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
1282 line ranges works again.
1287 line ranges works again.
1283
1288
1284 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
1289 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
1285
1290
1286 * IPython/iplib.py (showtraceback): add back sys.last_traceback
1291 * IPython/iplib.py (showtraceback): add back sys.last_traceback
1287 and friends, after a discussion with Zach Pincus on ipython-user.
1292 and friends, after a discussion with Zach Pincus on ipython-user.
1288 I'm not 100% sure, but after thinking about it quite a bit, it may
1293 I'm not 100% sure, but after thinking about it quite a bit, it may
1289 be OK. Testing with the multithreaded shells didn't reveal any
1294 be OK. Testing with the multithreaded shells didn't reveal any
1290 problems, but let's keep an eye out.
1295 problems, but let's keep an eye out.
1291
1296
1292 In the process, I fixed a few things which were calling
1297 In the process, I fixed a few things which were calling
1293 self.InteractiveTB() directly (like safe_execfile), which is a
1298 self.InteractiveTB() directly (like safe_execfile), which is a
1294 mistake: ALL exception reporting should be done by calling
1299 mistake: ALL exception reporting should be done by calling
1295 self.showtraceback(), which handles state and tab-completion and
1300 self.showtraceback(), which handles state and tab-completion and
1296 more.
1301 more.
1297
1302
1298 2006-03-01 Ville Vainio <vivainio@gmail.com>
1303 2006-03-01 Ville Vainio <vivainio@gmail.com>
1299
1304
1300 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
1305 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
1301 To use, do "from ipipe import *".
1306 To use, do "from ipipe import *".
1302
1307
1303 2006-02-24 Ville Vainio <vivainio@gmail.com>
1308 2006-02-24 Ville Vainio <vivainio@gmail.com>
1304
1309
1305 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
1310 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
1306 "cleanly" and safely than the older upgrade mechanism.
1311 "cleanly" and safely than the older upgrade mechanism.
1307
1312
1308 2006-02-21 Ville Vainio <vivainio@gmail.com>
1313 2006-02-21 Ville Vainio <vivainio@gmail.com>
1309
1314
1310 * Magic.py: %save works again.
1315 * Magic.py: %save works again.
1311
1316
1312 2006-02-15 Ville Vainio <vivainio@gmail.com>
1317 2006-02-15 Ville Vainio <vivainio@gmail.com>
1313
1318
1314 * Magic.py: %Pprint works again
1319 * Magic.py: %Pprint works again
1315
1320
1316 * Extensions/ipy_sane_defaults.py: Provide everything provided
1321 * Extensions/ipy_sane_defaults.py: Provide everything provided
1317 in default ipythonrc, to make it possible to have a completely empty
1322 in default ipythonrc, to make it possible to have a completely empty
1318 ipythonrc (and thus completely rc-file free configuration)
1323 ipythonrc (and thus completely rc-file free configuration)
1319
1324
1320 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
1325 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
1321
1326
1322 * IPython/hooks.py (editor): quote the call to the editor command,
1327 * IPython/hooks.py (editor): quote the call to the editor command,
1323 to allow commands with spaces in them. Problem noted by watching
1328 to allow commands with spaces in them. Problem noted by watching
1324 Ian Oswald's video about textpad under win32 at
1329 Ian Oswald's video about textpad under win32 at
1325 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
1330 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
1326
1331
1327 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
1332 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
1328 describing magics (we haven't used @ for a loong time).
1333 describing magics (we haven't used @ for a loong time).
1329
1334
1330 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
1335 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
1331 contributed by marienz to close
1336 contributed by marienz to close
1332 http://www.scipy.net/roundup/ipython/issue53.
1337 http://www.scipy.net/roundup/ipython/issue53.
1333
1338
1334 2006-02-10 Ville Vainio <vivainio@gmail.com>
1339 2006-02-10 Ville Vainio <vivainio@gmail.com>
1335
1340
1336 * genutils.py: getoutput now works in win32 too
1341 * genutils.py: getoutput now works in win32 too
1337
1342
1338 * completer.py: alias and magic completion only invoked
1343 * completer.py: alias and magic completion only invoked
1339 at the first "item" in the line, to avoid "cd %store"
1344 at the first "item" in the line, to avoid "cd %store"
1340 nonsense.
1345 nonsense.
1341
1346
1342 2006-02-09 Ville Vainio <vivainio@gmail.com>
1347 2006-02-09 Ville Vainio <vivainio@gmail.com>
1343
1348
1344 * test/*: Added a unit testing framework (finally).
1349 * test/*: Added a unit testing framework (finally).
1345 '%run runtests.py' to run test_*.
1350 '%run runtests.py' to run test_*.
1346
1351
1347 * ipapi.py: Exposed runlines and set_custom_exc
1352 * ipapi.py: Exposed runlines and set_custom_exc
1348
1353
1349 2006-02-07 Ville Vainio <vivainio@gmail.com>
1354 2006-02-07 Ville Vainio <vivainio@gmail.com>
1350
1355
1351 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
1356 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
1352 instead use "f(1 2)" as before.
1357 instead use "f(1 2)" as before.
1353
1358
1354 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
1359 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
1355
1360
1356 * IPython/demo.py (IPythonDemo): Add new classes to the demo
1361 * IPython/demo.py (IPythonDemo): Add new classes to the demo
1357 facilities, for demos processed by the IPython input filter
1362 facilities, for demos processed by the IPython input filter
1358 (IPythonDemo), and for running a script one-line-at-a-time as a
1363 (IPythonDemo), and for running a script one-line-at-a-time as a
1359 demo, both for pure Python (LineDemo) and for IPython-processed
1364 demo, both for pure Python (LineDemo) and for IPython-processed
1360 input (IPythonLineDemo). After a request by Dave Kohel, from the
1365 input (IPythonLineDemo). After a request by Dave Kohel, from the
1361 SAGE team.
1366 SAGE team.
1362 (Demo.edit): added an edit() method to the demo objects, to edit
1367 (Demo.edit): added an edit() method to the demo objects, to edit
1363 the in-memory copy of the last executed block.
1368 the in-memory copy of the last executed block.
1364
1369
1365 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
1370 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
1366 processing to %edit, %macro and %save. These commands can now be
1371 processing to %edit, %macro and %save. These commands can now be
1367 invoked on the unprocessed input as it was typed by the user
1372 invoked on the unprocessed input as it was typed by the user
1368 (without any prefilters applied). After requests by the SAGE team
1373 (without any prefilters applied). After requests by the SAGE team
1369 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
1374 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
1370
1375
1371 2006-02-01 Ville Vainio <vivainio@gmail.com>
1376 2006-02-01 Ville Vainio <vivainio@gmail.com>
1372
1377
1373 * setup.py, eggsetup.py: easy_install ipython==dev works
1378 * setup.py, eggsetup.py: easy_install ipython==dev works
1374 correctly now (on Linux)
1379 correctly now (on Linux)
1375
1380
1376 * ipy_user_conf,ipmaker: user config changes, removed spurious
1381 * ipy_user_conf,ipmaker: user config changes, removed spurious
1377 warnings
1382 warnings
1378
1383
1379 * iplib: if rc.banner is string, use it as is.
1384 * iplib: if rc.banner is string, use it as is.
1380
1385
1381 * Magic: %pycat accepts a string argument and pages it's contents.
1386 * Magic: %pycat accepts a string argument and pages it's contents.
1382
1387
1383
1388
1384 2006-01-30 Ville Vainio <vivainio@gmail.com>
1389 2006-01-30 Ville Vainio <vivainio@gmail.com>
1385
1390
1386 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
1391 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
1387 Now %store and bookmarks work through PickleShare, meaning that
1392 Now %store and bookmarks work through PickleShare, meaning that
1388 concurrent access is possible and all ipython sessions see the
1393 concurrent access is possible and all ipython sessions see the
1389 same database situation all the time, instead of snapshot of
1394 same database situation all the time, instead of snapshot of
1390 the situation when the session was started. Hence, %bookmark
1395 the situation when the session was started. Hence, %bookmark
1391 results are immediately accessible from othes sessions. The database
1396 results are immediately accessible from othes sessions. The database
1392 is also available for use by user extensions. See:
1397 is also available for use by user extensions. See:
1393 http://www.python.org/pypi/pickleshare
1398 http://www.python.org/pypi/pickleshare
1394
1399
1395 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
1400 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
1396
1401
1397 * aliases can now be %store'd
1402 * aliases can now be %store'd
1398
1403
1399 * path.py moved to Extensions so that pickleshare does not need
1404 * path.py moved to Extensions so that pickleshare does not need
1400 IPython-specific import. Extensions added to pythonpath right
1405 IPython-specific import. Extensions added to pythonpath right
1401 at __init__.
1406 at __init__.
1402
1407
1403 * iplib.py: ipalias deprecated/redundant; aliases are converted and
1408 * iplib.py: ipalias deprecated/redundant; aliases are converted and
1404 called with _ip.system and the pre-transformed command string.
1409 called with _ip.system and the pre-transformed command string.
1405
1410
1406 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
1411 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
1407
1412
1408 * IPython/iplib.py (interact): Fix that we were not catching
1413 * IPython/iplib.py (interact): Fix that we were not catching
1409 KeyboardInterrupt exceptions properly. I'm not quite sure why the
1414 KeyboardInterrupt exceptions properly. I'm not quite sure why the
1410 logic here had to change, but it's fixed now.
1415 logic here had to change, but it's fixed now.
1411
1416
1412 2006-01-29 Ville Vainio <vivainio@gmail.com>
1417 2006-01-29 Ville Vainio <vivainio@gmail.com>
1413
1418
1414 * iplib.py: Try to import pyreadline on Windows.
1419 * iplib.py: Try to import pyreadline on Windows.
1415
1420
1416 2006-01-27 Ville Vainio <vivainio@gmail.com>
1421 2006-01-27 Ville Vainio <vivainio@gmail.com>
1417
1422
1418 * iplib.py: Expose ipapi as _ip in builtin namespace.
1423 * iplib.py: Expose ipapi as _ip in builtin namespace.
1419 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
1424 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
1420 and ip_set_hook (-> _ip.set_hook) redundant. % and !
1425 and ip_set_hook (-> _ip.set_hook) redundant. % and !
1421 syntax now produce _ip.* variant of the commands.
1426 syntax now produce _ip.* variant of the commands.
1422
1427
1423 * "_ip.options().autoedit_syntax = 2" automatically throws
1428 * "_ip.options().autoedit_syntax = 2" automatically throws
1424 user to editor for syntax error correction without prompting.
1429 user to editor for syntax error correction without prompting.
1425
1430
1426 2006-01-27 Ville Vainio <vivainio@gmail.com>
1431 2006-01-27 Ville Vainio <vivainio@gmail.com>
1427
1432
1428 * ipmaker.py: Give "realistic" sys.argv for scripts (without
1433 * ipmaker.py: Give "realistic" sys.argv for scripts (without
1429 'ipython' at argv[0]) executed through command line.
1434 'ipython' at argv[0]) executed through command line.
1430 NOTE: this DEPRECATES calling ipython with multiple scripts
1435 NOTE: this DEPRECATES calling ipython with multiple scripts
1431 ("ipython a.py b.py c.py")
1436 ("ipython a.py b.py c.py")
1432
1437
1433 * iplib.py, hooks.py: Added configurable input prefilter,
1438 * iplib.py, hooks.py: Added configurable input prefilter,
1434 named 'input_prefilter'. See ext_rescapture.py for example
1439 named 'input_prefilter'. See ext_rescapture.py for example
1435 usage.
1440 usage.
1436
1441
1437 * ext_rescapture.py, Magic.py: Better system command output capture
1442 * ext_rescapture.py, Magic.py: Better system command output capture
1438 through 'var = !ls' (deprecates user-visible %sc). Same notation
1443 through 'var = !ls' (deprecates user-visible %sc). Same notation
1439 applies for magics, 'var = %alias' assigns alias list to var.
1444 applies for magics, 'var = %alias' assigns alias list to var.
1440
1445
1441 * ipapi.py: added meta() for accessing extension-usable data store.
1446 * ipapi.py: added meta() for accessing extension-usable data store.
1442
1447
1443 * iplib.py: added InteractiveShell.getapi(). New magics should be
1448 * iplib.py: added InteractiveShell.getapi(). New magics should be
1444 written doing self.getapi() instead of using the shell directly.
1449 written doing self.getapi() instead of using the shell directly.
1445
1450
1446 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
1451 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
1447 %store foo >> ~/myfoo.txt to store variables to files (in clean
1452 %store foo >> ~/myfoo.txt to store variables to files (in clean
1448 textual form, not a restorable pickle).
1453 textual form, not a restorable pickle).
1449
1454
1450 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
1455 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
1451
1456
1452 * usage.py, Magic.py: added %quickref
1457 * usage.py, Magic.py: added %quickref
1453
1458
1454 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
1459 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
1455
1460
1456 * GetoptErrors when invoking magics etc. with wrong args
1461 * GetoptErrors when invoking magics etc. with wrong args
1457 are now more helpful:
1462 are now more helpful:
1458 GetoptError: option -l not recognized (allowed: "qb" )
1463 GetoptError: option -l not recognized (allowed: "qb" )
1459
1464
1460 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
1465 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
1461
1466
1462 * IPython/demo.py (Demo.show): Flush stdout after each block, so
1467 * IPython/demo.py (Demo.show): Flush stdout after each block, so
1463 computationally intensive blocks don't appear to stall the demo.
1468 computationally intensive blocks don't appear to stall the demo.
1464
1469
1465 2006-01-24 Ville Vainio <vivainio@gmail.com>
1470 2006-01-24 Ville Vainio <vivainio@gmail.com>
1466
1471
1467 * iplib.py, hooks.py: 'result_display' hook can return a non-None
1472 * iplib.py, hooks.py: 'result_display' hook can return a non-None
1468 value to manipulate resulting history entry.
1473 value to manipulate resulting history entry.
1469
1474
1470 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
1475 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
1471 to instance methods of IPApi class, to make extending an embedded
1476 to instance methods of IPApi class, to make extending an embedded
1472 IPython feasible. See ext_rehashdir.py for example usage.
1477 IPython feasible. See ext_rehashdir.py for example usage.
1473
1478
1474 * Merged 1071-1076 from branches/0.7.1
1479 * Merged 1071-1076 from branches/0.7.1
1475
1480
1476
1481
1477 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
1482 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
1478
1483
1479 * tools/release (daystamp): Fix build tools to use the new
1484 * tools/release (daystamp): Fix build tools to use the new
1480 eggsetup.py script to build lightweight eggs.
1485 eggsetup.py script to build lightweight eggs.
1481
1486
1482 * Applied changesets 1062 and 1064 before 0.7.1 release.
1487 * Applied changesets 1062 and 1064 before 0.7.1 release.
1483
1488
1484 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
1489 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
1485 see the raw input history (without conversions like %ls ->
1490 see the raw input history (without conversions like %ls ->
1486 ipmagic("ls")). After a request from W. Stein, SAGE
1491 ipmagic("ls")). After a request from W. Stein, SAGE
1487 (http://modular.ucsd.edu/sage) developer. This information is
1492 (http://modular.ucsd.edu/sage) developer. This information is
1488 stored in the input_hist_raw attribute of the IPython instance, so
1493 stored in the input_hist_raw attribute of the IPython instance, so
1489 developers can access it if needed (it's an InputList instance).
1494 developers can access it if needed (it's an InputList instance).
1490
1495
1491 * Versionstring = 0.7.2.svn
1496 * Versionstring = 0.7.2.svn
1492
1497
1493 * eggsetup.py: A separate script for constructing eggs, creates
1498 * eggsetup.py: A separate script for constructing eggs, creates
1494 proper launch scripts even on Windows (an .exe file in
1499 proper launch scripts even on Windows (an .exe file in
1495 \python24\scripts).
1500 \python24\scripts).
1496
1501
1497 * ipapi.py: launch_new_instance, launch entry point needed for the
1502 * ipapi.py: launch_new_instance, launch entry point needed for the
1498 egg.
1503 egg.
1499
1504
1500 2006-01-23 Ville Vainio <vivainio@gmail.com>
1505 2006-01-23 Ville Vainio <vivainio@gmail.com>
1501
1506
1502 * Added %cpaste magic for pasting python code
1507 * Added %cpaste magic for pasting python code
1503
1508
1504 2006-01-22 Ville Vainio <vivainio@gmail.com>
1509 2006-01-22 Ville Vainio <vivainio@gmail.com>
1505
1510
1506 * Merge from branches/0.7.1 into trunk, revs 1052-1057
1511 * Merge from branches/0.7.1 into trunk, revs 1052-1057
1507
1512
1508 * Versionstring = 0.7.2.svn
1513 * Versionstring = 0.7.2.svn
1509
1514
1510 * eggsetup.py: A separate script for constructing eggs, creates
1515 * eggsetup.py: A separate script for constructing eggs, creates
1511 proper launch scripts even on Windows (an .exe file in
1516 proper launch scripts even on Windows (an .exe file in
1512 \python24\scripts).
1517 \python24\scripts).
1513
1518
1514 * ipapi.py: launch_new_instance, launch entry point needed for the
1519 * ipapi.py: launch_new_instance, launch entry point needed for the
1515 egg.
1520 egg.
1516
1521
1517 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
1522 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
1518
1523
1519 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
1524 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
1520 %pfile foo would print the file for foo even if it was a binary.
1525 %pfile foo would print the file for foo even if it was a binary.
1521 Now, extensions '.so' and '.dll' are skipped.
1526 Now, extensions '.so' and '.dll' are skipped.
1522
1527
1523 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
1528 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
1524 bug, where macros would fail in all threaded modes. I'm not 100%
1529 bug, where macros would fail in all threaded modes. I'm not 100%
1525 sure, so I'm going to put out an rc instead of making a release
1530 sure, so I'm going to put out an rc instead of making a release
1526 today, and wait for feedback for at least a few days.
1531 today, and wait for feedback for at least a few days.
1527
1532
1528 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
1533 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
1529 it...) the handling of pasting external code with autoindent on.
1534 it...) the handling of pasting external code with autoindent on.
1530 To get out of a multiline input, the rule will appear for most
1535 To get out of a multiline input, the rule will appear for most
1531 users unchanged: two blank lines or change the indent level
1536 users unchanged: two blank lines or change the indent level
1532 proposed by IPython. But there is a twist now: you can
1537 proposed by IPython. But there is a twist now: you can
1533 add/subtract only *one or two spaces*. If you add/subtract three
1538 add/subtract only *one or two spaces*. If you add/subtract three
1534 or more (unless you completely delete the line), IPython will
1539 or more (unless you completely delete the line), IPython will
1535 accept that line, and you'll need to enter a second one of pure
1540 accept that line, and you'll need to enter a second one of pure
1536 whitespace. I know it sounds complicated, but I can't find a
1541 whitespace. I know it sounds complicated, but I can't find a
1537 different solution that covers all the cases, with the right
1542 different solution that covers all the cases, with the right
1538 heuristics. Hopefully in actual use, nobody will really notice
1543 heuristics. Hopefully in actual use, nobody will really notice
1539 all these strange rules and things will 'just work'.
1544 all these strange rules and things will 'just work'.
1540
1545
1541 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
1546 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
1542
1547
1543 * IPython/iplib.py (interact): catch exceptions which can be
1548 * IPython/iplib.py (interact): catch exceptions which can be
1544 triggered asynchronously by signal handlers. Thanks to an
1549 triggered asynchronously by signal handlers. Thanks to an
1545 automatic crash report, submitted by Colin Kingsley
1550 automatic crash report, submitted by Colin Kingsley
1546 <tercel-AT-gentoo.org>.
1551 <tercel-AT-gentoo.org>.
1547
1552
1548 2006-01-20 Ville Vainio <vivainio@gmail.com>
1553 2006-01-20 Ville Vainio <vivainio@gmail.com>
1549
1554
1550 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
1555 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
1551 (%rehashdir, very useful, try it out) of how to extend ipython
1556 (%rehashdir, very useful, try it out) of how to extend ipython
1552 with new magics. Also added Extensions dir to pythonpath to make
1557 with new magics. Also added Extensions dir to pythonpath to make
1553 importing extensions easy.
1558 importing extensions easy.
1554
1559
1555 * %store now complains when trying to store interactively declared
1560 * %store now complains when trying to store interactively declared
1556 classes / instances of those classes.
1561 classes / instances of those classes.
1557
1562
1558 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
1563 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
1559 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
1564 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
1560 if they exist, and ipy_user_conf.py with some defaults is created for
1565 if they exist, and ipy_user_conf.py with some defaults is created for
1561 the user.
1566 the user.
1562
1567
1563 * Startup rehashing done by the config file, not InterpreterExec.
1568 * Startup rehashing done by the config file, not InterpreterExec.
1564 This means system commands are available even without selecting the
1569 This means system commands are available even without selecting the
1565 pysh profile. It's the sensible default after all.
1570 pysh profile. It's the sensible default after all.
1566
1571
1567 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
1572 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
1568
1573
1569 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
1574 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
1570 multiline code with autoindent on working. But I am really not
1575 multiline code with autoindent on working. But I am really not
1571 sure, so this needs more testing. Will commit a debug-enabled
1576 sure, so this needs more testing. Will commit a debug-enabled
1572 version for now, while I test it some more, so that Ville and
1577 version for now, while I test it some more, so that Ville and
1573 others may also catch any problems. Also made
1578 others may also catch any problems. Also made
1574 self.indent_current_str() a method, to ensure that there's no
1579 self.indent_current_str() a method, to ensure that there's no
1575 chance of the indent space count and the corresponding string
1580 chance of the indent space count and the corresponding string
1576 falling out of sync. All code needing the string should just call
1581 falling out of sync. All code needing the string should just call
1577 the method.
1582 the method.
1578
1583
1579 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
1584 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
1580
1585
1581 * IPython/Magic.py (magic_edit): fix check for when users don't
1586 * IPython/Magic.py (magic_edit): fix check for when users don't
1582 save their output files, the try/except was in the wrong section.
1587 save their output files, the try/except was in the wrong section.
1583
1588
1584 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
1589 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
1585
1590
1586 * IPython/Magic.py (magic_run): fix __file__ global missing from
1591 * IPython/Magic.py (magic_run): fix __file__ global missing from
1587 script's namespace when executed via %run. After a report by
1592 script's namespace when executed via %run. After a report by
1588 Vivian.
1593 Vivian.
1589
1594
1590 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
1595 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
1591 when using python 2.4. The parent constructor changed in 2.4, and
1596 when using python 2.4. The parent constructor changed in 2.4, and
1592 we need to track it directly (we can't call it, as it messes up
1597 we need to track it directly (we can't call it, as it messes up
1593 readline and tab-completion inside our pdb would stop working).
1598 readline and tab-completion inside our pdb would stop working).
1594 After a bug report by R. Bernstein <rocky-AT-panix.com>.
1599 After a bug report by R. Bernstein <rocky-AT-panix.com>.
1595
1600
1596 2006-01-16 Ville Vainio <vivainio@gmail.com>
1601 2006-01-16 Ville Vainio <vivainio@gmail.com>
1597
1602
1598 * Ipython/magic.py: Reverted back to old %edit functionality
1603 * Ipython/magic.py: Reverted back to old %edit functionality
1599 that returns file contents on exit.
1604 that returns file contents on exit.
1600
1605
1601 * IPython/path.py: Added Jason Orendorff's "path" module to
1606 * IPython/path.py: Added Jason Orendorff's "path" module to
1602 IPython tree, http://www.jorendorff.com/articles/python/path/.
1607 IPython tree, http://www.jorendorff.com/articles/python/path/.
1603 You can get path objects conveniently through %sc, and !!, e.g.:
1608 You can get path objects conveniently through %sc, and !!, e.g.:
1604 sc files=ls
1609 sc files=ls
1605 for p in files.paths: # or files.p
1610 for p in files.paths: # or files.p
1606 print p,p.mtime
1611 print p,p.mtime
1607
1612
1608 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
1613 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
1609 now work again without considering the exclusion regexp -
1614 now work again without considering the exclusion regexp -
1610 hence, things like ',foo my/path' turn to 'foo("my/path")'
1615 hence, things like ',foo my/path' turn to 'foo("my/path")'
1611 instead of syntax error.
1616 instead of syntax error.
1612
1617
1613
1618
1614 2006-01-14 Ville Vainio <vivainio@gmail.com>
1619 2006-01-14 Ville Vainio <vivainio@gmail.com>
1615
1620
1616 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
1621 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
1617 ipapi decorators for python 2.4 users, options() provides access to rc
1622 ipapi decorators for python 2.4 users, options() provides access to rc
1618 data.
1623 data.
1619
1624
1620 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
1625 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
1621 as path separators (even on Linux ;-). Space character after
1626 as path separators (even on Linux ;-). Space character after
1622 backslash (as yielded by tab completer) is still space;
1627 backslash (as yielded by tab completer) is still space;
1623 "%cd long\ name" works as expected.
1628 "%cd long\ name" works as expected.
1624
1629
1625 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
1630 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
1626 as "chain of command", with priority. API stays the same,
1631 as "chain of command", with priority. API stays the same,
1627 TryNext exception raised by a hook function signals that
1632 TryNext exception raised by a hook function signals that
1628 current hook failed and next hook should try handling it, as
1633 current hook failed and next hook should try handling it, as
1629 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
1634 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
1630 requested configurable display hook, which is now implemented.
1635 requested configurable display hook, which is now implemented.
1631
1636
1632 2006-01-13 Ville Vainio <vivainio@gmail.com>
1637 2006-01-13 Ville Vainio <vivainio@gmail.com>
1633
1638
1634 * IPython/platutils*.py: platform specific utility functions,
1639 * IPython/platutils*.py: platform specific utility functions,
1635 so far only set_term_title is implemented (change terminal
1640 so far only set_term_title is implemented (change terminal
1636 label in windowing systems). %cd now changes the title to
1641 label in windowing systems). %cd now changes the title to
1637 current dir.
1642 current dir.
1638
1643
1639 * IPython/Release.py: Added myself to "authors" list,
1644 * IPython/Release.py: Added myself to "authors" list,
1640 had to create new files.
1645 had to create new files.
1641
1646
1642 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
1647 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
1643 shell escape; not a known bug but had potential to be one in the
1648 shell escape; not a known bug but had potential to be one in the
1644 future.
1649 future.
1645
1650
1646 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
1651 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
1647 extension API for IPython! See the module for usage example. Fix
1652 extension API for IPython! See the module for usage example. Fix
1648 OInspect for docstring-less magic functions.
1653 OInspect for docstring-less magic functions.
1649
1654
1650
1655
1651 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
1656 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
1652
1657
1653 * IPython/iplib.py (raw_input): temporarily deactivate all
1658 * IPython/iplib.py (raw_input): temporarily deactivate all
1654 attempts at allowing pasting of code with autoindent on. It
1659 attempts at allowing pasting of code with autoindent on. It
1655 introduced bugs (reported by Prabhu) and I can't seem to find a
1660 introduced bugs (reported by Prabhu) and I can't seem to find a
1656 robust combination which works in all cases. Will have to revisit
1661 robust combination which works in all cases. Will have to revisit
1657 later.
1662 later.
1658
1663
1659 * IPython/genutils.py: remove isspace() function. We've dropped
1664 * IPython/genutils.py: remove isspace() function. We've dropped
1660 2.2 compatibility, so it's OK to use the string method.
1665 2.2 compatibility, so it's OK to use the string method.
1661
1666
1662 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
1667 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
1663
1668
1664 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
1669 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
1665 matching what NOT to autocall on, to include all python binary
1670 matching what NOT to autocall on, to include all python binary
1666 operators (including things like 'and', 'or', 'is' and 'in').
1671 operators (including things like 'and', 'or', 'is' and 'in').
1667 Prompted by a bug report on 'foo & bar', but I realized we had
1672 Prompted by a bug report on 'foo & bar', but I realized we had
1668 many more potential bug cases with other operators. The regexp is
1673 many more potential bug cases with other operators. The regexp is
1669 self.re_exclude_auto, it's fairly commented.
1674 self.re_exclude_auto, it's fairly commented.
1670
1675
1671 2006-01-12 Ville Vainio <vivainio@gmail.com>
1676 2006-01-12 Ville Vainio <vivainio@gmail.com>
1672
1677
1673 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
1678 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
1674 Prettified and hardened string/backslash quoting with ipsystem(),
1679 Prettified and hardened string/backslash quoting with ipsystem(),
1675 ipalias() and ipmagic(). Now even \ characters are passed to
1680 ipalias() and ipmagic(). Now even \ characters are passed to
1676 %magics, !shell escapes and aliases exactly as they are in the
1681 %magics, !shell escapes and aliases exactly as they are in the
1677 ipython command line. Should improve backslash experience,
1682 ipython command line. Should improve backslash experience,
1678 particularly in Windows (path delimiter for some commands that
1683 particularly in Windows (path delimiter for some commands that
1679 won't understand '/'), but Unix benefits as well (regexps). %cd
1684 won't understand '/'), but Unix benefits as well (regexps). %cd
1680 magic still doesn't support backslash path delimiters, though. Also
1685 magic still doesn't support backslash path delimiters, though. Also
1681 deleted all pretense of supporting multiline command strings in
1686 deleted all pretense of supporting multiline command strings in
1682 !system or %magic commands. Thanks to Jerry McRae for suggestions.
1687 !system or %magic commands. Thanks to Jerry McRae for suggestions.
1683
1688
1684 * doc/build_doc_instructions.txt added. Documentation on how to
1689 * doc/build_doc_instructions.txt added. Documentation on how to
1685 use doc/update_manual.py, added yesterday. Both files contributed
1690 use doc/update_manual.py, added yesterday. Both files contributed
1686 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
1691 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
1687 doc/*.sh for deprecation at a later date.
1692 doc/*.sh for deprecation at a later date.
1688
1693
1689 * /ipython.py Added ipython.py to root directory for
1694 * /ipython.py Added ipython.py to root directory for
1690 zero-installation (tar xzvf ipython.tgz; cd ipython; python
1695 zero-installation (tar xzvf ipython.tgz; cd ipython; python
1691 ipython.py) and development convenience (no need to keep doing
1696 ipython.py) and development convenience (no need to keep doing
1692 "setup.py install" between changes).
1697 "setup.py install" between changes).
1693
1698
1694 * Made ! and !! shell escapes work (again) in multiline expressions:
1699 * Made ! and !! shell escapes work (again) in multiline expressions:
1695 if 1:
1700 if 1:
1696 !ls
1701 !ls
1697 !!ls
1702 !!ls
1698
1703
1699 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
1704 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
1700
1705
1701 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
1706 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
1702 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
1707 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
1703 module in case-insensitive installation. Was causing crashes
1708 module in case-insensitive installation. Was causing crashes
1704 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
1709 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
1705
1710
1706 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
1711 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
1707 <marienz-AT-gentoo.org>, closes
1712 <marienz-AT-gentoo.org>, closes
1708 http://www.scipy.net/roundup/ipython/issue51.
1713 http://www.scipy.net/roundup/ipython/issue51.
1709
1714
1710 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
1715 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
1711
1716
1712 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
1717 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
1713 problem of excessive CPU usage under *nix and keyboard lag under
1718 problem of excessive CPU usage under *nix and keyboard lag under
1714 win32.
1719 win32.
1715
1720
1716 2006-01-10 *** Released version 0.7.0
1721 2006-01-10 *** Released version 0.7.0
1717
1722
1718 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
1723 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
1719
1724
1720 * IPython/Release.py (revision): tag version number to 0.7.0,
1725 * IPython/Release.py (revision): tag version number to 0.7.0,
1721 ready for release.
1726 ready for release.
1722
1727
1723 * IPython/Magic.py (magic_edit): Add print statement to %edit so
1728 * IPython/Magic.py (magic_edit): Add print statement to %edit so
1724 it informs the user of the name of the temp. file used. This can
1729 it informs the user of the name of the temp. file used. This can
1725 help if you decide later to reuse that same file, so you know
1730 help if you decide later to reuse that same file, so you know
1726 where to copy the info from.
1731 where to copy the info from.
1727
1732
1728 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
1733 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
1729
1734
1730 * setup_bdist_egg.py: little script to build an egg. Added
1735 * setup_bdist_egg.py: little script to build an egg. Added
1731 support in the release tools as well.
1736 support in the release tools as well.
1732
1737
1733 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
1738 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
1734
1739
1735 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
1740 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
1736 version selection (new -wxversion command line and ipythonrc
1741 version selection (new -wxversion command line and ipythonrc
1737 parameter). Patch contributed by Arnd Baecker
1742 parameter). Patch contributed by Arnd Baecker
1738 <arnd.baecker-AT-web.de>.
1743 <arnd.baecker-AT-web.de>.
1739
1744
1740 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1745 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1741 embedded instances, for variables defined at the interactive
1746 embedded instances, for variables defined at the interactive
1742 prompt of the embedded ipython. Reported by Arnd.
1747 prompt of the embedded ipython. Reported by Arnd.
1743
1748
1744 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
1749 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
1745 it can be used as a (stateful) toggle, or with a direct parameter.
1750 it can be used as a (stateful) toggle, or with a direct parameter.
1746
1751
1747 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
1752 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
1748 could be triggered in certain cases and cause the traceback
1753 could be triggered in certain cases and cause the traceback
1749 printer not to work.
1754 printer not to work.
1750
1755
1751 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
1756 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
1752
1757
1753 * IPython/iplib.py (_should_recompile): Small fix, closes
1758 * IPython/iplib.py (_should_recompile): Small fix, closes
1754 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
1759 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
1755
1760
1756 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
1761 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
1757
1762
1758 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
1763 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
1759 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
1764 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
1760 Moad for help with tracking it down.
1765 Moad for help with tracking it down.
1761
1766
1762 * IPython/iplib.py (handle_auto): fix autocall handling for
1767 * IPython/iplib.py (handle_auto): fix autocall handling for
1763 objects which support BOTH __getitem__ and __call__ (so that f [x]
1768 objects which support BOTH __getitem__ and __call__ (so that f [x]
1764 is left alone, instead of becoming f([x]) automatically).
1769 is left alone, instead of becoming f([x]) automatically).
1765
1770
1766 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
1771 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
1767 Ville's patch.
1772 Ville's patch.
1768
1773
1769 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
1774 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
1770
1775
1771 * IPython/iplib.py (handle_auto): changed autocall semantics to
1776 * IPython/iplib.py (handle_auto): changed autocall semantics to
1772 include 'smart' mode, where the autocall transformation is NOT
1777 include 'smart' mode, where the autocall transformation is NOT
1773 applied if there are no arguments on the line. This allows you to
1778 applied if there are no arguments on the line. This allows you to
1774 just type 'foo' if foo is a callable to see its internal form,
1779 just type 'foo' if foo is a callable to see its internal form,
1775 instead of having it called with no arguments (typically a
1780 instead of having it called with no arguments (typically a
1776 mistake). The old 'full' autocall still exists: for that, you
1781 mistake). The old 'full' autocall still exists: for that, you
1777 need to set the 'autocall' parameter to 2 in your ipythonrc file.
1782 need to set the 'autocall' parameter to 2 in your ipythonrc file.
1778
1783
1779 * IPython/completer.py (Completer.attr_matches): add
1784 * IPython/completer.py (Completer.attr_matches): add
1780 tab-completion support for Enthoughts' traits. After a report by
1785 tab-completion support for Enthoughts' traits. After a report by
1781 Arnd and a patch by Prabhu.
1786 Arnd and a patch by Prabhu.
1782
1787
1783 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
1788 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
1784
1789
1785 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
1790 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
1786 Schmolck's patch to fix inspect.getinnerframes().
1791 Schmolck's patch to fix inspect.getinnerframes().
1787
1792
1788 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
1793 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
1789 for embedded instances, regarding handling of namespaces and items
1794 for embedded instances, regarding handling of namespaces and items
1790 added to the __builtin__ one. Multiple embedded instances and
1795 added to the __builtin__ one. Multiple embedded instances and
1791 recursive embeddings should work better now (though I'm not sure
1796 recursive embeddings should work better now (though I'm not sure
1792 I've got all the corner cases fixed, that code is a bit of a brain
1797 I've got all the corner cases fixed, that code is a bit of a brain
1793 twister).
1798 twister).
1794
1799
1795 * IPython/Magic.py (magic_edit): added support to edit in-memory
1800 * IPython/Magic.py (magic_edit): added support to edit in-memory
1796 macros (automatically creates the necessary temp files). %edit
1801 macros (automatically creates the necessary temp files). %edit
1797 also doesn't return the file contents anymore, it's just noise.
1802 also doesn't return the file contents anymore, it's just noise.
1798
1803
1799 * IPython/completer.py (Completer.attr_matches): revert change to
1804 * IPython/completer.py (Completer.attr_matches): revert change to
1800 complete only on attributes listed in __all__. I realized it
1805 complete only on attributes listed in __all__. I realized it
1801 cripples the tab-completion system as a tool for exploring the
1806 cripples the tab-completion system as a tool for exploring the
1802 internals of unknown libraries (it renders any non-__all__
1807 internals of unknown libraries (it renders any non-__all__
1803 attribute off-limits). I got bit by this when trying to see
1808 attribute off-limits). I got bit by this when trying to see
1804 something inside the dis module.
1809 something inside the dis module.
1805
1810
1806 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
1811 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
1807
1812
1808 * IPython/iplib.py (InteractiveShell.__init__): add .meta
1813 * IPython/iplib.py (InteractiveShell.__init__): add .meta
1809 namespace for users and extension writers to hold data in. This
1814 namespace for users and extension writers to hold data in. This
1810 follows the discussion in
1815 follows the discussion in
1811 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
1816 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
1812
1817
1813 * IPython/completer.py (IPCompleter.complete): small patch to help
1818 * IPython/completer.py (IPCompleter.complete): small patch to help
1814 tab-completion under Emacs, after a suggestion by John Barnard
1819 tab-completion under Emacs, after a suggestion by John Barnard
1815 <barnarj-AT-ccf.org>.
1820 <barnarj-AT-ccf.org>.
1816
1821
1817 * IPython/Magic.py (Magic.extract_input_slices): added support for
1822 * IPython/Magic.py (Magic.extract_input_slices): added support for
1818 the slice notation in magics to use N-M to represent numbers N...M
1823 the slice notation in magics to use N-M to represent numbers N...M
1819 (closed endpoints). This is used by %macro and %save.
1824 (closed endpoints). This is used by %macro and %save.
1820
1825
1821 * IPython/completer.py (Completer.attr_matches): for modules which
1826 * IPython/completer.py (Completer.attr_matches): for modules which
1822 define __all__, complete only on those. After a patch by Jeffrey
1827 define __all__, complete only on those. After a patch by Jeffrey
1823 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
1828 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
1824 speed up this routine.
1829 speed up this routine.
1825
1830
1826 * IPython/Logger.py (Logger.log): fix a history handling bug. I
1831 * IPython/Logger.py (Logger.log): fix a history handling bug. I
1827 don't know if this is the end of it, but the behavior now is
1832 don't know if this is the end of it, but the behavior now is
1828 certainly much more correct. Note that coupled with macros,
1833 certainly much more correct. Note that coupled with macros,
1829 slightly surprising (at first) behavior may occur: a macro will in
1834 slightly surprising (at first) behavior may occur: a macro will in
1830 general expand to multiple lines of input, so upon exiting, the
1835 general expand to multiple lines of input, so upon exiting, the
1831 in/out counters will both be bumped by the corresponding amount
1836 in/out counters will both be bumped by the corresponding amount
1832 (as if the macro's contents had been typed interactively). Typing
1837 (as if the macro's contents had been typed interactively). Typing
1833 %hist will reveal the intermediate (silently processed) lines.
1838 %hist will reveal the intermediate (silently processed) lines.
1834
1839
1835 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
1840 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
1836 pickle to fail (%run was overwriting __main__ and not restoring
1841 pickle to fail (%run was overwriting __main__ and not restoring
1837 it, but pickle relies on __main__ to operate).
1842 it, but pickle relies on __main__ to operate).
1838
1843
1839 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
1844 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
1840 using properties, but forgot to make the main InteractiveShell
1845 using properties, but forgot to make the main InteractiveShell
1841 class a new-style class. Properties fail silently, and
1846 class a new-style class. Properties fail silently, and
1842 mysteriously, with old-style class (getters work, but
1847 mysteriously, with old-style class (getters work, but
1843 setters don't do anything).
1848 setters don't do anything).
1844
1849
1845 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
1850 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
1846
1851
1847 * IPython/Magic.py (magic_history): fix history reporting bug (I
1852 * IPython/Magic.py (magic_history): fix history reporting bug (I
1848 know some nasties are still there, I just can't seem to find a
1853 know some nasties are still there, I just can't seem to find a
1849 reproducible test case to track them down; the input history is
1854 reproducible test case to track them down; the input history is
1850 falling out of sync...)
1855 falling out of sync...)
1851
1856
1852 * IPython/iplib.py (handle_shell_escape): fix bug where both
1857 * IPython/iplib.py (handle_shell_escape): fix bug where both
1853 aliases and system accesses where broken for indented code (such
1858 aliases and system accesses where broken for indented code (such
1854 as loops).
1859 as loops).
1855
1860
1856 * IPython/genutils.py (shell): fix small but critical bug for
1861 * IPython/genutils.py (shell): fix small but critical bug for
1857 win32 system access.
1862 win32 system access.
1858
1863
1859 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
1864 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
1860
1865
1861 * IPython/iplib.py (showtraceback): remove use of the
1866 * IPython/iplib.py (showtraceback): remove use of the
1862 sys.last_{type/value/traceback} structures, which are non
1867 sys.last_{type/value/traceback} structures, which are non
1863 thread-safe.
1868 thread-safe.
1864 (_prefilter): change control flow to ensure that we NEVER
1869 (_prefilter): change control flow to ensure that we NEVER
1865 introspect objects when autocall is off. This will guarantee that
1870 introspect objects when autocall is off. This will guarantee that
1866 having an input line of the form 'x.y', where access to attribute
1871 having an input line of the form 'x.y', where access to attribute
1867 'y' has side effects, doesn't trigger the side effect TWICE. It
1872 'y' has side effects, doesn't trigger the side effect TWICE. It
1868 is important to note that, with autocall on, these side effects
1873 is important to note that, with autocall on, these side effects
1869 can still happen.
1874 can still happen.
1870 (ipsystem): new builtin, to complete the ip{magic/alias/system}
1875 (ipsystem): new builtin, to complete the ip{magic/alias/system}
1871 trio. IPython offers these three kinds of special calls which are
1876 trio. IPython offers these three kinds of special calls which are
1872 not python code, and it's a good thing to have their call method
1877 not python code, and it's a good thing to have their call method
1873 be accessible as pure python functions (not just special syntax at
1878 be accessible as pure python functions (not just special syntax at
1874 the command line). It gives us a better internal implementation
1879 the command line). It gives us a better internal implementation
1875 structure, as well as exposing these for user scripting more
1880 structure, as well as exposing these for user scripting more
1876 cleanly.
1881 cleanly.
1877
1882
1878 * IPython/macro.py (Macro.__init__): moved macros to a standalone
1883 * IPython/macro.py (Macro.__init__): moved macros to a standalone
1879 file. Now that they'll be more likely to be used with the
1884 file. Now that they'll be more likely to be used with the
1880 persistance system (%store), I want to make sure their module path
1885 persistance system (%store), I want to make sure their module path
1881 doesn't change in the future, so that we don't break things for
1886 doesn't change in the future, so that we don't break things for
1882 users' persisted data.
1887 users' persisted data.
1883
1888
1884 * IPython/iplib.py (autoindent_update): move indentation
1889 * IPython/iplib.py (autoindent_update): move indentation
1885 management into the _text_ processing loop, not the keyboard
1890 management into the _text_ processing loop, not the keyboard
1886 interactive one. This is necessary to correctly process non-typed
1891 interactive one. This is necessary to correctly process non-typed
1887 multiline input (such as macros).
1892 multiline input (such as macros).
1888
1893
1889 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
1894 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
1890 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
1895 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
1891 which was producing problems in the resulting manual.
1896 which was producing problems in the resulting manual.
1892 (magic_whos): improve reporting of instances (show their class,
1897 (magic_whos): improve reporting of instances (show their class,
1893 instead of simply printing 'instance' which isn't terribly
1898 instead of simply printing 'instance' which isn't terribly
1894 informative).
1899 informative).
1895
1900
1896 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
1901 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
1897 (minor mods) to support network shares under win32.
1902 (minor mods) to support network shares under win32.
1898
1903
1899 * IPython/winconsole.py (get_console_size): add new winconsole
1904 * IPython/winconsole.py (get_console_size): add new winconsole
1900 module and fixes to page_dumb() to improve its behavior under
1905 module and fixes to page_dumb() to improve its behavior under
1901 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1906 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1902
1907
1903 * IPython/Magic.py (Macro): simplified Macro class to just
1908 * IPython/Magic.py (Macro): simplified Macro class to just
1904 subclass list. We've had only 2.2 compatibility for a very long
1909 subclass list. We've had only 2.2 compatibility for a very long
1905 time, yet I was still avoiding subclassing the builtin types. No
1910 time, yet I was still avoiding subclassing the builtin types. No
1906 more (I'm also starting to use properties, though I won't shift to
1911 more (I'm also starting to use properties, though I won't shift to
1907 2.3-specific features quite yet).
1912 2.3-specific features quite yet).
1908 (magic_store): added Ville's patch for lightweight variable
1913 (magic_store): added Ville's patch for lightweight variable
1909 persistence, after a request on the user list by Matt Wilkie
1914 persistence, after a request on the user list by Matt Wilkie
1910 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1915 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1911 details.
1916 details.
1912
1917
1913 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1918 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1914 changed the default logfile name from 'ipython.log' to
1919 changed the default logfile name from 'ipython.log' to
1915 'ipython_log.py'. These logs are real python files, and now that
1920 'ipython_log.py'. These logs are real python files, and now that
1916 we have much better multiline support, people are more likely to
1921 we have much better multiline support, people are more likely to
1917 want to use them as such. Might as well name them correctly.
1922 want to use them as such. Might as well name them correctly.
1918
1923
1919 * IPython/Magic.py: substantial cleanup. While we can't stop
1924 * IPython/Magic.py: substantial cleanup. While we can't stop
1920 using magics as mixins, due to the existing customizations 'out
1925 using magics as mixins, due to the existing customizations 'out
1921 there' which rely on the mixin naming conventions, at least I
1926 there' which rely on the mixin naming conventions, at least I
1922 cleaned out all cross-class name usage. So once we are OK with
1927 cleaned out all cross-class name usage. So once we are OK with
1923 breaking compatibility, the two systems can be separated.
1928 breaking compatibility, the two systems can be separated.
1924
1929
1925 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1930 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1926 anymore, and the class is a fair bit less hideous as well. New
1931 anymore, and the class is a fair bit less hideous as well. New
1927 features were also introduced: timestamping of input, and logging
1932 features were also introduced: timestamping of input, and logging
1928 of output results. These are user-visible with the -t and -o
1933 of output results. These are user-visible with the -t and -o
1929 options to %logstart. Closes
1934 options to %logstart. Closes
1930 http://www.scipy.net/roundup/ipython/issue11 and a request by
1935 http://www.scipy.net/roundup/ipython/issue11 and a request by
1931 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1936 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1932
1937
1933 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1938 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1934
1939
1935 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1940 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1936 better handle backslashes in paths. See the thread 'More Windows
1941 better handle backslashes in paths. See the thread 'More Windows
1937 questions part 2 - \/ characters revisited' on the iypthon user
1942 questions part 2 - \/ characters revisited' on the iypthon user
1938 list:
1943 list:
1939 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1944 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1940
1945
1941 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1946 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1942
1947
1943 (InteractiveShell.__init__): change threaded shells to not use the
1948 (InteractiveShell.__init__): change threaded shells to not use the
1944 ipython crash handler. This was causing more problems than not,
1949 ipython crash handler. This was causing more problems than not,
1945 as exceptions in the main thread (GUI code, typically) would
1950 as exceptions in the main thread (GUI code, typically) would
1946 always show up as a 'crash', when they really weren't.
1951 always show up as a 'crash', when they really weren't.
1947
1952
1948 The colors and exception mode commands (%colors/%xmode) have been
1953 The colors and exception mode commands (%colors/%xmode) have been
1949 synchronized to also take this into account, so users can get
1954 synchronized to also take this into account, so users can get
1950 verbose exceptions for their threaded code as well. I also added
1955 verbose exceptions for their threaded code as well. I also added
1951 support for activating pdb inside this exception handler as well,
1956 support for activating pdb inside this exception handler as well,
1952 so now GUI authors can use IPython's enhanced pdb at runtime.
1957 so now GUI authors can use IPython's enhanced pdb at runtime.
1953
1958
1954 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1959 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1955 true by default, and add it to the shipped ipythonrc file. Since
1960 true by default, and add it to the shipped ipythonrc file. Since
1956 this asks the user before proceeding, I think it's OK to make it
1961 this asks the user before proceeding, I think it's OK to make it
1957 true by default.
1962 true by default.
1958
1963
1959 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1964 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1960 of the previous special-casing of input in the eval loop. I think
1965 of the previous special-casing of input in the eval loop. I think
1961 this is cleaner, as they really are commands and shouldn't have
1966 this is cleaner, as they really are commands and shouldn't have
1962 a special role in the middle of the core code.
1967 a special role in the middle of the core code.
1963
1968
1964 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1969 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1965
1970
1966 * IPython/iplib.py (edit_syntax_error): added support for
1971 * IPython/iplib.py (edit_syntax_error): added support for
1967 automatically reopening the editor if the file had a syntax error
1972 automatically reopening the editor if the file had a syntax error
1968 in it. Thanks to scottt who provided the patch at:
1973 in it. Thanks to scottt who provided the patch at:
1969 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1974 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1970 version committed).
1975 version committed).
1971
1976
1972 * IPython/iplib.py (handle_normal): add suport for multi-line
1977 * IPython/iplib.py (handle_normal): add suport for multi-line
1973 input with emtpy lines. This fixes
1978 input with emtpy lines. This fixes
1974 http://www.scipy.net/roundup/ipython/issue43 and a similar
1979 http://www.scipy.net/roundup/ipython/issue43 and a similar
1975 discussion on the user list.
1980 discussion on the user list.
1976
1981
1977 WARNING: a behavior change is necessarily introduced to support
1982 WARNING: a behavior change is necessarily introduced to support
1978 blank lines: now a single blank line with whitespace does NOT
1983 blank lines: now a single blank line with whitespace does NOT
1979 break the input loop, which means that when autoindent is on, by
1984 break the input loop, which means that when autoindent is on, by
1980 default hitting return on the next (indented) line does NOT exit.
1985 default hitting return on the next (indented) line does NOT exit.
1981
1986
1982 Instead, to exit a multiline input you can either have:
1987 Instead, to exit a multiline input you can either have:
1983
1988
1984 - TWO whitespace lines (just hit return again), or
1989 - TWO whitespace lines (just hit return again), or
1985 - a single whitespace line of a different length than provided
1990 - a single whitespace line of a different length than provided
1986 by the autoindent (add or remove a space).
1991 by the autoindent (add or remove a space).
1987
1992
1988 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1993 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1989 module to better organize all readline-related functionality.
1994 module to better organize all readline-related functionality.
1990 I've deleted FlexCompleter and put all completion clases here.
1995 I've deleted FlexCompleter and put all completion clases here.
1991
1996
1992 * IPython/iplib.py (raw_input): improve indentation management.
1997 * IPython/iplib.py (raw_input): improve indentation management.
1993 It is now possible to paste indented code with autoindent on, and
1998 It is now possible to paste indented code with autoindent on, and
1994 the code is interpreted correctly (though it still looks bad on
1999 the code is interpreted correctly (though it still looks bad on
1995 screen, due to the line-oriented nature of ipython).
2000 screen, due to the line-oriented nature of ipython).
1996 (MagicCompleter.complete): change behavior so that a TAB key on an
2001 (MagicCompleter.complete): change behavior so that a TAB key on an
1997 otherwise empty line actually inserts a tab, instead of completing
2002 otherwise empty line actually inserts a tab, instead of completing
1998 on the entire global namespace. This makes it easier to use the
2003 on the entire global namespace. This makes it easier to use the
1999 TAB key for indentation. After a request by Hans Meine
2004 TAB key for indentation. After a request by Hans Meine
2000 <hans_meine-AT-gmx.net>
2005 <hans_meine-AT-gmx.net>
2001 (_prefilter): add support so that typing plain 'exit' or 'quit'
2006 (_prefilter): add support so that typing plain 'exit' or 'quit'
2002 does a sensible thing. Originally I tried to deviate as little as
2007 does a sensible thing. Originally I tried to deviate as little as
2003 possible from the default python behavior, but even that one may
2008 possible from the default python behavior, but even that one may
2004 change in this direction (thread on python-dev to that effect).
2009 change in this direction (thread on python-dev to that effect).
2005 Regardless, ipython should do the right thing even if CPython's
2010 Regardless, ipython should do the right thing even if CPython's
2006 '>>>' prompt doesn't.
2011 '>>>' prompt doesn't.
2007 (InteractiveShell): removed subclassing code.InteractiveConsole
2012 (InteractiveShell): removed subclassing code.InteractiveConsole
2008 class. By now we'd overridden just about all of its methods: I've
2013 class. By now we'd overridden just about all of its methods: I've
2009 copied the remaining two over, and now ipython is a standalone
2014 copied the remaining two over, and now ipython is a standalone
2010 class. This will provide a clearer picture for the chainsaw
2015 class. This will provide a clearer picture for the chainsaw
2011 branch refactoring.
2016 branch refactoring.
2012
2017
2013 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
2018 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
2014
2019
2015 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
2020 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
2016 failures for objects which break when dir() is called on them.
2021 failures for objects which break when dir() is called on them.
2017
2022
2018 * IPython/FlexCompleter.py (Completer.__init__): Added support for
2023 * IPython/FlexCompleter.py (Completer.__init__): Added support for
2019 distinct local and global namespaces in the completer API. This
2024 distinct local and global namespaces in the completer API. This
2020 change allows us to properly handle completion with distinct
2025 change allows us to properly handle completion with distinct
2021 scopes, including in embedded instances (this had never really
2026 scopes, including in embedded instances (this had never really
2022 worked correctly).
2027 worked correctly).
2023
2028
2024 Note: this introduces a change in the constructor for
2029 Note: this introduces a change in the constructor for
2025 MagicCompleter, as a new global_namespace parameter is now the
2030 MagicCompleter, as a new global_namespace parameter is now the
2026 second argument (the others were bumped one position).
2031 second argument (the others were bumped one position).
2027
2032
2028 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
2033 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
2029
2034
2030 * IPython/iplib.py (embed_mainloop): fix tab-completion in
2035 * IPython/iplib.py (embed_mainloop): fix tab-completion in
2031 embedded instances (which can be done now thanks to Vivian's
2036 embedded instances (which can be done now thanks to Vivian's
2032 frame-handling fixes for pdb).
2037 frame-handling fixes for pdb).
2033 (InteractiveShell.__init__): Fix namespace handling problem in
2038 (InteractiveShell.__init__): Fix namespace handling problem in
2034 embedded instances. We were overwriting __main__ unconditionally,
2039 embedded instances. We were overwriting __main__ unconditionally,
2035 and this should only be done for 'full' (non-embedded) IPython;
2040 and this should only be done for 'full' (non-embedded) IPython;
2036 embedded instances must respect the caller's __main__. Thanks to
2041 embedded instances must respect the caller's __main__. Thanks to
2037 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
2042 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
2038
2043
2039 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
2044 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
2040
2045
2041 * setup.py: added download_url to setup(). This registers the
2046 * setup.py: added download_url to setup(). This registers the
2042 download address at PyPI, which is not only useful to humans
2047 download address at PyPI, which is not only useful to humans
2043 browsing the site, but is also picked up by setuptools (the Eggs
2048 browsing the site, but is also picked up by setuptools (the Eggs
2044 machinery). Thanks to Ville and R. Kern for the info/discussion
2049 machinery). Thanks to Ville and R. Kern for the info/discussion
2045 on this.
2050 on this.
2046
2051
2047 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
2052 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
2048
2053
2049 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
2054 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
2050 This brings a lot of nice functionality to the pdb mode, which now
2055 This brings a lot of nice functionality to the pdb mode, which now
2051 has tab-completion, syntax highlighting, and better stack handling
2056 has tab-completion, syntax highlighting, and better stack handling
2052 than before. Many thanks to Vivian De Smedt
2057 than before. Many thanks to Vivian De Smedt
2053 <vivian-AT-vdesmedt.com> for the original patches.
2058 <vivian-AT-vdesmedt.com> for the original patches.
2054
2059
2055 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
2060 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
2056
2061
2057 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
2062 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
2058 sequence to consistently accept the banner argument. The
2063 sequence to consistently accept the banner argument. The
2059 inconsistency was tripping SAGE, thanks to Gary Zablackis
2064 inconsistency was tripping SAGE, thanks to Gary Zablackis
2060 <gzabl-AT-yahoo.com> for the report.
2065 <gzabl-AT-yahoo.com> for the report.
2061
2066
2062 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
2067 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
2063
2068
2064 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2069 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2065 Fix bug where a naked 'alias' call in the ipythonrc file would
2070 Fix bug where a naked 'alias' call in the ipythonrc file would
2066 cause a crash. Bug reported by Jorgen Stenarson.
2071 cause a crash. Bug reported by Jorgen Stenarson.
2067
2072
2068 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
2073 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
2069
2074
2070 * IPython/ipmaker.py (make_IPython): cleanups which should improve
2075 * IPython/ipmaker.py (make_IPython): cleanups which should improve
2071 startup time.
2076 startup time.
2072
2077
2073 * IPython/iplib.py (runcode): my globals 'fix' for embedded
2078 * IPython/iplib.py (runcode): my globals 'fix' for embedded
2074 instances had introduced a bug with globals in normal code. Now
2079 instances had introduced a bug with globals in normal code. Now
2075 it's working in all cases.
2080 it's working in all cases.
2076
2081
2077 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
2082 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
2078 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
2083 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
2079 has been introduced to set the default case sensitivity of the
2084 has been introduced to set the default case sensitivity of the
2080 searches. Users can still select either mode at runtime on a
2085 searches. Users can still select either mode at runtime on a
2081 per-search basis.
2086 per-search basis.
2082
2087
2083 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
2088 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
2084
2089
2085 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
2090 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
2086 attributes in wildcard searches for subclasses. Modified version
2091 attributes in wildcard searches for subclasses. Modified version
2087 of a patch by Jorgen.
2092 of a patch by Jorgen.
2088
2093
2089 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
2094 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
2090
2095
2091 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
2096 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
2092 embedded instances. I added a user_global_ns attribute to the
2097 embedded instances. I added a user_global_ns attribute to the
2093 InteractiveShell class to handle this.
2098 InteractiveShell class to handle this.
2094
2099
2095 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
2100 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
2096
2101
2097 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
2102 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
2098 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
2103 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
2099 (reported under win32, but may happen also in other platforms).
2104 (reported under win32, but may happen also in other platforms).
2100 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
2105 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
2101
2106
2102 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
2107 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
2103
2108
2104 * IPython/Magic.py (magic_psearch): new support for wildcard
2109 * IPython/Magic.py (magic_psearch): new support for wildcard
2105 patterns. Now, typing ?a*b will list all names which begin with a
2110 patterns. Now, typing ?a*b will list all names which begin with a
2106 and end in b, for example. The %psearch magic has full
2111 and end in b, for example. The %psearch magic has full
2107 docstrings. Many thanks to JΓΆrgen Stenarson
2112 docstrings. Many thanks to JΓΆrgen Stenarson
2108 <jorgen.stenarson-AT-bostream.nu>, author of the patches
2113 <jorgen.stenarson-AT-bostream.nu>, author of the patches
2109 implementing this functionality.
2114 implementing this functionality.
2110
2115
2111 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
2116 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
2112
2117
2113 * Manual: fixed long-standing annoyance of double-dashes (as in
2118 * Manual: fixed long-standing annoyance of double-dashes (as in
2114 --prefix=~, for example) being stripped in the HTML version. This
2119 --prefix=~, for example) being stripped in the HTML version. This
2115 is a latex2html bug, but a workaround was provided. Many thanks
2120 is a latex2html bug, but a workaround was provided. Many thanks
2116 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
2121 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
2117 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
2122 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
2118 rolling. This seemingly small issue had tripped a number of users
2123 rolling. This seemingly small issue had tripped a number of users
2119 when first installing, so I'm glad to see it gone.
2124 when first installing, so I'm glad to see it gone.
2120
2125
2121 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
2126 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
2122
2127
2123 * IPython/Extensions/numeric_formats.py: fix missing import,
2128 * IPython/Extensions/numeric_formats.py: fix missing import,
2124 reported by Stephen Walton.
2129 reported by Stephen Walton.
2125
2130
2126 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
2131 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
2127
2132
2128 * IPython/demo.py: finish demo module, fully documented now.
2133 * IPython/demo.py: finish demo module, fully documented now.
2129
2134
2130 * IPython/genutils.py (file_read): simple little utility to read a
2135 * IPython/genutils.py (file_read): simple little utility to read a
2131 file and ensure it's closed afterwards.
2136 file and ensure it's closed afterwards.
2132
2137
2133 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
2138 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
2134
2139
2135 * IPython/demo.py (Demo.__init__): added support for individually
2140 * IPython/demo.py (Demo.__init__): added support for individually
2136 tagging blocks for automatic execution.
2141 tagging blocks for automatic execution.
2137
2142
2138 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
2143 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
2139 syntax-highlighted python sources, requested by John.
2144 syntax-highlighted python sources, requested by John.
2140
2145
2141 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
2146 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
2142
2147
2143 * IPython/demo.py (Demo.again): fix bug where again() blocks after
2148 * IPython/demo.py (Demo.again): fix bug where again() blocks after
2144 finishing.
2149 finishing.
2145
2150
2146 * IPython/genutils.py (shlex_split): moved from Magic to here,
2151 * IPython/genutils.py (shlex_split): moved from Magic to here,
2147 where all 2.2 compatibility stuff lives. I needed it for demo.py.
2152 where all 2.2 compatibility stuff lives. I needed it for demo.py.
2148
2153
2149 * IPython/demo.py (Demo.__init__): added support for silent
2154 * IPython/demo.py (Demo.__init__): added support for silent
2150 blocks, improved marks as regexps, docstrings written.
2155 blocks, improved marks as regexps, docstrings written.
2151 (Demo.__init__): better docstring, added support for sys.argv.
2156 (Demo.__init__): better docstring, added support for sys.argv.
2152
2157
2153 * IPython/genutils.py (marquee): little utility used by the demo
2158 * IPython/genutils.py (marquee): little utility used by the demo
2154 code, handy in general.
2159 code, handy in general.
2155
2160
2156 * IPython/demo.py (Demo.__init__): new class for interactive
2161 * IPython/demo.py (Demo.__init__): new class for interactive
2157 demos. Not documented yet, I just wrote it in a hurry for
2162 demos. Not documented yet, I just wrote it in a hurry for
2158 scipy'05. Will docstring later.
2163 scipy'05. Will docstring later.
2159
2164
2160 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
2165 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
2161
2166
2162 * IPython/Shell.py (sigint_handler): Drastic simplification which
2167 * IPython/Shell.py (sigint_handler): Drastic simplification which
2163 also seems to make Ctrl-C work correctly across threads! This is
2168 also seems to make Ctrl-C work correctly across threads! This is
2164 so simple, that I can't beleive I'd missed it before. Needs more
2169 so simple, that I can't beleive I'd missed it before. Needs more
2165 testing, though.
2170 testing, though.
2166 (KBINT): Never mind, revert changes. I'm sure I'd tried something
2171 (KBINT): Never mind, revert changes. I'm sure I'd tried something
2167 like this before...
2172 like this before...
2168
2173
2169 * IPython/genutils.py (get_home_dir): add protection against
2174 * IPython/genutils.py (get_home_dir): add protection against
2170 non-dirs in win32 registry.
2175 non-dirs in win32 registry.
2171
2176
2172 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
2177 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
2173 bug where dict was mutated while iterating (pysh crash).
2178 bug where dict was mutated while iterating (pysh crash).
2174
2179
2175 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
2180 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
2176
2181
2177 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
2182 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
2178 spurious newlines added by this routine. After a report by
2183 spurious newlines added by this routine. After a report by
2179 F. Mantegazza.
2184 F. Mantegazza.
2180
2185
2181 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
2186 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
2182
2187
2183 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
2188 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
2184 calls. These were a leftover from the GTK 1.x days, and can cause
2189 calls. These were a leftover from the GTK 1.x days, and can cause
2185 problems in certain cases (after a report by John Hunter).
2190 problems in certain cases (after a report by John Hunter).
2186
2191
2187 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
2192 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
2188 os.getcwd() fails at init time. Thanks to patch from David Remahl
2193 os.getcwd() fails at init time. Thanks to patch from David Remahl
2189 <chmod007-AT-mac.com>.
2194 <chmod007-AT-mac.com>.
2190 (InteractiveShell.__init__): prevent certain special magics from
2195 (InteractiveShell.__init__): prevent certain special magics from
2191 being shadowed by aliases. Closes
2196 being shadowed by aliases. Closes
2192 http://www.scipy.net/roundup/ipython/issue41.
2197 http://www.scipy.net/roundup/ipython/issue41.
2193
2198
2194 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
2199 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
2195
2200
2196 * IPython/iplib.py (InteractiveShell.complete): Added new
2201 * IPython/iplib.py (InteractiveShell.complete): Added new
2197 top-level completion method to expose the completion mechanism
2202 top-level completion method to expose the completion mechanism
2198 beyond readline-based environments.
2203 beyond readline-based environments.
2199
2204
2200 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
2205 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
2201
2206
2202 * tools/ipsvnc (svnversion): fix svnversion capture.
2207 * tools/ipsvnc (svnversion): fix svnversion capture.
2203
2208
2204 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
2209 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
2205 attribute to self, which was missing. Before, it was set by a
2210 attribute to self, which was missing. Before, it was set by a
2206 routine which in certain cases wasn't being called, so the
2211 routine which in certain cases wasn't being called, so the
2207 instance could end up missing the attribute. This caused a crash.
2212 instance could end up missing the attribute. This caused a crash.
2208 Closes http://www.scipy.net/roundup/ipython/issue40.
2213 Closes http://www.scipy.net/roundup/ipython/issue40.
2209
2214
2210 2005-08-16 Fernando Perez <fperez@colorado.edu>
2215 2005-08-16 Fernando Perez <fperez@colorado.edu>
2211
2216
2212 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
2217 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
2213 contains non-string attribute. Closes
2218 contains non-string attribute. Closes
2214 http://www.scipy.net/roundup/ipython/issue38.
2219 http://www.scipy.net/roundup/ipython/issue38.
2215
2220
2216 2005-08-14 Fernando Perez <fperez@colorado.edu>
2221 2005-08-14 Fernando Perez <fperez@colorado.edu>
2217
2222
2218 * tools/ipsvnc: Minor improvements, to add changeset info.
2223 * tools/ipsvnc: Minor improvements, to add changeset info.
2219
2224
2220 2005-08-12 Fernando Perez <fperez@colorado.edu>
2225 2005-08-12 Fernando Perez <fperez@colorado.edu>
2221
2226
2222 * IPython/iplib.py (runsource): remove self.code_to_run_src
2227 * IPython/iplib.py (runsource): remove self.code_to_run_src
2223 attribute. I realized this is nothing more than
2228 attribute. I realized this is nothing more than
2224 '\n'.join(self.buffer), and having the same data in two different
2229 '\n'.join(self.buffer), and having the same data in two different
2225 places is just asking for synchronization bugs. This may impact
2230 places is just asking for synchronization bugs. This may impact
2226 people who have custom exception handlers, so I need to warn
2231 people who have custom exception handlers, so I need to warn
2227 ipython-dev about it (F. Mantegazza may use them).
2232 ipython-dev about it (F. Mantegazza may use them).
2228
2233
2229 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
2234 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
2230
2235
2231 * IPython/genutils.py: fix 2.2 compatibility (generators)
2236 * IPython/genutils.py: fix 2.2 compatibility (generators)
2232
2237
2233 2005-07-18 Fernando Perez <fperez@colorado.edu>
2238 2005-07-18 Fernando Perez <fperez@colorado.edu>
2234
2239
2235 * IPython/genutils.py (get_home_dir): fix to help users with
2240 * IPython/genutils.py (get_home_dir): fix to help users with
2236 invalid $HOME under win32.
2241 invalid $HOME under win32.
2237
2242
2238 2005-07-17 Fernando Perez <fperez@colorado.edu>
2243 2005-07-17 Fernando Perez <fperez@colorado.edu>
2239
2244
2240 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
2245 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
2241 some old hacks and clean up a bit other routines; code should be
2246 some old hacks and clean up a bit other routines; code should be
2242 simpler and a bit faster.
2247 simpler and a bit faster.
2243
2248
2244 * IPython/iplib.py (interact): removed some last-resort attempts
2249 * IPython/iplib.py (interact): removed some last-resort attempts
2245 to survive broken stdout/stderr. That code was only making it
2250 to survive broken stdout/stderr. That code was only making it
2246 harder to abstract out the i/o (necessary for gui integration),
2251 harder to abstract out the i/o (necessary for gui integration),
2247 and the crashes it could prevent were extremely rare in practice
2252 and the crashes it could prevent were extremely rare in practice
2248 (besides being fully user-induced in a pretty violent manner).
2253 (besides being fully user-induced in a pretty violent manner).
2249
2254
2250 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
2255 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
2251 Nothing major yet, but the code is simpler to read; this should
2256 Nothing major yet, but the code is simpler to read; this should
2252 make it easier to do more serious modifications in the future.
2257 make it easier to do more serious modifications in the future.
2253
2258
2254 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
2259 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
2255 which broke in .15 (thanks to a report by Ville).
2260 which broke in .15 (thanks to a report by Ville).
2256
2261
2257 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
2262 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
2258 be quite correct, I know next to nothing about unicode). This
2263 be quite correct, I know next to nothing about unicode). This
2259 will allow unicode strings to be used in prompts, amongst other
2264 will allow unicode strings to be used in prompts, amongst other
2260 cases. It also will prevent ipython from crashing when unicode
2265 cases. It also will prevent ipython from crashing when unicode
2261 shows up unexpectedly in many places. If ascii encoding fails, we
2266 shows up unexpectedly in many places. If ascii encoding fails, we
2262 assume utf_8. Currently the encoding is not a user-visible
2267 assume utf_8. Currently the encoding is not a user-visible
2263 setting, though it could be made so if there is demand for it.
2268 setting, though it could be made so if there is demand for it.
2264
2269
2265 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
2270 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
2266
2271
2267 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
2272 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
2268
2273
2269 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
2274 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
2270
2275
2271 * IPython/genutils.py: Add 2.2 compatibility here, so all other
2276 * IPython/genutils.py: Add 2.2 compatibility here, so all other
2272 code can work transparently for 2.2/2.3.
2277 code can work transparently for 2.2/2.3.
2273
2278
2274 2005-07-16 Fernando Perez <fperez@colorado.edu>
2279 2005-07-16 Fernando Perez <fperez@colorado.edu>
2275
2280
2276 * IPython/ultraTB.py (ExceptionColors): Make a global variable
2281 * IPython/ultraTB.py (ExceptionColors): Make a global variable
2277 out of the color scheme table used for coloring exception
2282 out of the color scheme table used for coloring exception
2278 tracebacks. This allows user code to add new schemes at runtime.
2283 tracebacks. This allows user code to add new schemes at runtime.
2279 This is a minimally modified version of the patch at
2284 This is a minimally modified version of the patch at
2280 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
2285 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
2281 for the contribution.
2286 for the contribution.
2282
2287
2283 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
2288 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
2284 slightly modified version of the patch in
2289 slightly modified version of the patch in
2285 http://www.scipy.net/roundup/ipython/issue34, which also allows me
2290 http://www.scipy.net/roundup/ipython/issue34, which also allows me
2286 to remove the previous try/except solution (which was costlier).
2291 to remove the previous try/except solution (which was costlier).
2287 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
2292 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
2288
2293
2289 2005-06-08 Fernando Perez <fperez@colorado.edu>
2294 2005-06-08 Fernando Perez <fperez@colorado.edu>
2290
2295
2291 * IPython/iplib.py (write/write_err): Add methods to abstract all
2296 * IPython/iplib.py (write/write_err): Add methods to abstract all
2292 I/O a bit more.
2297 I/O a bit more.
2293
2298
2294 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
2299 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
2295 warning, reported by Aric Hagberg, fix by JD Hunter.
2300 warning, reported by Aric Hagberg, fix by JD Hunter.
2296
2301
2297 2005-06-02 *** Released version 0.6.15
2302 2005-06-02 *** Released version 0.6.15
2298
2303
2299 2005-06-01 Fernando Perez <fperez@colorado.edu>
2304 2005-06-01 Fernando Perez <fperez@colorado.edu>
2300
2305
2301 * IPython/iplib.py (MagicCompleter.file_matches): Fix
2306 * IPython/iplib.py (MagicCompleter.file_matches): Fix
2302 tab-completion of filenames within open-quoted strings. Note that
2307 tab-completion of filenames within open-quoted strings. Note that
2303 this requires that in ~/.ipython/ipythonrc, users change the
2308 this requires that in ~/.ipython/ipythonrc, users change the
2304 readline delimiters configuration to read:
2309 readline delimiters configuration to read:
2305
2310
2306 readline_remove_delims -/~
2311 readline_remove_delims -/~
2307
2312
2308
2313
2309 2005-05-31 *** Released version 0.6.14
2314 2005-05-31 *** Released version 0.6.14
2310
2315
2311 2005-05-29 Fernando Perez <fperez@colorado.edu>
2316 2005-05-29 Fernando Perez <fperez@colorado.edu>
2312
2317
2313 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
2318 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
2314 with files not on the filesystem. Reported by Eliyahu Sandler
2319 with files not on the filesystem. Reported by Eliyahu Sandler
2315 <eli@gondolin.net>
2320 <eli@gondolin.net>
2316
2321
2317 2005-05-22 Fernando Perez <fperez@colorado.edu>
2322 2005-05-22 Fernando Perez <fperez@colorado.edu>
2318
2323
2319 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
2324 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
2320 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
2325 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
2321
2326
2322 2005-05-19 Fernando Perez <fperez@colorado.edu>
2327 2005-05-19 Fernando Perez <fperez@colorado.edu>
2323
2328
2324 * IPython/iplib.py (safe_execfile): close a file which could be
2329 * IPython/iplib.py (safe_execfile): close a file which could be
2325 left open (causing problems in win32, which locks open files).
2330 left open (causing problems in win32, which locks open files).
2326 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
2331 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
2327
2332
2328 2005-05-18 Fernando Perez <fperez@colorado.edu>
2333 2005-05-18 Fernando Perez <fperez@colorado.edu>
2329
2334
2330 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
2335 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
2331 keyword arguments correctly to safe_execfile().
2336 keyword arguments correctly to safe_execfile().
2332
2337
2333 2005-05-13 Fernando Perez <fperez@colorado.edu>
2338 2005-05-13 Fernando Perez <fperez@colorado.edu>
2334
2339
2335 * ipython.1: Added info about Qt to manpage, and threads warning
2340 * ipython.1: Added info about Qt to manpage, and threads warning
2336 to usage page (invoked with --help).
2341 to usage page (invoked with --help).
2337
2342
2338 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
2343 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
2339 new matcher (it goes at the end of the priority list) to do
2344 new matcher (it goes at the end of the priority list) to do
2340 tab-completion on named function arguments. Submitted by George
2345 tab-completion on named function arguments. Submitted by George
2341 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
2346 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
2342 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
2347 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
2343 for more details.
2348 for more details.
2344
2349
2345 * IPython/Magic.py (magic_run): Added new -e flag to ignore
2350 * IPython/Magic.py (magic_run): Added new -e flag to ignore
2346 SystemExit exceptions in the script being run. Thanks to a report
2351 SystemExit exceptions in the script being run. Thanks to a report
2347 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
2352 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
2348 producing very annoying behavior when running unit tests.
2353 producing very annoying behavior when running unit tests.
2349
2354
2350 2005-05-12 Fernando Perez <fperez@colorado.edu>
2355 2005-05-12 Fernando Perez <fperez@colorado.edu>
2351
2356
2352 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
2357 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
2353 which I'd broken (again) due to a changed regexp. In the process,
2358 which I'd broken (again) due to a changed regexp. In the process,
2354 added ';' as an escape to auto-quote the whole line without
2359 added ';' as an escape to auto-quote the whole line without
2355 splitting its arguments. Thanks to a report by Jerry McRae
2360 splitting its arguments. Thanks to a report by Jerry McRae
2356 <qrs0xyc02-AT-sneakemail.com>.
2361 <qrs0xyc02-AT-sneakemail.com>.
2357
2362
2358 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
2363 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
2359 possible crashes caused by a TokenError. Reported by Ed Schofield
2364 possible crashes caused by a TokenError. Reported by Ed Schofield
2360 <schofield-AT-ftw.at>.
2365 <schofield-AT-ftw.at>.
2361
2366
2362 2005-05-06 Fernando Perez <fperez@colorado.edu>
2367 2005-05-06 Fernando Perez <fperez@colorado.edu>
2363
2368
2364 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
2369 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
2365
2370
2366 2005-04-29 Fernando Perez <fperez@colorado.edu>
2371 2005-04-29 Fernando Perez <fperez@colorado.edu>
2367
2372
2368 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
2373 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
2369 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
2374 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
2370 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
2375 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
2371 which provides support for Qt interactive usage (similar to the
2376 which provides support for Qt interactive usage (similar to the
2372 existing one for WX and GTK). This had been often requested.
2377 existing one for WX and GTK). This had been often requested.
2373
2378
2374 2005-04-14 *** Released version 0.6.13
2379 2005-04-14 *** Released version 0.6.13
2375
2380
2376 2005-04-08 Fernando Perez <fperez@colorado.edu>
2381 2005-04-08 Fernando Perez <fperez@colorado.edu>
2377
2382
2378 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
2383 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
2379 from _ofind, which gets called on almost every input line. Now,
2384 from _ofind, which gets called on almost every input line. Now,
2380 we only try to get docstrings if they are actually going to be
2385 we only try to get docstrings if they are actually going to be
2381 used (the overhead of fetching unnecessary docstrings can be
2386 used (the overhead of fetching unnecessary docstrings can be
2382 noticeable for certain objects, such as Pyro proxies).
2387 noticeable for certain objects, such as Pyro proxies).
2383
2388
2384 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
2389 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
2385 for completers. For some reason I had been passing them the state
2390 for completers. For some reason I had been passing them the state
2386 variable, which completers never actually need, and was in
2391 variable, which completers never actually need, and was in
2387 conflict with the rlcompleter API. Custom completers ONLY need to
2392 conflict with the rlcompleter API. Custom completers ONLY need to
2388 take the text parameter.
2393 take the text parameter.
2389
2394
2390 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
2395 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
2391 work correctly in pysh. I've also moved all the logic which used
2396 work correctly in pysh. I've also moved all the logic which used
2392 to be in pysh.py here, which will prevent problems with future
2397 to be in pysh.py here, which will prevent problems with future
2393 upgrades. However, this time I must warn users to update their
2398 upgrades. However, this time I must warn users to update their
2394 pysh profile to include the line
2399 pysh profile to include the line
2395
2400
2396 import_all IPython.Extensions.InterpreterExec
2401 import_all IPython.Extensions.InterpreterExec
2397
2402
2398 because otherwise things won't work for them. They MUST also
2403 because otherwise things won't work for them. They MUST also
2399 delete pysh.py and the line
2404 delete pysh.py and the line
2400
2405
2401 execfile pysh.py
2406 execfile pysh.py
2402
2407
2403 from their ipythonrc-pysh.
2408 from their ipythonrc-pysh.
2404
2409
2405 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
2410 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
2406 robust in the face of objects whose dir() returns non-strings
2411 robust in the face of objects whose dir() returns non-strings
2407 (which it shouldn't, but some broken libs like ITK do). Thanks to
2412 (which it shouldn't, but some broken libs like ITK do). Thanks to
2408 a patch by John Hunter (implemented differently, though). Also
2413 a patch by John Hunter (implemented differently, though). Also
2409 minor improvements by using .extend instead of + on lists.
2414 minor improvements by using .extend instead of + on lists.
2410
2415
2411 * pysh.py:
2416 * pysh.py:
2412
2417
2413 2005-04-06 Fernando Perez <fperez@colorado.edu>
2418 2005-04-06 Fernando Perez <fperez@colorado.edu>
2414
2419
2415 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
2420 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
2416 by default, so that all users benefit from it. Those who don't
2421 by default, so that all users benefit from it. Those who don't
2417 want it can still turn it off.
2422 want it can still turn it off.
2418
2423
2419 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
2424 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
2420 config file, I'd forgotten about this, so users were getting it
2425 config file, I'd forgotten about this, so users were getting it
2421 off by default.
2426 off by default.
2422
2427
2423 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
2428 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
2424 consistency. Now magics can be called in multiline statements,
2429 consistency. Now magics can be called in multiline statements,
2425 and python variables can be expanded in magic calls via $var.
2430 and python variables can be expanded in magic calls via $var.
2426 This makes the magic system behave just like aliases or !system
2431 This makes the magic system behave just like aliases or !system
2427 calls.
2432 calls.
2428
2433
2429 2005-03-28 Fernando Perez <fperez@colorado.edu>
2434 2005-03-28 Fernando Perez <fperez@colorado.edu>
2430
2435
2431 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
2436 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
2432 expensive string additions for building command. Add support for
2437 expensive string additions for building command. Add support for
2433 trailing ';' when autocall is used.
2438 trailing ';' when autocall is used.
2434
2439
2435 2005-03-26 Fernando Perez <fperez@colorado.edu>
2440 2005-03-26 Fernando Perez <fperez@colorado.edu>
2436
2441
2437 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
2442 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
2438 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
2443 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
2439 ipython.el robust against prompts with any number of spaces
2444 ipython.el robust against prompts with any number of spaces
2440 (including 0) after the ':' character.
2445 (including 0) after the ':' character.
2441
2446
2442 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
2447 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
2443 continuation prompt, which misled users to think the line was
2448 continuation prompt, which misled users to think the line was
2444 already indented. Closes debian Bug#300847, reported to me by
2449 already indented. Closes debian Bug#300847, reported to me by
2445 Norbert Tretkowski <tretkowski-AT-inittab.de>.
2450 Norbert Tretkowski <tretkowski-AT-inittab.de>.
2446
2451
2447 2005-03-23 Fernando Perez <fperez@colorado.edu>
2452 2005-03-23 Fernando Perez <fperez@colorado.edu>
2448
2453
2449 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
2454 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
2450 properly aligned if they have embedded newlines.
2455 properly aligned if they have embedded newlines.
2451
2456
2452 * IPython/iplib.py (runlines): Add a public method to expose
2457 * IPython/iplib.py (runlines): Add a public method to expose
2453 IPython's code execution machinery, so that users can run strings
2458 IPython's code execution machinery, so that users can run strings
2454 as if they had been typed at the prompt interactively.
2459 as if they had been typed at the prompt interactively.
2455 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
2460 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
2456 methods which can call the system shell, but with python variable
2461 methods which can call the system shell, but with python variable
2457 expansion. The three such methods are: __IPYTHON__.system,
2462 expansion. The three such methods are: __IPYTHON__.system,
2458 .getoutput and .getoutputerror. These need to be documented in a
2463 .getoutput and .getoutputerror. These need to be documented in a
2459 'public API' section (to be written) of the manual.
2464 'public API' section (to be written) of the manual.
2460
2465
2461 2005-03-20 Fernando Perez <fperez@colorado.edu>
2466 2005-03-20 Fernando Perez <fperez@colorado.edu>
2462
2467
2463 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
2468 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
2464 for custom exception handling. This is quite powerful, and it
2469 for custom exception handling. This is quite powerful, and it
2465 allows for user-installable exception handlers which can trap
2470 allows for user-installable exception handlers which can trap
2466 custom exceptions at runtime and treat them separately from
2471 custom exceptions at runtime and treat them separately from
2467 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
2472 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
2468 Mantegazza <mantegazza-AT-ill.fr>.
2473 Mantegazza <mantegazza-AT-ill.fr>.
2469 (InteractiveShell.set_custom_completer): public API function to
2474 (InteractiveShell.set_custom_completer): public API function to
2470 add new completers at runtime.
2475 add new completers at runtime.
2471
2476
2472 2005-03-19 Fernando Perez <fperez@colorado.edu>
2477 2005-03-19 Fernando Perez <fperez@colorado.edu>
2473
2478
2474 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
2479 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
2475 allow objects which provide their docstrings via non-standard
2480 allow objects which provide their docstrings via non-standard
2476 mechanisms (like Pyro proxies) to still be inspected by ipython's
2481 mechanisms (like Pyro proxies) to still be inspected by ipython's
2477 ? system.
2482 ? system.
2478
2483
2479 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
2484 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
2480 automatic capture system. I tried quite hard to make it work
2485 automatic capture system. I tried quite hard to make it work
2481 reliably, and simply failed. I tried many combinations with the
2486 reliably, and simply failed. I tried many combinations with the
2482 subprocess module, but eventually nothing worked in all needed
2487 subprocess module, but eventually nothing worked in all needed
2483 cases (not blocking stdin for the child, duplicating stdout
2488 cases (not blocking stdin for the child, duplicating stdout
2484 without blocking, etc). The new %sc/%sx still do capture to these
2489 without blocking, etc). The new %sc/%sx still do capture to these
2485 magical list/string objects which make shell use much more
2490 magical list/string objects which make shell use much more
2486 conveninent, so not all is lost.
2491 conveninent, so not all is lost.
2487
2492
2488 XXX - FIX MANUAL for the change above!
2493 XXX - FIX MANUAL for the change above!
2489
2494
2490 (runsource): I copied code.py's runsource() into ipython to modify
2495 (runsource): I copied code.py's runsource() into ipython to modify
2491 it a bit. Now the code object and source to be executed are
2496 it a bit. Now the code object and source to be executed are
2492 stored in ipython. This makes this info accessible to third-party
2497 stored in ipython. This makes this info accessible to third-party
2493 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
2498 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
2494 Mantegazza <mantegazza-AT-ill.fr>.
2499 Mantegazza <mantegazza-AT-ill.fr>.
2495
2500
2496 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
2501 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
2497 history-search via readline (like C-p/C-n). I'd wanted this for a
2502 history-search via readline (like C-p/C-n). I'd wanted this for a
2498 long time, but only recently found out how to do it. For users
2503 long time, but only recently found out how to do it. For users
2499 who already have their ipythonrc files made and want this, just
2504 who already have their ipythonrc files made and want this, just
2500 add:
2505 add:
2501
2506
2502 readline_parse_and_bind "\e[A": history-search-backward
2507 readline_parse_and_bind "\e[A": history-search-backward
2503 readline_parse_and_bind "\e[B": history-search-forward
2508 readline_parse_and_bind "\e[B": history-search-forward
2504
2509
2505 2005-03-18 Fernando Perez <fperez@colorado.edu>
2510 2005-03-18 Fernando Perez <fperez@colorado.edu>
2506
2511
2507 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
2512 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
2508 LSString and SList classes which allow transparent conversions
2513 LSString and SList classes which allow transparent conversions
2509 between list mode and whitespace-separated string.
2514 between list mode and whitespace-separated string.
2510 (magic_r): Fix recursion problem in %r.
2515 (magic_r): Fix recursion problem in %r.
2511
2516
2512 * IPython/genutils.py (LSString): New class to be used for
2517 * IPython/genutils.py (LSString): New class to be used for
2513 automatic storage of the results of all alias/system calls in _o
2518 automatic storage of the results of all alias/system calls in _o
2514 and _e (stdout/err). These provide a .l/.list attribute which
2519 and _e (stdout/err). These provide a .l/.list attribute which
2515 does automatic splitting on newlines. This means that for most
2520 does automatic splitting on newlines. This means that for most
2516 uses, you'll never need to do capturing of output with %sc/%sx
2521 uses, you'll never need to do capturing of output with %sc/%sx
2517 anymore, since ipython keeps this always done for you. Note that
2522 anymore, since ipython keeps this always done for you. Note that
2518 only the LAST results are stored, the _o/e variables are
2523 only the LAST results are stored, the _o/e variables are
2519 overwritten on each call. If you need to save their contents
2524 overwritten on each call. If you need to save their contents
2520 further, simply bind them to any other name.
2525 further, simply bind them to any other name.
2521
2526
2522 2005-03-17 Fernando Perez <fperez@colorado.edu>
2527 2005-03-17 Fernando Perez <fperez@colorado.edu>
2523
2528
2524 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
2529 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
2525 prompt namespace handling.
2530 prompt namespace handling.
2526
2531
2527 2005-03-16 Fernando Perez <fperez@colorado.edu>
2532 2005-03-16 Fernando Perez <fperez@colorado.edu>
2528
2533
2529 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
2534 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
2530 classic prompts to be '>>> ' (final space was missing, and it
2535 classic prompts to be '>>> ' (final space was missing, and it
2531 trips the emacs python mode).
2536 trips the emacs python mode).
2532 (BasePrompt.__str__): Added safe support for dynamic prompt
2537 (BasePrompt.__str__): Added safe support for dynamic prompt
2533 strings. Now you can set your prompt string to be '$x', and the
2538 strings. Now you can set your prompt string to be '$x', and the
2534 value of x will be printed from your interactive namespace. The
2539 value of x will be printed from your interactive namespace. The
2535 interpolation syntax includes the full Itpl support, so
2540 interpolation syntax includes the full Itpl support, so
2536 ${foo()+x+bar()} is a valid prompt string now, and the function
2541 ${foo()+x+bar()} is a valid prompt string now, and the function
2537 calls will be made at runtime.
2542 calls will be made at runtime.
2538
2543
2539 2005-03-15 Fernando Perez <fperez@colorado.edu>
2544 2005-03-15 Fernando Perez <fperez@colorado.edu>
2540
2545
2541 * IPython/Magic.py (magic_history): renamed %hist to %history, to
2546 * IPython/Magic.py (magic_history): renamed %hist to %history, to
2542 avoid name clashes in pylab. %hist still works, it just forwards
2547 avoid name clashes in pylab. %hist still works, it just forwards
2543 the call to %history.
2548 the call to %history.
2544
2549
2545 2005-03-02 *** Released version 0.6.12
2550 2005-03-02 *** Released version 0.6.12
2546
2551
2547 2005-03-02 Fernando Perez <fperez@colorado.edu>
2552 2005-03-02 Fernando Perez <fperez@colorado.edu>
2548
2553
2549 * IPython/iplib.py (handle_magic): log magic calls properly as
2554 * IPython/iplib.py (handle_magic): log magic calls properly as
2550 ipmagic() function calls.
2555 ipmagic() function calls.
2551
2556
2552 * IPython/Magic.py (magic_time): Improved %time to support
2557 * IPython/Magic.py (magic_time): Improved %time to support
2553 statements and provide wall-clock as well as CPU time.
2558 statements and provide wall-clock as well as CPU time.
2554
2559
2555 2005-02-27 Fernando Perez <fperez@colorado.edu>
2560 2005-02-27 Fernando Perez <fperez@colorado.edu>
2556
2561
2557 * IPython/hooks.py: New hooks module, to expose user-modifiable
2562 * IPython/hooks.py: New hooks module, to expose user-modifiable
2558 IPython functionality in a clean manner. For now only the editor
2563 IPython functionality in a clean manner. For now only the editor
2559 hook is actually written, and other thigns which I intend to turn
2564 hook is actually written, and other thigns which I intend to turn
2560 into proper hooks aren't yet there. The display and prefilter
2565 into proper hooks aren't yet there. The display and prefilter
2561 stuff, for example, should be hooks. But at least now the
2566 stuff, for example, should be hooks. But at least now the
2562 framework is in place, and the rest can be moved here with more
2567 framework is in place, and the rest can be moved here with more
2563 time later. IPython had had a .hooks variable for a long time for
2568 time later. IPython had had a .hooks variable for a long time for
2564 this purpose, but I'd never actually used it for anything.
2569 this purpose, but I'd never actually used it for anything.
2565
2570
2566 2005-02-26 Fernando Perez <fperez@colorado.edu>
2571 2005-02-26 Fernando Perez <fperez@colorado.edu>
2567
2572
2568 * IPython/ipmaker.py (make_IPython): make the default ipython
2573 * IPython/ipmaker.py (make_IPython): make the default ipython
2569 directory be called _ipython under win32, to follow more the
2574 directory be called _ipython under win32, to follow more the
2570 naming peculiarities of that platform (where buggy software like
2575 naming peculiarities of that platform (where buggy software like
2571 Visual Sourcesafe breaks with .named directories). Reported by
2576 Visual Sourcesafe breaks with .named directories). Reported by
2572 Ville Vainio.
2577 Ville Vainio.
2573
2578
2574 2005-02-23 Fernando Perez <fperez@colorado.edu>
2579 2005-02-23 Fernando Perez <fperez@colorado.edu>
2575
2580
2576 * IPython/iplib.py (InteractiveShell.__init__): removed a few
2581 * IPython/iplib.py (InteractiveShell.__init__): removed a few
2577 auto_aliases for win32 which were causing problems. Users can
2582 auto_aliases for win32 which were causing problems. Users can
2578 define the ones they personally like.
2583 define the ones they personally like.
2579
2584
2580 2005-02-21 Fernando Perez <fperez@colorado.edu>
2585 2005-02-21 Fernando Perez <fperez@colorado.edu>
2581
2586
2582 * IPython/Magic.py (magic_time): new magic to time execution of
2587 * IPython/Magic.py (magic_time): new magic to time execution of
2583 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
2588 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
2584
2589
2585 2005-02-19 Fernando Perez <fperez@colorado.edu>
2590 2005-02-19 Fernando Perez <fperez@colorado.edu>
2586
2591
2587 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
2592 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
2588 into keys (for prompts, for example).
2593 into keys (for prompts, for example).
2589
2594
2590 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
2595 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
2591 prompts in case users want them. This introduces a small behavior
2596 prompts in case users want them. This introduces a small behavior
2592 change: ipython does not automatically add a space to all prompts
2597 change: ipython does not automatically add a space to all prompts
2593 anymore. To get the old prompts with a space, users should add it
2598 anymore. To get the old prompts with a space, users should add it
2594 manually to their ipythonrc file, so for example prompt_in1 should
2599 manually to their ipythonrc file, so for example prompt_in1 should
2595 now read 'In [\#]: ' instead of 'In [\#]:'.
2600 now read 'In [\#]: ' instead of 'In [\#]:'.
2596 (BasePrompt.__init__): New option prompts_pad_left (only in rc
2601 (BasePrompt.__init__): New option prompts_pad_left (only in rc
2597 file) to control left-padding of secondary prompts.
2602 file) to control left-padding of secondary prompts.
2598
2603
2599 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
2604 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
2600 the profiler can't be imported. Fix for Debian, which removed
2605 the profiler can't be imported. Fix for Debian, which removed
2601 profile.py because of License issues. I applied a slightly
2606 profile.py because of License issues. I applied a slightly
2602 modified version of the original Debian patch at
2607 modified version of the original Debian patch at
2603 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
2608 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
2604
2609
2605 2005-02-17 Fernando Perez <fperez@colorado.edu>
2610 2005-02-17 Fernando Perez <fperez@colorado.edu>
2606
2611
2607 * IPython/genutils.py (native_line_ends): Fix bug which would
2612 * IPython/genutils.py (native_line_ends): Fix bug which would
2608 cause improper line-ends under win32 b/c I was not opening files
2613 cause improper line-ends under win32 b/c I was not opening files
2609 in binary mode. Bug report and fix thanks to Ville.
2614 in binary mode. Bug report and fix thanks to Ville.
2610
2615
2611 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
2616 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
2612 trying to catch spurious foo[1] autocalls. My fix actually broke
2617 trying to catch spurious foo[1] autocalls. My fix actually broke
2613 ',/' autoquote/call with explicit escape (bad regexp).
2618 ',/' autoquote/call with explicit escape (bad regexp).
2614
2619
2615 2005-02-15 *** Released version 0.6.11
2620 2005-02-15 *** Released version 0.6.11
2616
2621
2617 2005-02-14 Fernando Perez <fperez@colorado.edu>
2622 2005-02-14 Fernando Perez <fperez@colorado.edu>
2618
2623
2619 * IPython/background_jobs.py: New background job management
2624 * IPython/background_jobs.py: New background job management
2620 subsystem. This is implemented via a new set of classes, and
2625 subsystem. This is implemented via a new set of classes, and
2621 IPython now provides a builtin 'jobs' object for background job
2626 IPython now provides a builtin 'jobs' object for background job
2622 execution. A convenience %bg magic serves as a lightweight
2627 execution. A convenience %bg magic serves as a lightweight
2623 frontend for starting the more common type of calls. This was
2628 frontend for starting the more common type of calls. This was
2624 inspired by discussions with B. Granger and the BackgroundCommand
2629 inspired by discussions with B. Granger and the BackgroundCommand
2625 class described in the book Python Scripting for Computational
2630 class described in the book Python Scripting for Computational
2626 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
2631 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
2627 (although ultimately no code from this text was used, as IPython's
2632 (although ultimately no code from this text was used, as IPython's
2628 system is a separate implementation).
2633 system is a separate implementation).
2629
2634
2630 * IPython/iplib.py (MagicCompleter.python_matches): add new option
2635 * IPython/iplib.py (MagicCompleter.python_matches): add new option
2631 to control the completion of single/double underscore names
2636 to control the completion of single/double underscore names
2632 separately. As documented in the example ipytonrc file, the
2637 separately. As documented in the example ipytonrc file, the
2633 readline_omit__names variable can now be set to 2, to omit even
2638 readline_omit__names variable can now be set to 2, to omit even
2634 single underscore names. Thanks to a patch by Brian Wong
2639 single underscore names. Thanks to a patch by Brian Wong
2635 <BrianWong-AT-AirgoNetworks.Com>.
2640 <BrianWong-AT-AirgoNetworks.Com>.
2636 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
2641 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
2637 be autocalled as foo([1]) if foo were callable. A problem for
2642 be autocalled as foo([1]) if foo were callable. A problem for
2638 things which are both callable and implement __getitem__.
2643 things which are both callable and implement __getitem__.
2639 (init_readline): Fix autoindentation for win32. Thanks to a patch
2644 (init_readline): Fix autoindentation for win32. Thanks to a patch
2640 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
2645 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
2641
2646
2642 2005-02-12 Fernando Perez <fperez@colorado.edu>
2647 2005-02-12 Fernando Perez <fperez@colorado.edu>
2643
2648
2644 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
2649 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
2645 which I had written long ago to sort out user error messages which
2650 which I had written long ago to sort out user error messages which
2646 may occur during startup. This seemed like a good idea initially,
2651 may occur during startup. This seemed like a good idea initially,
2647 but it has proven a disaster in retrospect. I don't want to
2652 but it has proven a disaster in retrospect. I don't want to
2648 change much code for now, so my fix is to set the internal 'debug'
2653 change much code for now, so my fix is to set the internal 'debug'
2649 flag to true everywhere, whose only job was precisely to control
2654 flag to true everywhere, whose only job was precisely to control
2650 this subsystem. This closes issue 28 (as well as avoiding all
2655 this subsystem. This closes issue 28 (as well as avoiding all
2651 sorts of strange hangups which occur from time to time).
2656 sorts of strange hangups which occur from time to time).
2652
2657
2653 2005-02-07 Fernando Perez <fperez@colorado.edu>
2658 2005-02-07 Fernando Perez <fperez@colorado.edu>
2654
2659
2655 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
2660 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
2656 previous call produced a syntax error.
2661 previous call produced a syntax error.
2657
2662
2658 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2663 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2659 classes without constructor.
2664 classes without constructor.
2660
2665
2661 2005-02-06 Fernando Perez <fperez@colorado.edu>
2666 2005-02-06 Fernando Perez <fperez@colorado.edu>
2662
2667
2663 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
2668 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
2664 completions with the results of each matcher, so we return results
2669 completions with the results of each matcher, so we return results
2665 to the user from all namespaces. This breaks with ipython
2670 to the user from all namespaces. This breaks with ipython
2666 tradition, but I think it's a nicer behavior. Now you get all
2671 tradition, but I think it's a nicer behavior. Now you get all
2667 possible completions listed, from all possible namespaces (python,
2672 possible completions listed, from all possible namespaces (python,
2668 filesystem, magics...) After a request by John Hunter
2673 filesystem, magics...) After a request by John Hunter
2669 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2674 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2670
2675
2671 2005-02-05 Fernando Perez <fperez@colorado.edu>
2676 2005-02-05 Fernando Perez <fperez@colorado.edu>
2672
2677
2673 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
2678 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
2674 the call had quote characters in it (the quotes were stripped).
2679 the call had quote characters in it (the quotes were stripped).
2675
2680
2676 2005-01-31 Fernando Perez <fperez@colorado.edu>
2681 2005-01-31 Fernando Perez <fperez@colorado.edu>
2677
2682
2678 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
2683 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
2679 Itpl.itpl() to make the code more robust against psyco
2684 Itpl.itpl() to make the code more robust against psyco
2680 optimizations.
2685 optimizations.
2681
2686
2682 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
2687 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
2683 of causing an exception. Quicker, cleaner.
2688 of causing an exception. Quicker, cleaner.
2684
2689
2685 2005-01-28 Fernando Perez <fperez@colorado.edu>
2690 2005-01-28 Fernando Perez <fperez@colorado.edu>
2686
2691
2687 * scripts/ipython_win_post_install.py (install): hardcode
2692 * scripts/ipython_win_post_install.py (install): hardcode
2688 sys.prefix+'python.exe' as the executable path. It turns out that
2693 sys.prefix+'python.exe' as the executable path. It turns out that
2689 during the post-installation run, sys.executable resolves to the
2694 during the post-installation run, sys.executable resolves to the
2690 name of the binary installer! I should report this as a distutils
2695 name of the binary installer! I should report this as a distutils
2691 bug, I think. I updated the .10 release with this tiny fix, to
2696 bug, I think. I updated the .10 release with this tiny fix, to
2692 avoid annoying the lists further.
2697 avoid annoying the lists further.
2693
2698
2694 2005-01-27 *** Released version 0.6.10
2699 2005-01-27 *** Released version 0.6.10
2695
2700
2696 2005-01-27 Fernando Perez <fperez@colorado.edu>
2701 2005-01-27 Fernando Perez <fperez@colorado.edu>
2697
2702
2698 * IPython/numutils.py (norm): Added 'inf' as optional name for
2703 * IPython/numutils.py (norm): Added 'inf' as optional name for
2699 L-infinity norm, included references to mathworld.com for vector
2704 L-infinity norm, included references to mathworld.com for vector
2700 norm definitions.
2705 norm definitions.
2701 (amin/amax): added amin/amax for array min/max. Similar to what
2706 (amin/amax): added amin/amax for array min/max. Similar to what
2702 pylab ships with after the recent reorganization of names.
2707 pylab ships with after the recent reorganization of names.
2703 (spike/spike_odd): removed deprecated spike/spike_odd functions.
2708 (spike/spike_odd): removed deprecated spike/spike_odd functions.
2704
2709
2705 * ipython.el: committed Alex's recent fixes and improvements.
2710 * ipython.el: committed Alex's recent fixes and improvements.
2706 Tested with python-mode from CVS, and it looks excellent. Since
2711 Tested with python-mode from CVS, and it looks excellent. Since
2707 python-mode hasn't released anything in a while, I'm temporarily
2712 python-mode hasn't released anything in a while, I'm temporarily
2708 putting a copy of today's CVS (v 4.70) of python-mode in:
2713 putting a copy of today's CVS (v 4.70) of python-mode in:
2709 http://ipython.scipy.org/tmp/python-mode.el
2714 http://ipython.scipy.org/tmp/python-mode.el
2710
2715
2711 * scripts/ipython_win_post_install.py (install): Win32 fix to use
2716 * scripts/ipython_win_post_install.py (install): Win32 fix to use
2712 sys.executable for the executable name, instead of assuming it's
2717 sys.executable for the executable name, instead of assuming it's
2713 called 'python.exe' (the post-installer would have produced broken
2718 called 'python.exe' (the post-installer would have produced broken
2714 setups on systems with a differently named python binary).
2719 setups on systems with a differently named python binary).
2715
2720
2716 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
2721 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
2717 references to os.linesep, to make the code more
2722 references to os.linesep, to make the code more
2718 platform-independent. This is also part of the win32 coloring
2723 platform-independent. This is also part of the win32 coloring
2719 fixes.
2724 fixes.
2720
2725
2721 * IPython/genutils.py (page_dumb): Remove attempts to chop long
2726 * IPython/genutils.py (page_dumb): Remove attempts to chop long
2722 lines, which actually cause coloring bugs because the length of
2727 lines, which actually cause coloring bugs because the length of
2723 the line is very difficult to correctly compute with embedded
2728 the line is very difficult to correctly compute with embedded
2724 escapes. This was the source of all the coloring problems under
2729 escapes. This was the source of all the coloring problems under
2725 Win32. I think that _finally_, Win32 users have a properly
2730 Win32. I think that _finally_, Win32 users have a properly
2726 working ipython in all respects. This would never have happened
2731 working ipython in all respects. This would never have happened
2727 if not for Gary Bishop and Viktor Ransmayr's great help and work.
2732 if not for Gary Bishop and Viktor Ransmayr's great help and work.
2728
2733
2729 2005-01-26 *** Released version 0.6.9
2734 2005-01-26 *** Released version 0.6.9
2730
2735
2731 2005-01-25 Fernando Perez <fperez@colorado.edu>
2736 2005-01-25 Fernando Perez <fperez@colorado.edu>
2732
2737
2733 * setup.py: finally, we have a true Windows installer, thanks to
2738 * setup.py: finally, we have a true Windows installer, thanks to
2734 the excellent work of Viktor Ransmayr
2739 the excellent work of Viktor Ransmayr
2735 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
2740 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
2736 Windows users. The setup routine is quite a bit cleaner thanks to
2741 Windows users. The setup routine is quite a bit cleaner thanks to
2737 this, and the post-install script uses the proper functions to
2742 this, and the post-install script uses the proper functions to
2738 allow a clean de-installation using the standard Windows Control
2743 allow a clean de-installation using the standard Windows Control
2739 Panel.
2744 Panel.
2740
2745
2741 * IPython/genutils.py (get_home_dir): changed to use the $HOME
2746 * IPython/genutils.py (get_home_dir): changed to use the $HOME
2742 environment variable under all OSes (including win32) if
2747 environment variable under all OSes (including win32) if
2743 available. This will give consistency to win32 users who have set
2748 available. This will give consistency to win32 users who have set
2744 this variable for any reason. If os.environ['HOME'] fails, the
2749 this variable for any reason. If os.environ['HOME'] fails, the
2745 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
2750 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
2746
2751
2747 2005-01-24 Fernando Perez <fperez@colorado.edu>
2752 2005-01-24 Fernando Perez <fperez@colorado.edu>
2748
2753
2749 * IPython/numutils.py (empty_like): add empty_like(), similar to
2754 * IPython/numutils.py (empty_like): add empty_like(), similar to
2750 zeros_like() but taking advantage of the new empty() Numeric routine.
2755 zeros_like() but taking advantage of the new empty() Numeric routine.
2751
2756
2752 2005-01-23 *** Released version 0.6.8
2757 2005-01-23 *** Released version 0.6.8
2753
2758
2754 2005-01-22 Fernando Perez <fperez@colorado.edu>
2759 2005-01-22 Fernando Perez <fperez@colorado.edu>
2755
2760
2756 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
2761 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
2757 automatic show() calls. After discussing things with JDH, it
2762 automatic show() calls. After discussing things with JDH, it
2758 turns out there are too many corner cases where this can go wrong.
2763 turns out there are too many corner cases where this can go wrong.
2759 It's best not to try to be 'too smart', and simply have ipython
2764 It's best not to try to be 'too smart', and simply have ipython
2760 reproduce as much as possible the default behavior of a normal
2765 reproduce as much as possible the default behavior of a normal
2761 python shell.
2766 python shell.
2762
2767
2763 * IPython/iplib.py (InteractiveShell.__init__): Modified the
2768 * IPython/iplib.py (InteractiveShell.__init__): Modified the
2764 line-splitting regexp and _prefilter() to avoid calling getattr()
2769 line-splitting regexp and _prefilter() to avoid calling getattr()
2765 on assignments. This closes
2770 on assignments. This closes
2766 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
2771 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
2767 readline uses getattr(), so a simple <TAB> keypress is still
2772 readline uses getattr(), so a simple <TAB> keypress is still
2768 enough to trigger getattr() calls on an object.
2773 enough to trigger getattr() calls on an object.
2769
2774
2770 2005-01-21 Fernando Perez <fperez@colorado.edu>
2775 2005-01-21 Fernando Perez <fperez@colorado.edu>
2771
2776
2772 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
2777 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
2773 docstring under pylab so it doesn't mask the original.
2778 docstring under pylab so it doesn't mask the original.
2774
2779
2775 2005-01-21 *** Released version 0.6.7
2780 2005-01-21 *** Released version 0.6.7
2776
2781
2777 2005-01-21 Fernando Perez <fperez@colorado.edu>
2782 2005-01-21 Fernando Perez <fperez@colorado.edu>
2778
2783
2779 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
2784 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
2780 signal handling for win32 users in multithreaded mode.
2785 signal handling for win32 users in multithreaded mode.
2781
2786
2782 2005-01-17 Fernando Perez <fperez@colorado.edu>
2787 2005-01-17 Fernando Perez <fperez@colorado.edu>
2783
2788
2784 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2789 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2785 instances with no __init__. After a crash report by Norbert Nemec
2790 instances with no __init__. After a crash report by Norbert Nemec
2786 <Norbert-AT-nemec-online.de>.
2791 <Norbert-AT-nemec-online.de>.
2787
2792
2788 2005-01-14 Fernando Perez <fperez@colorado.edu>
2793 2005-01-14 Fernando Perez <fperez@colorado.edu>
2789
2794
2790 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
2795 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
2791 names for verbose exceptions, when multiple dotted names and the
2796 names for verbose exceptions, when multiple dotted names and the
2792 'parent' object were present on the same line.
2797 'parent' object were present on the same line.
2793
2798
2794 2005-01-11 Fernando Perez <fperez@colorado.edu>
2799 2005-01-11 Fernando Perez <fperez@colorado.edu>
2795
2800
2796 * IPython/genutils.py (flag_calls): new utility to trap and flag
2801 * IPython/genutils.py (flag_calls): new utility to trap and flag
2797 calls in functions. I need it to clean up matplotlib support.
2802 calls in functions. I need it to clean up matplotlib support.
2798 Also removed some deprecated code in genutils.
2803 Also removed some deprecated code in genutils.
2799
2804
2800 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
2805 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
2801 that matplotlib scripts called with %run, which don't call show()
2806 that matplotlib scripts called with %run, which don't call show()
2802 themselves, still have their plotting windows open.
2807 themselves, still have their plotting windows open.
2803
2808
2804 2005-01-05 Fernando Perez <fperez@colorado.edu>
2809 2005-01-05 Fernando Perez <fperez@colorado.edu>
2805
2810
2806 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
2811 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
2807 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
2812 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
2808
2813
2809 2004-12-19 Fernando Perez <fperez@colorado.edu>
2814 2004-12-19 Fernando Perez <fperez@colorado.edu>
2810
2815
2811 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
2816 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
2812 parent_runcode, which was an eyesore. The same result can be
2817 parent_runcode, which was an eyesore. The same result can be
2813 obtained with Python's regular superclass mechanisms.
2818 obtained with Python's regular superclass mechanisms.
2814
2819
2815 2004-12-17 Fernando Perez <fperez@colorado.edu>
2820 2004-12-17 Fernando Perez <fperez@colorado.edu>
2816
2821
2817 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
2822 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
2818 reported by Prabhu.
2823 reported by Prabhu.
2819 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
2824 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
2820 sys.stderr) instead of explicitly calling sys.stderr. This helps
2825 sys.stderr) instead of explicitly calling sys.stderr. This helps
2821 maintain our I/O abstractions clean, for future GUI embeddings.
2826 maintain our I/O abstractions clean, for future GUI embeddings.
2822
2827
2823 * IPython/genutils.py (info): added new utility for sys.stderr
2828 * IPython/genutils.py (info): added new utility for sys.stderr
2824 unified info message handling (thin wrapper around warn()).
2829 unified info message handling (thin wrapper around warn()).
2825
2830
2826 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
2831 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
2827 composite (dotted) names on verbose exceptions.
2832 composite (dotted) names on verbose exceptions.
2828 (VerboseTB.nullrepr): harden against another kind of errors which
2833 (VerboseTB.nullrepr): harden against another kind of errors which
2829 Python's inspect module can trigger, and which were crashing
2834 Python's inspect module can trigger, and which were crashing
2830 IPython. Thanks to a report by Marco Lombardi
2835 IPython. Thanks to a report by Marco Lombardi
2831 <mlombard-AT-ma010192.hq.eso.org>.
2836 <mlombard-AT-ma010192.hq.eso.org>.
2832
2837
2833 2004-12-13 *** Released version 0.6.6
2838 2004-12-13 *** Released version 0.6.6
2834
2839
2835 2004-12-12 Fernando Perez <fperez@colorado.edu>
2840 2004-12-12 Fernando Perez <fperez@colorado.edu>
2836
2841
2837 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
2842 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
2838 generated by pygtk upon initialization if it was built without
2843 generated by pygtk upon initialization if it was built without
2839 threads (for matplotlib users). After a crash reported by
2844 threads (for matplotlib users). After a crash reported by
2840 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
2845 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
2841
2846
2842 * IPython/ipmaker.py (make_IPython): fix small bug in the
2847 * IPython/ipmaker.py (make_IPython): fix small bug in the
2843 import_some parameter for multiple imports.
2848 import_some parameter for multiple imports.
2844
2849
2845 * IPython/iplib.py (ipmagic): simplified the interface of
2850 * IPython/iplib.py (ipmagic): simplified the interface of
2846 ipmagic() to take a single string argument, just as it would be
2851 ipmagic() to take a single string argument, just as it would be
2847 typed at the IPython cmd line.
2852 typed at the IPython cmd line.
2848 (ipalias): Added new ipalias() with an interface identical to
2853 (ipalias): Added new ipalias() with an interface identical to
2849 ipmagic(). This completes exposing a pure python interface to the
2854 ipmagic(). This completes exposing a pure python interface to the
2850 alias and magic system, which can be used in loops or more complex
2855 alias and magic system, which can be used in loops or more complex
2851 code where IPython's automatic line mangling is not active.
2856 code where IPython's automatic line mangling is not active.
2852
2857
2853 * IPython/genutils.py (timing): changed interface of timing to
2858 * IPython/genutils.py (timing): changed interface of timing to
2854 simply run code once, which is the most common case. timings()
2859 simply run code once, which is the most common case. timings()
2855 remains unchanged, for the cases where you want multiple runs.
2860 remains unchanged, for the cases where you want multiple runs.
2856
2861
2857 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
2862 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
2858 bug where Python2.2 crashes with exec'ing code which does not end
2863 bug where Python2.2 crashes with exec'ing code which does not end
2859 in a single newline. Python 2.3 is OK, so I hadn't noticed this
2864 in a single newline. Python 2.3 is OK, so I hadn't noticed this
2860 before.
2865 before.
2861
2866
2862 2004-12-10 Fernando Perez <fperez@colorado.edu>
2867 2004-12-10 Fernando Perez <fperez@colorado.edu>
2863
2868
2864 * IPython/Magic.py (Magic.magic_prun): changed name of option from
2869 * IPython/Magic.py (Magic.magic_prun): changed name of option from
2865 -t to -T, to accomodate the new -t flag in %run (the %run and
2870 -t to -T, to accomodate the new -t flag in %run (the %run and
2866 %prun options are kind of intermixed, and it's not easy to change
2871 %prun options are kind of intermixed, and it's not easy to change
2867 this with the limitations of python's getopt).
2872 this with the limitations of python's getopt).
2868
2873
2869 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
2874 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
2870 the execution of scripts. It's not as fine-tuned as timeit.py,
2875 the execution of scripts. It's not as fine-tuned as timeit.py,
2871 but it works from inside ipython (and under 2.2, which lacks
2876 but it works from inside ipython (and under 2.2, which lacks
2872 timeit.py). Optionally a number of runs > 1 can be given for
2877 timeit.py). Optionally a number of runs > 1 can be given for
2873 timing very short-running code.
2878 timing very short-running code.
2874
2879
2875 * IPython/genutils.py (uniq_stable): new routine which returns a
2880 * IPython/genutils.py (uniq_stable): new routine which returns a
2876 list of unique elements in any iterable, but in stable order of
2881 list of unique elements in any iterable, but in stable order of
2877 appearance. I needed this for the ultraTB fixes, and it's a handy
2882 appearance. I needed this for the ultraTB fixes, and it's a handy
2878 utility.
2883 utility.
2879
2884
2880 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
2885 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
2881 dotted names in Verbose exceptions. This had been broken since
2886 dotted names in Verbose exceptions. This had been broken since
2882 the very start, now x.y will properly be printed in a Verbose
2887 the very start, now x.y will properly be printed in a Verbose
2883 traceback, instead of x being shown and y appearing always as an
2888 traceback, instead of x being shown and y appearing always as an
2884 'undefined global'. Getting this to work was a bit tricky,
2889 'undefined global'. Getting this to work was a bit tricky,
2885 because by default python tokenizers are stateless. Saved by
2890 because by default python tokenizers are stateless. Saved by
2886 python's ability to easily add a bit of state to an arbitrary
2891 python's ability to easily add a bit of state to an arbitrary
2887 function (without needing to build a full-blown callable object).
2892 function (without needing to build a full-blown callable object).
2888
2893
2889 Also big cleanup of this code, which had horrendous runtime
2894 Also big cleanup of this code, which had horrendous runtime
2890 lookups of zillions of attributes for colorization. Moved all
2895 lookups of zillions of attributes for colorization. Moved all
2891 this code into a few templates, which make it cleaner and quicker.
2896 this code into a few templates, which make it cleaner and quicker.
2892
2897
2893 Printout quality was also improved for Verbose exceptions: one
2898 Printout quality was also improved for Verbose exceptions: one
2894 variable per line, and memory addresses are printed (this can be
2899 variable per line, and memory addresses are printed (this can be
2895 quite handy in nasty debugging situations, which is what Verbose
2900 quite handy in nasty debugging situations, which is what Verbose
2896 is for).
2901 is for).
2897
2902
2898 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
2903 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
2899 the command line as scripts to be loaded by embedded instances.
2904 the command line as scripts to be loaded by embedded instances.
2900 Doing so has the potential for an infinite recursion if there are
2905 Doing so has the potential for an infinite recursion if there are
2901 exceptions thrown in the process. This fixes a strange crash
2906 exceptions thrown in the process. This fixes a strange crash
2902 reported by Philippe MULLER <muller-AT-irit.fr>.
2907 reported by Philippe MULLER <muller-AT-irit.fr>.
2903
2908
2904 2004-12-09 Fernando Perez <fperez@colorado.edu>
2909 2004-12-09 Fernando Perez <fperez@colorado.edu>
2905
2910
2906 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2911 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2907 to reflect new names in matplotlib, which now expose the
2912 to reflect new names in matplotlib, which now expose the
2908 matlab-compatible interface via a pylab module instead of the
2913 matlab-compatible interface via a pylab module instead of the
2909 'matlab' name. The new code is backwards compatible, so users of
2914 'matlab' name. The new code is backwards compatible, so users of
2910 all matplotlib versions are OK. Patch by J. Hunter.
2915 all matplotlib versions are OK. Patch by J. Hunter.
2911
2916
2912 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2917 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2913 of __init__ docstrings for instances (class docstrings are already
2918 of __init__ docstrings for instances (class docstrings are already
2914 automatically printed). Instances with customized docstrings
2919 automatically printed). Instances with customized docstrings
2915 (indep. of the class) are also recognized and all 3 separate
2920 (indep. of the class) are also recognized and all 3 separate
2916 docstrings are printed (instance, class, constructor). After some
2921 docstrings are printed (instance, class, constructor). After some
2917 comments/suggestions by J. Hunter.
2922 comments/suggestions by J. Hunter.
2918
2923
2919 2004-12-05 Fernando Perez <fperez@colorado.edu>
2924 2004-12-05 Fernando Perez <fperez@colorado.edu>
2920
2925
2921 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2926 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2922 warnings when tab-completion fails and triggers an exception.
2927 warnings when tab-completion fails and triggers an exception.
2923
2928
2924 2004-12-03 Fernando Perez <fperez@colorado.edu>
2929 2004-12-03 Fernando Perez <fperez@colorado.edu>
2925
2930
2926 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2931 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2927 be triggered when using 'run -p'. An incorrect option flag was
2932 be triggered when using 'run -p'. An incorrect option flag was
2928 being set ('d' instead of 'D').
2933 being set ('d' instead of 'D').
2929 (manpage): fix missing escaped \- sign.
2934 (manpage): fix missing escaped \- sign.
2930
2935
2931 2004-11-30 *** Released version 0.6.5
2936 2004-11-30 *** Released version 0.6.5
2932
2937
2933 2004-11-30 Fernando Perez <fperez@colorado.edu>
2938 2004-11-30 Fernando Perez <fperez@colorado.edu>
2934
2939
2935 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2940 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2936 setting with -d option.
2941 setting with -d option.
2937
2942
2938 * setup.py (docfiles): Fix problem where the doc glob I was using
2943 * setup.py (docfiles): Fix problem where the doc glob I was using
2939 was COMPLETELY BROKEN. It was giving the right files by pure
2944 was COMPLETELY BROKEN. It was giving the right files by pure
2940 accident, but failed once I tried to include ipython.el. Note:
2945 accident, but failed once I tried to include ipython.el. Note:
2941 glob() does NOT allow you to do exclusion on multiple endings!
2946 glob() does NOT allow you to do exclusion on multiple endings!
2942
2947
2943 2004-11-29 Fernando Perez <fperez@colorado.edu>
2948 2004-11-29 Fernando Perez <fperez@colorado.edu>
2944
2949
2945 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2950 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2946 the manpage as the source. Better formatting & consistency.
2951 the manpage as the source. Better formatting & consistency.
2947
2952
2948 * IPython/Magic.py (magic_run): Added new -d option, to run
2953 * IPython/Magic.py (magic_run): Added new -d option, to run
2949 scripts under the control of the python pdb debugger. Note that
2954 scripts under the control of the python pdb debugger. Note that
2950 this required changing the %prun option -d to -D, to avoid a clash
2955 this required changing the %prun option -d to -D, to avoid a clash
2951 (since %run must pass options to %prun, and getopt is too dumb to
2956 (since %run must pass options to %prun, and getopt is too dumb to
2952 handle options with string values with embedded spaces). Thanks
2957 handle options with string values with embedded spaces). Thanks
2953 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2958 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2954 (magic_who_ls): added type matching to %who and %whos, so that one
2959 (magic_who_ls): added type matching to %who and %whos, so that one
2955 can filter their output to only include variables of certain
2960 can filter their output to only include variables of certain
2956 types. Another suggestion by Matthew.
2961 types. Another suggestion by Matthew.
2957 (magic_whos): Added memory summaries in kb and Mb for arrays.
2962 (magic_whos): Added memory summaries in kb and Mb for arrays.
2958 (magic_who): Improve formatting (break lines every 9 vars).
2963 (magic_who): Improve formatting (break lines every 9 vars).
2959
2964
2960 2004-11-28 Fernando Perez <fperez@colorado.edu>
2965 2004-11-28 Fernando Perez <fperez@colorado.edu>
2961
2966
2962 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2967 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2963 cache when empty lines were present.
2968 cache when empty lines were present.
2964
2969
2965 2004-11-24 Fernando Perez <fperez@colorado.edu>
2970 2004-11-24 Fernando Perez <fperez@colorado.edu>
2966
2971
2967 * IPython/usage.py (__doc__): document the re-activated threading
2972 * IPython/usage.py (__doc__): document the re-activated threading
2968 options for WX and GTK.
2973 options for WX and GTK.
2969
2974
2970 2004-11-23 Fernando Perez <fperez@colorado.edu>
2975 2004-11-23 Fernando Perez <fperez@colorado.edu>
2971
2976
2972 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2977 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2973 the -wthread and -gthread options, along with a new -tk one to try
2978 the -wthread and -gthread options, along with a new -tk one to try
2974 and coordinate Tk threading with wx/gtk. The tk support is very
2979 and coordinate Tk threading with wx/gtk. The tk support is very
2975 platform dependent, since it seems to require Tcl and Tk to be
2980 platform dependent, since it seems to require Tcl and Tk to be
2976 built with threads (Fedora1/2 appears NOT to have it, but in
2981 built with threads (Fedora1/2 appears NOT to have it, but in
2977 Prabhu's Debian boxes it works OK). But even with some Tk
2982 Prabhu's Debian boxes it works OK). But even with some Tk
2978 limitations, this is a great improvement.
2983 limitations, this is a great improvement.
2979
2984
2980 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2985 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2981 info in user prompts. Patch by Prabhu.
2986 info in user prompts. Patch by Prabhu.
2982
2987
2983 2004-11-18 Fernando Perez <fperez@colorado.edu>
2988 2004-11-18 Fernando Perez <fperez@colorado.edu>
2984
2989
2985 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2990 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2986 EOFErrors and bail, to avoid infinite loops if a non-terminating
2991 EOFErrors and bail, to avoid infinite loops if a non-terminating
2987 file is fed into ipython. Patch submitted in issue 19 by user,
2992 file is fed into ipython. Patch submitted in issue 19 by user,
2988 many thanks.
2993 many thanks.
2989
2994
2990 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2995 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2991 autoquote/parens in continuation prompts, which can cause lots of
2996 autoquote/parens in continuation prompts, which can cause lots of
2992 problems. Closes roundup issue 20.
2997 problems. Closes roundup issue 20.
2993
2998
2994 2004-11-17 Fernando Perez <fperez@colorado.edu>
2999 2004-11-17 Fernando Perez <fperez@colorado.edu>
2995
3000
2996 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
3001 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2997 reported as debian bug #280505. I'm not sure my local changelog
3002 reported as debian bug #280505. I'm not sure my local changelog
2998 entry has the proper debian format (Jack?).
3003 entry has the proper debian format (Jack?).
2999
3004
3000 2004-11-08 *** Released version 0.6.4
3005 2004-11-08 *** Released version 0.6.4
3001
3006
3002 2004-11-08 Fernando Perez <fperez@colorado.edu>
3007 2004-11-08 Fernando Perez <fperez@colorado.edu>
3003
3008
3004 * IPython/iplib.py (init_readline): Fix exit message for Windows
3009 * IPython/iplib.py (init_readline): Fix exit message for Windows
3005 when readline is active. Thanks to a report by Eric Jones
3010 when readline is active. Thanks to a report by Eric Jones
3006 <eric-AT-enthought.com>.
3011 <eric-AT-enthought.com>.
3007
3012
3008 2004-11-07 Fernando Perez <fperez@colorado.edu>
3013 2004-11-07 Fernando Perez <fperez@colorado.edu>
3009
3014
3010 * IPython/genutils.py (page): Add a trap for OSError exceptions,
3015 * IPython/genutils.py (page): Add a trap for OSError exceptions,
3011 sometimes seen by win2k/cygwin users.
3016 sometimes seen by win2k/cygwin users.
3012
3017
3013 2004-11-06 Fernando Perez <fperez@colorado.edu>
3018 2004-11-06 Fernando Perez <fperez@colorado.edu>
3014
3019
3015 * IPython/iplib.py (interact): Change the handling of %Exit from
3020 * IPython/iplib.py (interact): Change the handling of %Exit from
3016 trying to propagate a SystemExit to an internal ipython flag.
3021 trying to propagate a SystemExit to an internal ipython flag.
3017 This is less elegant than using Python's exception mechanism, but
3022 This is less elegant than using Python's exception mechanism, but
3018 I can't get that to work reliably with threads, so under -pylab
3023 I can't get that to work reliably with threads, so under -pylab
3019 %Exit was hanging IPython. Cross-thread exception handling is
3024 %Exit was hanging IPython. Cross-thread exception handling is
3020 really a bitch. Thaks to a bug report by Stephen Walton
3025 really a bitch. Thaks to a bug report by Stephen Walton
3021 <stephen.walton-AT-csun.edu>.
3026 <stephen.walton-AT-csun.edu>.
3022
3027
3023 2004-11-04 Fernando Perez <fperez@colorado.edu>
3028 2004-11-04 Fernando Perez <fperez@colorado.edu>
3024
3029
3025 * IPython/iplib.py (raw_input_original): store a pointer to the
3030 * IPython/iplib.py (raw_input_original): store a pointer to the
3026 true raw_input to harden against code which can modify it
3031 true raw_input to harden against code which can modify it
3027 (wx.py.PyShell does this and would otherwise crash ipython).
3032 (wx.py.PyShell does this and would otherwise crash ipython).
3028 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
3033 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
3029
3034
3030 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
3035 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
3031 Ctrl-C problem, which does not mess up the input line.
3036 Ctrl-C problem, which does not mess up the input line.
3032
3037
3033 2004-11-03 Fernando Perez <fperez@colorado.edu>
3038 2004-11-03 Fernando Perez <fperez@colorado.edu>
3034
3039
3035 * IPython/Release.py: Changed licensing to BSD, in all files.
3040 * IPython/Release.py: Changed licensing to BSD, in all files.
3036 (name): lowercase name for tarball/RPM release.
3041 (name): lowercase name for tarball/RPM release.
3037
3042
3038 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
3043 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
3039 use throughout ipython.
3044 use throughout ipython.
3040
3045
3041 * IPython/Magic.py (Magic._ofind): Switch to using the new
3046 * IPython/Magic.py (Magic._ofind): Switch to using the new
3042 OInspect.getdoc() function.
3047 OInspect.getdoc() function.
3043
3048
3044 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
3049 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
3045 of the line currently being canceled via Ctrl-C. It's extremely
3050 of the line currently being canceled via Ctrl-C. It's extremely
3046 ugly, but I don't know how to do it better (the problem is one of
3051 ugly, but I don't know how to do it better (the problem is one of
3047 handling cross-thread exceptions).
3052 handling cross-thread exceptions).
3048
3053
3049 2004-10-28 Fernando Perez <fperez@colorado.edu>
3054 2004-10-28 Fernando Perez <fperez@colorado.edu>
3050
3055
3051 * IPython/Shell.py (signal_handler): add signal handlers to trap
3056 * IPython/Shell.py (signal_handler): add signal handlers to trap
3052 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
3057 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
3053 report by Francesc Alted.
3058 report by Francesc Alted.
3054
3059
3055 2004-10-21 Fernando Perez <fperez@colorado.edu>
3060 2004-10-21 Fernando Perez <fperez@colorado.edu>
3056
3061
3057 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
3062 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
3058 to % for pysh syntax extensions.
3063 to % for pysh syntax extensions.
3059
3064
3060 2004-10-09 Fernando Perez <fperez@colorado.edu>
3065 2004-10-09 Fernando Perez <fperez@colorado.edu>
3061
3066
3062 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
3067 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
3063 arrays to print a more useful summary, without calling str(arr).
3068 arrays to print a more useful summary, without calling str(arr).
3064 This avoids the problem of extremely lengthy computations which
3069 This avoids the problem of extremely lengthy computations which
3065 occur if arr is large, and appear to the user as a system lockup
3070 occur if arr is large, and appear to the user as a system lockup
3066 with 100% cpu activity. After a suggestion by Kristian Sandberg
3071 with 100% cpu activity. After a suggestion by Kristian Sandberg
3067 <Kristian.Sandberg@colorado.edu>.
3072 <Kristian.Sandberg@colorado.edu>.
3068 (Magic.__init__): fix bug in global magic escapes not being
3073 (Magic.__init__): fix bug in global magic escapes not being
3069 correctly set.
3074 correctly set.
3070
3075
3071 2004-10-08 Fernando Perez <fperez@colorado.edu>
3076 2004-10-08 Fernando Perez <fperez@colorado.edu>
3072
3077
3073 * IPython/Magic.py (__license__): change to absolute imports of
3078 * IPython/Magic.py (__license__): change to absolute imports of
3074 ipython's own internal packages, to start adapting to the absolute
3079 ipython's own internal packages, to start adapting to the absolute
3075 import requirement of PEP-328.
3080 import requirement of PEP-328.
3076
3081
3077 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
3082 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
3078 files, and standardize author/license marks through the Release
3083 files, and standardize author/license marks through the Release
3079 module instead of having per/file stuff (except for files with
3084 module instead of having per/file stuff (except for files with
3080 particular licenses, like the MIT/PSF-licensed codes).
3085 particular licenses, like the MIT/PSF-licensed codes).
3081
3086
3082 * IPython/Debugger.py: remove dead code for python 2.1
3087 * IPython/Debugger.py: remove dead code for python 2.1
3083
3088
3084 2004-10-04 Fernando Perez <fperez@colorado.edu>
3089 2004-10-04 Fernando Perez <fperez@colorado.edu>
3085
3090
3086 * IPython/iplib.py (ipmagic): New function for accessing magics
3091 * IPython/iplib.py (ipmagic): New function for accessing magics
3087 via a normal python function call.
3092 via a normal python function call.
3088
3093
3089 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
3094 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
3090 from '@' to '%', to accomodate the new @decorator syntax of python
3095 from '@' to '%', to accomodate the new @decorator syntax of python
3091 2.4.
3096 2.4.
3092
3097
3093 2004-09-29 Fernando Perez <fperez@colorado.edu>
3098 2004-09-29 Fernando Perez <fperez@colorado.edu>
3094
3099
3095 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
3100 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
3096 matplotlib.use to prevent running scripts which try to switch
3101 matplotlib.use to prevent running scripts which try to switch
3097 interactive backends from within ipython. This will just crash
3102 interactive backends from within ipython. This will just crash
3098 the python interpreter, so we can't allow it (but a detailed error
3103 the python interpreter, so we can't allow it (but a detailed error
3099 is given to the user).
3104 is given to the user).
3100
3105
3101 2004-09-28 Fernando Perez <fperez@colorado.edu>
3106 2004-09-28 Fernando Perez <fperez@colorado.edu>
3102
3107
3103 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
3108 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
3104 matplotlib-related fixes so that using @run with non-matplotlib
3109 matplotlib-related fixes so that using @run with non-matplotlib
3105 scripts doesn't pop up spurious plot windows. This requires
3110 scripts doesn't pop up spurious plot windows. This requires
3106 matplotlib >= 0.63, where I had to make some changes as well.
3111 matplotlib >= 0.63, where I had to make some changes as well.
3107
3112
3108 * IPython/ipmaker.py (make_IPython): update version requirement to
3113 * IPython/ipmaker.py (make_IPython): update version requirement to
3109 python 2.2.
3114 python 2.2.
3110
3115
3111 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
3116 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
3112 banner arg for embedded customization.
3117 banner arg for embedded customization.
3113
3118
3114 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
3119 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
3115 explicit uses of __IP as the IPython's instance name. Now things
3120 explicit uses of __IP as the IPython's instance name. Now things
3116 are properly handled via the shell.name value. The actual code
3121 are properly handled via the shell.name value. The actual code
3117 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
3122 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
3118 is much better than before. I'll clean things completely when the
3123 is much better than before. I'll clean things completely when the
3119 magic stuff gets a real overhaul.
3124 magic stuff gets a real overhaul.
3120
3125
3121 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
3126 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
3122 minor changes to debian dir.
3127 minor changes to debian dir.
3123
3128
3124 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
3129 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
3125 pointer to the shell itself in the interactive namespace even when
3130 pointer to the shell itself in the interactive namespace even when
3126 a user-supplied dict is provided. This is needed for embedding
3131 a user-supplied dict is provided. This is needed for embedding
3127 purposes (found by tests with Michel Sanner).
3132 purposes (found by tests with Michel Sanner).
3128
3133
3129 2004-09-27 Fernando Perez <fperez@colorado.edu>
3134 2004-09-27 Fernando Perez <fperez@colorado.edu>
3130
3135
3131 * IPython/UserConfig/ipythonrc: remove []{} from
3136 * IPython/UserConfig/ipythonrc: remove []{} from
3132 readline_remove_delims, so that things like [modname.<TAB> do
3137 readline_remove_delims, so that things like [modname.<TAB> do
3133 proper completion. This disables [].TAB, but that's a less common
3138 proper completion. This disables [].TAB, but that's a less common
3134 case than module names in list comprehensions, for example.
3139 case than module names in list comprehensions, for example.
3135 Thanks to a report by Andrea Riciputi.
3140 Thanks to a report by Andrea Riciputi.
3136
3141
3137 2004-09-09 Fernando Perez <fperez@colorado.edu>
3142 2004-09-09 Fernando Perez <fperez@colorado.edu>
3138
3143
3139 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
3144 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
3140 blocking problems in win32 and osx. Fix by John.
3145 blocking problems in win32 and osx. Fix by John.
3141
3146
3142 2004-09-08 Fernando Perez <fperez@colorado.edu>
3147 2004-09-08 Fernando Perez <fperez@colorado.edu>
3143
3148
3144 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
3149 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
3145 for Win32 and OSX. Fix by John Hunter.
3150 for Win32 and OSX. Fix by John Hunter.
3146
3151
3147 2004-08-30 *** Released version 0.6.3
3152 2004-08-30 *** Released version 0.6.3
3148
3153
3149 2004-08-30 Fernando Perez <fperez@colorado.edu>
3154 2004-08-30 Fernando Perez <fperez@colorado.edu>
3150
3155
3151 * setup.py (isfile): Add manpages to list of dependent files to be
3156 * setup.py (isfile): Add manpages to list of dependent files to be
3152 updated.
3157 updated.
3153
3158
3154 2004-08-27 Fernando Perez <fperez@colorado.edu>
3159 2004-08-27 Fernando Perez <fperez@colorado.edu>
3155
3160
3156 * IPython/Shell.py (start): I've disabled -wthread and -gthread
3161 * IPython/Shell.py (start): I've disabled -wthread and -gthread
3157 for now. They don't really work with standalone WX/GTK code
3162 for now. They don't really work with standalone WX/GTK code
3158 (though matplotlib IS working fine with both of those backends).
3163 (though matplotlib IS working fine with both of those backends).
3159 This will neeed much more testing. I disabled most things with
3164 This will neeed much more testing. I disabled most things with
3160 comments, so turning it back on later should be pretty easy.
3165 comments, so turning it back on later should be pretty easy.
3161
3166
3162 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
3167 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
3163 autocalling of expressions like r'foo', by modifying the line
3168 autocalling of expressions like r'foo', by modifying the line
3164 split regexp. Closes
3169 split regexp. Closes
3165 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
3170 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
3166 Riley <ipythonbugs-AT-sabi.net>.
3171 Riley <ipythonbugs-AT-sabi.net>.
3167 (InteractiveShell.mainloop): honor --nobanner with banner
3172 (InteractiveShell.mainloop): honor --nobanner with banner
3168 extensions.
3173 extensions.
3169
3174
3170 * IPython/Shell.py: Significant refactoring of all classes, so
3175 * IPython/Shell.py: Significant refactoring of all classes, so
3171 that we can really support ALL matplotlib backends and threading
3176 that we can really support ALL matplotlib backends and threading
3172 models (John spotted a bug with Tk which required this). Now we
3177 models (John spotted a bug with Tk which required this). Now we
3173 should support single-threaded, WX-threads and GTK-threads, both
3178 should support single-threaded, WX-threads and GTK-threads, both
3174 for generic code and for matplotlib.
3179 for generic code and for matplotlib.
3175
3180
3176 * IPython/ipmaker.py (__call__): Changed -mpthread option to
3181 * IPython/ipmaker.py (__call__): Changed -mpthread option to
3177 -pylab, to simplify things for users. Will also remove the pylab
3182 -pylab, to simplify things for users. Will also remove the pylab
3178 profile, since now all of matplotlib configuration is directly
3183 profile, since now all of matplotlib configuration is directly
3179 handled here. This also reduces startup time.
3184 handled here. This also reduces startup time.
3180
3185
3181 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
3186 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
3182 shell wasn't being correctly called. Also in IPShellWX.
3187 shell wasn't being correctly called. Also in IPShellWX.
3183
3188
3184 * IPython/iplib.py (InteractiveShell.__init__): Added option to
3189 * IPython/iplib.py (InteractiveShell.__init__): Added option to
3185 fine-tune banner.
3190 fine-tune banner.
3186
3191
3187 * IPython/numutils.py (spike): Deprecate these spike functions,
3192 * IPython/numutils.py (spike): Deprecate these spike functions,
3188 delete (long deprecated) gnuplot_exec handler.
3193 delete (long deprecated) gnuplot_exec handler.
3189
3194
3190 2004-08-26 Fernando Perez <fperez@colorado.edu>
3195 2004-08-26 Fernando Perez <fperez@colorado.edu>
3191
3196
3192 * ipython.1: Update for threading options, plus some others which
3197 * ipython.1: Update for threading options, plus some others which
3193 were missing.
3198 were missing.
3194
3199
3195 * IPython/ipmaker.py (__call__): Added -wthread option for
3200 * IPython/ipmaker.py (__call__): Added -wthread option for
3196 wxpython thread handling. Make sure threading options are only
3201 wxpython thread handling. Make sure threading options are only
3197 valid at the command line.
3202 valid at the command line.
3198
3203
3199 * scripts/ipython: moved shell selection into a factory function
3204 * scripts/ipython: moved shell selection into a factory function
3200 in Shell.py, to keep the starter script to a minimum.
3205 in Shell.py, to keep the starter script to a minimum.
3201
3206
3202 2004-08-25 Fernando Perez <fperez@colorado.edu>
3207 2004-08-25 Fernando Perez <fperez@colorado.edu>
3203
3208
3204 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
3209 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
3205 John. Along with some recent changes he made to matplotlib, the
3210 John. Along with some recent changes he made to matplotlib, the
3206 next versions of both systems should work very well together.
3211 next versions of both systems should work very well together.
3207
3212
3208 2004-08-24 Fernando Perez <fperez@colorado.edu>
3213 2004-08-24 Fernando Perez <fperez@colorado.edu>
3209
3214
3210 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
3215 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
3211 tried to switch the profiling to using hotshot, but I'm getting
3216 tried to switch the profiling to using hotshot, but I'm getting
3212 strange errors from prof.runctx() there. I may be misreading the
3217 strange errors from prof.runctx() there. I may be misreading the
3213 docs, but it looks weird. For now the profiling code will
3218 docs, but it looks weird. For now the profiling code will
3214 continue to use the standard profiler.
3219 continue to use the standard profiler.
3215
3220
3216 2004-08-23 Fernando Perez <fperez@colorado.edu>
3221 2004-08-23 Fernando Perez <fperez@colorado.edu>
3217
3222
3218 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
3223 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
3219 threaded shell, by John Hunter. It's not quite ready yet, but
3224 threaded shell, by John Hunter. It's not quite ready yet, but
3220 close.
3225 close.
3221
3226
3222 2004-08-22 Fernando Perez <fperez@colorado.edu>
3227 2004-08-22 Fernando Perez <fperez@colorado.edu>
3223
3228
3224 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
3229 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
3225 in Magic and ultraTB.
3230 in Magic and ultraTB.
3226
3231
3227 * ipython.1: document threading options in manpage.
3232 * ipython.1: document threading options in manpage.
3228
3233
3229 * scripts/ipython: Changed name of -thread option to -gthread,
3234 * scripts/ipython: Changed name of -thread option to -gthread,
3230 since this is GTK specific. I want to leave the door open for a
3235 since this is GTK specific. I want to leave the door open for a
3231 -wthread option for WX, which will most likely be necessary. This
3236 -wthread option for WX, which will most likely be necessary. This
3232 change affects usage and ipmaker as well.
3237 change affects usage and ipmaker as well.
3233
3238
3234 * IPython/Shell.py (matplotlib_shell): Add a factory function to
3239 * IPython/Shell.py (matplotlib_shell): Add a factory function to
3235 handle the matplotlib shell issues. Code by John Hunter
3240 handle the matplotlib shell issues. Code by John Hunter
3236 <jdhunter-AT-nitace.bsd.uchicago.edu>.
3241 <jdhunter-AT-nitace.bsd.uchicago.edu>.
3237 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
3242 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
3238 broken (and disabled for end users) for now, but it puts the
3243 broken (and disabled for end users) for now, but it puts the
3239 infrastructure in place.
3244 infrastructure in place.
3240
3245
3241 2004-08-21 Fernando Perez <fperez@colorado.edu>
3246 2004-08-21 Fernando Perez <fperez@colorado.edu>
3242
3247
3243 * ipythonrc-pylab: Add matplotlib support.
3248 * ipythonrc-pylab: Add matplotlib support.
3244
3249
3245 * matplotlib_config.py: new files for matplotlib support, part of
3250 * matplotlib_config.py: new files for matplotlib support, part of
3246 the pylab profile.
3251 the pylab profile.
3247
3252
3248 * IPython/usage.py (__doc__): documented the threading options.
3253 * IPython/usage.py (__doc__): documented the threading options.
3249
3254
3250 2004-08-20 Fernando Perez <fperez@colorado.edu>
3255 2004-08-20 Fernando Perez <fperez@colorado.edu>
3251
3256
3252 * ipython: Modified the main calling routine to handle the -thread
3257 * ipython: Modified the main calling routine to handle the -thread
3253 and -mpthread options. This needs to be done as a top-level hack,
3258 and -mpthread options. This needs to be done as a top-level hack,
3254 because it determines which class to instantiate for IPython
3259 because it determines which class to instantiate for IPython
3255 itself.
3260 itself.
3256
3261
3257 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
3262 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
3258 classes to support multithreaded GTK operation without blocking,
3263 classes to support multithreaded GTK operation without blocking,
3259 and matplotlib with all backends. This is a lot of still very
3264 and matplotlib with all backends. This is a lot of still very
3260 experimental code, and threads are tricky. So it may still have a
3265 experimental code, and threads are tricky. So it may still have a
3261 few rough edges... This code owes a lot to
3266 few rough edges... This code owes a lot to
3262 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
3267 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
3263 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
3268 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
3264 to John Hunter for all the matplotlib work.
3269 to John Hunter for all the matplotlib work.
3265
3270
3266 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
3271 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
3267 options for gtk thread and matplotlib support.
3272 options for gtk thread and matplotlib support.
3268
3273
3269 2004-08-16 Fernando Perez <fperez@colorado.edu>
3274 2004-08-16 Fernando Perez <fperez@colorado.edu>
3270
3275
3271 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
3276 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
3272 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
3277 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
3273 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
3278 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
3274
3279
3275 2004-08-11 Fernando Perez <fperez@colorado.edu>
3280 2004-08-11 Fernando Perez <fperez@colorado.edu>
3276
3281
3277 * setup.py (isfile): Fix build so documentation gets updated for
3282 * setup.py (isfile): Fix build so documentation gets updated for
3278 rpms (it was only done for .tgz builds).
3283 rpms (it was only done for .tgz builds).
3279
3284
3280 2004-08-10 Fernando Perez <fperez@colorado.edu>
3285 2004-08-10 Fernando Perez <fperez@colorado.edu>
3281
3286
3282 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
3287 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
3283
3288
3284 * iplib.py : Silence syntax error exceptions in tab-completion.
3289 * iplib.py : Silence syntax error exceptions in tab-completion.
3285
3290
3286 2004-08-05 Fernando Perez <fperez@colorado.edu>
3291 2004-08-05 Fernando Perez <fperez@colorado.edu>
3287
3292
3288 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
3293 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
3289 'color off' mark for continuation prompts. This was causing long
3294 'color off' mark for continuation prompts. This was causing long
3290 continuation lines to mis-wrap.
3295 continuation lines to mis-wrap.
3291
3296
3292 2004-08-01 Fernando Perez <fperez@colorado.edu>
3297 2004-08-01 Fernando Perez <fperez@colorado.edu>
3293
3298
3294 * IPython/ipmaker.py (make_IPython): Allow the shell class used
3299 * IPython/ipmaker.py (make_IPython): Allow the shell class used
3295 for building ipython to be a parameter. All this is necessary
3300 for building ipython to be a parameter. All this is necessary
3296 right now to have a multithreaded version, but this insane
3301 right now to have a multithreaded version, but this insane
3297 non-design will be cleaned up soon. For now, it's a hack that
3302 non-design will be cleaned up soon. For now, it's a hack that
3298 works.
3303 works.
3299
3304
3300 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
3305 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
3301 args in various places. No bugs so far, but it's a dangerous
3306 args in various places. No bugs so far, but it's a dangerous
3302 practice.
3307 practice.
3303
3308
3304 2004-07-31 Fernando Perez <fperez@colorado.edu>
3309 2004-07-31 Fernando Perez <fperez@colorado.edu>
3305
3310
3306 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
3311 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
3307 fix completion of files with dots in their names under most
3312 fix completion of files with dots in their names under most
3308 profiles (pysh was OK because the completion order is different).
3313 profiles (pysh was OK because the completion order is different).
3309
3314
3310 2004-07-27 Fernando Perez <fperez@colorado.edu>
3315 2004-07-27 Fernando Perez <fperez@colorado.edu>
3311
3316
3312 * IPython/iplib.py (InteractiveShell.__init__): build dict of
3317 * IPython/iplib.py (InteractiveShell.__init__): build dict of
3313 keywords manually, b/c the one in keyword.py was removed in python
3318 keywords manually, b/c the one in keyword.py was removed in python
3314 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
3319 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
3315 This is NOT a bug under python 2.3 and earlier.
3320 This is NOT a bug under python 2.3 and earlier.
3316
3321
3317 2004-07-26 Fernando Perez <fperez@colorado.edu>
3322 2004-07-26 Fernando Perez <fperez@colorado.edu>
3318
3323
3319 * IPython/ultraTB.py (VerboseTB.text): Add another
3324 * IPython/ultraTB.py (VerboseTB.text): Add another
3320 linecache.checkcache() call to try to prevent inspect.py from
3325 linecache.checkcache() call to try to prevent inspect.py from
3321 crashing under python 2.3. I think this fixes
3326 crashing under python 2.3. I think this fixes
3322 http://www.scipy.net/roundup/ipython/issue17.
3327 http://www.scipy.net/roundup/ipython/issue17.
3323
3328
3324 2004-07-26 *** Released version 0.6.2
3329 2004-07-26 *** Released version 0.6.2
3325
3330
3326 2004-07-26 Fernando Perez <fperez@colorado.edu>
3331 2004-07-26 Fernando Perez <fperez@colorado.edu>
3327
3332
3328 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
3333 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
3329 fail for any number.
3334 fail for any number.
3330 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
3335 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
3331 empty bookmarks.
3336 empty bookmarks.
3332
3337
3333 2004-07-26 *** Released version 0.6.1
3338 2004-07-26 *** Released version 0.6.1
3334
3339
3335 2004-07-26 Fernando Perez <fperez@colorado.edu>
3340 2004-07-26 Fernando Perez <fperez@colorado.edu>
3336
3341
3337 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
3342 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
3338
3343
3339 * IPython/iplib.py (protect_filename): Applied Ville's patch for
3344 * IPython/iplib.py (protect_filename): Applied Ville's patch for
3340 escaping '()[]{}' in filenames.
3345 escaping '()[]{}' in filenames.
3341
3346
3342 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
3347 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
3343 Python 2.2 users who lack a proper shlex.split.
3348 Python 2.2 users who lack a proper shlex.split.
3344
3349
3345 2004-07-19 Fernando Perez <fperez@colorado.edu>
3350 2004-07-19 Fernando Perez <fperez@colorado.edu>
3346
3351
3347 * IPython/iplib.py (InteractiveShell.init_readline): Add support
3352 * IPython/iplib.py (InteractiveShell.init_readline): Add support
3348 for reading readline's init file. I follow the normal chain:
3353 for reading readline's init file. I follow the normal chain:
3349 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
3354 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
3350 report by Mike Heeter. This closes
3355 report by Mike Heeter. This closes
3351 http://www.scipy.net/roundup/ipython/issue16.
3356 http://www.scipy.net/roundup/ipython/issue16.
3352
3357
3353 2004-07-18 Fernando Perez <fperez@colorado.edu>
3358 2004-07-18 Fernando Perez <fperez@colorado.edu>
3354
3359
3355 * IPython/iplib.py (__init__): Add better handling of '\' under
3360 * IPython/iplib.py (__init__): Add better handling of '\' under
3356 Win32 for filenames. After a patch by Ville.
3361 Win32 for filenames. After a patch by Ville.
3357
3362
3358 2004-07-17 Fernando Perez <fperez@colorado.edu>
3363 2004-07-17 Fernando Perez <fperez@colorado.edu>
3359
3364
3360 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3365 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3361 autocalling would be triggered for 'foo is bar' if foo is
3366 autocalling would be triggered for 'foo is bar' if foo is
3362 callable. I also cleaned up the autocall detection code to use a
3367 callable. I also cleaned up the autocall detection code to use a
3363 regexp, which is faster. Bug reported by Alexander Schmolck.
3368 regexp, which is faster. Bug reported by Alexander Schmolck.
3364
3369
3365 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
3370 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
3366 '?' in them would confuse the help system. Reported by Alex
3371 '?' in them would confuse the help system. Reported by Alex
3367 Schmolck.
3372 Schmolck.
3368
3373
3369 2004-07-16 Fernando Perez <fperez@colorado.edu>
3374 2004-07-16 Fernando Perez <fperez@colorado.edu>
3370
3375
3371 * IPython/GnuplotInteractive.py (__all__): added plot2.
3376 * IPython/GnuplotInteractive.py (__all__): added plot2.
3372
3377
3373 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
3378 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
3374 plotting dictionaries, lists or tuples of 1d arrays.
3379 plotting dictionaries, lists or tuples of 1d arrays.
3375
3380
3376 * IPython/Magic.py (Magic.magic_hist): small clenaups and
3381 * IPython/Magic.py (Magic.magic_hist): small clenaups and
3377 optimizations.
3382 optimizations.
3378
3383
3379 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
3384 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
3380 the information which was there from Janko's original IPP code:
3385 the information which was there from Janko's original IPP code:
3381
3386
3382 03.05.99 20:53 porto.ifm.uni-kiel.de
3387 03.05.99 20:53 porto.ifm.uni-kiel.de
3383 --Started changelog.
3388 --Started changelog.
3384 --make clear do what it say it does
3389 --make clear do what it say it does
3385 --added pretty output of lines from inputcache
3390 --added pretty output of lines from inputcache
3386 --Made Logger a mixin class, simplifies handling of switches
3391 --Made Logger a mixin class, simplifies handling of switches
3387 --Added own completer class. .string<TAB> expands to last history
3392 --Added own completer class. .string<TAB> expands to last history
3388 line which starts with string. The new expansion is also present
3393 line which starts with string. The new expansion is also present
3389 with Ctrl-r from the readline library. But this shows, who this
3394 with Ctrl-r from the readline library. But this shows, who this
3390 can be done for other cases.
3395 can be done for other cases.
3391 --Added convention that all shell functions should accept a
3396 --Added convention that all shell functions should accept a
3392 parameter_string This opens the door for different behaviour for
3397 parameter_string This opens the door for different behaviour for
3393 each function. @cd is a good example of this.
3398 each function. @cd is a good example of this.
3394
3399
3395 04.05.99 12:12 porto.ifm.uni-kiel.de
3400 04.05.99 12:12 porto.ifm.uni-kiel.de
3396 --added logfile rotation
3401 --added logfile rotation
3397 --added new mainloop method which freezes first the namespace
3402 --added new mainloop method which freezes first the namespace
3398
3403
3399 07.05.99 21:24 porto.ifm.uni-kiel.de
3404 07.05.99 21:24 porto.ifm.uni-kiel.de
3400 --added the docreader classes. Now there is a help system.
3405 --added the docreader classes. Now there is a help system.
3401 -This is only a first try. Currently it's not easy to put new
3406 -This is only a first try. Currently it's not easy to put new
3402 stuff in the indices. But this is the way to go. Info would be
3407 stuff in the indices. But this is the way to go. Info would be
3403 better, but HTML is every where and not everybody has an info
3408 better, but HTML is every where and not everybody has an info
3404 system installed and it's not so easy to change html-docs to info.
3409 system installed and it's not so easy to change html-docs to info.
3405 --added global logfile option
3410 --added global logfile option
3406 --there is now a hook for object inspection method pinfo needs to
3411 --there is now a hook for object inspection method pinfo needs to
3407 be provided for this. Can be reached by two '??'.
3412 be provided for this. Can be reached by two '??'.
3408
3413
3409 08.05.99 20:51 porto.ifm.uni-kiel.de
3414 08.05.99 20:51 porto.ifm.uni-kiel.de
3410 --added a README
3415 --added a README
3411 --bug in rc file. Something has changed so functions in the rc
3416 --bug in rc file. Something has changed so functions in the rc
3412 file need to reference the shell and not self. Not clear if it's a
3417 file need to reference the shell and not self. Not clear if it's a
3413 bug or feature.
3418 bug or feature.
3414 --changed rc file for new behavior
3419 --changed rc file for new behavior
3415
3420
3416 2004-07-15 Fernando Perez <fperez@colorado.edu>
3421 2004-07-15 Fernando Perez <fperez@colorado.edu>
3417
3422
3418 * IPython/Logger.py (Logger.log): fixed recent bug where the input
3423 * IPython/Logger.py (Logger.log): fixed recent bug where the input
3419 cache was falling out of sync in bizarre manners when multi-line
3424 cache was falling out of sync in bizarre manners when multi-line
3420 input was present. Minor optimizations and cleanup.
3425 input was present. Minor optimizations and cleanup.
3421
3426
3422 (Logger): Remove old Changelog info for cleanup. This is the
3427 (Logger): Remove old Changelog info for cleanup. This is the
3423 information which was there from Janko's original code:
3428 information which was there from Janko's original code:
3424
3429
3425 Changes to Logger: - made the default log filename a parameter
3430 Changes to Logger: - made the default log filename a parameter
3426
3431
3427 - put a check for lines beginning with !@? in log(). Needed
3432 - put a check for lines beginning with !@? in log(). Needed
3428 (even if the handlers properly log their lines) for mid-session
3433 (even if the handlers properly log their lines) for mid-session
3429 logging activation to work properly. Without this, lines logged
3434 logging activation to work properly. Without this, lines logged
3430 in mid session, which get read from the cache, would end up
3435 in mid session, which get read from the cache, would end up
3431 'bare' (with !@? in the open) in the log. Now they are caught
3436 'bare' (with !@? in the open) in the log. Now they are caught
3432 and prepended with a #.
3437 and prepended with a #.
3433
3438
3434 * IPython/iplib.py (InteractiveShell.init_readline): added check
3439 * IPython/iplib.py (InteractiveShell.init_readline): added check
3435 in case MagicCompleter fails to be defined, so we don't crash.
3440 in case MagicCompleter fails to be defined, so we don't crash.
3436
3441
3437 2004-07-13 Fernando Perez <fperez@colorado.edu>
3442 2004-07-13 Fernando Perez <fperez@colorado.edu>
3438
3443
3439 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
3444 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
3440 of EPS if the requested filename ends in '.eps'.
3445 of EPS if the requested filename ends in '.eps'.
3441
3446
3442 2004-07-04 Fernando Perez <fperez@colorado.edu>
3447 2004-07-04 Fernando Perez <fperez@colorado.edu>
3443
3448
3444 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
3449 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
3445 escaping of quotes when calling the shell.
3450 escaping of quotes when calling the shell.
3446
3451
3447 2004-07-02 Fernando Perez <fperez@colorado.edu>
3452 2004-07-02 Fernando Perez <fperez@colorado.edu>
3448
3453
3449 * IPython/Prompts.py (CachedOutput.update): Fix problem with
3454 * IPython/Prompts.py (CachedOutput.update): Fix problem with
3450 gettext not working because we were clobbering '_'. Fixes
3455 gettext not working because we were clobbering '_'. Fixes
3451 http://www.scipy.net/roundup/ipython/issue6.
3456 http://www.scipy.net/roundup/ipython/issue6.
3452
3457
3453 2004-07-01 Fernando Perez <fperez@colorado.edu>
3458 2004-07-01 Fernando Perez <fperez@colorado.edu>
3454
3459
3455 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
3460 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
3456 into @cd. Patch by Ville.
3461 into @cd. Patch by Ville.
3457
3462
3458 * IPython/iplib.py (InteractiveShell.post_config_initialization):
3463 * IPython/iplib.py (InteractiveShell.post_config_initialization):
3459 new function to store things after ipmaker runs. Patch by Ville.
3464 new function to store things after ipmaker runs. Patch by Ville.
3460 Eventually this will go away once ipmaker is removed and the class
3465 Eventually this will go away once ipmaker is removed and the class
3461 gets cleaned up, but for now it's ok. Key functionality here is
3466 gets cleaned up, but for now it's ok. Key functionality here is
3462 the addition of the persistent storage mechanism, a dict for
3467 the addition of the persistent storage mechanism, a dict for
3463 keeping data across sessions (for now just bookmarks, but more can
3468 keeping data across sessions (for now just bookmarks, but more can
3464 be implemented later).
3469 be implemented later).
3465
3470
3466 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
3471 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
3467 persistent across sections. Patch by Ville, I modified it
3472 persistent across sections. Patch by Ville, I modified it
3468 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
3473 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
3469 added a '-l' option to list all bookmarks.
3474 added a '-l' option to list all bookmarks.
3470
3475
3471 * IPython/iplib.py (InteractiveShell.atexit_operations): new
3476 * IPython/iplib.py (InteractiveShell.atexit_operations): new
3472 center for cleanup. Registered with atexit.register(). I moved
3477 center for cleanup. Registered with atexit.register(). I moved
3473 here the old exit_cleanup(). After a patch by Ville.
3478 here the old exit_cleanup(). After a patch by Ville.
3474
3479
3475 * IPython/Magic.py (get_py_filename): added '~' to the accepted
3480 * IPython/Magic.py (get_py_filename): added '~' to the accepted
3476 characters in the hacked shlex_split for python 2.2.
3481 characters in the hacked shlex_split for python 2.2.
3477
3482
3478 * IPython/iplib.py (file_matches): more fixes to filenames with
3483 * IPython/iplib.py (file_matches): more fixes to filenames with
3479 whitespace in them. It's not perfect, but limitations in python's
3484 whitespace in them. It's not perfect, but limitations in python's
3480 readline make it impossible to go further.
3485 readline make it impossible to go further.
3481
3486
3482 2004-06-29 Fernando Perez <fperez@colorado.edu>
3487 2004-06-29 Fernando Perez <fperez@colorado.edu>
3483
3488
3484 * IPython/iplib.py (file_matches): escape whitespace correctly in
3489 * IPython/iplib.py (file_matches): escape whitespace correctly in
3485 filename completions. Bug reported by Ville.
3490 filename completions. Bug reported by Ville.
3486
3491
3487 2004-06-28 Fernando Perez <fperez@colorado.edu>
3492 2004-06-28 Fernando Perez <fperez@colorado.edu>
3488
3493
3489 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
3494 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
3490 the history file will be called 'history-PROFNAME' (or just
3495 the history file will be called 'history-PROFNAME' (or just
3491 'history' if no profile is loaded). I was getting annoyed at
3496 'history' if no profile is loaded). I was getting annoyed at
3492 getting my Numerical work history clobbered by pysh sessions.
3497 getting my Numerical work history clobbered by pysh sessions.
3493
3498
3494 * IPython/iplib.py (InteractiveShell.__init__): Internal
3499 * IPython/iplib.py (InteractiveShell.__init__): Internal
3495 getoutputerror() function so that we can honor the system_verbose
3500 getoutputerror() function so that we can honor the system_verbose
3496 flag for _all_ system calls. I also added escaping of #
3501 flag for _all_ system calls. I also added escaping of #
3497 characters here to avoid confusing Itpl.
3502 characters here to avoid confusing Itpl.
3498
3503
3499 * IPython/Magic.py (shlex_split): removed call to shell in
3504 * IPython/Magic.py (shlex_split): removed call to shell in
3500 parse_options and replaced it with shlex.split(). The annoying
3505 parse_options and replaced it with shlex.split(). The annoying
3501 part was that in Python 2.2, shlex.split() doesn't exist, so I had
3506 part was that in Python 2.2, shlex.split() doesn't exist, so I had
3502 to backport it from 2.3, with several frail hacks (the shlex
3507 to backport it from 2.3, with several frail hacks (the shlex
3503 module is rather limited in 2.2). Thanks to a suggestion by Ville
3508 module is rather limited in 2.2). Thanks to a suggestion by Ville
3504 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
3509 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
3505 problem.
3510 problem.
3506
3511
3507 (Magic.magic_system_verbose): new toggle to print the actual
3512 (Magic.magic_system_verbose): new toggle to print the actual
3508 system calls made by ipython. Mainly for debugging purposes.
3513 system calls made by ipython. Mainly for debugging purposes.
3509
3514
3510 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
3515 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
3511 doesn't support persistence. Reported (and fix suggested) by
3516 doesn't support persistence. Reported (and fix suggested) by
3512 Travis Caldwell <travis_caldwell2000@yahoo.com>.
3517 Travis Caldwell <travis_caldwell2000@yahoo.com>.
3513
3518
3514 2004-06-26 Fernando Perez <fperez@colorado.edu>
3519 2004-06-26 Fernando Perez <fperez@colorado.edu>
3515
3520
3516 * IPython/Logger.py (Logger.log): fix to handle correctly empty
3521 * IPython/Logger.py (Logger.log): fix to handle correctly empty
3517 continue prompts.
3522 continue prompts.
3518
3523
3519 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
3524 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
3520 function (basically a big docstring) and a few more things here to
3525 function (basically a big docstring) and a few more things here to
3521 speedup startup. pysh.py is now very lightweight. We want because
3526 speedup startup. pysh.py is now very lightweight. We want because
3522 it gets execfile'd, while InterpreterExec gets imported, so
3527 it gets execfile'd, while InterpreterExec gets imported, so
3523 byte-compilation saves time.
3528 byte-compilation saves time.
3524
3529
3525 2004-06-25 Fernando Perez <fperez@colorado.edu>
3530 2004-06-25 Fernando Perez <fperez@colorado.edu>
3526
3531
3527 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
3532 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
3528 -NUM', which was recently broken.
3533 -NUM', which was recently broken.
3529
3534
3530 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
3535 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
3531 in multi-line input (but not !!, which doesn't make sense there).
3536 in multi-line input (but not !!, which doesn't make sense there).
3532
3537
3533 * IPython/UserConfig/ipythonrc: made autoindent on by default.
3538 * IPython/UserConfig/ipythonrc: made autoindent on by default.
3534 It's just too useful, and people can turn it off in the less
3539 It's just too useful, and people can turn it off in the less
3535 common cases where it's a problem.
3540 common cases where it's a problem.
3536
3541
3537 2004-06-24 Fernando Perez <fperez@colorado.edu>
3542 2004-06-24 Fernando Perez <fperez@colorado.edu>
3538
3543
3539 * IPython/iplib.py (InteractiveShell._prefilter): big change -
3544 * IPython/iplib.py (InteractiveShell._prefilter): big change -
3540 special syntaxes (like alias calling) is now allied in multi-line
3545 special syntaxes (like alias calling) is now allied in multi-line
3541 input. This is still _very_ experimental, but it's necessary for
3546 input. This is still _very_ experimental, but it's necessary for
3542 efficient shell usage combining python looping syntax with system
3547 efficient shell usage combining python looping syntax with system
3543 calls. For now it's restricted to aliases, I don't think it
3548 calls. For now it's restricted to aliases, I don't think it
3544 really even makes sense to have this for magics.
3549 really even makes sense to have this for magics.
3545
3550
3546 2004-06-23 Fernando Perez <fperez@colorado.edu>
3551 2004-06-23 Fernando Perez <fperez@colorado.edu>
3547
3552
3548 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
3553 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
3549 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
3554 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
3550
3555
3551 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
3556 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
3552 extensions under Windows (after code sent by Gary Bishop). The
3557 extensions under Windows (after code sent by Gary Bishop). The
3553 extensions considered 'executable' are stored in IPython's rc
3558 extensions considered 'executable' are stored in IPython's rc
3554 structure as win_exec_ext.
3559 structure as win_exec_ext.
3555
3560
3556 * IPython/genutils.py (shell): new function, like system() but
3561 * IPython/genutils.py (shell): new function, like system() but
3557 without return value. Very useful for interactive shell work.
3562 without return value. Very useful for interactive shell work.
3558
3563
3559 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
3564 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
3560 delete aliases.
3565 delete aliases.
3561
3566
3562 * IPython/iplib.py (InteractiveShell.alias_table_update): make
3567 * IPython/iplib.py (InteractiveShell.alias_table_update): make
3563 sure that the alias table doesn't contain python keywords.
3568 sure that the alias table doesn't contain python keywords.
3564
3569
3565 2004-06-21 Fernando Perez <fperez@colorado.edu>
3570 2004-06-21 Fernando Perez <fperez@colorado.edu>
3566
3571
3567 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
3572 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
3568 non-existent items are found in $PATH. Reported by Thorsten.
3573 non-existent items are found in $PATH. Reported by Thorsten.
3569
3574
3570 2004-06-20 Fernando Perez <fperez@colorado.edu>
3575 2004-06-20 Fernando Perez <fperez@colorado.edu>
3571
3576
3572 * IPython/iplib.py (complete): modified the completer so that the
3577 * IPython/iplib.py (complete): modified the completer so that the
3573 order of priorities can be easily changed at runtime.
3578 order of priorities can be easily changed at runtime.
3574
3579
3575 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
3580 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
3576 Modified to auto-execute all lines beginning with '~', '/' or '.'.
3581 Modified to auto-execute all lines beginning with '~', '/' or '.'.
3577
3582
3578 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
3583 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
3579 expand Python variables prepended with $ in all system calls. The
3584 expand Python variables prepended with $ in all system calls. The
3580 same was done to InteractiveShell.handle_shell_escape. Now all
3585 same was done to InteractiveShell.handle_shell_escape. Now all
3581 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
3586 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
3582 expansion of python variables and expressions according to the
3587 expansion of python variables and expressions according to the
3583 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
3588 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
3584
3589
3585 Though PEP-215 has been rejected, a similar (but simpler) one
3590 Though PEP-215 has been rejected, a similar (but simpler) one
3586 seems like it will go into Python 2.4, PEP-292 -
3591 seems like it will go into Python 2.4, PEP-292 -
3587 http://www.python.org/peps/pep-0292.html.
3592 http://www.python.org/peps/pep-0292.html.
3588
3593
3589 I'll keep the full syntax of PEP-215, since IPython has since the
3594 I'll keep the full syntax of PEP-215, since IPython has since the
3590 start used Ka-Ping Yee's reference implementation discussed there
3595 start used Ka-Ping Yee's reference implementation discussed there
3591 (Itpl), and I actually like the powerful semantics it offers.
3596 (Itpl), and I actually like the powerful semantics it offers.
3592
3597
3593 In order to access normal shell variables, the $ has to be escaped
3598 In order to access normal shell variables, the $ has to be escaped
3594 via an extra $. For example:
3599 via an extra $. For example:
3595
3600
3596 In [7]: PATH='a python variable'
3601 In [7]: PATH='a python variable'
3597
3602
3598 In [8]: !echo $PATH
3603 In [8]: !echo $PATH
3599 a python variable
3604 a python variable
3600
3605
3601 In [9]: !echo $$PATH
3606 In [9]: !echo $$PATH
3602 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
3607 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
3603
3608
3604 (Magic.parse_options): escape $ so the shell doesn't evaluate
3609 (Magic.parse_options): escape $ so the shell doesn't evaluate
3605 things prematurely.
3610 things prematurely.
3606
3611
3607 * IPython/iplib.py (InteractiveShell.call_alias): added the
3612 * IPython/iplib.py (InteractiveShell.call_alias): added the
3608 ability for aliases to expand python variables via $.
3613 ability for aliases to expand python variables via $.
3609
3614
3610 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
3615 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
3611 system, now there's a @rehash/@rehashx pair of magics. These work
3616 system, now there's a @rehash/@rehashx pair of magics. These work
3612 like the csh rehash command, and can be invoked at any time. They
3617 like the csh rehash command, and can be invoked at any time. They
3613 build a table of aliases to everything in the user's $PATH
3618 build a table of aliases to everything in the user's $PATH
3614 (@rehash uses everything, @rehashx is slower but only adds
3619 (@rehash uses everything, @rehashx is slower but only adds
3615 executable files). With this, the pysh.py-based shell profile can
3620 executable files). With this, the pysh.py-based shell profile can
3616 now simply call rehash upon startup, and full access to all
3621 now simply call rehash upon startup, and full access to all
3617 programs in the user's path is obtained.
3622 programs in the user's path is obtained.
3618
3623
3619 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
3624 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
3620 functionality is now fully in place. I removed the old dynamic
3625 functionality is now fully in place. I removed the old dynamic
3621 code generation based approach, in favor of a much lighter one
3626 code generation based approach, in favor of a much lighter one
3622 based on a simple dict. The advantage is that this allows me to
3627 based on a simple dict. The advantage is that this allows me to
3623 now have thousands of aliases with negligible cost (unthinkable
3628 now have thousands of aliases with negligible cost (unthinkable
3624 with the old system).
3629 with the old system).
3625
3630
3626 2004-06-19 Fernando Perez <fperez@colorado.edu>
3631 2004-06-19 Fernando Perez <fperez@colorado.edu>
3627
3632
3628 * IPython/iplib.py (__init__): extended MagicCompleter class to
3633 * IPython/iplib.py (__init__): extended MagicCompleter class to
3629 also complete (last in priority) on user aliases.
3634 also complete (last in priority) on user aliases.
3630
3635
3631 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
3636 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
3632 call to eval.
3637 call to eval.
3633 (ItplNS.__init__): Added a new class which functions like Itpl,
3638 (ItplNS.__init__): Added a new class which functions like Itpl,
3634 but allows configuring the namespace for the evaluation to occur
3639 but allows configuring the namespace for the evaluation to occur
3635 in.
3640 in.
3636
3641
3637 2004-06-18 Fernando Perez <fperez@colorado.edu>
3642 2004-06-18 Fernando Perez <fperez@colorado.edu>
3638
3643
3639 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
3644 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
3640 better message when 'exit' or 'quit' are typed (a common newbie
3645 better message when 'exit' or 'quit' are typed (a common newbie
3641 confusion).
3646 confusion).
3642
3647
3643 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
3648 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
3644 check for Windows users.
3649 check for Windows users.
3645
3650
3646 * IPython/iplib.py (InteractiveShell.user_setup): removed
3651 * IPython/iplib.py (InteractiveShell.user_setup): removed
3647 disabling of colors for Windows. I'll test at runtime and issue a
3652 disabling of colors for Windows. I'll test at runtime and issue a
3648 warning if Gary's readline isn't found, as to nudge users to
3653 warning if Gary's readline isn't found, as to nudge users to
3649 download it.
3654 download it.
3650
3655
3651 2004-06-16 Fernando Perez <fperez@colorado.edu>
3656 2004-06-16 Fernando Perez <fperez@colorado.edu>
3652
3657
3653 * IPython/genutils.py (Stream.__init__): changed to print errors
3658 * IPython/genutils.py (Stream.__init__): changed to print errors
3654 to sys.stderr. I had a circular dependency here. Now it's
3659 to sys.stderr. I had a circular dependency here. Now it's
3655 possible to run ipython as IDLE's shell (consider this pre-alpha,
3660 possible to run ipython as IDLE's shell (consider this pre-alpha,
3656 since true stdout things end up in the starting terminal instead
3661 since true stdout things end up in the starting terminal instead
3657 of IDLE's out).
3662 of IDLE's out).
3658
3663
3659 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
3664 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
3660 users who haven't # updated their prompt_in2 definitions. Remove
3665 users who haven't # updated their prompt_in2 definitions. Remove
3661 eventually.
3666 eventually.
3662 (multiple_replace): added credit to original ASPN recipe.
3667 (multiple_replace): added credit to original ASPN recipe.
3663
3668
3664 2004-06-15 Fernando Perez <fperez@colorado.edu>
3669 2004-06-15 Fernando Perez <fperez@colorado.edu>
3665
3670
3666 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
3671 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
3667 list of auto-defined aliases.
3672 list of auto-defined aliases.
3668
3673
3669 2004-06-13 Fernando Perez <fperez@colorado.edu>
3674 2004-06-13 Fernando Perez <fperez@colorado.edu>
3670
3675
3671 * setup.py (scriptfiles): Don't trigger win_post_install unless an
3676 * setup.py (scriptfiles): Don't trigger win_post_install unless an
3672 install was really requested (so setup.py can be used for other
3677 install was really requested (so setup.py can be used for other
3673 things under Windows).
3678 things under Windows).
3674
3679
3675 2004-06-10 Fernando Perez <fperez@colorado.edu>
3680 2004-06-10 Fernando Perez <fperez@colorado.edu>
3676
3681
3677 * IPython/Logger.py (Logger.create_log): Manually remove any old
3682 * IPython/Logger.py (Logger.create_log): Manually remove any old
3678 backup, since os.remove may fail under Windows. Fixes bug
3683 backup, since os.remove may fail under Windows. Fixes bug
3679 reported by Thorsten.
3684 reported by Thorsten.
3680
3685
3681 2004-06-09 Fernando Perez <fperez@colorado.edu>
3686 2004-06-09 Fernando Perez <fperez@colorado.edu>
3682
3687
3683 * examples/example-embed.py: fixed all references to %n (replaced
3688 * examples/example-embed.py: fixed all references to %n (replaced
3684 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
3689 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
3685 for all examples and the manual as well.
3690 for all examples and the manual as well.
3686
3691
3687 2004-06-08 Fernando Perez <fperez@colorado.edu>
3692 2004-06-08 Fernando Perez <fperez@colorado.edu>
3688
3693
3689 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
3694 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
3690 alignment and color management. All 3 prompt subsystems now
3695 alignment and color management. All 3 prompt subsystems now
3691 inherit from BasePrompt.
3696 inherit from BasePrompt.
3692
3697
3693 * tools/release: updates for windows installer build and tag rpms
3698 * tools/release: updates for windows installer build and tag rpms
3694 with python version (since paths are fixed).
3699 with python version (since paths are fixed).
3695
3700
3696 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
3701 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
3697 which will become eventually obsolete. Also fixed the default
3702 which will become eventually obsolete. Also fixed the default
3698 prompt_in2 to use \D, so at least new users start with the correct
3703 prompt_in2 to use \D, so at least new users start with the correct
3699 defaults.
3704 defaults.
3700 WARNING: Users with existing ipythonrc files will need to apply
3705 WARNING: Users with existing ipythonrc files will need to apply
3701 this fix manually!
3706 this fix manually!
3702
3707
3703 * setup.py: make windows installer (.exe). This is finally the
3708 * setup.py: make windows installer (.exe). This is finally the
3704 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
3709 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
3705 which I hadn't included because it required Python 2.3 (or recent
3710 which I hadn't included because it required Python 2.3 (or recent
3706 distutils).
3711 distutils).
3707
3712
3708 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
3713 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
3709 usage of new '\D' escape.
3714 usage of new '\D' escape.
3710
3715
3711 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
3716 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
3712 lacks os.getuid())
3717 lacks os.getuid())
3713 (CachedOutput.set_colors): Added the ability to turn coloring
3718 (CachedOutput.set_colors): Added the ability to turn coloring
3714 on/off with @colors even for manually defined prompt colors. It
3719 on/off with @colors even for manually defined prompt colors. It
3715 uses a nasty global, but it works safely and via the generic color
3720 uses a nasty global, but it works safely and via the generic color
3716 handling mechanism.
3721 handling mechanism.
3717 (Prompt2.__init__): Introduced new escape '\D' for continuation
3722 (Prompt2.__init__): Introduced new escape '\D' for continuation
3718 prompts. It represents the counter ('\#') as dots.
3723 prompts. It represents the counter ('\#') as dots.
3719 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
3724 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
3720 need to update their ipythonrc files and replace '%n' with '\D' in
3725 need to update their ipythonrc files and replace '%n' with '\D' in
3721 their prompt_in2 settings everywhere. Sorry, but there's
3726 their prompt_in2 settings everywhere. Sorry, but there's
3722 otherwise no clean way to get all prompts to properly align. The
3727 otherwise no clean way to get all prompts to properly align. The
3723 ipythonrc shipped with IPython has been updated.
3728 ipythonrc shipped with IPython has been updated.
3724
3729
3725 2004-06-07 Fernando Perez <fperez@colorado.edu>
3730 2004-06-07 Fernando Perez <fperez@colorado.edu>
3726
3731
3727 * setup.py (isfile): Pass local_icons option to latex2html, so the
3732 * setup.py (isfile): Pass local_icons option to latex2html, so the
3728 resulting HTML file is self-contained. Thanks to
3733 resulting HTML file is self-contained. Thanks to
3729 dryice-AT-liu.com.cn for the tip.
3734 dryice-AT-liu.com.cn for the tip.
3730
3735
3731 * pysh.py: I created a new profile 'shell', which implements a
3736 * pysh.py: I created a new profile 'shell', which implements a
3732 _rudimentary_ IPython-based shell. This is in NO WAY a realy
3737 _rudimentary_ IPython-based shell. This is in NO WAY a realy
3733 system shell, nor will it become one anytime soon. It's mainly
3738 system shell, nor will it become one anytime soon. It's mainly
3734 meant to illustrate the use of the new flexible bash-like prompts.
3739 meant to illustrate the use of the new flexible bash-like prompts.
3735 I guess it could be used by hardy souls for true shell management,
3740 I guess it could be used by hardy souls for true shell management,
3736 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
3741 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
3737 profile. This uses the InterpreterExec extension provided by
3742 profile. This uses the InterpreterExec extension provided by
3738 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
3743 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
3739
3744
3740 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
3745 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
3741 auto-align itself with the length of the previous input prompt
3746 auto-align itself with the length of the previous input prompt
3742 (taking into account the invisible color escapes).
3747 (taking into account the invisible color escapes).
3743 (CachedOutput.__init__): Large restructuring of this class. Now
3748 (CachedOutput.__init__): Large restructuring of this class. Now
3744 all three prompts (primary1, primary2, output) are proper objects,
3749 all three prompts (primary1, primary2, output) are proper objects,
3745 managed by the 'parent' CachedOutput class. The code is still a
3750 managed by the 'parent' CachedOutput class. The code is still a
3746 bit hackish (all prompts share state via a pointer to the cache),
3751 bit hackish (all prompts share state via a pointer to the cache),
3747 but it's overall far cleaner than before.
3752 but it's overall far cleaner than before.
3748
3753
3749 * IPython/genutils.py (getoutputerror): modified to add verbose,
3754 * IPython/genutils.py (getoutputerror): modified to add verbose,
3750 debug and header options. This makes the interface of all getout*
3755 debug and header options. This makes the interface of all getout*
3751 functions uniform.
3756 functions uniform.
3752 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
3757 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
3753
3758
3754 * IPython/Magic.py (Magic.default_option): added a function to
3759 * IPython/Magic.py (Magic.default_option): added a function to
3755 allow registering default options for any magic command. This
3760 allow registering default options for any magic command. This
3756 makes it easy to have profiles which customize the magics globally
3761 makes it easy to have profiles which customize the magics globally
3757 for a certain use. The values set through this function are
3762 for a certain use. The values set through this function are
3758 picked up by the parse_options() method, which all magics should
3763 picked up by the parse_options() method, which all magics should
3759 use to parse their options.
3764 use to parse their options.
3760
3765
3761 * IPython/genutils.py (warn): modified the warnings framework to
3766 * IPython/genutils.py (warn): modified the warnings framework to
3762 use the Term I/O class. I'm trying to slowly unify all of
3767 use the Term I/O class. I'm trying to slowly unify all of
3763 IPython's I/O operations to pass through Term.
3768 IPython's I/O operations to pass through Term.
3764
3769
3765 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
3770 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
3766 the secondary prompt to correctly match the length of the primary
3771 the secondary prompt to correctly match the length of the primary
3767 one for any prompt. Now multi-line code will properly line up
3772 one for any prompt. Now multi-line code will properly line up
3768 even for path dependent prompts, such as the new ones available
3773 even for path dependent prompts, such as the new ones available
3769 via the prompt_specials.
3774 via the prompt_specials.
3770
3775
3771 2004-06-06 Fernando Perez <fperez@colorado.edu>
3776 2004-06-06 Fernando Perez <fperez@colorado.edu>
3772
3777
3773 * IPython/Prompts.py (prompt_specials): Added the ability to have
3778 * IPython/Prompts.py (prompt_specials): Added the ability to have
3774 bash-like special sequences in the prompts, which get
3779 bash-like special sequences in the prompts, which get
3775 automatically expanded. Things like hostname, current working
3780 automatically expanded. Things like hostname, current working
3776 directory and username are implemented already, but it's easy to
3781 directory and username are implemented already, but it's easy to
3777 add more in the future. Thanks to a patch by W.J. van der Laan
3782 add more in the future. Thanks to a patch by W.J. van der Laan
3778 <gnufnork-AT-hetdigitalegat.nl>
3783 <gnufnork-AT-hetdigitalegat.nl>
3779 (prompt_specials): Added color support for prompt strings, so
3784 (prompt_specials): Added color support for prompt strings, so
3780 users can define arbitrary color setups for their prompts.
3785 users can define arbitrary color setups for their prompts.
3781
3786
3782 2004-06-05 Fernando Perez <fperez@colorado.edu>
3787 2004-06-05 Fernando Perez <fperez@colorado.edu>
3783
3788
3784 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
3789 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
3785 code to load Gary Bishop's readline and configure it
3790 code to load Gary Bishop's readline and configure it
3786 automatically. Thanks to Gary for help on this.
3791 automatically. Thanks to Gary for help on this.
3787
3792
3788 2004-06-01 Fernando Perez <fperez@colorado.edu>
3793 2004-06-01 Fernando Perez <fperez@colorado.edu>
3789
3794
3790 * IPython/Logger.py (Logger.create_log): fix bug for logging
3795 * IPython/Logger.py (Logger.create_log): fix bug for logging
3791 with no filename (previous fix was incomplete).
3796 with no filename (previous fix was incomplete).
3792
3797
3793 2004-05-25 Fernando Perez <fperez@colorado.edu>
3798 2004-05-25 Fernando Perez <fperez@colorado.edu>
3794
3799
3795 * IPython/Magic.py (Magic.parse_options): fix bug where naked
3800 * IPython/Magic.py (Magic.parse_options): fix bug where naked
3796 parens would get passed to the shell.
3801 parens would get passed to the shell.
3797
3802
3798 2004-05-20 Fernando Perez <fperez@colorado.edu>
3803 2004-05-20 Fernando Perez <fperez@colorado.edu>
3799
3804
3800 * IPython/Magic.py (Magic.magic_prun): changed default profile
3805 * IPython/Magic.py (Magic.magic_prun): changed default profile
3801 sort order to 'time' (the more common profiling need).
3806 sort order to 'time' (the more common profiling need).
3802
3807
3803 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
3808 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
3804 so that source code shown is guaranteed in sync with the file on
3809 so that source code shown is guaranteed in sync with the file on
3805 disk (also changed in psource). Similar fix to the one for
3810 disk (also changed in psource). Similar fix to the one for
3806 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
3811 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
3807 <yann.ledu-AT-noos.fr>.
3812 <yann.ledu-AT-noos.fr>.
3808
3813
3809 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
3814 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
3810 with a single option would not be correctly parsed. Closes
3815 with a single option would not be correctly parsed. Closes
3811 http://www.scipy.net/roundup/ipython/issue14. This bug had been
3816 http://www.scipy.net/roundup/ipython/issue14. This bug had been
3812 introduced in 0.6.0 (on 2004-05-06).
3817 introduced in 0.6.0 (on 2004-05-06).
3813
3818
3814 2004-05-13 *** Released version 0.6.0
3819 2004-05-13 *** Released version 0.6.0
3815
3820
3816 2004-05-13 Fernando Perez <fperez@colorado.edu>
3821 2004-05-13 Fernando Perez <fperez@colorado.edu>
3817
3822
3818 * debian/: Added debian/ directory to CVS, so that debian support
3823 * debian/: Added debian/ directory to CVS, so that debian support
3819 is publicly accessible. The debian package is maintained by Jack
3824 is publicly accessible. The debian package is maintained by Jack
3820 Moffit <jack-AT-xiph.org>.
3825 Moffit <jack-AT-xiph.org>.
3821
3826
3822 * Documentation: included the notes about an ipython-based system
3827 * Documentation: included the notes about an ipython-based system
3823 shell (the hypothetical 'pysh') into the new_design.pdf document,
3828 shell (the hypothetical 'pysh') into the new_design.pdf document,
3824 so that these ideas get distributed to users along with the
3829 so that these ideas get distributed to users along with the
3825 official documentation.
3830 official documentation.
3826
3831
3827 2004-05-10 Fernando Perez <fperez@colorado.edu>
3832 2004-05-10 Fernando Perez <fperez@colorado.edu>
3828
3833
3829 * IPython/Logger.py (Logger.create_log): fix recently introduced
3834 * IPython/Logger.py (Logger.create_log): fix recently introduced
3830 bug (misindented line) where logstart would fail when not given an
3835 bug (misindented line) where logstart would fail when not given an
3831 explicit filename.
3836 explicit filename.
3832
3837
3833 2004-05-09 Fernando Perez <fperez@colorado.edu>
3838 2004-05-09 Fernando Perez <fperez@colorado.edu>
3834
3839
3835 * IPython/Magic.py (Magic.parse_options): skip system call when
3840 * IPython/Magic.py (Magic.parse_options): skip system call when
3836 there are no options to look for. Faster, cleaner for the common
3841 there are no options to look for. Faster, cleaner for the common
3837 case.
3842 case.
3838
3843
3839 * Documentation: many updates to the manual: describing Windows
3844 * Documentation: many updates to the manual: describing Windows
3840 support better, Gnuplot updates, credits, misc small stuff. Also
3845 support better, Gnuplot updates, credits, misc small stuff. Also
3841 updated the new_design doc a bit.
3846 updated the new_design doc a bit.
3842
3847
3843 2004-05-06 *** Released version 0.6.0.rc1
3848 2004-05-06 *** Released version 0.6.0.rc1
3844
3849
3845 2004-05-06 Fernando Perez <fperez@colorado.edu>
3850 2004-05-06 Fernando Perez <fperez@colorado.edu>
3846
3851
3847 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
3852 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
3848 operations to use the vastly more efficient list/''.join() method.
3853 operations to use the vastly more efficient list/''.join() method.
3849 (FormattedTB.text): Fix
3854 (FormattedTB.text): Fix
3850 http://www.scipy.net/roundup/ipython/issue12 - exception source
3855 http://www.scipy.net/roundup/ipython/issue12 - exception source
3851 extract not updated after reload. Thanks to Mike Salib
3856 extract not updated after reload. Thanks to Mike Salib
3852 <msalib-AT-mit.edu> for pinning the source of the problem.
3857 <msalib-AT-mit.edu> for pinning the source of the problem.
3853 Fortunately, the solution works inside ipython and doesn't require
3858 Fortunately, the solution works inside ipython and doesn't require
3854 any changes to python proper.
3859 any changes to python proper.
3855
3860
3856 * IPython/Magic.py (Magic.parse_options): Improved to process the
3861 * IPython/Magic.py (Magic.parse_options): Improved to process the
3857 argument list as a true shell would (by actually using the
3862 argument list as a true shell would (by actually using the
3858 underlying system shell). This way, all @magics automatically get
3863 underlying system shell). This way, all @magics automatically get
3859 shell expansion for variables. Thanks to a comment by Alex
3864 shell expansion for variables. Thanks to a comment by Alex
3860 Schmolck.
3865 Schmolck.
3861
3866
3862 2004-04-04 Fernando Perez <fperez@colorado.edu>
3867 2004-04-04 Fernando Perez <fperez@colorado.edu>
3863
3868
3864 * IPython/iplib.py (InteractiveShell.interact): Added a special
3869 * IPython/iplib.py (InteractiveShell.interact): Added a special
3865 trap for a debugger quit exception, which is basically impossible
3870 trap for a debugger quit exception, which is basically impossible
3866 to handle by normal mechanisms, given what pdb does to the stack.
3871 to handle by normal mechanisms, given what pdb does to the stack.
3867 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
3872 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
3868
3873
3869 2004-04-03 Fernando Perez <fperez@colorado.edu>
3874 2004-04-03 Fernando Perez <fperez@colorado.edu>
3870
3875
3871 * IPython/genutils.py (Term): Standardized the names of the Term
3876 * IPython/genutils.py (Term): Standardized the names of the Term
3872 class streams to cin/cout/cerr, following C++ naming conventions
3877 class streams to cin/cout/cerr, following C++ naming conventions
3873 (I can't use in/out/err because 'in' is not a valid attribute
3878 (I can't use in/out/err because 'in' is not a valid attribute
3874 name).
3879 name).
3875
3880
3876 * IPython/iplib.py (InteractiveShell.interact): don't increment
3881 * IPython/iplib.py (InteractiveShell.interact): don't increment
3877 the prompt if there's no user input. By Daniel 'Dang' Griffith
3882 the prompt if there's no user input. By Daniel 'Dang' Griffith
3878 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
3883 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
3879 Francois Pinard.
3884 Francois Pinard.
3880
3885
3881 2004-04-02 Fernando Perez <fperez@colorado.edu>
3886 2004-04-02 Fernando Perez <fperez@colorado.edu>
3882
3887
3883 * IPython/genutils.py (Stream.__init__): Modified to survive at
3888 * IPython/genutils.py (Stream.__init__): Modified to survive at
3884 least importing in contexts where stdin/out/err aren't true file
3889 least importing in contexts where stdin/out/err aren't true file
3885 objects, such as PyCrust (they lack fileno() and mode). However,
3890 objects, such as PyCrust (they lack fileno() and mode). However,
3886 the recovery facilities which rely on these things existing will
3891 the recovery facilities which rely on these things existing will
3887 not work.
3892 not work.
3888
3893
3889 2004-04-01 Fernando Perez <fperez@colorado.edu>
3894 2004-04-01 Fernando Perez <fperez@colorado.edu>
3890
3895
3891 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
3896 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
3892 use the new getoutputerror() function, so it properly
3897 use the new getoutputerror() function, so it properly
3893 distinguishes stdout/err.
3898 distinguishes stdout/err.
3894
3899
3895 * IPython/genutils.py (getoutputerror): added a function to
3900 * IPython/genutils.py (getoutputerror): added a function to
3896 capture separately the standard output and error of a command.
3901 capture separately the standard output and error of a command.
3897 After a comment from dang on the mailing lists. This code is
3902 After a comment from dang on the mailing lists. This code is
3898 basically a modified version of commands.getstatusoutput(), from
3903 basically a modified version of commands.getstatusoutput(), from
3899 the standard library.
3904 the standard library.
3900
3905
3901 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3906 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3902 '!!' as a special syntax (shorthand) to access @sx.
3907 '!!' as a special syntax (shorthand) to access @sx.
3903
3908
3904 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3909 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3905 command and return its output as a list split on '\n'.
3910 command and return its output as a list split on '\n'.
3906
3911
3907 2004-03-31 Fernando Perez <fperez@colorado.edu>
3912 2004-03-31 Fernando Perez <fperez@colorado.edu>
3908
3913
3909 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3914 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3910 method to dictionaries used as FakeModule instances if they lack
3915 method to dictionaries used as FakeModule instances if they lack
3911 it. At least pydoc in python2.3 breaks for runtime-defined
3916 it. At least pydoc in python2.3 breaks for runtime-defined
3912 functions without this hack. At some point I need to _really_
3917 functions without this hack. At some point I need to _really_
3913 understand what FakeModule is doing, because it's a gross hack.
3918 understand what FakeModule is doing, because it's a gross hack.
3914 But it solves Arnd's problem for now...
3919 But it solves Arnd's problem for now...
3915
3920
3916 2004-02-27 Fernando Perez <fperez@colorado.edu>
3921 2004-02-27 Fernando Perez <fperez@colorado.edu>
3917
3922
3918 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3923 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3919 mode would behave erratically. Also increased the number of
3924 mode would behave erratically. Also increased the number of
3920 possible logs in rotate mod to 999. Thanks to Rod Holland
3925 possible logs in rotate mod to 999. Thanks to Rod Holland
3921 <rhh@StructureLABS.com> for the report and fixes.
3926 <rhh@StructureLABS.com> for the report and fixes.
3922
3927
3923 2004-02-26 Fernando Perez <fperez@colorado.edu>
3928 2004-02-26 Fernando Perez <fperez@colorado.edu>
3924
3929
3925 * IPython/genutils.py (page): Check that the curses module really
3930 * IPython/genutils.py (page): Check that the curses module really
3926 has the initscr attribute before trying to use it. For some
3931 has the initscr attribute before trying to use it. For some
3927 reason, the Solaris curses module is missing this. I think this
3932 reason, the Solaris curses module is missing this. I think this
3928 should be considered a Solaris python bug, but I'm not sure.
3933 should be considered a Solaris python bug, but I'm not sure.
3929
3934
3930 2004-01-17 Fernando Perez <fperez@colorado.edu>
3935 2004-01-17 Fernando Perez <fperez@colorado.edu>
3931
3936
3932 * IPython/genutils.py (Stream.__init__): Changes to try to make
3937 * IPython/genutils.py (Stream.__init__): Changes to try to make
3933 ipython robust against stdin/out/err being closed by the user.
3938 ipython robust against stdin/out/err being closed by the user.
3934 This is 'user error' (and blocks a normal python session, at least
3939 This is 'user error' (and blocks a normal python session, at least
3935 the stdout case). However, Ipython should be able to survive such
3940 the stdout case). However, Ipython should be able to survive such
3936 instances of abuse as gracefully as possible. To simplify the
3941 instances of abuse as gracefully as possible. To simplify the
3937 coding and maintain compatibility with Gary Bishop's Term
3942 coding and maintain compatibility with Gary Bishop's Term
3938 contributions, I've made use of classmethods for this. I think
3943 contributions, I've made use of classmethods for this. I think
3939 this introduces a dependency on python 2.2.
3944 this introduces a dependency on python 2.2.
3940
3945
3941 2004-01-13 Fernando Perez <fperez@colorado.edu>
3946 2004-01-13 Fernando Perez <fperez@colorado.edu>
3942
3947
3943 * IPython/numutils.py (exp_safe): simplified the code a bit and
3948 * IPython/numutils.py (exp_safe): simplified the code a bit and
3944 removed the need for importing the kinds module altogether.
3949 removed the need for importing the kinds module altogether.
3945
3950
3946 2004-01-06 Fernando Perez <fperez@colorado.edu>
3951 2004-01-06 Fernando Perez <fperez@colorado.edu>
3947
3952
3948 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3953 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3949 a magic function instead, after some community feedback. No
3954 a magic function instead, after some community feedback. No
3950 special syntax will exist for it, but its name is deliberately
3955 special syntax will exist for it, but its name is deliberately
3951 very short.
3956 very short.
3952
3957
3953 2003-12-20 Fernando Perez <fperez@colorado.edu>
3958 2003-12-20 Fernando Perez <fperez@colorado.edu>
3954
3959
3955 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3960 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3956 new functionality, to automagically assign the result of a shell
3961 new functionality, to automagically assign the result of a shell
3957 command to a variable. I'll solicit some community feedback on
3962 command to a variable. I'll solicit some community feedback on
3958 this before making it permanent.
3963 this before making it permanent.
3959
3964
3960 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3965 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3961 requested about callables for which inspect couldn't obtain a
3966 requested about callables for which inspect couldn't obtain a
3962 proper argspec. Thanks to a crash report sent by Etienne
3967 proper argspec. Thanks to a crash report sent by Etienne
3963 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3968 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3964
3969
3965 2003-12-09 Fernando Perez <fperez@colorado.edu>
3970 2003-12-09 Fernando Perez <fperez@colorado.edu>
3966
3971
3967 * IPython/genutils.py (page): patch for the pager to work across
3972 * IPython/genutils.py (page): patch for the pager to work across
3968 various versions of Windows. By Gary Bishop.
3973 various versions of Windows. By Gary Bishop.
3969
3974
3970 2003-12-04 Fernando Perez <fperez@colorado.edu>
3975 2003-12-04 Fernando Perez <fperez@colorado.edu>
3971
3976
3972 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3977 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3973 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3978 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3974 While I tested this and it looks ok, there may still be corner
3979 While I tested this and it looks ok, there may still be corner
3975 cases I've missed.
3980 cases I've missed.
3976
3981
3977 2003-12-01 Fernando Perez <fperez@colorado.edu>
3982 2003-12-01 Fernando Perez <fperez@colorado.edu>
3978
3983
3979 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3984 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3980 where a line like 'p,q=1,2' would fail because the automagic
3985 where a line like 'p,q=1,2' would fail because the automagic
3981 system would be triggered for @p.
3986 system would be triggered for @p.
3982
3987
3983 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3988 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3984 cleanups, code unmodified.
3989 cleanups, code unmodified.
3985
3990
3986 * IPython/genutils.py (Term): added a class for IPython to handle
3991 * IPython/genutils.py (Term): added a class for IPython to handle
3987 output. In most cases it will just be a proxy for stdout/err, but
3992 output. In most cases it will just be a proxy for stdout/err, but
3988 having this allows modifications to be made for some platforms,
3993 having this allows modifications to be made for some platforms,
3989 such as handling color escapes under Windows. All of this code
3994 such as handling color escapes under Windows. All of this code
3990 was contributed by Gary Bishop, with minor modifications by me.
3995 was contributed by Gary Bishop, with minor modifications by me.
3991 The actual changes affect many files.
3996 The actual changes affect many files.
3992
3997
3993 2003-11-30 Fernando Perez <fperez@colorado.edu>
3998 2003-11-30 Fernando Perez <fperez@colorado.edu>
3994
3999
3995 * IPython/iplib.py (file_matches): new completion code, courtesy
4000 * IPython/iplib.py (file_matches): new completion code, courtesy
3996 of Jeff Collins. This enables filename completion again under
4001 of Jeff Collins. This enables filename completion again under
3997 python 2.3, which disabled it at the C level.
4002 python 2.3, which disabled it at the C level.
3998
4003
3999 2003-11-11 Fernando Perez <fperez@colorado.edu>
4004 2003-11-11 Fernando Perez <fperez@colorado.edu>
4000
4005
4001 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
4006 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
4002 for Numeric.array(map(...)), but often convenient.
4007 for Numeric.array(map(...)), but often convenient.
4003
4008
4004 2003-11-05 Fernando Perez <fperez@colorado.edu>
4009 2003-11-05 Fernando Perez <fperez@colorado.edu>
4005
4010
4006 * IPython/numutils.py (frange): Changed a call from int() to
4011 * IPython/numutils.py (frange): Changed a call from int() to
4007 int(round()) to prevent a problem reported with arange() in the
4012 int(round()) to prevent a problem reported with arange() in the
4008 numpy list.
4013 numpy list.
4009
4014
4010 2003-10-06 Fernando Perez <fperez@colorado.edu>
4015 2003-10-06 Fernando Perez <fperez@colorado.edu>
4011
4016
4012 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
4017 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
4013 prevent crashes if sys lacks an argv attribute (it happens with
4018 prevent crashes if sys lacks an argv attribute (it happens with
4014 embedded interpreters which build a bare-bones sys module).
4019 embedded interpreters which build a bare-bones sys module).
4015 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
4020 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
4016
4021
4017 2003-09-24 Fernando Perez <fperez@colorado.edu>
4022 2003-09-24 Fernando Perez <fperez@colorado.edu>
4018
4023
4019 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
4024 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
4020 to protect against poorly written user objects where __getattr__
4025 to protect against poorly written user objects where __getattr__
4021 raises exceptions other than AttributeError. Thanks to a bug
4026 raises exceptions other than AttributeError. Thanks to a bug
4022 report by Oliver Sander <osander-AT-gmx.de>.
4027 report by Oliver Sander <osander-AT-gmx.de>.
4023
4028
4024 * IPython/FakeModule.py (FakeModule.__repr__): this method was
4029 * IPython/FakeModule.py (FakeModule.__repr__): this method was
4025 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
4030 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
4026
4031
4027 2003-09-09 Fernando Perez <fperez@colorado.edu>
4032 2003-09-09 Fernando Perez <fperez@colorado.edu>
4028
4033
4029 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
4034 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
4030 unpacking a list whith a callable as first element would
4035 unpacking a list whith a callable as first element would
4031 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
4036 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
4032 Collins.
4037 Collins.
4033
4038
4034 2003-08-25 *** Released version 0.5.0
4039 2003-08-25 *** Released version 0.5.0
4035
4040
4036 2003-08-22 Fernando Perez <fperez@colorado.edu>
4041 2003-08-22 Fernando Perez <fperez@colorado.edu>
4037
4042
4038 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
4043 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
4039 improperly defined user exceptions. Thanks to feedback from Mark
4044 improperly defined user exceptions. Thanks to feedback from Mark
4040 Russell <mrussell-AT-verio.net>.
4045 Russell <mrussell-AT-verio.net>.
4041
4046
4042 2003-08-20 Fernando Perez <fperez@colorado.edu>
4047 2003-08-20 Fernando Perez <fperez@colorado.edu>
4043
4048
4044 * IPython/OInspect.py (Inspector.pinfo): changed String Form
4049 * IPython/OInspect.py (Inspector.pinfo): changed String Form
4045 printing so that it would print multi-line string forms starting
4050 printing so that it would print multi-line string forms starting
4046 with a new line. This way the formatting is better respected for
4051 with a new line. This way the formatting is better respected for
4047 objects which work hard to make nice string forms.
4052 objects which work hard to make nice string forms.
4048
4053
4049 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
4054 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
4050 autocall would overtake data access for objects with both
4055 autocall would overtake data access for objects with both
4051 __getitem__ and __call__.
4056 __getitem__ and __call__.
4052
4057
4053 2003-08-19 *** Released version 0.5.0-rc1
4058 2003-08-19 *** Released version 0.5.0-rc1
4054
4059
4055 2003-08-19 Fernando Perez <fperez@colorado.edu>
4060 2003-08-19 Fernando Perez <fperez@colorado.edu>
4056
4061
4057 * IPython/deep_reload.py (load_tail): single tiny change here
4062 * IPython/deep_reload.py (load_tail): single tiny change here
4058 seems to fix the long-standing bug of dreload() failing to work
4063 seems to fix the long-standing bug of dreload() failing to work
4059 for dotted names. But this module is pretty tricky, so I may have
4064 for dotted names. But this module is pretty tricky, so I may have
4060 missed some subtlety. Needs more testing!.
4065 missed some subtlety. Needs more testing!.
4061
4066
4062 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
4067 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
4063 exceptions which have badly implemented __str__ methods.
4068 exceptions which have badly implemented __str__ methods.
4064 (VerboseTB.text): harden against inspect.getinnerframes crashing,
4069 (VerboseTB.text): harden against inspect.getinnerframes crashing,
4065 which I've been getting reports about from Python 2.3 users. I
4070 which I've been getting reports about from Python 2.3 users. I
4066 wish I had a simple test case to reproduce the problem, so I could
4071 wish I had a simple test case to reproduce the problem, so I could
4067 either write a cleaner workaround or file a bug report if
4072 either write a cleaner workaround or file a bug report if
4068 necessary.
4073 necessary.
4069
4074
4070 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
4075 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
4071 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
4076 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
4072 a bug report by Tjabo Kloppenburg.
4077 a bug report by Tjabo Kloppenburg.
4073
4078
4074 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
4079 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
4075 crashes. Wrapped the pdb call in a blanket try/except, since pdb
4080 crashes. Wrapped the pdb call in a blanket try/except, since pdb
4076 seems rather unstable. Thanks to a bug report by Tjabo
4081 seems rather unstable. Thanks to a bug report by Tjabo
4077 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
4082 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
4078
4083
4079 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
4084 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
4080 this out soon because of the critical fixes in the inner loop for
4085 this out soon because of the critical fixes in the inner loop for
4081 generators.
4086 generators.
4082
4087
4083 * IPython/Magic.py (Magic.getargspec): removed. This (and
4088 * IPython/Magic.py (Magic.getargspec): removed. This (and
4084 _get_def) have been obsoleted by OInspect for a long time, I
4089 _get_def) have been obsoleted by OInspect for a long time, I
4085 hadn't noticed that they were dead code.
4090 hadn't noticed that they were dead code.
4086 (Magic._ofind): restored _ofind functionality for a few literals
4091 (Magic._ofind): restored _ofind functionality for a few literals
4087 (those in ["''",'""','[]','{}','()']). But it won't work anymore
4092 (those in ["''",'""','[]','{}','()']). But it won't work anymore
4088 for things like "hello".capitalize?, since that would require a
4093 for things like "hello".capitalize?, since that would require a
4089 potentially dangerous eval() again.
4094 potentially dangerous eval() again.
4090
4095
4091 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
4096 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
4092 logic a bit more to clean up the escapes handling and minimize the
4097 logic a bit more to clean up the escapes handling and minimize the
4093 use of _ofind to only necessary cases. The interactive 'feel' of
4098 use of _ofind to only necessary cases. The interactive 'feel' of
4094 IPython should have improved quite a bit with the changes in
4099 IPython should have improved quite a bit with the changes in
4095 _prefilter and _ofind (besides being far safer than before).
4100 _prefilter and _ofind (besides being far safer than before).
4096
4101
4097 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
4102 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
4098 obscure, never reported). Edit would fail to find the object to
4103 obscure, never reported). Edit would fail to find the object to
4099 edit under some circumstances.
4104 edit under some circumstances.
4100 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
4105 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
4101 which were causing double-calling of generators. Those eval calls
4106 which were causing double-calling of generators. Those eval calls
4102 were _very_ dangerous, since code with side effects could be
4107 were _very_ dangerous, since code with side effects could be
4103 triggered. As they say, 'eval is evil'... These were the
4108 triggered. As they say, 'eval is evil'... These were the
4104 nastiest evals in IPython. Besides, _ofind is now far simpler,
4109 nastiest evals in IPython. Besides, _ofind is now far simpler,
4105 and it should also be quite a bit faster. Its use of inspect is
4110 and it should also be quite a bit faster. Its use of inspect is
4106 also safer, so perhaps some of the inspect-related crashes I've
4111 also safer, so perhaps some of the inspect-related crashes I've
4107 seen lately with Python 2.3 might be taken care of. That will
4112 seen lately with Python 2.3 might be taken care of. That will
4108 need more testing.
4113 need more testing.
4109
4114
4110 2003-08-17 Fernando Perez <fperez@colorado.edu>
4115 2003-08-17 Fernando Perez <fperez@colorado.edu>
4111
4116
4112 * IPython/iplib.py (InteractiveShell._prefilter): significant
4117 * IPython/iplib.py (InteractiveShell._prefilter): significant
4113 simplifications to the logic for handling user escapes. Faster
4118 simplifications to the logic for handling user escapes. Faster
4114 and simpler code.
4119 and simpler code.
4115
4120
4116 2003-08-14 Fernando Perez <fperez@colorado.edu>
4121 2003-08-14 Fernando Perez <fperez@colorado.edu>
4117
4122
4118 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
4123 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
4119 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
4124 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
4120 but it should be quite a bit faster. And the recursive version
4125 but it should be quite a bit faster. And the recursive version
4121 generated O(log N) intermediate storage for all rank>1 arrays,
4126 generated O(log N) intermediate storage for all rank>1 arrays,
4122 even if they were contiguous.
4127 even if they were contiguous.
4123 (l1norm): Added this function.
4128 (l1norm): Added this function.
4124 (norm): Added this function for arbitrary norms (including
4129 (norm): Added this function for arbitrary norms (including
4125 l-infinity). l1 and l2 are still special cases for convenience
4130 l-infinity). l1 and l2 are still special cases for convenience
4126 and speed.
4131 and speed.
4127
4132
4128 2003-08-03 Fernando Perez <fperez@colorado.edu>
4133 2003-08-03 Fernando Perez <fperez@colorado.edu>
4129
4134
4130 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
4135 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
4131 exceptions, which now raise PendingDeprecationWarnings in Python
4136 exceptions, which now raise PendingDeprecationWarnings in Python
4132 2.3. There were some in Magic and some in Gnuplot2.
4137 2.3. There were some in Magic and some in Gnuplot2.
4133
4138
4134 2003-06-30 Fernando Perez <fperez@colorado.edu>
4139 2003-06-30 Fernando Perez <fperez@colorado.edu>
4135
4140
4136 * IPython/genutils.py (page): modified to call curses only for
4141 * IPython/genutils.py (page): modified to call curses only for
4137 terminals where TERM=='xterm'. After problems under many other
4142 terminals where TERM=='xterm'. After problems under many other
4138 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
4143 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
4139
4144
4140 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
4145 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
4141 would be triggered when readline was absent. This was just an old
4146 would be triggered when readline was absent. This was just an old
4142 debugging statement I'd forgotten to take out.
4147 debugging statement I'd forgotten to take out.
4143
4148
4144 2003-06-20 Fernando Perez <fperez@colorado.edu>
4149 2003-06-20 Fernando Perez <fperez@colorado.edu>
4145
4150
4146 * IPython/genutils.py (clock): modified to return only user time
4151 * IPython/genutils.py (clock): modified to return only user time
4147 (not counting system time), after a discussion on scipy. While
4152 (not counting system time), after a discussion on scipy. While
4148 system time may be a useful quantity occasionally, it may much
4153 system time may be a useful quantity occasionally, it may much
4149 more easily be skewed by occasional swapping or other similar
4154 more easily be skewed by occasional swapping or other similar
4150 activity.
4155 activity.
4151
4156
4152 2003-06-05 Fernando Perez <fperez@colorado.edu>
4157 2003-06-05 Fernando Perez <fperez@colorado.edu>
4153
4158
4154 * IPython/numutils.py (identity): new function, for building
4159 * IPython/numutils.py (identity): new function, for building
4155 arbitrary rank Kronecker deltas (mostly backwards compatible with
4160 arbitrary rank Kronecker deltas (mostly backwards compatible with
4156 Numeric.identity)
4161 Numeric.identity)
4157
4162
4158 2003-06-03 Fernando Perez <fperez@colorado.edu>
4163 2003-06-03 Fernando Perez <fperez@colorado.edu>
4159
4164
4160 * IPython/iplib.py (InteractiveShell.handle_magic): protect
4165 * IPython/iplib.py (InteractiveShell.handle_magic): protect
4161 arguments passed to magics with spaces, to allow trailing '\' to
4166 arguments passed to magics with spaces, to allow trailing '\' to
4162 work normally (mainly for Windows users).
4167 work normally (mainly for Windows users).
4163
4168
4164 2003-05-29 Fernando Perez <fperez@colorado.edu>
4169 2003-05-29 Fernando Perez <fperez@colorado.edu>
4165
4170
4166 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
4171 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
4167 instead of pydoc.help. This fixes a bizarre behavior where
4172 instead of pydoc.help. This fixes a bizarre behavior where
4168 printing '%s' % locals() would trigger the help system. Now
4173 printing '%s' % locals() would trigger the help system. Now
4169 ipython behaves like normal python does.
4174 ipython behaves like normal python does.
4170
4175
4171 Note that if one does 'from pydoc import help', the bizarre
4176 Note that if one does 'from pydoc import help', the bizarre
4172 behavior returns, but this will also happen in normal python, so
4177 behavior returns, but this will also happen in normal python, so
4173 it's not an ipython bug anymore (it has to do with how pydoc.help
4178 it's not an ipython bug anymore (it has to do with how pydoc.help
4174 is implemented).
4179 is implemented).
4175
4180
4176 2003-05-22 Fernando Perez <fperez@colorado.edu>
4181 2003-05-22 Fernando Perez <fperez@colorado.edu>
4177
4182
4178 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
4183 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
4179 return [] instead of None when nothing matches, also match to end
4184 return [] instead of None when nothing matches, also match to end
4180 of line. Patch by Gary Bishop.
4185 of line. Patch by Gary Bishop.
4181
4186
4182 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
4187 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
4183 protection as before, for files passed on the command line. This
4188 protection as before, for files passed on the command line. This
4184 prevents the CrashHandler from kicking in if user files call into
4189 prevents the CrashHandler from kicking in if user files call into
4185 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
4190 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
4186 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
4191 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
4187
4192
4188 2003-05-20 *** Released version 0.4.0
4193 2003-05-20 *** Released version 0.4.0
4189
4194
4190 2003-05-20 Fernando Perez <fperez@colorado.edu>
4195 2003-05-20 Fernando Perez <fperez@colorado.edu>
4191
4196
4192 * setup.py: added support for manpages. It's a bit hackish b/c of
4197 * setup.py: added support for manpages. It's a bit hackish b/c of
4193 a bug in the way the bdist_rpm distutils target handles gzipped
4198 a bug in the way the bdist_rpm distutils target handles gzipped
4194 manpages, but it works. After a patch by Jack.
4199 manpages, but it works. After a patch by Jack.
4195
4200
4196 2003-05-19 Fernando Perez <fperez@colorado.edu>
4201 2003-05-19 Fernando Perez <fperez@colorado.edu>
4197
4202
4198 * IPython/numutils.py: added a mockup of the kinds module, since
4203 * IPython/numutils.py: added a mockup of the kinds module, since
4199 it was recently removed from Numeric. This way, numutils will
4204 it was recently removed from Numeric. This way, numutils will
4200 work for all users even if they are missing kinds.
4205 work for all users even if they are missing kinds.
4201
4206
4202 * IPython/Magic.py (Magic._ofind): Harden against an inspect
4207 * IPython/Magic.py (Magic._ofind): Harden against an inspect
4203 failure, which can occur with SWIG-wrapped extensions. After a
4208 failure, which can occur with SWIG-wrapped extensions. After a
4204 crash report from Prabhu.
4209 crash report from Prabhu.
4205
4210
4206 2003-05-16 Fernando Perez <fperez@colorado.edu>
4211 2003-05-16 Fernando Perez <fperez@colorado.edu>
4207
4212
4208 * IPython/iplib.py (InteractiveShell.excepthook): New method to
4213 * IPython/iplib.py (InteractiveShell.excepthook): New method to
4209 protect ipython from user code which may call directly
4214 protect ipython from user code which may call directly
4210 sys.excepthook (this looks like an ipython crash to the user, even
4215 sys.excepthook (this looks like an ipython crash to the user, even
4211 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
4216 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
4212 This is especially important to help users of WxWindows, but may
4217 This is especially important to help users of WxWindows, but may
4213 also be useful in other cases.
4218 also be useful in other cases.
4214
4219
4215 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
4220 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
4216 an optional tb_offset to be specified, and to preserve exception
4221 an optional tb_offset to be specified, and to preserve exception
4217 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
4222 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
4218
4223
4219 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
4224 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
4220
4225
4221 2003-05-15 Fernando Perez <fperez@colorado.edu>
4226 2003-05-15 Fernando Perez <fperez@colorado.edu>
4222
4227
4223 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
4228 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
4224 installing for a new user under Windows.
4229 installing for a new user under Windows.
4225
4230
4226 2003-05-12 Fernando Perez <fperez@colorado.edu>
4231 2003-05-12 Fernando Perez <fperez@colorado.edu>
4227
4232
4228 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
4233 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
4229 handler for Emacs comint-based lines. Currently it doesn't do
4234 handler for Emacs comint-based lines. Currently it doesn't do
4230 much (but importantly, it doesn't update the history cache). In
4235 much (but importantly, it doesn't update the history cache). In
4231 the future it may be expanded if Alex needs more functionality
4236 the future it may be expanded if Alex needs more functionality
4232 there.
4237 there.
4233
4238
4234 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
4239 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
4235 info to crash reports.
4240 info to crash reports.
4236
4241
4237 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
4242 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
4238 just like Python's -c. Also fixed crash with invalid -color
4243 just like Python's -c. Also fixed crash with invalid -color
4239 option value at startup. Thanks to Will French
4244 option value at startup. Thanks to Will French
4240 <wfrench-AT-bestweb.net> for the bug report.
4245 <wfrench-AT-bestweb.net> for the bug report.
4241
4246
4242 2003-05-09 Fernando Perez <fperez@colorado.edu>
4247 2003-05-09 Fernando Perez <fperez@colorado.edu>
4243
4248
4244 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
4249 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
4245 to EvalDict (it's a mapping, after all) and simplified its code
4250 to EvalDict (it's a mapping, after all) and simplified its code
4246 quite a bit, after a nice discussion on c.l.py where Gustavo
4251 quite a bit, after a nice discussion on c.l.py where Gustavo
4247 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
4252 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
4248
4253
4249 2003-04-30 Fernando Perez <fperez@colorado.edu>
4254 2003-04-30 Fernando Perez <fperez@colorado.edu>
4250
4255
4251 * IPython/genutils.py (timings_out): modified it to reduce its
4256 * IPython/genutils.py (timings_out): modified it to reduce its
4252 overhead in the common reps==1 case.
4257 overhead in the common reps==1 case.
4253
4258
4254 2003-04-29 Fernando Perez <fperez@colorado.edu>
4259 2003-04-29 Fernando Perez <fperez@colorado.edu>
4255
4260
4256 * IPython/genutils.py (timings_out): Modified to use the resource
4261 * IPython/genutils.py (timings_out): Modified to use the resource
4257 module, which avoids the wraparound problems of time.clock().
4262 module, which avoids the wraparound problems of time.clock().
4258
4263
4259 2003-04-17 *** Released version 0.2.15pre4
4264 2003-04-17 *** Released version 0.2.15pre4
4260
4265
4261 2003-04-17 Fernando Perez <fperez@colorado.edu>
4266 2003-04-17 Fernando Perez <fperez@colorado.edu>
4262
4267
4263 * setup.py (scriptfiles): Split windows-specific stuff over to a
4268 * setup.py (scriptfiles): Split windows-specific stuff over to a
4264 separate file, in an attempt to have a Windows GUI installer.
4269 separate file, in an attempt to have a Windows GUI installer.
4265 That didn't work, but part of the groundwork is done.
4270 That didn't work, but part of the groundwork is done.
4266
4271
4267 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
4272 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
4268 indent/unindent with 4 spaces. Particularly useful in combination
4273 indent/unindent with 4 spaces. Particularly useful in combination
4269 with the new auto-indent option.
4274 with the new auto-indent option.
4270
4275
4271 2003-04-16 Fernando Perez <fperez@colorado.edu>
4276 2003-04-16 Fernando Perez <fperez@colorado.edu>
4272
4277
4273 * IPython/Magic.py: various replacements of self.rc for
4278 * IPython/Magic.py: various replacements of self.rc for
4274 self.shell.rc. A lot more remains to be done to fully disentangle
4279 self.shell.rc. A lot more remains to be done to fully disentangle
4275 this class from the main Shell class.
4280 this class from the main Shell class.
4276
4281
4277 * IPython/GnuplotRuntime.py: added checks for mouse support so
4282 * IPython/GnuplotRuntime.py: added checks for mouse support so
4278 that we don't try to enable it if the current gnuplot doesn't
4283 that we don't try to enable it if the current gnuplot doesn't
4279 really support it. Also added checks so that we don't try to
4284 really support it. Also added checks so that we don't try to
4280 enable persist under Windows (where Gnuplot doesn't recognize the
4285 enable persist under Windows (where Gnuplot doesn't recognize the
4281 option).
4286 option).
4282
4287
4283 * IPython/iplib.py (InteractiveShell.interact): Added optional
4288 * IPython/iplib.py (InteractiveShell.interact): Added optional
4284 auto-indenting code, after a patch by King C. Shu
4289 auto-indenting code, after a patch by King C. Shu
4285 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
4290 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
4286 get along well with pasting indented code. If I ever figure out
4291 get along well with pasting indented code. If I ever figure out
4287 how to make that part go well, it will become on by default.
4292 how to make that part go well, it will become on by default.
4288
4293
4289 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
4294 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
4290 crash ipython if there was an unmatched '%' in the user's prompt
4295 crash ipython if there was an unmatched '%' in the user's prompt
4291 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4296 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4292
4297
4293 * IPython/iplib.py (InteractiveShell.interact): removed the
4298 * IPython/iplib.py (InteractiveShell.interact): removed the
4294 ability to ask the user whether he wants to crash or not at the
4299 ability to ask the user whether he wants to crash or not at the
4295 'last line' exception handler. Calling functions at that point
4300 'last line' exception handler. Calling functions at that point
4296 changes the stack, and the error reports would have incorrect
4301 changes the stack, and the error reports would have incorrect
4297 tracebacks.
4302 tracebacks.
4298
4303
4299 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
4304 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
4300 pass through a peger a pretty-printed form of any object. After a
4305 pass through a peger a pretty-printed form of any object. After a
4301 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
4306 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
4302
4307
4303 2003-04-14 Fernando Perez <fperez@colorado.edu>
4308 2003-04-14 Fernando Perez <fperez@colorado.edu>
4304
4309
4305 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
4310 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
4306 all files in ~ would be modified at first install (instead of
4311 all files in ~ would be modified at first install (instead of
4307 ~/.ipython). This could be potentially disastrous, as the
4312 ~/.ipython). This could be potentially disastrous, as the
4308 modification (make line-endings native) could damage binary files.
4313 modification (make line-endings native) could damage binary files.
4309
4314
4310 2003-04-10 Fernando Perez <fperez@colorado.edu>
4315 2003-04-10 Fernando Perez <fperez@colorado.edu>
4311
4316
4312 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
4317 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
4313 handle only lines which are invalid python. This now means that
4318 handle only lines which are invalid python. This now means that
4314 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
4319 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
4315 for the bug report.
4320 for the bug report.
4316
4321
4317 2003-04-01 Fernando Perez <fperez@colorado.edu>
4322 2003-04-01 Fernando Perez <fperez@colorado.edu>
4318
4323
4319 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
4324 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
4320 where failing to set sys.last_traceback would crash pdb.pm().
4325 where failing to set sys.last_traceback would crash pdb.pm().
4321 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
4326 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
4322 report.
4327 report.
4323
4328
4324 2003-03-25 Fernando Perez <fperez@colorado.edu>
4329 2003-03-25 Fernando Perez <fperez@colorado.edu>
4325
4330
4326 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
4331 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
4327 before printing it (it had a lot of spurious blank lines at the
4332 before printing it (it had a lot of spurious blank lines at the
4328 end).
4333 end).
4329
4334
4330 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
4335 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
4331 output would be sent 21 times! Obviously people don't use this
4336 output would be sent 21 times! Obviously people don't use this
4332 too often, or I would have heard about it.
4337 too often, or I would have heard about it.
4333
4338
4334 2003-03-24 Fernando Perez <fperez@colorado.edu>
4339 2003-03-24 Fernando Perez <fperez@colorado.edu>
4335
4340
4336 * setup.py (scriptfiles): renamed the data_files parameter from
4341 * setup.py (scriptfiles): renamed the data_files parameter from
4337 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
4342 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
4338 for the patch.
4343 for the patch.
4339
4344
4340 2003-03-20 Fernando Perez <fperez@colorado.edu>
4345 2003-03-20 Fernando Perez <fperez@colorado.edu>
4341
4346
4342 * IPython/genutils.py (error): added error() and fatal()
4347 * IPython/genutils.py (error): added error() and fatal()
4343 functions.
4348 functions.
4344
4349
4345 2003-03-18 *** Released version 0.2.15pre3
4350 2003-03-18 *** Released version 0.2.15pre3
4346
4351
4347 2003-03-18 Fernando Perez <fperez@colorado.edu>
4352 2003-03-18 Fernando Perez <fperez@colorado.edu>
4348
4353
4349 * setupext/install_data_ext.py
4354 * setupext/install_data_ext.py
4350 (install_data_ext.initialize_options): Class contributed by Jack
4355 (install_data_ext.initialize_options): Class contributed by Jack
4351 Moffit for fixing the old distutils hack. He is sending this to
4356 Moffit for fixing the old distutils hack. He is sending this to
4352 the distutils folks so in the future we may not need it as a
4357 the distutils folks so in the future we may not need it as a
4353 private fix.
4358 private fix.
4354
4359
4355 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
4360 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
4356 changes for Debian packaging. See his patch for full details.
4361 changes for Debian packaging. See his patch for full details.
4357 The old distutils hack of making the ipythonrc* files carry a
4362 The old distutils hack of making the ipythonrc* files carry a
4358 bogus .py extension is gone, at last. Examples were moved to a
4363 bogus .py extension is gone, at last. Examples were moved to a
4359 separate subdir under doc/, and the separate executable scripts
4364 separate subdir under doc/, and the separate executable scripts
4360 now live in their own directory. Overall a great cleanup. The
4365 now live in their own directory. Overall a great cleanup. The
4361 manual was updated to use the new files, and setup.py has been
4366 manual was updated to use the new files, and setup.py has been
4362 fixed for this setup.
4367 fixed for this setup.
4363
4368
4364 * IPython/PyColorize.py (Parser.usage): made non-executable and
4369 * IPython/PyColorize.py (Parser.usage): made non-executable and
4365 created a pycolor wrapper around it to be included as a script.
4370 created a pycolor wrapper around it to be included as a script.
4366
4371
4367 2003-03-12 *** Released version 0.2.15pre2
4372 2003-03-12 *** Released version 0.2.15pre2
4368
4373
4369 2003-03-12 Fernando Perez <fperez@colorado.edu>
4374 2003-03-12 Fernando Perez <fperez@colorado.edu>
4370
4375
4371 * IPython/ColorANSI.py (make_color_table): Finally fixed the
4376 * IPython/ColorANSI.py (make_color_table): Finally fixed the
4372 long-standing problem with garbage characters in some terminals.
4377 long-standing problem with garbage characters in some terminals.
4373 The issue was really that the \001 and \002 escapes must _only_ be
4378 The issue was really that the \001 and \002 escapes must _only_ be
4374 passed to input prompts (which call readline), but _never_ to
4379 passed to input prompts (which call readline), but _never_ to
4375 normal text to be printed on screen. I changed ColorANSI to have
4380 normal text to be printed on screen. I changed ColorANSI to have
4376 two classes: TermColors and InputTermColors, each with the
4381 two classes: TermColors and InputTermColors, each with the
4377 appropriate escapes for input prompts or normal text. The code in
4382 appropriate escapes for input prompts or normal text. The code in
4378 Prompts.py got slightly more complicated, but this very old and
4383 Prompts.py got slightly more complicated, but this very old and
4379 annoying bug is finally fixed.
4384 annoying bug is finally fixed.
4380
4385
4381 All the credit for nailing down the real origin of this problem
4386 All the credit for nailing down the real origin of this problem
4382 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
4387 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
4383 *Many* thanks to him for spending quite a bit of effort on this.
4388 *Many* thanks to him for spending quite a bit of effort on this.
4384
4389
4385 2003-03-05 *** Released version 0.2.15pre1
4390 2003-03-05 *** Released version 0.2.15pre1
4386
4391
4387 2003-03-03 Fernando Perez <fperez@colorado.edu>
4392 2003-03-03 Fernando Perez <fperez@colorado.edu>
4388
4393
4389 * IPython/FakeModule.py: Moved the former _FakeModule to a
4394 * IPython/FakeModule.py: Moved the former _FakeModule to a
4390 separate file, because it's also needed by Magic (to fix a similar
4395 separate file, because it's also needed by Magic (to fix a similar
4391 pickle-related issue in @run).
4396 pickle-related issue in @run).
4392
4397
4393 2003-03-02 Fernando Perez <fperez@colorado.edu>
4398 2003-03-02 Fernando Perez <fperez@colorado.edu>
4394
4399
4395 * IPython/Magic.py (Magic.magic_autocall): new magic to control
4400 * IPython/Magic.py (Magic.magic_autocall): new magic to control
4396 the autocall option at runtime.
4401 the autocall option at runtime.
4397 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
4402 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
4398 across Magic.py to start separating Magic from InteractiveShell.
4403 across Magic.py to start separating Magic from InteractiveShell.
4399 (Magic._ofind): Fixed to return proper namespace for dotted
4404 (Magic._ofind): Fixed to return proper namespace for dotted
4400 names. Before, a dotted name would always return 'not currently
4405 names. Before, a dotted name would always return 'not currently
4401 defined', because it would find the 'parent'. s.x would be found,
4406 defined', because it would find the 'parent'. s.x would be found,
4402 but since 'x' isn't defined by itself, it would get confused.
4407 but since 'x' isn't defined by itself, it would get confused.
4403 (Magic.magic_run): Fixed pickling problems reported by Ralf
4408 (Magic.magic_run): Fixed pickling problems reported by Ralf
4404 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
4409 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
4405 that I'd used when Mike Heeter reported similar issues at the
4410 that I'd used when Mike Heeter reported similar issues at the
4406 top-level, but now for @run. It boils down to injecting the
4411 top-level, but now for @run. It boils down to injecting the
4407 namespace where code is being executed with something that looks
4412 namespace where code is being executed with something that looks
4408 enough like a module to fool pickle.dump(). Since a pickle stores
4413 enough like a module to fool pickle.dump(). Since a pickle stores
4409 a named reference to the importing module, we need this for
4414 a named reference to the importing module, we need this for
4410 pickles to save something sensible.
4415 pickles to save something sensible.
4411
4416
4412 * IPython/ipmaker.py (make_IPython): added an autocall option.
4417 * IPython/ipmaker.py (make_IPython): added an autocall option.
4413
4418
4414 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
4419 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
4415 the auto-eval code. Now autocalling is an option, and the code is
4420 the auto-eval code. Now autocalling is an option, and the code is
4416 also vastly safer. There is no more eval() involved at all.
4421 also vastly safer. There is no more eval() involved at all.
4417
4422
4418 2003-03-01 Fernando Perez <fperez@colorado.edu>
4423 2003-03-01 Fernando Perez <fperez@colorado.edu>
4419
4424
4420 * IPython/Magic.py (Magic._ofind): Changed interface to return a
4425 * IPython/Magic.py (Magic._ofind): Changed interface to return a
4421 dict with named keys instead of a tuple.
4426 dict with named keys instead of a tuple.
4422
4427
4423 * IPython: Started using CVS for IPython as of 0.2.15pre1.
4428 * IPython: Started using CVS for IPython as of 0.2.15pre1.
4424
4429
4425 * setup.py (make_shortcut): Fixed message about directories
4430 * setup.py (make_shortcut): Fixed message about directories
4426 created during Windows installation (the directories were ok, just
4431 created during Windows installation (the directories were ok, just
4427 the printed message was misleading). Thanks to Chris Liechti
4432 the printed message was misleading). Thanks to Chris Liechti
4428 <cliechti-AT-gmx.net> for the heads up.
4433 <cliechti-AT-gmx.net> for the heads up.
4429
4434
4430 2003-02-21 Fernando Perez <fperez@colorado.edu>
4435 2003-02-21 Fernando Perez <fperez@colorado.edu>
4431
4436
4432 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
4437 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
4433 of ValueError exception when checking for auto-execution. This
4438 of ValueError exception when checking for auto-execution. This
4434 one is raised by things like Numeric arrays arr.flat when the
4439 one is raised by things like Numeric arrays arr.flat when the
4435 array is non-contiguous.
4440 array is non-contiguous.
4436
4441
4437 2003-01-31 Fernando Perez <fperez@colorado.edu>
4442 2003-01-31 Fernando Perez <fperez@colorado.edu>
4438
4443
4439 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
4444 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
4440 not return any value at all (even though the command would get
4445 not return any value at all (even though the command would get
4441 executed).
4446 executed).
4442 (xsys): Flush stdout right after printing the command to ensure
4447 (xsys): Flush stdout right after printing the command to ensure
4443 proper ordering of commands and command output in the total
4448 proper ordering of commands and command output in the total
4444 output.
4449 output.
4445 (SystemExec/xsys/bq): Switched the names of xsys/bq and
4450 (SystemExec/xsys/bq): Switched the names of xsys/bq and
4446 system/getoutput as defaults. The old ones are kept for
4451 system/getoutput as defaults. The old ones are kept for
4447 compatibility reasons, so no code which uses this library needs
4452 compatibility reasons, so no code which uses this library needs
4448 changing.
4453 changing.
4449
4454
4450 2003-01-27 *** Released version 0.2.14
4455 2003-01-27 *** Released version 0.2.14
4451
4456
4452 2003-01-25 Fernando Perez <fperez@colorado.edu>
4457 2003-01-25 Fernando Perez <fperez@colorado.edu>
4453
4458
4454 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
4459 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
4455 functions defined in previous edit sessions could not be re-edited
4460 functions defined in previous edit sessions could not be re-edited
4456 (because the temp files were immediately removed). Now temp files
4461 (because the temp files were immediately removed). Now temp files
4457 are removed only at IPython's exit.
4462 are removed only at IPython's exit.
4458 (Magic.magic_run): Improved @run to perform shell-like expansions
4463 (Magic.magic_run): Improved @run to perform shell-like expansions
4459 on its arguments (~users and $VARS). With this, @run becomes more
4464 on its arguments (~users and $VARS). With this, @run becomes more
4460 like a normal command-line.
4465 like a normal command-line.
4461
4466
4462 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
4467 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
4463 bugs related to embedding and cleaned up that code. A fairly
4468 bugs related to embedding and cleaned up that code. A fairly
4464 important one was the impossibility to access the global namespace
4469 important one was the impossibility to access the global namespace
4465 through the embedded IPython (only local variables were visible).
4470 through the embedded IPython (only local variables were visible).
4466
4471
4467 2003-01-14 Fernando Perez <fperez@colorado.edu>
4472 2003-01-14 Fernando Perez <fperez@colorado.edu>
4468
4473
4469 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
4474 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
4470 auto-calling to be a bit more conservative. Now it doesn't get
4475 auto-calling to be a bit more conservative. Now it doesn't get
4471 triggered if any of '!=()<>' are in the rest of the input line, to
4476 triggered if any of '!=()<>' are in the rest of the input line, to
4472 allow comparing callables. Thanks to Alex for the heads up.
4477 allow comparing callables. Thanks to Alex for the heads up.
4473
4478
4474 2003-01-07 Fernando Perez <fperez@colorado.edu>
4479 2003-01-07 Fernando Perez <fperez@colorado.edu>
4475
4480
4476 * IPython/genutils.py (page): fixed estimation of the number of
4481 * IPython/genutils.py (page): fixed estimation of the number of
4477 lines in a string to be paged to simply count newlines. This
4482 lines in a string to be paged to simply count newlines. This
4478 prevents over-guessing due to embedded escape sequences. A better
4483 prevents over-guessing due to embedded escape sequences. A better
4479 long-term solution would involve stripping out the control chars
4484 long-term solution would involve stripping out the control chars
4480 for the count, but it's potentially so expensive I just don't
4485 for the count, but it's potentially so expensive I just don't
4481 think it's worth doing.
4486 think it's worth doing.
4482
4487
4483 2002-12-19 *** Released version 0.2.14pre50
4488 2002-12-19 *** Released version 0.2.14pre50
4484
4489
4485 2002-12-19 Fernando Perez <fperez@colorado.edu>
4490 2002-12-19 Fernando Perez <fperez@colorado.edu>
4486
4491
4487 * tools/release (version): Changed release scripts to inform
4492 * tools/release (version): Changed release scripts to inform
4488 Andrea and build a NEWS file with a list of recent changes.
4493 Andrea and build a NEWS file with a list of recent changes.
4489
4494
4490 * IPython/ColorANSI.py (__all__): changed terminal detection
4495 * IPython/ColorANSI.py (__all__): changed terminal detection
4491 code. Seems to work better for xterms without breaking
4496 code. Seems to work better for xterms without breaking
4492 konsole. Will need more testing to determine if WinXP and Mac OSX
4497 konsole. Will need more testing to determine if WinXP and Mac OSX
4493 also work ok.
4498 also work ok.
4494
4499
4495 2002-12-18 *** Released version 0.2.14pre49
4500 2002-12-18 *** Released version 0.2.14pre49
4496
4501
4497 2002-12-18 Fernando Perez <fperez@colorado.edu>
4502 2002-12-18 Fernando Perez <fperez@colorado.edu>
4498
4503
4499 * Docs: added new info about Mac OSX, from Andrea.
4504 * Docs: added new info about Mac OSX, from Andrea.
4500
4505
4501 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
4506 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
4502 allow direct plotting of python strings whose format is the same
4507 allow direct plotting of python strings whose format is the same
4503 of gnuplot data files.
4508 of gnuplot data files.
4504
4509
4505 2002-12-16 Fernando Perez <fperez@colorado.edu>
4510 2002-12-16 Fernando Perez <fperez@colorado.edu>
4506
4511
4507 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
4512 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
4508 value of exit question to be acknowledged.
4513 value of exit question to be acknowledged.
4509
4514
4510 2002-12-03 Fernando Perez <fperez@colorado.edu>
4515 2002-12-03 Fernando Perez <fperez@colorado.edu>
4511
4516
4512 * IPython/ipmaker.py: removed generators, which had been added
4517 * IPython/ipmaker.py: removed generators, which had been added
4513 by mistake in an earlier debugging run. This was causing trouble
4518 by mistake in an earlier debugging run. This was causing trouble
4514 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
4519 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
4515 for pointing this out.
4520 for pointing this out.
4516
4521
4517 2002-11-17 Fernando Perez <fperez@colorado.edu>
4522 2002-11-17 Fernando Perez <fperez@colorado.edu>
4518
4523
4519 * Manual: updated the Gnuplot section.
4524 * Manual: updated the Gnuplot section.
4520
4525
4521 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
4526 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
4522 a much better split of what goes in Runtime and what goes in
4527 a much better split of what goes in Runtime and what goes in
4523 Interactive.
4528 Interactive.
4524
4529
4525 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
4530 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
4526 being imported from iplib.
4531 being imported from iplib.
4527
4532
4528 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
4533 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
4529 for command-passing. Now the global Gnuplot instance is called
4534 for command-passing. Now the global Gnuplot instance is called
4530 'gp' instead of 'g', which was really a far too fragile and
4535 'gp' instead of 'g', which was really a far too fragile and
4531 common name.
4536 common name.
4532
4537
4533 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
4538 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
4534 bounding boxes generated by Gnuplot for square plots.
4539 bounding boxes generated by Gnuplot for square plots.
4535
4540
4536 * IPython/genutils.py (popkey): new function added. I should
4541 * IPython/genutils.py (popkey): new function added. I should
4537 suggest this on c.l.py as a dict method, it seems useful.
4542 suggest this on c.l.py as a dict method, it seems useful.
4538
4543
4539 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
4544 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
4540 to transparently handle PostScript generation. MUCH better than
4545 to transparently handle PostScript generation. MUCH better than
4541 the previous plot_eps/replot_eps (which I removed now). The code
4546 the previous plot_eps/replot_eps (which I removed now). The code
4542 is also fairly clean and well documented now (including
4547 is also fairly clean and well documented now (including
4543 docstrings).
4548 docstrings).
4544
4549
4545 2002-11-13 Fernando Perez <fperez@colorado.edu>
4550 2002-11-13 Fernando Perez <fperez@colorado.edu>
4546
4551
4547 * IPython/Magic.py (Magic.magic_edit): fixed docstring
4552 * IPython/Magic.py (Magic.magic_edit): fixed docstring
4548 (inconsistent with options).
4553 (inconsistent with options).
4549
4554
4550 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
4555 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
4551 manually disabled, I don't know why. Fixed it.
4556 manually disabled, I don't know why. Fixed it.
4552 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
4557 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
4553 eps output.
4558 eps output.
4554
4559
4555 2002-11-12 Fernando Perez <fperez@colorado.edu>
4560 2002-11-12 Fernando Perez <fperez@colorado.edu>
4556
4561
4557 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
4562 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
4558 don't propagate up to caller. Fixes crash reported by François
4563 don't propagate up to caller. Fixes crash reported by François
4559 Pinard.
4564 Pinard.
4560
4565
4561 2002-11-09 Fernando Perez <fperez@colorado.edu>
4566 2002-11-09 Fernando Perez <fperez@colorado.edu>
4562
4567
4563 * IPython/ipmaker.py (make_IPython): fixed problem with writing
4568 * IPython/ipmaker.py (make_IPython): fixed problem with writing
4564 history file for new users.
4569 history file for new users.
4565 (make_IPython): fixed bug where initial install would leave the
4570 (make_IPython): fixed bug where initial install would leave the
4566 user running in the .ipython dir.
4571 user running in the .ipython dir.
4567 (make_IPython): fixed bug where config dir .ipython would be
4572 (make_IPython): fixed bug where config dir .ipython would be
4568 created regardless of the given -ipythondir option. Thanks to Cory
4573 created regardless of the given -ipythondir option. Thanks to Cory
4569 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
4574 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
4570
4575
4571 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
4576 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
4572 type confirmations. Will need to use it in all of IPython's code
4577 type confirmations. Will need to use it in all of IPython's code
4573 consistently.
4578 consistently.
4574
4579
4575 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
4580 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
4576 context to print 31 lines instead of the default 5. This will make
4581 context to print 31 lines instead of the default 5. This will make
4577 the crash reports extremely detailed in case the problem is in
4582 the crash reports extremely detailed in case the problem is in
4578 libraries I don't have access to.
4583 libraries I don't have access to.
4579
4584
4580 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
4585 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
4581 line of defense' code to still crash, but giving users fair
4586 line of defense' code to still crash, but giving users fair
4582 warning. I don't want internal errors to go unreported: if there's
4587 warning. I don't want internal errors to go unreported: if there's
4583 an internal problem, IPython should crash and generate a full
4588 an internal problem, IPython should crash and generate a full
4584 report.
4589 report.
4585
4590
4586 2002-11-08 Fernando Perez <fperez@colorado.edu>
4591 2002-11-08 Fernando Perez <fperez@colorado.edu>
4587
4592
4588 * IPython/iplib.py (InteractiveShell.interact): added code to trap
4593 * IPython/iplib.py (InteractiveShell.interact): added code to trap
4589 otherwise uncaught exceptions which can appear if people set
4594 otherwise uncaught exceptions which can appear if people set
4590 sys.stdout to something badly broken. Thanks to a crash report
4595 sys.stdout to something badly broken. Thanks to a crash report
4591 from henni-AT-mail.brainbot.com.
4596 from henni-AT-mail.brainbot.com.
4592
4597
4593 2002-11-04 Fernando Perez <fperez@colorado.edu>
4598 2002-11-04 Fernando Perez <fperez@colorado.edu>
4594
4599
4595 * IPython/iplib.py (InteractiveShell.interact): added
4600 * IPython/iplib.py (InteractiveShell.interact): added
4596 __IPYTHON__active to the builtins. It's a flag which goes on when
4601 __IPYTHON__active to the builtins. It's a flag which goes on when
4597 the interaction starts and goes off again when it stops. This
4602 the interaction starts and goes off again when it stops. This
4598 allows embedding code to detect being inside IPython. Before this
4603 allows embedding code to detect being inside IPython. Before this
4599 was done via __IPYTHON__, but that only shows that an IPython
4604 was done via __IPYTHON__, but that only shows that an IPython
4600 instance has been created.
4605 instance has been created.
4601
4606
4602 * IPython/Magic.py (Magic.magic_env): I realized that in a
4607 * IPython/Magic.py (Magic.magic_env): I realized that in a
4603 UserDict, instance.data holds the data as a normal dict. So I
4608 UserDict, instance.data holds the data as a normal dict. So I
4604 modified @env to return os.environ.data instead of rebuilding a
4609 modified @env to return os.environ.data instead of rebuilding a
4605 dict by hand.
4610 dict by hand.
4606
4611
4607 2002-11-02 Fernando Perez <fperez@colorado.edu>
4612 2002-11-02 Fernando Perez <fperez@colorado.edu>
4608
4613
4609 * IPython/genutils.py (warn): changed so that level 1 prints no
4614 * IPython/genutils.py (warn): changed so that level 1 prints no
4610 header. Level 2 is now the default (with 'WARNING' header, as
4615 header. Level 2 is now the default (with 'WARNING' header, as
4611 before). I think I tracked all places where changes were needed in
4616 before). I think I tracked all places where changes were needed in
4612 IPython, but outside code using the old level numbering may have
4617 IPython, but outside code using the old level numbering may have
4613 broken.
4618 broken.
4614
4619
4615 * IPython/iplib.py (InteractiveShell.runcode): added this to
4620 * IPython/iplib.py (InteractiveShell.runcode): added this to
4616 handle the tracebacks in SystemExit traps correctly. The previous
4621 handle the tracebacks in SystemExit traps correctly. The previous
4617 code (through interact) was printing more of the stack than
4622 code (through interact) was printing more of the stack than
4618 necessary, showing IPython internal code to the user.
4623 necessary, showing IPython internal code to the user.
4619
4624
4620 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
4625 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
4621 default. Now that the default at the confirmation prompt is yes,
4626 default. Now that the default at the confirmation prompt is yes,
4622 it's not so intrusive. François' argument that ipython sessions
4627 it's not so intrusive. François' argument that ipython sessions
4623 tend to be complex enough not to lose them from an accidental C-d,
4628 tend to be complex enough not to lose them from an accidental C-d,
4624 is a valid one.
4629 is a valid one.
4625
4630
4626 * IPython/iplib.py (InteractiveShell.interact): added a
4631 * IPython/iplib.py (InteractiveShell.interact): added a
4627 showtraceback() call to the SystemExit trap, and modified the exit
4632 showtraceback() call to the SystemExit trap, and modified the exit
4628 confirmation to have yes as the default.
4633 confirmation to have yes as the default.
4629
4634
4630 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
4635 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
4631 this file. It's been gone from the code for a long time, this was
4636 this file. It's been gone from the code for a long time, this was
4632 simply leftover junk.
4637 simply leftover junk.
4633
4638
4634 2002-11-01 Fernando Perez <fperez@colorado.edu>
4639 2002-11-01 Fernando Perez <fperez@colorado.edu>
4635
4640
4636 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
4641 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
4637 added. If set, IPython now traps EOF and asks for
4642 added. If set, IPython now traps EOF and asks for
4638 confirmation. After a request by François Pinard.
4643 confirmation. After a request by François Pinard.
4639
4644
4640 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
4645 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
4641 of @abort, and with a new (better) mechanism for handling the
4646 of @abort, and with a new (better) mechanism for handling the
4642 exceptions.
4647 exceptions.
4643
4648
4644 2002-10-27 Fernando Perez <fperez@colorado.edu>
4649 2002-10-27 Fernando Perez <fperez@colorado.edu>
4645
4650
4646 * IPython/usage.py (__doc__): updated the --help information and
4651 * IPython/usage.py (__doc__): updated the --help information and
4647 the ipythonrc file to indicate that -log generates
4652 the ipythonrc file to indicate that -log generates
4648 ./ipython.log. Also fixed the corresponding info in @logstart.
4653 ./ipython.log. Also fixed the corresponding info in @logstart.
4649 This and several other fixes in the manuals thanks to reports by
4654 This and several other fixes in the manuals thanks to reports by
4650 François Pinard <pinard-AT-iro.umontreal.ca>.
4655 François Pinard <pinard-AT-iro.umontreal.ca>.
4651
4656
4652 * IPython/Logger.py (Logger.switch_log): Fixed error message to
4657 * IPython/Logger.py (Logger.switch_log): Fixed error message to
4653 refer to @logstart (instead of @log, which doesn't exist).
4658 refer to @logstart (instead of @log, which doesn't exist).
4654
4659
4655 * IPython/iplib.py (InteractiveShell._prefilter): fixed
4660 * IPython/iplib.py (InteractiveShell._prefilter): fixed
4656 AttributeError crash. Thanks to Christopher Armstrong
4661 AttributeError crash. Thanks to Christopher Armstrong
4657 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
4662 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
4658 introduced recently (in 0.2.14pre37) with the fix to the eval
4663 introduced recently (in 0.2.14pre37) with the fix to the eval
4659 problem mentioned below.
4664 problem mentioned below.
4660
4665
4661 2002-10-17 Fernando Perez <fperez@colorado.edu>
4666 2002-10-17 Fernando Perez <fperez@colorado.edu>
4662
4667
4663 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
4668 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
4664 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
4669 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
4665
4670
4666 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
4671 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
4667 this function to fix a problem reported by Alex Schmolck. He saw
4672 this function to fix a problem reported by Alex Schmolck. He saw
4668 it with list comprehensions and generators, which were getting
4673 it with list comprehensions and generators, which were getting
4669 called twice. The real problem was an 'eval' call in testing for
4674 called twice. The real problem was an 'eval' call in testing for
4670 automagic which was evaluating the input line silently.
4675 automagic which was evaluating the input line silently.
4671
4676
4672 This is a potentially very nasty bug, if the input has side
4677 This is a potentially very nasty bug, if the input has side
4673 effects which must not be repeated. The code is much cleaner now,
4678 effects which must not be repeated. The code is much cleaner now,
4674 without any blanket 'except' left and with a regexp test for
4679 without any blanket 'except' left and with a regexp test for
4675 actual function names.
4680 actual function names.
4676
4681
4677 But an eval remains, which I'm not fully comfortable with. I just
4682 But an eval remains, which I'm not fully comfortable with. I just
4678 don't know how to find out if an expression could be a callable in
4683 don't know how to find out if an expression could be a callable in
4679 the user's namespace without doing an eval on the string. However
4684 the user's namespace without doing an eval on the string. However
4680 that string is now much more strictly checked so that no code
4685 that string is now much more strictly checked so that no code
4681 slips by, so the eval should only happen for things that can
4686 slips by, so the eval should only happen for things that can
4682 really be only function/method names.
4687 really be only function/method names.
4683
4688
4684 2002-10-15 Fernando Perez <fperez@colorado.edu>
4689 2002-10-15 Fernando Perez <fperez@colorado.edu>
4685
4690
4686 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
4691 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
4687 OSX information to main manual, removed README_Mac_OSX file from
4692 OSX information to main manual, removed README_Mac_OSX file from
4688 distribution. Also updated credits for recent additions.
4693 distribution. Also updated credits for recent additions.
4689
4694
4690 2002-10-10 Fernando Perez <fperez@colorado.edu>
4695 2002-10-10 Fernando Perez <fperez@colorado.edu>
4691
4696
4692 * README_Mac_OSX: Added a README for Mac OSX users for fixing
4697 * README_Mac_OSX: Added a README for Mac OSX users for fixing
4693 terminal-related issues. Many thanks to Andrea Riciputi
4698 terminal-related issues. Many thanks to Andrea Riciputi
4694 <andrea.riciputi-AT-libero.it> for writing it.
4699 <andrea.riciputi-AT-libero.it> for writing it.
4695
4700
4696 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
4701 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
4697 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4702 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4698
4703
4699 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
4704 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
4700 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
4705 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
4701 <syver-en-AT-online.no> who both submitted patches for this problem.
4706 <syver-en-AT-online.no> who both submitted patches for this problem.
4702
4707
4703 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
4708 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
4704 global embedding to make sure that things don't overwrite user
4709 global embedding to make sure that things don't overwrite user
4705 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
4710 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
4706
4711
4707 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
4712 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
4708 compatibility. Thanks to Hayden Callow
4713 compatibility. Thanks to Hayden Callow
4709 <h.callow-AT-elec.canterbury.ac.nz>
4714 <h.callow-AT-elec.canterbury.ac.nz>
4710
4715
4711 2002-10-04 Fernando Perez <fperez@colorado.edu>
4716 2002-10-04 Fernando Perez <fperez@colorado.edu>
4712
4717
4713 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
4718 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
4714 Gnuplot.File objects.
4719 Gnuplot.File objects.
4715
4720
4716 2002-07-23 Fernando Perez <fperez@colorado.edu>
4721 2002-07-23 Fernando Perez <fperez@colorado.edu>
4717
4722
4718 * IPython/genutils.py (timing): Added timings() and timing() for
4723 * IPython/genutils.py (timing): Added timings() and timing() for
4719 quick access to the most commonly needed data, the execution
4724 quick access to the most commonly needed data, the execution
4720 times. Old timing() renamed to timings_out().
4725 times. Old timing() renamed to timings_out().
4721
4726
4722 2002-07-18 Fernando Perez <fperez@colorado.edu>
4727 2002-07-18 Fernando Perez <fperez@colorado.edu>
4723
4728
4724 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
4729 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
4725 bug with nested instances disrupting the parent's tab completion.
4730 bug with nested instances disrupting the parent's tab completion.
4726
4731
4727 * IPython/iplib.py (all_completions): Added Alex Schmolck's
4732 * IPython/iplib.py (all_completions): Added Alex Schmolck's
4728 all_completions code to begin the emacs integration.
4733 all_completions code to begin the emacs integration.
4729
4734
4730 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
4735 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
4731 argument to allow titling individual arrays when plotting.
4736 argument to allow titling individual arrays when plotting.
4732
4737
4733 2002-07-15 Fernando Perez <fperez@colorado.edu>
4738 2002-07-15 Fernando Perez <fperez@colorado.edu>
4734
4739
4735 * setup.py (make_shortcut): changed to retrieve the value of
4740 * setup.py (make_shortcut): changed to retrieve the value of
4736 'Program Files' directory from the registry (this value changes in
4741 'Program Files' directory from the registry (this value changes in
4737 non-english versions of Windows). Thanks to Thomas Fanslau
4742 non-english versions of Windows). Thanks to Thomas Fanslau
4738 <tfanslau-AT-gmx.de> for the report.
4743 <tfanslau-AT-gmx.de> for the report.
4739
4744
4740 2002-07-10 Fernando Perez <fperez@colorado.edu>
4745 2002-07-10 Fernando Perez <fperez@colorado.edu>
4741
4746
4742 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
4747 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
4743 a bug in pdb, which crashes if a line with only whitespace is
4748 a bug in pdb, which crashes if a line with only whitespace is
4744 entered. Bug report submitted to sourceforge.
4749 entered. Bug report submitted to sourceforge.
4745
4750
4746 2002-07-09 Fernando Perez <fperez@colorado.edu>
4751 2002-07-09 Fernando Perez <fperez@colorado.edu>
4747
4752
4748 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
4753 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
4749 reporting exceptions (it's a bug in inspect.py, I just set a
4754 reporting exceptions (it's a bug in inspect.py, I just set a
4750 workaround).
4755 workaround).
4751
4756
4752 2002-07-08 Fernando Perez <fperez@colorado.edu>
4757 2002-07-08 Fernando Perez <fperez@colorado.edu>
4753
4758
4754 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
4759 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
4755 __IPYTHON__ in __builtins__ to show up in user_ns.
4760 __IPYTHON__ in __builtins__ to show up in user_ns.
4756
4761
4757 2002-07-03 Fernando Perez <fperez@colorado.edu>
4762 2002-07-03 Fernando Perez <fperez@colorado.edu>
4758
4763
4759 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
4764 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
4760 name from @gp_set_instance to @gp_set_default.
4765 name from @gp_set_instance to @gp_set_default.
4761
4766
4762 * IPython/ipmaker.py (make_IPython): default editor value set to
4767 * IPython/ipmaker.py (make_IPython): default editor value set to
4763 '0' (a string), to match the rc file. Otherwise will crash when
4768 '0' (a string), to match the rc file. Otherwise will crash when
4764 .strip() is called on it.
4769 .strip() is called on it.
4765
4770
4766
4771
4767 2002-06-28 Fernando Perez <fperez@colorado.edu>
4772 2002-06-28 Fernando Perez <fperez@colorado.edu>
4768
4773
4769 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
4774 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
4770 of files in current directory when a file is executed via
4775 of files in current directory when a file is executed via
4771 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
4776 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
4772
4777
4773 * setup.py (manfiles): fix for rpm builds, submitted by RA
4778 * setup.py (manfiles): fix for rpm builds, submitted by RA
4774 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
4779 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
4775
4780
4776 * IPython/ipmaker.py (make_IPython): fixed lookup of default
4781 * IPython/ipmaker.py (make_IPython): fixed lookup of default
4777 editor when set to '0'. Problem was, '0' evaluates to True (it's a
4782 editor when set to '0'. Problem was, '0' evaluates to True (it's a
4778 string!). A. Schmolck caught this one.
4783 string!). A. Schmolck caught this one.
4779
4784
4780 2002-06-27 Fernando Perez <fperez@colorado.edu>
4785 2002-06-27 Fernando Perez <fperez@colorado.edu>
4781
4786
4782 * IPython/ipmaker.py (make_IPython): fixed bug when running user
4787 * IPython/ipmaker.py (make_IPython): fixed bug when running user
4783 defined files at the cmd line. __name__ wasn't being set to
4788 defined files at the cmd line. __name__ wasn't being set to
4784 __main__.
4789 __main__.
4785
4790
4786 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
4791 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
4787 regular lists and tuples besides Numeric arrays.
4792 regular lists and tuples besides Numeric arrays.
4788
4793
4789 * IPython/Prompts.py (CachedOutput.__call__): Added output
4794 * IPython/Prompts.py (CachedOutput.__call__): Added output
4790 supression for input ending with ';'. Similar to Mathematica and
4795 supression for input ending with ';'. Similar to Mathematica and
4791 Matlab. The _* vars and Out[] list are still updated, just like
4796 Matlab. The _* vars and Out[] list are still updated, just like
4792 Mathematica behaves.
4797 Mathematica behaves.
4793
4798
4794 2002-06-25 Fernando Perez <fperez@colorado.edu>
4799 2002-06-25 Fernando Perez <fperez@colorado.edu>
4795
4800
4796 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
4801 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
4797 .ini extensions for profiels under Windows.
4802 .ini extensions for profiels under Windows.
4798
4803
4799 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
4804 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
4800 string form. Fix contributed by Alexander Schmolck
4805 string form. Fix contributed by Alexander Schmolck
4801 <a.schmolck-AT-gmx.net>
4806 <a.schmolck-AT-gmx.net>
4802
4807
4803 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
4808 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
4804 pre-configured Gnuplot instance.
4809 pre-configured Gnuplot instance.
4805
4810
4806 2002-06-21 Fernando Perez <fperez@colorado.edu>
4811 2002-06-21 Fernando Perez <fperez@colorado.edu>
4807
4812
4808 * IPython/numutils.py (exp_safe): new function, works around the
4813 * IPython/numutils.py (exp_safe): new function, works around the
4809 underflow problems in Numeric.
4814 underflow problems in Numeric.
4810 (log2): New fn. Safe log in base 2: returns exact integer answer
4815 (log2): New fn. Safe log in base 2: returns exact integer answer
4811 for exact integer powers of 2.
4816 for exact integer powers of 2.
4812
4817
4813 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
4818 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
4814 properly.
4819 properly.
4815
4820
4816 2002-06-20 Fernando Perez <fperez@colorado.edu>
4821 2002-06-20 Fernando Perez <fperez@colorado.edu>
4817
4822
4818 * IPython/genutils.py (timing): new function like
4823 * IPython/genutils.py (timing): new function like
4819 Mathematica's. Similar to time_test, but returns more info.
4824 Mathematica's. Similar to time_test, but returns more info.
4820
4825
4821 2002-06-18 Fernando Perez <fperez@colorado.edu>
4826 2002-06-18 Fernando Perez <fperez@colorado.edu>
4822
4827
4823 * IPython/Magic.py (Magic.magic_save): modified @save and @r
4828 * IPython/Magic.py (Magic.magic_save): modified @save and @r
4824 according to Mike Heeter's suggestions.
4829 according to Mike Heeter's suggestions.
4825
4830
4826 2002-06-16 Fernando Perez <fperez@colorado.edu>
4831 2002-06-16 Fernando Perez <fperez@colorado.edu>
4827
4832
4828 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
4833 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
4829 system. GnuplotMagic is gone as a user-directory option. New files
4834 system. GnuplotMagic is gone as a user-directory option. New files
4830 make it easier to use all the gnuplot stuff both from external
4835 make it easier to use all the gnuplot stuff both from external
4831 programs as well as from IPython. Had to rewrite part of
4836 programs as well as from IPython. Had to rewrite part of
4832 hardcopy() b/c of a strange bug: often the ps files simply don't
4837 hardcopy() b/c of a strange bug: often the ps files simply don't
4833 get created, and require a repeat of the command (often several
4838 get created, and require a repeat of the command (often several
4834 times).
4839 times).
4835
4840
4836 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
4841 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
4837 resolve output channel at call time, so that if sys.stderr has
4842 resolve output channel at call time, so that if sys.stderr has
4838 been redirected by user this gets honored.
4843 been redirected by user this gets honored.
4839
4844
4840 2002-06-13 Fernando Perez <fperez@colorado.edu>
4845 2002-06-13 Fernando Perez <fperez@colorado.edu>
4841
4846
4842 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
4847 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
4843 IPShell. Kept a copy with the old names to avoid breaking people's
4848 IPShell. Kept a copy with the old names to avoid breaking people's
4844 embedded code.
4849 embedded code.
4845
4850
4846 * IPython/ipython: simplified it to the bare minimum after
4851 * IPython/ipython: simplified it to the bare minimum after
4847 Holger's suggestions. Added info about how to use it in
4852 Holger's suggestions. Added info about how to use it in
4848 PYTHONSTARTUP.
4853 PYTHONSTARTUP.
4849
4854
4850 * IPython/Shell.py (IPythonShell): changed the options passing
4855 * IPython/Shell.py (IPythonShell): changed the options passing
4851 from a string with funky %s replacements to a straight list. Maybe
4856 from a string with funky %s replacements to a straight list. Maybe
4852 a bit more typing, but it follows sys.argv conventions, so there's
4857 a bit more typing, but it follows sys.argv conventions, so there's
4853 less special-casing to remember.
4858 less special-casing to remember.
4854
4859
4855 2002-06-12 Fernando Perez <fperez@colorado.edu>
4860 2002-06-12 Fernando Perez <fperez@colorado.edu>
4856
4861
4857 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
4862 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
4858 command. Thanks to a suggestion by Mike Heeter.
4863 command. Thanks to a suggestion by Mike Heeter.
4859 (Magic.magic_pfile): added behavior to look at filenames if given
4864 (Magic.magic_pfile): added behavior to look at filenames if given
4860 arg is not a defined object.
4865 arg is not a defined object.
4861 (Magic.magic_save): New @save function to save code snippets. Also
4866 (Magic.magic_save): New @save function to save code snippets. Also
4862 a Mike Heeter idea.
4867 a Mike Heeter idea.
4863
4868
4864 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
4869 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
4865 plot() and replot(). Much more convenient now, especially for
4870 plot() and replot(). Much more convenient now, especially for
4866 interactive use.
4871 interactive use.
4867
4872
4868 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
4873 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
4869 filenames.
4874 filenames.
4870
4875
4871 2002-06-02 Fernando Perez <fperez@colorado.edu>
4876 2002-06-02 Fernando Perez <fperez@colorado.edu>
4872
4877
4873 * IPython/Struct.py (Struct.__init__): modified to admit
4878 * IPython/Struct.py (Struct.__init__): modified to admit
4874 initialization via another struct.
4879 initialization via another struct.
4875
4880
4876 * IPython/genutils.py (SystemExec.__init__): New stateful
4881 * IPython/genutils.py (SystemExec.__init__): New stateful
4877 interface to xsys and bq. Useful for writing system scripts.
4882 interface to xsys and bq. Useful for writing system scripts.
4878
4883
4879 2002-05-30 Fernando Perez <fperez@colorado.edu>
4884 2002-05-30 Fernando Perez <fperez@colorado.edu>
4880
4885
4881 * MANIFEST.in: Changed docfile selection to exclude all the lyx
4886 * MANIFEST.in: Changed docfile selection to exclude all the lyx
4882 documents. This will make the user download smaller (it's getting
4887 documents. This will make the user download smaller (it's getting
4883 too big).
4888 too big).
4884
4889
4885 2002-05-29 Fernando Perez <fperez@colorado.edu>
4890 2002-05-29 Fernando Perez <fperez@colorado.edu>
4886
4891
4887 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
4892 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
4888 fix problems with shelve and pickle. Seems to work, but I don't
4893 fix problems with shelve and pickle. Seems to work, but I don't
4889 know if corner cases break it. Thanks to Mike Heeter
4894 know if corner cases break it. Thanks to Mike Heeter
4890 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
4895 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
4891
4896
4892 2002-05-24 Fernando Perez <fperez@colorado.edu>
4897 2002-05-24 Fernando Perez <fperez@colorado.edu>
4893
4898
4894 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
4899 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
4895 macros having broken.
4900 macros having broken.
4896
4901
4897 2002-05-21 Fernando Perez <fperez@colorado.edu>
4902 2002-05-21 Fernando Perez <fperez@colorado.edu>
4898
4903
4899 * IPython/Magic.py (Magic.magic_logstart): fixed recently
4904 * IPython/Magic.py (Magic.magic_logstart): fixed recently
4900 introduced logging bug: all history before logging started was
4905 introduced logging bug: all history before logging started was
4901 being written one character per line! This came from the redesign
4906 being written one character per line! This came from the redesign
4902 of the input history as a special list which slices to strings,
4907 of the input history as a special list which slices to strings,
4903 not to lists.
4908 not to lists.
4904
4909
4905 2002-05-20 Fernando Perez <fperez@colorado.edu>
4910 2002-05-20 Fernando Perez <fperez@colorado.edu>
4906
4911
4907 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4912 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4908 be an attribute of all classes in this module. The design of these
4913 be an attribute of all classes in this module. The design of these
4909 classes needs some serious overhauling.
4914 classes needs some serious overhauling.
4910
4915
4911 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4916 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4912 which was ignoring '_' in option names.
4917 which was ignoring '_' in option names.
4913
4918
4914 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4919 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4915 'Verbose_novars' to 'Context' and made it the new default. It's a
4920 'Verbose_novars' to 'Context' and made it the new default. It's a
4916 bit more readable and also safer than verbose.
4921 bit more readable and also safer than verbose.
4917
4922
4918 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4923 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4919 triple-quoted strings.
4924 triple-quoted strings.
4920
4925
4921 * IPython/OInspect.py (__all__): new module exposing the object
4926 * IPython/OInspect.py (__all__): new module exposing the object
4922 introspection facilities. Now the corresponding magics are dummy
4927 introspection facilities. Now the corresponding magics are dummy
4923 wrappers around this. Having this module will make it much easier
4928 wrappers around this. Having this module will make it much easier
4924 to put these functions into our modified pdb.
4929 to put these functions into our modified pdb.
4925 This new object inspector system uses the new colorizing module,
4930 This new object inspector system uses the new colorizing module,
4926 so source code and other things are nicely syntax highlighted.
4931 so source code and other things are nicely syntax highlighted.
4927
4932
4928 2002-05-18 Fernando Perez <fperez@colorado.edu>
4933 2002-05-18 Fernando Perez <fperez@colorado.edu>
4929
4934
4930 * IPython/ColorANSI.py: Split the coloring tools into a separate
4935 * IPython/ColorANSI.py: Split the coloring tools into a separate
4931 module so I can use them in other code easier (they were part of
4936 module so I can use them in other code easier (they were part of
4932 ultraTB).
4937 ultraTB).
4933
4938
4934 2002-05-17 Fernando Perez <fperez@colorado.edu>
4939 2002-05-17 Fernando Perez <fperez@colorado.edu>
4935
4940
4936 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4941 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4937 fixed it to set the global 'g' also to the called instance, as
4942 fixed it to set the global 'g' also to the called instance, as
4938 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4943 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4939 user's 'g' variables).
4944 user's 'g' variables).
4940
4945
4941 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4946 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4942 global variables (aliases to _ih,_oh) so that users which expect
4947 global variables (aliases to _ih,_oh) so that users which expect
4943 In[5] or Out[7] to work aren't unpleasantly surprised.
4948 In[5] or Out[7] to work aren't unpleasantly surprised.
4944 (InputList.__getslice__): new class to allow executing slices of
4949 (InputList.__getslice__): new class to allow executing slices of
4945 input history directly. Very simple class, complements the use of
4950 input history directly. Very simple class, complements the use of
4946 macros.
4951 macros.
4947
4952
4948 2002-05-16 Fernando Perez <fperez@colorado.edu>
4953 2002-05-16 Fernando Perez <fperez@colorado.edu>
4949
4954
4950 * setup.py (docdirbase): make doc directory be just doc/IPython
4955 * setup.py (docdirbase): make doc directory be just doc/IPython
4951 without version numbers, it will reduce clutter for users.
4956 without version numbers, it will reduce clutter for users.
4952
4957
4953 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4958 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4954 execfile call to prevent possible memory leak. See for details:
4959 execfile call to prevent possible memory leak. See for details:
4955 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4960 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4956
4961
4957 2002-05-15 Fernando Perez <fperez@colorado.edu>
4962 2002-05-15 Fernando Perez <fperez@colorado.edu>
4958
4963
4959 * IPython/Magic.py (Magic.magic_psource): made the object
4964 * IPython/Magic.py (Magic.magic_psource): made the object
4960 introspection names be more standard: pdoc, pdef, pfile and
4965 introspection names be more standard: pdoc, pdef, pfile and
4961 psource. They all print/page their output, and it makes
4966 psource. They all print/page their output, and it makes
4962 remembering them easier. Kept old names for compatibility as
4967 remembering them easier. Kept old names for compatibility as
4963 aliases.
4968 aliases.
4964
4969
4965 2002-05-14 Fernando Perez <fperez@colorado.edu>
4970 2002-05-14 Fernando Perez <fperez@colorado.edu>
4966
4971
4967 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4972 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4968 what the mouse problem was. The trick is to use gnuplot with temp
4973 what the mouse problem was. The trick is to use gnuplot with temp
4969 files and NOT with pipes (for data communication), because having
4974 files and NOT with pipes (for data communication), because having
4970 both pipes and the mouse on is bad news.
4975 both pipes and the mouse on is bad news.
4971
4976
4972 2002-05-13 Fernando Perez <fperez@colorado.edu>
4977 2002-05-13 Fernando Perez <fperez@colorado.edu>
4973
4978
4974 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4979 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4975 bug. Information would be reported about builtins even when
4980 bug. Information would be reported about builtins even when
4976 user-defined functions overrode them.
4981 user-defined functions overrode them.
4977
4982
4978 2002-05-11 Fernando Perez <fperez@colorado.edu>
4983 2002-05-11 Fernando Perez <fperez@colorado.edu>
4979
4984
4980 * IPython/__init__.py (__all__): removed FlexCompleter from
4985 * IPython/__init__.py (__all__): removed FlexCompleter from
4981 __all__ so that things don't fail in platforms without readline.
4986 __all__ so that things don't fail in platforms without readline.
4982
4987
4983 2002-05-10 Fernando Perez <fperez@colorado.edu>
4988 2002-05-10 Fernando Perez <fperez@colorado.edu>
4984
4989
4985 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4990 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4986 it requires Numeric, effectively making Numeric a dependency for
4991 it requires Numeric, effectively making Numeric a dependency for
4987 IPython.
4992 IPython.
4988
4993
4989 * Released 0.2.13
4994 * Released 0.2.13
4990
4995
4991 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4996 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4992 profiler interface. Now all the major options from the profiler
4997 profiler interface. Now all the major options from the profiler
4993 module are directly supported in IPython, both for single
4998 module are directly supported in IPython, both for single
4994 expressions (@prun) and for full programs (@run -p).
4999 expressions (@prun) and for full programs (@run -p).
4995
5000
4996 2002-05-09 Fernando Perez <fperez@colorado.edu>
5001 2002-05-09 Fernando Perez <fperez@colorado.edu>
4997
5002
4998 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
5003 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4999 magic properly formatted for screen.
5004 magic properly formatted for screen.
5000
5005
5001 * setup.py (make_shortcut): Changed things to put pdf version in
5006 * setup.py (make_shortcut): Changed things to put pdf version in
5002 doc/ instead of doc/manual (had to change lyxport a bit).
5007 doc/ instead of doc/manual (had to change lyxport a bit).
5003
5008
5004 * IPython/Magic.py (Profile.string_stats): made profile runs go
5009 * IPython/Magic.py (Profile.string_stats): made profile runs go
5005 through pager (they are long and a pager allows searching, saving,
5010 through pager (they are long and a pager allows searching, saving,
5006 etc.)
5011 etc.)
5007
5012
5008 2002-05-08 Fernando Perez <fperez@colorado.edu>
5013 2002-05-08 Fernando Perez <fperez@colorado.edu>
5009
5014
5010 * Released 0.2.12
5015 * Released 0.2.12
5011
5016
5012 2002-05-06 Fernando Perez <fperez@colorado.edu>
5017 2002-05-06 Fernando Perez <fperez@colorado.edu>
5013
5018
5014 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
5019 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
5015 introduced); 'hist n1 n2' was broken.
5020 introduced); 'hist n1 n2' was broken.
5016 (Magic.magic_pdb): added optional on/off arguments to @pdb
5021 (Magic.magic_pdb): added optional on/off arguments to @pdb
5017 (Magic.magic_run): added option -i to @run, which executes code in
5022 (Magic.magic_run): added option -i to @run, which executes code in
5018 the IPython namespace instead of a clean one. Also added @irun as
5023 the IPython namespace instead of a clean one. Also added @irun as
5019 an alias to @run -i.
5024 an alias to @run -i.
5020
5025
5021 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
5026 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
5022 fixed (it didn't really do anything, the namespaces were wrong).
5027 fixed (it didn't really do anything, the namespaces were wrong).
5023
5028
5024 * IPython/Debugger.py (__init__): Added workaround for python 2.1
5029 * IPython/Debugger.py (__init__): Added workaround for python 2.1
5025
5030
5026 * IPython/__init__.py (__all__): Fixed package namespace, now
5031 * IPython/__init__.py (__all__): Fixed package namespace, now
5027 'import IPython' does give access to IPython.<all> as
5032 'import IPython' does give access to IPython.<all> as
5028 expected. Also renamed __release__ to Release.
5033 expected. Also renamed __release__ to Release.
5029
5034
5030 * IPython/Debugger.py (__license__): created new Pdb class which
5035 * IPython/Debugger.py (__license__): created new Pdb class which
5031 functions like a drop-in for the normal pdb.Pdb but does NOT
5036 functions like a drop-in for the normal pdb.Pdb but does NOT
5032 import readline by default. This way it doesn't muck up IPython's
5037 import readline by default. This way it doesn't muck up IPython's
5033 readline handling, and now tab-completion finally works in the
5038 readline handling, and now tab-completion finally works in the
5034 debugger -- sort of. It completes things globally visible, but the
5039 debugger -- sort of. It completes things globally visible, but the
5035 completer doesn't track the stack as pdb walks it. That's a bit
5040 completer doesn't track the stack as pdb walks it. That's a bit
5036 tricky, and I'll have to implement it later.
5041 tricky, and I'll have to implement it later.
5037
5042
5038 2002-05-05 Fernando Perez <fperez@colorado.edu>
5043 2002-05-05 Fernando Perez <fperez@colorado.edu>
5039
5044
5040 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
5045 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
5041 magic docstrings when printed via ? (explicit \'s were being
5046 magic docstrings when printed via ? (explicit \'s were being
5042 printed).
5047 printed).
5043
5048
5044 * IPython/ipmaker.py (make_IPython): fixed namespace
5049 * IPython/ipmaker.py (make_IPython): fixed namespace
5045 identification bug. Now variables loaded via logs or command-line
5050 identification bug. Now variables loaded via logs or command-line
5046 files are recognized in the interactive namespace by @who.
5051 files are recognized in the interactive namespace by @who.
5047
5052
5048 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
5053 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
5049 log replay system stemming from the string form of Structs.
5054 log replay system stemming from the string form of Structs.
5050
5055
5051 * IPython/Magic.py (Macro.__init__): improved macros to properly
5056 * IPython/Magic.py (Macro.__init__): improved macros to properly
5052 handle magic commands in them.
5057 handle magic commands in them.
5053 (Magic.magic_logstart): usernames are now expanded so 'logstart
5058 (Magic.magic_logstart): usernames are now expanded so 'logstart
5054 ~/mylog' now works.
5059 ~/mylog' now works.
5055
5060
5056 * IPython/iplib.py (complete): fixed bug where paths starting with
5061 * IPython/iplib.py (complete): fixed bug where paths starting with
5057 '/' would be completed as magic names.
5062 '/' would be completed as magic names.
5058
5063
5059 2002-05-04 Fernando Perez <fperez@colorado.edu>
5064 2002-05-04 Fernando Perez <fperez@colorado.edu>
5060
5065
5061 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
5066 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
5062 allow running full programs under the profiler's control.
5067 allow running full programs under the profiler's control.
5063
5068
5064 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
5069 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
5065 mode to report exceptions verbosely but without formatting
5070 mode to report exceptions verbosely but without formatting
5066 variables. This addresses the issue of ipython 'freezing' (it's
5071 variables. This addresses the issue of ipython 'freezing' (it's
5067 not frozen, but caught in an expensive formatting loop) when huge
5072 not frozen, but caught in an expensive formatting loop) when huge
5068 variables are in the context of an exception.
5073 variables are in the context of an exception.
5069 (VerboseTB.text): Added '--->' markers at line where exception was
5074 (VerboseTB.text): Added '--->' markers at line where exception was
5070 triggered. Much clearer to read, especially in NoColor modes.
5075 triggered. Much clearer to read, especially in NoColor modes.
5071
5076
5072 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
5077 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
5073 implemented in reverse when changing to the new parse_options().
5078 implemented in reverse when changing to the new parse_options().
5074
5079
5075 2002-05-03 Fernando Perez <fperez@colorado.edu>
5080 2002-05-03 Fernando Perez <fperez@colorado.edu>
5076
5081
5077 * IPython/Magic.py (Magic.parse_options): new function so that
5082 * IPython/Magic.py (Magic.parse_options): new function so that
5078 magics can parse options easier.
5083 magics can parse options easier.
5079 (Magic.magic_prun): new function similar to profile.run(),
5084 (Magic.magic_prun): new function similar to profile.run(),
5080 suggested by Chris Hart.
5085 suggested by Chris Hart.
5081 (Magic.magic_cd): fixed behavior so that it only changes if
5086 (Magic.magic_cd): fixed behavior so that it only changes if
5082 directory actually is in history.
5087 directory actually is in history.
5083
5088
5084 * IPython/usage.py (__doc__): added information about potential
5089 * IPython/usage.py (__doc__): added information about potential
5085 slowness of Verbose exception mode when there are huge data
5090 slowness of Verbose exception mode when there are huge data
5086 structures to be formatted (thanks to Archie Paulson).
5091 structures to be formatted (thanks to Archie Paulson).
5087
5092
5088 * IPython/ipmaker.py (make_IPython): Changed default logging
5093 * IPython/ipmaker.py (make_IPython): Changed default logging
5089 (when simply called with -log) to use curr_dir/ipython.log in
5094 (when simply called with -log) to use curr_dir/ipython.log in
5090 rotate mode. Fixed crash which was occuring with -log before
5095 rotate mode. Fixed crash which was occuring with -log before
5091 (thanks to Jim Boyle).
5096 (thanks to Jim Boyle).
5092
5097
5093 2002-05-01 Fernando Perez <fperez@colorado.edu>
5098 2002-05-01 Fernando Perez <fperez@colorado.edu>
5094
5099
5095 * Released 0.2.11 for these fixes (mainly the ultraTB one which
5100 * Released 0.2.11 for these fixes (mainly the ultraTB one which
5096 was nasty -- though somewhat of a corner case).
5101 was nasty -- though somewhat of a corner case).
5097
5102
5098 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
5103 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
5099 text (was a bug).
5104 text (was a bug).
5100
5105
5101 2002-04-30 Fernando Perez <fperez@colorado.edu>
5106 2002-04-30 Fernando Perez <fperez@colorado.edu>
5102
5107
5103 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
5108 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
5104 a print after ^D or ^C from the user so that the In[] prompt
5109 a print after ^D or ^C from the user so that the In[] prompt
5105 doesn't over-run the gnuplot one.
5110 doesn't over-run the gnuplot one.
5106
5111
5107 2002-04-29 Fernando Perez <fperez@colorado.edu>
5112 2002-04-29 Fernando Perez <fperez@colorado.edu>
5108
5113
5109 * Released 0.2.10
5114 * Released 0.2.10
5110
5115
5111 * IPython/__release__.py (version): get date dynamically.
5116 * IPython/__release__.py (version): get date dynamically.
5112
5117
5113 * Misc. documentation updates thanks to Arnd's comments. Also ran
5118 * Misc. documentation updates thanks to Arnd's comments. Also ran
5114 a full spellcheck on the manual (hadn't been done in a while).
5119 a full spellcheck on the manual (hadn't been done in a while).
5115
5120
5116 2002-04-27 Fernando Perez <fperez@colorado.edu>
5121 2002-04-27 Fernando Perez <fperez@colorado.edu>
5117
5122
5118 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
5123 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
5119 starting a log in mid-session would reset the input history list.
5124 starting a log in mid-session would reset the input history list.
5120
5125
5121 2002-04-26 Fernando Perez <fperez@colorado.edu>
5126 2002-04-26 Fernando Perez <fperez@colorado.edu>
5122
5127
5123 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
5128 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
5124 all files were being included in an update. Now anything in
5129 all files were being included in an update. Now anything in
5125 UserConfig that matches [A-Za-z]*.py will go (this excludes
5130 UserConfig that matches [A-Za-z]*.py will go (this excludes
5126 __init__.py)
5131 __init__.py)
5127
5132
5128 2002-04-25 Fernando Perez <fperez@colorado.edu>
5133 2002-04-25 Fernando Perez <fperez@colorado.edu>
5129
5134
5130 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
5135 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
5131 to __builtins__ so that any form of embedded or imported code can
5136 to __builtins__ so that any form of embedded or imported code can
5132 test for being inside IPython.
5137 test for being inside IPython.
5133
5138
5134 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
5139 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
5135 changed to GnuplotMagic because it's now an importable module,
5140 changed to GnuplotMagic because it's now an importable module,
5136 this makes the name follow that of the standard Gnuplot module.
5141 this makes the name follow that of the standard Gnuplot module.
5137 GnuplotMagic can now be loaded at any time in mid-session.
5142 GnuplotMagic can now be loaded at any time in mid-session.
5138
5143
5139 2002-04-24 Fernando Perez <fperez@colorado.edu>
5144 2002-04-24 Fernando Perez <fperez@colorado.edu>
5140
5145
5141 * IPython/numutils.py: removed SIUnits. It doesn't properly set
5146 * IPython/numutils.py: removed SIUnits. It doesn't properly set
5142 the globals (IPython has its own namespace) and the
5147 the globals (IPython has its own namespace) and the
5143 PhysicalQuantity stuff is much better anyway.
5148 PhysicalQuantity stuff is much better anyway.
5144
5149
5145 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
5150 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
5146 embedding example to standard user directory for
5151 embedding example to standard user directory for
5147 distribution. Also put it in the manual.
5152 distribution. Also put it in the manual.
5148
5153
5149 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
5154 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
5150 instance as first argument (so it doesn't rely on some obscure
5155 instance as first argument (so it doesn't rely on some obscure
5151 hidden global).
5156 hidden global).
5152
5157
5153 * IPython/UserConfig/ipythonrc.py: put () back in accepted
5158 * IPython/UserConfig/ipythonrc.py: put () back in accepted
5154 delimiters. While it prevents ().TAB from working, it allows
5159 delimiters. While it prevents ().TAB from working, it allows
5155 completions in open (... expressions. This is by far a more common
5160 completions in open (... expressions. This is by far a more common
5156 case.
5161 case.
5157
5162
5158 2002-04-23 Fernando Perez <fperez@colorado.edu>
5163 2002-04-23 Fernando Perez <fperez@colorado.edu>
5159
5164
5160 * IPython/Extensions/InterpreterPasteInput.py: new
5165 * IPython/Extensions/InterpreterPasteInput.py: new
5161 syntax-processing module for pasting lines with >>> or ... at the
5166 syntax-processing module for pasting lines with >>> or ... at the
5162 start.
5167 start.
5163
5168
5164 * IPython/Extensions/PhysicalQ_Interactive.py
5169 * IPython/Extensions/PhysicalQ_Interactive.py
5165 (PhysicalQuantityInteractive.__int__): fixed to work with either
5170 (PhysicalQuantityInteractive.__int__): fixed to work with either
5166 Numeric or math.
5171 Numeric or math.
5167
5172
5168 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
5173 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
5169 provided profiles. Now we have:
5174 provided profiles. Now we have:
5170 -math -> math module as * and cmath with its own namespace.
5175 -math -> math module as * and cmath with its own namespace.
5171 -numeric -> Numeric as *, plus gnuplot & grace
5176 -numeric -> Numeric as *, plus gnuplot & grace
5172 -physics -> same as before
5177 -physics -> same as before
5173
5178
5174 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
5179 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
5175 user-defined magics wouldn't be found by @magic if they were
5180 user-defined magics wouldn't be found by @magic if they were
5176 defined as class methods. Also cleaned up the namespace search
5181 defined as class methods. Also cleaned up the namespace search
5177 logic and the string building (to use %s instead of many repeated
5182 logic and the string building (to use %s instead of many repeated
5178 string adds).
5183 string adds).
5179
5184
5180 * IPython/UserConfig/example-magic.py (magic_foo): updated example
5185 * IPython/UserConfig/example-magic.py (magic_foo): updated example
5181 of user-defined magics to operate with class methods (cleaner, in
5186 of user-defined magics to operate with class methods (cleaner, in
5182 line with the gnuplot code).
5187 line with the gnuplot code).
5183
5188
5184 2002-04-22 Fernando Perez <fperez@colorado.edu>
5189 2002-04-22 Fernando Perez <fperez@colorado.edu>
5185
5190
5186 * setup.py: updated dependency list so that manual is updated when
5191 * setup.py: updated dependency list so that manual is updated when
5187 all included files change.
5192 all included files change.
5188
5193
5189 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
5194 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
5190 the delimiter removal option (the fix is ugly right now).
5195 the delimiter removal option (the fix is ugly right now).
5191
5196
5192 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
5197 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
5193 all of the math profile (quicker loading, no conflict between
5198 all of the math profile (quicker loading, no conflict between
5194 g-9.8 and g-gnuplot).
5199 g-9.8 and g-gnuplot).
5195
5200
5196 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
5201 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
5197 name of post-mortem files to IPython_crash_report.txt.
5202 name of post-mortem files to IPython_crash_report.txt.
5198
5203
5199 * Cleanup/update of the docs. Added all the new readline info and
5204 * Cleanup/update of the docs. Added all the new readline info and
5200 formatted all lists as 'real lists'.
5205 formatted all lists as 'real lists'.
5201
5206
5202 * IPython/ipmaker.py (make_IPython): removed now-obsolete
5207 * IPython/ipmaker.py (make_IPython): removed now-obsolete
5203 tab-completion options, since the full readline parse_and_bind is
5208 tab-completion options, since the full readline parse_and_bind is
5204 now accessible.
5209 now accessible.
5205
5210
5206 * IPython/iplib.py (InteractiveShell.init_readline): Changed
5211 * IPython/iplib.py (InteractiveShell.init_readline): Changed
5207 handling of readline options. Now users can specify any string to
5212 handling of readline options. Now users can specify any string to
5208 be passed to parse_and_bind(), as well as the delimiters to be
5213 be passed to parse_and_bind(), as well as the delimiters to be
5209 removed.
5214 removed.
5210 (InteractiveShell.__init__): Added __name__ to the global
5215 (InteractiveShell.__init__): Added __name__ to the global
5211 namespace so that things like Itpl which rely on its existence
5216 namespace so that things like Itpl which rely on its existence
5212 don't crash.
5217 don't crash.
5213 (InteractiveShell._prefilter): Defined the default with a _ so
5218 (InteractiveShell._prefilter): Defined the default with a _ so
5214 that prefilter() is easier to override, while the default one
5219 that prefilter() is easier to override, while the default one
5215 remains available.
5220 remains available.
5216
5221
5217 2002-04-18 Fernando Perez <fperez@colorado.edu>
5222 2002-04-18 Fernando Perez <fperez@colorado.edu>
5218
5223
5219 * Added information about pdb in the docs.
5224 * Added information about pdb in the docs.
5220
5225
5221 2002-04-17 Fernando Perez <fperez@colorado.edu>
5226 2002-04-17 Fernando Perez <fperez@colorado.edu>
5222
5227
5223 * IPython/ipmaker.py (make_IPython): added rc_override option to
5228 * IPython/ipmaker.py (make_IPython): added rc_override option to
5224 allow passing config options at creation time which may override
5229 allow passing config options at creation time which may override
5225 anything set in the config files or command line. This is
5230 anything set in the config files or command line. This is
5226 particularly useful for configuring embedded instances.
5231 particularly useful for configuring embedded instances.
5227
5232
5228 2002-04-15 Fernando Perez <fperez@colorado.edu>
5233 2002-04-15 Fernando Perez <fperez@colorado.edu>
5229
5234
5230 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
5235 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
5231 crash embedded instances because of the input cache falling out of
5236 crash embedded instances because of the input cache falling out of
5232 sync with the output counter.
5237 sync with the output counter.
5233
5238
5234 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
5239 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
5235 mode which calls pdb after an uncaught exception in IPython itself.
5240 mode which calls pdb after an uncaught exception in IPython itself.
5236
5241
5237 2002-04-14 Fernando Perez <fperez@colorado.edu>
5242 2002-04-14 Fernando Perez <fperez@colorado.edu>
5238
5243
5239 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
5244 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
5240 readline, fix it back after each call.
5245 readline, fix it back after each call.
5241
5246
5242 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
5247 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
5243 method to force all access via __call__(), which guarantees that
5248 method to force all access via __call__(), which guarantees that
5244 traceback references are properly deleted.
5249 traceback references are properly deleted.
5245
5250
5246 * IPython/Prompts.py (CachedOutput._display): minor fixes to
5251 * IPython/Prompts.py (CachedOutput._display): minor fixes to
5247 improve printing when pprint is in use.
5252 improve printing when pprint is in use.
5248
5253
5249 2002-04-13 Fernando Perez <fperez@colorado.edu>
5254 2002-04-13 Fernando Perez <fperez@colorado.edu>
5250
5255
5251 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
5256 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
5252 exceptions aren't caught anymore. If the user triggers one, he
5257 exceptions aren't caught anymore. If the user triggers one, he
5253 should know why he's doing it and it should go all the way up,
5258 should know why he's doing it and it should go all the way up,
5254 just like any other exception. So now @abort will fully kill the
5259 just like any other exception. So now @abort will fully kill the
5255 embedded interpreter and the embedding code (unless that happens
5260 embedded interpreter and the embedding code (unless that happens
5256 to catch SystemExit).
5261 to catch SystemExit).
5257
5262
5258 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
5263 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
5259 and a debugger() method to invoke the interactive pdb debugger
5264 and a debugger() method to invoke the interactive pdb debugger
5260 after printing exception information. Also added the corresponding
5265 after printing exception information. Also added the corresponding
5261 -pdb option and @pdb magic to control this feature, and updated
5266 -pdb option and @pdb magic to control this feature, and updated
5262 the docs. After a suggestion from Christopher Hart
5267 the docs. After a suggestion from Christopher Hart
5263 (hart-AT-caltech.edu).
5268 (hart-AT-caltech.edu).
5264
5269
5265 2002-04-12 Fernando Perez <fperez@colorado.edu>
5270 2002-04-12 Fernando Perez <fperez@colorado.edu>
5266
5271
5267 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
5272 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
5268 the exception handlers defined by the user (not the CrashHandler)
5273 the exception handlers defined by the user (not the CrashHandler)
5269 so that user exceptions don't trigger an ipython bug report.
5274 so that user exceptions don't trigger an ipython bug report.
5270
5275
5271 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
5276 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
5272 configurable (it should have always been so).
5277 configurable (it should have always been so).
5273
5278
5274 2002-03-26 Fernando Perez <fperez@colorado.edu>
5279 2002-03-26 Fernando Perez <fperez@colorado.edu>
5275
5280
5276 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
5281 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
5277 and there to fix embedding namespace issues. This should all be
5282 and there to fix embedding namespace issues. This should all be
5278 done in a more elegant way.
5283 done in a more elegant way.
5279
5284
5280 2002-03-25 Fernando Perez <fperez@colorado.edu>
5285 2002-03-25 Fernando Perez <fperez@colorado.edu>
5281
5286
5282 * IPython/genutils.py (get_home_dir): Try to make it work under
5287 * IPython/genutils.py (get_home_dir): Try to make it work under
5283 win9x also.
5288 win9x also.
5284
5289
5285 2002-03-20 Fernando Perez <fperez@colorado.edu>
5290 2002-03-20 Fernando Perez <fperez@colorado.edu>
5286
5291
5287 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
5292 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
5288 sys.displayhook untouched upon __init__.
5293 sys.displayhook untouched upon __init__.
5289
5294
5290 2002-03-19 Fernando Perez <fperez@colorado.edu>
5295 2002-03-19 Fernando Perez <fperez@colorado.edu>
5291
5296
5292 * Released 0.2.9 (for embedding bug, basically).
5297 * Released 0.2.9 (for embedding bug, basically).
5293
5298
5294 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
5299 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
5295 exceptions so that enclosing shell's state can be restored.
5300 exceptions so that enclosing shell's state can be restored.
5296
5301
5297 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
5302 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
5298 naming conventions in the .ipython/ dir.
5303 naming conventions in the .ipython/ dir.
5299
5304
5300 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
5305 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
5301 from delimiters list so filenames with - in them get expanded.
5306 from delimiters list so filenames with - in them get expanded.
5302
5307
5303 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
5308 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
5304 sys.displayhook not being properly restored after an embedded call.
5309 sys.displayhook not being properly restored after an embedded call.
5305
5310
5306 2002-03-18 Fernando Perez <fperez@colorado.edu>
5311 2002-03-18 Fernando Perez <fperez@colorado.edu>
5307
5312
5308 * Released 0.2.8
5313 * Released 0.2.8
5309
5314
5310 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
5315 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
5311 some files weren't being included in a -upgrade.
5316 some files weren't being included in a -upgrade.
5312 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
5317 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
5313 on' so that the first tab completes.
5318 on' so that the first tab completes.
5314 (InteractiveShell.handle_magic): fixed bug with spaces around
5319 (InteractiveShell.handle_magic): fixed bug with spaces around
5315 quotes breaking many magic commands.
5320 quotes breaking many magic commands.
5316
5321
5317 * setup.py: added note about ignoring the syntax error messages at
5322 * setup.py: added note about ignoring the syntax error messages at
5318 installation.
5323 installation.
5319
5324
5320 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
5325 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
5321 streamlining the gnuplot interface, now there's only one magic @gp.
5326 streamlining the gnuplot interface, now there's only one magic @gp.
5322
5327
5323 2002-03-17 Fernando Perez <fperez@colorado.edu>
5328 2002-03-17 Fernando Perez <fperez@colorado.edu>
5324
5329
5325 * IPython/UserConfig/magic_gnuplot.py: new name for the
5330 * IPython/UserConfig/magic_gnuplot.py: new name for the
5326 example-magic_pm.py file. Much enhanced system, now with a shell
5331 example-magic_pm.py file. Much enhanced system, now with a shell
5327 for communicating directly with gnuplot, one command at a time.
5332 for communicating directly with gnuplot, one command at a time.
5328
5333
5329 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
5334 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
5330 setting __name__=='__main__'.
5335 setting __name__=='__main__'.
5331
5336
5332 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
5337 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
5333 mini-shell for accessing gnuplot from inside ipython. Should
5338 mini-shell for accessing gnuplot from inside ipython. Should
5334 extend it later for grace access too. Inspired by Arnd's
5339 extend it later for grace access too. Inspired by Arnd's
5335 suggestion.
5340 suggestion.
5336
5341
5337 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
5342 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
5338 calling magic functions with () in their arguments. Thanks to Arnd
5343 calling magic functions with () in their arguments. Thanks to Arnd
5339 Baecker for pointing this to me.
5344 Baecker for pointing this to me.
5340
5345
5341 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
5346 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
5342 infinitely for integer or complex arrays (only worked with floats).
5347 infinitely for integer or complex arrays (only worked with floats).
5343
5348
5344 2002-03-16 Fernando Perez <fperez@colorado.edu>
5349 2002-03-16 Fernando Perez <fperez@colorado.edu>
5345
5350
5346 * setup.py: Merged setup and setup_windows into a single script
5351 * setup.py: Merged setup and setup_windows into a single script
5347 which properly handles things for windows users.
5352 which properly handles things for windows users.
5348
5353
5349 2002-03-15 Fernando Perez <fperez@colorado.edu>
5354 2002-03-15 Fernando Perez <fperez@colorado.edu>
5350
5355
5351 * Big change to the manual: now the magics are all automatically
5356 * Big change to the manual: now the magics are all automatically
5352 documented. This information is generated from their docstrings
5357 documented. This information is generated from their docstrings
5353 and put in a latex file included by the manual lyx file. This way
5358 and put in a latex file included by the manual lyx file. This way
5354 we get always up to date information for the magics. The manual
5359 we get always up to date information for the magics. The manual
5355 now also has proper version information, also auto-synced.
5360 now also has proper version information, also auto-synced.
5356
5361
5357 For this to work, an undocumented --magic_docstrings option was added.
5362 For this to work, an undocumented --magic_docstrings option was added.
5358
5363
5359 2002-03-13 Fernando Perez <fperez@colorado.edu>
5364 2002-03-13 Fernando Perez <fperez@colorado.edu>
5360
5365
5361 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
5366 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
5362 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
5367 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
5363
5368
5364 2002-03-12 Fernando Perez <fperez@colorado.edu>
5369 2002-03-12 Fernando Perez <fperez@colorado.edu>
5365
5370
5366 * IPython/ultraTB.py (TermColors): changed color escapes again to
5371 * IPython/ultraTB.py (TermColors): changed color escapes again to
5367 fix the (old, reintroduced) line-wrapping bug. Basically, if
5372 fix the (old, reintroduced) line-wrapping bug. Basically, if
5368 \001..\002 aren't given in the color escapes, lines get wrapped
5373 \001..\002 aren't given in the color escapes, lines get wrapped
5369 weirdly. But giving those screws up old xterms and emacs terms. So
5374 weirdly. But giving those screws up old xterms and emacs terms. So
5370 I added some logic for emacs terms to be ok, but I can't identify old
5375 I added some logic for emacs terms to be ok, but I can't identify old
5371 xterms separately ($TERM=='xterm' for many terminals, like konsole).
5376 xterms separately ($TERM=='xterm' for many terminals, like konsole).
5372
5377
5373 2002-03-10 Fernando Perez <fperez@colorado.edu>
5378 2002-03-10 Fernando Perez <fperez@colorado.edu>
5374
5379
5375 * IPython/usage.py (__doc__): Various documentation cleanups and
5380 * IPython/usage.py (__doc__): Various documentation cleanups and
5376 updates, both in usage docstrings and in the manual.
5381 updates, both in usage docstrings and in the manual.
5377
5382
5378 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
5383 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
5379 handling of caching. Set minimum acceptabe value for having a
5384 handling of caching. Set minimum acceptabe value for having a
5380 cache at 20 values.
5385 cache at 20 values.
5381
5386
5382 * IPython/iplib.py (InteractiveShell.user_setup): moved the
5387 * IPython/iplib.py (InteractiveShell.user_setup): moved the
5383 install_first_time function to a method, renamed it and added an
5388 install_first_time function to a method, renamed it and added an
5384 'upgrade' mode. Now people can update their config directory with
5389 'upgrade' mode. Now people can update their config directory with
5385 a simple command line switch (-upgrade, also new).
5390 a simple command line switch (-upgrade, also new).
5386
5391
5387 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
5392 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
5388 @file (convenient for automagic users under Python >= 2.2).
5393 @file (convenient for automagic users under Python >= 2.2).
5389 Removed @files (it seemed more like a plural than an abbrev. of
5394 Removed @files (it seemed more like a plural than an abbrev. of
5390 'file show').
5395 'file show').
5391
5396
5392 * IPython/iplib.py (install_first_time): Fixed crash if there were
5397 * IPython/iplib.py (install_first_time): Fixed crash if there were
5393 backup files ('~') in .ipython/ install directory.
5398 backup files ('~') in .ipython/ install directory.
5394
5399
5395 * IPython/ipmaker.py (make_IPython): fixes for new prompt
5400 * IPython/ipmaker.py (make_IPython): fixes for new prompt
5396 system. Things look fine, but these changes are fairly
5401 system. Things look fine, but these changes are fairly
5397 intrusive. Test them for a few days.
5402 intrusive. Test them for a few days.
5398
5403
5399 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
5404 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
5400 the prompts system. Now all in/out prompt strings are user
5405 the prompts system. Now all in/out prompt strings are user
5401 controllable. This is particularly useful for embedding, as one
5406 controllable. This is particularly useful for embedding, as one
5402 can tag embedded instances with particular prompts.
5407 can tag embedded instances with particular prompts.
5403
5408
5404 Also removed global use of sys.ps1/2, which now allows nested
5409 Also removed global use of sys.ps1/2, which now allows nested
5405 embeddings without any problems. Added command-line options for
5410 embeddings without any problems. Added command-line options for
5406 the prompt strings.
5411 the prompt strings.
5407
5412
5408 2002-03-08 Fernando Perez <fperez@colorado.edu>
5413 2002-03-08 Fernando Perez <fperez@colorado.edu>
5409
5414
5410 * IPython/UserConfig/example-embed-short.py (ipshell): added
5415 * IPython/UserConfig/example-embed-short.py (ipshell): added
5411 example file with the bare minimum code for embedding.
5416 example file with the bare minimum code for embedding.
5412
5417
5413 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
5418 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
5414 functionality for the embeddable shell to be activated/deactivated
5419 functionality for the embeddable shell to be activated/deactivated
5415 either globally or at each call.
5420 either globally or at each call.
5416
5421
5417 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
5422 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
5418 rewriting the prompt with '--->' for auto-inputs with proper
5423 rewriting the prompt with '--->' for auto-inputs with proper
5419 coloring. Now the previous UGLY hack in handle_auto() is gone, and
5424 coloring. Now the previous UGLY hack in handle_auto() is gone, and
5420 this is handled by the prompts class itself, as it should.
5425 this is handled by the prompts class itself, as it should.
5421
5426
5422 2002-03-05 Fernando Perez <fperez@colorado.edu>
5427 2002-03-05 Fernando Perez <fperez@colorado.edu>
5423
5428
5424 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
5429 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
5425 @logstart to avoid name clashes with the math log function.
5430 @logstart to avoid name clashes with the math log function.
5426
5431
5427 * Big updates to X/Emacs section of the manual.
5432 * Big updates to X/Emacs section of the manual.
5428
5433
5429 * Removed ipython_emacs. Milan explained to me how to pass
5434 * Removed ipython_emacs. Milan explained to me how to pass
5430 arguments to ipython through Emacs. Some day I'm going to end up
5435 arguments to ipython through Emacs. Some day I'm going to end up
5431 learning some lisp...
5436 learning some lisp...
5432
5437
5433 2002-03-04 Fernando Perez <fperez@colorado.edu>
5438 2002-03-04 Fernando Perez <fperez@colorado.edu>
5434
5439
5435 * IPython/ipython_emacs: Created script to be used as the
5440 * IPython/ipython_emacs: Created script to be used as the
5436 py-python-command Emacs variable so we can pass IPython
5441 py-python-command Emacs variable so we can pass IPython
5437 parameters. I can't figure out how to tell Emacs directly to pass
5442 parameters. I can't figure out how to tell Emacs directly to pass
5438 parameters to IPython, so a dummy shell script will do it.
5443 parameters to IPython, so a dummy shell script will do it.
5439
5444
5440 Other enhancements made for things to work better under Emacs'
5445 Other enhancements made for things to work better under Emacs'
5441 various types of terminals. Many thanks to Milan Zamazal
5446 various types of terminals. Many thanks to Milan Zamazal
5442 <pdm-AT-zamazal.org> for all the suggestions and pointers.
5447 <pdm-AT-zamazal.org> for all the suggestions and pointers.
5443
5448
5444 2002-03-01 Fernando Perez <fperez@colorado.edu>
5449 2002-03-01 Fernando Perez <fperez@colorado.edu>
5445
5450
5446 * IPython/ipmaker.py (make_IPython): added a --readline! option so
5451 * IPython/ipmaker.py (make_IPython): added a --readline! option so
5447 that loading of readline is now optional. This gives better
5452 that loading of readline is now optional. This gives better
5448 control to emacs users.
5453 control to emacs users.
5449
5454
5450 * IPython/ultraTB.py (__date__): Modified color escape sequences
5455 * IPython/ultraTB.py (__date__): Modified color escape sequences
5451 and now things work fine under xterm and in Emacs' term buffers
5456 and now things work fine under xterm and in Emacs' term buffers
5452 (though not shell ones). Well, in emacs you get colors, but all
5457 (though not shell ones). Well, in emacs you get colors, but all
5453 seem to be 'light' colors (no difference between dark and light
5458 seem to be 'light' colors (no difference between dark and light
5454 ones). But the garbage chars are gone, and also in xterms. It
5459 ones). But the garbage chars are gone, and also in xterms. It
5455 seems that now I'm using 'cleaner' ansi sequences.
5460 seems that now I'm using 'cleaner' ansi sequences.
5456
5461
5457 2002-02-21 Fernando Perez <fperez@colorado.edu>
5462 2002-02-21 Fernando Perez <fperez@colorado.edu>
5458
5463
5459 * Released 0.2.7 (mainly to publish the scoping fix).
5464 * Released 0.2.7 (mainly to publish the scoping fix).
5460
5465
5461 * IPython/Logger.py (Logger.logstate): added. A corresponding
5466 * IPython/Logger.py (Logger.logstate): added. A corresponding
5462 @logstate magic was created.
5467 @logstate magic was created.
5463
5468
5464 * IPython/Magic.py: fixed nested scoping problem under Python
5469 * IPython/Magic.py: fixed nested scoping problem under Python
5465 2.1.x (automagic wasn't working).
5470 2.1.x (automagic wasn't working).
5466
5471
5467 2002-02-20 Fernando Perez <fperez@colorado.edu>
5472 2002-02-20 Fernando Perez <fperez@colorado.edu>
5468
5473
5469 * Released 0.2.6.
5474 * Released 0.2.6.
5470
5475
5471 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
5476 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
5472 option so that logs can come out without any headers at all.
5477 option so that logs can come out without any headers at all.
5473
5478
5474 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
5479 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
5475 SciPy.
5480 SciPy.
5476
5481
5477 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
5482 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
5478 that embedded IPython calls don't require vars() to be explicitly
5483 that embedded IPython calls don't require vars() to be explicitly
5479 passed. Now they are extracted from the caller's frame (code
5484 passed. Now they are extracted from the caller's frame (code
5480 snatched from Eric Jones' weave). Added better documentation to
5485 snatched from Eric Jones' weave). Added better documentation to
5481 the section on embedding and the example file.
5486 the section on embedding and the example file.
5482
5487
5483 * IPython/genutils.py (page): Changed so that under emacs, it just
5488 * IPython/genutils.py (page): Changed so that under emacs, it just
5484 prints the string. You can then page up and down in the emacs
5489 prints the string. You can then page up and down in the emacs
5485 buffer itself. This is how the builtin help() works.
5490 buffer itself. This is how the builtin help() works.
5486
5491
5487 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
5492 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
5488 macro scoping: macros need to be executed in the user's namespace
5493 macro scoping: macros need to be executed in the user's namespace
5489 to work as if they had been typed by the user.
5494 to work as if they had been typed by the user.
5490
5495
5491 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
5496 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
5492 execute automatically (no need to type 'exec...'). They then
5497 execute automatically (no need to type 'exec...'). They then
5493 behave like 'true macros'. The printing system was also modified
5498 behave like 'true macros'. The printing system was also modified
5494 for this to work.
5499 for this to work.
5495
5500
5496 2002-02-19 Fernando Perez <fperez@colorado.edu>
5501 2002-02-19 Fernando Perez <fperez@colorado.edu>
5497
5502
5498 * IPython/genutils.py (page_file): new function for paging files
5503 * IPython/genutils.py (page_file): new function for paging files
5499 in an OS-independent way. Also necessary for file viewing to work
5504 in an OS-independent way. Also necessary for file viewing to work
5500 well inside Emacs buffers.
5505 well inside Emacs buffers.
5501 (page): Added checks for being in an emacs buffer.
5506 (page): Added checks for being in an emacs buffer.
5502 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
5507 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
5503 same bug in iplib.
5508 same bug in iplib.
5504
5509
5505 2002-02-18 Fernando Perez <fperez@colorado.edu>
5510 2002-02-18 Fernando Perez <fperez@colorado.edu>
5506
5511
5507 * IPython/iplib.py (InteractiveShell.init_readline): modified use
5512 * IPython/iplib.py (InteractiveShell.init_readline): modified use
5508 of readline so that IPython can work inside an Emacs buffer.
5513 of readline so that IPython can work inside an Emacs buffer.
5509
5514
5510 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
5515 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
5511 method signatures (they weren't really bugs, but it looks cleaner
5516 method signatures (they weren't really bugs, but it looks cleaner
5512 and keeps PyChecker happy).
5517 and keeps PyChecker happy).
5513
5518
5514 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
5519 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
5515 for implementing various user-defined hooks. Currently only
5520 for implementing various user-defined hooks. Currently only
5516 display is done.
5521 display is done.
5517
5522
5518 * IPython/Prompts.py (CachedOutput._display): changed display
5523 * IPython/Prompts.py (CachedOutput._display): changed display
5519 functions so that they can be dynamically changed by users easily.
5524 functions so that they can be dynamically changed by users easily.
5520
5525
5521 * IPython/Extensions/numeric_formats.py (num_display): added an
5526 * IPython/Extensions/numeric_formats.py (num_display): added an
5522 extension for printing NumPy arrays in flexible manners. It
5527 extension for printing NumPy arrays in flexible manners. It
5523 doesn't do anything yet, but all the structure is in
5528 doesn't do anything yet, but all the structure is in
5524 place. Ultimately the plan is to implement output format control
5529 place. Ultimately the plan is to implement output format control
5525 like in Octave.
5530 like in Octave.
5526
5531
5527 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
5532 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
5528 methods are found at run-time by all the automatic machinery.
5533 methods are found at run-time by all the automatic machinery.
5529
5534
5530 2002-02-17 Fernando Perez <fperez@colorado.edu>
5535 2002-02-17 Fernando Perez <fperez@colorado.edu>
5531
5536
5532 * setup_Windows.py (make_shortcut): documented. Cleaned up the
5537 * setup_Windows.py (make_shortcut): documented. Cleaned up the
5533 whole file a little.
5538 whole file a little.
5534
5539
5535 * ToDo: closed this document. Now there's a new_design.lyx
5540 * ToDo: closed this document. Now there's a new_design.lyx
5536 document for all new ideas. Added making a pdf of it for the
5541 document for all new ideas. Added making a pdf of it for the
5537 end-user distro.
5542 end-user distro.
5538
5543
5539 * IPython/Logger.py (Logger.switch_log): Created this to replace
5544 * IPython/Logger.py (Logger.switch_log): Created this to replace
5540 logon() and logoff(). It also fixes a nasty crash reported by
5545 logon() and logoff(). It also fixes a nasty crash reported by
5541 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
5546 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
5542
5547
5543 * IPython/iplib.py (complete): got auto-completion to work with
5548 * IPython/iplib.py (complete): got auto-completion to work with
5544 automagic (I had wanted this for a long time).
5549 automagic (I had wanted this for a long time).
5545
5550
5546 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
5551 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
5547 to @file, since file() is now a builtin and clashes with automagic
5552 to @file, since file() is now a builtin and clashes with automagic
5548 for @file.
5553 for @file.
5549
5554
5550 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
5555 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
5551 of this was previously in iplib, which had grown to more than 2000
5556 of this was previously in iplib, which had grown to more than 2000
5552 lines, way too long. No new functionality, but it makes managing
5557 lines, way too long. No new functionality, but it makes managing
5553 the code a bit easier.
5558 the code a bit easier.
5554
5559
5555 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
5560 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
5556 information to crash reports.
5561 information to crash reports.
5557
5562
5558 2002-02-12 Fernando Perez <fperez@colorado.edu>
5563 2002-02-12 Fernando Perez <fperez@colorado.edu>
5559
5564
5560 * Released 0.2.5.
5565 * Released 0.2.5.
5561
5566
5562 2002-02-11 Fernando Perez <fperez@colorado.edu>
5567 2002-02-11 Fernando Perez <fperez@colorado.edu>
5563
5568
5564 * Wrote a relatively complete Windows installer. It puts
5569 * Wrote a relatively complete Windows installer. It puts
5565 everything in place, creates Start Menu entries and fixes the
5570 everything in place, creates Start Menu entries and fixes the
5566 color issues. Nothing fancy, but it works.
5571 color issues. Nothing fancy, but it works.
5567
5572
5568 2002-02-10 Fernando Perez <fperez@colorado.edu>
5573 2002-02-10 Fernando Perez <fperez@colorado.edu>
5569
5574
5570 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
5575 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
5571 os.path.expanduser() call so that we can type @run ~/myfile.py and
5576 os.path.expanduser() call so that we can type @run ~/myfile.py and
5572 have thigs work as expected.
5577 have thigs work as expected.
5573
5578
5574 * IPython/genutils.py (page): fixed exception handling so things
5579 * IPython/genutils.py (page): fixed exception handling so things
5575 work both in Unix and Windows correctly. Quitting a pager triggers
5580 work both in Unix and Windows correctly. Quitting a pager triggers
5576 an IOError/broken pipe in Unix, and in windows not finding a pager
5581 an IOError/broken pipe in Unix, and in windows not finding a pager
5577 is also an IOError, so I had to actually look at the return value
5582 is also an IOError, so I had to actually look at the return value
5578 of the exception, not just the exception itself. Should be ok now.
5583 of the exception, not just the exception itself. Should be ok now.
5579
5584
5580 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
5585 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
5581 modified to allow case-insensitive color scheme changes.
5586 modified to allow case-insensitive color scheme changes.
5582
5587
5583 2002-02-09 Fernando Perez <fperez@colorado.edu>
5588 2002-02-09 Fernando Perez <fperez@colorado.edu>
5584
5589
5585 * IPython/genutils.py (native_line_ends): new function to leave
5590 * IPython/genutils.py (native_line_ends): new function to leave
5586 user config files with os-native line-endings.
5591 user config files with os-native line-endings.
5587
5592
5588 * README and manual updates.
5593 * README and manual updates.
5589
5594
5590 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
5595 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
5591 instead of StringType to catch Unicode strings.
5596 instead of StringType to catch Unicode strings.
5592
5597
5593 * IPython/genutils.py (filefind): fixed bug for paths with
5598 * IPython/genutils.py (filefind): fixed bug for paths with
5594 embedded spaces (very common in Windows).
5599 embedded spaces (very common in Windows).
5595
5600
5596 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
5601 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
5597 files under Windows, so that they get automatically associated
5602 files under Windows, so that they get automatically associated
5598 with a text editor. Windows makes it a pain to handle
5603 with a text editor. Windows makes it a pain to handle
5599 extension-less files.
5604 extension-less files.
5600
5605
5601 * IPython/iplib.py (InteractiveShell.init_readline): Made the
5606 * IPython/iplib.py (InteractiveShell.init_readline): Made the
5602 warning about readline only occur for Posix. In Windows there's no
5607 warning about readline only occur for Posix. In Windows there's no
5603 way to get readline, so why bother with the warning.
5608 way to get readline, so why bother with the warning.
5604
5609
5605 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
5610 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
5606 for __str__ instead of dir(self), since dir() changed in 2.2.
5611 for __str__ instead of dir(self), since dir() changed in 2.2.
5607
5612
5608 * Ported to Windows! Tested on XP, I suspect it should work fine
5613 * Ported to Windows! Tested on XP, I suspect it should work fine
5609 on NT/2000, but I don't think it will work on 98 et al. That
5614 on NT/2000, but I don't think it will work on 98 et al. That
5610 series of Windows is such a piece of junk anyway that I won't try
5615 series of Windows is such a piece of junk anyway that I won't try
5611 porting it there. The XP port was straightforward, showed a few
5616 porting it there. The XP port was straightforward, showed a few
5612 bugs here and there (fixed all), in particular some string
5617 bugs here and there (fixed all), in particular some string
5613 handling stuff which required considering Unicode strings (which
5618 handling stuff which required considering Unicode strings (which
5614 Windows uses). This is good, but hasn't been too tested :) No
5619 Windows uses). This is good, but hasn't been too tested :) No
5615 fancy installer yet, I'll put a note in the manual so people at
5620 fancy installer yet, I'll put a note in the manual so people at
5616 least make manually a shortcut.
5621 least make manually a shortcut.
5617
5622
5618 * IPython/iplib.py (Magic.magic_colors): Unified the color options
5623 * IPython/iplib.py (Magic.magic_colors): Unified the color options
5619 into a single one, "colors". This now controls both prompt and
5624 into a single one, "colors". This now controls both prompt and
5620 exception color schemes, and can be changed both at startup
5625 exception color schemes, and can be changed both at startup
5621 (either via command-line switches or via ipythonrc files) and at
5626 (either via command-line switches or via ipythonrc files) and at
5622 runtime, with @colors.
5627 runtime, with @colors.
5623 (Magic.magic_run): renamed @prun to @run and removed the old
5628 (Magic.magic_run): renamed @prun to @run and removed the old
5624 @run. The two were too similar to warrant keeping both.
5629 @run. The two were too similar to warrant keeping both.
5625
5630
5626 2002-02-03 Fernando Perez <fperez@colorado.edu>
5631 2002-02-03 Fernando Perez <fperez@colorado.edu>
5627
5632
5628 * IPython/iplib.py (install_first_time): Added comment on how to
5633 * IPython/iplib.py (install_first_time): Added comment on how to
5629 configure the color options for first-time users. Put a <return>
5634 configure the color options for first-time users. Put a <return>
5630 request at the end so that small-terminal users get a chance to
5635 request at the end so that small-terminal users get a chance to
5631 read the startup info.
5636 read the startup info.
5632
5637
5633 2002-01-23 Fernando Perez <fperez@colorado.edu>
5638 2002-01-23 Fernando Perez <fperez@colorado.edu>
5634
5639
5635 * IPython/iplib.py (CachedOutput.update): Changed output memory
5640 * IPython/iplib.py (CachedOutput.update): Changed output memory
5636 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
5641 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
5637 input history we still use _i. Did this b/c these variable are
5642 input history we still use _i. Did this b/c these variable are
5638 very commonly used in interactive work, so the less we need to
5643 very commonly used in interactive work, so the less we need to
5639 type the better off we are.
5644 type the better off we are.
5640 (Magic.magic_prun): updated @prun to better handle the namespaces
5645 (Magic.magic_prun): updated @prun to better handle the namespaces
5641 the file will run in, including a fix for __name__ not being set
5646 the file will run in, including a fix for __name__ not being set
5642 before.
5647 before.
5643
5648
5644 2002-01-20 Fernando Perez <fperez@colorado.edu>
5649 2002-01-20 Fernando Perez <fperez@colorado.edu>
5645
5650
5646 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
5651 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
5647 extra garbage for Python 2.2. Need to look more carefully into
5652 extra garbage for Python 2.2. Need to look more carefully into
5648 this later.
5653 this later.
5649
5654
5650 2002-01-19 Fernando Perez <fperez@colorado.edu>
5655 2002-01-19 Fernando Perez <fperez@colorado.edu>
5651
5656
5652 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
5657 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
5653 display SyntaxError exceptions properly formatted when they occur
5658 display SyntaxError exceptions properly formatted when they occur
5654 (they can be triggered by imported code).
5659 (they can be triggered by imported code).
5655
5660
5656 2002-01-18 Fernando Perez <fperez@colorado.edu>
5661 2002-01-18 Fernando Perez <fperez@colorado.edu>
5657
5662
5658 * IPython/iplib.py (InteractiveShell.safe_execfile): now
5663 * IPython/iplib.py (InteractiveShell.safe_execfile): now
5659 SyntaxError exceptions are reported nicely formatted, instead of
5664 SyntaxError exceptions are reported nicely formatted, instead of
5660 spitting out only offset information as before.
5665 spitting out only offset information as before.
5661 (Magic.magic_prun): Added the @prun function for executing
5666 (Magic.magic_prun): Added the @prun function for executing
5662 programs with command line args inside IPython.
5667 programs with command line args inside IPython.
5663
5668
5664 2002-01-16 Fernando Perez <fperez@colorado.edu>
5669 2002-01-16 Fernando Perez <fperez@colorado.edu>
5665
5670
5666 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
5671 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
5667 to *not* include the last item given in a range. This brings their
5672 to *not* include the last item given in a range. This brings their
5668 behavior in line with Python's slicing:
5673 behavior in line with Python's slicing:
5669 a[n1:n2] -> a[n1]...a[n2-1]
5674 a[n1:n2] -> a[n1]...a[n2-1]
5670 It may be a bit less convenient, but I prefer to stick to Python's
5675 It may be a bit less convenient, but I prefer to stick to Python's
5671 conventions *everywhere*, so users never have to wonder.
5676 conventions *everywhere*, so users never have to wonder.
5672 (Magic.magic_macro): Added @macro function to ease the creation of
5677 (Magic.magic_macro): Added @macro function to ease the creation of
5673 macros.
5678 macros.
5674
5679
5675 2002-01-05 Fernando Perez <fperez@colorado.edu>
5680 2002-01-05 Fernando Perez <fperez@colorado.edu>
5676
5681
5677 * Released 0.2.4.
5682 * Released 0.2.4.
5678
5683
5679 * IPython/iplib.py (Magic.magic_pdef):
5684 * IPython/iplib.py (Magic.magic_pdef):
5680 (InteractiveShell.safe_execfile): report magic lines and error
5685 (InteractiveShell.safe_execfile): report magic lines and error
5681 lines without line numbers so one can easily copy/paste them for
5686 lines without line numbers so one can easily copy/paste them for
5682 re-execution.
5687 re-execution.
5683
5688
5684 * Updated manual with recent changes.
5689 * Updated manual with recent changes.
5685
5690
5686 * IPython/iplib.py (Magic.magic_oinfo): added constructor
5691 * IPython/iplib.py (Magic.magic_oinfo): added constructor
5687 docstring printing when class? is called. Very handy for knowing
5692 docstring printing when class? is called. Very handy for knowing
5688 how to create class instances (as long as __init__ is well
5693 how to create class instances (as long as __init__ is well
5689 documented, of course :)
5694 documented, of course :)
5690 (Magic.magic_doc): print both class and constructor docstrings.
5695 (Magic.magic_doc): print both class and constructor docstrings.
5691 (Magic.magic_pdef): give constructor info if passed a class and
5696 (Magic.magic_pdef): give constructor info if passed a class and
5692 __call__ info for callable object instances.
5697 __call__ info for callable object instances.
5693
5698
5694 2002-01-04 Fernando Perez <fperez@colorado.edu>
5699 2002-01-04 Fernando Perez <fperez@colorado.edu>
5695
5700
5696 * Made deep_reload() off by default. It doesn't always work
5701 * Made deep_reload() off by default. It doesn't always work
5697 exactly as intended, so it's probably safer to have it off. It's
5702 exactly as intended, so it's probably safer to have it off. It's
5698 still available as dreload() anyway, so nothing is lost.
5703 still available as dreload() anyway, so nothing is lost.
5699
5704
5700 2002-01-02 Fernando Perez <fperez@colorado.edu>
5705 2002-01-02 Fernando Perez <fperez@colorado.edu>
5701
5706
5702 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
5707 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
5703 so I wanted an updated release).
5708 so I wanted an updated release).
5704
5709
5705 2001-12-27 Fernando Perez <fperez@colorado.edu>
5710 2001-12-27 Fernando Perez <fperez@colorado.edu>
5706
5711
5707 * IPython/iplib.py (InteractiveShell.interact): Added the original
5712 * IPython/iplib.py (InteractiveShell.interact): Added the original
5708 code from 'code.py' for this module in order to change the
5713 code from 'code.py' for this module in order to change the
5709 handling of a KeyboardInterrupt. This was necessary b/c otherwise
5714 handling of a KeyboardInterrupt. This was necessary b/c otherwise
5710 the history cache would break when the user hit Ctrl-C, and
5715 the history cache would break when the user hit Ctrl-C, and
5711 interact() offers no way to add any hooks to it.
5716 interact() offers no way to add any hooks to it.
5712
5717
5713 2001-12-23 Fernando Perez <fperez@colorado.edu>
5718 2001-12-23 Fernando Perez <fperez@colorado.edu>
5714
5719
5715 * setup.py: added check for 'MANIFEST' before trying to remove
5720 * setup.py: added check for 'MANIFEST' before trying to remove
5716 it. Thanks to Sean Reifschneider.
5721 it. Thanks to Sean Reifschneider.
5717
5722
5718 2001-12-22 Fernando Perez <fperez@colorado.edu>
5723 2001-12-22 Fernando Perez <fperez@colorado.edu>
5719
5724
5720 * Released 0.2.2.
5725 * Released 0.2.2.
5721
5726
5722 * Finished (reasonably) writing the manual. Later will add the
5727 * Finished (reasonably) writing the manual. Later will add the
5723 python-standard navigation stylesheets, but for the time being
5728 python-standard navigation stylesheets, but for the time being
5724 it's fairly complete. Distribution will include html and pdf
5729 it's fairly complete. Distribution will include html and pdf
5725 versions.
5730 versions.
5726
5731
5727 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
5732 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
5728 (MayaVi author).
5733 (MayaVi author).
5729
5734
5730 2001-12-21 Fernando Perez <fperez@colorado.edu>
5735 2001-12-21 Fernando Perez <fperez@colorado.edu>
5731
5736
5732 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
5737 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
5733 good public release, I think (with the manual and the distutils
5738 good public release, I think (with the manual and the distutils
5734 installer). The manual can use some work, but that can go
5739 installer). The manual can use some work, but that can go
5735 slowly. Otherwise I think it's quite nice for end users. Next
5740 slowly. Otherwise I think it's quite nice for end users. Next
5736 summer, rewrite the guts of it...
5741 summer, rewrite the guts of it...
5737
5742
5738 * Changed format of ipythonrc files to use whitespace as the
5743 * Changed format of ipythonrc files to use whitespace as the
5739 separator instead of an explicit '='. Cleaner.
5744 separator instead of an explicit '='. Cleaner.
5740
5745
5741 2001-12-20 Fernando Perez <fperez@colorado.edu>
5746 2001-12-20 Fernando Perez <fperez@colorado.edu>
5742
5747
5743 * Started a manual in LyX. For now it's just a quick merge of the
5748 * Started a manual in LyX. For now it's just a quick merge of the
5744 various internal docstrings and READMEs. Later it may grow into a
5749 various internal docstrings and READMEs. Later it may grow into a
5745 nice, full-blown manual.
5750 nice, full-blown manual.
5746
5751
5747 * Set up a distutils based installer. Installation should now be
5752 * Set up a distutils based installer. Installation should now be
5748 trivially simple for end-users.
5753 trivially simple for end-users.
5749
5754
5750 2001-12-11 Fernando Perez <fperez@colorado.edu>
5755 2001-12-11 Fernando Perez <fperez@colorado.edu>
5751
5756
5752 * Released 0.2.0. First public release, announced it at
5757 * Released 0.2.0. First public release, announced it at
5753 comp.lang.python. From now on, just bugfixes...
5758 comp.lang.python. From now on, just bugfixes...
5754
5759
5755 * Went through all the files, set copyright/license notices and
5760 * Went through all the files, set copyright/license notices and
5756 cleaned up things. Ready for release.
5761 cleaned up things. Ready for release.
5757
5762
5758 2001-12-10 Fernando Perez <fperez@colorado.edu>
5763 2001-12-10 Fernando Perez <fperez@colorado.edu>
5759
5764
5760 * Changed the first-time installer not to use tarfiles. It's more
5765 * Changed the first-time installer not to use tarfiles. It's more
5761 robust now and less unix-dependent. Also makes it easier for
5766 robust now and less unix-dependent. Also makes it easier for
5762 people to later upgrade versions.
5767 people to later upgrade versions.
5763
5768
5764 * Changed @exit to @abort to reflect the fact that it's pretty
5769 * Changed @exit to @abort to reflect the fact that it's pretty
5765 brutal (a sys.exit()). The difference between @abort and Ctrl-D
5770 brutal (a sys.exit()). The difference between @abort and Ctrl-D
5766 becomes significant only when IPyhton is embedded: in that case,
5771 becomes significant only when IPyhton is embedded: in that case,
5767 C-D closes IPython only, but @abort kills the enclosing program
5772 C-D closes IPython only, but @abort kills the enclosing program
5768 too (unless it had called IPython inside a try catching
5773 too (unless it had called IPython inside a try catching
5769 SystemExit).
5774 SystemExit).
5770
5775
5771 * Created Shell module which exposes the actuall IPython Shell
5776 * Created Shell module which exposes the actuall IPython Shell
5772 classes, currently the normal and the embeddable one. This at
5777 classes, currently the normal and the embeddable one. This at
5773 least offers a stable interface we won't need to change when
5778 least offers a stable interface we won't need to change when
5774 (later) the internals are rewritten. That rewrite will be confined
5779 (later) the internals are rewritten. That rewrite will be confined
5775 to iplib and ipmaker, but the Shell interface should remain as is.
5780 to iplib and ipmaker, but the Shell interface should remain as is.
5776
5781
5777 * Added embed module which offers an embeddable IPShell object,
5782 * Added embed module which offers an embeddable IPShell object,
5778 useful to fire up IPython *inside* a running program. Great for
5783 useful to fire up IPython *inside* a running program. Great for
5779 debugging or dynamical data analysis.
5784 debugging or dynamical data analysis.
5780
5785
5781 2001-12-08 Fernando Perez <fperez@colorado.edu>
5786 2001-12-08 Fernando Perez <fperez@colorado.edu>
5782
5787
5783 * Fixed small bug preventing seeing info from methods of defined
5788 * Fixed small bug preventing seeing info from methods of defined
5784 objects (incorrect namespace in _ofind()).
5789 objects (incorrect namespace in _ofind()).
5785
5790
5786 * Documentation cleanup. Moved the main usage docstrings to a
5791 * Documentation cleanup. Moved the main usage docstrings to a
5787 separate file, usage.py (cleaner to maintain, and hopefully in the
5792 separate file, usage.py (cleaner to maintain, and hopefully in the
5788 future some perlpod-like way of producing interactive, man and
5793 future some perlpod-like way of producing interactive, man and
5789 html docs out of it will be found).
5794 html docs out of it will be found).
5790
5795
5791 * Added @profile to see your profile at any time.
5796 * Added @profile to see your profile at any time.
5792
5797
5793 * Added @p as an alias for 'print'. It's especially convenient if
5798 * Added @p as an alias for 'print'. It's especially convenient if
5794 using automagic ('p x' prints x).
5799 using automagic ('p x' prints x).
5795
5800
5796 * Small cleanups and fixes after a pychecker run.
5801 * Small cleanups and fixes after a pychecker run.
5797
5802
5798 * Changed the @cd command to handle @cd - and @cd -<n> for
5803 * Changed the @cd command to handle @cd - and @cd -<n> for
5799 visiting any directory in _dh.
5804 visiting any directory in _dh.
5800
5805
5801 * Introduced _dh, a history of visited directories. @dhist prints
5806 * Introduced _dh, a history of visited directories. @dhist prints
5802 it out with numbers.
5807 it out with numbers.
5803
5808
5804 2001-12-07 Fernando Perez <fperez@colorado.edu>
5809 2001-12-07 Fernando Perez <fperez@colorado.edu>
5805
5810
5806 * Released 0.1.22
5811 * Released 0.1.22
5807
5812
5808 * Made initialization a bit more robust against invalid color
5813 * Made initialization a bit more robust against invalid color
5809 options in user input (exit, not traceback-crash).
5814 options in user input (exit, not traceback-crash).
5810
5815
5811 * Changed the bug crash reporter to write the report only in the
5816 * Changed the bug crash reporter to write the report only in the
5812 user's .ipython directory. That way IPython won't litter people's
5817 user's .ipython directory. That way IPython won't litter people's
5813 hard disks with crash files all over the place. Also print on
5818 hard disks with crash files all over the place. Also print on
5814 screen the necessary mail command.
5819 screen the necessary mail command.
5815
5820
5816 * With the new ultraTB, implemented LightBG color scheme for light
5821 * With the new ultraTB, implemented LightBG color scheme for light
5817 background terminals. A lot of people like white backgrounds, so I
5822 background terminals. A lot of people like white backgrounds, so I
5818 guess we should at least give them something readable.
5823 guess we should at least give them something readable.
5819
5824
5820 2001-12-06 Fernando Perez <fperez@colorado.edu>
5825 2001-12-06 Fernando Perez <fperez@colorado.edu>
5821
5826
5822 * Modified the structure of ultraTB. Now there's a proper class
5827 * Modified the structure of ultraTB. Now there's a proper class
5823 for tables of color schemes which allow adding schemes easily and
5828 for tables of color schemes which allow adding schemes easily and
5824 switching the active scheme without creating a new instance every
5829 switching the active scheme without creating a new instance every
5825 time (which was ridiculous). The syntax for creating new schemes
5830 time (which was ridiculous). The syntax for creating new schemes
5826 is also cleaner. I think ultraTB is finally done, with a clean
5831 is also cleaner. I think ultraTB is finally done, with a clean
5827 class structure. Names are also much cleaner (now there's proper
5832 class structure. Names are also much cleaner (now there's proper
5828 color tables, no need for every variable to also have 'color' in
5833 color tables, no need for every variable to also have 'color' in
5829 its name).
5834 its name).
5830
5835
5831 * Broke down genutils into separate files. Now genutils only
5836 * Broke down genutils into separate files. Now genutils only
5832 contains utility functions, and classes have been moved to their
5837 contains utility functions, and classes have been moved to their
5833 own files (they had enough independent functionality to warrant
5838 own files (they had enough independent functionality to warrant
5834 it): ConfigLoader, OutputTrap, Struct.
5839 it): ConfigLoader, OutputTrap, Struct.
5835
5840
5836 2001-12-05 Fernando Perez <fperez@colorado.edu>
5841 2001-12-05 Fernando Perez <fperez@colorado.edu>
5837
5842
5838 * IPython turns 21! Released version 0.1.21, as a candidate for
5843 * IPython turns 21! Released version 0.1.21, as a candidate for
5839 public consumption. If all goes well, release in a few days.
5844 public consumption. If all goes well, release in a few days.
5840
5845
5841 * Fixed path bug (files in Extensions/ directory wouldn't be found
5846 * Fixed path bug (files in Extensions/ directory wouldn't be found
5842 unless IPython/ was explicitly in sys.path).
5847 unless IPython/ was explicitly in sys.path).
5843
5848
5844 * Extended the FlexCompleter class as MagicCompleter to allow
5849 * Extended the FlexCompleter class as MagicCompleter to allow
5845 completion of @-starting lines.
5850 completion of @-starting lines.
5846
5851
5847 * Created __release__.py file as a central repository for release
5852 * Created __release__.py file as a central repository for release
5848 info that other files can read from.
5853 info that other files can read from.
5849
5854
5850 * Fixed small bug in logging: when logging was turned on in
5855 * Fixed small bug in logging: when logging was turned on in
5851 mid-session, old lines with special meanings (!@?) were being
5856 mid-session, old lines with special meanings (!@?) were being
5852 logged without the prepended comment, which is necessary since
5857 logged without the prepended comment, which is necessary since
5853 they are not truly valid python syntax. This should make session
5858 they are not truly valid python syntax. This should make session
5854 restores produce less errors.
5859 restores produce less errors.
5855
5860
5856 * The namespace cleanup forced me to make a FlexCompleter class
5861 * The namespace cleanup forced me to make a FlexCompleter class
5857 which is nothing but a ripoff of rlcompleter, but with selectable
5862 which is nothing but a ripoff of rlcompleter, but with selectable
5858 namespace (rlcompleter only works in __main__.__dict__). I'll try
5863 namespace (rlcompleter only works in __main__.__dict__). I'll try
5859 to submit a note to the authors to see if this change can be
5864 to submit a note to the authors to see if this change can be
5860 incorporated in future rlcompleter releases (Dec.6: done)
5865 incorporated in future rlcompleter releases (Dec.6: done)
5861
5866
5862 * More fixes to namespace handling. It was a mess! Now all
5867 * More fixes to namespace handling. It was a mess! Now all
5863 explicit references to __main__.__dict__ are gone (except when
5868 explicit references to __main__.__dict__ are gone (except when
5864 really needed) and everything is handled through the namespace
5869 really needed) and everything is handled through the namespace
5865 dicts in the IPython instance. We seem to be getting somewhere
5870 dicts in the IPython instance. We seem to be getting somewhere
5866 with this, finally...
5871 with this, finally...
5867
5872
5868 * Small documentation updates.
5873 * Small documentation updates.
5869
5874
5870 * Created the Extensions directory under IPython (with an
5875 * Created the Extensions directory under IPython (with an
5871 __init__.py). Put the PhysicalQ stuff there. This directory should
5876 __init__.py). Put the PhysicalQ stuff there. This directory should
5872 be used for all special-purpose extensions.
5877 be used for all special-purpose extensions.
5873
5878
5874 * File renaming:
5879 * File renaming:
5875 ipythonlib --> ipmaker
5880 ipythonlib --> ipmaker
5876 ipplib --> iplib
5881 ipplib --> iplib
5877 This makes a bit more sense in terms of what these files actually do.
5882 This makes a bit more sense in terms of what these files actually do.
5878
5883
5879 * Moved all the classes and functions in ipythonlib to ipplib, so
5884 * Moved all the classes and functions in ipythonlib to ipplib, so
5880 now ipythonlib only has make_IPython(). This will ease up its
5885 now ipythonlib only has make_IPython(). This will ease up its
5881 splitting in smaller functional chunks later.
5886 splitting in smaller functional chunks later.
5882
5887
5883 * Cleaned up (done, I think) output of @whos. Better column
5888 * Cleaned up (done, I think) output of @whos. Better column
5884 formatting, and now shows str(var) for as much as it can, which is
5889 formatting, and now shows str(var) for as much as it can, which is
5885 typically what one gets with a 'print var'.
5890 typically what one gets with a 'print var'.
5886
5891
5887 2001-12-04 Fernando Perez <fperez@colorado.edu>
5892 2001-12-04 Fernando Perez <fperez@colorado.edu>
5888
5893
5889 * Fixed namespace problems. Now builtin/IPyhton/user names get
5894 * Fixed namespace problems. Now builtin/IPyhton/user names get
5890 properly reported in their namespace. Internal namespace handling
5895 properly reported in their namespace. Internal namespace handling
5891 is finally getting decent (not perfect yet, but much better than
5896 is finally getting decent (not perfect yet, but much better than
5892 the ad-hoc mess we had).
5897 the ad-hoc mess we had).
5893
5898
5894 * Removed -exit option. If people just want to run a python
5899 * Removed -exit option. If people just want to run a python
5895 script, that's what the normal interpreter is for. Less
5900 script, that's what the normal interpreter is for. Less
5896 unnecessary options, less chances for bugs.
5901 unnecessary options, less chances for bugs.
5897
5902
5898 * Added a crash handler which generates a complete post-mortem if
5903 * Added a crash handler which generates a complete post-mortem if
5899 IPython crashes. This will help a lot in tracking bugs down the
5904 IPython crashes. This will help a lot in tracking bugs down the
5900 road.
5905 road.
5901
5906
5902 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5907 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5903 which were boud to functions being reassigned would bypass the
5908 which were boud to functions being reassigned would bypass the
5904 logger, breaking the sync of _il with the prompt counter. This
5909 logger, breaking the sync of _il with the prompt counter. This
5905 would then crash IPython later when a new line was logged.
5910 would then crash IPython later when a new line was logged.
5906
5911
5907 2001-12-02 Fernando Perez <fperez@colorado.edu>
5912 2001-12-02 Fernando Perez <fperez@colorado.edu>
5908
5913
5909 * Made IPython a package. This means people don't have to clutter
5914 * Made IPython a package. This means people don't have to clutter
5910 their sys.path with yet another directory. Changed the INSTALL
5915 their sys.path with yet another directory. Changed the INSTALL
5911 file accordingly.
5916 file accordingly.
5912
5917
5913 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5918 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5914 sorts its output (so @who shows it sorted) and @whos formats the
5919 sorts its output (so @who shows it sorted) and @whos formats the
5915 table according to the width of the first column. Nicer, easier to
5920 table according to the width of the first column. Nicer, easier to
5916 read. Todo: write a generic table_format() which takes a list of
5921 read. Todo: write a generic table_format() which takes a list of
5917 lists and prints it nicely formatted, with optional row/column
5922 lists and prints it nicely formatted, with optional row/column
5918 separators and proper padding and justification.
5923 separators and proper padding and justification.
5919
5924
5920 * Released 0.1.20
5925 * Released 0.1.20
5921
5926
5922 * Fixed bug in @log which would reverse the inputcache list (a
5927 * Fixed bug in @log which would reverse the inputcache list (a
5923 copy operation was missing).
5928 copy operation was missing).
5924
5929
5925 * Code cleanup. @config was changed to use page(). Better, since
5930 * Code cleanup. @config was changed to use page(). Better, since
5926 its output is always quite long.
5931 its output is always quite long.
5927
5932
5928 * Itpl is back as a dependency. I was having too many problems
5933 * Itpl is back as a dependency. I was having too many problems
5929 getting the parametric aliases to work reliably, and it's just
5934 getting the parametric aliases to work reliably, and it's just
5930 easier to code weird string operations with it than playing %()s
5935 easier to code weird string operations with it than playing %()s
5931 games. It's only ~6k, so I don't think it's too big a deal.
5936 games. It's only ~6k, so I don't think it's too big a deal.
5932
5937
5933 * Found (and fixed) a very nasty bug with history. !lines weren't
5938 * Found (and fixed) a very nasty bug with history. !lines weren't
5934 getting cached, and the out of sync caches would crash
5939 getting cached, and the out of sync caches would crash
5935 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5940 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5936 division of labor a bit better. Bug fixed, cleaner structure.
5941 division of labor a bit better. Bug fixed, cleaner structure.
5937
5942
5938 2001-12-01 Fernando Perez <fperez@colorado.edu>
5943 2001-12-01 Fernando Perez <fperez@colorado.edu>
5939
5944
5940 * Released 0.1.19
5945 * Released 0.1.19
5941
5946
5942 * Added option -n to @hist to prevent line number printing. Much
5947 * Added option -n to @hist to prevent line number printing. Much
5943 easier to copy/paste code this way.
5948 easier to copy/paste code this way.
5944
5949
5945 * Created global _il to hold the input list. Allows easy
5950 * Created global _il to hold the input list. Allows easy
5946 re-execution of blocks of code by slicing it (inspired by Janko's
5951 re-execution of blocks of code by slicing it (inspired by Janko's
5947 comment on 'macros').
5952 comment on 'macros').
5948
5953
5949 * Small fixes and doc updates.
5954 * Small fixes and doc updates.
5950
5955
5951 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5956 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5952 much too fragile with automagic. Handles properly multi-line
5957 much too fragile with automagic. Handles properly multi-line
5953 statements and takes parameters.
5958 statements and takes parameters.
5954
5959
5955 2001-11-30 Fernando Perez <fperez@colorado.edu>
5960 2001-11-30 Fernando Perez <fperez@colorado.edu>
5956
5961
5957 * Version 0.1.18 released.
5962 * Version 0.1.18 released.
5958
5963
5959 * Fixed nasty namespace bug in initial module imports.
5964 * Fixed nasty namespace bug in initial module imports.
5960
5965
5961 * Added copyright/license notes to all code files (except
5966 * Added copyright/license notes to all code files (except
5962 DPyGetOpt). For the time being, LGPL. That could change.
5967 DPyGetOpt). For the time being, LGPL. That could change.
5963
5968
5964 * Rewrote a much nicer README, updated INSTALL, cleaned up
5969 * Rewrote a much nicer README, updated INSTALL, cleaned up
5965 ipythonrc-* samples.
5970 ipythonrc-* samples.
5966
5971
5967 * Overall code/documentation cleanup. Basically ready for
5972 * Overall code/documentation cleanup. Basically ready for
5968 release. Only remaining thing: licence decision (LGPL?).
5973 release. Only remaining thing: licence decision (LGPL?).
5969
5974
5970 * Converted load_config to a class, ConfigLoader. Now recursion
5975 * Converted load_config to a class, ConfigLoader. Now recursion
5971 control is better organized. Doesn't include the same file twice.
5976 control is better organized. Doesn't include the same file twice.
5972
5977
5973 2001-11-29 Fernando Perez <fperez@colorado.edu>
5978 2001-11-29 Fernando Perez <fperez@colorado.edu>
5974
5979
5975 * Got input history working. Changed output history variables from
5980 * Got input history working. Changed output history variables from
5976 _p to _o so that _i is for input and _o for output. Just cleaner
5981 _p to _o so that _i is for input and _o for output. Just cleaner
5977 convention.
5982 convention.
5978
5983
5979 * Implemented parametric aliases. This pretty much allows the
5984 * Implemented parametric aliases. This pretty much allows the
5980 alias system to offer full-blown shell convenience, I think.
5985 alias system to offer full-blown shell convenience, I think.
5981
5986
5982 * Version 0.1.17 released, 0.1.18 opened.
5987 * Version 0.1.17 released, 0.1.18 opened.
5983
5988
5984 * dot_ipython/ipythonrc (alias): added documentation.
5989 * dot_ipython/ipythonrc (alias): added documentation.
5985 (xcolor): Fixed small bug (xcolors -> xcolor)
5990 (xcolor): Fixed small bug (xcolors -> xcolor)
5986
5991
5987 * Changed the alias system. Now alias is a magic command to define
5992 * Changed the alias system. Now alias is a magic command to define
5988 aliases just like the shell. Rationale: the builtin magics should
5993 aliases just like the shell. Rationale: the builtin magics should
5989 be there for things deeply connected to IPython's
5994 be there for things deeply connected to IPython's
5990 architecture. And this is a much lighter system for what I think
5995 architecture. And this is a much lighter system for what I think
5991 is the really important feature: allowing users to define quickly
5996 is the really important feature: allowing users to define quickly
5992 magics that will do shell things for them, so they can customize
5997 magics that will do shell things for them, so they can customize
5993 IPython easily to match their work habits. If someone is really
5998 IPython easily to match their work habits. If someone is really
5994 desperate to have another name for a builtin alias, they can
5999 desperate to have another name for a builtin alias, they can
5995 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
6000 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5996 works.
6001 works.
5997
6002
5998 2001-11-28 Fernando Perez <fperez@colorado.edu>
6003 2001-11-28 Fernando Perez <fperez@colorado.edu>
5999
6004
6000 * Changed @file so that it opens the source file at the proper
6005 * Changed @file so that it opens the source file at the proper
6001 line. Since it uses less, if your EDITOR environment is
6006 line. Since it uses less, if your EDITOR environment is
6002 configured, typing v will immediately open your editor of choice
6007 configured, typing v will immediately open your editor of choice
6003 right at the line where the object is defined. Not as quick as
6008 right at the line where the object is defined. Not as quick as
6004 having a direct @edit command, but for all intents and purposes it
6009 having a direct @edit command, but for all intents and purposes it
6005 works. And I don't have to worry about writing @edit to deal with
6010 works. And I don't have to worry about writing @edit to deal with
6006 all the editors, less does that.
6011 all the editors, less does that.
6007
6012
6008 * Version 0.1.16 released, 0.1.17 opened.
6013 * Version 0.1.16 released, 0.1.17 opened.
6009
6014
6010 * Fixed some nasty bugs in the page/page_dumb combo that could
6015 * Fixed some nasty bugs in the page/page_dumb combo that could
6011 crash IPython.
6016 crash IPython.
6012
6017
6013 2001-11-27 Fernando Perez <fperez@colorado.edu>
6018 2001-11-27 Fernando Perez <fperez@colorado.edu>
6014
6019
6015 * Version 0.1.15 released, 0.1.16 opened.
6020 * Version 0.1.15 released, 0.1.16 opened.
6016
6021
6017 * Finally got ? and ?? to work for undefined things: now it's
6022 * Finally got ? and ?? to work for undefined things: now it's
6018 possible to type {}.get? and get information about the get method
6023 possible to type {}.get? and get information about the get method
6019 of dicts, or os.path? even if only os is defined (so technically
6024 of dicts, or os.path? even if only os is defined (so technically
6020 os.path isn't). Works at any level. For example, after import os,
6025 os.path isn't). Works at any level. For example, after import os,
6021 os?, os.path?, os.path.abspath? all work. This is great, took some
6026 os?, os.path?, os.path.abspath? all work. This is great, took some
6022 work in _ofind.
6027 work in _ofind.
6023
6028
6024 * Fixed more bugs with logging. The sanest way to do it was to add
6029 * Fixed more bugs with logging. The sanest way to do it was to add
6025 to @log a 'mode' parameter. Killed two in one shot (this mode
6030 to @log a 'mode' parameter. Killed two in one shot (this mode
6026 option was a request of Janko's). I think it's finally clean
6031 option was a request of Janko's). I think it's finally clean
6027 (famous last words).
6032 (famous last words).
6028
6033
6029 * Added a page_dumb() pager which does a decent job of paging on
6034 * Added a page_dumb() pager which does a decent job of paging on
6030 screen, if better things (like less) aren't available. One less
6035 screen, if better things (like less) aren't available. One less
6031 unix dependency (someday maybe somebody will port this to
6036 unix dependency (someday maybe somebody will port this to
6032 windows).
6037 windows).
6033
6038
6034 * Fixed problem in magic_log: would lock of logging out if log
6039 * Fixed problem in magic_log: would lock of logging out if log
6035 creation failed (because it would still think it had succeeded).
6040 creation failed (because it would still think it had succeeded).
6036
6041
6037 * Improved the page() function using curses to auto-detect screen
6042 * Improved the page() function using curses to auto-detect screen
6038 size. Now it can make a much better decision on whether to print
6043 size. Now it can make a much better decision on whether to print
6039 or page a string. Option screen_length was modified: a value 0
6044 or page a string. Option screen_length was modified: a value 0
6040 means auto-detect, and that's the default now.
6045 means auto-detect, and that's the default now.
6041
6046
6042 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
6047 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
6043 go out. I'll test it for a few days, then talk to Janko about
6048 go out. I'll test it for a few days, then talk to Janko about
6044 licences and announce it.
6049 licences and announce it.
6045
6050
6046 * Fixed the length of the auto-generated ---> prompt which appears
6051 * Fixed the length of the auto-generated ---> prompt which appears
6047 for auto-parens and auto-quotes. Getting this right isn't trivial,
6052 for auto-parens and auto-quotes. Getting this right isn't trivial,
6048 with all the color escapes, different prompt types and optional
6053 with all the color escapes, different prompt types and optional
6049 separators. But it seems to be working in all the combinations.
6054 separators. But it seems to be working in all the combinations.
6050
6055
6051 2001-11-26 Fernando Perez <fperez@colorado.edu>
6056 2001-11-26 Fernando Perez <fperez@colorado.edu>
6052
6057
6053 * Wrote a regexp filter to get option types from the option names
6058 * Wrote a regexp filter to get option types from the option names
6054 string. This eliminates the need to manually keep two duplicate
6059 string. This eliminates the need to manually keep two duplicate
6055 lists.
6060 lists.
6056
6061
6057 * Removed the unneeded check_option_names. Now options are handled
6062 * Removed the unneeded check_option_names. Now options are handled
6058 in a much saner manner and it's easy to visually check that things
6063 in a much saner manner and it's easy to visually check that things
6059 are ok.
6064 are ok.
6060
6065
6061 * Updated version numbers on all files I modified to carry a
6066 * Updated version numbers on all files I modified to carry a
6062 notice so Janko and Nathan have clear version markers.
6067 notice so Janko and Nathan have clear version markers.
6063
6068
6064 * Updated docstring for ultraTB with my changes. I should send
6069 * Updated docstring for ultraTB with my changes. I should send
6065 this to Nathan.
6070 this to Nathan.
6066
6071
6067 * Lots of small fixes. Ran everything through pychecker again.
6072 * Lots of small fixes. Ran everything through pychecker again.
6068
6073
6069 * Made loading of deep_reload an cmd line option. If it's not too
6074 * Made loading of deep_reload an cmd line option. If it's not too
6070 kosher, now people can just disable it. With -nodeep_reload it's
6075 kosher, now people can just disable it. With -nodeep_reload it's
6071 still available as dreload(), it just won't overwrite reload().
6076 still available as dreload(), it just won't overwrite reload().
6072
6077
6073 * Moved many options to the no| form (-opt and -noopt
6078 * Moved many options to the no| form (-opt and -noopt
6074 accepted). Cleaner.
6079 accepted). Cleaner.
6075
6080
6076 * Changed magic_log so that if called with no parameters, it uses
6081 * Changed magic_log so that if called with no parameters, it uses
6077 'rotate' mode. That way auto-generated logs aren't automatically
6082 'rotate' mode. That way auto-generated logs aren't automatically
6078 over-written. For normal logs, now a backup is made if it exists
6083 over-written. For normal logs, now a backup is made if it exists
6079 (only 1 level of backups). A new 'backup' mode was added to the
6084 (only 1 level of backups). A new 'backup' mode was added to the
6080 Logger class to support this. This was a request by Janko.
6085 Logger class to support this. This was a request by Janko.
6081
6086
6082 * Added @logoff/@logon to stop/restart an active log.
6087 * Added @logoff/@logon to stop/restart an active log.
6083
6088
6084 * Fixed a lot of bugs in log saving/replay. It was pretty
6089 * Fixed a lot of bugs in log saving/replay. It was pretty
6085 broken. Now special lines (!@,/) appear properly in the command
6090 broken. Now special lines (!@,/) appear properly in the command
6086 history after a log replay.
6091 history after a log replay.
6087
6092
6088 * Tried and failed to implement full session saving via pickle. My
6093 * Tried and failed to implement full session saving via pickle. My
6089 idea was to pickle __main__.__dict__, but modules can't be
6094 idea was to pickle __main__.__dict__, but modules can't be
6090 pickled. This would be a better alternative to replaying logs, but
6095 pickled. This would be a better alternative to replaying logs, but
6091 seems quite tricky to get to work. Changed -session to be called
6096 seems quite tricky to get to work. Changed -session to be called
6092 -logplay, which more accurately reflects what it does. And if we
6097 -logplay, which more accurately reflects what it does. And if we
6093 ever get real session saving working, -session is now available.
6098 ever get real session saving working, -session is now available.
6094
6099
6095 * Implemented color schemes for prompts also. As for tracebacks,
6100 * Implemented color schemes for prompts also. As for tracebacks,
6096 currently only NoColor and Linux are supported. But now the
6101 currently only NoColor and Linux are supported. But now the
6097 infrastructure is in place, based on a generic ColorScheme
6102 infrastructure is in place, based on a generic ColorScheme
6098 class. So writing and activating new schemes both for the prompts
6103 class. So writing and activating new schemes both for the prompts
6099 and the tracebacks should be straightforward.
6104 and the tracebacks should be straightforward.
6100
6105
6101 * Version 0.1.13 released, 0.1.14 opened.
6106 * Version 0.1.13 released, 0.1.14 opened.
6102
6107
6103 * Changed handling of options for output cache. Now counter is
6108 * Changed handling of options for output cache. Now counter is
6104 hardwired starting at 1 and one specifies the maximum number of
6109 hardwired starting at 1 and one specifies the maximum number of
6105 entries *in the outcache* (not the max prompt counter). This is
6110 entries *in the outcache* (not the max prompt counter). This is
6106 much better, since many statements won't increase the cache
6111 much better, since many statements won't increase the cache
6107 count. It also eliminated some confusing options, now there's only
6112 count. It also eliminated some confusing options, now there's only
6108 one: cache_size.
6113 one: cache_size.
6109
6114
6110 * Added 'alias' magic function and magic_alias option in the
6115 * Added 'alias' magic function and magic_alias option in the
6111 ipythonrc file. Now the user can easily define whatever names he
6116 ipythonrc file. Now the user can easily define whatever names he
6112 wants for the magic functions without having to play weird
6117 wants for the magic functions without having to play weird
6113 namespace games. This gives IPython a real shell-like feel.
6118 namespace games. This gives IPython a real shell-like feel.
6114
6119
6115 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
6120 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
6116 @ or not).
6121 @ or not).
6117
6122
6118 This was one of the last remaining 'visible' bugs (that I know
6123 This was one of the last remaining 'visible' bugs (that I know
6119 of). I think if I can clean up the session loading so it works
6124 of). I think if I can clean up the session loading so it works
6120 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
6125 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
6121 about licensing).
6126 about licensing).
6122
6127
6123 2001-11-25 Fernando Perez <fperez@colorado.edu>
6128 2001-11-25 Fernando Perez <fperez@colorado.edu>
6124
6129
6125 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
6130 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
6126 there's a cleaner distinction between what ? and ?? show.
6131 there's a cleaner distinction between what ? and ?? show.
6127
6132
6128 * Added screen_length option. Now the user can define his own
6133 * Added screen_length option. Now the user can define his own
6129 screen size for page() operations.
6134 screen size for page() operations.
6130
6135
6131 * Implemented magic shell-like functions with automatic code
6136 * Implemented magic shell-like functions with automatic code
6132 generation. Now adding another function is just a matter of adding
6137 generation. Now adding another function is just a matter of adding
6133 an entry to a dict, and the function is dynamically generated at
6138 an entry to a dict, and the function is dynamically generated at
6134 run-time. Python has some really cool features!
6139 run-time. Python has some really cool features!
6135
6140
6136 * Renamed many options to cleanup conventions a little. Now all
6141 * Renamed many options to cleanup conventions a little. Now all
6137 are lowercase, and only underscores where needed. Also in the code
6142 are lowercase, and only underscores where needed. Also in the code
6138 option name tables are clearer.
6143 option name tables are clearer.
6139
6144
6140 * Changed prompts a little. Now input is 'In [n]:' instead of
6145 * Changed prompts a little. Now input is 'In [n]:' instead of
6141 'In[n]:='. This allows it the numbers to be aligned with the
6146 'In[n]:='. This allows it the numbers to be aligned with the
6142 Out[n] numbers, and removes usage of ':=' which doesn't exist in
6147 Out[n] numbers, and removes usage of ':=' which doesn't exist in
6143 Python (it was a Mathematica thing). The '...' continuation prompt
6148 Python (it was a Mathematica thing). The '...' continuation prompt
6144 was also changed a little to align better.
6149 was also changed a little to align better.
6145
6150
6146 * Fixed bug when flushing output cache. Not all _p<n> variables
6151 * Fixed bug when flushing output cache. Not all _p<n> variables
6147 exist, so their deletion needs to be wrapped in a try:
6152 exist, so their deletion needs to be wrapped in a try:
6148
6153
6149 * Figured out how to properly use inspect.formatargspec() (it
6154 * Figured out how to properly use inspect.formatargspec() (it
6150 requires the args preceded by *). So I removed all the code from
6155 requires the args preceded by *). So I removed all the code from
6151 _get_pdef in Magic, which was just replicating that.
6156 _get_pdef in Magic, which was just replicating that.
6152
6157
6153 * Added test to prefilter to allow redefining magic function names
6158 * Added test to prefilter to allow redefining magic function names
6154 as variables. This is ok, since the @ form is always available,
6159 as variables. This is ok, since the @ form is always available,
6155 but whe should allow the user to define a variable called 'ls' if
6160 but whe should allow the user to define a variable called 'ls' if
6156 he needs it.
6161 he needs it.
6157
6162
6158 * Moved the ToDo information from README into a separate ToDo.
6163 * Moved the ToDo information from README into a separate ToDo.
6159
6164
6160 * General code cleanup and small bugfixes. I think it's close to a
6165 * General code cleanup and small bugfixes. I think it's close to a
6161 state where it can be released, obviously with a big 'beta'
6166 state where it can be released, obviously with a big 'beta'
6162 warning on it.
6167 warning on it.
6163
6168
6164 * Got the magic function split to work. Now all magics are defined
6169 * Got the magic function split to work. Now all magics are defined
6165 in a separate class. It just organizes things a bit, and now
6170 in a separate class. It just organizes things a bit, and now
6166 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
6171 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
6167 was too long).
6172 was too long).
6168
6173
6169 * Changed @clear to @reset to avoid potential confusions with
6174 * Changed @clear to @reset to avoid potential confusions with
6170 the shell command clear. Also renamed @cl to @clear, which does
6175 the shell command clear. Also renamed @cl to @clear, which does
6171 exactly what people expect it to from their shell experience.
6176 exactly what people expect it to from their shell experience.
6172
6177
6173 Added a check to the @reset command (since it's so
6178 Added a check to the @reset command (since it's so
6174 destructive, it's probably a good idea to ask for confirmation).
6179 destructive, it's probably a good idea to ask for confirmation).
6175 But now reset only works for full namespace resetting. Since the
6180 But now reset only works for full namespace resetting. Since the
6176 del keyword is already there for deleting a few specific
6181 del keyword is already there for deleting a few specific
6177 variables, I don't see the point of having a redundant magic
6182 variables, I don't see the point of having a redundant magic
6178 function for the same task.
6183 function for the same task.
6179
6184
6180 2001-11-24 Fernando Perez <fperez@colorado.edu>
6185 2001-11-24 Fernando Perez <fperez@colorado.edu>
6181
6186
6182 * Updated the builtin docs (esp. the ? ones).
6187 * Updated the builtin docs (esp. the ? ones).
6183
6188
6184 * Ran all the code through pychecker. Not terribly impressed with
6189 * Ran all the code through pychecker. Not terribly impressed with
6185 it: lots of spurious warnings and didn't really find anything of
6190 it: lots of spurious warnings and didn't really find anything of
6186 substance (just a few modules being imported and not used).
6191 substance (just a few modules being imported and not used).
6187
6192
6188 * Implemented the new ultraTB functionality into IPython. New
6193 * Implemented the new ultraTB functionality into IPython. New
6189 option: xcolors. This chooses color scheme. xmode now only selects
6194 option: xcolors. This chooses color scheme. xmode now only selects
6190 between Plain and Verbose. Better orthogonality.
6195 between Plain and Verbose. Better orthogonality.
6191
6196
6192 * Large rewrite of ultraTB. Much cleaner now, with a separation of
6197 * Large rewrite of ultraTB. Much cleaner now, with a separation of
6193 mode and color scheme for the exception handlers. Now it's
6198 mode and color scheme for the exception handlers. Now it's
6194 possible to have the verbose traceback with no coloring.
6199 possible to have the verbose traceback with no coloring.
6195
6200
6196 2001-11-23 Fernando Perez <fperez@colorado.edu>
6201 2001-11-23 Fernando Perez <fperez@colorado.edu>
6197
6202
6198 * Version 0.1.12 released, 0.1.13 opened.
6203 * Version 0.1.12 released, 0.1.13 opened.
6199
6204
6200 * Removed option to set auto-quote and auto-paren escapes by
6205 * Removed option to set auto-quote and auto-paren escapes by
6201 user. The chances of breaking valid syntax are just too high. If
6206 user. The chances of breaking valid syntax are just too high. If
6202 someone *really* wants, they can always dig into the code.
6207 someone *really* wants, they can always dig into the code.
6203
6208
6204 * Made prompt separators configurable.
6209 * Made prompt separators configurable.
6205
6210
6206 2001-11-22 Fernando Perez <fperez@colorado.edu>
6211 2001-11-22 Fernando Perez <fperez@colorado.edu>
6207
6212
6208 * Small bugfixes in many places.
6213 * Small bugfixes in many places.
6209
6214
6210 * Removed the MyCompleter class from ipplib. It seemed redundant
6215 * Removed the MyCompleter class from ipplib. It seemed redundant
6211 with the C-p,C-n history search functionality. Less code to
6216 with the C-p,C-n history search functionality. Less code to
6212 maintain.
6217 maintain.
6213
6218
6214 * Moved all the original ipython.py code into ipythonlib.py. Right
6219 * Moved all the original ipython.py code into ipythonlib.py. Right
6215 now it's just one big dump into a function called make_IPython, so
6220 now it's just one big dump into a function called make_IPython, so
6216 no real modularity has been gained. But at least it makes the
6221 no real modularity has been gained. But at least it makes the
6217 wrapper script tiny, and since ipythonlib is a module, it gets
6222 wrapper script tiny, and since ipythonlib is a module, it gets
6218 compiled and startup is much faster.
6223 compiled and startup is much faster.
6219
6224
6220 This is a reasobably 'deep' change, so we should test it for a
6225 This is a reasobably 'deep' change, so we should test it for a
6221 while without messing too much more with the code.
6226 while without messing too much more with the code.
6222
6227
6223 2001-11-21 Fernando Perez <fperez@colorado.edu>
6228 2001-11-21 Fernando Perez <fperez@colorado.edu>
6224
6229
6225 * Version 0.1.11 released, 0.1.12 opened for further work.
6230 * Version 0.1.11 released, 0.1.12 opened for further work.
6226
6231
6227 * Removed dependency on Itpl. It was only needed in one place. It
6232 * Removed dependency on Itpl. It was only needed in one place. It
6228 would be nice if this became part of python, though. It makes life
6233 would be nice if this became part of python, though. It makes life
6229 *a lot* easier in some cases.
6234 *a lot* easier in some cases.
6230
6235
6231 * Simplified the prefilter code a bit. Now all handlers are
6236 * Simplified the prefilter code a bit. Now all handlers are
6232 expected to explicitly return a value (at least a blank string).
6237 expected to explicitly return a value (at least a blank string).
6233
6238
6234 * Heavy edits in ipplib. Removed the help system altogether. Now
6239 * Heavy edits in ipplib. Removed the help system altogether. Now
6235 obj?/?? is used for inspecting objects, a magic @doc prints
6240 obj?/?? is used for inspecting objects, a magic @doc prints
6236 docstrings, and full-blown Python help is accessed via the 'help'
6241 docstrings, and full-blown Python help is accessed via the 'help'
6237 keyword. This cleans up a lot of code (less to maintain) and does
6242 keyword. This cleans up a lot of code (less to maintain) and does
6238 the job. Since 'help' is now a standard Python component, might as
6243 the job. Since 'help' is now a standard Python component, might as
6239 well use it and remove duplicate functionality.
6244 well use it and remove duplicate functionality.
6240
6245
6241 Also removed the option to use ipplib as a standalone program. By
6246 Also removed the option to use ipplib as a standalone program. By
6242 now it's too dependent on other parts of IPython to function alone.
6247 now it's too dependent on other parts of IPython to function alone.
6243
6248
6244 * Fixed bug in genutils.pager. It would crash if the pager was
6249 * Fixed bug in genutils.pager. It would crash if the pager was
6245 exited immediately after opening (broken pipe).
6250 exited immediately after opening (broken pipe).
6246
6251
6247 * Trimmed down the VerboseTB reporting a little. The header is
6252 * Trimmed down the VerboseTB reporting a little. The header is
6248 much shorter now and the repeated exception arguments at the end
6253 much shorter now and the repeated exception arguments at the end
6249 have been removed. For interactive use the old header seemed a bit
6254 have been removed. For interactive use the old header seemed a bit
6250 excessive.
6255 excessive.
6251
6256
6252 * Fixed small bug in output of @whos for variables with multi-word
6257 * Fixed small bug in output of @whos for variables with multi-word
6253 types (only first word was displayed).
6258 types (only first word was displayed).
6254
6259
6255 2001-11-17 Fernando Perez <fperez@colorado.edu>
6260 2001-11-17 Fernando Perez <fperez@colorado.edu>
6256
6261
6257 * Version 0.1.10 released, 0.1.11 opened for further work.
6262 * Version 0.1.10 released, 0.1.11 opened for further work.
6258
6263
6259 * Modified dirs and friends. dirs now *returns* the stack (not
6264 * Modified dirs and friends. dirs now *returns* the stack (not
6260 prints), so one can manipulate it as a variable. Convenient to
6265 prints), so one can manipulate it as a variable. Convenient to
6261 travel along many directories.
6266 travel along many directories.
6262
6267
6263 * Fixed bug in magic_pdef: would only work with functions with
6268 * Fixed bug in magic_pdef: would only work with functions with
6264 arguments with default values.
6269 arguments with default values.
6265
6270
6266 2001-11-14 Fernando Perez <fperez@colorado.edu>
6271 2001-11-14 Fernando Perez <fperez@colorado.edu>
6267
6272
6268 * Added the PhysicsInput stuff to dot_ipython so it ships as an
6273 * Added the PhysicsInput stuff to dot_ipython so it ships as an
6269 example with IPython. Various other minor fixes and cleanups.
6274 example with IPython. Various other minor fixes and cleanups.
6270
6275
6271 * Version 0.1.9 released, 0.1.10 opened for further work.
6276 * Version 0.1.9 released, 0.1.10 opened for further work.
6272
6277
6273 * Added sys.path to the list of directories searched in the
6278 * Added sys.path to the list of directories searched in the
6274 execfile= option. It used to be the current directory and the
6279 execfile= option. It used to be the current directory and the
6275 user's IPYTHONDIR only.
6280 user's IPYTHONDIR only.
6276
6281
6277 2001-11-13 Fernando Perez <fperez@colorado.edu>
6282 2001-11-13 Fernando Perez <fperez@colorado.edu>
6278
6283
6279 * Reinstated the raw_input/prefilter separation that Janko had
6284 * Reinstated the raw_input/prefilter separation that Janko had
6280 initially. This gives a more convenient setup for extending the
6285 initially. This gives a more convenient setup for extending the
6281 pre-processor from the outside: raw_input always gets a string,
6286 pre-processor from the outside: raw_input always gets a string,
6282 and prefilter has to process it. We can then redefine prefilter
6287 and prefilter has to process it. We can then redefine prefilter
6283 from the outside and implement extensions for special
6288 from the outside and implement extensions for special
6284 purposes.
6289 purposes.
6285
6290
6286 Today I got one for inputting PhysicalQuantity objects
6291 Today I got one for inputting PhysicalQuantity objects
6287 (from Scientific) without needing any function calls at
6292 (from Scientific) without needing any function calls at
6288 all. Extremely convenient, and it's all done as a user-level
6293 all. Extremely convenient, and it's all done as a user-level
6289 extension (no IPython code was touched). Now instead of:
6294 extension (no IPython code was touched). Now instead of:
6290 a = PhysicalQuantity(4.2,'m/s**2')
6295 a = PhysicalQuantity(4.2,'m/s**2')
6291 one can simply say
6296 one can simply say
6292 a = 4.2 m/s**2
6297 a = 4.2 m/s**2
6293 or even
6298 or even
6294 a = 4.2 m/s^2
6299 a = 4.2 m/s^2
6295
6300
6296 I use this, but it's also a proof of concept: IPython really is
6301 I use this, but it's also a proof of concept: IPython really is
6297 fully user-extensible, even at the level of the parsing of the
6302 fully user-extensible, even at the level of the parsing of the
6298 command line. It's not trivial, but it's perfectly doable.
6303 command line. It's not trivial, but it's perfectly doable.
6299
6304
6300 * Added 'add_flip' method to inclusion conflict resolver. Fixes
6305 * Added 'add_flip' method to inclusion conflict resolver. Fixes
6301 the problem of modules being loaded in the inverse order in which
6306 the problem of modules being loaded in the inverse order in which
6302 they were defined in
6307 they were defined in
6303
6308
6304 * Version 0.1.8 released, 0.1.9 opened for further work.
6309 * Version 0.1.8 released, 0.1.9 opened for further work.
6305
6310
6306 * Added magics pdef, source and file. They respectively show the
6311 * Added magics pdef, source and file. They respectively show the
6307 definition line ('prototype' in C), source code and full python
6312 definition line ('prototype' in C), source code and full python
6308 file for any callable object. The object inspector oinfo uses
6313 file for any callable object. The object inspector oinfo uses
6309 these to show the same information.
6314 these to show the same information.
6310
6315
6311 * Version 0.1.7 released, 0.1.8 opened for further work.
6316 * Version 0.1.7 released, 0.1.8 opened for further work.
6312
6317
6313 * Separated all the magic functions into a class called Magic. The
6318 * Separated all the magic functions into a class called Magic. The
6314 InteractiveShell class was becoming too big for Xemacs to handle
6319 InteractiveShell class was becoming too big for Xemacs to handle
6315 (de-indenting a line would lock it up for 10 seconds while it
6320 (de-indenting a line would lock it up for 10 seconds while it
6316 backtracked on the whole class!)
6321 backtracked on the whole class!)
6317
6322
6318 FIXME: didn't work. It can be done, but right now namespaces are
6323 FIXME: didn't work. It can be done, but right now namespaces are
6319 all messed up. Do it later (reverted it for now, so at least
6324 all messed up. Do it later (reverted it for now, so at least
6320 everything works as before).
6325 everything works as before).
6321
6326
6322 * Got the object introspection system (magic_oinfo) working! I
6327 * Got the object introspection system (magic_oinfo) working! I
6323 think this is pretty much ready for release to Janko, so he can
6328 think this is pretty much ready for release to Janko, so he can
6324 test it for a while and then announce it. Pretty much 100% of what
6329 test it for a while and then announce it. Pretty much 100% of what
6325 I wanted for the 'phase 1' release is ready. Happy, tired.
6330 I wanted for the 'phase 1' release is ready. Happy, tired.
6326
6331
6327 2001-11-12 Fernando Perez <fperez@colorado.edu>
6332 2001-11-12 Fernando Perez <fperez@colorado.edu>
6328
6333
6329 * Version 0.1.6 released, 0.1.7 opened for further work.
6334 * Version 0.1.6 released, 0.1.7 opened for further work.
6330
6335
6331 * Fixed bug in printing: it used to test for truth before
6336 * Fixed bug in printing: it used to test for truth before
6332 printing, so 0 wouldn't print. Now checks for None.
6337 printing, so 0 wouldn't print. Now checks for None.
6333
6338
6334 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
6339 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
6335 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
6340 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
6336 reaches by hand into the outputcache. Think of a better way to do
6341 reaches by hand into the outputcache. Think of a better way to do
6337 this later.
6342 this later.
6338
6343
6339 * Various small fixes thanks to Nathan's comments.
6344 * Various small fixes thanks to Nathan's comments.
6340
6345
6341 * Changed magic_pprint to magic_Pprint. This way it doesn't
6346 * Changed magic_pprint to magic_Pprint. This way it doesn't
6342 collide with pprint() and the name is consistent with the command
6347 collide with pprint() and the name is consistent with the command
6343 line option.
6348 line option.
6344
6349
6345 * Changed prompt counter behavior to be fully like
6350 * Changed prompt counter behavior to be fully like
6346 Mathematica's. That is, even input that doesn't return a result
6351 Mathematica's. That is, even input that doesn't return a result
6347 raises the prompt counter. The old behavior was kind of confusing
6352 raises the prompt counter. The old behavior was kind of confusing
6348 (getting the same prompt number several times if the operation
6353 (getting the same prompt number several times if the operation
6349 didn't return a result).
6354 didn't return a result).
6350
6355
6351 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
6356 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
6352
6357
6353 * Fixed -Classic mode (wasn't working anymore).
6358 * Fixed -Classic mode (wasn't working anymore).
6354
6359
6355 * Added colored prompts using Nathan's new code. Colors are
6360 * Added colored prompts using Nathan's new code. Colors are
6356 currently hardwired, they can be user-configurable. For
6361 currently hardwired, they can be user-configurable. For
6357 developers, they can be chosen in file ipythonlib.py, at the
6362 developers, they can be chosen in file ipythonlib.py, at the
6358 beginning of the CachedOutput class def.
6363 beginning of the CachedOutput class def.
6359
6364
6360 2001-11-11 Fernando Perez <fperez@colorado.edu>
6365 2001-11-11 Fernando Perez <fperez@colorado.edu>
6361
6366
6362 * Version 0.1.5 released, 0.1.6 opened for further work.
6367 * Version 0.1.5 released, 0.1.6 opened for further work.
6363
6368
6364 * Changed magic_env to *return* the environment as a dict (not to
6369 * Changed magic_env to *return* the environment as a dict (not to
6365 print it). This way it prints, but it can also be processed.
6370 print it). This way it prints, but it can also be processed.
6366
6371
6367 * Added Verbose exception reporting to interactive
6372 * Added Verbose exception reporting to interactive
6368 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
6373 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
6369 traceback. Had to make some changes to the ultraTB file. This is
6374 traceback. Had to make some changes to the ultraTB file. This is
6370 probably the last 'big' thing in my mental todo list. This ties
6375 probably the last 'big' thing in my mental todo list. This ties
6371 in with the next entry:
6376 in with the next entry:
6372
6377
6373 * Changed -Xi and -Xf to a single -xmode option. Now all the user
6378 * Changed -Xi and -Xf to a single -xmode option. Now all the user
6374 has to specify is Plain, Color or Verbose for all exception
6379 has to specify is Plain, Color or Verbose for all exception
6375 handling.
6380 handling.
6376
6381
6377 * Removed ShellServices option. All this can really be done via
6382 * Removed ShellServices option. All this can really be done via
6378 the magic system. It's easier to extend, cleaner and has automatic
6383 the magic system. It's easier to extend, cleaner and has automatic
6379 namespace protection and documentation.
6384 namespace protection and documentation.
6380
6385
6381 2001-11-09 Fernando Perez <fperez@colorado.edu>
6386 2001-11-09 Fernando Perez <fperez@colorado.edu>
6382
6387
6383 * Fixed bug in output cache flushing (missing parameter to
6388 * Fixed bug in output cache flushing (missing parameter to
6384 __init__). Other small bugs fixed (found using pychecker).
6389 __init__). Other small bugs fixed (found using pychecker).
6385
6390
6386 * Version 0.1.4 opened for bugfixing.
6391 * Version 0.1.4 opened for bugfixing.
6387
6392
6388 2001-11-07 Fernando Perez <fperez@colorado.edu>
6393 2001-11-07 Fernando Perez <fperez@colorado.edu>
6389
6394
6390 * Version 0.1.3 released, mainly because of the raw_input bug.
6395 * Version 0.1.3 released, mainly because of the raw_input bug.
6391
6396
6392 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
6397 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
6393 and when testing for whether things were callable, a call could
6398 and when testing for whether things were callable, a call could
6394 actually be made to certain functions. They would get called again
6399 actually be made to certain functions. They would get called again
6395 once 'really' executed, with a resulting double call. A disaster
6400 once 'really' executed, with a resulting double call. A disaster
6396 in many cases (list.reverse() would never work!).
6401 in many cases (list.reverse() would never work!).
6397
6402
6398 * Removed prefilter() function, moved its code to raw_input (which
6403 * Removed prefilter() function, moved its code to raw_input (which
6399 after all was just a near-empty caller for prefilter). This saves
6404 after all was just a near-empty caller for prefilter). This saves
6400 a function call on every prompt, and simplifies the class a tiny bit.
6405 a function call on every prompt, and simplifies the class a tiny bit.
6401
6406
6402 * Fix _ip to __ip name in magic example file.
6407 * Fix _ip to __ip name in magic example file.
6403
6408
6404 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
6409 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
6405 work with non-gnu versions of tar.
6410 work with non-gnu versions of tar.
6406
6411
6407 2001-11-06 Fernando Perez <fperez@colorado.edu>
6412 2001-11-06 Fernando Perez <fperez@colorado.edu>
6408
6413
6409 * Version 0.1.2. Just to keep track of the recent changes.
6414 * Version 0.1.2. Just to keep track of the recent changes.
6410
6415
6411 * Fixed nasty bug in output prompt routine. It used to check 'if
6416 * Fixed nasty bug in output prompt routine. It used to check 'if
6412 arg != None...'. Problem is, this fails if arg implements a
6417 arg != None...'. Problem is, this fails if arg implements a
6413 special comparison (__cmp__) which disallows comparing to
6418 special comparison (__cmp__) which disallows comparing to
6414 None. Found it when trying to use the PhysicalQuantity module from
6419 None. Found it when trying to use the PhysicalQuantity module from
6415 ScientificPython.
6420 ScientificPython.
6416
6421
6417 2001-11-05 Fernando Perez <fperez@colorado.edu>
6422 2001-11-05 Fernando Perez <fperez@colorado.edu>
6418
6423
6419 * Also added dirs. Now the pushd/popd/dirs family functions
6424 * Also added dirs. Now the pushd/popd/dirs family functions
6420 basically like the shell, with the added convenience of going home
6425 basically like the shell, with the added convenience of going home
6421 when called with no args.
6426 when called with no args.
6422
6427
6423 * pushd/popd slightly modified to mimic shell behavior more
6428 * pushd/popd slightly modified to mimic shell behavior more
6424 closely.
6429 closely.
6425
6430
6426 * Added env,pushd,popd from ShellServices as magic functions. I
6431 * Added env,pushd,popd from ShellServices as magic functions. I
6427 think the cleanest will be to port all desired functions from
6432 think the cleanest will be to port all desired functions from
6428 ShellServices as magics and remove ShellServices altogether. This
6433 ShellServices as magics and remove ShellServices altogether. This
6429 will provide a single, clean way of adding functionality
6434 will provide a single, clean way of adding functionality
6430 (shell-type or otherwise) to IP.
6435 (shell-type or otherwise) to IP.
6431
6436
6432 2001-11-04 Fernando Perez <fperez@colorado.edu>
6437 2001-11-04 Fernando Perez <fperez@colorado.edu>
6433
6438
6434 * Added .ipython/ directory to sys.path. This way users can keep
6439 * Added .ipython/ directory to sys.path. This way users can keep
6435 customizations there and access them via import.
6440 customizations there and access them via import.
6436
6441
6437 2001-11-03 Fernando Perez <fperez@colorado.edu>
6442 2001-11-03 Fernando Perez <fperez@colorado.edu>
6438
6443
6439 * Opened version 0.1.1 for new changes.
6444 * Opened version 0.1.1 for new changes.
6440
6445
6441 * Changed version number to 0.1.0: first 'public' release, sent to
6446 * Changed version number to 0.1.0: first 'public' release, sent to
6442 Nathan and Janko.
6447 Nathan and Janko.
6443
6448
6444 * Lots of small fixes and tweaks.
6449 * Lots of small fixes and tweaks.
6445
6450
6446 * Minor changes to whos format. Now strings are shown, snipped if
6451 * Minor changes to whos format. Now strings are shown, snipped if
6447 too long.
6452 too long.
6448
6453
6449 * Changed ShellServices to work on __main__ so they show up in @who
6454 * Changed ShellServices to work on __main__ so they show up in @who
6450
6455
6451 * Help also works with ? at the end of a line:
6456 * Help also works with ? at the end of a line:
6452 ?sin and sin?
6457 ?sin and sin?
6453 both produce the same effect. This is nice, as often I use the
6458 both produce the same effect. This is nice, as often I use the
6454 tab-complete to find the name of a method, but I used to then have
6459 tab-complete to find the name of a method, but I used to then have
6455 to go to the beginning of the line to put a ? if I wanted more
6460 to go to the beginning of the line to put a ? if I wanted more
6456 info. Now I can just add the ? and hit return. Convenient.
6461 info. Now I can just add the ? and hit return. Convenient.
6457
6462
6458 2001-11-02 Fernando Perez <fperez@colorado.edu>
6463 2001-11-02 Fernando Perez <fperez@colorado.edu>
6459
6464
6460 * Python version check (>=2.1) added.
6465 * Python version check (>=2.1) added.
6461
6466
6462 * Added LazyPython documentation. At this point the docs are quite
6467 * Added LazyPython documentation. At this point the docs are quite
6463 a mess. A cleanup is in order.
6468 a mess. A cleanup is in order.
6464
6469
6465 * Auto-installer created. For some bizarre reason, the zipfiles
6470 * Auto-installer created. For some bizarre reason, the zipfiles
6466 module isn't working on my system. So I made a tar version
6471 module isn't working on my system. So I made a tar version
6467 (hopefully the command line options in various systems won't kill
6472 (hopefully the command line options in various systems won't kill
6468 me).
6473 me).
6469
6474
6470 * Fixes to Struct in genutils. Now all dictionary-like methods are
6475 * Fixes to Struct in genutils. Now all dictionary-like methods are
6471 protected (reasonably).
6476 protected (reasonably).
6472
6477
6473 * Added pager function to genutils and changed ? to print usage
6478 * Added pager function to genutils and changed ? to print usage
6474 note through it (it was too long).
6479 note through it (it was too long).
6475
6480
6476 * Added the LazyPython functionality. Works great! I changed the
6481 * Added the LazyPython functionality. Works great! I changed the
6477 auto-quote escape to ';', it's on home row and next to '. But
6482 auto-quote escape to ';', it's on home row and next to '. But
6478 both auto-quote and auto-paren (still /) escapes are command-line
6483 both auto-quote and auto-paren (still /) escapes are command-line
6479 parameters.
6484 parameters.
6480
6485
6481
6486
6482 2001-11-01 Fernando Perez <fperez@colorado.edu>
6487 2001-11-01 Fernando Perez <fperez@colorado.edu>
6483
6488
6484 * Version changed to 0.0.7. Fairly large change: configuration now
6489 * Version changed to 0.0.7. Fairly large change: configuration now
6485 is all stored in a directory, by default .ipython. There, all
6490 is all stored in a directory, by default .ipython. There, all
6486 config files have normal looking names (not .names)
6491 config files have normal looking names (not .names)
6487
6492
6488 * Version 0.0.6 Released first to Lucas and Archie as a test
6493 * Version 0.0.6 Released first to Lucas and Archie as a test
6489 run. Since it's the first 'semi-public' release, change version to
6494 run. Since it's the first 'semi-public' release, change version to
6490 > 0.0.6 for any changes now.
6495 > 0.0.6 for any changes now.
6491
6496
6492 * Stuff I had put in the ipplib.py changelog:
6497 * Stuff I had put in the ipplib.py changelog:
6493
6498
6494 Changes to InteractiveShell:
6499 Changes to InteractiveShell:
6495
6500
6496 - Made the usage message a parameter.
6501 - Made the usage message a parameter.
6497
6502
6498 - Require the name of the shell variable to be given. It's a bit
6503 - Require the name of the shell variable to be given. It's a bit
6499 of a hack, but allows the name 'shell' not to be hardwired in the
6504 of a hack, but allows the name 'shell' not to be hardwired in the
6500 magic (@) handler, which is problematic b/c it requires
6505 magic (@) handler, which is problematic b/c it requires
6501 polluting the global namespace with 'shell'. This in turn is
6506 polluting the global namespace with 'shell'. This in turn is
6502 fragile: if a user redefines a variable called shell, things
6507 fragile: if a user redefines a variable called shell, things
6503 break.
6508 break.
6504
6509
6505 - magic @: all functions available through @ need to be defined
6510 - magic @: all functions available through @ need to be defined
6506 as magic_<name>, even though they can be called simply as
6511 as magic_<name>, even though they can be called simply as
6507 @<name>. This allows the special command @magic to gather
6512 @<name>. This allows the special command @magic to gather
6508 information automatically about all existing magic functions,
6513 information automatically about all existing magic functions,
6509 even if they are run-time user extensions, by parsing the shell
6514 even if they are run-time user extensions, by parsing the shell
6510 instance __dict__ looking for special magic_ names.
6515 instance __dict__ looking for special magic_ names.
6511
6516
6512 - mainloop: added *two* local namespace parameters. This allows
6517 - mainloop: added *two* local namespace parameters. This allows
6513 the class to differentiate between parameters which were there
6518 the class to differentiate between parameters which were there
6514 before and after command line initialization was processed. This
6519 before and after command line initialization was processed. This
6515 way, later @who can show things loaded at startup by the
6520 way, later @who can show things loaded at startup by the
6516 user. This trick was necessary to make session saving/reloading
6521 user. This trick was necessary to make session saving/reloading
6517 really work: ideally after saving/exiting/reloading a session,
6522 really work: ideally after saving/exiting/reloading a session,
6518 *everything* should look the same, including the output of @who. I
6523 *everything* should look the same, including the output of @who. I
6519 was only able to make this work with this double namespace
6524 was only able to make this work with this double namespace
6520 trick.
6525 trick.
6521
6526
6522 - added a header to the logfile which allows (almost) full
6527 - added a header to the logfile which allows (almost) full
6523 session restoring.
6528 session restoring.
6524
6529
6525 - prepend lines beginning with @ or !, with a and log
6530 - prepend lines beginning with @ or !, with a and log
6526 them. Why? !lines: may be useful to know what you did @lines:
6531 them. Why? !lines: may be useful to know what you did @lines:
6527 they may affect session state. So when restoring a session, at
6532 they may affect session state. So when restoring a session, at
6528 least inform the user of their presence. I couldn't quite get
6533 least inform the user of their presence. I couldn't quite get
6529 them to properly re-execute, but at least the user is warned.
6534 them to properly re-execute, but at least the user is warned.
6530
6535
6531 * Started ChangeLog.
6536 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now