##// END OF EJS Templates
Prefer ibrowse over igrid as the default browser.
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 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 igrid import igrid
2103 from ibrowse import ibrowse
2104 except ImportError:
2104 except ImportError:
2105 # no wx
2105 # No curses (probably Windows)
2106 try:
2106 try:
2107 from ibrowse import ibrowse
2107 from igrid import igrid
2108 except ImportError:
2108 except ImportError:
2109 # No curses (probably Windows) => 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 = ibrowse
2113 __all__.append("ibrowse")
2114 else:
2115 defaultdisplay = igrid
2112 defaultdisplay = igrid
2116 __all__.append("igrid")
2113 __all__.append("igrid")
2114 else:
2115 defaultdisplay = 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,6290 +1,6295 b''
1 2007-03-10 Walter Doerwald <walter@livinglogic.de>
2
3 * IPython/Extensions/ipipe.py: Prefer ibrowse over igrid
4 as the default browser.
5
1 2007-03-10 Fernando Perez <Fernando.Perez@colorado.edu>
6 2007-03-10 Fernando Perez <Fernando.Perez@colorado.edu>
2
7
3 * IPython/iplib.py (InteractiveShell.__init__): fix for Alex
8 * IPython/iplib.py (InteractiveShell.__init__): fix for Alex
4 Schmolck's recently reported tab-completion bug (my previous one
9 Schmolck's recently reported tab-completion bug (my previous one
5 had a problem). Patch by Dan Milstein <danmil-AT-comcast.net>.
10 had a problem). Patch by Dan Milstein <danmil-AT-comcast.net>.
6
11
7 2007-03-09 Walter Doerwald <walter@livinglogic.de>
12 2007-03-09 Walter Doerwald <walter@livinglogic.de>
8
13
9 * IPython/Extensions/igrid.py: Patch by Nik Tautenhahn:
14 * IPython/Extensions/igrid.py: Patch by Nik Tautenhahn:
10 Close help window if exiting igrid.
15 Close help window if exiting igrid.
11
16
12 2007-03-02 JοΏ½rgen Stenarson <jorgen.stenarson@bostream.nu>
17 2007-03-02 JοΏ½rgen Stenarson <jorgen.stenarson@bostream.nu>
13
18
14 * IPython/Extensions/ipy_defaults.py: Check if readline is available
19 * IPython/Extensions/ipy_defaults.py: Check if readline is available
15 before calling functions from readline.
20 before calling functions from readline.
16
21
17 2007-03-02 Walter Doerwald <walter@livinglogic.de>
22 2007-03-02 Walter Doerwald <walter@livinglogic.de>
18
23
19 * IPython/Extensions/igrid.py: Add Nik Tautenhahns igrid extension.
24 * IPython/Extensions/igrid.py: Add Nik Tautenhahns igrid extension.
20 igrid is a wxPython-based display object for ipipe. If your system has
25 igrid is a wxPython-based display object for ipipe. If your system has
21 wx installed igrid will be the default display. Without wx ipipe falls
26 wx installed igrid will be the default display. Without wx ipipe falls
22 back to ibrowse (which needs curses). If no curses is installed ipipe
27 back to ibrowse (which needs curses). If no curses is installed ipipe
23 falls back to idump.
28 falls back to idump.
24
29
25 2007-03-01 Fernando Perez <Fernando.Perez@colorado.edu>
30 2007-03-01 Fernando Perez <Fernando.Perez@colorado.edu>
26
31
27 * IPython/iplib.py (split_user_inputBROKEN): temporarily disable
32 * IPython/iplib.py (split_user_inputBROKEN): temporarily disable
28 my changes from yesterday, they introduced bugs. Will reactivate
33 my changes from yesterday, they introduced bugs. Will reactivate
29 once I get a correct solution, which will be much easier thanks to
34 once I get a correct solution, which will be much easier thanks to
30 Dan Milstein's new prefilter test suite.
35 Dan Milstein's new prefilter test suite.
31
36
32 2007-02-28 Fernando Perez <Fernando.Perez@colorado.edu>
37 2007-02-28 Fernando Perez <Fernando.Perez@colorado.edu>
33
38
34 * IPython/iplib.py (split_user_input): fix input splitting so we
39 * IPython/iplib.py (split_user_input): fix input splitting so we
35 don't attempt attribute accesses on things that can't possibly be
40 don't attempt attribute accesses on things that can't possibly be
36 valid Python attributes. After a bug report by Alex Schmolck.
41 valid Python attributes. After a bug report by Alex Schmolck.
37 (InteractiveShell.__init__): brown-paper bag fix; regexp broke
42 (InteractiveShell.__init__): brown-paper bag fix; regexp broke
38 %magic with explicit % prefix.
43 %magic with explicit % prefix.
39
44
40 2007-02-27 Fernando Perez <Fernando.Perez@colorado.edu>
45 2007-02-27 Fernando Perez <Fernando.Perez@colorado.edu>
41
46
42 * IPython/Shell.py (IPShellGTK.mainloop): update threads calls to
47 * IPython/Shell.py (IPShellGTK.mainloop): update threads calls to
43 avoid a DeprecationWarning from GTK.
48 avoid a DeprecationWarning from GTK.
44
49
45 2007-02-22 Fernando Perez <Fernando.Perez@colorado.edu>
50 2007-02-22 Fernando Perez <Fernando.Perez@colorado.edu>
46
51
47 * IPython/genutils.py (clock): I modified clock() to return total
52 * IPython/genutils.py (clock): I modified clock() to return total
48 time, user+system. This is a more commonly needed metric. I also
53 time, user+system. This is a more commonly needed metric. I also
49 introduced the new clocku/clocks to get only user/system time if
54 introduced the new clocku/clocks to get only user/system time if
50 one wants those instead.
55 one wants those instead.
51
56
52 ***WARNING: API CHANGE*** clock() used to return only user time,
57 ***WARNING: API CHANGE*** clock() used to return only user time,
53 so if you want exactly the same results as before, use clocku
58 so if you want exactly the same results as before, use clocku
54 instead.
59 instead.
55
60
56 2007-02-22 Ville Vainio <vivainio@gmail.com>
61 2007-02-22 Ville Vainio <vivainio@gmail.com>
57
62
58 * IPython/Extensions/ipy_p4.py: Extension for improved
63 * IPython/Extensions/ipy_p4.py: Extension for improved
59 p4 (perforce version control system) experience.
64 p4 (perforce version control system) experience.
60 Adds %p4 magic with p4 command completion and
65 Adds %p4 magic with p4 command completion and
61 automatic -G argument (marshall output as python dict)
66 automatic -G argument (marshall output as python dict)
62
67
63 2007-02-19 Fernando Perez <Fernando.Perez@colorado.edu>
68 2007-02-19 Fernando Perez <Fernando.Perez@colorado.edu>
64
69
65 * IPython/demo.py (Demo.re_stop): make dashes optional in demo
70 * IPython/demo.py (Demo.re_stop): make dashes optional in demo
66 stop marks.
71 stop marks.
67 (ClearingMixin): a simple mixin to easily make a Demo class clear
72 (ClearingMixin): a simple mixin to easily make a Demo class clear
68 the screen in between blocks and have empty marquees. The
73 the screen in between blocks and have empty marquees. The
69 ClearDemo and ClearIPDemo classes that use it are included.
74 ClearDemo and ClearIPDemo classes that use it are included.
70
75
71 2007-02-18 Fernando Perez <Fernando.Perez@colorado.edu>
76 2007-02-18 Fernando Perez <Fernando.Perez@colorado.edu>
72
77
73 * IPython/irunner.py (pexpect_monkeypatch): patch pexpect to
78 * IPython/irunner.py (pexpect_monkeypatch): patch pexpect to
74 protect against exceptions at Python shutdown time. Patch
79 protect against exceptions at Python shutdown time. Patch
75 sumbmitted to upstream.
80 sumbmitted to upstream.
76
81
77 2007-02-14 Walter Doerwald <walter@livinglogic.de>
82 2007-02-14 Walter Doerwald <walter@livinglogic.de>
78
83
79 * IPython/Extensions/ibrowse.py: If entering the first object level
84 * IPython/Extensions/ibrowse.py: If entering the first object level
80 (i.e. the object for which the browser has been started) fails,
85 (i.e. the object for which the browser has been started) fails,
81 now the error is raised directly (aborting the browser) instead of
86 now the error is raised directly (aborting the browser) instead of
82 running into an empty levels list later.
87 running into an empty levels list later.
83
88
84 2007-02-03 Walter Doerwald <walter@livinglogic.de>
89 2007-02-03 Walter Doerwald <walter@livinglogic.de>
85
90
86 * IPython/Extensions/ipipe.py: Add an xrepr implementation
91 * IPython/Extensions/ipipe.py: Add an xrepr implementation
87 for the noitem object.
92 for the noitem object.
88
93
89 2007-01-31 Fernando Perez <Fernando.Perez@colorado.edu>
94 2007-01-31 Fernando Perez <Fernando.Perez@colorado.edu>
90
95
91 * IPython/completer.py (Completer.attr_matches): Fix small
96 * IPython/completer.py (Completer.attr_matches): Fix small
92 tab-completion bug with Enthought Traits objects with units.
97 tab-completion bug with Enthought Traits objects with units.
93 Thanks to a bug report by Tom Denniston
98 Thanks to a bug report by Tom Denniston
94 <tom.denniston-AT-alum.dartmouth.org>.
99 <tom.denniston-AT-alum.dartmouth.org>.
95
100
96 2007-01-27 Fernando Perez <Fernando.Perez@colorado.edu>
101 2007-01-27 Fernando Perez <Fernando.Perez@colorado.edu>
97
102
98 * IPython/Extensions/ipy_stock_completers.py (runlistpy): fix a
103 * IPython/Extensions/ipy_stock_completers.py (runlistpy): fix a
99 bug where only .ipy or .py would be completed. Once the first
104 bug where only .ipy or .py would be completed. Once the first
100 argument to %run has been given, all completions are valid because
105 argument to %run has been given, all completions are valid because
101 they are the arguments to the script, which may well be non-python
106 they are the arguments to the script, which may well be non-python
102 filenames.
107 filenames.
103
108
104 * IPython/irunner.py (InteractiveRunner.run_source): major updates
109 * IPython/irunner.py (InteractiveRunner.run_source): major updates
105 to irunner to allow it to correctly support real doctesting of
110 to irunner to allow it to correctly support real doctesting of
106 out-of-process ipython code.
111 out-of-process ipython code.
107
112
108 * IPython/Magic.py (magic_cd): Make the setting of the terminal
113 * IPython/Magic.py (magic_cd): Make the setting of the terminal
109 title an option (-noterm_title) because it completely breaks
114 title an option (-noterm_title) because it completely breaks
110 doctesting.
115 doctesting.
111
116
112 * IPython/demo.py: fix IPythonDemo class that was not actually working.
117 * IPython/demo.py: fix IPythonDemo class that was not actually working.
113
118
114 2007-01-24 Fernando Perez <Fernando.Perez@colorado.edu>
119 2007-01-24 Fernando Perez <Fernando.Perez@colorado.edu>
115
120
116 * IPython/irunner.py (main): fix small bug where extensions were
121 * IPython/irunner.py (main): fix small bug where extensions were
117 not being correctly recognized.
122 not being correctly recognized.
118
123
119 2007-01-23 Walter Doerwald <walter@livinglogic.de>
124 2007-01-23 Walter Doerwald <walter@livinglogic.de>
120
125
121 * IPython/Extensions/ipipe.py (xiter): Make sure that iterating
126 * IPython/Extensions/ipipe.py (xiter): Make sure that iterating
122 a string containing a single line yields the string itself as the
127 a string containing a single line yields the string itself as the
123 only item.
128 only item.
124
129
125 * IPython/Extensions/ibrowse.py (ibrowse): Avoid entering an
130 * IPython/Extensions/ibrowse.py (ibrowse): Avoid entering an
126 object if it's the same as the one on the last level (This avoids
131 object if it's the same as the one on the last level (This avoids
127 infinite recursion for one line strings).
132 infinite recursion for one line strings).
128
133
129 2007-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
134 2007-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
130
135
131 * IPython/ultraTB.py (AutoFormattedTB.__call__): properly flush
136 * IPython/ultraTB.py (AutoFormattedTB.__call__): properly flush
132 all output streams before printing tracebacks. This ensures that
137 all output streams before printing tracebacks. This ensures that
133 user output doesn't end up interleaved with traceback output.
138 user output doesn't end up interleaved with traceback output.
134
139
135 2007-01-10 Ville Vainio <vivainio@gmail.com>
140 2007-01-10 Ville Vainio <vivainio@gmail.com>
136
141
137 * Extensions/envpersist.py: Turbocharged %env that remembers
142 * Extensions/envpersist.py: Turbocharged %env that remembers
138 env vars across sessions; e.g. "%env PATH+=;/opt/scripts" or
143 env vars across sessions; e.g. "%env PATH+=;/opt/scripts" or
139 "%env VISUAL=jed".
144 "%env VISUAL=jed".
140
145
141 2007-01-05 Fernando Perez <Fernando.Perez@colorado.edu>
146 2007-01-05 Fernando Perez <Fernando.Perez@colorado.edu>
142
147
143 * IPython/iplib.py (showtraceback): ensure that we correctly call
148 * IPython/iplib.py (showtraceback): ensure that we correctly call
144 custom handlers in all cases (some with pdb were slipping through,
149 custom handlers in all cases (some with pdb were slipping through,
145 but I'm not exactly sure why).
150 but I'm not exactly sure why).
146
151
147 * IPython/Debugger.py (Tracer.__init__): added new class to
152 * IPython/Debugger.py (Tracer.__init__): added new class to
148 support set_trace-like usage of IPython's enhanced debugger.
153 support set_trace-like usage of IPython's enhanced debugger.
149
154
150 2006-12-24 Ville Vainio <vivainio@gmail.com>
155 2006-12-24 Ville Vainio <vivainio@gmail.com>
151
156
152 * ipmaker.py: more informative message when ipy_user_conf
157 * ipmaker.py: more informative message when ipy_user_conf
153 import fails (suggest running %upgrade).
158 import fails (suggest running %upgrade).
154
159
155 * tools/run_ipy_in_profiler.py: Utility to see where
160 * tools/run_ipy_in_profiler.py: Utility to see where
156 the time during IPython startup is spent.
161 the time during IPython startup is spent.
157
162
158 2006-12-20 Ville Vainio <vivainio@gmail.com>
163 2006-12-20 Ville Vainio <vivainio@gmail.com>
159
164
160 * 0.7.3 is out - merge all from 0.7.3 branch to trunk
165 * 0.7.3 is out - merge all from 0.7.3 branch to trunk
161
166
162 * ipapi.py: Add new ipapi method, expand_alias.
167 * ipapi.py: Add new ipapi method, expand_alias.
163
168
164 * Release.py: Bump up version to 0.7.4.svn
169 * Release.py: Bump up version to 0.7.4.svn
165
170
166 2006-12-17 Ville Vainio <vivainio@gmail.com>
171 2006-12-17 Ville Vainio <vivainio@gmail.com>
167
172
168 * Extensions/jobctrl.py: Fixed &cmd arg arg...
173 * Extensions/jobctrl.py: Fixed &cmd arg arg...
169 to work properly on posix too
174 to work properly on posix too
170
175
171 * Release.py: Update revnum (version is still just 0.7.3).
176 * Release.py: Update revnum (version is still just 0.7.3).
172
177
173 2006-12-15 Ville Vainio <vivainio@gmail.com>
178 2006-12-15 Ville Vainio <vivainio@gmail.com>
174
179
175 * scripts/ipython_win_post_install: create ipython.py in
180 * scripts/ipython_win_post_install: create ipython.py in
176 prefix + "/scripts".
181 prefix + "/scripts".
177
182
178 * Release.py: Update version to 0.7.3.
183 * Release.py: Update version to 0.7.3.
179
184
180 2006-12-14 Ville Vainio <vivainio@gmail.com>
185 2006-12-14 Ville Vainio <vivainio@gmail.com>
181
186
182 * scripts/ipython_win_post_install: Overwrite old shortcuts
187 * scripts/ipython_win_post_install: Overwrite old shortcuts
183 if they already exist
188 if they already exist
184
189
185 * Release.py: release 0.7.3rc2
190 * Release.py: release 0.7.3rc2
186
191
187 2006-12-13 Ville Vainio <vivainio@gmail.com>
192 2006-12-13 Ville Vainio <vivainio@gmail.com>
188
193
189 * Branch and update Release.py for 0.7.3rc1
194 * Branch and update Release.py for 0.7.3rc1
190
195
191 2006-12-13 Fernando Perez <Fernando.Perez@colorado.edu>
196 2006-12-13 Fernando Perez <Fernando.Perez@colorado.edu>
192
197
193 * IPython/Shell.py (IPShellWX): update for current WX naming
198 * IPython/Shell.py (IPShellWX): update for current WX naming
194 conventions, to avoid a deprecation warning with current WX
199 conventions, to avoid a deprecation warning with current WX
195 versions. Thanks to a report by Danny Shevitz.
200 versions. Thanks to a report by Danny Shevitz.
196
201
197 2006-12-12 Ville Vainio <vivainio@gmail.com>
202 2006-12-12 Ville Vainio <vivainio@gmail.com>
198
203
199 * ipmaker.py: apply david cournapeau's patch to make
204 * ipmaker.py: apply david cournapeau's patch to make
200 import_some work properly even when ipythonrc does
205 import_some work properly even when ipythonrc does
201 import_some on empty list (it was an old bug!).
206 import_some on empty list (it was an old bug!).
202
207
203 * UserConfig/ipy_user_conf.py, UserConfig/ipythonrc:
208 * UserConfig/ipy_user_conf.py, UserConfig/ipythonrc:
204 Add deprecation note to ipythonrc and a url to wiki
209 Add deprecation note to ipythonrc and a url to wiki
205 in ipy_user_conf.py
210 in ipy_user_conf.py
206
211
207
212
208 * Magic.py (%run): %run myscript.ipy now runs myscript.ipy
213 * Magic.py (%run): %run myscript.ipy now runs myscript.ipy
209 as if it was typed on IPython command prompt, i.e.
214 as if it was typed on IPython command prompt, i.e.
210 as IPython script.
215 as IPython script.
211
216
212 * example-magic.py, magic_grepl.py: remove outdated examples
217 * example-magic.py, magic_grepl.py: remove outdated examples
213
218
214 2006-12-11 Fernando Perez <Fernando.Perez@colorado.edu>
219 2006-12-11 Fernando Perez <Fernando.Perez@colorado.edu>
215
220
216 * IPython/iplib.py (debugger): prevent a nasty traceback if %debug
221 * IPython/iplib.py (debugger): prevent a nasty traceback if %debug
217 is called before any exception has occurred.
222 is called before any exception has occurred.
218
223
219 2006-12-08 Ville Vainio <vivainio@gmail.com>
224 2006-12-08 Ville Vainio <vivainio@gmail.com>
220
225
221 * Extensions/ipy_stock_completers.py: fix cd completer
226 * Extensions/ipy_stock_completers.py: fix cd completer
222 to translate /'s to \'s again.
227 to translate /'s to \'s again.
223
228
224 * completer.py: prevent traceback on file completions w/
229 * completer.py: prevent traceback on file completions w/
225 backslash.
230 backslash.
226
231
227 * Release.py: Update release number to 0.7.3b3 for release
232 * Release.py: Update release number to 0.7.3b3 for release
228
233
229 2006-12-07 Ville Vainio <vivainio@gmail.com>
234 2006-12-07 Ville Vainio <vivainio@gmail.com>
230
235
231 * Extensions/ipy_signals.py: Ignore ctrl+C in IPython process
236 * Extensions/ipy_signals.py: Ignore ctrl+C in IPython process
232 while executing external code. Provides more shell-like behaviour
237 while executing external code. Provides more shell-like behaviour
233 and overall better response to ctrl + C / ctrl + break.
238 and overall better response to ctrl + C / ctrl + break.
234
239
235 * tools/make_tarball.py: new script to create tarball straight from svn
240 * tools/make_tarball.py: new script to create tarball straight from svn
236 (setup.py sdist doesn't work on win32).
241 (setup.py sdist doesn't work on win32).
237
242
238 * Extensions/ipy_stock_completers.py: fix cd completer to give up
243 * Extensions/ipy_stock_completers.py: fix cd completer to give up
239 on dirnames with spaces and use the default completer instead.
244 on dirnames with spaces and use the default completer instead.
240
245
241 * Revision.py: Change version to 0.7.3b2 for release.
246 * Revision.py: Change version to 0.7.3b2 for release.
242
247
243 2006-12-05 Ville Vainio <vivainio@gmail.com>
248 2006-12-05 Ville Vainio <vivainio@gmail.com>
244
249
245 * Magic.py, iplib.py, completer.py: Apply R. Bernstein's
250 * Magic.py, iplib.py, completer.py: Apply R. Bernstein's
246 pydb patch 4 (rm debug printing, py 2.5 checking)
251 pydb patch 4 (rm debug printing, py 2.5 checking)
247
252
248 2006-11-30 Walter Doerwald <walter@livinglogic.de>
253 2006-11-30 Walter Doerwald <walter@livinglogic.de>
249 * IPython/Extensions/ibrowse.py: Add two new commands to ibrowse:
254 * IPython/Extensions/ibrowse.py: Add two new commands to ibrowse:
250 "refresh" (mapped to "r") refreshes the screen by restarting the iterator.
255 "refresh" (mapped to "r") refreshes the screen by restarting the iterator.
251 "refreshfind" (mapped to "R") does the same but tries to go back to the same
256 "refreshfind" (mapped to "R") does the same but tries to go back to the same
252 object the cursor was on before the refresh. The command "markrange" is
257 object the cursor was on before the refresh. The command "markrange" is
253 mapped to "%" now.
258 mapped to "%" now.
254 * IPython/Extensions/ibrowse.py: Make igrpentry and ipwdentry comparable.
259 * IPython/Extensions/ibrowse.py: Make igrpentry and ipwdentry comparable.
255
260
256 2006-11-29 Fernando Perez <Fernando.Perez@colorado.edu>
261 2006-11-29 Fernando Perez <Fernando.Perez@colorado.edu>
257
262
258 * IPython/Magic.py (magic_debug): new %debug magic to activate the
263 * IPython/Magic.py (magic_debug): new %debug magic to activate the
259 interactive debugger on the last traceback, without having to call
264 interactive debugger on the last traceback, without having to call
260 %pdb and rerun your code. Made minor changes in various modules,
265 %pdb and rerun your code. Made minor changes in various modules,
261 should automatically recognize pydb if available.
266 should automatically recognize pydb if available.
262
267
263 2006-11-28 Ville Vainio <vivainio@gmail.com>
268 2006-11-28 Ville Vainio <vivainio@gmail.com>
264
269
265 * completer.py: If the text start with !, show file completions
270 * completer.py: If the text start with !, show file completions
266 properly. This helps when trying to complete command name
271 properly. This helps when trying to complete command name
267 for shell escapes.
272 for shell escapes.
268
273
269 2006-11-27 Ville Vainio <vivainio@gmail.com>
274 2006-11-27 Ville Vainio <vivainio@gmail.com>
270
275
271 * ipy_stock_completers.py: bzr completer submitted by Stefan van
276 * ipy_stock_completers.py: bzr completer submitted by Stefan van
272 der Walt. Clean up svn and hg completers by using a common
277 der Walt. Clean up svn and hg completers by using a common
273 vcs_completer.
278 vcs_completer.
274
279
275 2006-11-26 Ville Vainio <vivainio@gmail.com>
280 2006-11-26 Ville Vainio <vivainio@gmail.com>
276
281
277 * Remove ipconfig and %config; you should use _ip.options structure
282 * Remove ipconfig and %config; you should use _ip.options structure
278 directly instead!
283 directly instead!
279
284
280 * genutils.py: add wrap_deprecated function for deprecating callables
285 * genutils.py: add wrap_deprecated function for deprecating callables
281
286
282 * iplib.py: deprecate ipmagic, ipsystem, ipalias. Use _ip.magic and
287 * iplib.py: deprecate ipmagic, ipsystem, ipalias. Use _ip.magic and
283 _ip.system instead. ipalias is redundant.
288 _ip.system instead. ipalias is redundant.
284
289
285 * Magic.py: %rehashdir no longer aliases 'cmdname' to 'cmdname.exe' on
290 * Magic.py: %rehashdir no longer aliases 'cmdname' to 'cmdname.exe' on
286 win32, but just 'cmdname'. Other extensions (non-'exe') are still made
291 win32, but just 'cmdname'. Other extensions (non-'exe') are still made
287 explicit.
292 explicit.
288
293
289 * ipy_stock_completers.py: 'hg' (mercurial VCS) now has a custom
294 * ipy_stock_completers.py: 'hg' (mercurial VCS) now has a custom
290 completer. Try it by entering 'hg ' and pressing tab.
295 completer. Try it by entering 'hg ' and pressing tab.
291
296
292 * macro.py: Give Macro a useful __repr__ method
297 * macro.py: Give Macro a useful __repr__ method
293
298
294 * Magic.py: %whos abbreviates the typename of Macro for brevity.
299 * Magic.py: %whos abbreviates the typename of Macro for brevity.
295
300
296 2006-11-24 Walter Doerwald <walter@livinglogic.de>
301 2006-11-24 Walter Doerwald <walter@livinglogic.de>
297 * IPython/Extensions/astyle.py: Do a relative import of ipipe, so that
302 * IPython/Extensions/astyle.py: Do a relative import of ipipe, so that
298 we don't get a duplicate ipipe module, where registration of the xrepr
303 we don't get a duplicate ipipe module, where registration of the xrepr
299 implementation for Text is useless.
304 implementation for Text is useless.
300
305
301 * IPython/Extensions/ipipe.py: Fix __xrepr__() implementation for ils.
306 * IPython/Extensions/ipipe.py: Fix __xrepr__() implementation for ils.
302
307
303 * IPython/Extensions/ibrowse.py: Fix keymapping for the enter command.
308 * IPython/Extensions/ibrowse.py: Fix keymapping for the enter command.
304
309
305 2006-11-24 Ville Vainio <vivainio@gmail.com>
310 2006-11-24 Ville Vainio <vivainio@gmail.com>
306
311
307 * Magic.py, manual_base.lyx: Kirill Smelkov patch:
312 * Magic.py, manual_base.lyx: Kirill Smelkov patch:
308 try to use "cProfile" instead of the slower pure python
313 try to use "cProfile" instead of the slower pure python
309 "profile"
314 "profile"
310
315
311 2006-11-23 Ville Vainio <vivainio@gmail.com>
316 2006-11-23 Ville Vainio <vivainio@gmail.com>
312
317
313 * manual_base.lyx: Kirill Smelkov patch: Fix wrong
318 * manual_base.lyx: Kirill Smelkov patch: Fix wrong
314 Qt+IPython+Designer link in documentation.
319 Qt+IPython+Designer link in documentation.
315
320
316 * Extensions/ipy_pydb.py: R. Bernstein's patch for passing
321 * Extensions/ipy_pydb.py: R. Bernstein's patch for passing
317 correct Pdb object to %pydb.
322 correct Pdb object to %pydb.
318
323
319
324
320 2006-11-22 Walter Doerwald <walter@livinglogic.de>
325 2006-11-22 Walter Doerwald <walter@livinglogic.de>
321 * IPython/Extensions/astyle.py: Text needs it's own implemenation of the
326 * IPython/Extensions/astyle.py: Text needs it's own implemenation of the
322 generic xrepr(), otherwise the list implementation would kick in.
327 generic xrepr(), otherwise the list implementation would kick in.
323
328
324 2006-11-21 Ville Vainio <vivainio@gmail.com>
329 2006-11-21 Ville Vainio <vivainio@gmail.com>
325
330
326 * upgrade_dir.py: Now actually overwrites a nonmodified user file
331 * upgrade_dir.py: Now actually overwrites a nonmodified user file
327 with one from UserConfig.
332 with one from UserConfig.
328
333
329 * ipy_profile_sh.py: Add dummy "depth" to var_expand lambda,
334 * ipy_profile_sh.py: Add dummy "depth" to var_expand lambda,
330 it was missing which broke the sh profile.
335 it was missing which broke the sh profile.
331
336
332 * completer.py: file completer now uses explicit '/' instead
337 * completer.py: file completer now uses explicit '/' instead
333 of os.path.join, expansion of 'foo' was broken on win32
338 of os.path.join, expansion of 'foo' was broken on win32
334 if there was one directory with name 'foobar'.
339 if there was one directory with name 'foobar'.
335
340
336 * A bunch of patches from Kirill Smelkov:
341 * A bunch of patches from Kirill Smelkov:
337
342
338 * [patch 9/9] doc: point bug-tracker URL to IPythons trac-tickets.
343 * [patch 9/9] doc: point bug-tracker URL to IPythons trac-tickets.
339
344
340 * [patch 7/9] Implement %page -r (page in raw mode) -
345 * [patch 7/9] Implement %page -r (page in raw mode) -
341
346
342 * [patch 5/9] ScientificPython webpage has moved
347 * [patch 5/9] ScientificPython webpage has moved
343
348
344 * [patch 4/9] The manual mentions %ds, should be %dhist
349 * [patch 4/9] The manual mentions %ds, should be %dhist
345
350
346 * [patch 3/9] Kill old bits from %prun doc.
351 * [patch 3/9] Kill old bits from %prun doc.
347
352
348 * [patch 1/9] Fix typos here and there.
353 * [patch 1/9] Fix typos here and there.
349
354
350 2006-11-08 Ville Vainio <vivainio@gmail.com>
355 2006-11-08 Ville Vainio <vivainio@gmail.com>
351
356
352 * completer.py (attr_matches): catch all exceptions raised
357 * completer.py (attr_matches): catch all exceptions raised
353 by eval of expr with dots.
358 by eval of expr with dots.
354
359
355 2006-11-07 Fernando Perez <Fernando.Perez@colorado.edu>
360 2006-11-07 Fernando Perez <Fernando.Perez@colorado.edu>
356
361
357 * IPython/iplib.py (runsource): Prepend an 'if 1:' to the user
362 * IPython/iplib.py (runsource): Prepend an 'if 1:' to the user
358 input if it starts with whitespace. This allows you to paste
363 input if it starts with whitespace. This allows you to paste
359 indented input from any editor without manually having to type in
364 indented input from any editor without manually having to type in
360 the 'if 1:', which is convenient when working interactively.
365 the 'if 1:', which is convenient when working interactively.
361 Slightly modifed version of a patch by Bo Peng
366 Slightly modifed version of a patch by Bo Peng
362 <bpeng-AT-rice.edu>.
367 <bpeng-AT-rice.edu>.
363
368
364 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
369 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
365
370
366 * IPython/irunner.py (main): modified irunner so it automatically
371 * IPython/irunner.py (main): modified irunner so it automatically
367 recognizes the right runner to use based on the extension (.py for
372 recognizes the right runner to use based on the extension (.py for
368 python, .ipy for ipython and .sage for sage).
373 python, .ipy for ipython and .sage for sage).
369
374
370 * IPython/iplib.py (InteractiveShell.ipconfig): new builtin, also
375 * IPython/iplib.py (InteractiveShell.ipconfig): new builtin, also
371 visible in ipapi as ip.config(), to programatically control the
376 visible in ipapi as ip.config(), to programatically control the
372 internal rc object. There's an accompanying %config magic for
377 internal rc object. There's an accompanying %config magic for
373 interactive use, which has been enhanced to match the
378 interactive use, which has been enhanced to match the
374 funtionality in ipconfig.
379 funtionality in ipconfig.
375
380
376 * IPython/Magic.py (magic_system_verbose): Change %system_verbose
381 * IPython/Magic.py (magic_system_verbose): Change %system_verbose
377 so it's not just a toggle, it now takes an argument. Add support
382 so it's not just a toggle, it now takes an argument. Add support
378 for a customizable header when making system calls, as the new
383 for a customizable header when making system calls, as the new
379 system_header variable in the ipythonrc file.
384 system_header variable in the ipythonrc file.
380
385
381 2006-11-03 Walter Doerwald <walter@livinglogic.de>
386 2006-11-03 Walter Doerwald <walter@livinglogic.de>
382
387
383 * IPython/Extensions/ipipe.py: xrepr(), xiter() and xattrs() are now
388 * IPython/Extensions/ipipe.py: xrepr(), xiter() and xattrs() are now
384 generic functions (using Philip J. Eby's simplegeneric package).
389 generic functions (using Philip J. Eby's simplegeneric package).
385 This makes it possible to customize the display of third-party classes
390 This makes it possible to customize the display of third-party classes
386 without having to monkeypatch them. xiter() no longer supports a mode
391 without having to monkeypatch them. xiter() no longer supports a mode
387 argument and the XMode class has been removed. The same functionality can
392 argument and the XMode class has been removed. The same functionality can
388 be implemented via IterAttributeDescriptor and IterMethodDescriptor.
393 be implemented via IterAttributeDescriptor and IterMethodDescriptor.
389 One consequence of the switch to generic functions is that xrepr() and
394 One consequence of the switch to generic functions is that xrepr() and
390 xattrs() implementation must define the default value for the mode
395 xattrs() implementation must define the default value for the mode
391 argument themselves and xattrs() implementations must return real
396 argument themselves and xattrs() implementations must return real
392 descriptors.
397 descriptors.
393
398
394 * IPython/external: This new subpackage will contain all third-party
399 * IPython/external: This new subpackage will contain all third-party
395 packages that are bundled with IPython. (The first one is simplegeneric).
400 packages that are bundled with IPython. (The first one is simplegeneric).
396
401
397 * IPython/Extensions/ipipe.py (ifile/ils): Readd output of the parent
402 * IPython/Extensions/ipipe.py (ifile/ils): Readd output of the parent
398 directory which as been dropped in r1703.
403 directory which as been dropped in r1703.
399
404
400 * IPython/Extensions/ipipe.py (iless): Fixed.
405 * IPython/Extensions/ipipe.py (iless): Fixed.
401
406
402 * IPython/Extensions/ibrowse: Fixed sorting under Python 2.3.
407 * IPython/Extensions/ibrowse: Fixed sorting under Python 2.3.
403
408
404 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
409 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
405
410
406 * IPython/iplib.py (InteractiveShell.var_expand): fix stack
411 * IPython/iplib.py (InteractiveShell.var_expand): fix stack
407 handling in variable expansion so that shells and magics recognize
412 handling in variable expansion so that shells and magics recognize
408 function local scopes correctly. Bug reported by Brian.
413 function local scopes correctly. Bug reported by Brian.
409
414
410 * scripts/ipython: remove the very first entry in sys.path which
415 * scripts/ipython: remove the very first entry in sys.path which
411 Python auto-inserts for scripts, so that sys.path under IPython is
416 Python auto-inserts for scripts, so that sys.path under IPython is
412 as similar as possible to that under plain Python.
417 as similar as possible to that under plain Python.
413
418
414 * IPython/completer.py (IPCompleter.file_matches): Fix
419 * IPython/completer.py (IPCompleter.file_matches): Fix
415 tab-completion so that quotes are not closed unless the completion
420 tab-completion so that quotes are not closed unless the completion
416 is unambiguous. After a request by Stefan. Minor cleanups in
421 is unambiguous. After a request by Stefan. Minor cleanups in
417 ipy_stock_completers.
422 ipy_stock_completers.
418
423
419 2006-11-02 Ville Vainio <vivainio@gmail.com>
424 2006-11-02 Ville Vainio <vivainio@gmail.com>
420
425
421 * ipy_stock_completers.py: Add %run and %cd completers.
426 * ipy_stock_completers.py: Add %run and %cd completers.
422
427
423 * completer.py: Try running custom completer for both
428 * completer.py: Try running custom completer for both
424 "foo" and "%foo" if the command is just "foo". Ignore case
429 "foo" and "%foo" if the command is just "foo". Ignore case
425 when filtering possible completions.
430 when filtering possible completions.
426
431
427 * UserConfig/ipy_user_conf.py: install stock completers as default
432 * UserConfig/ipy_user_conf.py: install stock completers as default
428
433
429 * iplib.py (history_saving_wrapper), debugger(), ipy_pydb.py:
434 * iplib.py (history_saving_wrapper), debugger(), ipy_pydb.py:
430 simplified readline history save / restore through a wrapper
435 simplified readline history save / restore through a wrapper
431 function
436 function
432
437
433
438
434 2006-10-31 Ville Vainio <vivainio@gmail.com>
439 2006-10-31 Ville Vainio <vivainio@gmail.com>
435
440
436 * strdispatch.py, completer.py, ipy_stock_completers.py:
441 * strdispatch.py, completer.py, ipy_stock_completers.py:
437 Allow str_key ("command") in completer hooks. Implement
442 Allow str_key ("command") in completer hooks. Implement
438 trivial completer for 'import' (stdlib modules only). Rename
443 trivial completer for 'import' (stdlib modules only). Rename
439 ipy_linux_package_managers.py to ipy_stock_completers.py.
444 ipy_linux_package_managers.py to ipy_stock_completers.py.
440 SVN completer.
445 SVN completer.
441
446
442 * Extensions/ledit.py: %magic line editor for easily and
447 * Extensions/ledit.py: %magic line editor for easily and
443 incrementally manipulating lists of strings. The magic command
448 incrementally manipulating lists of strings. The magic command
444 name is %led.
449 name is %led.
445
450
446 2006-10-30 Ville Vainio <vivainio@gmail.com>
451 2006-10-30 Ville Vainio <vivainio@gmail.com>
447
452
448 * Debugger.py, iplib.py (debugger()): Add last set of Rocky
453 * Debugger.py, iplib.py (debugger()): Add last set of Rocky
449 Bernsteins's patches for pydb integration.
454 Bernsteins's patches for pydb integration.
450 http://bashdb.sourceforge.net/pydb/
455 http://bashdb.sourceforge.net/pydb/
451
456
452 * strdispatch.py, iplib.py, completer.py, IPython/__init__.py,
457 * strdispatch.py, iplib.py, completer.py, IPython/__init__.py,
453 Extensions/ipy_linux_package_managers.py, hooks.py: Implement
458 Extensions/ipy_linux_package_managers.py, hooks.py: Implement
454 custom completer hook to allow the users to implement their own
459 custom completer hook to allow the users to implement their own
455 completers. See ipy_linux_package_managers.py for example. The
460 completers. See ipy_linux_package_managers.py for example. The
456 hook name is 'complete_command'.
461 hook name is 'complete_command'.
457
462
458 2006-10-28 Fernando Perez <Fernando.Perez@colorado.edu>
463 2006-10-28 Fernando Perez <Fernando.Perez@colorado.edu>
459
464
460 * IPython/UserConfig/ipythonrc-scipy: minor cleanups to remove old
465 * IPython/UserConfig/ipythonrc-scipy: minor cleanups to remove old
461 Numeric leftovers.
466 Numeric leftovers.
462
467
463 * ipython.el (py-execute-region): apply Stefan's patch to fix
468 * ipython.el (py-execute-region): apply Stefan's patch to fix
464 garbled results if the python shell hasn't been previously started.
469 garbled results if the python shell hasn't been previously started.
465
470
466 * IPython/genutils.py (arg_split): moved to genutils, since it's a
471 * IPython/genutils.py (arg_split): moved to genutils, since it's a
467 pretty generic function and useful for other things.
472 pretty generic function and useful for other things.
468
473
469 * IPython/OInspect.py (getsource): Add customizable source
474 * IPython/OInspect.py (getsource): Add customizable source
470 extractor. After a request/patch form W. Stein (SAGE).
475 extractor. After a request/patch form W. Stein (SAGE).
471
476
472 * IPython/irunner.py (InteractiveRunner.run_source): reset tty
477 * IPython/irunner.py (InteractiveRunner.run_source): reset tty
473 window size to a more reasonable value from what pexpect does,
478 window size to a more reasonable value from what pexpect does,
474 since their choice causes wrapping bugs with long input lines.
479 since their choice causes wrapping bugs with long input lines.
475
480
476 2006-10-28 Ville Vainio <vivainio@gmail.com>
481 2006-10-28 Ville Vainio <vivainio@gmail.com>
477
482
478 * Magic.py (%run): Save and restore the readline history from
483 * Magic.py (%run): Save and restore the readline history from
479 file around %run commands to prevent side effects from
484 file around %run commands to prevent side effects from
480 %runned programs that might use readline (e.g. pydb).
485 %runned programs that might use readline (e.g. pydb).
481
486
482 * extensions/ipy_pydb.py: Adds %pydb magic when imported, for
487 * extensions/ipy_pydb.py: Adds %pydb magic when imported, for
483 invoking the pydb enhanced debugger.
488 invoking the pydb enhanced debugger.
484
489
485 2006-10-23 Walter Doerwald <walter@livinglogic.de>
490 2006-10-23 Walter Doerwald <walter@livinglogic.de>
486
491
487 * IPython/Extensions/ipipe.py (ifile): Remove all methods that
492 * IPython/Extensions/ipipe.py (ifile): Remove all methods that
488 call the base class method and propagate the return value to
493 call the base class method and propagate the return value to
489 ifile. This is now done by path itself.
494 ifile. This is now done by path itself.
490
495
491 2006-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
496 2006-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
492
497
493 * IPython/ipapi.py (IPApi.__init__): Added new entry to public
498 * IPython/ipapi.py (IPApi.__init__): Added new entry to public
494 api: set_crash_handler(), to expose the ability to change the
499 api: set_crash_handler(), to expose the ability to change the
495 internal crash handler.
500 internal crash handler.
496
501
497 * IPython/CrashHandler.py (CrashHandler.__init__): abstract out
502 * IPython/CrashHandler.py (CrashHandler.__init__): abstract out
498 the various parameters of the crash handler so that apps using
503 the various parameters of the crash handler so that apps using
499 IPython as their engine can customize crash handling. Ipmlemented
504 IPython as their engine can customize crash handling. Ipmlemented
500 at the request of SAGE.
505 at the request of SAGE.
501
506
502 2006-10-14 Ville Vainio <vivainio@gmail.com>
507 2006-10-14 Ville Vainio <vivainio@gmail.com>
503
508
504 * Magic.py, ipython.el: applied first "safe" part of Rocky
509 * Magic.py, ipython.el: applied first "safe" part of Rocky
505 Bernstein's patch set for pydb integration.
510 Bernstein's patch set for pydb integration.
506
511
507 * Magic.py (%unalias, %alias): %store'd aliases can now be
512 * Magic.py (%unalias, %alias): %store'd aliases can now be
508 removed with '%unalias'. %alias w/o args now shows most
513 removed with '%unalias'. %alias w/o args now shows most
509 interesting (stored / manually defined) aliases last
514 interesting (stored / manually defined) aliases last
510 where they catch the eye w/o scrolling.
515 where they catch the eye w/o scrolling.
511
516
512 * Magic.py (%rehashx), ext_rehashdir.py: files with
517 * Magic.py (%rehashx), ext_rehashdir.py: files with
513 'py' extension are always considered executable, even
518 'py' extension are always considered executable, even
514 when not in PATHEXT environment variable.
519 when not in PATHEXT environment variable.
515
520
516 2006-10-12 Ville Vainio <vivainio@gmail.com>
521 2006-10-12 Ville Vainio <vivainio@gmail.com>
517
522
518 * jobctrl.py: Add new "jobctrl" extension for spawning background
523 * jobctrl.py: Add new "jobctrl" extension for spawning background
519 processes with "&find /". 'import jobctrl' to try it out. Requires
524 processes with "&find /". 'import jobctrl' to try it out. Requires
520 'subprocess' module, standard in python 2.4+.
525 'subprocess' module, standard in python 2.4+.
521
526
522 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
527 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
523 so if foo -> bar and bar -> baz, then foo -> baz.
528 so if foo -> bar and bar -> baz, then foo -> baz.
524
529
525 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
530 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
526
531
527 * IPython/Magic.py (Magic.parse_options): add a new posix option
532 * IPython/Magic.py (Magic.parse_options): add a new posix option
528 to allow parsing of input args in magics that doesn't strip quotes
533 to allow parsing of input args in magics that doesn't strip quotes
529 (if posix=False). This also closes %timeit bug reported by
534 (if posix=False). This also closes %timeit bug reported by
530 Stefan.
535 Stefan.
531
536
532 2006-10-03 Ville Vainio <vivainio@gmail.com>
537 2006-10-03 Ville Vainio <vivainio@gmail.com>
533
538
534 * iplib.py (raw_input, interact): Return ValueError catching for
539 * iplib.py (raw_input, interact): Return ValueError catching for
535 raw_input. Fixes infinite loop for sys.stdin.close() or
540 raw_input. Fixes infinite loop for sys.stdin.close() or
536 sys.stdout.close().
541 sys.stdout.close().
537
542
538 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
543 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
539
544
540 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
545 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
541 to help in handling doctests. irunner is now pretty useful for
546 to help in handling doctests. irunner is now pretty useful for
542 running standalone scripts and simulate a full interactive session
547 running standalone scripts and simulate a full interactive session
543 in a format that can be then pasted as a doctest.
548 in a format that can be then pasted as a doctest.
544
549
545 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
550 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
546 on top of the default (useless) ones. This also fixes the nasty
551 on top of the default (useless) ones. This also fixes the nasty
547 way in which 2.5's Quitter() exits (reverted [1785]).
552 way in which 2.5's Quitter() exits (reverted [1785]).
548
553
549 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
554 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
550 2.5.
555 2.5.
551
556
552 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
557 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
553 color scheme is updated as well when color scheme is changed
558 color scheme is updated as well when color scheme is changed
554 interactively.
559 interactively.
555
560
556 2006-09-27 Ville Vainio <vivainio@gmail.com>
561 2006-09-27 Ville Vainio <vivainio@gmail.com>
557
562
558 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
563 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
559 infinite loop and just exit. It's a hack, but will do for a while.
564 infinite loop and just exit. It's a hack, but will do for a while.
560
565
561 2006-08-25 Walter Doerwald <walter@livinglogic.de>
566 2006-08-25 Walter Doerwald <walter@livinglogic.de>
562
567
563 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
568 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
564 the constructor, this makes it possible to get a list of only directories
569 the constructor, this makes it possible to get a list of only directories
565 or only files.
570 or only files.
566
571
567 2006-08-12 Ville Vainio <vivainio@gmail.com>
572 2006-08-12 Ville Vainio <vivainio@gmail.com>
568
573
569 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
574 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
570 they broke unittest
575 they broke unittest
571
576
572 2006-08-11 Ville Vainio <vivainio@gmail.com>
577 2006-08-11 Ville Vainio <vivainio@gmail.com>
573
578
574 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
579 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
575 by resolving issue properly, i.e. by inheriting FakeModule
580 by resolving issue properly, i.e. by inheriting FakeModule
576 from types.ModuleType. Pickling ipython interactive data
581 from types.ModuleType. Pickling ipython interactive data
577 should still work as usual (testing appreciated).
582 should still work as usual (testing appreciated).
578
583
579 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
584 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
580
585
581 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
586 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
582 running under python 2.3 with code from 2.4 to fix a bug with
587 running under python 2.3 with code from 2.4 to fix a bug with
583 help(). Reported by the Debian maintainers, Norbert Tretkowski
588 help(). Reported by the Debian maintainers, Norbert Tretkowski
584 <norbert-AT-tretkowski.de> and Alexandre Fayolle
589 <norbert-AT-tretkowski.de> and Alexandre Fayolle
585 <afayolle-AT-debian.org>.
590 <afayolle-AT-debian.org>.
586
591
587 2006-08-04 Walter Doerwald <walter@livinglogic.de>
592 2006-08-04 Walter Doerwald <walter@livinglogic.de>
588
593
589 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
594 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
590 (which was displaying "quit" twice).
595 (which was displaying "quit" twice).
591
596
592 2006-07-28 Walter Doerwald <walter@livinglogic.de>
597 2006-07-28 Walter Doerwald <walter@livinglogic.de>
593
598
594 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
599 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
595 the mode argument).
600 the mode argument).
596
601
597 2006-07-27 Walter Doerwald <walter@livinglogic.de>
602 2006-07-27 Walter Doerwald <walter@livinglogic.de>
598
603
599 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
604 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
600 not running under IPython.
605 not running under IPython.
601
606
602 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
607 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
603 and make it iterable (iterating over the attribute itself). Add two new
608 and make it iterable (iterating over the attribute itself). Add two new
604 magic strings for __xattrs__(): If the string starts with "-", the attribute
609 magic strings for __xattrs__(): If the string starts with "-", the attribute
605 will not be displayed in ibrowse's detail view (but it can still be
610 will not be displayed in ibrowse's detail view (but it can still be
606 iterated over). This makes it possible to add attributes that are large
611 iterated over). This makes it possible to add attributes that are large
607 lists or generator methods to the detail view. Replace magic attribute names
612 lists or generator methods to the detail view. Replace magic attribute names
608 and _attrname() and _getattr() with "descriptors": For each type of magic
613 and _attrname() and _getattr() with "descriptors": For each type of magic
609 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
614 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
610 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
615 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
611 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
616 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
612 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
617 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
613 are still supported.
618 are still supported.
614
619
615 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
620 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
616 fails in ibrowse.fetch(), the exception object is added as the last item
621 fails in ibrowse.fetch(), the exception object is added as the last item
617 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
622 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
618 a generator throws an exception midway through execution.
623 a generator throws an exception midway through execution.
619
624
620 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
625 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
621 encoding into methods.
626 encoding into methods.
622
627
623 2006-07-26 Ville Vainio <vivainio@gmail.com>
628 2006-07-26 Ville Vainio <vivainio@gmail.com>
624
629
625 * iplib.py: history now stores multiline input as single
630 * iplib.py: history now stores multiline input as single
626 history entries. Patch by Jorgen Cederlof.
631 history entries. Patch by Jorgen Cederlof.
627
632
628 2006-07-18 Walter Doerwald <walter@livinglogic.de>
633 2006-07-18 Walter Doerwald <walter@livinglogic.de>
629
634
630 * IPython/Extensions/ibrowse.py: Make cursor visible over
635 * IPython/Extensions/ibrowse.py: Make cursor visible over
631 non existing attributes.
636 non existing attributes.
632
637
633 2006-07-14 Walter Doerwald <walter@livinglogic.de>
638 2006-07-14 Walter Doerwald <walter@livinglogic.de>
634
639
635 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
640 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
636 error output of the running command doesn't mess up the screen.
641 error output of the running command doesn't mess up the screen.
637
642
638 2006-07-13 Walter Doerwald <walter@livinglogic.de>
643 2006-07-13 Walter Doerwald <walter@livinglogic.de>
639
644
640 * IPython/Extensions/ipipe.py (isort): Make isort usable without
645 * IPython/Extensions/ipipe.py (isort): Make isort usable without
641 argument. This sorts the items themselves.
646 argument. This sorts the items themselves.
642
647
643 2006-07-12 Walter Doerwald <walter@livinglogic.de>
648 2006-07-12 Walter Doerwald <walter@livinglogic.de>
644
649
645 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
650 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
646 Compile expression strings into code objects. This should speed
651 Compile expression strings into code objects. This should speed
647 up ifilter and friends somewhat.
652 up ifilter and friends somewhat.
648
653
649 2006-07-08 Ville Vainio <vivainio@gmail.com>
654 2006-07-08 Ville Vainio <vivainio@gmail.com>
650
655
651 * Magic.py: %cpaste now strips > from the beginning of lines
656 * Magic.py: %cpaste now strips > from the beginning of lines
652 to ease pasting quoted code from emails. Contributed by
657 to ease pasting quoted code from emails. Contributed by
653 Stefan van der Walt.
658 Stefan van der Walt.
654
659
655 2006-06-29 Ville Vainio <vivainio@gmail.com>
660 2006-06-29 Ville Vainio <vivainio@gmail.com>
656
661
657 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
662 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
658 mode, patch contributed by Darren Dale. NEEDS TESTING!
663 mode, patch contributed by Darren Dale. NEEDS TESTING!
659
664
660 2006-06-28 Walter Doerwald <walter@livinglogic.de>
665 2006-06-28 Walter Doerwald <walter@livinglogic.de>
661
666
662 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
667 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
663 a blue background. Fix fetching new display rows when the browser
668 a blue background. Fix fetching new display rows when the browser
664 scrolls more than a screenful (e.g. by using the goto command).
669 scrolls more than a screenful (e.g. by using the goto command).
665
670
666 2006-06-27 Ville Vainio <vivainio@gmail.com>
671 2006-06-27 Ville Vainio <vivainio@gmail.com>
667
672
668 * Magic.py (_inspect, _ofind) Apply David Huard's
673 * Magic.py (_inspect, _ofind) Apply David Huard's
669 patch for displaying the correct docstring for 'property'
674 patch for displaying the correct docstring for 'property'
670 attributes.
675 attributes.
671
676
672 2006-06-23 Walter Doerwald <walter@livinglogic.de>
677 2006-06-23 Walter Doerwald <walter@livinglogic.de>
673
678
674 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
679 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
675 commands into the methods implementing them.
680 commands into the methods implementing them.
676
681
677 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
682 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
678
683
679 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
684 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
680 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
685 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
681 autoindent support was authored by Jin Liu.
686 autoindent support was authored by Jin Liu.
682
687
683 2006-06-22 Walter Doerwald <walter@livinglogic.de>
688 2006-06-22 Walter Doerwald <walter@livinglogic.de>
684
689
685 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
690 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
686 for keymaps with a custom class that simplifies handling.
691 for keymaps with a custom class that simplifies handling.
687
692
688 2006-06-19 Walter Doerwald <walter@livinglogic.de>
693 2006-06-19 Walter Doerwald <walter@livinglogic.de>
689
694
690 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
695 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
691 resizing. This requires Python 2.5 to work.
696 resizing. This requires Python 2.5 to work.
692
697
693 2006-06-16 Walter Doerwald <walter@livinglogic.de>
698 2006-06-16 Walter Doerwald <walter@livinglogic.de>
694
699
695 * IPython/Extensions/ibrowse.py: Add two new commands to
700 * IPython/Extensions/ibrowse.py: Add two new commands to
696 ibrowse: "hideattr" (mapped to "h") hides the attribute under
701 ibrowse: "hideattr" (mapped to "h") hides the attribute under
697 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
702 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
698 attributes again. Remapped the help command to "?". Display
703 attributes again. Remapped the help command to "?". Display
699 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
704 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
700 as keys for the "home" and "end" commands. Add three new commands
705 as keys for the "home" and "end" commands. Add three new commands
701 to the input mode for "find" and friends: "delend" (CTRL-K)
706 to the input mode for "find" and friends: "delend" (CTRL-K)
702 deletes to the end of line. "incsearchup" searches upwards in the
707 deletes to the end of line. "incsearchup" searches upwards in the
703 command history for an input that starts with the text before the cursor.
708 command history for an input that starts with the text before the cursor.
704 "incsearchdown" does the same downwards. Removed a bogus mapping of
709 "incsearchdown" does the same downwards. Removed a bogus mapping of
705 the x key to "delete".
710 the x key to "delete".
706
711
707 2006-06-15 Ville Vainio <vivainio@gmail.com>
712 2006-06-15 Ville Vainio <vivainio@gmail.com>
708
713
709 * iplib.py, hooks.py: Added new generate_prompt hook that can be
714 * iplib.py, hooks.py: Added new generate_prompt hook that can be
710 used to create prompts dynamically, instead of the "old" way of
715 used to create prompts dynamically, instead of the "old" way of
711 assigning "magic" strings to prompt_in1 and prompt_in2. The old
716 assigning "magic" strings to prompt_in1 and prompt_in2. The old
712 way still works (it's invoked by the default hook), of course.
717 way still works (it's invoked by the default hook), of course.
713
718
714 * Prompts.py: added generate_output_prompt hook for altering output
719 * Prompts.py: added generate_output_prompt hook for altering output
715 prompt
720 prompt
716
721
717 * Release.py: Changed version string to 0.7.3.svn.
722 * Release.py: Changed version string to 0.7.3.svn.
718
723
719 2006-06-15 Walter Doerwald <walter@livinglogic.de>
724 2006-06-15 Walter Doerwald <walter@livinglogic.de>
720
725
721 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
726 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
722 the call to fetch() always tries to fetch enough data for at least one
727 the call to fetch() always tries to fetch enough data for at least one
723 full screen. This makes it possible to simply call moveto(0,0,True) in
728 full screen. This makes it possible to simply call moveto(0,0,True) in
724 the constructor. Fix typos and removed the obsolete goto attribute.
729 the constructor. Fix typos and removed the obsolete goto attribute.
725
730
726 2006-06-12 Ville Vainio <vivainio@gmail.com>
731 2006-06-12 Ville Vainio <vivainio@gmail.com>
727
732
728 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
733 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
729 allowing $variable interpolation within multiline statements,
734 allowing $variable interpolation within multiline statements,
730 though so far only with "sh" profile for a testing period.
735 though so far only with "sh" profile for a testing period.
731 The patch also enables splitting long commands with \ but it
736 The patch also enables splitting long commands with \ but it
732 doesn't work properly yet.
737 doesn't work properly yet.
733
738
734 2006-06-12 Walter Doerwald <walter@livinglogic.de>
739 2006-06-12 Walter Doerwald <walter@livinglogic.de>
735
740
736 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
741 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
737 input history and the position of the cursor in the input history for
742 input history and the position of the cursor in the input history for
738 the find, findbackwards and goto command.
743 the find, findbackwards and goto command.
739
744
740 2006-06-10 Walter Doerwald <walter@livinglogic.de>
745 2006-06-10 Walter Doerwald <walter@livinglogic.de>
741
746
742 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
747 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
743 implements the basic functionality of browser commands that require
748 implements the basic functionality of browser commands that require
744 input. Reimplement the goto, find and findbackwards commands as
749 input. Reimplement the goto, find and findbackwards commands as
745 subclasses of _CommandInput. Add an input history and keymaps to those
750 subclasses of _CommandInput. Add an input history and keymaps to those
746 commands. Add "\r" as a keyboard shortcut for the enterdefault and
751 commands. Add "\r" as a keyboard shortcut for the enterdefault and
747 execute commands.
752 execute commands.
748
753
749 2006-06-07 Ville Vainio <vivainio@gmail.com>
754 2006-06-07 Ville Vainio <vivainio@gmail.com>
750
755
751 * iplib.py: ipython mybatch.ipy exits ipython immediately after
756 * iplib.py: ipython mybatch.ipy exits ipython immediately after
752 running the batch files instead of leaving the session open.
757 running the batch files instead of leaving the session open.
753
758
754 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
759 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
755
760
756 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
761 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
757 the original fix was incomplete. Patch submitted by W. Maier.
762 the original fix was incomplete. Patch submitted by W. Maier.
758
763
759 2006-06-07 Ville Vainio <vivainio@gmail.com>
764 2006-06-07 Ville Vainio <vivainio@gmail.com>
760
765
761 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
766 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
762 Confirmation prompts can be supressed by 'quiet' option.
767 Confirmation prompts can be supressed by 'quiet' option.
763 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
768 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
764
769
765 2006-06-06 *** Released version 0.7.2
770 2006-06-06 *** Released version 0.7.2
766
771
767 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
772 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
768
773
769 * IPython/Release.py (version): Made 0.7.2 final for release.
774 * IPython/Release.py (version): Made 0.7.2 final for release.
770 Repo tagged and release cut.
775 Repo tagged and release cut.
771
776
772 2006-06-05 Ville Vainio <vivainio@gmail.com>
777 2006-06-05 Ville Vainio <vivainio@gmail.com>
773
778
774 * Magic.py (magic_rehashx): Honor no_alias list earlier in
779 * Magic.py (magic_rehashx): Honor no_alias list earlier in
775 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
780 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
776
781
777 * upgrade_dir.py: try import 'path' module a bit harder
782 * upgrade_dir.py: try import 'path' module a bit harder
778 (for %upgrade)
783 (for %upgrade)
779
784
780 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
785 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
781
786
782 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
787 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
783 instead of looping 20 times.
788 instead of looping 20 times.
784
789
785 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
790 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
786 correctly at initialization time. Bug reported by Krishna Mohan
791 correctly at initialization time. Bug reported by Krishna Mohan
787 Gundu <gkmohan-AT-gmail.com> on the user list.
792 Gundu <gkmohan-AT-gmail.com> on the user list.
788
793
789 * IPython/Release.py (version): Mark 0.7.2 version to start
794 * IPython/Release.py (version): Mark 0.7.2 version to start
790 testing for release on 06/06.
795 testing for release on 06/06.
791
796
792 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
797 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
793
798
794 * scripts/irunner: thin script interface so users don't have to
799 * scripts/irunner: thin script interface so users don't have to
795 find the module and call it as an executable, since modules rarely
800 find the module and call it as an executable, since modules rarely
796 live in people's PATH.
801 live in people's PATH.
797
802
798 * IPython/irunner.py (InteractiveRunner.__init__): added
803 * IPython/irunner.py (InteractiveRunner.__init__): added
799 delaybeforesend attribute to control delays with newer versions of
804 delaybeforesend attribute to control delays with newer versions of
800 pexpect. Thanks to detailed help from pexpect's author, Noah
805 pexpect. Thanks to detailed help from pexpect's author, Noah
801 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
806 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
802 correctly (it works in NoColor mode).
807 correctly (it works in NoColor mode).
803
808
804 * IPython/iplib.py (handle_normal): fix nasty crash reported on
809 * IPython/iplib.py (handle_normal): fix nasty crash reported on
805 SAGE list, from improper log() calls.
810 SAGE list, from improper log() calls.
806
811
807 2006-05-31 Ville Vainio <vivainio@gmail.com>
812 2006-05-31 Ville Vainio <vivainio@gmail.com>
808
813
809 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
814 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
810 with args in parens to work correctly with dirs that have spaces.
815 with args in parens to work correctly with dirs that have spaces.
811
816
812 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
817 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
813
818
814 * IPython/Logger.py (Logger.logstart): add option to log raw input
819 * IPython/Logger.py (Logger.logstart): add option to log raw input
815 instead of the processed one. A -r flag was added to the
820 instead of the processed one. A -r flag was added to the
816 %logstart magic used for controlling logging.
821 %logstart magic used for controlling logging.
817
822
818 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
823 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
819
824
820 * IPython/iplib.py (InteractiveShell.__init__): add check for the
825 * IPython/iplib.py (InteractiveShell.__init__): add check for the
821 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
826 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
822 recognize the option. After a bug report by Will Maier. This
827 recognize the option. After a bug report by Will Maier. This
823 closes #64 (will do it after confirmation from W. Maier).
828 closes #64 (will do it after confirmation from W. Maier).
824
829
825 * IPython/irunner.py: New module to run scripts as if manually
830 * IPython/irunner.py: New module to run scripts as if manually
826 typed into an interactive environment, based on pexpect. After a
831 typed into an interactive environment, based on pexpect. After a
827 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
832 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
828 ipython-user list. Simple unittests in the tests/ directory.
833 ipython-user list. Simple unittests in the tests/ directory.
829
834
830 * tools/release: add Will Maier, OpenBSD port maintainer, to
835 * tools/release: add Will Maier, OpenBSD port maintainer, to
831 recepients list. We are now officially part of the OpenBSD ports:
836 recepients list. We are now officially part of the OpenBSD ports:
832 http://www.openbsd.org/ports.html ! Many thanks to Will for the
837 http://www.openbsd.org/ports.html ! Many thanks to Will for the
833 work.
838 work.
834
839
835 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
840 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
836
841
837 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
842 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
838 so that it doesn't break tkinter apps.
843 so that it doesn't break tkinter apps.
839
844
840 * IPython/iplib.py (_prefilter): fix bug where aliases would
845 * IPython/iplib.py (_prefilter): fix bug where aliases would
841 shadow variables when autocall was fully off. Reported by SAGE
846 shadow variables when autocall was fully off. Reported by SAGE
842 author William Stein.
847 author William Stein.
843
848
844 * IPython/OInspect.py (Inspector.__init__): add a flag to control
849 * IPython/OInspect.py (Inspector.__init__): add a flag to control
845 at what detail level strings are computed when foo? is requested.
850 at what detail level strings are computed when foo? is requested.
846 This allows users to ask for example that the string form of an
851 This allows users to ask for example that the string form of an
847 object is only computed when foo?? is called, or even never, by
852 object is only computed when foo?? is called, or even never, by
848 setting the object_info_string_level >= 2 in the configuration
853 setting the object_info_string_level >= 2 in the configuration
849 file. This new option has been added and documented. After a
854 file. This new option has been added and documented. After a
850 request by SAGE to be able to control the printing of very large
855 request by SAGE to be able to control the printing of very large
851 objects more easily.
856 objects more easily.
852
857
853 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
858 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
854
859
855 * IPython/ipmaker.py (make_IPython): remove the ipython call path
860 * IPython/ipmaker.py (make_IPython): remove the ipython call path
856 from sys.argv, to be 100% consistent with how Python itself works
861 from sys.argv, to be 100% consistent with how Python itself works
857 (as seen for example with python -i file.py). After a bug report
862 (as seen for example with python -i file.py). After a bug report
858 by Jeffrey Collins.
863 by Jeffrey Collins.
859
864
860 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
865 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
861 nasty bug which was preventing custom namespaces with -pylab,
866 nasty bug which was preventing custom namespaces with -pylab,
862 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
867 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
863 compatibility (long gone from mpl).
868 compatibility (long gone from mpl).
864
869
865 * IPython/ipapi.py (make_session): name change: create->make. We
870 * IPython/ipapi.py (make_session): name change: create->make. We
866 use make in other places (ipmaker,...), it's shorter and easier to
871 use make in other places (ipmaker,...), it's shorter and easier to
867 type and say, etc. I'm trying to clean things before 0.7.2 so
872 type and say, etc. I'm trying to clean things before 0.7.2 so
868 that I can keep things stable wrt to ipapi in the chainsaw branch.
873 that I can keep things stable wrt to ipapi in the chainsaw branch.
869
874
870 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
875 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
871 python-mode recognizes our debugger mode. Add support for
876 python-mode recognizes our debugger mode. Add support for
872 autoindent inside (X)emacs. After a patch sent in by Jin Liu
877 autoindent inside (X)emacs. After a patch sent in by Jin Liu
873 <m.liu.jin-AT-gmail.com> originally written by
878 <m.liu.jin-AT-gmail.com> originally written by
874 doxgen-AT-newsmth.net (with minor modifications for xemacs
879 doxgen-AT-newsmth.net (with minor modifications for xemacs
875 compatibility)
880 compatibility)
876
881
877 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
882 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
878 tracebacks when walking the stack so that the stack tracking system
883 tracebacks when walking the stack so that the stack tracking system
879 in emacs' python-mode can identify the frames correctly.
884 in emacs' python-mode can identify the frames correctly.
880
885
881 * IPython/ipmaker.py (make_IPython): make the internal (and
886 * IPython/ipmaker.py (make_IPython): make the internal (and
882 default config) autoedit_syntax value false by default. Too many
887 default config) autoedit_syntax value false by default. Too many
883 users have complained to me (both on and off-list) about problems
888 users have complained to me (both on and off-list) about problems
884 with this option being on by default, so I'm making it default to
889 with this option being on by default, so I'm making it default to
885 off. It can still be enabled by anyone via the usual mechanisms.
890 off. It can still be enabled by anyone via the usual mechanisms.
886
891
887 * IPython/completer.py (Completer.attr_matches): add support for
892 * IPython/completer.py (Completer.attr_matches): add support for
888 PyCrust-style _getAttributeNames magic method. Patch contributed
893 PyCrust-style _getAttributeNames magic method. Patch contributed
889 by <mscott-AT-goldenspud.com>. Closes #50.
894 by <mscott-AT-goldenspud.com>. Closes #50.
890
895
891 * IPython/iplib.py (InteractiveShell.__init__): remove the
896 * IPython/iplib.py (InteractiveShell.__init__): remove the
892 deletion of exit/quit from __builtin__, which can break
897 deletion of exit/quit from __builtin__, which can break
893 third-party tools like the Zope debugging console. The
898 third-party tools like the Zope debugging console. The
894 %exit/%quit magics remain. In general, it's probably a good idea
899 %exit/%quit magics remain. In general, it's probably a good idea
895 not to delete anything from __builtin__, since we never know what
900 not to delete anything from __builtin__, since we never know what
896 that will break. In any case, python now (for 2.5) will support
901 that will break. In any case, python now (for 2.5) will support
897 'real' exit/quit, so this issue is moot. Closes #55.
902 'real' exit/quit, so this issue is moot. Closes #55.
898
903
899 * IPython/genutils.py (with_obj): rename the 'with' function to
904 * IPython/genutils.py (with_obj): rename the 'with' function to
900 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
905 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
901 becomes a language keyword. Closes #53.
906 becomes a language keyword. Closes #53.
902
907
903 * IPython/FakeModule.py (FakeModule.__init__): add a proper
908 * IPython/FakeModule.py (FakeModule.__init__): add a proper
904 __file__ attribute to this so it fools more things into thinking
909 __file__ attribute to this so it fools more things into thinking
905 it is a real module. Closes #59.
910 it is a real module. Closes #59.
906
911
907 * IPython/Magic.py (magic_edit): add -n option to open the editor
912 * IPython/Magic.py (magic_edit): add -n option to open the editor
908 at a specific line number. After a patch by Stefan van der Walt.
913 at a specific line number. After a patch by Stefan van der Walt.
909
914
910 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
915 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
911
916
912 * IPython/iplib.py (edit_syntax_error): fix crash when for some
917 * IPython/iplib.py (edit_syntax_error): fix crash when for some
913 reason the file could not be opened. After automatic crash
918 reason the file could not be opened. After automatic crash
914 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
919 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
915 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
920 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
916 (_should_recompile): Don't fire editor if using %bg, since there
921 (_should_recompile): Don't fire editor if using %bg, since there
917 is no file in the first place. From the same report as above.
922 is no file in the first place. From the same report as above.
918 (raw_input): protect against faulty third-party prefilters. After
923 (raw_input): protect against faulty third-party prefilters. After
919 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
924 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
920 while running under SAGE.
925 while running under SAGE.
921
926
922 2006-05-23 Ville Vainio <vivainio@gmail.com>
927 2006-05-23 Ville Vainio <vivainio@gmail.com>
923
928
924 * ipapi.py: Stripped down ip.to_user_ns() to work only as
929 * ipapi.py: Stripped down ip.to_user_ns() to work only as
925 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
930 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
926 now returns None (again), unless dummy is specifically allowed by
931 now returns None (again), unless dummy is specifically allowed by
927 ipapi.get(allow_dummy=True).
932 ipapi.get(allow_dummy=True).
928
933
929 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
934 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
930
935
931 * IPython: remove all 2.2-compatibility objects and hacks from
936 * IPython: remove all 2.2-compatibility objects and hacks from
932 everywhere, since we only support 2.3 at this point. Docs
937 everywhere, since we only support 2.3 at this point. Docs
933 updated.
938 updated.
934
939
935 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
940 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
936 Anything requiring extra validation can be turned into a Python
941 Anything requiring extra validation can be turned into a Python
937 property in the future. I used a property for the db one b/c
942 property in the future. I used a property for the db one b/c
938 there was a nasty circularity problem with the initialization
943 there was a nasty circularity problem with the initialization
939 order, which right now I don't have time to clean up.
944 order, which right now I don't have time to clean up.
940
945
941 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
946 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
942 another locking bug reported by Jorgen. I'm not 100% sure though,
947 another locking bug reported by Jorgen. I'm not 100% sure though,
943 so more testing is needed...
948 so more testing is needed...
944
949
945 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
950 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
946
951
947 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
952 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
948 local variables from any routine in user code (typically executed
953 local variables from any routine in user code (typically executed
949 with %run) directly into the interactive namespace. Very useful
954 with %run) directly into the interactive namespace. Very useful
950 when doing complex debugging.
955 when doing complex debugging.
951 (IPythonNotRunning): Changed the default None object to a dummy
956 (IPythonNotRunning): Changed the default None object to a dummy
952 whose attributes can be queried as well as called without
957 whose attributes can be queried as well as called without
953 exploding, to ease writing code which works transparently both in
958 exploding, to ease writing code which works transparently both in
954 and out of ipython and uses some of this API.
959 and out of ipython and uses some of this API.
955
960
956 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
961 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
957
962
958 * IPython/hooks.py (result_display): Fix the fact that our display
963 * IPython/hooks.py (result_display): Fix the fact that our display
959 hook was using str() instead of repr(), as the default python
964 hook was using str() instead of repr(), as the default python
960 console does. This had gone unnoticed b/c it only happened if
965 console does. This had gone unnoticed b/c it only happened if
961 %Pprint was off, but the inconsistency was there.
966 %Pprint was off, but the inconsistency was there.
962
967
963 2006-05-15 Ville Vainio <vivainio@gmail.com>
968 2006-05-15 Ville Vainio <vivainio@gmail.com>
964
969
965 * Oinspect.py: Only show docstring for nonexisting/binary files
970 * Oinspect.py: Only show docstring for nonexisting/binary files
966 when doing object??, closing ticket #62
971 when doing object??, closing ticket #62
967
972
968 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
973 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
969
974
970 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
975 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
971 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
976 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
972 was being released in a routine which hadn't checked if it had
977 was being released in a routine which hadn't checked if it had
973 been the one to acquire it.
978 been the one to acquire it.
974
979
975 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
980 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
976
981
977 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
982 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
978
983
979 2006-04-11 Ville Vainio <vivainio@gmail.com>
984 2006-04-11 Ville Vainio <vivainio@gmail.com>
980
985
981 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
986 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
982 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
987 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
983 prefilters, allowing stuff like magics and aliases in the file.
988 prefilters, allowing stuff like magics and aliases in the file.
984
989
985 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
990 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
986 added. Supported now are "%clear in" and "%clear out" (clear input and
991 added. Supported now are "%clear in" and "%clear out" (clear input and
987 output history, respectively). Also fixed CachedOutput.flush to
992 output history, respectively). Also fixed CachedOutput.flush to
988 properly flush the output cache.
993 properly flush the output cache.
989
994
990 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
995 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
991 half-success (and fail explicitly).
996 half-success (and fail explicitly).
992
997
993 2006-03-28 Ville Vainio <vivainio@gmail.com>
998 2006-03-28 Ville Vainio <vivainio@gmail.com>
994
999
995 * iplib.py: Fix quoting of aliases so that only argless ones
1000 * iplib.py: Fix quoting of aliases so that only argless ones
996 are quoted
1001 are quoted
997
1002
998 2006-03-28 Ville Vainio <vivainio@gmail.com>
1003 2006-03-28 Ville Vainio <vivainio@gmail.com>
999
1004
1000 * iplib.py: Quote aliases with spaces in the name.
1005 * iplib.py: Quote aliases with spaces in the name.
1001 "c:\program files\blah\bin" is now legal alias target.
1006 "c:\program files\blah\bin" is now legal alias target.
1002
1007
1003 * ext_rehashdir.py: Space no longer allowed as arg
1008 * ext_rehashdir.py: Space no longer allowed as arg
1004 separator, since space is legal in path names.
1009 separator, since space is legal in path names.
1005
1010
1006 2006-03-16 Ville Vainio <vivainio@gmail.com>
1011 2006-03-16 Ville Vainio <vivainio@gmail.com>
1007
1012
1008 * upgrade_dir.py: Take path.py from Extensions, correcting
1013 * upgrade_dir.py: Take path.py from Extensions, correcting
1009 %upgrade magic
1014 %upgrade magic
1010
1015
1011 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
1016 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
1012
1017
1013 * hooks.py: Only enclose editor binary in quotes if legal and
1018 * hooks.py: Only enclose editor binary in quotes if legal and
1014 necessary (space in the name, and is an existing file). Fixes a bug
1019 necessary (space in the name, and is an existing file). Fixes a bug
1015 reported by Zachary Pincus.
1020 reported by Zachary Pincus.
1016
1021
1017 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
1022 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
1018
1023
1019 * Manual: thanks to a tip on proper color handling for Emacs, by
1024 * Manual: thanks to a tip on proper color handling for Emacs, by
1020 Eric J Haywiser <ejh1-AT-MIT.EDU>.
1025 Eric J Haywiser <ejh1-AT-MIT.EDU>.
1021
1026
1022 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
1027 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
1023 by applying the provided patch. Thanks to Liu Jin
1028 by applying the provided patch. Thanks to Liu Jin
1024 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
1029 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
1025 XEmacs/Linux, I'm trusting the submitter that it actually helps
1030 XEmacs/Linux, I'm trusting the submitter that it actually helps
1026 under win32/GNU Emacs. Will revisit if any problems are reported.
1031 under win32/GNU Emacs. Will revisit if any problems are reported.
1027
1032
1028 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1033 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1029
1034
1030 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
1035 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
1031 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
1036 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
1032
1037
1033 2006-03-12 Ville Vainio <vivainio@gmail.com>
1038 2006-03-12 Ville Vainio <vivainio@gmail.com>
1034
1039
1035 * Magic.py (magic_timeit): Added %timeit magic, contributed by
1040 * Magic.py (magic_timeit): Added %timeit magic, contributed by
1036 Torsten Marek.
1041 Torsten Marek.
1037
1042
1038 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1043 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1039
1044
1040 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
1045 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
1041 line ranges works again.
1046 line ranges works again.
1042
1047
1043 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
1048 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
1044
1049
1045 * IPython/iplib.py (showtraceback): add back sys.last_traceback
1050 * IPython/iplib.py (showtraceback): add back sys.last_traceback
1046 and friends, after a discussion with Zach Pincus on ipython-user.
1051 and friends, after a discussion with Zach Pincus on ipython-user.
1047 I'm not 100% sure, but after thinking about it quite a bit, it may
1052 I'm not 100% sure, but after thinking about it quite a bit, it may
1048 be OK. Testing with the multithreaded shells didn't reveal any
1053 be OK. Testing with the multithreaded shells didn't reveal any
1049 problems, but let's keep an eye out.
1054 problems, but let's keep an eye out.
1050
1055
1051 In the process, I fixed a few things which were calling
1056 In the process, I fixed a few things which were calling
1052 self.InteractiveTB() directly (like safe_execfile), which is a
1057 self.InteractiveTB() directly (like safe_execfile), which is a
1053 mistake: ALL exception reporting should be done by calling
1058 mistake: ALL exception reporting should be done by calling
1054 self.showtraceback(), which handles state and tab-completion and
1059 self.showtraceback(), which handles state and tab-completion and
1055 more.
1060 more.
1056
1061
1057 2006-03-01 Ville Vainio <vivainio@gmail.com>
1062 2006-03-01 Ville Vainio <vivainio@gmail.com>
1058
1063
1059 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
1064 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
1060 To use, do "from ipipe import *".
1065 To use, do "from ipipe import *".
1061
1066
1062 2006-02-24 Ville Vainio <vivainio@gmail.com>
1067 2006-02-24 Ville Vainio <vivainio@gmail.com>
1063
1068
1064 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
1069 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
1065 "cleanly" and safely than the older upgrade mechanism.
1070 "cleanly" and safely than the older upgrade mechanism.
1066
1071
1067 2006-02-21 Ville Vainio <vivainio@gmail.com>
1072 2006-02-21 Ville Vainio <vivainio@gmail.com>
1068
1073
1069 * Magic.py: %save works again.
1074 * Magic.py: %save works again.
1070
1075
1071 2006-02-15 Ville Vainio <vivainio@gmail.com>
1076 2006-02-15 Ville Vainio <vivainio@gmail.com>
1072
1077
1073 * Magic.py: %Pprint works again
1078 * Magic.py: %Pprint works again
1074
1079
1075 * Extensions/ipy_sane_defaults.py: Provide everything provided
1080 * Extensions/ipy_sane_defaults.py: Provide everything provided
1076 in default ipythonrc, to make it possible to have a completely empty
1081 in default ipythonrc, to make it possible to have a completely empty
1077 ipythonrc (and thus completely rc-file free configuration)
1082 ipythonrc (and thus completely rc-file free configuration)
1078
1083
1079 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
1084 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
1080
1085
1081 * IPython/hooks.py (editor): quote the call to the editor command,
1086 * IPython/hooks.py (editor): quote the call to the editor command,
1082 to allow commands with spaces in them. Problem noted by watching
1087 to allow commands with spaces in them. Problem noted by watching
1083 Ian Oswald's video about textpad under win32 at
1088 Ian Oswald's video about textpad under win32 at
1084 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
1089 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
1085
1090
1086 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
1091 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
1087 describing magics (we haven't used @ for a loong time).
1092 describing magics (we haven't used @ for a loong time).
1088
1093
1089 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
1094 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
1090 contributed by marienz to close
1095 contributed by marienz to close
1091 http://www.scipy.net/roundup/ipython/issue53.
1096 http://www.scipy.net/roundup/ipython/issue53.
1092
1097
1093 2006-02-10 Ville Vainio <vivainio@gmail.com>
1098 2006-02-10 Ville Vainio <vivainio@gmail.com>
1094
1099
1095 * genutils.py: getoutput now works in win32 too
1100 * genutils.py: getoutput now works in win32 too
1096
1101
1097 * completer.py: alias and magic completion only invoked
1102 * completer.py: alias and magic completion only invoked
1098 at the first "item" in the line, to avoid "cd %store"
1103 at the first "item" in the line, to avoid "cd %store"
1099 nonsense.
1104 nonsense.
1100
1105
1101 2006-02-09 Ville Vainio <vivainio@gmail.com>
1106 2006-02-09 Ville Vainio <vivainio@gmail.com>
1102
1107
1103 * test/*: Added a unit testing framework (finally).
1108 * test/*: Added a unit testing framework (finally).
1104 '%run runtests.py' to run test_*.
1109 '%run runtests.py' to run test_*.
1105
1110
1106 * ipapi.py: Exposed runlines and set_custom_exc
1111 * ipapi.py: Exposed runlines and set_custom_exc
1107
1112
1108 2006-02-07 Ville Vainio <vivainio@gmail.com>
1113 2006-02-07 Ville Vainio <vivainio@gmail.com>
1109
1114
1110 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
1115 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
1111 instead use "f(1 2)" as before.
1116 instead use "f(1 2)" as before.
1112
1117
1113 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
1118 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
1114
1119
1115 * IPython/demo.py (IPythonDemo): Add new classes to the demo
1120 * IPython/demo.py (IPythonDemo): Add new classes to the demo
1116 facilities, for demos processed by the IPython input filter
1121 facilities, for demos processed by the IPython input filter
1117 (IPythonDemo), and for running a script one-line-at-a-time as a
1122 (IPythonDemo), and for running a script one-line-at-a-time as a
1118 demo, both for pure Python (LineDemo) and for IPython-processed
1123 demo, both for pure Python (LineDemo) and for IPython-processed
1119 input (IPythonLineDemo). After a request by Dave Kohel, from the
1124 input (IPythonLineDemo). After a request by Dave Kohel, from the
1120 SAGE team.
1125 SAGE team.
1121 (Demo.edit): added an edit() method to the demo objects, to edit
1126 (Demo.edit): added an edit() method to the demo objects, to edit
1122 the in-memory copy of the last executed block.
1127 the in-memory copy of the last executed block.
1123
1128
1124 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
1129 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
1125 processing to %edit, %macro and %save. These commands can now be
1130 processing to %edit, %macro and %save. These commands can now be
1126 invoked on the unprocessed input as it was typed by the user
1131 invoked on the unprocessed input as it was typed by the user
1127 (without any prefilters applied). After requests by the SAGE team
1132 (without any prefilters applied). After requests by the SAGE team
1128 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
1133 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
1129
1134
1130 2006-02-01 Ville Vainio <vivainio@gmail.com>
1135 2006-02-01 Ville Vainio <vivainio@gmail.com>
1131
1136
1132 * setup.py, eggsetup.py: easy_install ipython==dev works
1137 * setup.py, eggsetup.py: easy_install ipython==dev works
1133 correctly now (on Linux)
1138 correctly now (on Linux)
1134
1139
1135 * ipy_user_conf,ipmaker: user config changes, removed spurious
1140 * ipy_user_conf,ipmaker: user config changes, removed spurious
1136 warnings
1141 warnings
1137
1142
1138 * iplib: if rc.banner is string, use it as is.
1143 * iplib: if rc.banner is string, use it as is.
1139
1144
1140 * Magic: %pycat accepts a string argument and pages it's contents.
1145 * Magic: %pycat accepts a string argument and pages it's contents.
1141
1146
1142
1147
1143 2006-01-30 Ville Vainio <vivainio@gmail.com>
1148 2006-01-30 Ville Vainio <vivainio@gmail.com>
1144
1149
1145 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
1150 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
1146 Now %store and bookmarks work through PickleShare, meaning that
1151 Now %store and bookmarks work through PickleShare, meaning that
1147 concurrent access is possible and all ipython sessions see the
1152 concurrent access is possible and all ipython sessions see the
1148 same database situation all the time, instead of snapshot of
1153 same database situation all the time, instead of snapshot of
1149 the situation when the session was started. Hence, %bookmark
1154 the situation when the session was started. Hence, %bookmark
1150 results are immediately accessible from othes sessions. The database
1155 results are immediately accessible from othes sessions. The database
1151 is also available for use by user extensions. See:
1156 is also available for use by user extensions. See:
1152 http://www.python.org/pypi/pickleshare
1157 http://www.python.org/pypi/pickleshare
1153
1158
1154 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
1159 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
1155
1160
1156 * aliases can now be %store'd
1161 * aliases can now be %store'd
1157
1162
1158 * path.py moved to Extensions so that pickleshare does not need
1163 * path.py moved to Extensions so that pickleshare does not need
1159 IPython-specific import. Extensions added to pythonpath right
1164 IPython-specific import. Extensions added to pythonpath right
1160 at __init__.
1165 at __init__.
1161
1166
1162 * iplib.py: ipalias deprecated/redundant; aliases are converted and
1167 * iplib.py: ipalias deprecated/redundant; aliases are converted and
1163 called with _ip.system and the pre-transformed command string.
1168 called with _ip.system and the pre-transformed command string.
1164
1169
1165 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
1170 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
1166
1171
1167 * IPython/iplib.py (interact): Fix that we were not catching
1172 * IPython/iplib.py (interact): Fix that we were not catching
1168 KeyboardInterrupt exceptions properly. I'm not quite sure why the
1173 KeyboardInterrupt exceptions properly. I'm not quite sure why the
1169 logic here had to change, but it's fixed now.
1174 logic here had to change, but it's fixed now.
1170
1175
1171 2006-01-29 Ville Vainio <vivainio@gmail.com>
1176 2006-01-29 Ville Vainio <vivainio@gmail.com>
1172
1177
1173 * iplib.py: Try to import pyreadline on Windows.
1178 * iplib.py: Try to import pyreadline on Windows.
1174
1179
1175 2006-01-27 Ville Vainio <vivainio@gmail.com>
1180 2006-01-27 Ville Vainio <vivainio@gmail.com>
1176
1181
1177 * iplib.py: Expose ipapi as _ip in builtin namespace.
1182 * iplib.py: Expose ipapi as _ip in builtin namespace.
1178 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
1183 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
1179 and ip_set_hook (-> _ip.set_hook) redundant. % and !
1184 and ip_set_hook (-> _ip.set_hook) redundant. % and !
1180 syntax now produce _ip.* variant of the commands.
1185 syntax now produce _ip.* variant of the commands.
1181
1186
1182 * "_ip.options().autoedit_syntax = 2" automatically throws
1187 * "_ip.options().autoedit_syntax = 2" automatically throws
1183 user to editor for syntax error correction without prompting.
1188 user to editor for syntax error correction without prompting.
1184
1189
1185 2006-01-27 Ville Vainio <vivainio@gmail.com>
1190 2006-01-27 Ville Vainio <vivainio@gmail.com>
1186
1191
1187 * ipmaker.py: Give "realistic" sys.argv for scripts (without
1192 * ipmaker.py: Give "realistic" sys.argv for scripts (without
1188 'ipython' at argv[0]) executed through command line.
1193 'ipython' at argv[0]) executed through command line.
1189 NOTE: this DEPRECATES calling ipython with multiple scripts
1194 NOTE: this DEPRECATES calling ipython with multiple scripts
1190 ("ipython a.py b.py c.py")
1195 ("ipython a.py b.py c.py")
1191
1196
1192 * iplib.py, hooks.py: Added configurable input prefilter,
1197 * iplib.py, hooks.py: Added configurable input prefilter,
1193 named 'input_prefilter'. See ext_rescapture.py for example
1198 named 'input_prefilter'. See ext_rescapture.py for example
1194 usage.
1199 usage.
1195
1200
1196 * ext_rescapture.py, Magic.py: Better system command output capture
1201 * ext_rescapture.py, Magic.py: Better system command output capture
1197 through 'var = !ls' (deprecates user-visible %sc). Same notation
1202 through 'var = !ls' (deprecates user-visible %sc). Same notation
1198 applies for magics, 'var = %alias' assigns alias list to var.
1203 applies for magics, 'var = %alias' assigns alias list to var.
1199
1204
1200 * ipapi.py: added meta() for accessing extension-usable data store.
1205 * ipapi.py: added meta() for accessing extension-usable data store.
1201
1206
1202 * iplib.py: added InteractiveShell.getapi(). New magics should be
1207 * iplib.py: added InteractiveShell.getapi(). New magics should be
1203 written doing self.getapi() instead of using the shell directly.
1208 written doing self.getapi() instead of using the shell directly.
1204
1209
1205 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
1210 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
1206 %store foo >> ~/myfoo.txt to store variables to files (in clean
1211 %store foo >> ~/myfoo.txt to store variables to files (in clean
1207 textual form, not a restorable pickle).
1212 textual form, not a restorable pickle).
1208
1213
1209 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
1214 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
1210
1215
1211 * usage.py, Magic.py: added %quickref
1216 * usage.py, Magic.py: added %quickref
1212
1217
1213 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
1218 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
1214
1219
1215 * GetoptErrors when invoking magics etc. with wrong args
1220 * GetoptErrors when invoking magics etc. with wrong args
1216 are now more helpful:
1221 are now more helpful:
1217 GetoptError: option -l not recognized (allowed: "qb" )
1222 GetoptError: option -l not recognized (allowed: "qb" )
1218
1223
1219 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
1224 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
1220
1225
1221 * IPython/demo.py (Demo.show): Flush stdout after each block, so
1226 * IPython/demo.py (Demo.show): Flush stdout after each block, so
1222 computationally intensive blocks don't appear to stall the demo.
1227 computationally intensive blocks don't appear to stall the demo.
1223
1228
1224 2006-01-24 Ville Vainio <vivainio@gmail.com>
1229 2006-01-24 Ville Vainio <vivainio@gmail.com>
1225
1230
1226 * iplib.py, hooks.py: 'result_display' hook can return a non-None
1231 * iplib.py, hooks.py: 'result_display' hook can return a non-None
1227 value to manipulate resulting history entry.
1232 value to manipulate resulting history entry.
1228
1233
1229 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
1234 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
1230 to instance methods of IPApi class, to make extending an embedded
1235 to instance methods of IPApi class, to make extending an embedded
1231 IPython feasible. See ext_rehashdir.py for example usage.
1236 IPython feasible. See ext_rehashdir.py for example usage.
1232
1237
1233 * Merged 1071-1076 from branches/0.7.1
1238 * Merged 1071-1076 from branches/0.7.1
1234
1239
1235
1240
1236 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
1241 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
1237
1242
1238 * tools/release (daystamp): Fix build tools to use the new
1243 * tools/release (daystamp): Fix build tools to use the new
1239 eggsetup.py script to build lightweight eggs.
1244 eggsetup.py script to build lightweight eggs.
1240
1245
1241 * Applied changesets 1062 and 1064 before 0.7.1 release.
1246 * Applied changesets 1062 and 1064 before 0.7.1 release.
1242
1247
1243 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
1248 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
1244 see the raw input history (without conversions like %ls ->
1249 see the raw input history (without conversions like %ls ->
1245 ipmagic("ls")). After a request from W. Stein, SAGE
1250 ipmagic("ls")). After a request from W. Stein, SAGE
1246 (http://modular.ucsd.edu/sage) developer. This information is
1251 (http://modular.ucsd.edu/sage) developer. This information is
1247 stored in the input_hist_raw attribute of the IPython instance, so
1252 stored in the input_hist_raw attribute of the IPython instance, so
1248 developers can access it if needed (it's an InputList instance).
1253 developers can access it if needed (it's an InputList instance).
1249
1254
1250 * Versionstring = 0.7.2.svn
1255 * Versionstring = 0.7.2.svn
1251
1256
1252 * eggsetup.py: A separate script for constructing eggs, creates
1257 * eggsetup.py: A separate script for constructing eggs, creates
1253 proper launch scripts even on Windows (an .exe file in
1258 proper launch scripts even on Windows (an .exe file in
1254 \python24\scripts).
1259 \python24\scripts).
1255
1260
1256 * ipapi.py: launch_new_instance, launch entry point needed for the
1261 * ipapi.py: launch_new_instance, launch entry point needed for the
1257 egg.
1262 egg.
1258
1263
1259 2006-01-23 Ville Vainio <vivainio@gmail.com>
1264 2006-01-23 Ville Vainio <vivainio@gmail.com>
1260
1265
1261 * Added %cpaste magic for pasting python code
1266 * Added %cpaste magic for pasting python code
1262
1267
1263 2006-01-22 Ville Vainio <vivainio@gmail.com>
1268 2006-01-22 Ville Vainio <vivainio@gmail.com>
1264
1269
1265 * Merge from branches/0.7.1 into trunk, revs 1052-1057
1270 * Merge from branches/0.7.1 into trunk, revs 1052-1057
1266
1271
1267 * Versionstring = 0.7.2.svn
1272 * Versionstring = 0.7.2.svn
1268
1273
1269 * eggsetup.py: A separate script for constructing eggs, creates
1274 * eggsetup.py: A separate script for constructing eggs, creates
1270 proper launch scripts even on Windows (an .exe file in
1275 proper launch scripts even on Windows (an .exe file in
1271 \python24\scripts).
1276 \python24\scripts).
1272
1277
1273 * ipapi.py: launch_new_instance, launch entry point needed for the
1278 * ipapi.py: launch_new_instance, launch entry point needed for the
1274 egg.
1279 egg.
1275
1280
1276 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
1281 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
1277
1282
1278 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
1283 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
1279 %pfile foo would print the file for foo even if it was a binary.
1284 %pfile foo would print the file for foo even if it was a binary.
1280 Now, extensions '.so' and '.dll' are skipped.
1285 Now, extensions '.so' and '.dll' are skipped.
1281
1286
1282 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
1287 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
1283 bug, where macros would fail in all threaded modes. I'm not 100%
1288 bug, where macros would fail in all threaded modes. I'm not 100%
1284 sure, so I'm going to put out an rc instead of making a release
1289 sure, so I'm going to put out an rc instead of making a release
1285 today, and wait for feedback for at least a few days.
1290 today, and wait for feedback for at least a few days.
1286
1291
1287 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
1292 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
1288 it...) the handling of pasting external code with autoindent on.
1293 it...) the handling of pasting external code with autoindent on.
1289 To get out of a multiline input, the rule will appear for most
1294 To get out of a multiline input, the rule will appear for most
1290 users unchanged: two blank lines or change the indent level
1295 users unchanged: two blank lines or change the indent level
1291 proposed by IPython. But there is a twist now: you can
1296 proposed by IPython. But there is a twist now: you can
1292 add/subtract only *one or two spaces*. If you add/subtract three
1297 add/subtract only *one or two spaces*. If you add/subtract three
1293 or more (unless you completely delete the line), IPython will
1298 or more (unless you completely delete the line), IPython will
1294 accept that line, and you'll need to enter a second one of pure
1299 accept that line, and you'll need to enter a second one of pure
1295 whitespace. I know it sounds complicated, but I can't find a
1300 whitespace. I know it sounds complicated, but I can't find a
1296 different solution that covers all the cases, with the right
1301 different solution that covers all the cases, with the right
1297 heuristics. Hopefully in actual use, nobody will really notice
1302 heuristics. Hopefully in actual use, nobody will really notice
1298 all these strange rules and things will 'just work'.
1303 all these strange rules and things will 'just work'.
1299
1304
1300 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
1305 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
1301
1306
1302 * IPython/iplib.py (interact): catch exceptions which can be
1307 * IPython/iplib.py (interact): catch exceptions which can be
1303 triggered asynchronously by signal handlers. Thanks to an
1308 triggered asynchronously by signal handlers. Thanks to an
1304 automatic crash report, submitted by Colin Kingsley
1309 automatic crash report, submitted by Colin Kingsley
1305 <tercel-AT-gentoo.org>.
1310 <tercel-AT-gentoo.org>.
1306
1311
1307 2006-01-20 Ville Vainio <vivainio@gmail.com>
1312 2006-01-20 Ville Vainio <vivainio@gmail.com>
1308
1313
1309 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
1314 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
1310 (%rehashdir, very useful, try it out) of how to extend ipython
1315 (%rehashdir, very useful, try it out) of how to extend ipython
1311 with new magics. Also added Extensions dir to pythonpath to make
1316 with new magics. Also added Extensions dir to pythonpath to make
1312 importing extensions easy.
1317 importing extensions easy.
1313
1318
1314 * %store now complains when trying to store interactively declared
1319 * %store now complains when trying to store interactively declared
1315 classes / instances of those classes.
1320 classes / instances of those classes.
1316
1321
1317 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
1322 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
1318 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
1323 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
1319 if they exist, and ipy_user_conf.py with some defaults is created for
1324 if they exist, and ipy_user_conf.py with some defaults is created for
1320 the user.
1325 the user.
1321
1326
1322 * Startup rehashing done by the config file, not InterpreterExec.
1327 * Startup rehashing done by the config file, not InterpreterExec.
1323 This means system commands are available even without selecting the
1328 This means system commands are available even without selecting the
1324 pysh profile. It's the sensible default after all.
1329 pysh profile. It's the sensible default after all.
1325
1330
1326 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
1331 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
1327
1332
1328 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
1333 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
1329 multiline code with autoindent on working. But I am really not
1334 multiline code with autoindent on working. But I am really not
1330 sure, so this needs more testing. Will commit a debug-enabled
1335 sure, so this needs more testing. Will commit a debug-enabled
1331 version for now, while I test it some more, so that Ville and
1336 version for now, while I test it some more, so that Ville and
1332 others may also catch any problems. Also made
1337 others may also catch any problems. Also made
1333 self.indent_current_str() a method, to ensure that there's no
1338 self.indent_current_str() a method, to ensure that there's no
1334 chance of the indent space count and the corresponding string
1339 chance of the indent space count and the corresponding string
1335 falling out of sync. All code needing the string should just call
1340 falling out of sync. All code needing the string should just call
1336 the method.
1341 the method.
1337
1342
1338 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
1343 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
1339
1344
1340 * IPython/Magic.py (magic_edit): fix check for when users don't
1345 * IPython/Magic.py (magic_edit): fix check for when users don't
1341 save their output files, the try/except was in the wrong section.
1346 save their output files, the try/except was in the wrong section.
1342
1347
1343 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
1348 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
1344
1349
1345 * IPython/Magic.py (magic_run): fix __file__ global missing from
1350 * IPython/Magic.py (magic_run): fix __file__ global missing from
1346 script's namespace when executed via %run. After a report by
1351 script's namespace when executed via %run. After a report by
1347 Vivian.
1352 Vivian.
1348
1353
1349 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
1354 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
1350 when using python 2.4. The parent constructor changed in 2.4, and
1355 when using python 2.4. The parent constructor changed in 2.4, and
1351 we need to track it directly (we can't call it, as it messes up
1356 we need to track it directly (we can't call it, as it messes up
1352 readline and tab-completion inside our pdb would stop working).
1357 readline and tab-completion inside our pdb would stop working).
1353 After a bug report by R. Bernstein <rocky-AT-panix.com>.
1358 After a bug report by R. Bernstein <rocky-AT-panix.com>.
1354
1359
1355 2006-01-16 Ville Vainio <vivainio@gmail.com>
1360 2006-01-16 Ville Vainio <vivainio@gmail.com>
1356
1361
1357 * Ipython/magic.py: Reverted back to old %edit functionality
1362 * Ipython/magic.py: Reverted back to old %edit functionality
1358 that returns file contents on exit.
1363 that returns file contents on exit.
1359
1364
1360 * IPython/path.py: Added Jason Orendorff's "path" module to
1365 * IPython/path.py: Added Jason Orendorff's "path" module to
1361 IPython tree, http://www.jorendorff.com/articles/python/path/.
1366 IPython tree, http://www.jorendorff.com/articles/python/path/.
1362 You can get path objects conveniently through %sc, and !!, e.g.:
1367 You can get path objects conveniently through %sc, and !!, e.g.:
1363 sc files=ls
1368 sc files=ls
1364 for p in files.paths: # or files.p
1369 for p in files.paths: # or files.p
1365 print p,p.mtime
1370 print p,p.mtime
1366
1371
1367 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
1372 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
1368 now work again without considering the exclusion regexp -
1373 now work again without considering the exclusion regexp -
1369 hence, things like ',foo my/path' turn to 'foo("my/path")'
1374 hence, things like ',foo my/path' turn to 'foo("my/path")'
1370 instead of syntax error.
1375 instead of syntax error.
1371
1376
1372
1377
1373 2006-01-14 Ville Vainio <vivainio@gmail.com>
1378 2006-01-14 Ville Vainio <vivainio@gmail.com>
1374
1379
1375 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
1380 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
1376 ipapi decorators for python 2.4 users, options() provides access to rc
1381 ipapi decorators for python 2.4 users, options() provides access to rc
1377 data.
1382 data.
1378
1383
1379 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
1384 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
1380 as path separators (even on Linux ;-). Space character after
1385 as path separators (even on Linux ;-). Space character after
1381 backslash (as yielded by tab completer) is still space;
1386 backslash (as yielded by tab completer) is still space;
1382 "%cd long\ name" works as expected.
1387 "%cd long\ name" works as expected.
1383
1388
1384 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
1389 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
1385 as "chain of command", with priority. API stays the same,
1390 as "chain of command", with priority. API stays the same,
1386 TryNext exception raised by a hook function signals that
1391 TryNext exception raised by a hook function signals that
1387 current hook failed and next hook should try handling it, as
1392 current hook failed and next hook should try handling it, as
1388 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
1393 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
1389 requested configurable display hook, which is now implemented.
1394 requested configurable display hook, which is now implemented.
1390
1395
1391 2006-01-13 Ville Vainio <vivainio@gmail.com>
1396 2006-01-13 Ville Vainio <vivainio@gmail.com>
1392
1397
1393 * IPython/platutils*.py: platform specific utility functions,
1398 * IPython/platutils*.py: platform specific utility functions,
1394 so far only set_term_title is implemented (change terminal
1399 so far only set_term_title is implemented (change terminal
1395 label in windowing systems). %cd now changes the title to
1400 label in windowing systems). %cd now changes the title to
1396 current dir.
1401 current dir.
1397
1402
1398 * IPython/Release.py: Added myself to "authors" list,
1403 * IPython/Release.py: Added myself to "authors" list,
1399 had to create new files.
1404 had to create new files.
1400
1405
1401 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
1406 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
1402 shell escape; not a known bug but had potential to be one in the
1407 shell escape; not a known bug but had potential to be one in the
1403 future.
1408 future.
1404
1409
1405 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
1410 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
1406 extension API for IPython! See the module for usage example. Fix
1411 extension API for IPython! See the module for usage example. Fix
1407 OInspect for docstring-less magic functions.
1412 OInspect for docstring-less magic functions.
1408
1413
1409
1414
1410 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
1415 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
1411
1416
1412 * IPython/iplib.py (raw_input): temporarily deactivate all
1417 * IPython/iplib.py (raw_input): temporarily deactivate all
1413 attempts at allowing pasting of code with autoindent on. It
1418 attempts at allowing pasting of code with autoindent on. It
1414 introduced bugs (reported by Prabhu) and I can't seem to find a
1419 introduced bugs (reported by Prabhu) and I can't seem to find a
1415 robust combination which works in all cases. Will have to revisit
1420 robust combination which works in all cases. Will have to revisit
1416 later.
1421 later.
1417
1422
1418 * IPython/genutils.py: remove isspace() function. We've dropped
1423 * IPython/genutils.py: remove isspace() function. We've dropped
1419 2.2 compatibility, so it's OK to use the string method.
1424 2.2 compatibility, so it's OK to use the string method.
1420
1425
1421 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
1426 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
1422
1427
1423 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
1428 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
1424 matching what NOT to autocall on, to include all python binary
1429 matching what NOT to autocall on, to include all python binary
1425 operators (including things like 'and', 'or', 'is' and 'in').
1430 operators (including things like 'and', 'or', 'is' and 'in').
1426 Prompted by a bug report on 'foo & bar', but I realized we had
1431 Prompted by a bug report on 'foo & bar', but I realized we had
1427 many more potential bug cases with other operators. The regexp is
1432 many more potential bug cases with other operators. The regexp is
1428 self.re_exclude_auto, it's fairly commented.
1433 self.re_exclude_auto, it's fairly commented.
1429
1434
1430 2006-01-12 Ville Vainio <vivainio@gmail.com>
1435 2006-01-12 Ville Vainio <vivainio@gmail.com>
1431
1436
1432 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
1437 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
1433 Prettified and hardened string/backslash quoting with ipsystem(),
1438 Prettified and hardened string/backslash quoting with ipsystem(),
1434 ipalias() and ipmagic(). Now even \ characters are passed to
1439 ipalias() and ipmagic(). Now even \ characters are passed to
1435 %magics, !shell escapes and aliases exactly as they are in the
1440 %magics, !shell escapes and aliases exactly as they are in the
1436 ipython command line. Should improve backslash experience,
1441 ipython command line. Should improve backslash experience,
1437 particularly in Windows (path delimiter for some commands that
1442 particularly in Windows (path delimiter for some commands that
1438 won't understand '/'), but Unix benefits as well (regexps). %cd
1443 won't understand '/'), but Unix benefits as well (regexps). %cd
1439 magic still doesn't support backslash path delimiters, though. Also
1444 magic still doesn't support backslash path delimiters, though. Also
1440 deleted all pretense of supporting multiline command strings in
1445 deleted all pretense of supporting multiline command strings in
1441 !system or %magic commands. Thanks to Jerry McRae for suggestions.
1446 !system or %magic commands. Thanks to Jerry McRae for suggestions.
1442
1447
1443 * doc/build_doc_instructions.txt added. Documentation on how to
1448 * doc/build_doc_instructions.txt added. Documentation on how to
1444 use doc/update_manual.py, added yesterday. Both files contributed
1449 use doc/update_manual.py, added yesterday. Both files contributed
1445 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
1450 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
1446 doc/*.sh for deprecation at a later date.
1451 doc/*.sh for deprecation at a later date.
1447
1452
1448 * /ipython.py Added ipython.py to root directory for
1453 * /ipython.py Added ipython.py to root directory for
1449 zero-installation (tar xzvf ipython.tgz; cd ipython; python
1454 zero-installation (tar xzvf ipython.tgz; cd ipython; python
1450 ipython.py) and development convenience (no need to keep doing
1455 ipython.py) and development convenience (no need to keep doing
1451 "setup.py install" between changes).
1456 "setup.py install" between changes).
1452
1457
1453 * Made ! and !! shell escapes work (again) in multiline expressions:
1458 * Made ! and !! shell escapes work (again) in multiline expressions:
1454 if 1:
1459 if 1:
1455 !ls
1460 !ls
1456 !!ls
1461 !!ls
1457
1462
1458 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
1463 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
1459
1464
1460 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
1465 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
1461 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
1466 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
1462 module in case-insensitive installation. Was causing crashes
1467 module in case-insensitive installation. Was causing crashes
1463 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
1468 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
1464
1469
1465 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
1470 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
1466 <marienz-AT-gentoo.org>, closes
1471 <marienz-AT-gentoo.org>, closes
1467 http://www.scipy.net/roundup/ipython/issue51.
1472 http://www.scipy.net/roundup/ipython/issue51.
1468
1473
1469 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
1474 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
1470
1475
1471 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
1476 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
1472 problem of excessive CPU usage under *nix and keyboard lag under
1477 problem of excessive CPU usage under *nix and keyboard lag under
1473 win32.
1478 win32.
1474
1479
1475 2006-01-10 *** Released version 0.7.0
1480 2006-01-10 *** Released version 0.7.0
1476
1481
1477 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
1482 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
1478
1483
1479 * IPython/Release.py (revision): tag version number to 0.7.0,
1484 * IPython/Release.py (revision): tag version number to 0.7.0,
1480 ready for release.
1485 ready for release.
1481
1486
1482 * IPython/Magic.py (magic_edit): Add print statement to %edit so
1487 * IPython/Magic.py (magic_edit): Add print statement to %edit so
1483 it informs the user of the name of the temp. file used. This can
1488 it informs the user of the name of the temp. file used. This can
1484 help if you decide later to reuse that same file, so you know
1489 help if you decide later to reuse that same file, so you know
1485 where to copy the info from.
1490 where to copy the info from.
1486
1491
1487 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
1492 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
1488
1493
1489 * setup_bdist_egg.py: little script to build an egg. Added
1494 * setup_bdist_egg.py: little script to build an egg. Added
1490 support in the release tools as well.
1495 support in the release tools as well.
1491
1496
1492 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
1497 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
1493
1498
1494 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
1499 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
1495 version selection (new -wxversion command line and ipythonrc
1500 version selection (new -wxversion command line and ipythonrc
1496 parameter). Patch contributed by Arnd Baecker
1501 parameter). Patch contributed by Arnd Baecker
1497 <arnd.baecker-AT-web.de>.
1502 <arnd.baecker-AT-web.de>.
1498
1503
1499 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1504 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1500 embedded instances, for variables defined at the interactive
1505 embedded instances, for variables defined at the interactive
1501 prompt of the embedded ipython. Reported by Arnd.
1506 prompt of the embedded ipython. Reported by Arnd.
1502
1507
1503 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
1508 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
1504 it can be used as a (stateful) toggle, or with a direct parameter.
1509 it can be used as a (stateful) toggle, or with a direct parameter.
1505
1510
1506 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
1511 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
1507 could be triggered in certain cases and cause the traceback
1512 could be triggered in certain cases and cause the traceback
1508 printer not to work.
1513 printer not to work.
1509
1514
1510 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
1515 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
1511
1516
1512 * IPython/iplib.py (_should_recompile): Small fix, closes
1517 * IPython/iplib.py (_should_recompile): Small fix, closes
1513 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
1518 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
1514
1519
1515 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
1520 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
1516
1521
1517 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
1522 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
1518 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
1523 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
1519 Moad for help with tracking it down.
1524 Moad for help with tracking it down.
1520
1525
1521 * IPython/iplib.py (handle_auto): fix autocall handling for
1526 * IPython/iplib.py (handle_auto): fix autocall handling for
1522 objects which support BOTH __getitem__ and __call__ (so that f [x]
1527 objects which support BOTH __getitem__ and __call__ (so that f [x]
1523 is left alone, instead of becoming f([x]) automatically).
1528 is left alone, instead of becoming f([x]) automatically).
1524
1529
1525 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
1530 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
1526 Ville's patch.
1531 Ville's patch.
1527
1532
1528 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
1533 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
1529
1534
1530 * IPython/iplib.py (handle_auto): changed autocall semantics to
1535 * IPython/iplib.py (handle_auto): changed autocall semantics to
1531 include 'smart' mode, where the autocall transformation is NOT
1536 include 'smart' mode, where the autocall transformation is NOT
1532 applied if there are no arguments on the line. This allows you to
1537 applied if there are no arguments on the line. This allows you to
1533 just type 'foo' if foo is a callable to see its internal form,
1538 just type 'foo' if foo is a callable to see its internal form,
1534 instead of having it called with no arguments (typically a
1539 instead of having it called with no arguments (typically a
1535 mistake). The old 'full' autocall still exists: for that, you
1540 mistake). The old 'full' autocall still exists: for that, you
1536 need to set the 'autocall' parameter to 2 in your ipythonrc file.
1541 need to set the 'autocall' parameter to 2 in your ipythonrc file.
1537
1542
1538 * IPython/completer.py (Completer.attr_matches): add
1543 * IPython/completer.py (Completer.attr_matches): add
1539 tab-completion support for Enthoughts' traits. After a report by
1544 tab-completion support for Enthoughts' traits. After a report by
1540 Arnd and a patch by Prabhu.
1545 Arnd and a patch by Prabhu.
1541
1546
1542 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
1547 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
1543
1548
1544 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
1549 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
1545 Schmolck's patch to fix inspect.getinnerframes().
1550 Schmolck's patch to fix inspect.getinnerframes().
1546
1551
1547 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
1552 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
1548 for embedded instances, regarding handling of namespaces and items
1553 for embedded instances, regarding handling of namespaces and items
1549 added to the __builtin__ one. Multiple embedded instances and
1554 added to the __builtin__ one. Multiple embedded instances and
1550 recursive embeddings should work better now (though I'm not sure
1555 recursive embeddings should work better now (though I'm not sure
1551 I've got all the corner cases fixed, that code is a bit of a brain
1556 I've got all the corner cases fixed, that code is a bit of a brain
1552 twister).
1557 twister).
1553
1558
1554 * IPython/Magic.py (magic_edit): added support to edit in-memory
1559 * IPython/Magic.py (magic_edit): added support to edit in-memory
1555 macros (automatically creates the necessary temp files). %edit
1560 macros (automatically creates the necessary temp files). %edit
1556 also doesn't return the file contents anymore, it's just noise.
1561 also doesn't return the file contents anymore, it's just noise.
1557
1562
1558 * IPython/completer.py (Completer.attr_matches): revert change to
1563 * IPython/completer.py (Completer.attr_matches): revert change to
1559 complete only on attributes listed in __all__. I realized it
1564 complete only on attributes listed in __all__. I realized it
1560 cripples the tab-completion system as a tool for exploring the
1565 cripples the tab-completion system as a tool for exploring the
1561 internals of unknown libraries (it renders any non-__all__
1566 internals of unknown libraries (it renders any non-__all__
1562 attribute off-limits). I got bit by this when trying to see
1567 attribute off-limits). I got bit by this when trying to see
1563 something inside the dis module.
1568 something inside the dis module.
1564
1569
1565 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
1570 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
1566
1571
1567 * IPython/iplib.py (InteractiveShell.__init__): add .meta
1572 * IPython/iplib.py (InteractiveShell.__init__): add .meta
1568 namespace for users and extension writers to hold data in. This
1573 namespace for users and extension writers to hold data in. This
1569 follows the discussion in
1574 follows the discussion in
1570 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
1575 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
1571
1576
1572 * IPython/completer.py (IPCompleter.complete): small patch to help
1577 * IPython/completer.py (IPCompleter.complete): small patch to help
1573 tab-completion under Emacs, after a suggestion by John Barnard
1578 tab-completion under Emacs, after a suggestion by John Barnard
1574 <barnarj-AT-ccf.org>.
1579 <barnarj-AT-ccf.org>.
1575
1580
1576 * IPython/Magic.py (Magic.extract_input_slices): added support for
1581 * IPython/Magic.py (Magic.extract_input_slices): added support for
1577 the slice notation in magics to use N-M to represent numbers N...M
1582 the slice notation in magics to use N-M to represent numbers N...M
1578 (closed endpoints). This is used by %macro and %save.
1583 (closed endpoints). This is used by %macro and %save.
1579
1584
1580 * IPython/completer.py (Completer.attr_matches): for modules which
1585 * IPython/completer.py (Completer.attr_matches): for modules which
1581 define __all__, complete only on those. After a patch by Jeffrey
1586 define __all__, complete only on those. After a patch by Jeffrey
1582 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
1587 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
1583 speed up this routine.
1588 speed up this routine.
1584
1589
1585 * IPython/Logger.py (Logger.log): fix a history handling bug. I
1590 * IPython/Logger.py (Logger.log): fix a history handling bug. I
1586 don't know if this is the end of it, but the behavior now is
1591 don't know if this is the end of it, but the behavior now is
1587 certainly much more correct. Note that coupled with macros,
1592 certainly much more correct. Note that coupled with macros,
1588 slightly surprising (at first) behavior may occur: a macro will in
1593 slightly surprising (at first) behavior may occur: a macro will in
1589 general expand to multiple lines of input, so upon exiting, the
1594 general expand to multiple lines of input, so upon exiting, the
1590 in/out counters will both be bumped by the corresponding amount
1595 in/out counters will both be bumped by the corresponding amount
1591 (as if the macro's contents had been typed interactively). Typing
1596 (as if the macro's contents had been typed interactively). Typing
1592 %hist will reveal the intermediate (silently processed) lines.
1597 %hist will reveal the intermediate (silently processed) lines.
1593
1598
1594 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
1599 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
1595 pickle to fail (%run was overwriting __main__ and not restoring
1600 pickle to fail (%run was overwriting __main__ and not restoring
1596 it, but pickle relies on __main__ to operate).
1601 it, but pickle relies on __main__ to operate).
1597
1602
1598 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
1603 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
1599 using properties, but forgot to make the main InteractiveShell
1604 using properties, but forgot to make the main InteractiveShell
1600 class a new-style class. Properties fail silently, and
1605 class a new-style class. Properties fail silently, and
1601 mysteriously, with old-style class (getters work, but
1606 mysteriously, with old-style class (getters work, but
1602 setters don't do anything).
1607 setters don't do anything).
1603
1608
1604 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
1609 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
1605
1610
1606 * IPython/Magic.py (magic_history): fix history reporting bug (I
1611 * IPython/Magic.py (magic_history): fix history reporting bug (I
1607 know some nasties are still there, I just can't seem to find a
1612 know some nasties are still there, I just can't seem to find a
1608 reproducible test case to track them down; the input history is
1613 reproducible test case to track them down; the input history is
1609 falling out of sync...)
1614 falling out of sync...)
1610
1615
1611 * IPython/iplib.py (handle_shell_escape): fix bug where both
1616 * IPython/iplib.py (handle_shell_escape): fix bug where both
1612 aliases and system accesses where broken for indented code (such
1617 aliases and system accesses where broken for indented code (such
1613 as loops).
1618 as loops).
1614
1619
1615 * IPython/genutils.py (shell): fix small but critical bug for
1620 * IPython/genutils.py (shell): fix small but critical bug for
1616 win32 system access.
1621 win32 system access.
1617
1622
1618 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
1623 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
1619
1624
1620 * IPython/iplib.py (showtraceback): remove use of the
1625 * IPython/iplib.py (showtraceback): remove use of the
1621 sys.last_{type/value/traceback} structures, which are non
1626 sys.last_{type/value/traceback} structures, which are non
1622 thread-safe.
1627 thread-safe.
1623 (_prefilter): change control flow to ensure that we NEVER
1628 (_prefilter): change control flow to ensure that we NEVER
1624 introspect objects when autocall is off. This will guarantee that
1629 introspect objects when autocall is off. This will guarantee that
1625 having an input line of the form 'x.y', where access to attribute
1630 having an input line of the form 'x.y', where access to attribute
1626 'y' has side effects, doesn't trigger the side effect TWICE. It
1631 'y' has side effects, doesn't trigger the side effect TWICE. It
1627 is important to note that, with autocall on, these side effects
1632 is important to note that, with autocall on, these side effects
1628 can still happen.
1633 can still happen.
1629 (ipsystem): new builtin, to complete the ip{magic/alias/system}
1634 (ipsystem): new builtin, to complete the ip{magic/alias/system}
1630 trio. IPython offers these three kinds of special calls which are
1635 trio. IPython offers these three kinds of special calls which are
1631 not python code, and it's a good thing to have their call method
1636 not python code, and it's a good thing to have their call method
1632 be accessible as pure python functions (not just special syntax at
1637 be accessible as pure python functions (not just special syntax at
1633 the command line). It gives us a better internal implementation
1638 the command line). It gives us a better internal implementation
1634 structure, as well as exposing these for user scripting more
1639 structure, as well as exposing these for user scripting more
1635 cleanly.
1640 cleanly.
1636
1641
1637 * IPython/macro.py (Macro.__init__): moved macros to a standalone
1642 * IPython/macro.py (Macro.__init__): moved macros to a standalone
1638 file. Now that they'll be more likely to be used with the
1643 file. Now that they'll be more likely to be used with the
1639 persistance system (%store), I want to make sure their module path
1644 persistance system (%store), I want to make sure their module path
1640 doesn't change in the future, so that we don't break things for
1645 doesn't change in the future, so that we don't break things for
1641 users' persisted data.
1646 users' persisted data.
1642
1647
1643 * IPython/iplib.py (autoindent_update): move indentation
1648 * IPython/iplib.py (autoindent_update): move indentation
1644 management into the _text_ processing loop, not the keyboard
1649 management into the _text_ processing loop, not the keyboard
1645 interactive one. This is necessary to correctly process non-typed
1650 interactive one. This is necessary to correctly process non-typed
1646 multiline input (such as macros).
1651 multiline input (such as macros).
1647
1652
1648 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
1653 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
1649 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
1654 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
1650 which was producing problems in the resulting manual.
1655 which was producing problems in the resulting manual.
1651 (magic_whos): improve reporting of instances (show their class,
1656 (magic_whos): improve reporting of instances (show their class,
1652 instead of simply printing 'instance' which isn't terribly
1657 instead of simply printing 'instance' which isn't terribly
1653 informative).
1658 informative).
1654
1659
1655 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
1660 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
1656 (minor mods) to support network shares under win32.
1661 (minor mods) to support network shares under win32.
1657
1662
1658 * IPython/winconsole.py (get_console_size): add new winconsole
1663 * IPython/winconsole.py (get_console_size): add new winconsole
1659 module and fixes to page_dumb() to improve its behavior under
1664 module and fixes to page_dumb() to improve its behavior under
1660 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1665 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1661
1666
1662 * IPython/Magic.py (Macro): simplified Macro class to just
1667 * IPython/Magic.py (Macro): simplified Macro class to just
1663 subclass list. We've had only 2.2 compatibility for a very long
1668 subclass list. We've had only 2.2 compatibility for a very long
1664 time, yet I was still avoiding subclassing the builtin types. No
1669 time, yet I was still avoiding subclassing the builtin types. No
1665 more (I'm also starting to use properties, though I won't shift to
1670 more (I'm also starting to use properties, though I won't shift to
1666 2.3-specific features quite yet).
1671 2.3-specific features quite yet).
1667 (magic_store): added Ville's patch for lightweight variable
1672 (magic_store): added Ville's patch for lightweight variable
1668 persistence, after a request on the user list by Matt Wilkie
1673 persistence, after a request on the user list by Matt Wilkie
1669 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1674 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1670 details.
1675 details.
1671
1676
1672 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1677 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1673 changed the default logfile name from 'ipython.log' to
1678 changed the default logfile name from 'ipython.log' to
1674 'ipython_log.py'. These logs are real python files, and now that
1679 'ipython_log.py'. These logs are real python files, and now that
1675 we have much better multiline support, people are more likely to
1680 we have much better multiline support, people are more likely to
1676 want to use them as such. Might as well name them correctly.
1681 want to use them as such. Might as well name them correctly.
1677
1682
1678 * IPython/Magic.py: substantial cleanup. While we can't stop
1683 * IPython/Magic.py: substantial cleanup. While we can't stop
1679 using magics as mixins, due to the existing customizations 'out
1684 using magics as mixins, due to the existing customizations 'out
1680 there' which rely on the mixin naming conventions, at least I
1685 there' which rely on the mixin naming conventions, at least I
1681 cleaned out all cross-class name usage. So once we are OK with
1686 cleaned out all cross-class name usage. So once we are OK with
1682 breaking compatibility, the two systems can be separated.
1687 breaking compatibility, the two systems can be separated.
1683
1688
1684 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1689 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1685 anymore, and the class is a fair bit less hideous as well. New
1690 anymore, and the class is a fair bit less hideous as well. New
1686 features were also introduced: timestamping of input, and logging
1691 features were also introduced: timestamping of input, and logging
1687 of output results. These are user-visible with the -t and -o
1692 of output results. These are user-visible with the -t and -o
1688 options to %logstart. Closes
1693 options to %logstart. Closes
1689 http://www.scipy.net/roundup/ipython/issue11 and a request by
1694 http://www.scipy.net/roundup/ipython/issue11 and a request by
1690 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1695 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1691
1696
1692 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1697 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1693
1698
1694 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1699 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1695 better handle backslashes in paths. See the thread 'More Windows
1700 better handle backslashes in paths. See the thread 'More Windows
1696 questions part 2 - \/ characters revisited' on the iypthon user
1701 questions part 2 - \/ characters revisited' on the iypthon user
1697 list:
1702 list:
1698 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1703 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1699
1704
1700 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1705 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1701
1706
1702 (InteractiveShell.__init__): change threaded shells to not use the
1707 (InteractiveShell.__init__): change threaded shells to not use the
1703 ipython crash handler. This was causing more problems than not,
1708 ipython crash handler. This was causing more problems than not,
1704 as exceptions in the main thread (GUI code, typically) would
1709 as exceptions in the main thread (GUI code, typically) would
1705 always show up as a 'crash', when they really weren't.
1710 always show up as a 'crash', when they really weren't.
1706
1711
1707 The colors and exception mode commands (%colors/%xmode) have been
1712 The colors and exception mode commands (%colors/%xmode) have been
1708 synchronized to also take this into account, so users can get
1713 synchronized to also take this into account, so users can get
1709 verbose exceptions for their threaded code as well. I also added
1714 verbose exceptions for their threaded code as well. I also added
1710 support for activating pdb inside this exception handler as well,
1715 support for activating pdb inside this exception handler as well,
1711 so now GUI authors can use IPython's enhanced pdb at runtime.
1716 so now GUI authors can use IPython's enhanced pdb at runtime.
1712
1717
1713 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1718 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1714 true by default, and add it to the shipped ipythonrc file. Since
1719 true by default, and add it to the shipped ipythonrc file. Since
1715 this asks the user before proceeding, I think it's OK to make it
1720 this asks the user before proceeding, I think it's OK to make it
1716 true by default.
1721 true by default.
1717
1722
1718 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1723 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1719 of the previous special-casing of input in the eval loop. I think
1724 of the previous special-casing of input in the eval loop. I think
1720 this is cleaner, as they really are commands and shouldn't have
1725 this is cleaner, as they really are commands and shouldn't have
1721 a special role in the middle of the core code.
1726 a special role in the middle of the core code.
1722
1727
1723 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1728 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1724
1729
1725 * IPython/iplib.py (edit_syntax_error): added support for
1730 * IPython/iplib.py (edit_syntax_error): added support for
1726 automatically reopening the editor if the file had a syntax error
1731 automatically reopening the editor if the file had a syntax error
1727 in it. Thanks to scottt who provided the patch at:
1732 in it. Thanks to scottt who provided the patch at:
1728 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1733 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1729 version committed).
1734 version committed).
1730
1735
1731 * IPython/iplib.py (handle_normal): add suport for multi-line
1736 * IPython/iplib.py (handle_normal): add suport for multi-line
1732 input with emtpy lines. This fixes
1737 input with emtpy lines. This fixes
1733 http://www.scipy.net/roundup/ipython/issue43 and a similar
1738 http://www.scipy.net/roundup/ipython/issue43 and a similar
1734 discussion on the user list.
1739 discussion on the user list.
1735
1740
1736 WARNING: a behavior change is necessarily introduced to support
1741 WARNING: a behavior change is necessarily introduced to support
1737 blank lines: now a single blank line with whitespace does NOT
1742 blank lines: now a single blank line with whitespace does NOT
1738 break the input loop, which means that when autoindent is on, by
1743 break the input loop, which means that when autoindent is on, by
1739 default hitting return on the next (indented) line does NOT exit.
1744 default hitting return on the next (indented) line does NOT exit.
1740
1745
1741 Instead, to exit a multiline input you can either have:
1746 Instead, to exit a multiline input you can either have:
1742
1747
1743 - TWO whitespace lines (just hit return again), or
1748 - TWO whitespace lines (just hit return again), or
1744 - a single whitespace line of a different length than provided
1749 - a single whitespace line of a different length than provided
1745 by the autoindent (add or remove a space).
1750 by the autoindent (add or remove a space).
1746
1751
1747 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1752 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1748 module to better organize all readline-related functionality.
1753 module to better organize all readline-related functionality.
1749 I've deleted FlexCompleter and put all completion clases here.
1754 I've deleted FlexCompleter and put all completion clases here.
1750
1755
1751 * IPython/iplib.py (raw_input): improve indentation management.
1756 * IPython/iplib.py (raw_input): improve indentation management.
1752 It is now possible to paste indented code with autoindent on, and
1757 It is now possible to paste indented code with autoindent on, and
1753 the code is interpreted correctly (though it still looks bad on
1758 the code is interpreted correctly (though it still looks bad on
1754 screen, due to the line-oriented nature of ipython).
1759 screen, due to the line-oriented nature of ipython).
1755 (MagicCompleter.complete): change behavior so that a TAB key on an
1760 (MagicCompleter.complete): change behavior so that a TAB key on an
1756 otherwise empty line actually inserts a tab, instead of completing
1761 otherwise empty line actually inserts a tab, instead of completing
1757 on the entire global namespace. This makes it easier to use the
1762 on the entire global namespace. This makes it easier to use the
1758 TAB key for indentation. After a request by Hans Meine
1763 TAB key for indentation. After a request by Hans Meine
1759 <hans_meine-AT-gmx.net>
1764 <hans_meine-AT-gmx.net>
1760 (_prefilter): add support so that typing plain 'exit' or 'quit'
1765 (_prefilter): add support so that typing plain 'exit' or 'quit'
1761 does a sensible thing. Originally I tried to deviate as little as
1766 does a sensible thing. Originally I tried to deviate as little as
1762 possible from the default python behavior, but even that one may
1767 possible from the default python behavior, but even that one may
1763 change in this direction (thread on python-dev to that effect).
1768 change in this direction (thread on python-dev to that effect).
1764 Regardless, ipython should do the right thing even if CPython's
1769 Regardless, ipython should do the right thing even if CPython's
1765 '>>>' prompt doesn't.
1770 '>>>' prompt doesn't.
1766 (InteractiveShell): removed subclassing code.InteractiveConsole
1771 (InteractiveShell): removed subclassing code.InteractiveConsole
1767 class. By now we'd overridden just about all of its methods: I've
1772 class. By now we'd overridden just about all of its methods: I've
1768 copied the remaining two over, and now ipython is a standalone
1773 copied the remaining two over, and now ipython is a standalone
1769 class. This will provide a clearer picture for the chainsaw
1774 class. This will provide a clearer picture for the chainsaw
1770 branch refactoring.
1775 branch refactoring.
1771
1776
1772 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1777 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1773
1778
1774 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1779 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1775 failures for objects which break when dir() is called on them.
1780 failures for objects which break when dir() is called on them.
1776
1781
1777 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1782 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1778 distinct local and global namespaces in the completer API. This
1783 distinct local and global namespaces in the completer API. This
1779 change allows us to properly handle completion with distinct
1784 change allows us to properly handle completion with distinct
1780 scopes, including in embedded instances (this had never really
1785 scopes, including in embedded instances (this had never really
1781 worked correctly).
1786 worked correctly).
1782
1787
1783 Note: this introduces a change in the constructor for
1788 Note: this introduces a change in the constructor for
1784 MagicCompleter, as a new global_namespace parameter is now the
1789 MagicCompleter, as a new global_namespace parameter is now the
1785 second argument (the others were bumped one position).
1790 second argument (the others were bumped one position).
1786
1791
1787 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1792 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1788
1793
1789 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1794 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1790 embedded instances (which can be done now thanks to Vivian's
1795 embedded instances (which can be done now thanks to Vivian's
1791 frame-handling fixes for pdb).
1796 frame-handling fixes for pdb).
1792 (InteractiveShell.__init__): Fix namespace handling problem in
1797 (InteractiveShell.__init__): Fix namespace handling problem in
1793 embedded instances. We were overwriting __main__ unconditionally,
1798 embedded instances. We were overwriting __main__ unconditionally,
1794 and this should only be done for 'full' (non-embedded) IPython;
1799 and this should only be done for 'full' (non-embedded) IPython;
1795 embedded instances must respect the caller's __main__. Thanks to
1800 embedded instances must respect the caller's __main__. Thanks to
1796 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1801 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1797
1802
1798 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1803 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1799
1804
1800 * setup.py: added download_url to setup(). This registers the
1805 * setup.py: added download_url to setup(). This registers the
1801 download address at PyPI, which is not only useful to humans
1806 download address at PyPI, which is not only useful to humans
1802 browsing the site, but is also picked up by setuptools (the Eggs
1807 browsing the site, but is also picked up by setuptools (the Eggs
1803 machinery). Thanks to Ville and R. Kern for the info/discussion
1808 machinery). Thanks to Ville and R. Kern for the info/discussion
1804 on this.
1809 on this.
1805
1810
1806 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1811 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1807
1812
1808 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1813 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1809 This brings a lot of nice functionality to the pdb mode, which now
1814 This brings a lot of nice functionality to the pdb mode, which now
1810 has tab-completion, syntax highlighting, and better stack handling
1815 has tab-completion, syntax highlighting, and better stack handling
1811 than before. Many thanks to Vivian De Smedt
1816 than before. Many thanks to Vivian De Smedt
1812 <vivian-AT-vdesmedt.com> for the original patches.
1817 <vivian-AT-vdesmedt.com> for the original patches.
1813
1818
1814 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1819 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1815
1820
1816 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1821 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1817 sequence to consistently accept the banner argument. The
1822 sequence to consistently accept the banner argument. The
1818 inconsistency was tripping SAGE, thanks to Gary Zablackis
1823 inconsistency was tripping SAGE, thanks to Gary Zablackis
1819 <gzabl-AT-yahoo.com> for the report.
1824 <gzabl-AT-yahoo.com> for the report.
1820
1825
1821 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1826 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1822
1827
1823 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1828 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1824 Fix bug where a naked 'alias' call in the ipythonrc file would
1829 Fix bug where a naked 'alias' call in the ipythonrc file would
1825 cause a crash. Bug reported by Jorgen Stenarson.
1830 cause a crash. Bug reported by Jorgen Stenarson.
1826
1831
1827 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1832 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1828
1833
1829 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1834 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1830 startup time.
1835 startup time.
1831
1836
1832 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1837 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1833 instances had introduced a bug with globals in normal code. Now
1838 instances had introduced a bug with globals in normal code. Now
1834 it's working in all cases.
1839 it's working in all cases.
1835
1840
1836 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1841 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1837 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1842 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1838 has been introduced to set the default case sensitivity of the
1843 has been introduced to set the default case sensitivity of the
1839 searches. Users can still select either mode at runtime on a
1844 searches. Users can still select either mode at runtime on a
1840 per-search basis.
1845 per-search basis.
1841
1846
1842 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1847 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1843
1848
1844 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1849 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1845 attributes in wildcard searches for subclasses. Modified version
1850 attributes in wildcard searches for subclasses. Modified version
1846 of a patch by Jorgen.
1851 of a patch by Jorgen.
1847
1852
1848 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1853 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1849
1854
1850 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1855 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1851 embedded instances. I added a user_global_ns attribute to the
1856 embedded instances. I added a user_global_ns attribute to the
1852 InteractiveShell class to handle this.
1857 InteractiveShell class to handle this.
1853
1858
1854 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1859 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1855
1860
1856 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1861 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1857 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1862 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1858 (reported under win32, but may happen also in other platforms).
1863 (reported under win32, but may happen also in other platforms).
1859 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1864 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1860
1865
1861 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1866 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1862
1867
1863 * IPython/Magic.py (magic_psearch): new support for wildcard
1868 * IPython/Magic.py (magic_psearch): new support for wildcard
1864 patterns. Now, typing ?a*b will list all names which begin with a
1869 patterns. Now, typing ?a*b will list all names which begin with a
1865 and end in b, for example. The %psearch magic has full
1870 and end in b, for example. The %psearch magic has full
1866 docstrings. Many thanks to JΓΆrgen Stenarson
1871 docstrings. Many thanks to JΓΆrgen Stenarson
1867 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1872 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1868 implementing this functionality.
1873 implementing this functionality.
1869
1874
1870 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1875 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1871
1876
1872 * Manual: fixed long-standing annoyance of double-dashes (as in
1877 * Manual: fixed long-standing annoyance of double-dashes (as in
1873 --prefix=~, for example) being stripped in the HTML version. This
1878 --prefix=~, for example) being stripped in the HTML version. This
1874 is a latex2html bug, but a workaround was provided. Many thanks
1879 is a latex2html bug, but a workaround was provided. Many thanks
1875 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1880 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1876 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1881 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1877 rolling. This seemingly small issue had tripped a number of users
1882 rolling. This seemingly small issue had tripped a number of users
1878 when first installing, so I'm glad to see it gone.
1883 when first installing, so I'm glad to see it gone.
1879
1884
1880 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1885 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1881
1886
1882 * IPython/Extensions/numeric_formats.py: fix missing import,
1887 * IPython/Extensions/numeric_formats.py: fix missing import,
1883 reported by Stephen Walton.
1888 reported by Stephen Walton.
1884
1889
1885 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1890 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1886
1891
1887 * IPython/demo.py: finish demo module, fully documented now.
1892 * IPython/demo.py: finish demo module, fully documented now.
1888
1893
1889 * IPython/genutils.py (file_read): simple little utility to read a
1894 * IPython/genutils.py (file_read): simple little utility to read a
1890 file and ensure it's closed afterwards.
1895 file and ensure it's closed afterwards.
1891
1896
1892 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1897 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1893
1898
1894 * IPython/demo.py (Demo.__init__): added support for individually
1899 * IPython/demo.py (Demo.__init__): added support for individually
1895 tagging blocks for automatic execution.
1900 tagging blocks for automatic execution.
1896
1901
1897 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1902 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1898 syntax-highlighted python sources, requested by John.
1903 syntax-highlighted python sources, requested by John.
1899
1904
1900 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1905 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1901
1906
1902 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1907 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1903 finishing.
1908 finishing.
1904
1909
1905 * IPython/genutils.py (shlex_split): moved from Magic to here,
1910 * IPython/genutils.py (shlex_split): moved from Magic to here,
1906 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1911 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1907
1912
1908 * IPython/demo.py (Demo.__init__): added support for silent
1913 * IPython/demo.py (Demo.__init__): added support for silent
1909 blocks, improved marks as regexps, docstrings written.
1914 blocks, improved marks as regexps, docstrings written.
1910 (Demo.__init__): better docstring, added support for sys.argv.
1915 (Demo.__init__): better docstring, added support for sys.argv.
1911
1916
1912 * IPython/genutils.py (marquee): little utility used by the demo
1917 * IPython/genutils.py (marquee): little utility used by the demo
1913 code, handy in general.
1918 code, handy in general.
1914
1919
1915 * IPython/demo.py (Demo.__init__): new class for interactive
1920 * IPython/demo.py (Demo.__init__): new class for interactive
1916 demos. Not documented yet, I just wrote it in a hurry for
1921 demos. Not documented yet, I just wrote it in a hurry for
1917 scipy'05. Will docstring later.
1922 scipy'05. Will docstring later.
1918
1923
1919 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1924 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1920
1925
1921 * IPython/Shell.py (sigint_handler): Drastic simplification which
1926 * IPython/Shell.py (sigint_handler): Drastic simplification which
1922 also seems to make Ctrl-C work correctly across threads! This is
1927 also seems to make Ctrl-C work correctly across threads! This is
1923 so simple, that I can't beleive I'd missed it before. Needs more
1928 so simple, that I can't beleive I'd missed it before. Needs more
1924 testing, though.
1929 testing, though.
1925 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1930 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1926 like this before...
1931 like this before...
1927
1932
1928 * IPython/genutils.py (get_home_dir): add protection against
1933 * IPython/genutils.py (get_home_dir): add protection against
1929 non-dirs in win32 registry.
1934 non-dirs in win32 registry.
1930
1935
1931 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1936 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1932 bug where dict was mutated while iterating (pysh crash).
1937 bug where dict was mutated while iterating (pysh crash).
1933
1938
1934 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1939 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1935
1940
1936 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1941 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1937 spurious newlines added by this routine. After a report by
1942 spurious newlines added by this routine. After a report by
1938 F. Mantegazza.
1943 F. Mantegazza.
1939
1944
1940 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1945 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1941
1946
1942 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1947 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1943 calls. These were a leftover from the GTK 1.x days, and can cause
1948 calls. These were a leftover from the GTK 1.x days, and can cause
1944 problems in certain cases (after a report by John Hunter).
1949 problems in certain cases (after a report by John Hunter).
1945
1950
1946 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1951 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1947 os.getcwd() fails at init time. Thanks to patch from David Remahl
1952 os.getcwd() fails at init time. Thanks to patch from David Remahl
1948 <chmod007-AT-mac.com>.
1953 <chmod007-AT-mac.com>.
1949 (InteractiveShell.__init__): prevent certain special magics from
1954 (InteractiveShell.__init__): prevent certain special magics from
1950 being shadowed by aliases. Closes
1955 being shadowed by aliases. Closes
1951 http://www.scipy.net/roundup/ipython/issue41.
1956 http://www.scipy.net/roundup/ipython/issue41.
1952
1957
1953 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1958 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1954
1959
1955 * IPython/iplib.py (InteractiveShell.complete): Added new
1960 * IPython/iplib.py (InteractiveShell.complete): Added new
1956 top-level completion method to expose the completion mechanism
1961 top-level completion method to expose the completion mechanism
1957 beyond readline-based environments.
1962 beyond readline-based environments.
1958
1963
1959 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1964 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1960
1965
1961 * tools/ipsvnc (svnversion): fix svnversion capture.
1966 * tools/ipsvnc (svnversion): fix svnversion capture.
1962
1967
1963 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1968 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1964 attribute to self, which was missing. Before, it was set by a
1969 attribute to self, which was missing. Before, it was set by a
1965 routine which in certain cases wasn't being called, so the
1970 routine which in certain cases wasn't being called, so the
1966 instance could end up missing the attribute. This caused a crash.
1971 instance could end up missing the attribute. This caused a crash.
1967 Closes http://www.scipy.net/roundup/ipython/issue40.
1972 Closes http://www.scipy.net/roundup/ipython/issue40.
1968
1973
1969 2005-08-16 Fernando Perez <fperez@colorado.edu>
1974 2005-08-16 Fernando Perez <fperez@colorado.edu>
1970
1975
1971 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1976 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1972 contains non-string attribute. Closes
1977 contains non-string attribute. Closes
1973 http://www.scipy.net/roundup/ipython/issue38.
1978 http://www.scipy.net/roundup/ipython/issue38.
1974
1979
1975 2005-08-14 Fernando Perez <fperez@colorado.edu>
1980 2005-08-14 Fernando Perez <fperez@colorado.edu>
1976
1981
1977 * tools/ipsvnc: Minor improvements, to add changeset info.
1982 * tools/ipsvnc: Minor improvements, to add changeset info.
1978
1983
1979 2005-08-12 Fernando Perez <fperez@colorado.edu>
1984 2005-08-12 Fernando Perez <fperez@colorado.edu>
1980
1985
1981 * IPython/iplib.py (runsource): remove self.code_to_run_src
1986 * IPython/iplib.py (runsource): remove self.code_to_run_src
1982 attribute. I realized this is nothing more than
1987 attribute. I realized this is nothing more than
1983 '\n'.join(self.buffer), and having the same data in two different
1988 '\n'.join(self.buffer), and having the same data in two different
1984 places is just asking for synchronization bugs. This may impact
1989 places is just asking for synchronization bugs. This may impact
1985 people who have custom exception handlers, so I need to warn
1990 people who have custom exception handlers, so I need to warn
1986 ipython-dev about it (F. Mantegazza may use them).
1991 ipython-dev about it (F. Mantegazza may use them).
1987
1992
1988 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1993 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1989
1994
1990 * IPython/genutils.py: fix 2.2 compatibility (generators)
1995 * IPython/genutils.py: fix 2.2 compatibility (generators)
1991
1996
1992 2005-07-18 Fernando Perez <fperez@colorado.edu>
1997 2005-07-18 Fernando Perez <fperez@colorado.edu>
1993
1998
1994 * IPython/genutils.py (get_home_dir): fix to help users with
1999 * IPython/genutils.py (get_home_dir): fix to help users with
1995 invalid $HOME under win32.
2000 invalid $HOME under win32.
1996
2001
1997 2005-07-17 Fernando Perez <fperez@colorado.edu>
2002 2005-07-17 Fernando Perez <fperez@colorado.edu>
1998
2003
1999 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
2004 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
2000 some old hacks and clean up a bit other routines; code should be
2005 some old hacks and clean up a bit other routines; code should be
2001 simpler and a bit faster.
2006 simpler and a bit faster.
2002
2007
2003 * IPython/iplib.py (interact): removed some last-resort attempts
2008 * IPython/iplib.py (interact): removed some last-resort attempts
2004 to survive broken stdout/stderr. That code was only making it
2009 to survive broken stdout/stderr. That code was only making it
2005 harder to abstract out the i/o (necessary for gui integration),
2010 harder to abstract out the i/o (necessary for gui integration),
2006 and the crashes it could prevent were extremely rare in practice
2011 and the crashes it could prevent were extremely rare in practice
2007 (besides being fully user-induced in a pretty violent manner).
2012 (besides being fully user-induced in a pretty violent manner).
2008
2013
2009 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
2014 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
2010 Nothing major yet, but the code is simpler to read; this should
2015 Nothing major yet, but the code is simpler to read; this should
2011 make it easier to do more serious modifications in the future.
2016 make it easier to do more serious modifications in the future.
2012
2017
2013 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
2018 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
2014 which broke in .15 (thanks to a report by Ville).
2019 which broke in .15 (thanks to a report by Ville).
2015
2020
2016 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
2021 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
2017 be quite correct, I know next to nothing about unicode). This
2022 be quite correct, I know next to nothing about unicode). This
2018 will allow unicode strings to be used in prompts, amongst other
2023 will allow unicode strings to be used in prompts, amongst other
2019 cases. It also will prevent ipython from crashing when unicode
2024 cases. It also will prevent ipython from crashing when unicode
2020 shows up unexpectedly in many places. If ascii encoding fails, we
2025 shows up unexpectedly in many places. If ascii encoding fails, we
2021 assume utf_8. Currently the encoding is not a user-visible
2026 assume utf_8. Currently the encoding is not a user-visible
2022 setting, though it could be made so if there is demand for it.
2027 setting, though it could be made so if there is demand for it.
2023
2028
2024 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
2029 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
2025
2030
2026 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
2031 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
2027
2032
2028 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
2033 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
2029
2034
2030 * IPython/genutils.py: Add 2.2 compatibility here, so all other
2035 * IPython/genutils.py: Add 2.2 compatibility here, so all other
2031 code can work transparently for 2.2/2.3.
2036 code can work transparently for 2.2/2.3.
2032
2037
2033 2005-07-16 Fernando Perez <fperez@colorado.edu>
2038 2005-07-16 Fernando Perez <fperez@colorado.edu>
2034
2039
2035 * IPython/ultraTB.py (ExceptionColors): Make a global variable
2040 * IPython/ultraTB.py (ExceptionColors): Make a global variable
2036 out of the color scheme table used for coloring exception
2041 out of the color scheme table used for coloring exception
2037 tracebacks. This allows user code to add new schemes at runtime.
2042 tracebacks. This allows user code to add new schemes at runtime.
2038 This is a minimally modified version of the patch at
2043 This is a minimally modified version of the patch at
2039 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
2044 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
2040 for the contribution.
2045 for the contribution.
2041
2046
2042 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
2047 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
2043 slightly modified version of the patch in
2048 slightly modified version of the patch in
2044 http://www.scipy.net/roundup/ipython/issue34, which also allows me
2049 http://www.scipy.net/roundup/ipython/issue34, which also allows me
2045 to remove the previous try/except solution (which was costlier).
2050 to remove the previous try/except solution (which was costlier).
2046 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
2051 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
2047
2052
2048 2005-06-08 Fernando Perez <fperez@colorado.edu>
2053 2005-06-08 Fernando Perez <fperez@colorado.edu>
2049
2054
2050 * IPython/iplib.py (write/write_err): Add methods to abstract all
2055 * IPython/iplib.py (write/write_err): Add methods to abstract all
2051 I/O a bit more.
2056 I/O a bit more.
2052
2057
2053 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
2058 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
2054 warning, reported by Aric Hagberg, fix by JD Hunter.
2059 warning, reported by Aric Hagberg, fix by JD Hunter.
2055
2060
2056 2005-06-02 *** Released version 0.6.15
2061 2005-06-02 *** Released version 0.6.15
2057
2062
2058 2005-06-01 Fernando Perez <fperez@colorado.edu>
2063 2005-06-01 Fernando Perez <fperez@colorado.edu>
2059
2064
2060 * IPython/iplib.py (MagicCompleter.file_matches): Fix
2065 * IPython/iplib.py (MagicCompleter.file_matches): Fix
2061 tab-completion of filenames within open-quoted strings. Note that
2066 tab-completion of filenames within open-quoted strings. Note that
2062 this requires that in ~/.ipython/ipythonrc, users change the
2067 this requires that in ~/.ipython/ipythonrc, users change the
2063 readline delimiters configuration to read:
2068 readline delimiters configuration to read:
2064
2069
2065 readline_remove_delims -/~
2070 readline_remove_delims -/~
2066
2071
2067
2072
2068 2005-05-31 *** Released version 0.6.14
2073 2005-05-31 *** Released version 0.6.14
2069
2074
2070 2005-05-29 Fernando Perez <fperez@colorado.edu>
2075 2005-05-29 Fernando Perez <fperez@colorado.edu>
2071
2076
2072 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
2077 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
2073 with files not on the filesystem. Reported by Eliyahu Sandler
2078 with files not on the filesystem. Reported by Eliyahu Sandler
2074 <eli@gondolin.net>
2079 <eli@gondolin.net>
2075
2080
2076 2005-05-22 Fernando Perez <fperez@colorado.edu>
2081 2005-05-22 Fernando Perez <fperez@colorado.edu>
2077
2082
2078 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
2083 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
2079 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
2084 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
2080
2085
2081 2005-05-19 Fernando Perez <fperez@colorado.edu>
2086 2005-05-19 Fernando Perez <fperez@colorado.edu>
2082
2087
2083 * IPython/iplib.py (safe_execfile): close a file which could be
2088 * IPython/iplib.py (safe_execfile): close a file which could be
2084 left open (causing problems in win32, which locks open files).
2089 left open (causing problems in win32, which locks open files).
2085 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
2090 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
2086
2091
2087 2005-05-18 Fernando Perez <fperez@colorado.edu>
2092 2005-05-18 Fernando Perez <fperez@colorado.edu>
2088
2093
2089 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
2094 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
2090 keyword arguments correctly to safe_execfile().
2095 keyword arguments correctly to safe_execfile().
2091
2096
2092 2005-05-13 Fernando Perez <fperez@colorado.edu>
2097 2005-05-13 Fernando Perez <fperez@colorado.edu>
2093
2098
2094 * ipython.1: Added info about Qt to manpage, and threads warning
2099 * ipython.1: Added info about Qt to manpage, and threads warning
2095 to usage page (invoked with --help).
2100 to usage page (invoked with --help).
2096
2101
2097 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
2102 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
2098 new matcher (it goes at the end of the priority list) to do
2103 new matcher (it goes at the end of the priority list) to do
2099 tab-completion on named function arguments. Submitted by George
2104 tab-completion on named function arguments. Submitted by George
2100 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
2105 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
2101 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
2106 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
2102 for more details.
2107 for more details.
2103
2108
2104 * IPython/Magic.py (magic_run): Added new -e flag to ignore
2109 * IPython/Magic.py (magic_run): Added new -e flag to ignore
2105 SystemExit exceptions in the script being run. Thanks to a report
2110 SystemExit exceptions in the script being run. Thanks to a report
2106 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
2111 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
2107 producing very annoying behavior when running unit tests.
2112 producing very annoying behavior when running unit tests.
2108
2113
2109 2005-05-12 Fernando Perez <fperez@colorado.edu>
2114 2005-05-12 Fernando Perez <fperez@colorado.edu>
2110
2115
2111 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
2116 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
2112 which I'd broken (again) due to a changed regexp. In the process,
2117 which I'd broken (again) due to a changed regexp. In the process,
2113 added ';' as an escape to auto-quote the whole line without
2118 added ';' as an escape to auto-quote the whole line without
2114 splitting its arguments. Thanks to a report by Jerry McRae
2119 splitting its arguments. Thanks to a report by Jerry McRae
2115 <qrs0xyc02-AT-sneakemail.com>.
2120 <qrs0xyc02-AT-sneakemail.com>.
2116
2121
2117 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
2122 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
2118 possible crashes caused by a TokenError. Reported by Ed Schofield
2123 possible crashes caused by a TokenError. Reported by Ed Schofield
2119 <schofield-AT-ftw.at>.
2124 <schofield-AT-ftw.at>.
2120
2125
2121 2005-05-06 Fernando Perez <fperez@colorado.edu>
2126 2005-05-06 Fernando Perez <fperez@colorado.edu>
2122
2127
2123 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
2128 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
2124
2129
2125 2005-04-29 Fernando Perez <fperez@colorado.edu>
2130 2005-04-29 Fernando Perez <fperez@colorado.edu>
2126
2131
2127 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
2132 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
2128 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
2133 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
2129 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
2134 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
2130 which provides support for Qt interactive usage (similar to the
2135 which provides support for Qt interactive usage (similar to the
2131 existing one for WX and GTK). This had been often requested.
2136 existing one for WX and GTK). This had been often requested.
2132
2137
2133 2005-04-14 *** Released version 0.6.13
2138 2005-04-14 *** Released version 0.6.13
2134
2139
2135 2005-04-08 Fernando Perez <fperez@colorado.edu>
2140 2005-04-08 Fernando Perez <fperez@colorado.edu>
2136
2141
2137 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
2142 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
2138 from _ofind, which gets called on almost every input line. Now,
2143 from _ofind, which gets called on almost every input line. Now,
2139 we only try to get docstrings if they are actually going to be
2144 we only try to get docstrings if they are actually going to be
2140 used (the overhead of fetching unnecessary docstrings can be
2145 used (the overhead of fetching unnecessary docstrings can be
2141 noticeable for certain objects, such as Pyro proxies).
2146 noticeable for certain objects, such as Pyro proxies).
2142
2147
2143 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
2148 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
2144 for completers. For some reason I had been passing them the state
2149 for completers. For some reason I had been passing them the state
2145 variable, which completers never actually need, and was in
2150 variable, which completers never actually need, and was in
2146 conflict with the rlcompleter API. Custom completers ONLY need to
2151 conflict with the rlcompleter API. Custom completers ONLY need to
2147 take the text parameter.
2152 take the text parameter.
2148
2153
2149 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
2154 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
2150 work correctly in pysh. I've also moved all the logic which used
2155 work correctly in pysh. I've also moved all the logic which used
2151 to be in pysh.py here, which will prevent problems with future
2156 to be in pysh.py here, which will prevent problems with future
2152 upgrades. However, this time I must warn users to update their
2157 upgrades. However, this time I must warn users to update their
2153 pysh profile to include the line
2158 pysh profile to include the line
2154
2159
2155 import_all IPython.Extensions.InterpreterExec
2160 import_all IPython.Extensions.InterpreterExec
2156
2161
2157 because otherwise things won't work for them. They MUST also
2162 because otherwise things won't work for them. They MUST also
2158 delete pysh.py and the line
2163 delete pysh.py and the line
2159
2164
2160 execfile pysh.py
2165 execfile pysh.py
2161
2166
2162 from their ipythonrc-pysh.
2167 from their ipythonrc-pysh.
2163
2168
2164 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
2169 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
2165 robust in the face of objects whose dir() returns non-strings
2170 robust in the face of objects whose dir() returns non-strings
2166 (which it shouldn't, but some broken libs like ITK do). Thanks to
2171 (which it shouldn't, but some broken libs like ITK do). Thanks to
2167 a patch by John Hunter (implemented differently, though). Also
2172 a patch by John Hunter (implemented differently, though). Also
2168 minor improvements by using .extend instead of + on lists.
2173 minor improvements by using .extend instead of + on lists.
2169
2174
2170 * pysh.py:
2175 * pysh.py:
2171
2176
2172 2005-04-06 Fernando Perez <fperez@colorado.edu>
2177 2005-04-06 Fernando Perez <fperez@colorado.edu>
2173
2178
2174 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
2179 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
2175 by default, so that all users benefit from it. Those who don't
2180 by default, so that all users benefit from it. Those who don't
2176 want it can still turn it off.
2181 want it can still turn it off.
2177
2182
2178 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
2183 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
2179 config file, I'd forgotten about this, so users were getting it
2184 config file, I'd forgotten about this, so users were getting it
2180 off by default.
2185 off by default.
2181
2186
2182 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
2187 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
2183 consistency. Now magics can be called in multiline statements,
2188 consistency. Now magics can be called in multiline statements,
2184 and python variables can be expanded in magic calls via $var.
2189 and python variables can be expanded in magic calls via $var.
2185 This makes the magic system behave just like aliases or !system
2190 This makes the magic system behave just like aliases or !system
2186 calls.
2191 calls.
2187
2192
2188 2005-03-28 Fernando Perez <fperez@colorado.edu>
2193 2005-03-28 Fernando Perez <fperez@colorado.edu>
2189
2194
2190 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
2195 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
2191 expensive string additions for building command. Add support for
2196 expensive string additions for building command. Add support for
2192 trailing ';' when autocall is used.
2197 trailing ';' when autocall is used.
2193
2198
2194 2005-03-26 Fernando Perez <fperez@colorado.edu>
2199 2005-03-26 Fernando Perez <fperez@colorado.edu>
2195
2200
2196 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
2201 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
2197 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
2202 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
2198 ipython.el robust against prompts with any number of spaces
2203 ipython.el robust against prompts with any number of spaces
2199 (including 0) after the ':' character.
2204 (including 0) after the ':' character.
2200
2205
2201 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
2206 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
2202 continuation prompt, which misled users to think the line was
2207 continuation prompt, which misled users to think the line was
2203 already indented. Closes debian Bug#300847, reported to me by
2208 already indented. Closes debian Bug#300847, reported to me by
2204 Norbert Tretkowski <tretkowski-AT-inittab.de>.
2209 Norbert Tretkowski <tretkowski-AT-inittab.de>.
2205
2210
2206 2005-03-23 Fernando Perez <fperez@colorado.edu>
2211 2005-03-23 Fernando Perez <fperez@colorado.edu>
2207
2212
2208 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
2213 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
2209 properly aligned if they have embedded newlines.
2214 properly aligned if they have embedded newlines.
2210
2215
2211 * IPython/iplib.py (runlines): Add a public method to expose
2216 * IPython/iplib.py (runlines): Add a public method to expose
2212 IPython's code execution machinery, so that users can run strings
2217 IPython's code execution machinery, so that users can run strings
2213 as if they had been typed at the prompt interactively.
2218 as if they had been typed at the prompt interactively.
2214 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
2219 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
2215 methods which can call the system shell, but with python variable
2220 methods which can call the system shell, but with python variable
2216 expansion. The three such methods are: __IPYTHON__.system,
2221 expansion. The three such methods are: __IPYTHON__.system,
2217 .getoutput and .getoutputerror. These need to be documented in a
2222 .getoutput and .getoutputerror. These need to be documented in a
2218 'public API' section (to be written) of the manual.
2223 'public API' section (to be written) of the manual.
2219
2224
2220 2005-03-20 Fernando Perez <fperez@colorado.edu>
2225 2005-03-20 Fernando Perez <fperez@colorado.edu>
2221
2226
2222 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
2227 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
2223 for custom exception handling. This is quite powerful, and it
2228 for custom exception handling. This is quite powerful, and it
2224 allows for user-installable exception handlers which can trap
2229 allows for user-installable exception handlers which can trap
2225 custom exceptions at runtime and treat them separately from
2230 custom exceptions at runtime and treat them separately from
2226 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
2231 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
2227 Mantegazza <mantegazza-AT-ill.fr>.
2232 Mantegazza <mantegazza-AT-ill.fr>.
2228 (InteractiveShell.set_custom_completer): public API function to
2233 (InteractiveShell.set_custom_completer): public API function to
2229 add new completers at runtime.
2234 add new completers at runtime.
2230
2235
2231 2005-03-19 Fernando Perez <fperez@colorado.edu>
2236 2005-03-19 Fernando Perez <fperez@colorado.edu>
2232
2237
2233 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
2238 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
2234 allow objects which provide their docstrings via non-standard
2239 allow objects which provide their docstrings via non-standard
2235 mechanisms (like Pyro proxies) to still be inspected by ipython's
2240 mechanisms (like Pyro proxies) to still be inspected by ipython's
2236 ? system.
2241 ? system.
2237
2242
2238 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
2243 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
2239 automatic capture system. I tried quite hard to make it work
2244 automatic capture system. I tried quite hard to make it work
2240 reliably, and simply failed. I tried many combinations with the
2245 reliably, and simply failed. I tried many combinations with the
2241 subprocess module, but eventually nothing worked in all needed
2246 subprocess module, but eventually nothing worked in all needed
2242 cases (not blocking stdin for the child, duplicating stdout
2247 cases (not blocking stdin for the child, duplicating stdout
2243 without blocking, etc). The new %sc/%sx still do capture to these
2248 without blocking, etc). The new %sc/%sx still do capture to these
2244 magical list/string objects which make shell use much more
2249 magical list/string objects which make shell use much more
2245 conveninent, so not all is lost.
2250 conveninent, so not all is lost.
2246
2251
2247 XXX - FIX MANUAL for the change above!
2252 XXX - FIX MANUAL for the change above!
2248
2253
2249 (runsource): I copied code.py's runsource() into ipython to modify
2254 (runsource): I copied code.py's runsource() into ipython to modify
2250 it a bit. Now the code object and source to be executed are
2255 it a bit. Now the code object and source to be executed are
2251 stored in ipython. This makes this info accessible to third-party
2256 stored in ipython. This makes this info accessible to third-party
2252 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
2257 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
2253 Mantegazza <mantegazza-AT-ill.fr>.
2258 Mantegazza <mantegazza-AT-ill.fr>.
2254
2259
2255 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
2260 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
2256 history-search via readline (like C-p/C-n). I'd wanted this for a
2261 history-search via readline (like C-p/C-n). I'd wanted this for a
2257 long time, but only recently found out how to do it. For users
2262 long time, but only recently found out how to do it. For users
2258 who already have their ipythonrc files made and want this, just
2263 who already have their ipythonrc files made and want this, just
2259 add:
2264 add:
2260
2265
2261 readline_parse_and_bind "\e[A": history-search-backward
2266 readline_parse_and_bind "\e[A": history-search-backward
2262 readline_parse_and_bind "\e[B": history-search-forward
2267 readline_parse_and_bind "\e[B": history-search-forward
2263
2268
2264 2005-03-18 Fernando Perez <fperez@colorado.edu>
2269 2005-03-18 Fernando Perez <fperez@colorado.edu>
2265
2270
2266 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
2271 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
2267 LSString and SList classes which allow transparent conversions
2272 LSString and SList classes which allow transparent conversions
2268 between list mode and whitespace-separated string.
2273 between list mode and whitespace-separated string.
2269 (magic_r): Fix recursion problem in %r.
2274 (magic_r): Fix recursion problem in %r.
2270
2275
2271 * IPython/genutils.py (LSString): New class to be used for
2276 * IPython/genutils.py (LSString): New class to be used for
2272 automatic storage of the results of all alias/system calls in _o
2277 automatic storage of the results of all alias/system calls in _o
2273 and _e (stdout/err). These provide a .l/.list attribute which
2278 and _e (stdout/err). These provide a .l/.list attribute which
2274 does automatic splitting on newlines. This means that for most
2279 does automatic splitting on newlines. This means that for most
2275 uses, you'll never need to do capturing of output with %sc/%sx
2280 uses, you'll never need to do capturing of output with %sc/%sx
2276 anymore, since ipython keeps this always done for you. Note that
2281 anymore, since ipython keeps this always done for you. Note that
2277 only the LAST results are stored, the _o/e variables are
2282 only the LAST results are stored, the _o/e variables are
2278 overwritten on each call. If you need to save their contents
2283 overwritten on each call. If you need to save their contents
2279 further, simply bind them to any other name.
2284 further, simply bind them to any other name.
2280
2285
2281 2005-03-17 Fernando Perez <fperez@colorado.edu>
2286 2005-03-17 Fernando Perez <fperez@colorado.edu>
2282
2287
2283 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
2288 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
2284 prompt namespace handling.
2289 prompt namespace handling.
2285
2290
2286 2005-03-16 Fernando Perez <fperez@colorado.edu>
2291 2005-03-16 Fernando Perez <fperez@colorado.edu>
2287
2292
2288 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
2293 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
2289 classic prompts to be '>>> ' (final space was missing, and it
2294 classic prompts to be '>>> ' (final space was missing, and it
2290 trips the emacs python mode).
2295 trips the emacs python mode).
2291 (BasePrompt.__str__): Added safe support for dynamic prompt
2296 (BasePrompt.__str__): Added safe support for dynamic prompt
2292 strings. Now you can set your prompt string to be '$x', and the
2297 strings. Now you can set your prompt string to be '$x', and the
2293 value of x will be printed from your interactive namespace. The
2298 value of x will be printed from your interactive namespace. The
2294 interpolation syntax includes the full Itpl support, so
2299 interpolation syntax includes the full Itpl support, so
2295 ${foo()+x+bar()} is a valid prompt string now, and the function
2300 ${foo()+x+bar()} is a valid prompt string now, and the function
2296 calls will be made at runtime.
2301 calls will be made at runtime.
2297
2302
2298 2005-03-15 Fernando Perez <fperez@colorado.edu>
2303 2005-03-15 Fernando Perez <fperez@colorado.edu>
2299
2304
2300 * IPython/Magic.py (magic_history): renamed %hist to %history, to
2305 * IPython/Magic.py (magic_history): renamed %hist to %history, to
2301 avoid name clashes in pylab. %hist still works, it just forwards
2306 avoid name clashes in pylab. %hist still works, it just forwards
2302 the call to %history.
2307 the call to %history.
2303
2308
2304 2005-03-02 *** Released version 0.6.12
2309 2005-03-02 *** Released version 0.6.12
2305
2310
2306 2005-03-02 Fernando Perez <fperez@colorado.edu>
2311 2005-03-02 Fernando Perez <fperez@colorado.edu>
2307
2312
2308 * IPython/iplib.py (handle_magic): log magic calls properly as
2313 * IPython/iplib.py (handle_magic): log magic calls properly as
2309 ipmagic() function calls.
2314 ipmagic() function calls.
2310
2315
2311 * IPython/Magic.py (magic_time): Improved %time to support
2316 * IPython/Magic.py (magic_time): Improved %time to support
2312 statements and provide wall-clock as well as CPU time.
2317 statements and provide wall-clock as well as CPU time.
2313
2318
2314 2005-02-27 Fernando Perez <fperez@colorado.edu>
2319 2005-02-27 Fernando Perez <fperez@colorado.edu>
2315
2320
2316 * IPython/hooks.py: New hooks module, to expose user-modifiable
2321 * IPython/hooks.py: New hooks module, to expose user-modifiable
2317 IPython functionality in a clean manner. For now only the editor
2322 IPython functionality in a clean manner. For now only the editor
2318 hook is actually written, and other thigns which I intend to turn
2323 hook is actually written, and other thigns which I intend to turn
2319 into proper hooks aren't yet there. The display and prefilter
2324 into proper hooks aren't yet there. The display and prefilter
2320 stuff, for example, should be hooks. But at least now the
2325 stuff, for example, should be hooks. But at least now the
2321 framework is in place, and the rest can be moved here with more
2326 framework is in place, and the rest can be moved here with more
2322 time later. IPython had had a .hooks variable for a long time for
2327 time later. IPython had had a .hooks variable for a long time for
2323 this purpose, but I'd never actually used it for anything.
2328 this purpose, but I'd never actually used it for anything.
2324
2329
2325 2005-02-26 Fernando Perez <fperez@colorado.edu>
2330 2005-02-26 Fernando Perez <fperez@colorado.edu>
2326
2331
2327 * IPython/ipmaker.py (make_IPython): make the default ipython
2332 * IPython/ipmaker.py (make_IPython): make the default ipython
2328 directory be called _ipython under win32, to follow more the
2333 directory be called _ipython under win32, to follow more the
2329 naming peculiarities of that platform (where buggy software like
2334 naming peculiarities of that platform (where buggy software like
2330 Visual Sourcesafe breaks with .named directories). Reported by
2335 Visual Sourcesafe breaks with .named directories). Reported by
2331 Ville Vainio.
2336 Ville Vainio.
2332
2337
2333 2005-02-23 Fernando Perez <fperez@colorado.edu>
2338 2005-02-23 Fernando Perez <fperez@colorado.edu>
2334
2339
2335 * IPython/iplib.py (InteractiveShell.__init__): removed a few
2340 * IPython/iplib.py (InteractiveShell.__init__): removed a few
2336 auto_aliases for win32 which were causing problems. Users can
2341 auto_aliases for win32 which were causing problems. Users can
2337 define the ones they personally like.
2342 define the ones they personally like.
2338
2343
2339 2005-02-21 Fernando Perez <fperez@colorado.edu>
2344 2005-02-21 Fernando Perez <fperez@colorado.edu>
2340
2345
2341 * IPython/Magic.py (magic_time): new magic to time execution of
2346 * IPython/Magic.py (magic_time): new magic to time execution of
2342 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
2347 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
2343
2348
2344 2005-02-19 Fernando Perez <fperez@colorado.edu>
2349 2005-02-19 Fernando Perez <fperez@colorado.edu>
2345
2350
2346 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
2351 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
2347 into keys (for prompts, for example).
2352 into keys (for prompts, for example).
2348
2353
2349 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
2354 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
2350 prompts in case users want them. This introduces a small behavior
2355 prompts in case users want them. This introduces a small behavior
2351 change: ipython does not automatically add a space to all prompts
2356 change: ipython does not automatically add a space to all prompts
2352 anymore. To get the old prompts with a space, users should add it
2357 anymore. To get the old prompts with a space, users should add it
2353 manually to their ipythonrc file, so for example prompt_in1 should
2358 manually to their ipythonrc file, so for example prompt_in1 should
2354 now read 'In [\#]: ' instead of 'In [\#]:'.
2359 now read 'In [\#]: ' instead of 'In [\#]:'.
2355 (BasePrompt.__init__): New option prompts_pad_left (only in rc
2360 (BasePrompt.__init__): New option prompts_pad_left (only in rc
2356 file) to control left-padding of secondary prompts.
2361 file) to control left-padding of secondary prompts.
2357
2362
2358 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
2363 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
2359 the profiler can't be imported. Fix for Debian, which removed
2364 the profiler can't be imported. Fix for Debian, which removed
2360 profile.py because of License issues. I applied a slightly
2365 profile.py because of License issues. I applied a slightly
2361 modified version of the original Debian patch at
2366 modified version of the original Debian patch at
2362 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
2367 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
2363
2368
2364 2005-02-17 Fernando Perez <fperez@colorado.edu>
2369 2005-02-17 Fernando Perez <fperez@colorado.edu>
2365
2370
2366 * IPython/genutils.py (native_line_ends): Fix bug which would
2371 * IPython/genutils.py (native_line_ends): Fix bug which would
2367 cause improper line-ends under win32 b/c I was not opening files
2372 cause improper line-ends under win32 b/c I was not opening files
2368 in binary mode. Bug report and fix thanks to Ville.
2373 in binary mode. Bug report and fix thanks to Ville.
2369
2374
2370 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
2375 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
2371 trying to catch spurious foo[1] autocalls. My fix actually broke
2376 trying to catch spurious foo[1] autocalls. My fix actually broke
2372 ',/' autoquote/call with explicit escape (bad regexp).
2377 ',/' autoquote/call with explicit escape (bad regexp).
2373
2378
2374 2005-02-15 *** Released version 0.6.11
2379 2005-02-15 *** Released version 0.6.11
2375
2380
2376 2005-02-14 Fernando Perez <fperez@colorado.edu>
2381 2005-02-14 Fernando Perez <fperez@colorado.edu>
2377
2382
2378 * IPython/background_jobs.py: New background job management
2383 * IPython/background_jobs.py: New background job management
2379 subsystem. This is implemented via a new set of classes, and
2384 subsystem. This is implemented via a new set of classes, and
2380 IPython now provides a builtin 'jobs' object for background job
2385 IPython now provides a builtin 'jobs' object for background job
2381 execution. A convenience %bg magic serves as a lightweight
2386 execution. A convenience %bg magic serves as a lightweight
2382 frontend for starting the more common type of calls. This was
2387 frontend for starting the more common type of calls. This was
2383 inspired by discussions with B. Granger and the BackgroundCommand
2388 inspired by discussions with B. Granger and the BackgroundCommand
2384 class described in the book Python Scripting for Computational
2389 class described in the book Python Scripting for Computational
2385 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
2390 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
2386 (although ultimately no code from this text was used, as IPython's
2391 (although ultimately no code from this text was used, as IPython's
2387 system is a separate implementation).
2392 system is a separate implementation).
2388
2393
2389 * IPython/iplib.py (MagicCompleter.python_matches): add new option
2394 * IPython/iplib.py (MagicCompleter.python_matches): add new option
2390 to control the completion of single/double underscore names
2395 to control the completion of single/double underscore names
2391 separately. As documented in the example ipytonrc file, the
2396 separately. As documented in the example ipytonrc file, the
2392 readline_omit__names variable can now be set to 2, to omit even
2397 readline_omit__names variable can now be set to 2, to omit even
2393 single underscore names. Thanks to a patch by Brian Wong
2398 single underscore names. Thanks to a patch by Brian Wong
2394 <BrianWong-AT-AirgoNetworks.Com>.
2399 <BrianWong-AT-AirgoNetworks.Com>.
2395 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
2400 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
2396 be autocalled as foo([1]) if foo were callable. A problem for
2401 be autocalled as foo([1]) if foo were callable. A problem for
2397 things which are both callable and implement __getitem__.
2402 things which are both callable and implement __getitem__.
2398 (init_readline): Fix autoindentation for win32. Thanks to a patch
2403 (init_readline): Fix autoindentation for win32. Thanks to a patch
2399 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
2404 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
2400
2405
2401 2005-02-12 Fernando Perez <fperez@colorado.edu>
2406 2005-02-12 Fernando Perez <fperez@colorado.edu>
2402
2407
2403 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
2408 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
2404 which I had written long ago to sort out user error messages which
2409 which I had written long ago to sort out user error messages which
2405 may occur during startup. This seemed like a good idea initially,
2410 may occur during startup. This seemed like a good idea initially,
2406 but it has proven a disaster in retrospect. I don't want to
2411 but it has proven a disaster in retrospect. I don't want to
2407 change much code for now, so my fix is to set the internal 'debug'
2412 change much code for now, so my fix is to set the internal 'debug'
2408 flag to true everywhere, whose only job was precisely to control
2413 flag to true everywhere, whose only job was precisely to control
2409 this subsystem. This closes issue 28 (as well as avoiding all
2414 this subsystem. This closes issue 28 (as well as avoiding all
2410 sorts of strange hangups which occur from time to time).
2415 sorts of strange hangups which occur from time to time).
2411
2416
2412 2005-02-07 Fernando Perez <fperez@colorado.edu>
2417 2005-02-07 Fernando Perez <fperez@colorado.edu>
2413
2418
2414 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
2419 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
2415 previous call produced a syntax error.
2420 previous call produced a syntax error.
2416
2421
2417 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2422 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2418 classes without constructor.
2423 classes without constructor.
2419
2424
2420 2005-02-06 Fernando Perez <fperez@colorado.edu>
2425 2005-02-06 Fernando Perez <fperez@colorado.edu>
2421
2426
2422 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
2427 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
2423 completions with the results of each matcher, so we return results
2428 completions with the results of each matcher, so we return results
2424 to the user from all namespaces. This breaks with ipython
2429 to the user from all namespaces. This breaks with ipython
2425 tradition, but I think it's a nicer behavior. Now you get all
2430 tradition, but I think it's a nicer behavior. Now you get all
2426 possible completions listed, from all possible namespaces (python,
2431 possible completions listed, from all possible namespaces (python,
2427 filesystem, magics...) After a request by John Hunter
2432 filesystem, magics...) After a request by John Hunter
2428 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2433 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2429
2434
2430 2005-02-05 Fernando Perez <fperez@colorado.edu>
2435 2005-02-05 Fernando Perez <fperez@colorado.edu>
2431
2436
2432 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
2437 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
2433 the call had quote characters in it (the quotes were stripped).
2438 the call had quote characters in it (the quotes were stripped).
2434
2439
2435 2005-01-31 Fernando Perez <fperez@colorado.edu>
2440 2005-01-31 Fernando Perez <fperez@colorado.edu>
2436
2441
2437 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
2442 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
2438 Itpl.itpl() to make the code more robust against psyco
2443 Itpl.itpl() to make the code more robust against psyco
2439 optimizations.
2444 optimizations.
2440
2445
2441 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
2446 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
2442 of causing an exception. Quicker, cleaner.
2447 of causing an exception. Quicker, cleaner.
2443
2448
2444 2005-01-28 Fernando Perez <fperez@colorado.edu>
2449 2005-01-28 Fernando Perez <fperez@colorado.edu>
2445
2450
2446 * scripts/ipython_win_post_install.py (install): hardcode
2451 * scripts/ipython_win_post_install.py (install): hardcode
2447 sys.prefix+'python.exe' as the executable path. It turns out that
2452 sys.prefix+'python.exe' as the executable path. It turns out that
2448 during the post-installation run, sys.executable resolves to the
2453 during the post-installation run, sys.executable resolves to the
2449 name of the binary installer! I should report this as a distutils
2454 name of the binary installer! I should report this as a distutils
2450 bug, I think. I updated the .10 release with this tiny fix, to
2455 bug, I think. I updated the .10 release with this tiny fix, to
2451 avoid annoying the lists further.
2456 avoid annoying the lists further.
2452
2457
2453 2005-01-27 *** Released version 0.6.10
2458 2005-01-27 *** Released version 0.6.10
2454
2459
2455 2005-01-27 Fernando Perez <fperez@colorado.edu>
2460 2005-01-27 Fernando Perez <fperez@colorado.edu>
2456
2461
2457 * IPython/numutils.py (norm): Added 'inf' as optional name for
2462 * IPython/numutils.py (norm): Added 'inf' as optional name for
2458 L-infinity norm, included references to mathworld.com for vector
2463 L-infinity norm, included references to mathworld.com for vector
2459 norm definitions.
2464 norm definitions.
2460 (amin/amax): added amin/amax for array min/max. Similar to what
2465 (amin/amax): added amin/amax for array min/max. Similar to what
2461 pylab ships with after the recent reorganization of names.
2466 pylab ships with after the recent reorganization of names.
2462 (spike/spike_odd): removed deprecated spike/spike_odd functions.
2467 (spike/spike_odd): removed deprecated spike/spike_odd functions.
2463
2468
2464 * ipython.el: committed Alex's recent fixes and improvements.
2469 * ipython.el: committed Alex's recent fixes and improvements.
2465 Tested with python-mode from CVS, and it looks excellent. Since
2470 Tested with python-mode from CVS, and it looks excellent. Since
2466 python-mode hasn't released anything in a while, I'm temporarily
2471 python-mode hasn't released anything in a while, I'm temporarily
2467 putting a copy of today's CVS (v 4.70) of python-mode in:
2472 putting a copy of today's CVS (v 4.70) of python-mode in:
2468 http://ipython.scipy.org/tmp/python-mode.el
2473 http://ipython.scipy.org/tmp/python-mode.el
2469
2474
2470 * scripts/ipython_win_post_install.py (install): Win32 fix to use
2475 * scripts/ipython_win_post_install.py (install): Win32 fix to use
2471 sys.executable for the executable name, instead of assuming it's
2476 sys.executable for the executable name, instead of assuming it's
2472 called 'python.exe' (the post-installer would have produced broken
2477 called 'python.exe' (the post-installer would have produced broken
2473 setups on systems with a differently named python binary).
2478 setups on systems with a differently named python binary).
2474
2479
2475 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
2480 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
2476 references to os.linesep, to make the code more
2481 references to os.linesep, to make the code more
2477 platform-independent. This is also part of the win32 coloring
2482 platform-independent. This is also part of the win32 coloring
2478 fixes.
2483 fixes.
2479
2484
2480 * IPython/genutils.py (page_dumb): Remove attempts to chop long
2485 * IPython/genutils.py (page_dumb): Remove attempts to chop long
2481 lines, which actually cause coloring bugs because the length of
2486 lines, which actually cause coloring bugs because the length of
2482 the line is very difficult to correctly compute with embedded
2487 the line is very difficult to correctly compute with embedded
2483 escapes. This was the source of all the coloring problems under
2488 escapes. This was the source of all the coloring problems under
2484 Win32. I think that _finally_, Win32 users have a properly
2489 Win32. I think that _finally_, Win32 users have a properly
2485 working ipython in all respects. This would never have happened
2490 working ipython in all respects. This would never have happened
2486 if not for Gary Bishop and Viktor Ransmayr's great help and work.
2491 if not for Gary Bishop and Viktor Ransmayr's great help and work.
2487
2492
2488 2005-01-26 *** Released version 0.6.9
2493 2005-01-26 *** Released version 0.6.9
2489
2494
2490 2005-01-25 Fernando Perez <fperez@colorado.edu>
2495 2005-01-25 Fernando Perez <fperez@colorado.edu>
2491
2496
2492 * setup.py: finally, we have a true Windows installer, thanks to
2497 * setup.py: finally, we have a true Windows installer, thanks to
2493 the excellent work of Viktor Ransmayr
2498 the excellent work of Viktor Ransmayr
2494 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
2499 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
2495 Windows users. The setup routine is quite a bit cleaner thanks to
2500 Windows users. The setup routine is quite a bit cleaner thanks to
2496 this, and the post-install script uses the proper functions to
2501 this, and the post-install script uses the proper functions to
2497 allow a clean de-installation using the standard Windows Control
2502 allow a clean de-installation using the standard Windows Control
2498 Panel.
2503 Panel.
2499
2504
2500 * IPython/genutils.py (get_home_dir): changed to use the $HOME
2505 * IPython/genutils.py (get_home_dir): changed to use the $HOME
2501 environment variable under all OSes (including win32) if
2506 environment variable under all OSes (including win32) if
2502 available. This will give consistency to win32 users who have set
2507 available. This will give consistency to win32 users who have set
2503 this variable for any reason. If os.environ['HOME'] fails, the
2508 this variable for any reason. If os.environ['HOME'] fails, the
2504 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
2509 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
2505
2510
2506 2005-01-24 Fernando Perez <fperez@colorado.edu>
2511 2005-01-24 Fernando Perez <fperez@colorado.edu>
2507
2512
2508 * IPython/numutils.py (empty_like): add empty_like(), similar to
2513 * IPython/numutils.py (empty_like): add empty_like(), similar to
2509 zeros_like() but taking advantage of the new empty() Numeric routine.
2514 zeros_like() but taking advantage of the new empty() Numeric routine.
2510
2515
2511 2005-01-23 *** Released version 0.6.8
2516 2005-01-23 *** Released version 0.6.8
2512
2517
2513 2005-01-22 Fernando Perez <fperez@colorado.edu>
2518 2005-01-22 Fernando Perez <fperez@colorado.edu>
2514
2519
2515 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
2520 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
2516 automatic show() calls. After discussing things with JDH, it
2521 automatic show() calls. After discussing things with JDH, it
2517 turns out there are too many corner cases where this can go wrong.
2522 turns out there are too many corner cases where this can go wrong.
2518 It's best not to try to be 'too smart', and simply have ipython
2523 It's best not to try to be 'too smart', and simply have ipython
2519 reproduce as much as possible the default behavior of a normal
2524 reproduce as much as possible the default behavior of a normal
2520 python shell.
2525 python shell.
2521
2526
2522 * IPython/iplib.py (InteractiveShell.__init__): Modified the
2527 * IPython/iplib.py (InteractiveShell.__init__): Modified the
2523 line-splitting regexp and _prefilter() to avoid calling getattr()
2528 line-splitting regexp and _prefilter() to avoid calling getattr()
2524 on assignments. This closes
2529 on assignments. This closes
2525 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
2530 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
2526 readline uses getattr(), so a simple <TAB> keypress is still
2531 readline uses getattr(), so a simple <TAB> keypress is still
2527 enough to trigger getattr() calls on an object.
2532 enough to trigger getattr() calls on an object.
2528
2533
2529 2005-01-21 Fernando Perez <fperez@colorado.edu>
2534 2005-01-21 Fernando Perez <fperez@colorado.edu>
2530
2535
2531 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
2536 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
2532 docstring under pylab so it doesn't mask the original.
2537 docstring under pylab so it doesn't mask the original.
2533
2538
2534 2005-01-21 *** Released version 0.6.7
2539 2005-01-21 *** Released version 0.6.7
2535
2540
2536 2005-01-21 Fernando Perez <fperez@colorado.edu>
2541 2005-01-21 Fernando Perez <fperez@colorado.edu>
2537
2542
2538 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
2543 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
2539 signal handling for win32 users in multithreaded mode.
2544 signal handling for win32 users in multithreaded mode.
2540
2545
2541 2005-01-17 Fernando Perez <fperez@colorado.edu>
2546 2005-01-17 Fernando Perez <fperez@colorado.edu>
2542
2547
2543 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2548 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2544 instances with no __init__. After a crash report by Norbert Nemec
2549 instances with no __init__. After a crash report by Norbert Nemec
2545 <Norbert-AT-nemec-online.de>.
2550 <Norbert-AT-nemec-online.de>.
2546
2551
2547 2005-01-14 Fernando Perez <fperez@colorado.edu>
2552 2005-01-14 Fernando Perez <fperez@colorado.edu>
2548
2553
2549 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
2554 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
2550 names for verbose exceptions, when multiple dotted names and the
2555 names for verbose exceptions, when multiple dotted names and the
2551 'parent' object were present on the same line.
2556 'parent' object were present on the same line.
2552
2557
2553 2005-01-11 Fernando Perez <fperez@colorado.edu>
2558 2005-01-11 Fernando Perez <fperez@colorado.edu>
2554
2559
2555 * IPython/genutils.py (flag_calls): new utility to trap and flag
2560 * IPython/genutils.py (flag_calls): new utility to trap and flag
2556 calls in functions. I need it to clean up matplotlib support.
2561 calls in functions. I need it to clean up matplotlib support.
2557 Also removed some deprecated code in genutils.
2562 Also removed some deprecated code in genutils.
2558
2563
2559 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
2564 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
2560 that matplotlib scripts called with %run, which don't call show()
2565 that matplotlib scripts called with %run, which don't call show()
2561 themselves, still have their plotting windows open.
2566 themselves, still have their plotting windows open.
2562
2567
2563 2005-01-05 Fernando Perez <fperez@colorado.edu>
2568 2005-01-05 Fernando Perez <fperez@colorado.edu>
2564
2569
2565 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
2570 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
2566 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
2571 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
2567
2572
2568 2004-12-19 Fernando Perez <fperez@colorado.edu>
2573 2004-12-19 Fernando Perez <fperez@colorado.edu>
2569
2574
2570 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
2575 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
2571 parent_runcode, which was an eyesore. The same result can be
2576 parent_runcode, which was an eyesore. The same result can be
2572 obtained with Python's regular superclass mechanisms.
2577 obtained with Python's regular superclass mechanisms.
2573
2578
2574 2004-12-17 Fernando Perez <fperez@colorado.edu>
2579 2004-12-17 Fernando Perez <fperez@colorado.edu>
2575
2580
2576 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
2581 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
2577 reported by Prabhu.
2582 reported by Prabhu.
2578 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
2583 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
2579 sys.stderr) instead of explicitly calling sys.stderr. This helps
2584 sys.stderr) instead of explicitly calling sys.stderr. This helps
2580 maintain our I/O abstractions clean, for future GUI embeddings.
2585 maintain our I/O abstractions clean, for future GUI embeddings.
2581
2586
2582 * IPython/genutils.py (info): added new utility for sys.stderr
2587 * IPython/genutils.py (info): added new utility for sys.stderr
2583 unified info message handling (thin wrapper around warn()).
2588 unified info message handling (thin wrapper around warn()).
2584
2589
2585 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
2590 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
2586 composite (dotted) names on verbose exceptions.
2591 composite (dotted) names on verbose exceptions.
2587 (VerboseTB.nullrepr): harden against another kind of errors which
2592 (VerboseTB.nullrepr): harden against another kind of errors which
2588 Python's inspect module can trigger, and which were crashing
2593 Python's inspect module can trigger, and which were crashing
2589 IPython. Thanks to a report by Marco Lombardi
2594 IPython. Thanks to a report by Marco Lombardi
2590 <mlombard-AT-ma010192.hq.eso.org>.
2595 <mlombard-AT-ma010192.hq.eso.org>.
2591
2596
2592 2004-12-13 *** Released version 0.6.6
2597 2004-12-13 *** Released version 0.6.6
2593
2598
2594 2004-12-12 Fernando Perez <fperez@colorado.edu>
2599 2004-12-12 Fernando Perez <fperez@colorado.edu>
2595
2600
2596 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
2601 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
2597 generated by pygtk upon initialization if it was built without
2602 generated by pygtk upon initialization if it was built without
2598 threads (for matplotlib users). After a crash reported by
2603 threads (for matplotlib users). After a crash reported by
2599 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
2604 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
2600
2605
2601 * IPython/ipmaker.py (make_IPython): fix small bug in the
2606 * IPython/ipmaker.py (make_IPython): fix small bug in the
2602 import_some parameter for multiple imports.
2607 import_some parameter for multiple imports.
2603
2608
2604 * IPython/iplib.py (ipmagic): simplified the interface of
2609 * IPython/iplib.py (ipmagic): simplified the interface of
2605 ipmagic() to take a single string argument, just as it would be
2610 ipmagic() to take a single string argument, just as it would be
2606 typed at the IPython cmd line.
2611 typed at the IPython cmd line.
2607 (ipalias): Added new ipalias() with an interface identical to
2612 (ipalias): Added new ipalias() with an interface identical to
2608 ipmagic(). This completes exposing a pure python interface to the
2613 ipmagic(). This completes exposing a pure python interface to the
2609 alias and magic system, which can be used in loops or more complex
2614 alias and magic system, which can be used in loops or more complex
2610 code where IPython's automatic line mangling is not active.
2615 code where IPython's automatic line mangling is not active.
2611
2616
2612 * IPython/genutils.py (timing): changed interface of timing to
2617 * IPython/genutils.py (timing): changed interface of timing to
2613 simply run code once, which is the most common case. timings()
2618 simply run code once, which is the most common case. timings()
2614 remains unchanged, for the cases where you want multiple runs.
2619 remains unchanged, for the cases where you want multiple runs.
2615
2620
2616 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
2621 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
2617 bug where Python2.2 crashes with exec'ing code which does not end
2622 bug where Python2.2 crashes with exec'ing code which does not end
2618 in a single newline. Python 2.3 is OK, so I hadn't noticed this
2623 in a single newline. Python 2.3 is OK, so I hadn't noticed this
2619 before.
2624 before.
2620
2625
2621 2004-12-10 Fernando Perez <fperez@colorado.edu>
2626 2004-12-10 Fernando Perez <fperez@colorado.edu>
2622
2627
2623 * IPython/Magic.py (Magic.magic_prun): changed name of option from
2628 * IPython/Magic.py (Magic.magic_prun): changed name of option from
2624 -t to -T, to accomodate the new -t flag in %run (the %run and
2629 -t to -T, to accomodate the new -t flag in %run (the %run and
2625 %prun options are kind of intermixed, and it's not easy to change
2630 %prun options are kind of intermixed, and it's not easy to change
2626 this with the limitations of python's getopt).
2631 this with the limitations of python's getopt).
2627
2632
2628 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
2633 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
2629 the execution of scripts. It's not as fine-tuned as timeit.py,
2634 the execution of scripts. It's not as fine-tuned as timeit.py,
2630 but it works from inside ipython (and under 2.2, which lacks
2635 but it works from inside ipython (and under 2.2, which lacks
2631 timeit.py). Optionally a number of runs > 1 can be given for
2636 timeit.py). Optionally a number of runs > 1 can be given for
2632 timing very short-running code.
2637 timing very short-running code.
2633
2638
2634 * IPython/genutils.py (uniq_stable): new routine which returns a
2639 * IPython/genutils.py (uniq_stable): new routine which returns a
2635 list of unique elements in any iterable, but in stable order of
2640 list of unique elements in any iterable, but in stable order of
2636 appearance. I needed this for the ultraTB fixes, and it's a handy
2641 appearance. I needed this for the ultraTB fixes, and it's a handy
2637 utility.
2642 utility.
2638
2643
2639 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
2644 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
2640 dotted names in Verbose exceptions. This had been broken since
2645 dotted names in Verbose exceptions. This had been broken since
2641 the very start, now x.y will properly be printed in a Verbose
2646 the very start, now x.y will properly be printed in a Verbose
2642 traceback, instead of x being shown and y appearing always as an
2647 traceback, instead of x being shown and y appearing always as an
2643 'undefined global'. Getting this to work was a bit tricky,
2648 'undefined global'. Getting this to work was a bit tricky,
2644 because by default python tokenizers are stateless. Saved by
2649 because by default python tokenizers are stateless. Saved by
2645 python's ability to easily add a bit of state to an arbitrary
2650 python's ability to easily add a bit of state to an arbitrary
2646 function (without needing to build a full-blown callable object).
2651 function (without needing to build a full-blown callable object).
2647
2652
2648 Also big cleanup of this code, which had horrendous runtime
2653 Also big cleanup of this code, which had horrendous runtime
2649 lookups of zillions of attributes for colorization. Moved all
2654 lookups of zillions of attributes for colorization. Moved all
2650 this code into a few templates, which make it cleaner and quicker.
2655 this code into a few templates, which make it cleaner and quicker.
2651
2656
2652 Printout quality was also improved for Verbose exceptions: one
2657 Printout quality was also improved for Verbose exceptions: one
2653 variable per line, and memory addresses are printed (this can be
2658 variable per line, and memory addresses are printed (this can be
2654 quite handy in nasty debugging situations, which is what Verbose
2659 quite handy in nasty debugging situations, which is what Verbose
2655 is for).
2660 is for).
2656
2661
2657 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
2662 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
2658 the command line as scripts to be loaded by embedded instances.
2663 the command line as scripts to be loaded by embedded instances.
2659 Doing so has the potential for an infinite recursion if there are
2664 Doing so has the potential for an infinite recursion if there are
2660 exceptions thrown in the process. This fixes a strange crash
2665 exceptions thrown in the process. This fixes a strange crash
2661 reported by Philippe MULLER <muller-AT-irit.fr>.
2666 reported by Philippe MULLER <muller-AT-irit.fr>.
2662
2667
2663 2004-12-09 Fernando Perez <fperez@colorado.edu>
2668 2004-12-09 Fernando Perez <fperez@colorado.edu>
2664
2669
2665 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2670 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2666 to reflect new names in matplotlib, which now expose the
2671 to reflect new names in matplotlib, which now expose the
2667 matlab-compatible interface via a pylab module instead of the
2672 matlab-compatible interface via a pylab module instead of the
2668 'matlab' name. The new code is backwards compatible, so users of
2673 'matlab' name. The new code is backwards compatible, so users of
2669 all matplotlib versions are OK. Patch by J. Hunter.
2674 all matplotlib versions are OK. Patch by J. Hunter.
2670
2675
2671 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2676 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2672 of __init__ docstrings for instances (class docstrings are already
2677 of __init__ docstrings for instances (class docstrings are already
2673 automatically printed). Instances with customized docstrings
2678 automatically printed). Instances with customized docstrings
2674 (indep. of the class) are also recognized and all 3 separate
2679 (indep. of the class) are also recognized and all 3 separate
2675 docstrings are printed (instance, class, constructor). After some
2680 docstrings are printed (instance, class, constructor). After some
2676 comments/suggestions by J. Hunter.
2681 comments/suggestions by J. Hunter.
2677
2682
2678 2004-12-05 Fernando Perez <fperez@colorado.edu>
2683 2004-12-05 Fernando Perez <fperez@colorado.edu>
2679
2684
2680 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2685 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2681 warnings when tab-completion fails and triggers an exception.
2686 warnings when tab-completion fails and triggers an exception.
2682
2687
2683 2004-12-03 Fernando Perez <fperez@colorado.edu>
2688 2004-12-03 Fernando Perez <fperez@colorado.edu>
2684
2689
2685 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2690 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2686 be triggered when using 'run -p'. An incorrect option flag was
2691 be triggered when using 'run -p'. An incorrect option flag was
2687 being set ('d' instead of 'D').
2692 being set ('d' instead of 'D').
2688 (manpage): fix missing escaped \- sign.
2693 (manpage): fix missing escaped \- sign.
2689
2694
2690 2004-11-30 *** Released version 0.6.5
2695 2004-11-30 *** Released version 0.6.5
2691
2696
2692 2004-11-30 Fernando Perez <fperez@colorado.edu>
2697 2004-11-30 Fernando Perez <fperez@colorado.edu>
2693
2698
2694 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2699 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2695 setting with -d option.
2700 setting with -d option.
2696
2701
2697 * setup.py (docfiles): Fix problem where the doc glob I was using
2702 * setup.py (docfiles): Fix problem where the doc glob I was using
2698 was COMPLETELY BROKEN. It was giving the right files by pure
2703 was COMPLETELY BROKEN. It was giving the right files by pure
2699 accident, but failed once I tried to include ipython.el. Note:
2704 accident, but failed once I tried to include ipython.el. Note:
2700 glob() does NOT allow you to do exclusion on multiple endings!
2705 glob() does NOT allow you to do exclusion on multiple endings!
2701
2706
2702 2004-11-29 Fernando Perez <fperez@colorado.edu>
2707 2004-11-29 Fernando Perez <fperez@colorado.edu>
2703
2708
2704 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2709 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2705 the manpage as the source. Better formatting & consistency.
2710 the manpage as the source. Better formatting & consistency.
2706
2711
2707 * IPython/Magic.py (magic_run): Added new -d option, to run
2712 * IPython/Magic.py (magic_run): Added new -d option, to run
2708 scripts under the control of the python pdb debugger. Note that
2713 scripts under the control of the python pdb debugger. Note that
2709 this required changing the %prun option -d to -D, to avoid a clash
2714 this required changing the %prun option -d to -D, to avoid a clash
2710 (since %run must pass options to %prun, and getopt is too dumb to
2715 (since %run must pass options to %prun, and getopt is too dumb to
2711 handle options with string values with embedded spaces). Thanks
2716 handle options with string values with embedded spaces). Thanks
2712 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2717 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2713 (magic_who_ls): added type matching to %who and %whos, so that one
2718 (magic_who_ls): added type matching to %who and %whos, so that one
2714 can filter their output to only include variables of certain
2719 can filter their output to only include variables of certain
2715 types. Another suggestion by Matthew.
2720 types. Another suggestion by Matthew.
2716 (magic_whos): Added memory summaries in kb and Mb for arrays.
2721 (magic_whos): Added memory summaries in kb and Mb for arrays.
2717 (magic_who): Improve formatting (break lines every 9 vars).
2722 (magic_who): Improve formatting (break lines every 9 vars).
2718
2723
2719 2004-11-28 Fernando Perez <fperez@colorado.edu>
2724 2004-11-28 Fernando Perez <fperez@colorado.edu>
2720
2725
2721 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2726 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2722 cache when empty lines were present.
2727 cache when empty lines were present.
2723
2728
2724 2004-11-24 Fernando Perez <fperez@colorado.edu>
2729 2004-11-24 Fernando Perez <fperez@colorado.edu>
2725
2730
2726 * IPython/usage.py (__doc__): document the re-activated threading
2731 * IPython/usage.py (__doc__): document the re-activated threading
2727 options for WX and GTK.
2732 options for WX and GTK.
2728
2733
2729 2004-11-23 Fernando Perez <fperez@colorado.edu>
2734 2004-11-23 Fernando Perez <fperez@colorado.edu>
2730
2735
2731 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2736 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2732 the -wthread and -gthread options, along with a new -tk one to try
2737 the -wthread and -gthread options, along with a new -tk one to try
2733 and coordinate Tk threading with wx/gtk. The tk support is very
2738 and coordinate Tk threading with wx/gtk. The tk support is very
2734 platform dependent, since it seems to require Tcl and Tk to be
2739 platform dependent, since it seems to require Tcl and Tk to be
2735 built with threads (Fedora1/2 appears NOT to have it, but in
2740 built with threads (Fedora1/2 appears NOT to have it, but in
2736 Prabhu's Debian boxes it works OK). But even with some Tk
2741 Prabhu's Debian boxes it works OK). But even with some Tk
2737 limitations, this is a great improvement.
2742 limitations, this is a great improvement.
2738
2743
2739 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2744 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2740 info in user prompts. Patch by Prabhu.
2745 info in user prompts. Patch by Prabhu.
2741
2746
2742 2004-11-18 Fernando Perez <fperez@colorado.edu>
2747 2004-11-18 Fernando Perez <fperez@colorado.edu>
2743
2748
2744 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2749 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2745 EOFErrors and bail, to avoid infinite loops if a non-terminating
2750 EOFErrors and bail, to avoid infinite loops if a non-terminating
2746 file is fed into ipython. Patch submitted in issue 19 by user,
2751 file is fed into ipython. Patch submitted in issue 19 by user,
2747 many thanks.
2752 many thanks.
2748
2753
2749 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2754 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2750 autoquote/parens in continuation prompts, which can cause lots of
2755 autoquote/parens in continuation prompts, which can cause lots of
2751 problems. Closes roundup issue 20.
2756 problems. Closes roundup issue 20.
2752
2757
2753 2004-11-17 Fernando Perez <fperez@colorado.edu>
2758 2004-11-17 Fernando Perez <fperez@colorado.edu>
2754
2759
2755 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2760 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2756 reported as debian bug #280505. I'm not sure my local changelog
2761 reported as debian bug #280505. I'm not sure my local changelog
2757 entry has the proper debian format (Jack?).
2762 entry has the proper debian format (Jack?).
2758
2763
2759 2004-11-08 *** Released version 0.6.4
2764 2004-11-08 *** Released version 0.6.4
2760
2765
2761 2004-11-08 Fernando Perez <fperez@colorado.edu>
2766 2004-11-08 Fernando Perez <fperez@colorado.edu>
2762
2767
2763 * IPython/iplib.py (init_readline): Fix exit message for Windows
2768 * IPython/iplib.py (init_readline): Fix exit message for Windows
2764 when readline is active. Thanks to a report by Eric Jones
2769 when readline is active. Thanks to a report by Eric Jones
2765 <eric-AT-enthought.com>.
2770 <eric-AT-enthought.com>.
2766
2771
2767 2004-11-07 Fernando Perez <fperez@colorado.edu>
2772 2004-11-07 Fernando Perez <fperez@colorado.edu>
2768
2773
2769 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2774 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2770 sometimes seen by win2k/cygwin users.
2775 sometimes seen by win2k/cygwin users.
2771
2776
2772 2004-11-06 Fernando Perez <fperez@colorado.edu>
2777 2004-11-06 Fernando Perez <fperez@colorado.edu>
2773
2778
2774 * IPython/iplib.py (interact): Change the handling of %Exit from
2779 * IPython/iplib.py (interact): Change the handling of %Exit from
2775 trying to propagate a SystemExit to an internal ipython flag.
2780 trying to propagate a SystemExit to an internal ipython flag.
2776 This is less elegant than using Python's exception mechanism, but
2781 This is less elegant than using Python's exception mechanism, but
2777 I can't get that to work reliably with threads, so under -pylab
2782 I can't get that to work reliably with threads, so under -pylab
2778 %Exit was hanging IPython. Cross-thread exception handling is
2783 %Exit was hanging IPython. Cross-thread exception handling is
2779 really a bitch. Thaks to a bug report by Stephen Walton
2784 really a bitch. Thaks to a bug report by Stephen Walton
2780 <stephen.walton-AT-csun.edu>.
2785 <stephen.walton-AT-csun.edu>.
2781
2786
2782 2004-11-04 Fernando Perez <fperez@colorado.edu>
2787 2004-11-04 Fernando Perez <fperez@colorado.edu>
2783
2788
2784 * IPython/iplib.py (raw_input_original): store a pointer to the
2789 * IPython/iplib.py (raw_input_original): store a pointer to the
2785 true raw_input to harden against code which can modify it
2790 true raw_input to harden against code which can modify it
2786 (wx.py.PyShell does this and would otherwise crash ipython).
2791 (wx.py.PyShell does this and would otherwise crash ipython).
2787 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2792 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2788
2793
2789 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2794 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2790 Ctrl-C problem, which does not mess up the input line.
2795 Ctrl-C problem, which does not mess up the input line.
2791
2796
2792 2004-11-03 Fernando Perez <fperez@colorado.edu>
2797 2004-11-03 Fernando Perez <fperez@colorado.edu>
2793
2798
2794 * IPython/Release.py: Changed licensing to BSD, in all files.
2799 * IPython/Release.py: Changed licensing to BSD, in all files.
2795 (name): lowercase name for tarball/RPM release.
2800 (name): lowercase name for tarball/RPM release.
2796
2801
2797 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2802 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2798 use throughout ipython.
2803 use throughout ipython.
2799
2804
2800 * IPython/Magic.py (Magic._ofind): Switch to using the new
2805 * IPython/Magic.py (Magic._ofind): Switch to using the new
2801 OInspect.getdoc() function.
2806 OInspect.getdoc() function.
2802
2807
2803 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2808 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2804 of the line currently being canceled via Ctrl-C. It's extremely
2809 of the line currently being canceled via Ctrl-C. It's extremely
2805 ugly, but I don't know how to do it better (the problem is one of
2810 ugly, but I don't know how to do it better (the problem is one of
2806 handling cross-thread exceptions).
2811 handling cross-thread exceptions).
2807
2812
2808 2004-10-28 Fernando Perez <fperez@colorado.edu>
2813 2004-10-28 Fernando Perez <fperez@colorado.edu>
2809
2814
2810 * IPython/Shell.py (signal_handler): add signal handlers to trap
2815 * IPython/Shell.py (signal_handler): add signal handlers to trap
2811 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2816 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2812 report by Francesc Alted.
2817 report by Francesc Alted.
2813
2818
2814 2004-10-21 Fernando Perez <fperez@colorado.edu>
2819 2004-10-21 Fernando Perez <fperez@colorado.edu>
2815
2820
2816 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2821 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2817 to % for pysh syntax extensions.
2822 to % for pysh syntax extensions.
2818
2823
2819 2004-10-09 Fernando Perez <fperez@colorado.edu>
2824 2004-10-09 Fernando Perez <fperez@colorado.edu>
2820
2825
2821 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2826 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2822 arrays to print a more useful summary, without calling str(arr).
2827 arrays to print a more useful summary, without calling str(arr).
2823 This avoids the problem of extremely lengthy computations which
2828 This avoids the problem of extremely lengthy computations which
2824 occur if arr is large, and appear to the user as a system lockup
2829 occur if arr is large, and appear to the user as a system lockup
2825 with 100% cpu activity. After a suggestion by Kristian Sandberg
2830 with 100% cpu activity. After a suggestion by Kristian Sandberg
2826 <Kristian.Sandberg@colorado.edu>.
2831 <Kristian.Sandberg@colorado.edu>.
2827 (Magic.__init__): fix bug in global magic escapes not being
2832 (Magic.__init__): fix bug in global magic escapes not being
2828 correctly set.
2833 correctly set.
2829
2834
2830 2004-10-08 Fernando Perez <fperez@colorado.edu>
2835 2004-10-08 Fernando Perez <fperez@colorado.edu>
2831
2836
2832 * IPython/Magic.py (__license__): change to absolute imports of
2837 * IPython/Magic.py (__license__): change to absolute imports of
2833 ipython's own internal packages, to start adapting to the absolute
2838 ipython's own internal packages, to start adapting to the absolute
2834 import requirement of PEP-328.
2839 import requirement of PEP-328.
2835
2840
2836 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2841 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2837 files, and standardize author/license marks through the Release
2842 files, and standardize author/license marks through the Release
2838 module instead of having per/file stuff (except for files with
2843 module instead of having per/file stuff (except for files with
2839 particular licenses, like the MIT/PSF-licensed codes).
2844 particular licenses, like the MIT/PSF-licensed codes).
2840
2845
2841 * IPython/Debugger.py: remove dead code for python 2.1
2846 * IPython/Debugger.py: remove dead code for python 2.1
2842
2847
2843 2004-10-04 Fernando Perez <fperez@colorado.edu>
2848 2004-10-04 Fernando Perez <fperez@colorado.edu>
2844
2849
2845 * IPython/iplib.py (ipmagic): New function for accessing magics
2850 * IPython/iplib.py (ipmagic): New function for accessing magics
2846 via a normal python function call.
2851 via a normal python function call.
2847
2852
2848 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2853 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2849 from '@' to '%', to accomodate the new @decorator syntax of python
2854 from '@' to '%', to accomodate the new @decorator syntax of python
2850 2.4.
2855 2.4.
2851
2856
2852 2004-09-29 Fernando Perez <fperez@colorado.edu>
2857 2004-09-29 Fernando Perez <fperez@colorado.edu>
2853
2858
2854 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2859 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2855 matplotlib.use to prevent running scripts which try to switch
2860 matplotlib.use to prevent running scripts which try to switch
2856 interactive backends from within ipython. This will just crash
2861 interactive backends from within ipython. This will just crash
2857 the python interpreter, so we can't allow it (but a detailed error
2862 the python interpreter, so we can't allow it (but a detailed error
2858 is given to the user).
2863 is given to the user).
2859
2864
2860 2004-09-28 Fernando Perez <fperez@colorado.edu>
2865 2004-09-28 Fernando Perez <fperez@colorado.edu>
2861
2866
2862 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2867 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2863 matplotlib-related fixes so that using @run with non-matplotlib
2868 matplotlib-related fixes so that using @run with non-matplotlib
2864 scripts doesn't pop up spurious plot windows. This requires
2869 scripts doesn't pop up spurious plot windows. This requires
2865 matplotlib >= 0.63, where I had to make some changes as well.
2870 matplotlib >= 0.63, where I had to make some changes as well.
2866
2871
2867 * IPython/ipmaker.py (make_IPython): update version requirement to
2872 * IPython/ipmaker.py (make_IPython): update version requirement to
2868 python 2.2.
2873 python 2.2.
2869
2874
2870 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2875 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2871 banner arg for embedded customization.
2876 banner arg for embedded customization.
2872
2877
2873 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2878 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2874 explicit uses of __IP as the IPython's instance name. Now things
2879 explicit uses of __IP as the IPython's instance name. Now things
2875 are properly handled via the shell.name value. The actual code
2880 are properly handled via the shell.name value. The actual code
2876 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2881 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2877 is much better than before. I'll clean things completely when the
2882 is much better than before. I'll clean things completely when the
2878 magic stuff gets a real overhaul.
2883 magic stuff gets a real overhaul.
2879
2884
2880 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2885 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2881 minor changes to debian dir.
2886 minor changes to debian dir.
2882
2887
2883 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2888 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2884 pointer to the shell itself in the interactive namespace even when
2889 pointer to the shell itself in the interactive namespace even when
2885 a user-supplied dict is provided. This is needed for embedding
2890 a user-supplied dict is provided. This is needed for embedding
2886 purposes (found by tests with Michel Sanner).
2891 purposes (found by tests with Michel Sanner).
2887
2892
2888 2004-09-27 Fernando Perez <fperez@colorado.edu>
2893 2004-09-27 Fernando Perez <fperez@colorado.edu>
2889
2894
2890 * IPython/UserConfig/ipythonrc: remove []{} from
2895 * IPython/UserConfig/ipythonrc: remove []{} from
2891 readline_remove_delims, so that things like [modname.<TAB> do
2896 readline_remove_delims, so that things like [modname.<TAB> do
2892 proper completion. This disables [].TAB, but that's a less common
2897 proper completion. This disables [].TAB, but that's a less common
2893 case than module names in list comprehensions, for example.
2898 case than module names in list comprehensions, for example.
2894 Thanks to a report by Andrea Riciputi.
2899 Thanks to a report by Andrea Riciputi.
2895
2900
2896 2004-09-09 Fernando Perez <fperez@colorado.edu>
2901 2004-09-09 Fernando Perez <fperez@colorado.edu>
2897
2902
2898 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2903 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2899 blocking problems in win32 and osx. Fix by John.
2904 blocking problems in win32 and osx. Fix by John.
2900
2905
2901 2004-09-08 Fernando Perez <fperez@colorado.edu>
2906 2004-09-08 Fernando Perez <fperez@colorado.edu>
2902
2907
2903 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2908 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2904 for Win32 and OSX. Fix by John Hunter.
2909 for Win32 and OSX. Fix by John Hunter.
2905
2910
2906 2004-08-30 *** Released version 0.6.3
2911 2004-08-30 *** Released version 0.6.3
2907
2912
2908 2004-08-30 Fernando Perez <fperez@colorado.edu>
2913 2004-08-30 Fernando Perez <fperez@colorado.edu>
2909
2914
2910 * setup.py (isfile): Add manpages to list of dependent files to be
2915 * setup.py (isfile): Add manpages to list of dependent files to be
2911 updated.
2916 updated.
2912
2917
2913 2004-08-27 Fernando Perez <fperez@colorado.edu>
2918 2004-08-27 Fernando Perez <fperez@colorado.edu>
2914
2919
2915 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2920 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2916 for now. They don't really work with standalone WX/GTK code
2921 for now. They don't really work with standalone WX/GTK code
2917 (though matplotlib IS working fine with both of those backends).
2922 (though matplotlib IS working fine with both of those backends).
2918 This will neeed much more testing. I disabled most things with
2923 This will neeed much more testing. I disabled most things with
2919 comments, so turning it back on later should be pretty easy.
2924 comments, so turning it back on later should be pretty easy.
2920
2925
2921 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2926 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2922 autocalling of expressions like r'foo', by modifying the line
2927 autocalling of expressions like r'foo', by modifying the line
2923 split regexp. Closes
2928 split regexp. Closes
2924 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2929 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2925 Riley <ipythonbugs-AT-sabi.net>.
2930 Riley <ipythonbugs-AT-sabi.net>.
2926 (InteractiveShell.mainloop): honor --nobanner with banner
2931 (InteractiveShell.mainloop): honor --nobanner with banner
2927 extensions.
2932 extensions.
2928
2933
2929 * IPython/Shell.py: Significant refactoring of all classes, so
2934 * IPython/Shell.py: Significant refactoring of all classes, so
2930 that we can really support ALL matplotlib backends and threading
2935 that we can really support ALL matplotlib backends and threading
2931 models (John spotted a bug with Tk which required this). Now we
2936 models (John spotted a bug with Tk which required this). Now we
2932 should support single-threaded, WX-threads and GTK-threads, both
2937 should support single-threaded, WX-threads and GTK-threads, both
2933 for generic code and for matplotlib.
2938 for generic code and for matplotlib.
2934
2939
2935 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2940 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2936 -pylab, to simplify things for users. Will also remove the pylab
2941 -pylab, to simplify things for users. Will also remove the pylab
2937 profile, since now all of matplotlib configuration is directly
2942 profile, since now all of matplotlib configuration is directly
2938 handled here. This also reduces startup time.
2943 handled here. This also reduces startup time.
2939
2944
2940 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2945 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2941 shell wasn't being correctly called. Also in IPShellWX.
2946 shell wasn't being correctly called. Also in IPShellWX.
2942
2947
2943 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2948 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2944 fine-tune banner.
2949 fine-tune banner.
2945
2950
2946 * IPython/numutils.py (spike): Deprecate these spike functions,
2951 * IPython/numutils.py (spike): Deprecate these spike functions,
2947 delete (long deprecated) gnuplot_exec handler.
2952 delete (long deprecated) gnuplot_exec handler.
2948
2953
2949 2004-08-26 Fernando Perez <fperez@colorado.edu>
2954 2004-08-26 Fernando Perez <fperez@colorado.edu>
2950
2955
2951 * ipython.1: Update for threading options, plus some others which
2956 * ipython.1: Update for threading options, plus some others which
2952 were missing.
2957 were missing.
2953
2958
2954 * IPython/ipmaker.py (__call__): Added -wthread option for
2959 * IPython/ipmaker.py (__call__): Added -wthread option for
2955 wxpython thread handling. Make sure threading options are only
2960 wxpython thread handling. Make sure threading options are only
2956 valid at the command line.
2961 valid at the command line.
2957
2962
2958 * scripts/ipython: moved shell selection into a factory function
2963 * scripts/ipython: moved shell selection into a factory function
2959 in Shell.py, to keep the starter script to a minimum.
2964 in Shell.py, to keep the starter script to a minimum.
2960
2965
2961 2004-08-25 Fernando Perez <fperez@colorado.edu>
2966 2004-08-25 Fernando Perez <fperez@colorado.edu>
2962
2967
2963 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2968 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2964 John. Along with some recent changes he made to matplotlib, the
2969 John. Along with some recent changes he made to matplotlib, the
2965 next versions of both systems should work very well together.
2970 next versions of both systems should work very well together.
2966
2971
2967 2004-08-24 Fernando Perez <fperez@colorado.edu>
2972 2004-08-24 Fernando Perez <fperez@colorado.edu>
2968
2973
2969 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2974 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2970 tried to switch the profiling to using hotshot, but I'm getting
2975 tried to switch the profiling to using hotshot, but I'm getting
2971 strange errors from prof.runctx() there. I may be misreading the
2976 strange errors from prof.runctx() there. I may be misreading the
2972 docs, but it looks weird. For now the profiling code will
2977 docs, but it looks weird. For now the profiling code will
2973 continue to use the standard profiler.
2978 continue to use the standard profiler.
2974
2979
2975 2004-08-23 Fernando Perez <fperez@colorado.edu>
2980 2004-08-23 Fernando Perez <fperez@colorado.edu>
2976
2981
2977 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2982 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2978 threaded shell, by John Hunter. It's not quite ready yet, but
2983 threaded shell, by John Hunter. It's not quite ready yet, but
2979 close.
2984 close.
2980
2985
2981 2004-08-22 Fernando Perez <fperez@colorado.edu>
2986 2004-08-22 Fernando Perez <fperez@colorado.edu>
2982
2987
2983 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2988 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2984 in Magic and ultraTB.
2989 in Magic and ultraTB.
2985
2990
2986 * ipython.1: document threading options in manpage.
2991 * ipython.1: document threading options in manpage.
2987
2992
2988 * scripts/ipython: Changed name of -thread option to -gthread,
2993 * scripts/ipython: Changed name of -thread option to -gthread,
2989 since this is GTK specific. I want to leave the door open for a
2994 since this is GTK specific. I want to leave the door open for a
2990 -wthread option for WX, which will most likely be necessary. This
2995 -wthread option for WX, which will most likely be necessary. This
2991 change affects usage and ipmaker as well.
2996 change affects usage and ipmaker as well.
2992
2997
2993 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2998 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2994 handle the matplotlib shell issues. Code by John Hunter
2999 handle the matplotlib shell issues. Code by John Hunter
2995 <jdhunter-AT-nitace.bsd.uchicago.edu>.
3000 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2996 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
3001 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2997 broken (and disabled for end users) for now, but it puts the
3002 broken (and disabled for end users) for now, but it puts the
2998 infrastructure in place.
3003 infrastructure in place.
2999
3004
3000 2004-08-21 Fernando Perez <fperez@colorado.edu>
3005 2004-08-21 Fernando Perez <fperez@colorado.edu>
3001
3006
3002 * ipythonrc-pylab: Add matplotlib support.
3007 * ipythonrc-pylab: Add matplotlib support.
3003
3008
3004 * matplotlib_config.py: new files for matplotlib support, part of
3009 * matplotlib_config.py: new files for matplotlib support, part of
3005 the pylab profile.
3010 the pylab profile.
3006
3011
3007 * IPython/usage.py (__doc__): documented the threading options.
3012 * IPython/usage.py (__doc__): documented the threading options.
3008
3013
3009 2004-08-20 Fernando Perez <fperez@colorado.edu>
3014 2004-08-20 Fernando Perez <fperez@colorado.edu>
3010
3015
3011 * ipython: Modified the main calling routine to handle the -thread
3016 * ipython: Modified the main calling routine to handle the -thread
3012 and -mpthread options. This needs to be done as a top-level hack,
3017 and -mpthread options. This needs to be done as a top-level hack,
3013 because it determines which class to instantiate for IPython
3018 because it determines which class to instantiate for IPython
3014 itself.
3019 itself.
3015
3020
3016 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
3021 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
3017 classes to support multithreaded GTK operation without blocking,
3022 classes to support multithreaded GTK operation without blocking,
3018 and matplotlib with all backends. This is a lot of still very
3023 and matplotlib with all backends. This is a lot of still very
3019 experimental code, and threads are tricky. So it may still have a
3024 experimental code, and threads are tricky. So it may still have a
3020 few rough edges... This code owes a lot to
3025 few rough edges... This code owes a lot to
3021 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
3026 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
3022 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
3027 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
3023 to John Hunter for all the matplotlib work.
3028 to John Hunter for all the matplotlib work.
3024
3029
3025 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
3030 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
3026 options for gtk thread and matplotlib support.
3031 options for gtk thread and matplotlib support.
3027
3032
3028 2004-08-16 Fernando Perez <fperez@colorado.edu>
3033 2004-08-16 Fernando Perez <fperez@colorado.edu>
3029
3034
3030 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
3035 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
3031 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
3036 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
3032 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
3037 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
3033
3038
3034 2004-08-11 Fernando Perez <fperez@colorado.edu>
3039 2004-08-11 Fernando Perez <fperez@colorado.edu>
3035
3040
3036 * setup.py (isfile): Fix build so documentation gets updated for
3041 * setup.py (isfile): Fix build so documentation gets updated for
3037 rpms (it was only done for .tgz builds).
3042 rpms (it was only done for .tgz builds).
3038
3043
3039 2004-08-10 Fernando Perez <fperez@colorado.edu>
3044 2004-08-10 Fernando Perez <fperez@colorado.edu>
3040
3045
3041 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
3046 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
3042
3047
3043 * iplib.py : Silence syntax error exceptions in tab-completion.
3048 * iplib.py : Silence syntax error exceptions in tab-completion.
3044
3049
3045 2004-08-05 Fernando Perez <fperez@colorado.edu>
3050 2004-08-05 Fernando Perez <fperez@colorado.edu>
3046
3051
3047 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
3052 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
3048 'color off' mark for continuation prompts. This was causing long
3053 'color off' mark for continuation prompts. This was causing long
3049 continuation lines to mis-wrap.
3054 continuation lines to mis-wrap.
3050
3055
3051 2004-08-01 Fernando Perez <fperez@colorado.edu>
3056 2004-08-01 Fernando Perez <fperez@colorado.edu>
3052
3057
3053 * IPython/ipmaker.py (make_IPython): Allow the shell class used
3058 * IPython/ipmaker.py (make_IPython): Allow the shell class used
3054 for building ipython to be a parameter. All this is necessary
3059 for building ipython to be a parameter. All this is necessary
3055 right now to have a multithreaded version, but this insane
3060 right now to have a multithreaded version, but this insane
3056 non-design will be cleaned up soon. For now, it's a hack that
3061 non-design will be cleaned up soon. For now, it's a hack that
3057 works.
3062 works.
3058
3063
3059 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
3064 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
3060 args in various places. No bugs so far, but it's a dangerous
3065 args in various places. No bugs so far, but it's a dangerous
3061 practice.
3066 practice.
3062
3067
3063 2004-07-31 Fernando Perez <fperez@colorado.edu>
3068 2004-07-31 Fernando Perez <fperez@colorado.edu>
3064
3069
3065 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
3070 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
3066 fix completion of files with dots in their names under most
3071 fix completion of files with dots in their names under most
3067 profiles (pysh was OK because the completion order is different).
3072 profiles (pysh was OK because the completion order is different).
3068
3073
3069 2004-07-27 Fernando Perez <fperez@colorado.edu>
3074 2004-07-27 Fernando Perez <fperez@colorado.edu>
3070
3075
3071 * IPython/iplib.py (InteractiveShell.__init__): build dict of
3076 * IPython/iplib.py (InteractiveShell.__init__): build dict of
3072 keywords manually, b/c the one in keyword.py was removed in python
3077 keywords manually, b/c the one in keyword.py was removed in python
3073 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
3078 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
3074 This is NOT a bug under python 2.3 and earlier.
3079 This is NOT a bug under python 2.3 and earlier.
3075
3080
3076 2004-07-26 Fernando Perez <fperez@colorado.edu>
3081 2004-07-26 Fernando Perez <fperez@colorado.edu>
3077
3082
3078 * IPython/ultraTB.py (VerboseTB.text): Add another
3083 * IPython/ultraTB.py (VerboseTB.text): Add another
3079 linecache.checkcache() call to try to prevent inspect.py from
3084 linecache.checkcache() call to try to prevent inspect.py from
3080 crashing under python 2.3. I think this fixes
3085 crashing under python 2.3. I think this fixes
3081 http://www.scipy.net/roundup/ipython/issue17.
3086 http://www.scipy.net/roundup/ipython/issue17.
3082
3087
3083 2004-07-26 *** Released version 0.6.2
3088 2004-07-26 *** Released version 0.6.2
3084
3089
3085 2004-07-26 Fernando Perez <fperez@colorado.edu>
3090 2004-07-26 Fernando Perez <fperez@colorado.edu>
3086
3091
3087 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
3092 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
3088 fail for any number.
3093 fail for any number.
3089 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
3094 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
3090 empty bookmarks.
3095 empty bookmarks.
3091
3096
3092 2004-07-26 *** Released version 0.6.1
3097 2004-07-26 *** Released version 0.6.1
3093
3098
3094 2004-07-26 Fernando Perez <fperez@colorado.edu>
3099 2004-07-26 Fernando Perez <fperez@colorado.edu>
3095
3100
3096 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
3101 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
3097
3102
3098 * IPython/iplib.py (protect_filename): Applied Ville's patch for
3103 * IPython/iplib.py (protect_filename): Applied Ville's patch for
3099 escaping '()[]{}' in filenames.
3104 escaping '()[]{}' in filenames.
3100
3105
3101 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
3106 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
3102 Python 2.2 users who lack a proper shlex.split.
3107 Python 2.2 users who lack a proper shlex.split.
3103
3108
3104 2004-07-19 Fernando Perez <fperez@colorado.edu>
3109 2004-07-19 Fernando Perez <fperez@colorado.edu>
3105
3110
3106 * IPython/iplib.py (InteractiveShell.init_readline): Add support
3111 * IPython/iplib.py (InteractiveShell.init_readline): Add support
3107 for reading readline's init file. I follow the normal chain:
3112 for reading readline's init file. I follow the normal chain:
3108 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
3113 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
3109 report by Mike Heeter. This closes
3114 report by Mike Heeter. This closes
3110 http://www.scipy.net/roundup/ipython/issue16.
3115 http://www.scipy.net/roundup/ipython/issue16.
3111
3116
3112 2004-07-18 Fernando Perez <fperez@colorado.edu>
3117 2004-07-18 Fernando Perez <fperez@colorado.edu>
3113
3118
3114 * IPython/iplib.py (__init__): Add better handling of '\' under
3119 * IPython/iplib.py (__init__): Add better handling of '\' under
3115 Win32 for filenames. After a patch by Ville.
3120 Win32 for filenames. After a patch by Ville.
3116
3121
3117 2004-07-17 Fernando Perez <fperez@colorado.edu>
3122 2004-07-17 Fernando Perez <fperez@colorado.edu>
3118
3123
3119 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3124 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3120 autocalling would be triggered for 'foo is bar' if foo is
3125 autocalling would be triggered for 'foo is bar' if foo is
3121 callable. I also cleaned up the autocall detection code to use a
3126 callable. I also cleaned up the autocall detection code to use a
3122 regexp, which is faster. Bug reported by Alexander Schmolck.
3127 regexp, which is faster. Bug reported by Alexander Schmolck.
3123
3128
3124 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
3129 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
3125 '?' in them would confuse the help system. Reported by Alex
3130 '?' in them would confuse the help system. Reported by Alex
3126 Schmolck.
3131 Schmolck.
3127
3132
3128 2004-07-16 Fernando Perez <fperez@colorado.edu>
3133 2004-07-16 Fernando Perez <fperez@colorado.edu>
3129
3134
3130 * IPython/GnuplotInteractive.py (__all__): added plot2.
3135 * IPython/GnuplotInteractive.py (__all__): added plot2.
3131
3136
3132 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
3137 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
3133 plotting dictionaries, lists or tuples of 1d arrays.
3138 plotting dictionaries, lists or tuples of 1d arrays.
3134
3139
3135 * IPython/Magic.py (Magic.magic_hist): small clenaups and
3140 * IPython/Magic.py (Magic.magic_hist): small clenaups and
3136 optimizations.
3141 optimizations.
3137
3142
3138 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
3143 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
3139 the information which was there from Janko's original IPP code:
3144 the information which was there from Janko's original IPP code:
3140
3145
3141 03.05.99 20:53 porto.ifm.uni-kiel.de
3146 03.05.99 20:53 porto.ifm.uni-kiel.de
3142 --Started changelog.
3147 --Started changelog.
3143 --make clear do what it say it does
3148 --make clear do what it say it does
3144 --added pretty output of lines from inputcache
3149 --added pretty output of lines from inputcache
3145 --Made Logger a mixin class, simplifies handling of switches
3150 --Made Logger a mixin class, simplifies handling of switches
3146 --Added own completer class. .string<TAB> expands to last history
3151 --Added own completer class. .string<TAB> expands to last history
3147 line which starts with string. The new expansion is also present
3152 line which starts with string. The new expansion is also present
3148 with Ctrl-r from the readline library. But this shows, who this
3153 with Ctrl-r from the readline library. But this shows, who this
3149 can be done for other cases.
3154 can be done for other cases.
3150 --Added convention that all shell functions should accept a
3155 --Added convention that all shell functions should accept a
3151 parameter_string This opens the door for different behaviour for
3156 parameter_string This opens the door for different behaviour for
3152 each function. @cd is a good example of this.
3157 each function. @cd is a good example of this.
3153
3158
3154 04.05.99 12:12 porto.ifm.uni-kiel.de
3159 04.05.99 12:12 porto.ifm.uni-kiel.de
3155 --added logfile rotation
3160 --added logfile rotation
3156 --added new mainloop method which freezes first the namespace
3161 --added new mainloop method which freezes first the namespace
3157
3162
3158 07.05.99 21:24 porto.ifm.uni-kiel.de
3163 07.05.99 21:24 porto.ifm.uni-kiel.de
3159 --added the docreader classes. Now there is a help system.
3164 --added the docreader classes. Now there is a help system.
3160 -This is only a first try. Currently it's not easy to put new
3165 -This is only a first try. Currently it's not easy to put new
3161 stuff in the indices. But this is the way to go. Info would be
3166 stuff in the indices. But this is the way to go. Info would be
3162 better, but HTML is every where and not everybody has an info
3167 better, but HTML is every where and not everybody has an info
3163 system installed and it's not so easy to change html-docs to info.
3168 system installed and it's not so easy to change html-docs to info.
3164 --added global logfile option
3169 --added global logfile option
3165 --there is now a hook for object inspection method pinfo needs to
3170 --there is now a hook for object inspection method pinfo needs to
3166 be provided for this. Can be reached by two '??'.
3171 be provided for this. Can be reached by two '??'.
3167
3172
3168 08.05.99 20:51 porto.ifm.uni-kiel.de
3173 08.05.99 20:51 porto.ifm.uni-kiel.de
3169 --added a README
3174 --added a README
3170 --bug in rc file. Something has changed so functions in the rc
3175 --bug in rc file. Something has changed so functions in the rc
3171 file need to reference the shell and not self. Not clear if it's a
3176 file need to reference the shell and not self. Not clear if it's a
3172 bug or feature.
3177 bug or feature.
3173 --changed rc file for new behavior
3178 --changed rc file for new behavior
3174
3179
3175 2004-07-15 Fernando Perez <fperez@colorado.edu>
3180 2004-07-15 Fernando Perez <fperez@colorado.edu>
3176
3181
3177 * IPython/Logger.py (Logger.log): fixed recent bug where the input
3182 * IPython/Logger.py (Logger.log): fixed recent bug where the input
3178 cache was falling out of sync in bizarre manners when multi-line
3183 cache was falling out of sync in bizarre manners when multi-line
3179 input was present. Minor optimizations and cleanup.
3184 input was present. Minor optimizations and cleanup.
3180
3185
3181 (Logger): Remove old Changelog info for cleanup. This is the
3186 (Logger): Remove old Changelog info for cleanup. This is the
3182 information which was there from Janko's original code:
3187 information which was there from Janko's original code:
3183
3188
3184 Changes to Logger: - made the default log filename a parameter
3189 Changes to Logger: - made the default log filename a parameter
3185
3190
3186 - put a check for lines beginning with !@? in log(). Needed
3191 - put a check for lines beginning with !@? in log(). Needed
3187 (even if the handlers properly log their lines) for mid-session
3192 (even if the handlers properly log their lines) for mid-session
3188 logging activation to work properly. Without this, lines logged
3193 logging activation to work properly. Without this, lines logged
3189 in mid session, which get read from the cache, would end up
3194 in mid session, which get read from the cache, would end up
3190 'bare' (with !@? in the open) in the log. Now they are caught
3195 'bare' (with !@? in the open) in the log. Now they are caught
3191 and prepended with a #.
3196 and prepended with a #.
3192
3197
3193 * IPython/iplib.py (InteractiveShell.init_readline): added check
3198 * IPython/iplib.py (InteractiveShell.init_readline): added check
3194 in case MagicCompleter fails to be defined, so we don't crash.
3199 in case MagicCompleter fails to be defined, so we don't crash.
3195
3200
3196 2004-07-13 Fernando Perez <fperez@colorado.edu>
3201 2004-07-13 Fernando Perez <fperez@colorado.edu>
3197
3202
3198 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
3203 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
3199 of EPS if the requested filename ends in '.eps'.
3204 of EPS if the requested filename ends in '.eps'.
3200
3205
3201 2004-07-04 Fernando Perez <fperez@colorado.edu>
3206 2004-07-04 Fernando Perez <fperez@colorado.edu>
3202
3207
3203 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
3208 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
3204 escaping of quotes when calling the shell.
3209 escaping of quotes when calling the shell.
3205
3210
3206 2004-07-02 Fernando Perez <fperez@colorado.edu>
3211 2004-07-02 Fernando Perez <fperez@colorado.edu>
3207
3212
3208 * IPython/Prompts.py (CachedOutput.update): Fix problem with
3213 * IPython/Prompts.py (CachedOutput.update): Fix problem with
3209 gettext not working because we were clobbering '_'. Fixes
3214 gettext not working because we were clobbering '_'. Fixes
3210 http://www.scipy.net/roundup/ipython/issue6.
3215 http://www.scipy.net/roundup/ipython/issue6.
3211
3216
3212 2004-07-01 Fernando Perez <fperez@colorado.edu>
3217 2004-07-01 Fernando Perez <fperez@colorado.edu>
3213
3218
3214 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
3219 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
3215 into @cd. Patch by Ville.
3220 into @cd. Patch by Ville.
3216
3221
3217 * IPython/iplib.py (InteractiveShell.post_config_initialization):
3222 * IPython/iplib.py (InteractiveShell.post_config_initialization):
3218 new function to store things after ipmaker runs. Patch by Ville.
3223 new function to store things after ipmaker runs. Patch by Ville.
3219 Eventually this will go away once ipmaker is removed and the class
3224 Eventually this will go away once ipmaker is removed and the class
3220 gets cleaned up, but for now it's ok. Key functionality here is
3225 gets cleaned up, but for now it's ok. Key functionality here is
3221 the addition of the persistent storage mechanism, a dict for
3226 the addition of the persistent storage mechanism, a dict for
3222 keeping data across sessions (for now just bookmarks, but more can
3227 keeping data across sessions (for now just bookmarks, but more can
3223 be implemented later).
3228 be implemented later).
3224
3229
3225 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
3230 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
3226 persistent across sections. Patch by Ville, I modified it
3231 persistent across sections. Patch by Ville, I modified it
3227 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
3232 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
3228 added a '-l' option to list all bookmarks.
3233 added a '-l' option to list all bookmarks.
3229
3234
3230 * IPython/iplib.py (InteractiveShell.atexit_operations): new
3235 * IPython/iplib.py (InteractiveShell.atexit_operations): new
3231 center for cleanup. Registered with atexit.register(). I moved
3236 center for cleanup. Registered with atexit.register(). I moved
3232 here the old exit_cleanup(). After a patch by Ville.
3237 here the old exit_cleanup(). After a patch by Ville.
3233
3238
3234 * IPython/Magic.py (get_py_filename): added '~' to the accepted
3239 * IPython/Magic.py (get_py_filename): added '~' to the accepted
3235 characters in the hacked shlex_split for python 2.2.
3240 characters in the hacked shlex_split for python 2.2.
3236
3241
3237 * IPython/iplib.py (file_matches): more fixes to filenames with
3242 * IPython/iplib.py (file_matches): more fixes to filenames with
3238 whitespace in them. It's not perfect, but limitations in python's
3243 whitespace in them. It's not perfect, but limitations in python's
3239 readline make it impossible to go further.
3244 readline make it impossible to go further.
3240
3245
3241 2004-06-29 Fernando Perez <fperez@colorado.edu>
3246 2004-06-29 Fernando Perez <fperez@colorado.edu>
3242
3247
3243 * IPython/iplib.py (file_matches): escape whitespace correctly in
3248 * IPython/iplib.py (file_matches): escape whitespace correctly in
3244 filename completions. Bug reported by Ville.
3249 filename completions. Bug reported by Ville.
3245
3250
3246 2004-06-28 Fernando Perez <fperez@colorado.edu>
3251 2004-06-28 Fernando Perez <fperez@colorado.edu>
3247
3252
3248 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
3253 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
3249 the history file will be called 'history-PROFNAME' (or just
3254 the history file will be called 'history-PROFNAME' (or just
3250 'history' if no profile is loaded). I was getting annoyed at
3255 'history' if no profile is loaded). I was getting annoyed at
3251 getting my Numerical work history clobbered by pysh sessions.
3256 getting my Numerical work history clobbered by pysh sessions.
3252
3257
3253 * IPython/iplib.py (InteractiveShell.__init__): Internal
3258 * IPython/iplib.py (InteractiveShell.__init__): Internal
3254 getoutputerror() function so that we can honor the system_verbose
3259 getoutputerror() function so that we can honor the system_verbose
3255 flag for _all_ system calls. I also added escaping of #
3260 flag for _all_ system calls. I also added escaping of #
3256 characters here to avoid confusing Itpl.
3261 characters here to avoid confusing Itpl.
3257
3262
3258 * IPython/Magic.py (shlex_split): removed call to shell in
3263 * IPython/Magic.py (shlex_split): removed call to shell in
3259 parse_options and replaced it with shlex.split(). The annoying
3264 parse_options and replaced it with shlex.split(). The annoying
3260 part was that in Python 2.2, shlex.split() doesn't exist, so I had
3265 part was that in Python 2.2, shlex.split() doesn't exist, so I had
3261 to backport it from 2.3, with several frail hacks (the shlex
3266 to backport it from 2.3, with several frail hacks (the shlex
3262 module is rather limited in 2.2). Thanks to a suggestion by Ville
3267 module is rather limited in 2.2). Thanks to a suggestion by Ville
3263 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
3268 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
3264 problem.
3269 problem.
3265
3270
3266 (Magic.magic_system_verbose): new toggle to print the actual
3271 (Magic.magic_system_verbose): new toggle to print the actual
3267 system calls made by ipython. Mainly for debugging purposes.
3272 system calls made by ipython. Mainly for debugging purposes.
3268
3273
3269 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
3274 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
3270 doesn't support persistence. Reported (and fix suggested) by
3275 doesn't support persistence. Reported (and fix suggested) by
3271 Travis Caldwell <travis_caldwell2000@yahoo.com>.
3276 Travis Caldwell <travis_caldwell2000@yahoo.com>.
3272
3277
3273 2004-06-26 Fernando Perez <fperez@colorado.edu>
3278 2004-06-26 Fernando Perez <fperez@colorado.edu>
3274
3279
3275 * IPython/Logger.py (Logger.log): fix to handle correctly empty
3280 * IPython/Logger.py (Logger.log): fix to handle correctly empty
3276 continue prompts.
3281 continue prompts.
3277
3282
3278 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
3283 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
3279 function (basically a big docstring) and a few more things here to
3284 function (basically a big docstring) and a few more things here to
3280 speedup startup. pysh.py is now very lightweight. We want because
3285 speedup startup. pysh.py is now very lightweight. We want because
3281 it gets execfile'd, while InterpreterExec gets imported, so
3286 it gets execfile'd, while InterpreterExec gets imported, so
3282 byte-compilation saves time.
3287 byte-compilation saves time.
3283
3288
3284 2004-06-25 Fernando Perez <fperez@colorado.edu>
3289 2004-06-25 Fernando Perez <fperez@colorado.edu>
3285
3290
3286 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
3291 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
3287 -NUM', which was recently broken.
3292 -NUM', which was recently broken.
3288
3293
3289 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
3294 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
3290 in multi-line input (but not !!, which doesn't make sense there).
3295 in multi-line input (but not !!, which doesn't make sense there).
3291
3296
3292 * IPython/UserConfig/ipythonrc: made autoindent on by default.
3297 * IPython/UserConfig/ipythonrc: made autoindent on by default.
3293 It's just too useful, and people can turn it off in the less
3298 It's just too useful, and people can turn it off in the less
3294 common cases where it's a problem.
3299 common cases where it's a problem.
3295
3300
3296 2004-06-24 Fernando Perez <fperez@colorado.edu>
3301 2004-06-24 Fernando Perez <fperez@colorado.edu>
3297
3302
3298 * IPython/iplib.py (InteractiveShell._prefilter): big change -
3303 * IPython/iplib.py (InteractiveShell._prefilter): big change -
3299 special syntaxes (like alias calling) is now allied in multi-line
3304 special syntaxes (like alias calling) is now allied in multi-line
3300 input. This is still _very_ experimental, but it's necessary for
3305 input. This is still _very_ experimental, but it's necessary for
3301 efficient shell usage combining python looping syntax with system
3306 efficient shell usage combining python looping syntax with system
3302 calls. For now it's restricted to aliases, I don't think it
3307 calls. For now it's restricted to aliases, I don't think it
3303 really even makes sense to have this for magics.
3308 really even makes sense to have this for magics.
3304
3309
3305 2004-06-23 Fernando Perez <fperez@colorado.edu>
3310 2004-06-23 Fernando Perez <fperez@colorado.edu>
3306
3311
3307 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
3312 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
3308 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
3313 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
3309
3314
3310 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
3315 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
3311 extensions under Windows (after code sent by Gary Bishop). The
3316 extensions under Windows (after code sent by Gary Bishop). The
3312 extensions considered 'executable' are stored in IPython's rc
3317 extensions considered 'executable' are stored in IPython's rc
3313 structure as win_exec_ext.
3318 structure as win_exec_ext.
3314
3319
3315 * IPython/genutils.py (shell): new function, like system() but
3320 * IPython/genutils.py (shell): new function, like system() but
3316 without return value. Very useful for interactive shell work.
3321 without return value. Very useful for interactive shell work.
3317
3322
3318 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
3323 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
3319 delete aliases.
3324 delete aliases.
3320
3325
3321 * IPython/iplib.py (InteractiveShell.alias_table_update): make
3326 * IPython/iplib.py (InteractiveShell.alias_table_update): make
3322 sure that the alias table doesn't contain python keywords.
3327 sure that the alias table doesn't contain python keywords.
3323
3328
3324 2004-06-21 Fernando Perez <fperez@colorado.edu>
3329 2004-06-21 Fernando Perez <fperez@colorado.edu>
3325
3330
3326 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
3331 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
3327 non-existent items are found in $PATH. Reported by Thorsten.
3332 non-existent items are found in $PATH. Reported by Thorsten.
3328
3333
3329 2004-06-20 Fernando Perez <fperez@colorado.edu>
3334 2004-06-20 Fernando Perez <fperez@colorado.edu>
3330
3335
3331 * IPython/iplib.py (complete): modified the completer so that the
3336 * IPython/iplib.py (complete): modified the completer so that the
3332 order of priorities can be easily changed at runtime.
3337 order of priorities can be easily changed at runtime.
3333
3338
3334 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
3339 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
3335 Modified to auto-execute all lines beginning with '~', '/' or '.'.
3340 Modified to auto-execute all lines beginning with '~', '/' or '.'.
3336
3341
3337 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
3342 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
3338 expand Python variables prepended with $ in all system calls. The
3343 expand Python variables prepended with $ in all system calls. The
3339 same was done to InteractiveShell.handle_shell_escape. Now all
3344 same was done to InteractiveShell.handle_shell_escape. Now all
3340 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
3345 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
3341 expansion of python variables and expressions according to the
3346 expansion of python variables and expressions according to the
3342 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
3347 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
3343
3348
3344 Though PEP-215 has been rejected, a similar (but simpler) one
3349 Though PEP-215 has been rejected, a similar (but simpler) one
3345 seems like it will go into Python 2.4, PEP-292 -
3350 seems like it will go into Python 2.4, PEP-292 -
3346 http://www.python.org/peps/pep-0292.html.
3351 http://www.python.org/peps/pep-0292.html.
3347
3352
3348 I'll keep the full syntax of PEP-215, since IPython has since the
3353 I'll keep the full syntax of PEP-215, since IPython has since the
3349 start used Ka-Ping Yee's reference implementation discussed there
3354 start used Ka-Ping Yee's reference implementation discussed there
3350 (Itpl), and I actually like the powerful semantics it offers.
3355 (Itpl), and I actually like the powerful semantics it offers.
3351
3356
3352 In order to access normal shell variables, the $ has to be escaped
3357 In order to access normal shell variables, the $ has to be escaped
3353 via an extra $. For example:
3358 via an extra $. For example:
3354
3359
3355 In [7]: PATH='a python variable'
3360 In [7]: PATH='a python variable'
3356
3361
3357 In [8]: !echo $PATH
3362 In [8]: !echo $PATH
3358 a python variable
3363 a python variable
3359
3364
3360 In [9]: !echo $$PATH
3365 In [9]: !echo $$PATH
3361 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
3366 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
3362
3367
3363 (Magic.parse_options): escape $ so the shell doesn't evaluate
3368 (Magic.parse_options): escape $ so the shell doesn't evaluate
3364 things prematurely.
3369 things prematurely.
3365
3370
3366 * IPython/iplib.py (InteractiveShell.call_alias): added the
3371 * IPython/iplib.py (InteractiveShell.call_alias): added the
3367 ability for aliases to expand python variables via $.
3372 ability for aliases to expand python variables via $.
3368
3373
3369 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
3374 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
3370 system, now there's a @rehash/@rehashx pair of magics. These work
3375 system, now there's a @rehash/@rehashx pair of magics. These work
3371 like the csh rehash command, and can be invoked at any time. They
3376 like the csh rehash command, and can be invoked at any time. They
3372 build a table of aliases to everything in the user's $PATH
3377 build a table of aliases to everything in the user's $PATH
3373 (@rehash uses everything, @rehashx is slower but only adds
3378 (@rehash uses everything, @rehashx is slower but only adds
3374 executable files). With this, the pysh.py-based shell profile can
3379 executable files). With this, the pysh.py-based shell profile can
3375 now simply call rehash upon startup, and full access to all
3380 now simply call rehash upon startup, and full access to all
3376 programs in the user's path is obtained.
3381 programs in the user's path is obtained.
3377
3382
3378 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
3383 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
3379 functionality is now fully in place. I removed the old dynamic
3384 functionality is now fully in place. I removed the old dynamic
3380 code generation based approach, in favor of a much lighter one
3385 code generation based approach, in favor of a much lighter one
3381 based on a simple dict. The advantage is that this allows me to
3386 based on a simple dict. The advantage is that this allows me to
3382 now have thousands of aliases with negligible cost (unthinkable
3387 now have thousands of aliases with negligible cost (unthinkable
3383 with the old system).
3388 with the old system).
3384
3389
3385 2004-06-19 Fernando Perez <fperez@colorado.edu>
3390 2004-06-19 Fernando Perez <fperez@colorado.edu>
3386
3391
3387 * IPython/iplib.py (__init__): extended MagicCompleter class to
3392 * IPython/iplib.py (__init__): extended MagicCompleter class to
3388 also complete (last in priority) on user aliases.
3393 also complete (last in priority) on user aliases.
3389
3394
3390 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
3395 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
3391 call to eval.
3396 call to eval.
3392 (ItplNS.__init__): Added a new class which functions like Itpl,
3397 (ItplNS.__init__): Added a new class which functions like Itpl,
3393 but allows configuring the namespace for the evaluation to occur
3398 but allows configuring the namespace for the evaluation to occur
3394 in.
3399 in.
3395
3400
3396 2004-06-18 Fernando Perez <fperez@colorado.edu>
3401 2004-06-18 Fernando Perez <fperez@colorado.edu>
3397
3402
3398 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
3403 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
3399 better message when 'exit' or 'quit' are typed (a common newbie
3404 better message when 'exit' or 'quit' are typed (a common newbie
3400 confusion).
3405 confusion).
3401
3406
3402 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
3407 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
3403 check for Windows users.
3408 check for Windows users.
3404
3409
3405 * IPython/iplib.py (InteractiveShell.user_setup): removed
3410 * IPython/iplib.py (InteractiveShell.user_setup): removed
3406 disabling of colors for Windows. I'll test at runtime and issue a
3411 disabling of colors for Windows. I'll test at runtime and issue a
3407 warning if Gary's readline isn't found, as to nudge users to
3412 warning if Gary's readline isn't found, as to nudge users to
3408 download it.
3413 download it.
3409
3414
3410 2004-06-16 Fernando Perez <fperez@colorado.edu>
3415 2004-06-16 Fernando Perez <fperez@colorado.edu>
3411
3416
3412 * IPython/genutils.py (Stream.__init__): changed to print errors
3417 * IPython/genutils.py (Stream.__init__): changed to print errors
3413 to sys.stderr. I had a circular dependency here. Now it's
3418 to sys.stderr. I had a circular dependency here. Now it's
3414 possible to run ipython as IDLE's shell (consider this pre-alpha,
3419 possible to run ipython as IDLE's shell (consider this pre-alpha,
3415 since true stdout things end up in the starting terminal instead
3420 since true stdout things end up in the starting terminal instead
3416 of IDLE's out).
3421 of IDLE's out).
3417
3422
3418 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
3423 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
3419 users who haven't # updated their prompt_in2 definitions. Remove
3424 users who haven't # updated their prompt_in2 definitions. Remove
3420 eventually.
3425 eventually.
3421 (multiple_replace): added credit to original ASPN recipe.
3426 (multiple_replace): added credit to original ASPN recipe.
3422
3427
3423 2004-06-15 Fernando Perez <fperez@colorado.edu>
3428 2004-06-15 Fernando Perez <fperez@colorado.edu>
3424
3429
3425 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
3430 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
3426 list of auto-defined aliases.
3431 list of auto-defined aliases.
3427
3432
3428 2004-06-13 Fernando Perez <fperez@colorado.edu>
3433 2004-06-13 Fernando Perez <fperez@colorado.edu>
3429
3434
3430 * setup.py (scriptfiles): Don't trigger win_post_install unless an
3435 * setup.py (scriptfiles): Don't trigger win_post_install unless an
3431 install was really requested (so setup.py can be used for other
3436 install was really requested (so setup.py can be used for other
3432 things under Windows).
3437 things under Windows).
3433
3438
3434 2004-06-10 Fernando Perez <fperez@colorado.edu>
3439 2004-06-10 Fernando Perez <fperez@colorado.edu>
3435
3440
3436 * IPython/Logger.py (Logger.create_log): Manually remove any old
3441 * IPython/Logger.py (Logger.create_log): Manually remove any old
3437 backup, since os.remove may fail under Windows. Fixes bug
3442 backup, since os.remove may fail under Windows. Fixes bug
3438 reported by Thorsten.
3443 reported by Thorsten.
3439
3444
3440 2004-06-09 Fernando Perez <fperez@colorado.edu>
3445 2004-06-09 Fernando Perez <fperez@colorado.edu>
3441
3446
3442 * examples/example-embed.py: fixed all references to %n (replaced
3447 * examples/example-embed.py: fixed all references to %n (replaced
3443 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
3448 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
3444 for all examples and the manual as well.
3449 for all examples and the manual as well.
3445
3450
3446 2004-06-08 Fernando Perez <fperez@colorado.edu>
3451 2004-06-08 Fernando Perez <fperez@colorado.edu>
3447
3452
3448 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
3453 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
3449 alignment and color management. All 3 prompt subsystems now
3454 alignment and color management. All 3 prompt subsystems now
3450 inherit from BasePrompt.
3455 inherit from BasePrompt.
3451
3456
3452 * tools/release: updates for windows installer build and tag rpms
3457 * tools/release: updates for windows installer build and tag rpms
3453 with python version (since paths are fixed).
3458 with python version (since paths are fixed).
3454
3459
3455 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
3460 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
3456 which will become eventually obsolete. Also fixed the default
3461 which will become eventually obsolete. Also fixed the default
3457 prompt_in2 to use \D, so at least new users start with the correct
3462 prompt_in2 to use \D, so at least new users start with the correct
3458 defaults.
3463 defaults.
3459 WARNING: Users with existing ipythonrc files will need to apply
3464 WARNING: Users with existing ipythonrc files will need to apply
3460 this fix manually!
3465 this fix manually!
3461
3466
3462 * setup.py: make windows installer (.exe). This is finally the
3467 * setup.py: make windows installer (.exe). This is finally the
3463 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
3468 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
3464 which I hadn't included because it required Python 2.3 (or recent
3469 which I hadn't included because it required Python 2.3 (or recent
3465 distutils).
3470 distutils).
3466
3471
3467 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
3472 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
3468 usage of new '\D' escape.
3473 usage of new '\D' escape.
3469
3474
3470 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
3475 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
3471 lacks os.getuid())
3476 lacks os.getuid())
3472 (CachedOutput.set_colors): Added the ability to turn coloring
3477 (CachedOutput.set_colors): Added the ability to turn coloring
3473 on/off with @colors even for manually defined prompt colors. It
3478 on/off with @colors even for manually defined prompt colors. It
3474 uses a nasty global, but it works safely and via the generic color
3479 uses a nasty global, but it works safely and via the generic color
3475 handling mechanism.
3480 handling mechanism.
3476 (Prompt2.__init__): Introduced new escape '\D' for continuation
3481 (Prompt2.__init__): Introduced new escape '\D' for continuation
3477 prompts. It represents the counter ('\#') as dots.
3482 prompts. It represents the counter ('\#') as dots.
3478 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
3483 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
3479 need to update their ipythonrc files and replace '%n' with '\D' in
3484 need to update their ipythonrc files and replace '%n' with '\D' in
3480 their prompt_in2 settings everywhere. Sorry, but there's
3485 their prompt_in2 settings everywhere. Sorry, but there's
3481 otherwise no clean way to get all prompts to properly align. The
3486 otherwise no clean way to get all prompts to properly align. The
3482 ipythonrc shipped with IPython has been updated.
3487 ipythonrc shipped with IPython has been updated.
3483
3488
3484 2004-06-07 Fernando Perez <fperez@colorado.edu>
3489 2004-06-07 Fernando Perez <fperez@colorado.edu>
3485
3490
3486 * setup.py (isfile): Pass local_icons option to latex2html, so the
3491 * setup.py (isfile): Pass local_icons option to latex2html, so the
3487 resulting HTML file is self-contained. Thanks to
3492 resulting HTML file is self-contained. Thanks to
3488 dryice-AT-liu.com.cn for the tip.
3493 dryice-AT-liu.com.cn for the tip.
3489
3494
3490 * pysh.py: I created a new profile 'shell', which implements a
3495 * pysh.py: I created a new profile 'shell', which implements a
3491 _rudimentary_ IPython-based shell. This is in NO WAY a realy
3496 _rudimentary_ IPython-based shell. This is in NO WAY a realy
3492 system shell, nor will it become one anytime soon. It's mainly
3497 system shell, nor will it become one anytime soon. It's mainly
3493 meant to illustrate the use of the new flexible bash-like prompts.
3498 meant to illustrate the use of the new flexible bash-like prompts.
3494 I guess it could be used by hardy souls for true shell management,
3499 I guess it could be used by hardy souls for true shell management,
3495 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
3500 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
3496 profile. This uses the InterpreterExec extension provided by
3501 profile. This uses the InterpreterExec extension provided by
3497 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
3502 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
3498
3503
3499 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
3504 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
3500 auto-align itself with the length of the previous input prompt
3505 auto-align itself with the length of the previous input prompt
3501 (taking into account the invisible color escapes).
3506 (taking into account the invisible color escapes).
3502 (CachedOutput.__init__): Large restructuring of this class. Now
3507 (CachedOutput.__init__): Large restructuring of this class. Now
3503 all three prompts (primary1, primary2, output) are proper objects,
3508 all three prompts (primary1, primary2, output) are proper objects,
3504 managed by the 'parent' CachedOutput class. The code is still a
3509 managed by the 'parent' CachedOutput class. The code is still a
3505 bit hackish (all prompts share state via a pointer to the cache),
3510 bit hackish (all prompts share state via a pointer to the cache),
3506 but it's overall far cleaner than before.
3511 but it's overall far cleaner than before.
3507
3512
3508 * IPython/genutils.py (getoutputerror): modified to add verbose,
3513 * IPython/genutils.py (getoutputerror): modified to add verbose,
3509 debug and header options. This makes the interface of all getout*
3514 debug and header options. This makes the interface of all getout*
3510 functions uniform.
3515 functions uniform.
3511 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
3516 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
3512
3517
3513 * IPython/Magic.py (Magic.default_option): added a function to
3518 * IPython/Magic.py (Magic.default_option): added a function to
3514 allow registering default options for any magic command. This
3519 allow registering default options for any magic command. This
3515 makes it easy to have profiles which customize the magics globally
3520 makes it easy to have profiles which customize the magics globally
3516 for a certain use. The values set through this function are
3521 for a certain use. The values set through this function are
3517 picked up by the parse_options() method, which all magics should
3522 picked up by the parse_options() method, which all magics should
3518 use to parse their options.
3523 use to parse their options.
3519
3524
3520 * IPython/genutils.py (warn): modified the warnings framework to
3525 * IPython/genutils.py (warn): modified the warnings framework to
3521 use the Term I/O class. I'm trying to slowly unify all of
3526 use the Term I/O class. I'm trying to slowly unify all of
3522 IPython's I/O operations to pass through Term.
3527 IPython's I/O operations to pass through Term.
3523
3528
3524 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
3529 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
3525 the secondary prompt to correctly match the length of the primary
3530 the secondary prompt to correctly match the length of the primary
3526 one for any prompt. Now multi-line code will properly line up
3531 one for any prompt. Now multi-line code will properly line up
3527 even for path dependent prompts, such as the new ones available
3532 even for path dependent prompts, such as the new ones available
3528 via the prompt_specials.
3533 via the prompt_specials.
3529
3534
3530 2004-06-06 Fernando Perez <fperez@colorado.edu>
3535 2004-06-06 Fernando Perez <fperez@colorado.edu>
3531
3536
3532 * IPython/Prompts.py (prompt_specials): Added the ability to have
3537 * IPython/Prompts.py (prompt_specials): Added the ability to have
3533 bash-like special sequences in the prompts, which get
3538 bash-like special sequences in the prompts, which get
3534 automatically expanded. Things like hostname, current working
3539 automatically expanded. Things like hostname, current working
3535 directory and username are implemented already, but it's easy to
3540 directory and username are implemented already, but it's easy to
3536 add more in the future. Thanks to a patch by W.J. van der Laan
3541 add more in the future. Thanks to a patch by W.J. van der Laan
3537 <gnufnork-AT-hetdigitalegat.nl>
3542 <gnufnork-AT-hetdigitalegat.nl>
3538 (prompt_specials): Added color support for prompt strings, so
3543 (prompt_specials): Added color support for prompt strings, so
3539 users can define arbitrary color setups for their prompts.
3544 users can define arbitrary color setups for their prompts.
3540
3545
3541 2004-06-05 Fernando Perez <fperez@colorado.edu>
3546 2004-06-05 Fernando Perez <fperez@colorado.edu>
3542
3547
3543 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
3548 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
3544 code to load Gary Bishop's readline and configure it
3549 code to load Gary Bishop's readline and configure it
3545 automatically. Thanks to Gary for help on this.
3550 automatically. Thanks to Gary for help on this.
3546
3551
3547 2004-06-01 Fernando Perez <fperez@colorado.edu>
3552 2004-06-01 Fernando Perez <fperez@colorado.edu>
3548
3553
3549 * IPython/Logger.py (Logger.create_log): fix bug for logging
3554 * IPython/Logger.py (Logger.create_log): fix bug for logging
3550 with no filename (previous fix was incomplete).
3555 with no filename (previous fix was incomplete).
3551
3556
3552 2004-05-25 Fernando Perez <fperez@colorado.edu>
3557 2004-05-25 Fernando Perez <fperez@colorado.edu>
3553
3558
3554 * IPython/Magic.py (Magic.parse_options): fix bug where naked
3559 * IPython/Magic.py (Magic.parse_options): fix bug where naked
3555 parens would get passed to the shell.
3560 parens would get passed to the shell.
3556
3561
3557 2004-05-20 Fernando Perez <fperez@colorado.edu>
3562 2004-05-20 Fernando Perez <fperez@colorado.edu>
3558
3563
3559 * IPython/Magic.py (Magic.magic_prun): changed default profile
3564 * IPython/Magic.py (Magic.magic_prun): changed default profile
3560 sort order to 'time' (the more common profiling need).
3565 sort order to 'time' (the more common profiling need).
3561
3566
3562 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
3567 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
3563 so that source code shown is guaranteed in sync with the file on
3568 so that source code shown is guaranteed in sync with the file on
3564 disk (also changed in psource). Similar fix to the one for
3569 disk (also changed in psource). Similar fix to the one for
3565 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
3570 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
3566 <yann.ledu-AT-noos.fr>.
3571 <yann.ledu-AT-noos.fr>.
3567
3572
3568 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
3573 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
3569 with a single option would not be correctly parsed. Closes
3574 with a single option would not be correctly parsed. Closes
3570 http://www.scipy.net/roundup/ipython/issue14. This bug had been
3575 http://www.scipy.net/roundup/ipython/issue14. This bug had been
3571 introduced in 0.6.0 (on 2004-05-06).
3576 introduced in 0.6.0 (on 2004-05-06).
3572
3577
3573 2004-05-13 *** Released version 0.6.0
3578 2004-05-13 *** Released version 0.6.0
3574
3579
3575 2004-05-13 Fernando Perez <fperez@colorado.edu>
3580 2004-05-13 Fernando Perez <fperez@colorado.edu>
3576
3581
3577 * debian/: Added debian/ directory to CVS, so that debian support
3582 * debian/: Added debian/ directory to CVS, so that debian support
3578 is publicly accessible. The debian package is maintained by Jack
3583 is publicly accessible. The debian package is maintained by Jack
3579 Moffit <jack-AT-xiph.org>.
3584 Moffit <jack-AT-xiph.org>.
3580
3585
3581 * Documentation: included the notes about an ipython-based system
3586 * Documentation: included the notes about an ipython-based system
3582 shell (the hypothetical 'pysh') into the new_design.pdf document,
3587 shell (the hypothetical 'pysh') into the new_design.pdf document,
3583 so that these ideas get distributed to users along with the
3588 so that these ideas get distributed to users along with the
3584 official documentation.
3589 official documentation.
3585
3590
3586 2004-05-10 Fernando Perez <fperez@colorado.edu>
3591 2004-05-10 Fernando Perez <fperez@colorado.edu>
3587
3592
3588 * IPython/Logger.py (Logger.create_log): fix recently introduced
3593 * IPython/Logger.py (Logger.create_log): fix recently introduced
3589 bug (misindented line) where logstart would fail when not given an
3594 bug (misindented line) where logstart would fail when not given an
3590 explicit filename.
3595 explicit filename.
3591
3596
3592 2004-05-09 Fernando Perez <fperez@colorado.edu>
3597 2004-05-09 Fernando Perez <fperez@colorado.edu>
3593
3598
3594 * IPython/Magic.py (Magic.parse_options): skip system call when
3599 * IPython/Magic.py (Magic.parse_options): skip system call when
3595 there are no options to look for. Faster, cleaner for the common
3600 there are no options to look for. Faster, cleaner for the common
3596 case.
3601 case.
3597
3602
3598 * Documentation: many updates to the manual: describing Windows
3603 * Documentation: many updates to the manual: describing Windows
3599 support better, Gnuplot updates, credits, misc small stuff. Also
3604 support better, Gnuplot updates, credits, misc small stuff. Also
3600 updated the new_design doc a bit.
3605 updated the new_design doc a bit.
3601
3606
3602 2004-05-06 *** Released version 0.6.0.rc1
3607 2004-05-06 *** Released version 0.6.0.rc1
3603
3608
3604 2004-05-06 Fernando Perez <fperez@colorado.edu>
3609 2004-05-06 Fernando Perez <fperez@colorado.edu>
3605
3610
3606 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
3611 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
3607 operations to use the vastly more efficient list/''.join() method.
3612 operations to use the vastly more efficient list/''.join() method.
3608 (FormattedTB.text): Fix
3613 (FormattedTB.text): Fix
3609 http://www.scipy.net/roundup/ipython/issue12 - exception source
3614 http://www.scipy.net/roundup/ipython/issue12 - exception source
3610 extract not updated after reload. Thanks to Mike Salib
3615 extract not updated after reload. Thanks to Mike Salib
3611 <msalib-AT-mit.edu> for pinning the source of the problem.
3616 <msalib-AT-mit.edu> for pinning the source of the problem.
3612 Fortunately, the solution works inside ipython and doesn't require
3617 Fortunately, the solution works inside ipython and doesn't require
3613 any changes to python proper.
3618 any changes to python proper.
3614
3619
3615 * IPython/Magic.py (Magic.parse_options): Improved to process the
3620 * IPython/Magic.py (Magic.parse_options): Improved to process the
3616 argument list as a true shell would (by actually using the
3621 argument list as a true shell would (by actually using the
3617 underlying system shell). This way, all @magics automatically get
3622 underlying system shell). This way, all @magics automatically get
3618 shell expansion for variables. Thanks to a comment by Alex
3623 shell expansion for variables. Thanks to a comment by Alex
3619 Schmolck.
3624 Schmolck.
3620
3625
3621 2004-04-04 Fernando Perez <fperez@colorado.edu>
3626 2004-04-04 Fernando Perez <fperez@colorado.edu>
3622
3627
3623 * IPython/iplib.py (InteractiveShell.interact): Added a special
3628 * IPython/iplib.py (InteractiveShell.interact): Added a special
3624 trap for a debugger quit exception, which is basically impossible
3629 trap for a debugger quit exception, which is basically impossible
3625 to handle by normal mechanisms, given what pdb does to the stack.
3630 to handle by normal mechanisms, given what pdb does to the stack.
3626 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
3631 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
3627
3632
3628 2004-04-03 Fernando Perez <fperez@colorado.edu>
3633 2004-04-03 Fernando Perez <fperez@colorado.edu>
3629
3634
3630 * IPython/genutils.py (Term): Standardized the names of the Term
3635 * IPython/genutils.py (Term): Standardized the names of the Term
3631 class streams to cin/cout/cerr, following C++ naming conventions
3636 class streams to cin/cout/cerr, following C++ naming conventions
3632 (I can't use in/out/err because 'in' is not a valid attribute
3637 (I can't use in/out/err because 'in' is not a valid attribute
3633 name).
3638 name).
3634
3639
3635 * IPython/iplib.py (InteractiveShell.interact): don't increment
3640 * IPython/iplib.py (InteractiveShell.interact): don't increment
3636 the prompt if there's no user input. By Daniel 'Dang' Griffith
3641 the prompt if there's no user input. By Daniel 'Dang' Griffith
3637 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
3642 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
3638 Francois Pinard.
3643 Francois Pinard.
3639
3644
3640 2004-04-02 Fernando Perez <fperez@colorado.edu>
3645 2004-04-02 Fernando Perez <fperez@colorado.edu>
3641
3646
3642 * IPython/genutils.py (Stream.__init__): Modified to survive at
3647 * IPython/genutils.py (Stream.__init__): Modified to survive at
3643 least importing in contexts where stdin/out/err aren't true file
3648 least importing in contexts where stdin/out/err aren't true file
3644 objects, such as PyCrust (they lack fileno() and mode). However,
3649 objects, such as PyCrust (they lack fileno() and mode). However,
3645 the recovery facilities which rely on these things existing will
3650 the recovery facilities which rely on these things existing will
3646 not work.
3651 not work.
3647
3652
3648 2004-04-01 Fernando Perez <fperez@colorado.edu>
3653 2004-04-01 Fernando Perez <fperez@colorado.edu>
3649
3654
3650 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
3655 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
3651 use the new getoutputerror() function, so it properly
3656 use the new getoutputerror() function, so it properly
3652 distinguishes stdout/err.
3657 distinguishes stdout/err.
3653
3658
3654 * IPython/genutils.py (getoutputerror): added a function to
3659 * IPython/genutils.py (getoutputerror): added a function to
3655 capture separately the standard output and error of a command.
3660 capture separately the standard output and error of a command.
3656 After a comment from dang on the mailing lists. This code is
3661 After a comment from dang on the mailing lists. This code is
3657 basically a modified version of commands.getstatusoutput(), from
3662 basically a modified version of commands.getstatusoutput(), from
3658 the standard library.
3663 the standard library.
3659
3664
3660 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3665 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3661 '!!' as a special syntax (shorthand) to access @sx.
3666 '!!' as a special syntax (shorthand) to access @sx.
3662
3667
3663 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3668 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3664 command and return its output as a list split on '\n'.
3669 command and return its output as a list split on '\n'.
3665
3670
3666 2004-03-31 Fernando Perez <fperez@colorado.edu>
3671 2004-03-31 Fernando Perez <fperez@colorado.edu>
3667
3672
3668 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3673 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3669 method to dictionaries used as FakeModule instances if they lack
3674 method to dictionaries used as FakeModule instances if they lack
3670 it. At least pydoc in python2.3 breaks for runtime-defined
3675 it. At least pydoc in python2.3 breaks for runtime-defined
3671 functions without this hack. At some point I need to _really_
3676 functions without this hack. At some point I need to _really_
3672 understand what FakeModule is doing, because it's a gross hack.
3677 understand what FakeModule is doing, because it's a gross hack.
3673 But it solves Arnd's problem for now...
3678 But it solves Arnd's problem for now...
3674
3679
3675 2004-02-27 Fernando Perez <fperez@colorado.edu>
3680 2004-02-27 Fernando Perez <fperez@colorado.edu>
3676
3681
3677 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3682 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3678 mode would behave erratically. Also increased the number of
3683 mode would behave erratically. Also increased the number of
3679 possible logs in rotate mod to 999. Thanks to Rod Holland
3684 possible logs in rotate mod to 999. Thanks to Rod Holland
3680 <rhh@StructureLABS.com> for the report and fixes.
3685 <rhh@StructureLABS.com> for the report and fixes.
3681
3686
3682 2004-02-26 Fernando Perez <fperez@colorado.edu>
3687 2004-02-26 Fernando Perez <fperez@colorado.edu>
3683
3688
3684 * IPython/genutils.py (page): Check that the curses module really
3689 * IPython/genutils.py (page): Check that the curses module really
3685 has the initscr attribute before trying to use it. For some
3690 has the initscr attribute before trying to use it. For some
3686 reason, the Solaris curses module is missing this. I think this
3691 reason, the Solaris curses module is missing this. I think this
3687 should be considered a Solaris python bug, but I'm not sure.
3692 should be considered a Solaris python bug, but I'm not sure.
3688
3693
3689 2004-01-17 Fernando Perez <fperez@colorado.edu>
3694 2004-01-17 Fernando Perez <fperez@colorado.edu>
3690
3695
3691 * IPython/genutils.py (Stream.__init__): Changes to try to make
3696 * IPython/genutils.py (Stream.__init__): Changes to try to make
3692 ipython robust against stdin/out/err being closed by the user.
3697 ipython robust against stdin/out/err being closed by the user.
3693 This is 'user error' (and blocks a normal python session, at least
3698 This is 'user error' (and blocks a normal python session, at least
3694 the stdout case). However, Ipython should be able to survive such
3699 the stdout case). However, Ipython should be able to survive such
3695 instances of abuse as gracefully as possible. To simplify the
3700 instances of abuse as gracefully as possible. To simplify the
3696 coding and maintain compatibility with Gary Bishop's Term
3701 coding and maintain compatibility with Gary Bishop's Term
3697 contributions, I've made use of classmethods for this. I think
3702 contributions, I've made use of classmethods for this. I think
3698 this introduces a dependency on python 2.2.
3703 this introduces a dependency on python 2.2.
3699
3704
3700 2004-01-13 Fernando Perez <fperez@colorado.edu>
3705 2004-01-13 Fernando Perez <fperez@colorado.edu>
3701
3706
3702 * IPython/numutils.py (exp_safe): simplified the code a bit and
3707 * IPython/numutils.py (exp_safe): simplified the code a bit and
3703 removed the need for importing the kinds module altogether.
3708 removed the need for importing the kinds module altogether.
3704
3709
3705 2004-01-06 Fernando Perez <fperez@colorado.edu>
3710 2004-01-06 Fernando Perez <fperez@colorado.edu>
3706
3711
3707 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3712 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3708 a magic function instead, after some community feedback. No
3713 a magic function instead, after some community feedback. No
3709 special syntax will exist for it, but its name is deliberately
3714 special syntax will exist for it, but its name is deliberately
3710 very short.
3715 very short.
3711
3716
3712 2003-12-20 Fernando Perez <fperez@colorado.edu>
3717 2003-12-20 Fernando Perez <fperez@colorado.edu>
3713
3718
3714 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3719 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3715 new functionality, to automagically assign the result of a shell
3720 new functionality, to automagically assign the result of a shell
3716 command to a variable. I'll solicit some community feedback on
3721 command to a variable. I'll solicit some community feedback on
3717 this before making it permanent.
3722 this before making it permanent.
3718
3723
3719 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3724 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3720 requested about callables for which inspect couldn't obtain a
3725 requested about callables for which inspect couldn't obtain a
3721 proper argspec. Thanks to a crash report sent by Etienne
3726 proper argspec. Thanks to a crash report sent by Etienne
3722 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3727 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3723
3728
3724 2003-12-09 Fernando Perez <fperez@colorado.edu>
3729 2003-12-09 Fernando Perez <fperez@colorado.edu>
3725
3730
3726 * IPython/genutils.py (page): patch for the pager to work across
3731 * IPython/genutils.py (page): patch for the pager to work across
3727 various versions of Windows. By Gary Bishop.
3732 various versions of Windows. By Gary Bishop.
3728
3733
3729 2003-12-04 Fernando Perez <fperez@colorado.edu>
3734 2003-12-04 Fernando Perez <fperez@colorado.edu>
3730
3735
3731 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3736 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3732 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3737 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3733 While I tested this and it looks ok, there may still be corner
3738 While I tested this and it looks ok, there may still be corner
3734 cases I've missed.
3739 cases I've missed.
3735
3740
3736 2003-12-01 Fernando Perez <fperez@colorado.edu>
3741 2003-12-01 Fernando Perez <fperez@colorado.edu>
3737
3742
3738 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3743 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3739 where a line like 'p,q=1,2' would fail because the automagic
3744 where a line like 'p,q=1,2' would fail because the automagic
3740 system would be triggered for @p.
3745 system would be triggered for @p.
3741
3746
3742 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3747 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3743 cleanups, code unmodified.
3748 cleanups, code unmodified.
3744
3749
3745 * IPython/genutils.py (Term): added a class for IPython to handle
3750 * IPython/genutils.py (Term): added a class for IPython to handle
3746 output. In most cases it will just be a proxy for stdout/err, but
3751 output. In most cases it will just be a proxy for stdout/err, but
3747 having this allows modifications to be made for some platforms,
3752 having this allows modifications to be made for some platforms,
3748 such as handling color escapes under Windows. All of this code
3753 such as handling color escapes under Windows. All of this code
3749 was contributed by Gary Bishop, with minor modifications by me.
3754 was contributed by Gary Bishop, with minor modifications by me.
3750 The actual changes affect many files.
3755 The actual changes affect many files.
3751
3756
3752 2003-11-30 Fernando Perez <fperez@colorado.edu>
3757 2003-11-30 Fernando Perez <fperez@colorado.edu>
3753
3758
3754 * IPython/iplib.py (file_matches): new completion code, courtesy
3759 * IPython/iplib.py (file_matches): new completion code, courtesy
3755 of Jeff Collins. This enables filename completion again under
3760 of Jeff Collins. This enables filename completion again under
3756 python 2.3, which disabled it at the C level.
3761 python 2.3, which disabled it at the C level.
3757
3762
3758 2003-11-11 Fernando Perez <fperez@colorado.edu>
3763 2003-11-11 Fernando Perez <fperez@colorado.edu>
3759
3764
3760 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3765 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3761 for Numeric.array(map(...)), but often convenient.
3766 for Numeric.array(map(...)), but often convenient.
3762
3767
3763 2003-11-05 Fernando Perez <fperez@colorado.edu>
3768 2003-11-05 Fernando Perez <fperez@colorado.edu>
3764
3769
3765 * IPython/numutils.py (frange): Changed a call from int() to
3770 * IPython/numutils.py (frange): Changed a call from int() to
3766 int(round()) to prevent a problem reported with arange() in the
3771 int(round()) to prevent a problem reported with arange() in the
3767 numpy list.
3772 numpy list.
3768
3773
3769 2003-10-06 Fernando Perez <fperez@colorado.edu>
3774 2003-10-06 Fernando Perez <fperez@colorado.edu>
3770
3775
3771 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3776 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3772 prevent crashes if sys lacks an argv attribute (it happens with
3777 prevent crashes if sys lacks an argv attribute (it happens with
3773 embedded interpreters which build a bare-bones sys module).
3778 embedded interpreters which build a bare-bones sys module).
3774 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3779 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3775
3780
3776 2003-09-24 Fernando Perez <fperez@colorado.edu>
3781 2003-09-24 Fernando Perez <fperez@colorado.edu>
3777
3782
3778 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3783 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3779 to protect against poorly written user objects where __getattr__
3784 to protect against poorly written user objects where __getattr__
3780 raises exceptions other than AttributeError. Thanks to a bug
3785 raises exceptions other than AttributeError. Thanks to a bug
3781 report by Oliver Sander <osander-AT-gmx.de>.
3786 report by Oliver Sander <osander-AT-gmx.de>.
3782
3787
3783 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3788 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3784 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3789 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3785
3790
3786 2003-09-09 Fernando Perez <fperez@colorado.edu>
3791 2003-09-09 Fernando Perez <fperez@colorado.edu>
3787
3792
3788 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3793 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3789 unpacking a list whith a callable as first element would
3794 unpacking a list whith a callable as first element would
3790 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3795 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3791 Collins.
3796 Collins.
3792
3797
3793 2003-08-25 *** Released version 0.5.0
3798 2003-08-25 *** Released version 0.5.0
3794
3799
3795 2003-08-22 Fernando Perez <fperez@colorado.edu>
3800 2003-08-22 Fernando Perez <fperez@colorado.edu>
3796
3801
3797 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3802 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3798 improperly defined user exceptions. Thanks to feedback from Mark
3803 improperly defined user exceptions. Thanks to feedback from Mark
3799 Russell <mrussell-AT-verio.net>.
3804 Russell <mrussell-AT-verio.net>.
3800
3805
3801 2003-08-20 Fernando Perez <fperez@colorado.edu>
3806 2003-08-20 Fernando Perez <fperez@colorado.edu>
3802
3807
3803 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3808 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3804 printing so that it would print multi-line string forms starting
3809 printing so that it would print multi-line string forms starting
3805 with a new line. This way the formatting is better respected for
3810 with a new line. This way the formatting is better respected for
3806 objects which work hard to make nice string forms.
3811 objects which work hard to make nice string forms.
3807
3812
3808 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3813 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3809 autocall would overtake data access for objects with both
3814 autocall would overtake data access for objects with both
3810 __getitem__ and __call__.
3815 __getitem__ and __call__.
3811
3816
3812 2003-08-19 *** Released version 0.5.0-rc1
3817 2003-08-19 *** Released version 0.5.0-rc1
3813
3818
3814 2003-08-19 Fernando Perez <fperez@colorado.edu>
3819 2003-08-19 Fernando Perez <fperez@colorado.edu>
3815
3820
3816 * IPython/deep_reload.py (load_tail): single tiny change here
3821 * IPython/deep_reload.py (load_tail): single tiny change here
3817 seems to fix the long-standing bug of dreload() failing to work
3822 seems to fix the long-standing bug of dreload() failing to work
3818 for dotted names. But this module is pretty tricky, so I may have
3823 for dotted names. But this module is pretty tricky, so I may have
3819 missed some subtlety. Needs more testing!.
3824 missed some subtlety. Needs more testing!.
3820
3825
3821 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3826 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3822 exceptions which have badly implemented __str__ methods.
3827 exceptions which have badly implemented __str__ methods.
3823 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3828 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3824 which I've been getting reports about from Python 2.3 users. I
3829 which I've been getting reports about from Python 2.3 users. I
3825 wish I had a simple test case to reproduce the problem, so I could
3830 wish I had a simple test case to reproduce the problem, so I could
3826 either write a cleaner workaround or file a bug report if
3831 either write a cleaner workaround or file a bug report if
3827 necessary.
3832 necessary.
3828
3833
3829 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3834 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3830 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3835 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3831 a bug report by Tjabo Kloppenburg.
3836 a bug report by Tjabo Kloppenburg.
3832
3837
3833 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3838 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3834 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3839 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3835 seems rather unstable. Thanks to a bug report by Tjabo
3840 seems rather unstable. Thanks to a bug report by Tjabo
3836 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3841 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3837
3842
3838 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3843 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3839 this out soon because of the critical fixes in the inner loop for
3844 this out soon because of the critical fixes in the inner loop for
3840 generators.
3845 generators.
3841
3846
3842 * IPython/Magic.py (Magic.getargspec): removed. This (and
3847 * IPython/Magic.py (Magic.getargspec): removed. This (and
3843 _get_def) have been obsoleted by OInspect for a long time, I
3848 _get_def) have been obsoleted by OInspect for a long time, I
3844 hadn't noticed that they were dead code.
3849 hadn't noticed that they were dead code.
3845 (Magic._ofind): restored _ofind functionality for a few literals
3850 (Magic._ofind): restored _ofind functionality for a few literals
3846 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3851 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3847 for things like "hello".capitalize?, since that would require a
3852 for things like "hello".capitalize?, since that would require a
3848 potentially dangerous eval() again.
3853 potentially dangerous eval() again.
3849
3854
3850 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3855 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3851 logic a bit more to clean up the escapes handling and minimize the
3856 logic a bit more to clean up the escapes handling and minimize the
3852 use of _ofind to only necessary cases. The interactive 'feel' of
3857 use of _ofind to only necessary cases. The interactive 'feel' of
3853 IPython should have improved quite a bit with the changes in
3858 IPython should have improved quite a bit with the changes in
3854 _prefilter and _ofind (besides being far safer than before).
3859 _prefilter and _ofind (besides being far safer than before).
3855
3860
3856 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3861 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3857 obscure, never reported). Edit would fail to find the object to
3862 obscure, never reported). Edit would fail to find the object to
3858 edit under some circumstances.
3863 edit under some circumstances.
3859 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3864 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3860 which were causing double-calling of generators. Those eval calls
3865 which were causing double-calling of generators. Those eval calls
3861 were _very_ dangerous, since code with side effects could be
3866 were _very_ dangerous, since code with side effects could be
3862 triggered. As they say, 'eval is evil'... These were the
3867 triggered. As they say, 'eval is evil'... These were the
3863 nastiest evals in IPython. Besides, _ofind is now far simpler,
3868 nastiest evals in IPython. Besides, _ofind is now far simpler,
3864 and it should also be quite a bit faster. Its use of inspect is
3869 and it should also be quite a bit faster. Its use of inspect is
3865 also safer, so perhaps some of the inspect-related crashes I've
3870 also safer, so perhaps some of the inspect-related crashes I've
3866 seen lately with Python 2.3 might be taken care of. That will
3871 seen lately with Python 2.3 might be taken care of. That will
3867 need more testing.
3872 need more testing.
3868
3873
3869 2003-08-17 Fernando Perez <fperez@colorado.edu>
3874 2003-08-17 Fernando Perez <fperez@colorado.edu>
3870
3875
3871 * IPython/iplib.py (InteractiveShell._prefilter): significant
3876 * IPython/iplib.py (InteractiveShell._prefilter): significant
3872 simplifications to the logic for handling user escapes. Faster
3877 simplifications to the logic for handling user escapes. Faster
3873 and simpler code.
3878 and simpler code.
3874
3879
3875 2003-08-14 Fernando Perez <fperez@colorado.edu>
3880 2003-08-14 Fernando Perez <fperez@colorado.edu>
3876
3881
3877 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3882 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3878 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3883 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3879 but it should be quite a bit faster. And the recursive version
3884 but it should be quite a bit faster. And the recursive version
3880 generated O(log N) intermediate storage for all rank>1 arrays,
3885 generated O(log N) intermediate storage for all rank>1 arrays,
3881 even if they were contiguous.
3886 even if they were contiguous.
3882 (l1norm): Added this function.
3887 (l1norm): Added this function.
3883 (norm): Added this function for arbitrary norms (including
3888 (norm): Added this function for arbitrary norms (including
3884 l-infinity). l1 and l2 are still special cases for convenience
3889 l-infinity). l1 and l2 are still special cases for convenience
3885 and speed.
3890 and speed.
3886
3891
3887 2003-08-03 Fernando Perez <fperez@colorado.edu>
3892 2003-08-03 Fernando Perez <fperez@colorado.edu>
3888
3893
3889 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3894 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3890 exceptions, which now raise PendingDeprecationWarnings in Python
3895 exceptions, which now raise PendingDeprecationWarnings in Python
3891 2.3. There were some in Magic and some in Gnuplot2.
3896 2.3. There were some in Magic and some in Gnuplot2.
3892
3897
3893 2003-06-30 Fernando Perez <fperez@colorado.edu>
3898 2003-06-30 Fernando Perez <fperez@colorado.edu>
3894
3899
3895 * IPython/genutils.py (page): modified to call curses only for
3900 * IPython/genutils.py (page): modified to call curses only for
3896 terminals where TERM=='xterm'. After problems under many other
3901 terminals where TERM=='xterm'. After problems under many other
3897 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3902 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3898
3903
3899 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3904 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3900 would be triggered when readline was absent. This was just an old
3905 would be triggered when readline was absent. This was just an old
3901 debugging statement I'd forgotten to take out.
3906 debugging statement I'd forgotten to take out.
3902
3907
3903 2003-06-20 Fernando Perez <fperez@colorado.edu>
3908 2003-06-20 Fernando Perez <fperez@colorado.edu>
3904
3909
3905 * IPython/genutils.py (clock): modified to return only user time
3910 * IPython/genutils.py (clock): modified to return only user time
3906 (not counting system time), after a discussion on scipy. While
3911 (not counting system time), after a discussion on scipy. While
3907 system time may be a useful quantity occasionally, it may much
3912 system time may be a useful quantity occasionally, it may much
3908 more easily be skewed by occasional swapping or other similar
3913 more easily be skewed by occasional swapping or other similar
3909 activity.
3914 activity.
3910
3915
3911 2003-06-05 Fernando Perez <fperez@colorado.edu>
3916 2003-06-05 Fernando Perez <fperez@colorado.edu>
3912
3917
3913 * IPython/numutils.py (identity): new function, for building
3918 * IPython/numutils.py (identity): new function, for building
3914 arbitrary rank Kronecker deltas (mostly backwards compatible with
3919 arbitrary rank Kronecker deltas (mostly backwards compatible with
3915 Numeric.identity)
3920 Numeric.identity)
3916
3921
3917 2003-06-03 Fernando Perez <fperez@colorado.edu>
3922 2003-06-03 Fernando Perez <fperez@colorado.edu>
3918
3923
3919 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3924 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3920 arguments passed to magics with spaces, to allow trailing '\' to
3925 arguments passed to magics with spaces, to allow trailing '\' to
3921 work normally (mainly for Windows users).
3926 work normally (mainly for Windows users).
3922
3927
3923 2003-05-29 Fernando Perez <fperez@colorado.edu>
3928 2003-05-29 Fernando Perez <fperez@colorado.edu>
3924
3929
3925 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3930 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3926 instead of pydoc.help. This fixes a bizarre behavior where
3931 instead of pydoc.help. This fixes a bizarre behavior where
3927 printing '%s' % locals() would trigger the help system. Now
3932 printing '%s' % locals() would trigger the help system. Now
3928 ipython behaves like normal python does.
3933 ipython behaves like normal python does.
3929
3934
3930 Note that if one does 'from pydoc import help', the bizarre
3935 Note that if one does 'from pydoc import help', the bizarre
3931 behavior returns, but this will also happen in normal python, so
3936 behavior returns, but this will also happen in normal python, so
3932 it's not an ipython bug anymore (it has to do with how pydoc.help
3937 it's not an ipython bug anymore (it has to do with how pydoc.help
3933 is implemented).
3938 is implemented).
3934
3939
3935 2003-05-22 Fernando Perez <fperez@colorado.edu>
3940 2003-05-22 Fernando Perez <fperez@colorado.edu>
3936
3941
3937 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3942 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3938 return [] instead of None when nothing matches, also match to end
3943 return [] instead of None when nothing matches, also match to end
3939 of line. Patch by Gary Bishop.
3944 of line. Patch by Gary Bishop.
3940
3945
3941 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3946 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3942 protection as before, for files passed on the command line. This
3947 protection as before, for files passed on the command line. This
3943 prevents the CrashHandler from kicking in if user files call into
3948 prevents the CrashHandler from kicking in if user files call into
3944 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3949 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3945 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3950 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3946
3951
3947 2003-05-20 *** Released version 0.4.0
3952 2003-05-20 *** Released version 0.4.0
3948
3953
3949 2003-05-20 Fernando Perez <fperez@colorado.edu>
3954 2003-05-20 Fernando Perez <fperez@colorado.edu>
3950
3955
3951 * setup.py: added support for manpages. It's a bit hackish b/c of
3956 * setup.py: added support for manpages. It's a bit hackish b/c of
3952 a bug in the way the bdist_rpm distutils target handles gzipped
3957 a bug in the way the bdist_rpm distutils target handles gzipped
3953 manpages, but it works. After a patch by Jack.
3958 manpages, but it works. After a patch by Jack.
3954
3959
3955 2003-05-19 Fernando Perez <fperez@colorado.edu>
3960 2003-05-19 Fernando Perez <fperez@colorado.edu>
3956
3961
3957 * IPython/numutils.py: added a mockup of the kinds module, since
3962 * IPython/numutils.py: added a mockup of the kinds module, since
3958 it was recently removed from Numeric. This way, numutils will
3963 it was recently removed from Numeric. This way, numutils will
3959 work for all users even if they are missing kinds.
3964 work for all users even if they are missing kinds.
3960
3965
3961 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3966 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3962 failure, which can occur with SWIG-wrapped extensions. After a
3967 failure, which can occur with SWIG-wrapped extensions. After a
3963 crash report from Prabhu.
3968 crash report from Prabhu.
3964
3969
3965 2003-05-16 Fernando Perez <fperez@colorado.edu>
3970 2003-05-16 Fernando Perez <fperez@colorado.edu>
3966
3971
3967 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3972 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3968 protect ipython from user code which may call directly
3973 protect ipython from user code which may call directly
3969 sys.excepthook (this looks like an ipython crash to the user, even
3974 sys.excepthook (this looks like an ipython crash to the user, even
3970 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3975 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3971 This is especially important to help users of WxWindows, but may
3976 This is especially important to help users of WxWindows, but may
3972 also be useful in other cases.
3977 also be useful in other cases.
3973
3978
3974 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3979 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3975 an optional tb_offset to be specified, and to preserve exception
3980 an optional tb_offset to be specified, and to preserve exception
3976 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3981 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3977
3982
3978 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3983 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3979
3984
3980 2003-05-15 Fernando Perez <fperez@colorado.edu>
3985 2003-05-15 Fernando Perez <fperez@colorado.edu>
3981
3986
3982 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3987 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3983 installing for a new user under Windows.
3988 installing for a new user under Windows.
3984
3989
3985 2003-05-12 Fernando Perez <fperez@colorado.edu>
3990 2003-05-12 Fernando Perez <fperez@colorado.edu>
3986
3991
3987 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3992 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3988 handler for Emacs comint-based lines. Currently it doesn't do
3993 handler for Emacs comint-based lines. Currently it doesn't do
3989 much (but importantly, it doesn't update the history cache). In
3994 much (but importantly, it doesn't update the history cache). In
3990 the future it may be expanded if Alex needs more functionality
3995 the future it may be expanded if Alex needs more functionality
3991 there.
3996 there.
3992
3997
3993 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3998 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3994 info to crash reports.
3999 info to crash reports.
3995
4000
3996 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
4001 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3997 just like Python's -c. Also fixed crash with invalid -color
4002 just like Python's -c. Also fixed crash with invalid -color
3998 option value at startup. Thanks to Will French
4003 option value at startup. Thanks to Will French
3999 <wfrench-AT-bestweb.net> for the bug report.
4004 <wfrench-AT-bestweb.net> for the bug report.
4000
4005
4001 2003-05-09 Fernando Perez <fperez@colorado.edu>
4006 2003-05-09 Fernando Perez <fperez@colorado.edu>
4002
4007
4003 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
4008 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
4004 to EvalDict (it's a mapping, after all) and simplified its code
4009 to EvalDict (it's a mapping, after all) and simplified its code
4005 quite a bit, after a nice discussion on c.l.py where Gustavo
4010 quite a bit, after a nice discussion on c.l.py where Gustavo
4006 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
4011 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
4007
4012
4008 2003-04-30 Fernando Perez <fperez@colorado.edu>
4013 2003-04-30 Fernando Perez <fperez@colorado.edu>
4009
4014
4010 * IPython/genutils.py (timings_out): modified it to reduce its
4015 * IPython/genutils.py (timings_out): modified it to reduce its
4011 overhead in the common reps==1 case.
4016 overhead in the common reps==1 case.
4012
4017
4013 2003-04-29 Fernando Perez <fperez@colorado.edu>
4018 2003-04-29 Fernando Perez <fperez@colorado.edu>
4014
4019
4015 * IPython/genutils.py (timings_out): Modified to use the resource
4020 * IPython/genutils.py (timings_out): Modified to use the resource
4016 module, which avoids the wraparound problems of time.clock().
4021 module, which avoids the wraparound problems of time.clock().
4017
4022
4018 2003-04-17 *** Released version 0.2.15pre4
4023 2003-04-17 *** Released version 0.2.15pre4
4019
4024
4020 2003-04-17 Fernando Perez <fperez@colorado.edu>
4025 2003-04-17 Fernando Perez <fperez@colorado.edu>
4021
4026
4022 * setup.py (scriptfiles): Split windows-specific stuff over to a
4027 * setup.py (scriptfiles): Split windows-specific stuff over to a
4023 separate file, in an attempt to have a Windows GUI installer.
4028 separate file, in an attempt to have a Windows GUI installer.
4024 That didn't work, but part of the groundwork is done.
4029 That didn't work, but part of the groundwork is done.
4025
4030
4026 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
4031 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
4027 indent/unindent with 4 spaces. Particularly useful in combination
4032 indent/unindent with 4 spaces. Particularly useful in combination
4028 with the new auto-indent option.
4033 with the new auto-indent option.
4029
4034
4030 2003-04-16 Fernando Perez <fperez@colorado.edu>
4035 2003-04-16 Fernando Perez <fperez@colorado.edu>
4031
4036
4032 * IPython/Magic.py: various replacements of self.rc for
4037 * IPython/Magic.py: various replacements of self.rc for
4033 self.shell.rc. A lot more remains to be done to fully disentangle
4038 self.shell.rc. A lot more remains to be done to fully disentangle
4034 this class from the main Shell class.
4039 this class from the main Shell class.
4035
4040
4036 * IPython/GnuplotRuntime.py: added checks for mouse support so
4041 * IPython/GnuplotRuntime.py: added checks for mouse support so
4037 that we don't try to enable it if the current gnuplot doesn't
4042 that we don't try to enable it if the current gnuplot doesn't
4038 really support it. Also added checks so that we don't try to
4043 really support it. Also added checks so that we don't try to
4039 enable persist under Windows (where Gnuplot doesn't recognize the
4044 enable persist under Windows (where Gnuplot doesn't recognize the
4040 option).
4045 option).
4041
4046
4042 * IPython/iplib.py (InteractiveShell.interact): Added optional
4047 * IPython/iplib.py (InteractiveShell.interact): Added optional
4043 auto-indenting code, after a patch by King C. Shu
4048 auto-indenting code, after a patch by King C. Shu
4044 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
4049 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
4045 get along well with pasting indented code. If I ever figure out
4050 get along well with pasting indented code. If I ever figure out
4046 how to make that part go well, it will become on by default.
4051 how to make that part go well, it will become on by default.
4047
4052
4048 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
4053 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
4049 crash ipython if there was an unmatched '%' in the user's prompt
4054 crash ipython if there was an unmatched '%' in the user's prompt
4050 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4055 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4051
4056
4052 * IPython/iplib.py (InteractiveShell.interact): removed the
4057 * IPython/iplib.py (InteractiveShell.interact): removed the
4053 ability to ask the user whether he wants to crash or not at the
4058 ability to ask the user whether he wants to crash or not at the
4054 'last line' exception handler. Calling functions at that point
4059 'last line' exception handler. Calling functions at that point
4055 changes the stack, and the error reports would have incorrect
4060 changes the stack, and the error reports would have incorrect
4056 tracebacks.
4061 tracebacks.
4057
4062
4058 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
4063 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
4059 pass through a peger a pretty-printed form of any object. After a
4064 pass through a peger a pretty-printed form of any object. After a
4060 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
4065 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
4061
4066
4062 2003-04-14 Fernando Perez <fperez@colorado.edu>
4067 2003-04-14 Fernando Perez <fperez@colorado.edu>
4063
4068
4064 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
4069 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
4065 all files in ~ would be modified at first install (instead of
4070 all files in ~ would be modified at first install (instead of
4066 ~/.ipython). This could be potentially disastrous, as the
4071 ~/.ipython). This could be potentially disastrous, as the
4067 modification (make line-endings native) could damage binary files.
4072 modification (make line-endings native) could damage binary files.
4068
4073
4069 2003-04-10 Fernando Perez <fperez@colorado.edu>
4074 2003-04-10 Fernando Perez <fperez@colorado.edu>
4070
4075
4071 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
4076 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
4072 handle only lines which are invalid python. This now means that
4077 handle only lines which are invalid python. This now means that
4073 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
4078 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
4074 for the bug report.
4079 for the bug report.
4075
4080
4076 2003-04-01 Fernando Perez <fperez@colorado.edu>
4081 2003-04-01 Fernando Perez <fperez@colorado.edu>
4077
4082
4078 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
4083 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
4079 where failing to set sys.last_traceback would crash pdb.pm().
4084 where failing to set sys.last_traceback would crash pdb.pm().
4080 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
4085 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
4081 report.
4086 report.
4082
4087
4083 2003-03-25 Fernando Perez <fperez@colorado.edu>
4088 2003-03-25 Fernando Perez <fperez@colorado.edu>
4084
4089
4085 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
4090 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
4086 before printing it (it had a lot of spurious blank lines at the
4091 before printing it (it had a lot of spurious blank lines at the
4087 end).
4092 end).
4088
4093
4089 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
4094 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
4090 output would be sent 21 times! Obviously people don't use this
4095 output would be sent 21 times! Obviously people don't use this
4091 too often, or I would have heard about it.
4096 too often, or I would have heard about it.
4092
4097
4093 2003-03-24 Fernando Perez <fperez@colorado.edu>
4098 2003-03-24 Fernando Perez <fperez@colorado.edu>
4094
4099
4095 * setup.py (scriptfiles): renamed the data_files parameter from
4100 * setup.py (scriptfiles): renamed the data_files parameter from
4096 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
4101 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
4097 for the patch.
4102 for the patch.
4098
4103
4099 2003-03-20 Fernando Perez <fperez@colorado.edu>
4104 2003-03-20 Fernando Perez <fperez@colorado.edu>
4100
4105
4101 * IPython/genutils.py (error): added error() and fatal()
4106 * IPython/genutils.py (error): added error() and fatal()
4102 functions.
4107 functions.
4103
4108
4104 2003-03-18 *** Released version 0.2.15pre3
4109 2003-03-18 *** Released version 0.2.15pre3
4105
4110
4106 2003-03-18 Fernando Perez <fperez@colorado.edu>
4111 2003-03-18 Fernando Perez <fperez@colorado.edu>
4107
4112
4108 * setupext/install_data_ext.py
4113 * setupext/install_data_ext.py
4109 (install_data_ext.initialize_options): Class contributed by Jack
4114 (install_data_ext.initialize_options): Class contributed by Jack
4110 Moffit for fixing the old distutils hack. He is sending this to
4115 Moffit for fixing the old distutils hack. He is sending this to
4111 the distutils folks so in the future we may not need it as a
4116 the distutils folks so in the future we may not need it as a
4112 private fix.
4117 private fix.
4113
4118
4114 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
4119 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
4115 changes for Debian packaging. See his patch for full details.
4120 changes for Debian packaging. See his patch for full details.
4116 The old distutils hack of making the ipythonrc* files carry a
4121 The old distutils hack of making the ipythonrc* files carry a
4117 bogus .py extension is gone, at last. Examples were moved to a
4122 bogus .py extension is gone, at last. Examples were moved to a
4118 separate subdir under doc/, and the separate executable scripts
4123 separate subdir under doc/, and the separate executable scripts
4119 now live in their own directory. Overall a great cleanup. The
4124 now live in their own directory. Overall a great cleanup. The
4120 manual was updated to use the new files, and setup.py has been
4125 manual was updated to use the new files, and setup.py has been
4121 fixed for this setup.
4126 fixed for this setup.
4122
4127
4123 * IPython/PyColorize.py (Parser.usage): made non-executable and
4128 * IPython/PyColorize.py (Parser.usage): made non-executable and
4124 created a pycolor wrapper around it to be included as a script.
4129 created a pycolor wrapper around it to be included as a script.
4125
4130
4126 2003-03-12 *** Released version 0.2.15pre2
4131 2003-03-12 *** Released version 0.2.15pre2
4127
4132
4128 2003-03-12 Fernando Perez <fperez@colorado.edu>
4133 2003-03-12 Fernando Perez <fperez@colorado.edu>
4129
4134
4130 * IPython/ColorANSI.py (make_color_table): Finally fixed the
4135 * IPython/ColorANSI.py (make_color_table): Finally fixed the
4131 long-standing problem with garbage characters in some terminals.
4136 long-standing problem with garbage characters in some terminals.
4132 The issue was really that the \001 and \002 escapes must _only_ be
4137 The issue was really that the \001 and \002 escapes must _only_ be
4133 passed to input prompts (which call readline), but _never_ to
4138 passed to input prompts (which call readline), but _never_ to
4134 normal text to be printed on screen. I changed ColorANSI to have
4139 normal text to be printed on screen. I changed ColorANSI to have
4135 two classes: TermColors and InputTermColors, each with the
4140 two classes: TermColors and InputTermColors, each with the
4136 appropriate escapes for input prompts or normal text. The code in
4141 appropriate escapes for input prompts or normal text. The code in
4137 Prompts.py got slightly more complicated, but this very old and
4142 Prompts.py got slightly more complicated, but this very old and
4138 annoying bug is finally fixed.
4143 annoying bug is finally fixed.
4139
4144
4140 All the credit for nailing down the real origin of this problem
4145 All the credit for nailing down the real origin of this problem
4141 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
4146 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
4142 *Many* thanks to him for spending quite a bit of effort on this.
4147 *Many* thanks to him for spending quite a bit of effort on this.
4143
4148
4144 2003-03-05 *** Released version 0.2.15pre1
4149 2003-03-05 *** Released version 0.2.15pre1
4145
4150
4146 2003-03-03 Fernando Perez <fperez@colorado.edu>
4151 2003-03-03 Fernando Perez <fperez@colorado.edu>
4147
4152
4148 * IPython/FakeModule.py: Moved the former _FakeModule to a
4153 * IPython/FakeModule.py: Moved the former _FakeModule to a
4149 separate file, because it's also needed by Magic (to fix a similar
4154 separate file, because it's also needed by Magic (to fix a similar
4150 pickle-related issue in @run).
4155 pickle-related issue in @run).
4151
4156
4152 2003-03-02 Fernando Perez <fperez@colorado.edu>
4157 2003-03-02 Fernando Perez <fperez@colorado.edu>
4153
4158
4154 * IPython/Magic.py (Magic.magic_autocall): new magic to control
4159 * IPython/Magic.py (Magic.magic_autocall): new magic to control
4155 the autocall option at runtime.
4160 the autocall option at runtime.
4156 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
4161 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
4157 across Magic.py to start separating Magic from InteractiveShell.
4162 across Magic.py to start separating Magic from InteractiveShell.
4158 (Magic._ofind): Fixed to return proper namespace for dotted
4163 (Magic._ofind): Fixed to return proper namespace for dotted
4159 names. Before, a dotted name would always return 'not currently
4164 names. Before, a dotted name would always return 'not currently
4160 defined', because it would find the 'parent'. s.x would be found,
4165 defined', because it would find the 'parent'. s.x would be found,
4161 but since 'x' isn't defined by itself, it would get confused.
4166 but since 'x' isn't defined by itself, it would get confused.
4162 (Magic.magic_run): Fixed pickling problems reported by Ralf
4167 (Magic.magic_run): Fixed pickling problems reported by Ralf
4163 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
4168 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
4164 that I'd used when Mike Heeter reported similar issues at the
4169 that I'd used when Mike Heeter reported similar issues at the
4165 top-level, but now for @run. It boils down to injecting the
4170 top-level, but now for @run. It boils down to injecting the
4166 namespace where code is being executed with something that looks
4171 namespace where code is being executed with something that looks
4167 enough like a module to fool pickle.dump(). Since a pickle stores
4172 enough like a module to fool pickle.dump(). Since a pickle stores
4168 a named reference to the importing module, we need this for
4173 a named reference to the importing module, we need this for
4169 pickles to save something sensible.
4174 pickles to save something sensible.
4170
4175
4171 * IPython/ipmaker.py (make_IPython): added an autocall option.
4176 * IPython/ipmaker.py (make_IPython): added an autocall option.
4172
4177
4173 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
4178 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
4174 the auto-eval code. Now autocalling is an option, and the code is
4179 the auto-eval code. Now autocalling is an option, and the code is
4175 also vastly safer. There is no more eval() involved at all.
4180 also vastly safer. There is no more eval() involved at all.
4176
4181
4177 2003-03-01 Fernando Perez <fperez@colorado.edu>
4182 2003-03-01 Fernando Perez <fperez@colorado.edu>
4178
4183
4179 * IPython/Magic.py (Magic._ofind): Changed interface to return a
4184 * IPython/Magic.py (Magic._ofind): Changed interface to return a
4180 dict with named keys instead of a tuple.
4185 dict with named keys instead of a tuple.
4181
4186
4182 * IPython: Started using CVS for IPython as of 0.2.15pre1.
4187 * IPython: Started using CVS for IPython as of 0.2.15pre1.
4183
4188
4184 * setup.py (make_shortcut): Fixed message about directories
4189 * setup.py (make_shortcut): Fixed message about directories
4185 created during Windows installation (the directories were ok, just
4190 created during Windows installation (the directories were ok, just
4186 the printed message was misleading). Thanks to Chris Liechti
4191 the printed message was misleading). Thanks to Chris Liechti
4187 <cliechti-AT-gmx.net> for the heads up.
4192 <cliechti-AT-gmx.net> for the heads up.
4188
4193
4189 2003-02-21 Fernando Perez <fperez@colorado.edu>
4194 2003-02-21 Fernando Perez <fperez@colorado.edu>
4190
4195
4191 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
4196 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
4192 of ValueError exception when checking for auto-execution. This
4197 of ValueError exception when checking for auto-execution. This
4193 one is raised by things like Numeric arrays arr.flat when the
4198 one is raised by things like Numeric arrays arr.flat when the
4194 array is non-contiguous.
4199 array is non-contiguous.
4195
4200
4196 2003-01-31 Fernando Perez <fperez@colorado.edu>
4201 2003-01-31 Fernando Perez <fperez@colorado.edu>
4197
4202
4198 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
4203 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
4199 not return any value at all (even though the command would get
4204 not return any value at all (even though the command would get
4200 executed).
4205 executed).
4201 (xsys): Flush stdout right after printing the command to ensure
4206 (xsys): Flush stdout right after printing the command to ensure
4202 proper ordering of commands and command output in the total
4207 proper ordering of commands and command output in the total
4203 output.
4208 output.
4204 (SystemExec/xsys/bq): Switched the names of xsys/bq and
4209 (SystemExec/xsys/bq): Switched the names of xsys/bq and
4205 system/getoutput as defaults. The old ones are kept for
4210 system/getoutput as defaults. The old ones are kept for
4206 compatibility reasons, so no code which uses this library needs
4211 compatibility reasons, so no code which uses this library needs
4207 changing.
4212 changing.
4208
4213
4209 2003-01-27 *** Released version 0.2.14
4214 2003-01-27 *** Released version 0.2.14
4210
4215
4211 2003-01-25 Fernando Perez <fperez@colorado.edu>
4216 2003-01-25 Fernando Perez <fperez@colorado.edu>
4212
4217
4213 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
4218 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
4214 functions defined in previous edit sessions could not be re-edited
4219 functions defined in previous edit sessions could not be re-edited
4215 (because the temp files were immediately removed). Now temp files
4220 (because the temp files were immediately removed). Now temp files
4216 are removed only at IPython's exit.
4221 are removed only at IPython's exit.
4217 (Magic.magic_run): Improved @run to perform shell-like expansions
4222 (Magic.magic_run): Improved @run to perform shell-like expansions
4218 on its arguments (~users and $VARS). With this, @run becomes more
4223 on its arguments (~users and $VARS). With this, @run becomes more
4219 like a normal command-line.
4224 like a normal command-line.
4220
4225
4221 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
4226 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
4222 bugs related to embedding and cleaned up that code. A fairly
4227 bugs related to embedding and cleaned up that code. A fairly
4223 important one was the impossibility to access the global namespace
4228 important one was the impossibility to access the global namespace
4224 through the embedded IPython (only local variables were visible).
4229 through the embedded IPython (only local variables were visible).
4225
4230
4226 2003-01-14 Fernando Perez <fperez@colorado.edu>
4231 2003-01-14 Fernando Perez <fperez@colorado.edu>
4227
4232
4228 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
4233 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
4229 auto-calling to be a bit more conservative. Now it doesn't get
4234 auto-calling to be a bit more conservative. Now it doesn't get
4230 triggered if any of '!=()<>' are in the rest of the input line, to
4235 triggered if any of '!=()<>' are in the rest of the input line, to
4231 allow comparing callables. Thanks to Alex for the heads up.
4236 allow comparing callables. Thanks to Alex for the heads up.
4232
4237
4233 2003-01-07 Fernando Perez <fperez@colorado.edu>
4238 2003-01-07 Fernando Perez <fperez@colorado.edu>
4234
4239
4235 * IPython/genutils.py (page): fixed estimation of the number of
4240 * IPython/genutils.py (page): fixed estimation of the number of
4236 lines in a string to be paged to simply count newlines. This
4241 lines in a string to be paged to simply count newlines. This
4237 prevents over-guessing due to embedded escape sequences. A better
4242 prevents over-guessing due to embedded escape sequences. A better
4238 long-term solution would involve stripping out the control chars
4243 long-term solution would involve stripping out the control chars
4239 for the count, but it's potentially so expensive I just don't
4244 for the count, but it's potentially so expensive I just don't
4240 think it's worth doing.
4245 think it's worth doing.
4241
4246
4242 2002-12-19 *** Released version 0.2.14pre50
4247 2002-12-19 *** Released version 0.2.14pre50
4243
4248
4244 2002-12-19 Fernando Perez <fperez@colorado.edu>
4249 2002-12-19 Fernando Perez <fperez@colorado.edu>
4245
4250
4246 * tools/release (version): Changed release scripts to inform
4251 * tools/release (version): Changed release scripts to inform
4247 Andrea and build a NEWS file with a list of recent changes.
4252 Andrea and build a NEWS file with a list of recent changes.
4248
4253
4249 * IPython/ColorANSI.py (__all__): changed terminal detection
4254 * IPython/ColorANSI.py (__all__): changed terminal detection
4250 code. Seems to work better for xterms without breaking
4255 code. Seems to work better for xterms without breaking
4251 konsole. Will need more testing to determine if WinXP and Mac OSX
4256 konsole. Will need more testing to determine if WinXP and Mac OSX
4252 also work ok.
4257 also work ok.
4253
4258
4254 2002-12-18 *** Released version 0.2.14pre49
4259 2002-12-18 *** Released version 0.2.14pre49
4255
4260
4256 2002-12-18 Fernando Perez <fperez@colorado.edu>
4261 2002-12-18 Fernando Perez <fperez@colorado.edu>
4257
4262
4258 * Docs: added new info about Mac OSX, from Andrea.
4263 * Docs: added new info about Mac OSX, from Andrea.
4259
4264
4260 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
4265 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
4261 allow direct plotting of python strings whose format is the same
4266 allow direct plotting of python strings whose format is the same
4262 of gnuplot data files.
4267 of gnuplot data files.
4263
4268
4264 2002-12-16 Fernando Perez <fperez@colorado.edu>
4269 2002-12-16 Fernando Perez <fperez@colorado.edu>
4265
4270
4266 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
4271 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
4267 value of exit question to be acknowledged.
4272 value of exit question to be acknowledged.
4268
4273
4269 2002-12-03 Fernando Perez <fperez@colorado.edu>
4274 2002-12-03 Fernando Perez <fperez@colorado.edu>
4270
4275
4271 * IPython/ipmaker.py: removed generators, which had been added
4276 * IPython/ipmaker.py: removed generators, which had been added
4272 by mistake in an earlier debugging run. This was causing trouble
4277 by mistake in an earlier debugging run. This was causing trouble
4273 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
4278 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
4274 for pointing this out.
4279 for pointing this out.
4275
4280
4276 2002-11-17 Fernando Perez <fperez@colorado.edu>
4281 2002-11-17 Fernando Perez <fperez@colorado.edu>
4277
4282
4278 * Manual: updated the Gnuplot section.
4283 * Manual: updated the Gnuplot section.
4279
4284
4280 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
4285 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
4281 a much better split of what goes in Runtime and what goes in
4286 a much better split of what goes in Runtime and what goes in
4282 Interactive.
4287 Interactive.
4283
4288
4284 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
4289 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
4285 being imported from iplib.
4290 being imported from iplib.
4286
4291
4287 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
4292 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
4288 for command-passing. Now the global Gnuplot instance is called
4293 for command-passing. Now the global Gnuplot instance is called
4289 'gp' instead of 'g', which was really a far too fragile and
4294 'gp' instead of 'g', which was really a far too fragile and
4290 common name.
4295 common name.
4291
4296
4292 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
4297 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
4293 bounding boxes generated by Gnuplot for square plots.
4298 bounding boxes generated by Gnuplot for square plots.
4294
4299
4295 * IPython/genutils.py (popkey): new function added. I should
4300 * IPython/genutils.py (popkey): new function added. I should
4296 suggest this on c.l.py as a dict method, it seems useful.
4301 suggest this on c.l.py as a dict method, it seems useful.
4297
4302
4298 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
4303 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
4299 to transparently handle PostScript generation. MUCH better than
4304 to transparently handle PostScript generation. MUCH better than
4300 the previous plot_eps/replot_eps (which I removed now). The code
4305 the previous plot_eps/replot_eps (which I removed now). The code
4301 is also fairly clean and well documented now (including
4306 is also fairly clean and well documented now (including
4302 docstrings).
4307 docstrings).
4303
4308
4304 2002-11-13 Fernando Perez <fperez@colorado.edu>
4309 2002-11-13 Fernando Perez <fperez@colorado.edu>
4305
4310
4306 * IPython/Magic.py (Magic.magic_edit): fixed docstring
4311 * IPython/Magic.py (Magic.magic_edit): fixed docstring
4307 (inconsistent with options).
4312 (inconsistent with options).
4308
4313
4309 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
4314 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
4310 manually disabled, I don't know why. Fixed it.
4315 manually disabled, I don't know why. Fixed it.
4311 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
4316 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
4312 eps output.
4317 eps output.
4313
4318
4314 2002-11-12 Fernando Perez <fperez@colorado.edu>
4319 2002-11-12 Fernando Perez <fperez@colorado.edu>
4315
4320
4316 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
4321 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
4317 don't propagate up to caller. Fixes crash reported by François
4322 don't propagate up to caller. Fixes crash reported by François
4318 Pinard.
4323 Pinard.
4319
4324
4320 2002-11-09 Fernando Perez <fperez@colorado.edu>
4325 2002-11-09 Fernando Perez <fperez@colorado.edu>
4321
4326
4322 * IPython/ipmaker.py (make_IPython): fixed problem with writing
4327 * IPython/ipmaker.py (make_IPython): fixed problem with writing
4323 history file for new users.
4328 history file for new users.
4324 (make_IPython): fixed bug where initial install would leave the
4329 (make_IPython): fixed bug where initial install would leave the
4325 user running in the .ipython dir.
4330 user running in the .ipython dir.
4326 (make_IPython): fixed bug where config dir .ipython would be
4331 (make_IPython): fixed bug where config dir .ipython would be
4327 created regardless of the given -ipythondir option. Thanks to Cory
4332 created regardless of the given -ipythondir option. Thanks to Cory
4328 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
4333 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
4329
4334
4330 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
4335 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
4331 type confirmations. Will need to use it in all of IPython's code
4336 type confirmations. Will need to use it in all of IPython's code
4332 consistently.
4337 consistently.
4333
4338
4334 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
4339 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
4335 context to print 31 lines instead of the default 5. This will make
4340 context to print 31 lines instead of the default 5. This will make
4336 the crash reports extremely detailed in case the problem is in
4341 the crash reports extremely detailed in case the problem is in
4337 libraries I don't have access to.
4342 libraries I don't have access to.
4338
4343
4339 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
4344 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
4340 line of defense' code to still crash, but giving users fair
4345 line of defense' code to still crash, but giving users fair
4341 warning. I don't want internal errors to go unreported: if there's
4346 warning. I don't want internal errors to go unreported: if there's
4342 an internal problem, IPython should crash and generate a full
4347 an internal problem, IPython should crash and generate a full
4343 report.
4348 report.
4344
4349
4345 2002-11-08 Fernando Perez <fperez@colorado.edu>
4350 2002-11-08 Fernando Perez <fperez@colorado.edu>
4346
4351
4347 * IPython/iplib.py (InteractiveShell.interact): added code to trap
4352 * IPython/iplib.py (InteractiveShell.interact): added code to trap
4348 otherwise uncaught exceptions which can appear if people set
4353 otherwise uncaught exceptions which can appear if people set
4349 sys.stdout to something badly broken. Thanks to a crash report
4354 sys.stdout to something badly broken. Thanks to a crash report
4350 from henni-AT-mail.brainbot.com.
4355 from henni-AT-mail.brainbot.com.
4351
4356
4352 2002-11-04 Fernando Perez <fperez@colorado.edu>
4357 2002-11-04 Fernando Perez <fperez@colorado.edu>
4353
4358
4354 * IPython/iplib.py (InteractiveShell.interact): added
4359 * IPython/iplib.py (InteractiveShell.interact): added
4355 __IPYTHON__active to the builtins. It's a flag which goes on when
4360 __IPYTHON__active to the builtins. It's a flag which goes on when
4356 the interaction starts and goes off again when it stops. This
4361 the interaction starts and goes off again when it stops. This
4357 allows embedding code to detect being inside IPython. Before this
4362 allows embedding code to detect being inside IPython. Before this
4358 was done via __IPYTHON__, but that only shows that an IPython
4363 was done via __IPYTHON__, but that only shows that an IPython
4359 instance has been created.
4364 instance has been created.
4360
4365
4361 * IPython/Magic.py (Magic.magic_env): I realized that in a
4366 * IPython/Magic.py (Magic.magic_env): I realized that in a
4362 UserDict, instance.data holds the data as a normal dict. So I
4367 UserDict, instance.data holds the data as a normal dict. So I
4363 modified @env to return os.environ.data instead of rebuilding a
4368 modified @env to return os.environ.data instead of rebuilding a
4364 dict by hand.
4369 dict by hand.
4365
4370
4366 2002-11-02 Fernando Perez <fperez@colorado.edu>
4371 2002-11-02 Fernando Perez <fperez@colorado.edu>
4367
4372
4368 * IPython/genutils.py (warn): changed so that level 1 prints no
4373 * IPython/genutils.py (warn): changed so that level 1 prints no
4369 header. Level 2 is now the default (with 'WARNING' header, as
4374 header. Level 2 is now the default (with 'WARNING' header, as
4370 before). I think I tracked all places where changes were needed in
4375 before). I think I tracked all places where changes were needed in
4371 IPython, but outside code using the old level numbering may have
4376 IPython, but outside code using the old level numbering may have
4372 broken.
4377 broken.
4373
4378
4374 * IPython/iplib.py (InteractiveShell.runcode): added this to
4379 * IPython/iplib.py (InteractiveShell.runcode): added this to
4375 handle the tracebacks in SystemExit traps correctly. The previous
4380 handle the tracebacks in SystemExit traps correctly. The previous
4376 code (through interact) was printing more of the stack than
4381 code (through interact) was printing more of the stack than
4377 necessary, showing IPython internal code to the user.
4382 necessary, showing IPython internal code to the user.
4378
4383
4379 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
4384 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
4380 default. Now that the default at the confirmation prompt is yes,
4385 default. Now that the default at the confirmation prompt is yes,
4381 it's not so intrusive. François' argument that ipython sessions
4386 it's not so intrusive. François' argument that ipython sessions
4382 tend to be complex enough not to lose them from an accidental C-d,
4387 tend to be complex enough not to lose them from an accidental C-d,
4383 is a valid one.
4388 is a valid one.
4384
4389
4385 * IPython/iplib.py (InteractiveShell.interact): added a
4390 * IPython/iplib.py (InteractiveShell.interact): added a
4386 showtraceback() call to the SystemExit trap, and modified the exit
4391 showtraceback() call to the SystemExit trap, and modified the exit
4387 confirmation to have yes as the default.
4392 confirmation to have yes as the default.
4388
4393
4389 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
4394 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
4390 this file. It's been gone from the code for a long time, this was
4395 this file. It's been gone from the code for a long time, this was
4391 simply leftover junk.
4396 simply leftover junk.
4392
4397
4393 2002-11-01 Fernando Perez <fperez@colorado.edu>
4398 2002-11-01 Fernando Perez <fperez@colorado.edu>
4394
4399
4395 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
4400 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
4396 added. If set, IPython now traps EOF and asks for
4401 added. If set, IPython now traps EOF and asks for
4397 confirmation. After a request by François Pinard.
4402 confirmation. After a request by François Pinard.
4398
4403
4399 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
4404 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
4400 of @abort, and with a new (better) mechanism for handling the
4405 of @abort, and with a new (better) mechanism for handling the
4401 exceptions.
4406 exceptions.
4402
4407
4403 2002-10-27 Fernando Perez <fperez@colorado.edu>
4408 2002-10-27 Fernando Perez <fperez@colorado.edu>
4404
4409
4405 * IPython/usage.py (__doc__): updated the --help information and
4410 * IPython/usage.py (__doc__): updated the --help information and
4406 the ipythonrc file to indicate that -log generates
4411 the ipythonrc file to indicate that -log generates
4407 ./ipython.log. Also fixed the corresponding info in @logstart.
4412 ./ipython.log. Also fixed the corresponding info in @logstart.
4408 This and several other fixes in the manuals thanks to reports by
4413 This and several other fixes in the manuals thanks to reports by
4409 François Pinard <pinard-AT-iro.umontreal.ca>.
4414 François Pinard <pinard-AT-iro.umontreal.ca>.
4410
4415
4411 * IPython/Logger.py (Logger.switch_log): Fixed error message to
4416 * IPython/Logger.py (Logger.switch_log): Fixed error message to
4412 refer to @logstart (instead of @log, which doesn't exist).
4417 refer to @logstart (instead of @log, which doesn't exist).
4413
4418
4414 * IPython/iplib.py (InteractiveShell._prefilter): fixed
4419 * IPython/iplib.py (InteractiveShell._prefilter): fixed
4415 AttributeError crash. Thanks to Christopher Armstrong
4420 AttributeError crash. Thanks to Christopher Armstrong
4416 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
4421 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
4417 introduced recently (in 0.2.14pre37) with the fix to the eval
4422 introduced recently (in 0.2.14pre37) with the fix to the eval
4418 problem mentioned below.
4423 problem mentioned below.
4419
4424
4420 2002-10-17 Fernando Perez <fperez@colorado.edu>
4425 2002-10-17 Fernando Perez <fperez@colorado.edu>
4421
4426
4422 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
4427 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
4423 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
4428 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
4424
4429
4425 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
4430 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
4426 this function to fix a problem reported by Alex Schmolck. He saw
4431 this function to fix a problem reported by Alex Schmolck. He saw
4427 it with list comprehensions and generators, which were getting
4432 it with list comprehensions and generators, which were getting
4428 called twice. The real problem was an 'eval' call in testing for
4433 called twice. The real problem was an 'eval' call in testing for
4429 automagic which was evaluating the input line silently.
4434 automagic which was evaluating the input line silently.
4430
4435
4431 This is a potentially very nasty bug, if the input has side
4436 This is a potentially very nasty bug, if the input has side
4432 effects which must not be repeated. The code is much cleaner now,
4437 effects which must not be repeated. The code is much cleaner now,
4433 without any blanket 'except' left and with a regexp test for
4438 without any blanket 'except' left and with a regexp test for
4434 actual function names.
4439 actual function names.
4435
4440
4436 But an eval remains, which I'm not fully comfortable with. I just
4441 But an eval remains, which I'm not fully comfortable with. I just
4437 don't know how to find out if an expression could be a callable in
4442 don't know how to find out if an expression could be a callable in
4438 the user's namespace without doing an eval on the string. However
4443 the user's namespace without doing an eval on the string. However
4439 that string is now much more strictly checked so that no code
4444 that string is now much more strictly checked so that no code
4440 slips by, so the eval should only happen for things that can
4445 slips by, so the eval should only happen for things that can
4441 really be only function/method names.
4446 really be only function/method names.
4442
4447
4443 2002-10-15 Fernando Perez <fperez@colorado.edu>
4448 2002-10-15 Fernando Perez <fperez@colorado.edu>
4444
4449
4445 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
4450 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
4446 OSX information to main manual, removed README_Mac_OSX file from
4451 OSX information to main manual, removed README_Mac_OSX file from
4447 distribution. Also updated credits for recent additions.
4452 distribution. Also updated credits for recent additions.
4448
4453
4449 2002-10-10 Fernando Perez <fperez@colorado.edu>
4454 2002-10-10 Fernando Perez <fperez@colorado.edu>
4450
4455
4451 * README_Mac_OSX: Added a README for Mac OSX users for fixing
4456 * README_Mac_OSX: Added a README for Mac OSX users for fixing
4452 terminal-related issues. Many thanks to Andrea Riciputi
4457 terminal-related issues. Many thanks to Andrea Riciputi
4453 <andrea.riciputi-AT-libero.it> for writing it.
4458 <andrea.riciputi-AT-libero.it> for writing it.
4454
4459
4455 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
4460 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
4456 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4461 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4457
4462
4458 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
4463 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
4459 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
4464 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
4460 <syver-en-AT-online.no> who both submitted patches for this problem.
4465 <syver-en-AT-online.no> who both submitted patches for this problem.
4461
4466
4462 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
4467 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
4463 global embedding to make sure that things don't overwrite user
4468 global embedding to make sure that things don't overwrite user
4464 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
4469 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
4465
4470
4466 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
4471 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
4467 compatibility. Thanks to Hayden Callow
4472 compatibility. Thanks to Hayden Callow
4468 <h.callow-AT-elec.canterbury.ac.nz>
4473 <h.callow-AT-elec.canterbury.ac.nz>
4469
4474
4470 2002-10-04 Fernando Perez <fperez@colorado.edu>
4475 2002-10-04 Fernando Perez <fperez@colorado.edu>
4471
4476
4472 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
4477 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
4473 Gnuplot.File objects.
4478 Gnuplot.File objects.
4474
4479
4475 2002-07-23 Fernando Perez <fperez@colorado.edu>
4480 2002-07-23 Fernando Perez <fperez@colorado.edu>
4476
4481
4477 * IPython/genutils.py (timing): Added timings() and timing() for
4482 * IPython/genutils.py (timing): Added timings() and timing() for
4478 quick access to the most commonly needed data, the execution
4483 quick access to the most commonly needed data, the execution
4479 times. Old timing() renamed to timings_out().
4484 times. Old timing() renamed to timings_out().
4480
4485
4481 2002-07-18 Fernando Perez <fperez@colorado.edu>
4486 2002-07-18 Fernando Perez <fperez@colorado.edu>
4482
4487
4483 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
4488 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
4484 bug with nested instances disrupting the parent's tab completion.
4489 bug with nested instances disrupting the parent's tab completion.
4485
4490
4486 * IPython/iplib.py (all_completions): Added Alex Schmolck's
4491 * IPython/iplib.py (all_completions): Added Alex Schmolck's
4487 all_completions code to begin the emacs integration.
4492 all_completions code to begin the emacs integration.
4488
4493
4489 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
4494 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
4490 argument to allow titling individual arrays when plotting.
4495 argument to allow titling individual arrays when plotting.
4491
4496
4492 2002-07-15 Fernando Perez <fperez@colorado.edu>
4497 2002-07-15 Fernando Perez <fperez@colorado.edu>
4493
4498
4494 * setup.py (make_shortcut): changed to retrieve the value of
4499 * setup.py (make_shortcut): changed to retrieve the value of
4495 'Program Files' directory from the registry (this value changes in
4500 'Program Files' directory from the registry (this value changes in
4496 non-english versions of Windows). Thanks to Thomas Fanslau
4501 non-english versions of Windows). Thanks to Thomas Fanslau
4497 <tfanslau-AT-gmx.de> for the report.
4502 <tfanslau-AT-gmx.de> for the report.
4498
4503
4499 2002-07-10 Fernando Perez <fperez@colorado.edu>
4504 2002-07-10 Fernando Perez <fperez@colorado.edu>
4500
4505
4501 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
4506 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
4502 a bug in pdb, which crashes if a line with only whitespace is
4507 a bug in pdb, which crashes if a line with only whitespace is
4503 entered. Bug report submitted to sourceforge.
4508 entered. Bug report submitted to sourceforge.
4504
4509
4505 2002-07-09 Fernando Perez <fperez@colorado.edu>
4510 2002-07-09 Fernando Perez <fperez@colorado.edu>
4506
4511
4507 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
4512 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
4508 reporting exceptions (it's a bug in inspect.py, I just set a
4513 reporting exceptions (it's a bug in inspect.py, I just set a
4509 workaround).
4514 workaround).
4510
4515
4511 2002-07-08 Fernando Perez <fperez@colorado.edu>
4516 2002-07-08 Fernando Perez <fperez@colorado.edu>
4512
4517
4513 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
4518 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
4514 __IPYTHON__ in __builtins__ to show up in user_ns.
4519 __IPYTHON__ in __builtins__ to show up in user_ns.
4515
4520
4516 2002-07-03 Fernando Perez <fperez@colorado.edu>
4521 2002-07-03 Fernando Perez <fperez@colorado.edu>
4517
4522
4518 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
4523 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
4519 name from @gp_set_instance to @gp_set_default.
4524 name from @gp_set_instance to @gp_set_default.
4520
4525
4521 * IPython/ipmaker.py (make_IPython): default editor value set to
4526 * IPython/ipmaker.py (make_IPython): default editor value set to
4522 '0' (a string), to match the rc file. Otherwise will crash when
4527 '0' (a string), to match the rc file. Otherwise will crash when
4523 .strip() is called on it.
4528 .strip() is called on it.
4524
4529
4525
4530
4526 2002-06-28 Fernando Perez <fperez@colorado.edu>
4531 2002-06-28 Fernando Perez <fperez@colorado.edu>
4527
4532
4528 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
4533 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
4529 of files in current directory when a file is executed via
4534 of files in current directory when a file is executed via
4530 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
4535 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
4531
4536
4532 * setup.py (manfiles): fix for rpm builds, submitted by RA
4537 * setup.py (manfiles): fix for rpm builds, submitted by RA
4533 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
4538 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
4534
4539
4535 * IPython/ipmaker.py (make_IPython): fixed lookup of default
4540 * IPython/ipmaker.py (make_IPython): fixed lookup of default
4536 editor when set to '0'. Problem was, '0' evaluates to True (it's a
4541 editor when set to '0'. Problem was, '0' evaluates to True (it's a
4537 string!). A. Schmolck caught this one.
4542 string!). A. Schmolck caught this one.
4538
4543
4539 2002-06-27 Fernando Perez <fperez@colorado.edu>
4544 2002-06-27 Fernando Perez <fperez@colorado.edu>
4540
4545
4541 * IPython/ipmaker.py (make_IPython): fixed bug when running user
4546 * IPython/ipmaker.py (make_IPython): fixed bug when running user
4542 defined files at the cmd line. __name__ wasn't being set to
4547 defined files at the cmd line. __name__ wasn't being set to
4543 __main__.
4548 __main__.
4544
4549
4545 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
4550 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
4546 regular lists and tuples besides Numeric arrays.
4551 regular lists and tuples besides Numeric arrays.
4547
4552
4548 * IPython/Prompts.py (CachedOutput.__call__): Added output
4553 * IPython/Prompts.py (CachedOutput.__call__): Added output
4549 supression for input ending with ';'. Similar to Mathematica and
4554 supression for input ending with ';'. Similar to Mathematica and
4550 Matlab. The _* vars and Out[] list are still updated, just like
4555 Matlab. The _* vars and Out[] list are still updated, just like
4551 Mathematica behaves.
4556 Mathematica behaves.
4552
4557
4553 2002-06-25 Fernando Perez <fperez@colorado.edu>
4558 2002-06-25 Fernando Perez <fperez@colorado.edu>
4554
4559
4555 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
4560 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
4556 .ini extensions for profiels under Windows.
4561 .ini extensions for profiels under Windows.
4557
4562
4558 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
4563 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
4559 string form. Fix contributed by Alexander Schmolck
4564 string form. Fix contributed by Alexander Schmolck
4560 <a.schmolck-AT-gmx.net>
4565 <a.schmolck-AT-gmx.net>
4561
4566
4562 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
4567 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
4563 pre-configured Gnuplot instance.
4568 pre-configured Gnuplot instance.
4564
4569
4565 2002-06-21 Fernando Perez <fperez@colorado.edu>
4570 2002-06-21 Fernando Perez <fperez@colorado.edu>
4566
4571
4567 * IPython/numutils.py (exp_safe): new function, works around the
4572 * IPython/numutils.py (exp_safe): new function, works around the
4568 underflow problems in Numeric.
4573 underflow problems in Numeric.
4569 (log2): New fn. Safe log in base 2: returns exact integer answer
4574 (log2): New fn. Safe log in base 2: returns exact integer answer
4570 for exact integer powers of 2.
4575 for exact integer powers of 2.
4571
4576
4572 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
4577 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
4573 properly.
4578 properly.
4574
4579
4575 2002-06-20 Fernando Perez <fperez@colorado.edu>
4580 2002-06-20 Fernando Perez <fperez@colorado.edu>
4576
4581
4577 * IPython/genutils.py (timing): new function like
4582 * IPython/genutils.py (timing): new function like
4578 Mathematica's. Similar to time_test, but returns more info.
4583 Mathematica's. Similar to time_test, but returns more info.
4579
4584
4580 2002-06-18 Fernando Perez <fperez@colorado.edu>
4585 2002-06-18 Fernando Perez <fperez@colorado.edu>
4581
4586
4582 * IPython/Magic.py (Magic.magic_save): modified @save and @r
4587 * IPython/Magic.py (Magic.magic_save): modified @save and @r
4583 according to Mike Heeter's suggestions.
4588 according to Mike Heeter's suggestions.
4584
4589
4585 2002-06-16 Fernando Perez <fperez@colorado.edu>
4590 2002-06-16 Fernando Perez <fperez@colorado.edu>
4586
4591
4587 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
4592 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
4588 system. GnuplotMagic is gone as a user-directory option. New files
4593 system. GnuplotMagic is gone as a user-directory option. New files
4589 make it easier to use all the gnuplot stuff both from external
4594 make it easier to use all the gnuplot stuff both from external
4590 programs as well as from IPython. Had to rewrite part of
4595 programs as well as from IPython. Had to rewrite part of
4591 hardcopy() b/c of a strange bug: often the ps files simply don't
4596 hardcopy() b/c of a strange bug: often the ps files simply don't
4592 get created, and require a repeat of the command (often several
4597 get created, and require a repeat of the command (often several
4593 times).
4598 times).
4594
4599
4595 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
4600 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
4596 resolve output channel at call time, so that if sys.stderr has
4601 resolve output channel at call time, so that if sys.stderr has
4597 been redirected by user this gets honored.
4602 been redirected by user this gets honored.
4598
4603
4599 2002-06-13 Fernando Perez <fperez@colorado.edu>
4604 2002-06-13 Fernando Perez <fperez@colorado.edu>
4600
4605
4601 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
4606 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
4602 IPShell. Kept a copy with the old names to avoid breaking people's
4607 IPShell. Kept a copy with the old names to avoid breaking people's
4603 embedded code.
4608 embedded code.
4604
4609
4605 * IPython/ipython: simplified it to the bare minimum after
4610 * IPython/ipython: simplified it to the bare minimum after
4606 Holger's suggestions. Added info about how to use it in
4611 Holger's suggestions. Added info about how to use it in
4607 PYTHONSTARTUP.
4612 PYTHONSTARTUP.
4608
4613
4609 * IPython/Shell.py (IPythonShell): changed the options passing
4614 * IPython/Shell.py (IPythonShell): changed the options passing
4610 from a string with funky %s replacements to a straight list. Maybe
4615 from a string with funky %s replacements to a straight list. Maybe
4611 a bit more typing, but it follows sys.argv conventions, so there's
4616 a bit more typing, but it follows sys.argv conventions, so there's
4612 less special-casing to remember.
4617 less special-casing to remember.
4613
4618
4614 2002-06-12 Fernando Perez <fperez@colorado.edu>
4619 2002-06-12 Fernando Perez <fperez@colorado.edu>
4615
4620
4616 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
4621 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
4617 command. Thanks to a suggestion by Mike Heeter.
4622 command. Thanks to a suggestion by Mike Heeter.
4618 (Magic.magic_pfile): added behavior to look at filenames if given
4623 (Magic.magic_pfile): added behavior to look at filenames if given
4619 arg is not a defined object.
4624 arg is not a defined object.
4620 (Magic.magic_save): New @save function to save code snippets. Also
4625 (Magic.magic_save): New @save function to save code snippets. Also
4621 a Mike Heeter idea.
4626 a Mike Heeter idea.
4622
4627
4623 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
4628 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
4624 plot() and replot(). Much more convenient now, especially for
4629 plot() and replot(). Much more convenient now, especially for
4625 interactive use.
4630 interactive use.
4626
4631
4627 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
4632 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
4628 filenames.
4633 filenames.
4629
4634
4630 2002-06-02 Fernando Perez <fperez@colorado.edu>
4635 2002-06-02 Fernando Perez <fperez@colorado.edu>
4631
4636
4632 * IPython/Struct.py (Struct.__init__): modified to admit
4637 * IPython/Struct.py (Struct.__init__): modified to admit
4633 initialization via another struct.
4638 initialization via another struct.
4634
4639
4635 * IPython/genutils.py (SystemExec.__init__): New stateful
4640 * IPython/genutils.py (SystemExec.__init__): New stateful
4636 interface to xsys and bq. Useful for writing system scripts.
4641 interface to xsys and bq. Useful for writing system scripts.
4637
4642
4638 2002-05-30 Fernando Perez <fperez@colorado.edu>
4643 2002-05-30 Fernando Perez <fperez@colorado.edu>
4639
4644
4640 * MANIFEST.in: Changed docfile selection to exclude all the lyx
4645 * MANIFEST.in: Changed docfile selection to exclude all the lyx
4641 documents. This will make the user download smaller (it's getting
4646 documents. This will make the user download smaller (it's getting
4642 too big).
4647 too big).
4643
4648
4644 2002-05-29 Fernando Perez <fperez@colorado.edu>
4649 2002-05-29 Fernando Perez <fperez@colorado.edu>
4645
4650
4646 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
4651 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
4647 fix problems with shelve and pickle. Seems to work, but I don't
4652 fix problems with shelve and pickle. Seems to work, but I don't
4648 know if corner cases break it. Thanks to Mike Heeter
4653 know if corner cases break it. Thanks to Mike Heeter
4649 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
4654 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
4650
4655
4651 2002-05-24 Fernando Perez <fperez@colorado.edu>
4656 2002-05-24 Fernando Perez <fperez@colorado.edu>
4652
4657
4653 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
4658 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
4654 macros having broken.
4659 macros having broken.
4655
4660
4656 2002-05-21 Fernando Perez <fperez@colorado.edu>
4661 2002-05-21 Fernando Perez <fperez@colorado.edu>
4657
4662
4658 * IPython/Magic.py (Magic.magic_logstart): fixed recently
4663 * IPython/Magic.py (Magic.magic_logstart): fixed recently
4659 introduced logging bug: all history before logging started was
4664 introduced logging bug: all history before logging started was
4660 being written one character per line! This came from the redesign
4665 being written one character per line! This came from the redesign
4661 of the input history as a special list which slices to strings,
4666 of the input history as a special list which slices to strings,
4662 not to lists.
4667 not to lists.
4663
4668
4664 2002-05-20 Fernando Perez <fperez@colorado.edu>
4669 2002-05-20 Fernando Perez <fperez@colorado.edu>
4665
4670
4666 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4671 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4667 be an attribute of all classes in this module. The design of these
4672 be an attribute of all classes in this module. The design of these
4668 classes needs some serious overhauling.
4673 classes needs some serious overhauling.
4669
4674
4670 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4675 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4671 which was ignoring '_' in option names.
4676 which was ignoring '_' in option names.
4672
4677
4673 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4678 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4674 'Verbose_novars' to 'Context' and made it the new default. It's a
4679 'Verbose_novars' to 'Context' and made it the new default. It's a
4675 bit more readable and also safer than verbose.
4680 bit more readable and also safer than verbose.
4676
4681
4677 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4682 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4678 triple-quoted strings.
4683 triple-quoted strings.
4679
4684
4680 * IPython/OInspect.py (__all__): new module exposing the object
4685 * IPython/OInspect.py (__all__): new module exposing the object
4681 introspection facilities. Now the corresponding magics are dummy
4686 introspection facilities. Now the corresponding magics are dummy
4682 wrappers around this. Having this module will make it much easier
4687 wrappers around this. Having this module will make it much easier
4683 to put these functions into our modified pdb.
4688 to put these functions into our modified pdb.
4684 This new object inspector system uses the new colorizing module,
4689 This new object inspector system uses the new colorizing module,
4685 so source code and other things are nicely syntax highlighted.
4690 so source code and other things are nicely syntax highlighted.
4686
4691
4687 2002-05-18 Fernando Perez <fperez@colorado.edu>
4692 2002-05-18 Fernando Perez <fperez@colorado.edu>
4688
4693
4689 * IPython/ColorANSI.py: Split the coloring tools into a separate
4694 * IPython/ColorANSI.py: Split the coloring tools into a separate
4690 module so I can use them in other code easier (they were part of
4695 module so I can use them in other code easier (they were part of
4691 ultraTB).
4696 ultraTB).
4692
4697
4693 2002-05-17 Fernando Perez <fperez@colorado.edu>
4698 2002-05-17 Fernando Perez <fperez@colorado.edu>
4694
4699
4695 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4700 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4696 fixed it to set the global 'g' also to the called instance, as
4701 fixed it to set the global 'g' also to the called instance, as
4697 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4702 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4698 user's 'g' variables).
4703 user's 'g' variables).
4699
4704
4700 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4705 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4701 global variables (aliases to _ih,_oh) so that users which expect
4706 global variables (aliases to _ih,_oh) so that users which expect
4702 In[5] or Out[7] to work aren't unpleasantly surprised.
4707 In[5] or Out[7] to work aren't unpleasantly surprised.
4703 (InputList.__getslice__): new class to allow executing slices of
4708 (InputList.__getslice__): new class to allow executing slices of
4704 input history directly. Very simple class, complements the use of
4709 input history directly. Very simple class, complements the use of
4705 macros.
4710 macros.
4706
4711
4707 2002-05-16 Fernando Perez <fperez@colorado.edu>
4712 2002-05-16 Fernando Perez <fperez@colorado.edu>
4708
4713
4709 * setup.py (docdirbase): make doc directory be just doc/IPython
4714 * setup.py (docdirbase): make doc directory be just doc/IPython
4710 without version numbers, it will reduce clutter for users.
4715 without version numbers, it will reduce clutter for users.
4711
4716
4712 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4717 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4713 execfile call to prevent possible memory leak. See for details:
4718 execfile call to prevent possible memory leak. See for details:
4714 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4719 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4715
4720
4716 2002-05-15 Fernando Perez <fperez@colorado.edu>
4721 2002-05-15 Fernando Perez <fperez@colorado.edu>
4717
4722
4718 * IPython/Magic.py (Magic.magic_psource): made the object
4723 * IPython/Magic.py (Magic.magic_psource): made the object
4719 introspection names be more standard: pdoc, pdef, pfile and
4724 introspection names be more standard: pdoc, pdef, pfile and
4720 psource. They all print/page their output, and it makes
4725 psource. They all print/page their output, and it makes
4721 remembering them easier. Kept old names for compatibility as
4726 remembering them easier. Kept old names for compatibility as
4722 aliases.
4727 aliases.
4723
4728
4724 2002-05-14 Fernando Perez <fperez@colorado.edu>
4729 2002-05-14 Fernando Perez <fperez@colorado.edu>
4725
4730
4726 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4731 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4727 what the mouse problem was. The trick is to use gnuplot with temp
4732 what the mouse problem was. The trick is to use gnuplot with temp
4728 files and NOT with pipes (for data communication), because having
4733 files and NOT with pipes (for data communication), because having
4729 both pipes and the mouse on is bad news.
4734 both pipes and the mouse on is bad news.
4730
4735
4731 2002-05-13 Fernando Perez <fperez@colorado.edu>
4736 2002-05-13 Fernando Perez <fperez@colorado.edu>
4732
4737
4733 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4738 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4734 bug. Information would be reported about builtins even when
4739 bug. Information would be reported about builtins even when
4735 user-defined functions overrode them.
4740 user-defined functions overrode them.
4736
4741
4737 2002-05-11 Fernando Perez <fperez@colorado.edu>
4742 2002-05-11 Fernando Perez <fperez@colorado.edu>
4738
4743
4739 * IPython/__init__.py (__all__): removed FlexCompleter from
4744 * IPython/__init__.py (__all__): removed FlexCompleter from
4740 __all__ so that things don't fail in platforms without readline.
4745 __all__ so that things don't fail in platforms without readline.
4741
4746
4742 2002-05-10 Fernando Perez <fperez@colorado.edu>
4747 2002-05-10 Fernando Perez <fperez@colorado.edu>
4743
4748
4744 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4749 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4745 it requires Numeric, effectively making Numeric a dependency for
4750 it requires Numeric, effectively making Numeric a dependency for
4746 IPython.
4751 IPython.
4747
4752
4748 * Released 0.2.13
4753 * Released 0.2.13
4749
4754
4750 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4755 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4751 profiler interface. Now all the major options from the profiler
4756 profiler interface. Now all the major options from the profiler
4752 module are directly supported in IPython, both for single
4757 module are directly supported in IPython, both for single
4753 expressions (@prun) and for full programs (@run -p).
4758 expressions (@prun) and for full programs (@run -p).
4754
4759
4755 2002-05-09 Fernando Perez <fperez@colorado.edu>
4760 2002-05-09 Fernando Perez <fperez@colorado.edu>
4756
4761
4757 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4762 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4758 magic properly formatted for screen.
4763 magic properly formatted for screen.
4759
4764
4760 * setup.py (make_shortcut): Changed things to put pdf version in
4765 * setup.py (make_shortcut): Changed things to put pdf version in
4761 doc/ instead of doc/manual (had to change lyxport a bit).
4766 doc/ instead of doc/manual (had to change lyxport a bit).
4762
4767
4763 * IPython/Magic.py (Profile.string_stats): made profile runs go
4768 * IPython/Magic.py (Profile.string_stats): made profile runs go
4764 through pager (they are long and a pager allows searching, saving,
4769 through pager (they are long and a pager allows searching, saving,
4765 etc.)
4770 etc.)
4766
4771
4767 2002-05-08 Fernando Perez <fperez@colorado.edu>
4772 2002-05-08 Fernando Perez <fperez@colorado.edu>
4768
4773
4769 * Released 0.2.12
4774 * Released 0.2.12
4770
4775
4771 2002-05-06 Fernando Perez <fperez@colorado.edu>
4776 2002-05-06 Fernando Perez <fperez@colorado.edu>
4772
4777
4773 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4778 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4774 introduced); 'hist n1 n2' was broken.
4779 introduced); 'hist n1 n2' was broken.
4775 (Magic.magic_pdb): added optional on/off arguments to @pdb
4780 (Magic.magic_pdb): added optional on/off arguments to @pdb
4776 (Magic.magic_run): added option -i to @run, which executes code in
4781 (Magic.magic_run): added option -i to @run, which executes code in
4777 the IPython namespace instead of a clean one. Also added @irun as
4782 the IPython namespace instead of a clean one. Also added @irun as
4778 an alias to @run -i.
4783 an alias to @run -i.
4779
4784
4780 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4785 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4781 fixed (it didn't really do anything, the namespaces were wrong).
4786 fixed (it didn't really do anything, the namespaces were wrong).
4782
4787
4783 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4788 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4784
4789
4785 * IPython/__init__.py (__all__): Fixed package namespace, now
4790 * IPython/__init__.py (__all__): Fixed package namespace, now
4786 'import IPython' does give access to IPython.<all> as
4791 'import IPython' does give access to IPython.<all> as
4787 expected. Also renamed __release__ to Release.
4792 expected. Also renamed __release__ to Release.
4788
4793
4789 * IPython/Debugger.py (__license__): created new Pdb class which
4794 * IPython/Debugger.py (__license__): created new Pdb class which
4790 functions like a drop-in for the normal pdb.Pdb but does NOT
4795 functions like a drop-in for the normal pdb.Pdb but does NOT
4791 import readline by default. This way it doesn't muck up IPython's
4796 import readline by default. This way it doesn't muck up IPython's
4792 readline handling, and now tab-completion finally works in the
4797 readline handling, and now tab-completion finally works in the
4793 debugger -- sort of. It completes things globally visible, but the
4798 debugger -- sort of. It completes things globally visible, but the
4794 completer doesn't track the stack as pdb walks it. That's a bit
4799 completer doesn't track the stack as pdb walks it. That's a bit
4795 tricky, and I'll have to implement it later.
4800 tricky, and I'll have to implement it later.
4796
4801
4797 2002-05-05 Fernando Perez <fperez@colorado.edu>
4802 2002-05-05 Fernando Perez <fperez@colorado.edu>
4798
4803
4799 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4804 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4800 magic docstrings when printed via ? (explicit \'s were being
4805 magic docstrings when printed via ? (explicit \'s were being
4801 printed).
4806 printed).
4802
4807
4803 * IPython/ipmaker.py (make_IPython): fixed namespace
4808 * IPython/ipmaker.py (make_IPython): fixed namespace
4804 identification bug. Now variables loaded via logs or command-line
4809 identification bug. Now variables loaded via logs or command-line
4805 files are recognized in the interactive namespace by @who.
4810 files are recognized in the interactive namespace by @who.
4806
4811
4807 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4812 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4808 log replay system stemming from the string form of Structs.
4813 log replay system stemming from the string form of Structs.
4809
4814
4810 * IPython/Magic.py (Macro.__init__): improved macros to properly
4815 * IPython/Magic.py (Macro.__init__): improved macros to properly
4811 handle magic commands in them.
4816 handle magic commands in them.
4812 (Magic.magic_logstart): usernames are now expanded so 'logstart
4817 (Magic.magic_logstart): usernames are now expanded so 'logstart
4813 ~/mylog' now works.
4818 ~/mylog' now works.
4814
4819
4815 * IPython/iplib.py (complete): fixed bug where paths starting with
4820 * IPython/iplib.py (complete): fixed bug where paths starting with
4816 '/' would be completed as magic names.
4821 '/' would be completed as magic names.
4817
4822
4818 2002-05-04 Fernando Perez <fperez@colorado.edu>
4823 2002-05-04 Fernando Perez <fperez@colorado.edu>
4819
4824
4820 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4825 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4821 allow running full programs under the profiler's control.
4826 allow running full programs under the profiler's control.
4822
4827
4823 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4828 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4824 mode to report exceptions verbosely but without formatting
4829 mode to report exceptions verbosely but without formatting
4825 variables. This addresses the issue of ipython 'freezing' (it's
4830 variables. This addresses the issue of ipython 'freezing' (it's
4826 not frozen, but caught in an expensive formatting loop) when huge
4831 not frozen, but caught in an expensive formatting loop) when huge
4827 variables are in the context of an exception.
4832 variables are in the context of an exception.
4828 (VerboseTB.text): Added '--->' markers at line where exception was
4833 (VerboseTB.text): Added '--->' markers at line where exception was
4829 triggered. Much clearer to read, especially in NoColor modes.
4834 triggered. Much clearer to read, especially in NoColor modes.
4830
4835
4831 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4836 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4832 implemented in reverse when changing to the new parse_options().
4837 implemented in reverse when changing to the new parse_options().
4833
4838
4834 2002-05-03 Fernando Perez <fperez@colorado.edu>
4839 2002-05-03 Fernando Perez <fperez@colorado.edu>
4835
4840
4836 * IPython/Magic.py (Magic.parse_options): new function so that
4841 * IPython/Magic.py (Magic.parse_options): new function so that
4837 magics can parse options easier.
4842 magics can parse options easier.
4838 (Magic.magic_prun): new function similar to profile.run(),
4843 (Magic.magic_prun): new function similar to profile.run(),
4839 suggested by Chris Hart.
4844 suggested by Chris Hart.
4840 (Magic.magic_cd): fixed behavior so that it only changes if
4845 (Magic.magic_cd): fixed behavior so that it only changes if
4841 directory actually is in history.
4846 directory actually is in history.
4842
4847
4843 * IPython/usage.py (__doc__): added information about potential
4848 * IPython/usage.py (__doc__): added information about potential
4844 slowness of Verbose exception mode when there are huge data
4849 slowness of Verbose exception mode when there are huge data
4845 structures to be formatted (thanks to Archie Paulson).
4850 structures to be formatted (thanks to Archie Paulson).
4846
4851
4847 * IPython/ipmaker.py (make_IPython): Changed default logging
4852 * IPython/ipmaker.py (make_IPython): Changed default logging
4848 (when simply called with -log) to use curr_dir/ipython.log in
4853 (when simply called with -log) to use curr_dir/ipython.log in
4849 rotate mode. Fixed crash which was occuring with -log before
4854 rotate mode. Fixed crash which was occuring with -log before
4850 (thanks to Jim Boyle).
4855 (thanks to Jim Boyle).
4851
4856
4852 2002-05-01 Fernando Perez <fperez@colorado.edu>
4857 2002-05-01 Fernando Perez <fperez@colorado.edu>
4853
4858
4854 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4859 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4855 was nasty -- though somewhat of a corner case).
4860 was nasty -- though somewhat of a corner case).
4856
4861
4857 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4862 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4858 text (was a bug).
4863 text (was a bug).
4859
4864
4860 2002-04-30 Fernando Perez <fperez@colorado.edu>
4865 2002-04-30 Fernando Perez <fperez@colorado.edu>
4861
4866
4862 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4867 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4863 a print after ^D or ^C from the user so that the In[] prompt
4868 a print after ^D or ^C from the user so that the In[] prompt
4864 doesn't over-run the gnuplot one.
4869 doesn't over-run the gnuplot one.
4865
4870
4866 2002-04-29 Fernando Perez <fperez@colorado.edu>
4871 2002-04-29 Fernando Perez <fperez@colorado.edu>
4867
4872
4868 * Released 0.2.10
4873 * Released 0.2.10
4869
4874
4870 * IPython/__release__.py (version): get date dynamically.
4875 * IPython/__release__.py (version): get date dynamically.
4871
4876
4872 * Misc. documentation updates thanks to Arnd's comments. Also ran
4877 * Misc. documentation updates thanks to Arnd's comments. Also ran
4873 a full spellcheck on the manual (hadn't been done in a while).
4878 a full spellcheck on the manual (hadn't been done in a while).
4874
4879
4875 2002-04-27 Fernando Perez <fperez@colorado.edu>
4880 2002-04-27 Fernando Perez <fperez@colorado.edu>
4876
4881
4877 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4882 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4878 starting a log in mid-session would reset the input history list.
4883 starting a log in mid-session would reset the input history list.
4879
4884
4880 2002-04-26 Fernando Perez <fperez@colorado.edu>
4885 2002-04-26 Fernando Perez <fperez@colorado.edu>
4881
4886
4882 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4887 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4883 all files were being included in an update. Now anything in
4888 all files were being included in an update. Now anything in
4884 UserConfig that matches [A-Za-z]*.py will go (this excludes
4889 UserConfig that matches [A-Za-z]*.py will go (this excludes
4885 __init__.py)
4890 __init__.py)
4886
4891
4887 2002-04-25 Fernando Perez <fperez@colorado.edu>
4892 2002-04-25 Fernando Perez <fperez@colorado.edu>
4888
4893
4889 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4894 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4890 to __builtins__ so that any form of embedded or imported code can
4895 to __builtins__ so that any form of embedded or imported code can
4891 test for being inside IPython.
4896 test for being inside IPython.
4892
4897
4893 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4898 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4894 changed to GnuplotMagic because it's now an importable module,
4899 changed to GnuplotMagic because it's now an importable module,
4895 this makes the name follow that of the standard Gnuplot module.
4900 this makes the name follow that of the standard Gnuplot module.
4896 GnuplotMagic can now be loaded at any time in mid-session.
4901 GnuplotMagic can now be loaded at any time in mid-session.
4897
4902
4898 2002-04-24 Fernando Perez <fperez@colorado.edu>
4903 2002-04-24 Fernando Perez <fperez@colorado.edu>
4899
4904
4900 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4905 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4901 the globals (IPython has its own namespace) and the
4906 the globals (IPython has its own namespace) and the
4902 PhysicalQuantity stuff is much better anyway.
4907 PhysicalQuantity stuff is much better anyway.
4903
4908
4904 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4909 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4905 embedding example to standard user directory for
4910 embedding example to standard user directory for
4906 distribution. Also put it in the manual.
4911 distribution. Also put it in the manual.
4907
4912
4908 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4913 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4909 instance as first argument (so it doesn't rely on some obscure
4914 instance as first argument (so it doesn't rely on some obscure
4910 hidden global).
4915 hidden global).
4911
4916
4912 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4917 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4913 delimiters. While it prevents ().TAB from working, it allows
4918 delimiters. While it prevents ().TAB from working, it allows
4914 completions in open (... expressions. This is by far a more common
4919 completions in open (... expressions. This is by far a more common
4915 case.
4920 case.
4916
4921
4917 2002-04-23 Fernando Perez <fperez@colorado.edu>
4922 2002-04-23 Fernando Perez <fperez@colorado.edu>
4918
4923
4919 * IPython/Extensions/InterpreterPasteInput.py: new
4924 * IPython/Extensions/InterpreterPasteInput.py: new
4920 syntax-processing module for pasting lines with >>> or ... at the
4925 syntax-processing module for pasting lines with >>> or ... at the
4921 start.
4926 start.
4922
4927
4923 * IPython/Extensions/PhysicalQ_Interactive.py
4928 * IPython/Extensions/PhysicalQ_Interactive.py
4924 (PhysicalQuantityInteractive.__int__): fixed to work with either
4929 (PhysicalQuantityInteractive.__int__): fixed to work with either
4925 Numeric or math.
4930 Numeric or math.
4926
4931
4927 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4932 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4928 provided profiles. Now we have:
4933 provided profiles. Now we have:
4929 -math -> math module as * and cmath with its own namespace.
4934 -math -> math module as * and cmath with its own namespace.
4930 -numeric -> Numeric as *, plus gnuplot & grace
4935 -numeric -> Numeric as *, plus gnuplot & grace
4931 -physics -> same as before
4936 -physics -> same as before
4932
4937
4933 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4938 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4934 user-defined magics wouldn't be found by @magic if they were
4939 user-defined magics wouldn't be found by @magic if they were
4935 defined as class methods. Also cleaned up the namespace search
4940 defined as class methods. Also cleaned up the namespace search
4936 logic and the string building (to use %s instead of many repeated
4941 logic and the string building (to use %s instead of many repeated
4937 string adds).
4942 string adds).
4938
4943
4939 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4944 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4940 of user-defined magics to operate with class methods (cleaner, in
4945 of user-defined magics to operate with class methods (cleaner, in
4941 line with the gnuplot code).
4946 line with the gnuplot code).
4942
4947
4943 2002-04-22 Fernando Perez <fperez@colorado.edu>
4948 2002-04-22 Fernando Perez <fperez@colorado.edu>
4944
4949
4945 * setup.py: updated dependency list so that manual is updated when
4950 * setup.py: updated dependency list so that manual is updated when
4946 all included files change.
4951 all included files change.
4947
4952
4948 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4953 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4949 the delimiter removal option (the fix is ugly right now).
4954 the delimiter removal option (the fix is ugly right now).
4950
4955
4951 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4956 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4952 all of the math profile (quicker loading, no conflict between
4957 all of the math profile (quicker loading, no conflict between
4953 g-9.8 and g-gnuplot).
4958 g-9.8 and g-gnuplot).
4954
4959
4955 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4960 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4956 name of post-mortem files to IPython_crash_report.txt.
4961 name of post-mortem files to IPython_crash_report.txt.
4957
4962
4958 * Cleanup/update of the docs. Added all the new readline info and
4963 * Cleanup/update of the docs. Added all the new readline info and
4959 formatted all lists as 'real lists'.
4964 formatted all lists as 'real lists'.
4960
4965
4961 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4966 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4962 tab-completion options, since the full readline parse_and_bind is
4967 tab-completion options, since the full readline parse_and_bind is
4963 now accessible.
4968 now accessible.
4964
4969
4965 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4970 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4966 handling of readline options. Now users can specify any string to
4971 handling of readline options. Now users can specify any string to
4967 be passed to parse_and_bind(), as well as the delimiters to be
4972 be passed to parse_and_bind(), as well as the delimiters to be
4968 removed.
4973 removed.
4969 (InteractiveShell.__init__): Added __name__ to the global
4974 (InteractiveShell.__init__): Added __name__ to the global
4970 namespace so that things like Itpl which rely on its existence
4975 namespace so that things like Itpl which rely on its existence
4971 don't crash.
4976 don't crash.
4972 (InteractiveShell._prefilter): Defined the default with a _ so
4977 (InteractiveShell._prefilter): Defined the default with a _ so
4973 that prefilter() is easier to override, while the default one
4978 that prefilter() is easier to override, while the default one
4974 remains available.
4979 remains available.
4975
4980
4976 2002-04-18 Fernando Perez <fperez@colorado.edu>
4981 2002-04-18 Fernando Perez <fperez@colorado.edu>
4977
4982
4978 * Added information about pdb in the docs.
4983 * Added information about pdb in the docs.
4979
4984
4980 2002-04-17 Fernando Perez <fperez@colorado.edu>
4985 2002-04-17 Fernando Perez <fperez@colorado.edu>
4981
4986
4982 * IPython/ipmaker.py (make_IPython): added rc_override option to
4987 * IPython/ipmaker.py (make_IPython): added rc_override option to
4983 allow passing config options at creation time which may override
4988 allow passing config options at creation time which may override
4984 anything set in the config files or command line. This is
4989 anything set in the config files or command line. This is
4985 particularly useful for configuring embedded instances.
4990 particularly useful for configuring embedded instances.
4986
4991
4987 2002-04-15 Fernando Perez <fperez@colorado.edu>
4992 2002-04-15 Fernando Perez <fperez@colorado.edu>
4988
4993
4989 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4994 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4990 crash embedded instances because of the input cache falling out of
4995 crash embedded instances because of the input cache falling out of
4991 sync with the output counter.
4996 sync with the output counter.
4992
4997
4993 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4998 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4994 mode which calls pdb after an uncaught exception in IPython itself.
4999 mode which calls pdb after an uncaught exception in IPython itself.
4995
5000
4996 2002-04-14 Fernando Perez <fperez@colorado.edu>
5001 2002-04-14 Fernando Perez <fperez@colorado.edu>
4997
5002
4998 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
5003 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4999 readline, fix it back after each call.
5004 readline, fix it back after each call.
5000
5005
5001 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
5006 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
5002 method to force all access via __call__(), which guarantees that
5007 method to force all access via __call__(), which guarantees that
5003 traceback references are properly deleted.
5008 traceback references are properly deleted.
5004
5009
5005 * IPython/Prompts.py (CachedOutput._display): minor fixes to
5010 * IPython/Prompts.py (CachedOutput._display): minor fixes to
5006 improve printing when pprint is in use.
5011 improve printing when pprint is in use.
5007
5012
5008 2002-04-13 Fernando Perez <fperez@colorado.edu>
5013 2002-04-13 Fernando Perez <fperez@colorado.edu>
5009
5014
5010 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
5015 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
5011 exceptions aren't caught anymore. If the user triggers one, he
5016 exceptions aren't caught anymore. If the user triggers one, he
5012 should know why he's doing it and it should go all the way up,
5017 should know why he's doing it and it should go all the way up,
5013 just like any other exception. So now @abort will fully kill the
5018 just like any other exception. So now @abort will fully kill the
5014 embedded interpreter and the embedding code (unless that happens
5019 embedded interpreter and the embedding code (unless that happens
5015 to catch SystemExit).
5020 to catch SystemExit).
5016
5021
5017 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
5022 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
5018 and a debugger() method to invoke the interactive pdb debugger
5023 and a debugger() method to invoke the interactive pdb debugger
5019 after printing exception information. Also added the corresponding
5024 after printing exception information. Also added the corresponding
5020 -pdb option and @pdb magic to control this feature, and updated
5025 -pdb option and @pdb magic to control this feature, and updated
5021 the docs. After a suggestion from Christopher Hart
5026 the docs. After a suggestion from Christopher Hart
5022 (hart-AT-caltech.edu).
5027 (hart-AT-caltech.edu).
5023
5028
5024 2002-04-12 Fernando Perez <fperez@colorado.edu>
5029 2002-04-12 Fernando Perez <fperez@colorado.edu>
5025
5030
5026 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
5031 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
5027 the exception handlers defined by the user (not the CrashHandler)
5032 the exception handlers defined by the user (not the CrashHandler)
5028 so that user exceptions don't trigger an ipython bug report.
5033 so that user exceptions don't trigger an ipython bug report.
5029
5034
5030 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
5035 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
5031 configurable (it should have always been so).
5036 configurable (it should have always been so).
5032
5037
5033 2002-03-26 Fernando Perez <fperez@colorado.edu>
5038 2002-03-26 Fernando Perez <fperez@colorado.edu>
5034
5039
5035 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
5040 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
5036 and there to fix embedding namespace issues. This should all be
5041 and there to fix embedding namespace issues. This should all be
5037 done in a more elegant way.
5042 done in a more elegant way.
5038
5043
5039 2002-03-25 Fernando Perez <fperez@colorado.edu>
5044 2002-03-25 Fernando Perez <fperez@colorado.edu>
5040
5045
5041 * IPython/genutils.py (get_home_dir): Try to make it work under
5046 * IPython/genutils.py (get_home_dir): Try to make it work under
5042 win9x also.
5047 win9x also.
5043
5048
5044 2002-03-20 Fernando Perez <fperez@colorado.edu>
5049 2002-03-20 Fernando Perez <fperez@colorado.edu>
5045
5050
5046 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
5051 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
5047 sys.displayhook untouched upon __init__.
5052 sys.displayhook untouched upon __init__.
5048
5053
5049 2002-03-19 Fernando Perez <fperez@colorado.edu>
5054 2002-03-19 Fernando Perez <fperez@colorado.edu>
5050
5055
5051 * Released 0.2.9 (for embedding bug, basically).
5056 * Released 0.2.9 (for embedding bug, basically).
5052
5057
5053 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
5058 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
5054 exceptions so that enclosing shell's state can be restored.
5059 exceptions so that enclosing shell's state can be restored.
5055
5060
5056 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
5061 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
5057 naming conventions in the .ipython/ dir.
5062 naming conventions in the .ipython/ dir.
5058
5063
5059 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
5064 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
5060 from delimiters list so filenames with - in them get expanded.
5065 from delimiters list so filenames with - in them get expanded.
5061
5066
5062 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
5067 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
5063 sys.displayhook not being properly restored after an embedded call.
5068 sys.displayhook not being properly restored after an embedded call.
5064
5069
5065 2002-03-18 Fernando Perez <fperez@colorado.edu>
5070 2002-03-18 Fernando Perez <fperez@colorado.edu>
5066
5071
5067 * Released 0.2.8
5072 * Released 0.2.8
5068
5073
5069 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
5074 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
5070 some files weren't being included in a -upgrade.
5075 some files weren't being included in a -upgrade.
5071 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
5076 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
5072 on' so that the first tab completes.
5077 on' so that the first tab completes.
5073 (InteractiveShell.handle_magic): fixed bug with spaces around
5078 (InteractiveShell.handle_magic): fixed bug with spaces around
5074 quotes breaking many magic commands.
5079 quotes breaking many magic commands.
5075
5080
5076 * setup.py: added note about ignoring the syntax error messages at
5081 * setup.py: added note about ignoring the syntax error messages at
5077 installation.
5082 installation.
5078
5083
5079 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
5084 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
5080 streamlining the gnuplot interface, now there's only one magic @gp.
5085 streamlining the gnuplot interface, now there's only one magic @gp.
5081
5086
5082 2002-03-17 Fernando Perez <fperez@colorado.edu>
5087 2002-03-17 Fernando Perez <fperez@colorado.edu>
5083
5088
5084 * IPython/UserConfig/magic_gnuplot.py: new name for the
5089 * IPython/UserConfig/magic_gnuplot.py: new name for the
5085 example-magic_pm.py file. Much enhanced system, now with a shell
5090 example-magic_pm.py file. Much enhanced system, now with a shell
5086 for communicating directly with gnuplot, one command at a time.
5091 for communicating directly with gnuplot, one command at a time.
5087
5092
5088 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
5093 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
5089 setting __name__=='__main__'.
5094 setting __name__=='__main__'.
5090
5095
5091 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
5096 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
5092 mini-shell for accessing gnuplot from inside ipython. Should
5097 mini-shell for accessing gnuplot from inside ipython. Should
5093 extend it later for grace access too. Inspired by Arnd's
5098 extend it later for grace access too. Inspired by Arnd's
5094 suggestion.
5099 suggestion.
5095
5100
5096 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
5101 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
5097 calling magic functions with () in their arguments. Thanks to Arnd
5102 calling magic functions with () in their arguments. Thanks to Arnd
5098 Baecker for pointing this to me.
5103 Baecker for pointing this to me.
5099
5104
5100 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
5105 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
5101 infinitely for integer or complex arrays (only worked with floats).
5106 infinitely for integer or complex arrays (only worked with floats).
5102
5107
5103 2002-03-16 Fernando Perez <fperez@colorado.edu>
5108 2002-03-16 Fernando Perez <fperez@colorado.edu>
5104
5109
5105 * setup.py: Merged setup and setup_windows into a single script
5110 * setup.py: Merged setup and setup_windows into a single script
5106 which properly handles things for windows users.
5111 which properly handles things for windows users.
5107
5112
5108 2002-03-15 Fernando Perez <fperez@colorado.edu>
5113 2002-03-15 Fernando Perez <fperez@colorado.edu>
5109
5114
5110 * Big change to the manual: now the magics are all automatically
5115 * Big change to the manual: now the magics are all automatically
5111 documented. This information is generated from their docstrings
5116 documented. This information is generated from their docstrings
5112 and put in a latex file included by the manual lyx file. This way
5117 and put in a latex file included by the manual lyx file. This way
5113 we get always up to date information for the magics. The manual
5118 we get always up to date information for the magics. The manual
5114 now also has proper version information, also auto-synced.
5119 now also has proper version information, also auto-synced.
5115
5120
5116 For this to work, an undocumented --magic_docstrings option was added.
5121 For this to work, an undocumented --magic_docstrings option was added.
5117
5122
5118 2002-03-13 Fernando Perez <fperez@colorado.edu>
5123 2002-03-13 Fernando Perez <fperez@colorado.edu>
5119
5124
5120 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
5125 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
5121 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
5126 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
5122
5127
5123 2002-03-12 Fernando Perez <fperez@colorado.edu>
5128 2002-03-12 Fernando Perez <fperez@colorado.edu>
5124
5129
5125 * IPython/ultraTB.py (TermColors): changed color escapes again to
5130 * IPython/ultraTB.py (TermColors): changed color escapes again to
5126 fix the (old, reintroduced) line-wrapping bug. Basically, if
5131 fix the (old, reintroduced) line-wrapping bug. Basically, if
5127 \001..\002 aren't given in the color escapes, lines get wrapped
5132 \001..\002 aren't given in the color escapes, lines get wrapped
5128 weirdly. But giving those screws up old xterms and emacs terms. So
5133 weirdly. But giving those screws up old xterms and emacs terms. So
5129 I added some logic for emacs terms to be ok, but I can't identify old
5134 I added some logic for emacs terms to be ok, but I can't identify old
5130 xterms separately ($TERM=='xterm' for many terminals, like konsole).
5135 xterms separately ($TERM=='xterm' for many terminals, like konsole).
5131
5136
5132 2002-03-10 Fernando Perez <fperez@colorado.edu>
5137 2002-03-10 Fernando Perez <fperez@colorado.edu>
5133
5138
5134 * IPython/usage.py (__doc__): Various documentation cleanups and
5139 * IPython/usage.py (__doc__): Various documentation cleanups and
5135 updates, both in usage docstrings and in the manual.
5140 updates, both in usage docstrings and in the manual.
5136
5141
5137 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
5142 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
5138 handling of caching. Set minimum acceptabe value for having a
5143 handling of caching. Set minimum acceptabe value for having a
5139 cache at 20 values.
5144 cache at 20 values.
5140
5145
5141 * IPython/iplib.py (InteractiveShell.user_setup): moved the
5146 * IPython/iplib.py (InteractiveShell.user_setup): moved the
5142 install_first_time function to a method, renamed it and added an
5147 install_first_time function to a method, renamed it and added an
5143 'upgrade' mode. Now people can update their config directory with
5148 'upgrade' mode. Now people can update their config directory with
5144 a simple command line switch (-upgrade, also new).
5149 a simple command line switch (-upgrade, also new).
5145
5150
5146 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
5151 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
5147 @file (convenient for automagic users under Python >= 2.2).
5152 @file (convenient for automagic users under Python >= 2.2).
5148 Removed @files (it seemed more like a plural than an abbrev. of
5153 Removed @files (it seemed more like a plural than an abbrev. of
5149 'file show').
5154 'file show').
5150
5155
5151 * IPython/iplib.py (install_first_time): Fixed crash if there were
5156 * IPython/iplib.py (install_first_time): Fixed crash if there were
5152 backup files ('~') in .ipython/ install directory.
5157 backup files ('~') in .ipython/ install directory.
5153
5158
5154 * IPython/ipmaker.py (make_IPython): fixes for new prompt
5159 * IPython/ipmaker.py (make_IPython): fixes for new prompt
5155 system. Things look fine, but these changes are fairly
5160 system. Things look fine, but these changes are fairly
5156 intrusive. Test them for a few days.
5161 intrusive. Test them for a few days.
5157
5162
5158 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
5163 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
5159 the prompts system. Now all in/out prompt strings are user
5164 the prompts system. Now all in/out prompt strings are user
5160 controllable. This is particularly useful for embedding, as one
5165 controllable. This is particularly useful for embedding, as one
5161 can tag embedded instances with particular prompts.
5166 can tag embedded instances with particular prompts.
5162
5167
5163 Also removed global use of sys.ps1/2, which now allows nested
5168 Also removed global use of sys.ps1/2, which now allows nested
5164 embeddings without any problems. Added command-line options for
5169 embeddings without any problems. Added command-line options for
5165 the prompt strings.
5170 the prompt strings.
5166
5171
5167 2002-03-08 Fernando Perez <fperez@colorado.edu>
5172 2002-03-08 Fernando Perez <fperez@colorado.edu>
5168
5173
5169 * IPython/UserConfig/example-embed-short.py (ipshell): added
5174 * IPython/UserConfig/example-embed-short.py (ipshell): added
5170 example file with the bare minimum code for embedding.
5175 example file with the bare minimum code for embedding.
5171
5176
5172 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
5177 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
5173 functionality for the embeddable shell to be activated/deactivated
5178 functionality for the embeddable shell to be activated/deactivated
5174 either globally or at each call.
5179 either globally or at each call.
5175
5180
5176 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
5181 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
5177 rewriting the prompt with '--->' for auto-inputs with proper
5182 rewriting the prompt with '--->' for auto-inputs with proper
5178 coloring. Now the previous UGLY hack in handle_auto() is gone, and
5183 coloring. Now the previous UGLY hack in handle_auto() is gone, and
5179 this is handled by the prompts class itself, as it should.
5184 this is handled by the prompts class itself, as it should.
5180
5185
5181 2002-03-05 Fernando Perez <fperez@colorado.edu>
5186 2002-03-05 Fernando Perez <fperez@colorado.edu>
5182
5187
5183 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
5188 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
5184 @logstart to avoid name clashes with the math log function.
5189 @logstart to avoid name clashes with the math log function.
5185
5190
5186 * Big updates to X/Emacs section of the manual.
5191 * Big updates to X/Emacs section of the manual.
5187
5192
5188 * Removed ipython_emacs. Milan explained to me how to pass
5193 * Removed ipython_emacs. Milan explained to me how to pass
5189 arguments to ipython through Emacs. Some day I'm going to end up
5194 arguments to ipython through Emacs. Some day I'm going to end up
5190 learning some lisp...
5195 learning some lisp...
5191
5196
5192 2002-03-04 Fernando Perez <fperez@colorado.edu>
5197 2002-03-04 Fernando Perez <fperez@colorado.edu>
5193
5198
5194 * IPython/ipython_emacs: Created script to be used as the
5199 * IPython/ipython_emacs: Created script to be used as the
5195 py-python-command Emacs variable so we can pass IPython
5200 py-python-command Emacs variable so we can pass IPython
5196 parameters. I can't figure out how to tell Emacs directly to pass
5201 parameters. I can't figure out how to tell Emacs directly to pass
5197 parameters to IPython, so a dummy shell script will do it.
5202 parameters to IPython, so a dummy shell script will do it.
5198
5203
5199 Other enhancements made for things to work better under Emacs'
5204 Other enhancements made for things to work better under Emacs'
5200 various types of terminals. Many thanks to Milan Zamazal
5205 various types of terminals. Many thanks to Milan Zamazal
5201 <pdm-AT-zamazal.org> for all the suggestions and pointers.
5206 <pdm-AT-zamazal.org> for all the suggestions and pointers.
5202
5207
5203 2002-03-01 Fernando Perez <fperez@colorado.edu>
5208 2002-03-01 Fernando Perez <fperez@colorado.edu>
5204
5209
5205 * IPython/ipmaker.py (make_IPython): added a --readline! option so
5210 * IPython/ipmaker.py (make_IPython): added a --readline! option so
5206 that loading of readline is now optional. This gives better
5211 that loading of readline is now optional. This gives better
5207 control to emacs users.
5212 control to emacs users.
5208
5213
5209 * IPython/ultraTB.py (__date__): Modified color escape sequences
5214 * IPython/ultraTB.py (__date__): Modified color escape sequences
5210 and now things work fine under xterm and in Emacs' term buffers
5215 and now things work fine under xterm and in Emacs' term buffers
5211 (though not shell ones). Well, in emacs you get colors, but all
5216 (though not shell ones). Well, in emacs you get colors, but all
5212 seem to be 'light' colors (no difference between dark and light
5217 seem to be 'light' colors (no difference between dark and light
5213 ones). But the garbage chars are gone, and also in xterms. It
5218 ones). But the garbage chars are gone, and also in xterms. It
5214 seems that now I'm using 'cleaner' ansi sequences.
5219 seems that now I'm using 'cleaner' ansi sequences.
5215
5220
5216 2002-02-21 Fernando Perez <fperez@colorado.edu>
5221 2002-02-21 Fernando Perez <fperez@colorado.edu>
5217
5222
5218 * Released 0.2.7 (mainly to publish the scoping fix).
5223 * Released 0.2.7 (mainly to publish the scoping fix).
5219
5224
5220 * IPython/Logger.py (Logger.logstate): added. A corresponding
5225 * IPython/Logger.py (Logger.logstate): added. A corresponding
5221 @logstate magic was created.
5226 @logstate magic was created.
5222
5227
5223 * IPython/Magic.py: fixed nested scoping problem under Python
5228 * IPython/Magic.py: fixed nested scoping problem under Python
5224 2.1.x (automagic wasn't working).
5229 2.1.x (automagic wasn't working).
5225
5230
5226 2002-02-20 Fernando Perez <fperez@colorado.edu>
5231 2002-02-20 Fernando Perez <fperez@colorado.edu>
5227
5232
5228 * Released 0.2.6.
5233 * Released 0.2.6.
5229
5234
5230 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
5235 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
5231 option so that logs can come out without any headers at all.
5236 option so that logs can come out without any headers at all.
5232
5237
5233 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
5238 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
5234 SciPy.
5239 SciPy.
5235
5240
5236 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
5241 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
5237 that embedded IPython calls don't require vars() to be explicitly
5242 that embedded IPython calls don't require vars() to be explicitly
5238 passed. Now they are extracted from the caller's frame (code
5243 passed. Now they are extracted from the caller's frame (code
5239 snatched from Eric Jones' weave). Added better documentation to
5244 snatched from Eric Jones' weave). Added better documentation to
5240 the section on embedding and the example file.
5245 the section on embedding and the example file.
5241
5246
5242 * IPython/genutils.py (page): Changed so that under emacs, it just
5247 * IPython/genutils.py (page): Changed so that under emacs, it just
5243 prints the string. You can then page up and down in the emacs
5248 prints the string. You can then page up and down in the emacs
5244 buffer itself. This is how the builtin help() works.
5249 buffer itself. This is how the builtin help() works.
5245
5250
5246 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
5251 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
5247 macro scoping: macros need to be executed in the user's namespace
5252 macro scoping: macros need to be executed in the user's namespace
5248 to work as if they had been typed by the user.
5253 to work as if they had been typed by the user.
5249
5254
5250 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
5255 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
5251 execute automatically (no need to type 'exec...'). They then
5256 execute automatically (no need to type 'exec...'). They then
5252 behave like 'true macros'. The printing system was also modified
5257 behave like 'true macros'. The printing system was also modified
5253 for this to work.
5258 for this to work.
5254
5259
5255 2002-02-19 Fernando Perez <fperez@colorado.edu>
5260 2002-02-19 Fernando Perez <fperez@colorado.edu>
5256
5261
5257 * IPython/genutils.py (page_file): new function for paging files
5262 * IPython/genutils.py (page_file): new function for paging files
5258 in an OS-independent way. Also necessary for file viewing to work
5263 in an OS-independent way. Also necessary for file viewing to work
5259 well inside Emacs buffers.
5264 well inside Emacs buffers.
5260 (page): Added checks for being in an emacs buffer.
5265 (page): Added checks for being in an emacs buffer.
5261 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
5266 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
5262 same bug in iplib.
5267 same bug in iplib.
5263
5268
5264 2002-02-18 Fernando Perez <fperez@colorado.edu>
5269 2002-02-18 Fernando Perez <fperez@colorado.edu>
5265
5270
5266 * IPython/iplib.py (InteractiveShell.init_readline): modified use
5271 * IPython/iplib.py (InteractiveShell.init_readline): modified use
5267 of readline so that IPython can work inside an Emacs buffer.
5272 of readline so that IPython can work inside an Emacs buffer.
5268
5273
5269 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
5274 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
5270 method signatures (they weren't really bugs, but it looks cleaner
5275 method signatures (they weren't really bugs, but it looks cleaner
5271 and keeps PyChecker happy).
5276 and keeps PyChecker happy).
5272
5277
5273 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
5278 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
5274 for implementing various user-defined hooks. Currently only
5279 for implementing various user-defined hooks. Currently only
5275 display is done.
5280 display is done.
5276
5281
5277 * IPython/Prompts.py (CachedOutput._display): changed display
5282 * IPython/Prompts.py (CachedOutput._display): changed display
5278 functions so that they can be dynamically changed by users easily.
5283 functions so that they can be dynamically changed by users easily.
5279
5284
5280 * IPython/Extensions/numeric_formats.py (num_display): added an
5285 * IPython/Extensions/numeric_formats.py (num_display): added an
5281 extension for printing NumPy arrays in flexible manners. It
5286 extension for printing NumPy arrays in flexible manners. It
5282 doesn't do anything yet, but all the structure is in
5287 doesn't do anything yet, but all the structure is in
5283 place. Ultimately the plan is to implement output format control
5288 place. Ultimately the plan is to implement output format control
5284 like in Octave.
5289 like in Octave.
5285
5290
5286 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
5291 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
5287 methods are found at run-time by all the automatic machinery.
5292 methods are found at run-time by all the automatic machinery.
5288
5293
5289 2002-02-17 Fernando Perez <fperez@colorado.edu>
5294 2002-02-17 Fernando Perez <fperez@colorado.edu>
5290
5295
5291 * setup_Windows.py (make_shortcut): documented. Cleaned up the
5296 * setup_Windows.py (make_shortcut): documented. Cleaned up the
5292 whole file a little.
5297 whole file a little.
5293
5298
5294 * ToDo: closed this document. Now there's a new_design.lyx
5299 * ToDo: closed this document. Now there's a new_design.lyx
5295 document for all new ideas. Added making a pdf of it for the
5300 document for all new ideas. Added making a pdf of it for the
5296 end-user distro.
5301 end-user distro.
5297
5302
5298 * IPython/Logger.py (Logger.switch_log): Created this to replace
5303 * IPython/Logger.py (Logger.switch_log): Created this to replace
5299 logon() and logoff(). It also fixes a nasty crash reported by
5304 logon() and logoff(). It also fixes a nasty crash reported by
5300 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
5305 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
5301
5306
5302 * IPython/iplib.py (complete): got auto-completion to work with
5307 * IPython/iplib.py (complete): got auto-completion to work with
5303 automagic (I had wanted this for a long time).
5308 automagic (I had wanted this for a long time).
5304
5309
5305 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
5310 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
5306 to @file, since file() is now a builtin and clashes with automagic
5311 to @file, since file() is now a builtin and clashes with automagic
5307 for @file.
5312 for @file.
5308
5313
5309 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
5314 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
5310 of this was previously in iplib, which had grown to more than 2000
5315 of this was previously in iplib, which had grown to more than 2000
5311 lines, way too long. No new functionality, but it makes managing
5316 lines, way too long. No new functionality, but it makes managing
5312 the code a bit easier.
5317 the code a bit easier.
5313
5318
5314 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
5319 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
5315 information to crash reports.
5320 information to crash reports.
5316
5321
5317 2002-02-12 Fernando Perez <fperez@colorado.edu>
5322 2002-02-12 Fernando Perez <fperez@colorado.edu>
5318
5323
5319 * Released 0.2.5.
5324 * Released 0.2.5.
5320
5325
5321 2002-02-11 Fernando Perez <fperez@colorado.edu>
5326 2002-02-11 Fernando Perez <fperez@colorado.edu>
5322
5327
5323 * Wrote a relatively complete Windows installer. It puts
5328 * Wrote a relatively complete Windows installer. It puts
5324 everything in place, creates Start Menu entries and fixes the
5329 everything in place, creates Start Menu entries and fixes the
5325 color issues. Nothing fancy, but it works.
5330 color issues. Nothing fancy, but it works.
5326
5331
5327 2002-02-10 Fernando Perez <fperez@colorado.edu>
5332 2002-02-10 Fernando Perez <fperez@colorado.edu>
5328
5333
5329 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
5334 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
5330 os.path.expanduser() call so that we can type @run ~/myfile.py and
5335 os.path.expanduser() call so that we can type @run ~/myfile.py and
5331 have thigs work as expected.
5336 have thigs work as expected.
5332
5337
5333 * IPython/genutils.py (page): fixed exception handling so things
5338 * IPython/genutils.py (page): fixed exception handling so things
5334 work both in Unix and Windows correctly. Quitting a pager triggers
5339 work both in Unix and Windows correctly. Quitting a pager triggers
5335 an IOError/broken pipe in Unix, and in windows not finding a pager
5340 an IOError/broken pipe in Unix, and in windows not finding a pager
5336 is also an IOError, so I had to actually look at the return value
5341 is also an IOError, so I had to actually look at the return value
5337 of the exception, not just the exception itself. Should be ok now.
5342 of the exception, not just the exception itself. Should be ok now.
5338
5343
5339 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
5344 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
5340 modified to allow case-insensitive color scheme changes.
5345 modified to allow case-insensitive color scheme changes.
5341
5346
5342 2002-02-09 Fernando Perez <fperez@colorado.edu>
5347 2002-02-09 Fernando Perez <fperez@colorado.edu>
5343
5348
5344 * IPython/genutils.py (native_line_ends): new function to leave
5349 * IPython/genutils.py (native_line_ends): new function to leave
5345 user config files with os-native line-endings.
5350 user config files with os-native line-endings.
5346
5351
5347 * README and manual updates.
5352 * README and manual updates.
5348
5353
5349 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
5354 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
5350 instead of StringType to catch Unicode strings.
5355 instead of StringType to catch Unicode strings.
5351
5356
5352 * IPython/genutils.py (filefind): fixed bug for paths with
5357 * IPython/genutils.py (filefind): fixed bug for paths with
5353 embedded spaces (very common in Windows).
5358 embedded spaces (very common in Windows).
5354
5359
5355 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
5360 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
5356 files under Windows, so that they get automatically associated
5361 files under Windows, so that they get automatically associated
5357 with a text editor. Windows makes it a pain to handle
5362 with a text editor. Windows makes it a pain to handle
5358 extension-less files.
5363 extension-less files.
5359
5364
5360 * IPython/iplib.py (InteractiveShell.init_readline): Made the
5365 * IPython/iplib.py (InteractiveShell.init_readline): Made the
5361 warning about readline only occur for Posix. In Windows there's no
5366 warning about readline only occur for Posix. In Windows there's no
5362 way to get readline, so why bother with the warning.
5367 way to get readline, so why bother with the warning.
5363
5368
5364 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
5369 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
5365 for __str__ instead of dir(self), since dir() changed in 2.2.
5370 for __str__ instead of dir(self), since dir() changed in 2.2.
5366
5371
5367 * Ported to Windows! Tested on XP, I suspect it should work fine
5372 * Ported to Windows! Tested on XP, I suspect it should work fine
5368 on NT/2000, but I don't think it will work on 98 et al. That
5373 on NT/2000, but I don't think it will work on 98 et al. That
5369 series of Windows is such a piece of junk anyway that I won't try
5374 series of Windows is such a piece of junk anyway that I won't try
5370 porting it there. The XP port was straightforward, showed a few
5375 porting it there. The XP port was straightforward, showed a few
5371 bugs here and there (fixed all), in particular some string
5376 bugs here and there (fixed all), in particular some string
5372 handling stuff which required considering Unicode strings (which
5377 handling stuff which required considering Unicode strings (which
5373 Windows uses). This is good, but hasn't been too tested :) No
5378 Windows uses). This is good, but hasn't been too tested :) No
5374 fancy installer yet, I'll put a note in the manual so people at
5379 fancy installer yet, I'll put a note in the manual so people at
5375 least make manually a shortcut.
5380 least make manually a shortcut.
5376
5381
5377 * IPython/iplib.py (Magic.magic_colors): Unified the color options
5382 * IPython/iplib.py (Magic.magic_colors): Unified the color options
5378 into a single one, "colors". This now controls both prompt and
5383 into a single one, "colors". This now controls both prompt and
5379 exception color schemes, and can be changed both at startup
5384 exception color schemes, and can be changed both at startup
5380 (either via command-line switches or via ipythonrc files) and at
5385 (either via command-line switches or via ipythonrc files) and at
5381 runtime, with @colors.
5386 runtime, with @colors.
5382 (Magic.magic_run): renamed @prun to @run and removed the old
5387 (Magic.magic_run): renamed @prun to @run and removed the old
5383 @run. The two were too similar to warrant keeping both.
5388 @run. The two were too similar to warrant keeping both.
5384
5389
5385 2002-02-03 Fernando Perez <fperez@colorado.edu>
5390 2002-02-03 Fernando Perez <fperez@colorado.edu>
5386
5391
5387 * IPython/iplib.py (install_first_time): Added comment on how to
5392 * IPython/iplib.py (install_first_time): Added comment on how to
5388 configure the color options for first-time users. Put a <return>
5393 configure the color options for first-time users. Put a <return>
5389 request at the end so that small-terminal users get a chance to
5394 request at the end so that small-terminal users get a chance to
5390 read the startup info.
5395 read the startup info.
5391
5396
5392 2002-01-23 Fernando Perez <fperez@colorado.edu>
5397 2002-01-23 Fernando Perez <fperez@colorado.edu>
5393
5398
5394 * IPython/iplib.py (CachedOutput.update): Changed output memory
5399 * IPython/iplib.py (CachedOutput.update): Changed output memory
5395 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
5400 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
5396 input history we still use _i. Did this b/c these variable are
5401 input history we still use _i. Did this b/c these variable are
5397 very commonly used in interactive work, so the less we need to
5402 very commonly used in interactive work, so the less we need to
5398 type the better off we are.
5403 type the better off we are.
5399 (Magic.magic_prun): updated @prun to better handle the namespaces
5404 (Magic.magic_prun): updated @prun to better handle the namespaces
5400 the file will run in, including a fix for __name__ not being set
5405 the file will run in, including a fix for __name__ not being set
5401 before.
5406 before.
5402
5407
5403 2002-01-20 Fernando Perez <fperez@colorado.edu>
5408 2002-01-20 Fernando Perez <fperez@colorado.edu>
5404
5409
5405 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
5410 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
5406 extra garbage for Python 2.2. Need to look more carefully into
5411 extra garbage for Python 2.2. Need to look more carefully into
5407 this later.
5412 this later.
5408
5413
5409 2002-01-19 Fernando Perez <fperez@colorado.edu>
5414 2002-01-19 Fernando Perez <fperez@colorado.edu>
5410
5415
5411 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
5416 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
5412 display SyntaxError exceptions properly formatted when they occur
5417 display SyntaxError exceptions properly formatted when they occur
5413 (they can be triggered by imported code).
5418 (they can be triggered by imported code).
5414
5419
5415 2002-01-18 Fernando Perez <fperez@colorado.edu>
5420 2002-01-18 Fernando Perez <fperez@colorado.edu>
5416
5421
5417 * IPython/iplib.py (InteractiveShell.safe_execfile): now
5422 * IPython/iplib.py (InteractiveShell.safe_execfile): now
5418 SyntaxError exceptions are reported nicely formatted, instead of
5423 SyntaxError exceptions are reported nicely formatted, instead of
5419 spitting out only offset information as before.
5424 spitting out only offset information as before.
5420 (Magic.magic_prun): Added the @prun function for executing
5425 (Magic.magic_prun): Added the @prun function for executing
5421 programs with command line args inside IPython.
5426 programs with command line args inside IPython.
5422
5427
5423 2002-01-16 Fernando Perez <fperez@colorado.edu>
5428 2002-01-16 Fernando Perez <fperez@colorado.edu>
5424
5429
5425 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
5430 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
5426 to *not* include the last item given in a range. This brings their
5431 to *not* include the last item given in a range. This brings their
5427 behavior in line with Python's slicing:
5432 behavior in line with Python's slicing:
5428 a[n1:n2] -> a[n1]...a[n2-1]
5433 a[n1:n2] -> a[n1]...a[n2-1]
5429 It may be a bit less convenient, but I prefer to stick to Python's
5434 It may be a bit less convenient, but I prefer to stick to Python's
5430 conventions *everywhere*, so users never have to wonder.
5435 conventions *everywhere*, so users never have to wonder.
5431 (Magic.magic_macro): Added @macro function to ease the creation of
5436 (Magic.magic_macro): Added @macro function to ease the creation of
5432 macros.
5437 macros.
5433
5438
5434 2002-01-05 Fernando Perez <fperez@colorado.edu>
5439 2002-01-05 Fernando Perez <fperez@colorado.edu>
5435
5440
5436 * Released 0.2.4.
5441 * Released 0.2.4.
5437
5442
5438 * IPython/iplib.py (Magic.magic_pdef):
5443 * IPython/iplib.py (Magic.magic_pdef):
5439 (InteractiveShell.safe_execfile): report magic lines and error
5444 (InteractiveShell.safe_execfile): report magic lines and error
5440 lines without line numbers so one can easily copy/paste them for
5445 lines without line numbers so one can easily copy/paste them for
5441 re-execution.
5446 re-execution.
5442
5447
5443 * Updated manual with recent changes.
5448 * Updated manual with recent changes.
5444
5449
5445 * IPython/iplib.py (Magic.magic_oinfo): added constructor
5450 * IPython/iplib.py (Magic.magic_oinfo): added constructor
5446 docstring printing when class? is called. Very handy for knowing
5451 docstring printing when class? is called. Very handy for knowing
5447 how to create class instances (as long as __init__ is well
5452 how to create class instances (as long as __init__ is well
5448 documented, of course :)
5453 documented, of course :)
5449 (Magic.magic_doc): print both class and constructor docstrings.
5454 (Magic.magic_doc): print both class and constructor docstrings.
5450 (Magic.magic_pdef): give constructor info if passed a class and
5455 (Magic.magic_pdef): give constructor info if passed a class and
5451 __call__ info for callable object instances.
5456 __call__ info for callable object instances.
5452
5457
5453 2002-01-04 Fernando Perez <fperez@colorado.edu>
5458 2002-01-04 Fernando Perez <fperez@colorado.edu>
5454
5459
5455 * Made deep_reload() off by default. It doesn't always work
5460 * Made deep_reload() off by default. It doesn't always work
5456 exactly as intended, so it's probably safer to have it off. It's
5461 exactly as intended, so it's probably safer to have it off. It's
5457 still available as dreload() anyway, so nothing is lost.
5462 still available as dreload() anyway, so nothing is lost.
5458
5463
5459 2002-01-02 Fernando Perez <fperez@colorado.edu>
5464 2002-01-02 Fernando Perez <fperez@colorado.edu>
5460
5465
5461 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
5466 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
5462 so I wanted an updated release).
5467 so I wanted an updated release).
5463
5468
5464 2001-12-27 Fernando Perez <fperez@colorado.edu>
5469 2001-12-27 Fernando Perez <fperez@colorado.edu>
5465
5470
5466 * IPython/iplib.py (InteractiveShell.interact): Added the original
5471 * IPython/iplib.py (InteractiveShell.interact): Added the original
5467 code from 'code.py' for this module in order to change the
5472 code from 'code.py' for this module in order to change the
5468 handling of a KeyboardInterrupt. This was necessary b/c otherwise
5473 handling of a KeyboardInterrupt. This was necessary b/c otherwise
5469 the history cache would break when the user hit Ctrl-C, and
5474 the history cache would break when the user hit Ctrl-C, and
5470 interact() offers no way to add any hooks to it.
5475 interact() offers no way to add any hooks to it.
5471
5476
5472 2001-12-23 Fernando Perez <fperez@colorado.edu>
5477 2001-12-23 Fernando Perez <fperez@colorado.edu>
5473
5478
5474 * setup.py: added check for 'MANIFEST' before trying to remove
5479 * setup.py: added check for 'MANIFEST' before trying to remove
5475 it. Thanks to Sean Reifschneider.
5480 it. Thanks to Sean Reifschneider.
5476
5481
5477 2001-12-22 Fernando Perez <fperez@colorado.edu>
5482 2001-12-22 Fernando Perez <fperez@colorado.edu>
5478
5483
5479 * Released 0.2.2.
5484 * Released 0.2.2.
5480
5485
5481 * Finished (reasonably) writing the manual. Later will add the
5486 * Finished (reasonably) writing the manual. Later will add the
5482 python-standard navigation stylesheets, but for the time being
5487 python-standard navigation stylesheets, but for the time being
5483 it's fairly complete. Distribution will include html and pdf
5488 it's fairly complete. Distribution will include html and pdf
5484 versions.
5489 versions.
5485
5490
5486 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
5491 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
5487 (MayaVi author).
5492 (MayaVi author).
5488
5493
5489 2001-12-21 Fernando Perez <fperez@colorado.edu>
5494 2001-12-21 Fernando Perez <fperez@colorado.edu>
5490
5495
5491 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
5496 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
5492 good public release, I think (with the manual and the distutils
5497 good public release, I think (with the manual and the distutils
5493 installer). The manual can use some work, but that can go
5498 installer). The manual can use some work, but that can go
5494 slowly. Otherwise I think it's quite nice for end users. Next
5499 slowly. Otherwise I think it's quite nice for end users. Next
5495 summer, rewrite the guts of it...
5500 summer, rewrite the guts of it...
5496
5501
5497 * Changed format of ipythonrc files to use whitespace as the
5502 * Changed format of ipythonrc files to use whitespace as the
5498 separator instead of an explicit '='. Cleaner.
5503 separator instead of an explicit '='. Cleaner.
5499
5504
5500 2001-12-20 Fernando Perez <fperez@colorado.edu>
5505 2001-12-20 Fernando Perez <fperez@colorado.edu>
5501
5506
5502 * Started a manual in LyX. For now it's just a quick merge of the
5507 * Started a manual in LyX. For now it's just a quick merge of the
5503 various internal docstrings and READMEs. Later it may grow into a
5508 various internal docstrings and READMEs. Later it may grow into a
5504 nice, full-blown manual.
5509 nice, full-blown manual.
5505
5510
5506 * Set up a distutils based installer. Installation should now be
5511 * Set up a distutils based installer. Installation should now be
5507 trivially simple for end-users.
5512 trivially simple for end-users.
5508
5513
5509 2001-12-11 Fernando Perez <fperez@colorado.edu>
5514 2001-12-11 Fernando Perez <fperez@colorado.edu>
5510
5515
5511 * Released 0.2.0. First public release, announced it at
5516 * Released 0.2.0. First public release, announced it at
5512 comp.lang.python. From now on, just bugfixes...
5517 comp.lang.python. From now on, just bugfixes...
5513
5518
5514 * Went through all the files, set copyright/license notices and
5519 * Went through all the files, set copyright/license notices and
5515 cleaned up things. Ready for release.
5520 cleaned up things. Ready for release.
5516
5521
5517 2001-12-10 Fernando Perez <fperez@colorado.edu>
5522 2001-12-10 Fernando Perez <fperez@colorado.edu>
5518
5523
5519 * Changed the first-time installer not to use tarfiles. It's more
5524 * Changed the first-time installer not to use tarfiles. It's more
5520 robust now and less unix-dependent. Also makes it easier for
5525 robust now and less unix-dependent. Also makes it easier for
5521 people to later upgrade versions.
5526 people to later upgrade versions.
5522
5527
5523 * Changed @exit to @abort to reflect the fact that it's pretty
5528 * Changed @exit to @abort to reflect the fact that it's pretty
5524 brutal (a sys.exit()). The difference between @abort and Ctrl-D
5529 brutal (a sys.exit()). The difference between @abort and Ctrl-D
5525 becomes significant only when IPyhton is embedded: in that case,
5530 becomes significant only when IPyhton is embedded: in that case,
5526 C-D closes IPython only, but @abort kills the enclosing program
5531 C-D closes IPython only, but @abort kills the enclosing program
5527 too (unless it had called IPython inside a try catching
5532 too (unless it had called IPython inside a try catching
5528 SystemExit).
5533 SystemExit).
5529
5534
5530 * Created Shell module which exposes the actuall IPython Shell
5535 * Created Shell module which exposes the actuall IPython Shell
5531 classes, currently the normal and the embeddable one. This at
5536 classes, currently the normal and the embeddable one. This at
5532 least offers a stable interface we won't need to change when
5537 least offers a stable interface we won't need to change when
5533 (later) the internals are rewritten. That rewrite will be confined
5538 (later) the internals are rewritten. That rewrite will be confined
5534 to iplib and ipmaker, but the Shell interface should remain as is.
5539 to iplib and ipmaker, but the Shell interface should remain as is.
5535
5540
5536 * Added embed module which offers an embeddable IPShell object,
5541 * Added embed module which offers an embeddable IPShell object,
5537 useful to fire up IPython *inside* a running program. Great for
5542 useful to fire up IPython *inside* a running program. Great for
5538 debugging or dynamical data analysis.
5543 debugging or dynamical data analysis.
5539
5544
5540 2001-12-08 Fernando Perez <fperez@colorado.edu>
5545 2001-12-08 Fernando Perez <fperez@colorado.edu>
5541
5546
5542 * Fixed small bug preventing seeing info from methods of defined
5547 * Fixed small bug preventing seeing info from methods of defined
5543 objects (incorrect namespace in _ofind()).
5548 objects (incorrect namespace in _ofind()).
5544
5549
5545 * Documentation cleanup. Moved the main usage docstrings to a
5550 * Documentation cleanup. Moved the main usage docstrings to a
5546 separate file, usage.py (cleaner to maintain, and hopefully in the
5551 separate file, usage.py (cleaner to maintain, and hopefully in the
5547 future some perlpod-like way of producing interactive, man and
5552 future some perlpod-like way of producing interactive, man and
5548 html docs out of it will be found).
5553 html docs out of it will be found).
5549
5554
5550 * Added @profile to see your profile at any time.
5555 * Added @profile to see your profile at any time.
5551
5556
5552 * Added @p as an alias for 'print'. It's especially convenient if
5557 * Added @p as an alias for 'print'. It's especially convenient if
5553 using automagic ('p x' prints x).
5558 using automagic ('p x' prints x).
5554
5559
5555 * Small cleanups and fixes after a pychecker run.
5560 * Small cleanups and fixes after a pychecker run.
5556
5561
5557 * Changed the @cd command to handle @cd - and @cd -<n> for
5562 * Changed the @cd command to handle @cd - and @cd -<n> for
5558 visiting any directory in _dh.
5563 visiting any directory in _dh.
5559
5564
5560 * Introduced _dh, a history of visited directories. @dhist prints
5565 * Introduced _dh, a history of visited directories. @dhist prints
5561 it out with numbers.
5566 it out with numbers.
5562
5567
5563 2001-12-07 Fernando Perez <fperez@colorado.edu>
5568 2001-12-07 Fernando Perez <fperez@colorado.edu>
5564
5569
5565 * Released 0.1.22
5570 * Released 0.1.22
5566
5571
5567 * Made initialization a bit more robust against invalid color
5572 * Made initialization a bit more robust against invalid color
5568 options in user input (exit, not traceback-crash).
5573 options in user input (exit, not traceback-crash).
5569
5574
5570 * Changed the bug crash reporter to write the report only in the
5575 * Changed the bug crash reporter to write the report only in the
5571 user's .ipython directory. That way IPython won't litter people's
5576 user's .ipython directory. That way IPython won't litter people's
5572 hard disks with crash files all over the place. Also print on
5577 hard disks with crash files all over the place. Also print on
5573 screen the necessary mail command.
5578 screen the necessary mail command.
5574
5579
5575 * With the new ultraTB, implemented LightBG color scheme for light
5580 * With the new ultraTB, implemented LightBG color scheme for light
5576 background terminals. A lot of people like white backgrounds, so I
5581 background terminals. A lot of people like white backgrounds, so I
5577 guess we should at least give them something readable.
5582 guess we should at least give them something readable.
5578
5583
5579 2001-12-06 Fernando Perez <fperez@colorado.edu>
5584 2001-12-06 Fernando Perez <fperez@colorado.edu>
5580
5585
5581 * Modified the structure of ultraTB. Now there's a proper class
5586 * Modified the structure of ultraTB. Now there's a proper class
5582 for tables of color schemes which allow adding schemes easily and
5587 for tables of color schemes which allow adding schemes easily and
5583 switching the active scheme without creating a new instance every
5588 switching the active scheme without creating a new instance every
5584 time (which was ridiculous). The syntax for creating new schemes
5589 time (which was ridiculous). The syntax for creating new schemes
5585 is also cleaner. I think ultraTB is finally done, with a clean
5590 is also cleaner. I think ultraTB is finally done, with a clean
5586 class structure. Names are also much cleaner (now there's proper
5591 class structure. Names are also much cleaner (now there's proper
5587 color tables, no need for every variable to also have 'color' in
5592 color tables, no need for every variable to also have 'color' in
5588 its name).
5593 its name).
5589
5594
5590 * Broke down genutils into separate files. Now genutils only
5595 * Broke down genutils into separate files. Now genutils only
5591 contains utility functions, and classes have been moved to their
5596 contains utility functions, and classes have been moved to their
5592 own files (they had enough independent functionality to warrant
5597 own files (they had enough independent functionality to warrant
5593 it): ConfigLoader, OutputTrap, Struct.
5598 it): ConfigLoader, OutputTrap, Struct.
5594
5599
5595 2001-12-05 Fernando Perez <fperez@colorado.edu>
5600 2001-12-05 Fernando Perez <fperez@colorado.edu>
5596
5601
5597 * IPython turns 21! Released version 0.1.21, as a candidate for
5602 * IPython turns 21! Released version 0.1.21, as a candidate for
5598 public consumption. If all goes well, release in a few days.
5603 public consumption. If all goes well, release in a few days.
5599
5604
5600 * Fixed path bug (files in Extensions/ directory wouldn't be found
5605 * Fixed path bug (files in Extensions/ directory wouldn't be found
5601 unless IPython/ was explicitly in sys.path).
5606 unless IPython/ was explicitly in sys.path).
5602
5607
5603 * Extended the FlexCompleter class as MagicCompleter to allow
5608 * Extended the FlexCompleter class as MagicCompleter to allow
5604 completion of @-starting lines.
5609 completion of @-starting lines.
5605
5610
5606 * Created __release__.py file as a central repository for release
5611 * Created __release__.py file as a central repository for release
5607 info that other files can read from.
5612 info that other files can read from.
5608
5613
5609 * Fixed small bug in logging: when logging was turned on in
5614 * Fixed small bug in logging: when logging was turned on in
5610 mid-session, old lines with special meanings (!@?) were being
5615 mid-session, old lines with special meanings (!@?) were being
5611 logged without the prepended comment, which is necessary since
5616 logged without the prepended comment, which is necessary since
5612 they are not truly valid python syntax. This should make session
5617 they are not truly valid python syntax. This should make session
5613 restores produce less errors.
5618 restores produce less errors.
5614
5619
5615 * The namespace cleanup forced me to make a FlexCompleter class
5620 * The namespace cleanup forced me to make a FlexCompleter class
5616 which is nothing but a ripoff of rlcompleter, but with selectable
5621 which is nothing but a ripoff of rlcompleter, but with selectable
5617 namespace (rlcompleter only works in __main__.__dict__). I'll try
5622 namespace (rlcompleter only works in __main__.__dict__). I'll try
5618 to submit a note to the authors to see if this change can be
5623 to submit a note to the authors to see if this change can be
5619 incorporated in future rlcompleter releases (Dec.6: done)
5624 incorporated in future rlcompleter releases (Dec.6: done)
5620
5625
5621 * More fixes to namespace handling. It was a mess! Now all
5626 * More fixes to namespace handling. It was a mess! Now all
5622 explicit references to __main__.__dict__ are gone (except when
5627 explicit references to __main__.__dict__ are gone (except when
5623 really needed) and everything is handled through the namespace
5628 really needed) and everything is handled through the namespace
5624 dicts in the IPython instance. We seem to be getting somewhere
5629 dicts in the IPython instance. We seem to be getting somewhere
5625 with this, finally...
5630 with this, finally...
5626
5631
5627 * Small documentation updates.
5632 * Small documentation updates.
5628
5633
5629 * Created the Extensions directory under IPython (with an
5634 * Created the Extensions directory under IPython (with an
5630 __init__.py). Put the PhysicalQ stuff there. This directory should
5635 __init__.py). Put the PhysicalQ stuff there. This directory should
5631 be used for all special-purpose extensions.
5636 be used for all special-purpose extensions.
5632
5637
5633 * File renaming:
5638 * File renaming:
5634 ipythonlib --> ipmaker
5639 ipythonlib --> ipmaker
5635 ipplib --> iplib
5640 ipplib --> iplib
5636 This makes a bit more sense in terms of what these files actually do.
5641 This makes a bit more sense in terms of what these files actually do.
5637
5642
5638 * Moved all the classes and functions in ipythonlib to ipplib, so
5643 * Moved all the classes and functions in ipythonlib to ipplib, so
5639 now ipythonlib only has make_IPython(). This will ease up its
5644 now ipythonlib only has make_IPython(). This will ease up its
5640 splitting in smaller functional chunks later.
5645 splitting in smaller functional chunks later.
5641
5646
5642 * Cleaned up (done, I think) output of @whos. Better column
5647 * Cleaned up (done, I think) output of @whos. Better column
5643 formatting, and now shows str(var) for as much as it can, which is
5648 formatting, and now shows str(var) for as much as it can, which is
5644 typically what one gets with a 'print var'.
5649 typically what one gets with a 'print var'.
5645
5650
5646 2001-12-04 Fernando Perez <fperez@colorado.edu>
5651 2001-12-04 Fernando Perez <fperez@colorado.edu>
5647
5652
5648 * Fixed namespace problems. Now builtin/IPyhton/user names get
5653 * Fixed namespace problems. Now builtin/IPyhton/user names get
5649 properly reported in their namespace. Internal namespace handling
5654 properly reported in their namespace. Internal namespace handling
5650 is finally getting decent (not perfect yet, but much better than
5655 is finally getting decent (not perfect yet, but much better than
5651 the ad-hoc mess we had).
5656 the ad-hoc mess we had).
5652
5657
5653 * Removed -exit option. If people just want to run a python
5658 * Removed -exit option. If people just want to run a python
5654 script, that's what the normal interpreter is for. Less
5659 script, that's what the normal interpreter is for. Less
5655 unnecessary options, less chances for bugs.
5660 unnecessary options, less chances for bugs.
5656
5661
5657 * Added a crash handler which generates a complete post-mortem if
5662 * Added a crash handler which generates a complete post-mortem if
5658 IPython crashes. This will help a lot in tracking bugs down the
5663 IPython crashes. This will help a lot in tracking bugs down the
5659 road.
5664 road.
5660
5665
5661 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5666 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5662 which were boud to functions being reassigned would bypass the
5667 which were boud to functions being reassigned would bypass the
5663 logger, breaking the sync of _il with the prompt counter. This
5668 logger, breaking the sync of _il with the prompt counter. This
5664 would then crash IPython later when a new line was logged.
5669 would then crash IPython later when a new line was logged.
5665
5670
5666 2001-12-02 Fernando Perez <fperez@colorado.edu>
5671 2001-12-02 Fernando Perez <fperez@colorado.edu>
5667
5672
5668 * Made IPython a package. This means people don't have to clutter
5673 * Made IPython a package. This means people don't have to clutter
5669 their sys.path with yet another directory. Changed the INSTALL
5674 their sys.path with yet another directory. Changed the INSTALL
5670 file accordingly.
5675 file accordingly.
5671
5676
5672 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5677 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5673 sorts its output (so @who shows it sorted) and @whos formats the
5678 sorts its output (so @who shows it sorted) and @whos formats the
5674 table according to the width of the first column. Nicer, easier to
5679 table according to the width of the first column. Nicer, easier to
5675 read. Todo: write a generic table_format() which takes a list of
5680 read. Todo: write a generic table_format() which takes a list of
5676 lists and prints it nicely formatted, with optional row/column
5681 lists and prints it nicely formatted, with optional row/column
5677 separators and proper padding and justification.
5682 separators and proper padding and justification.
5678
5683
5679 * Released 0.1.20
5684 * Released 0.1.20
5680
5685
5681 * Fixed bug in @log which would reverse the inputcache list (a
5686 * Fixed bug in @log which would reverse the inputcache list (a
5682 copy operation was missing).
5687 copy operation was missing).
5683
5688
5684 * Code cleanup. @config was changed to use page(). Better, since
5689 * Code cleanup. @config was changed to use page(). Better, since
5685 its output is always quite long.
5690 its output is always quite long.
5686
5691
5687 * Itpl is back as a dependency. I was having too many problems
5692 * Itpl is back as a dependency. I was having too many problems
5688 getting the parametric aliases to work reliably, and it's just
5693 getting the parametric aliases to work reliably, and it's just
5689 easier to code weird string operations with it than playing %()s
5694 easier to code weird string operations with it than playing %()s
5690 games. It's only ~6k, so I don't think it's too big a deal.
5695 games. It's only ~6k, so I don't think it's too big a deal.
5691
5696
5692 * Found (and fixed) a very nasty bug with history. !lines weren't
5697 * Found (and fixed) a very nasty bug with history. !lines weren't
5693 getting cached, and the out of sync caches would crash
5698 getting cached, and the out of sync caches would crash
5694 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5699 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5695 division of labor a bit better. Bug fixed, cleaner structure.
5700 division of labor a bit better. Bug fixed, cleaner structure.
5696
5701
5697 2001-12-01 Fernando Perez <fperez@colorado.edu>
5702 2001-12-01 Fernando Perez <fperez@colorado.edu>
5698
5703
5699 * Released 0.1.19
5704 * Released 0.1.19
5700
5705
5701 * Added option -n to @hist to prevent line number printing. Much
5706 * Added option -n to @hist to prevent line number printing. Much
5702 easier to copy/paste code this way.
5707 easier to copy/paste code this way.
5703
5708
5704 * Created global _il to hold the input list. Allows easy
5709 * Created global _il to hold the input list. Allows easy
5705 re-execution of blocks of code by slicing it (inspired by Janko's
5710 re-execution of blocks of code by slicing it (inspired by Janko's
5706 comment on 'macros').
5711 comment on 'macros').
5707
5712
5708 * Small fixes and doc updates.
5713 * Small fixes and doc updates.
5709
5714
5710 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5715 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5711 much too fragile with automagic. Handles properly multi-line
5716 much too fragile with automagic. Handles properly multi-line
5712 statements and takes parameters.
5717 statements and takes parameters.
5713
5718
5714 2001-11-30 Fernando Perez <fperez@colorado.edu>
5719 2001-11-30 Fernando Perez <fperez@colorado.edu>
5715
5720
5716 * Version 0.1.18 released.
5721 * Version 0.1.18 released.
5717
5722
5718 * Fixed nasty namespace bug in initial module imports.
5723 * Fixed nasty namespace bug in initial module imports.
5719
5724
5720 * Added copyright/license notes to all code files (except
5725 * Added copyright/license notes to all code files (except
5721 DPyGetOpt). For the time being, LGPL. That could change.
5726 DPyGetOpt). For the time being, LGPL. That could change.
5722
5727
5723 * Rewrote a much nicer README, updated INSTALL, cleaned up
5728 * Rewrote a much nicer README, updated INSTALL, cleaned up
5724 ipythonrc-* samples.
5729 ipythonrc-* samples.
5725
5730
5726 * Overall code/documentation cleanup. Basically ready for
5731 * Overall code/documentation cleanup. Basically ready for
5727 release. Only remaining thing: licence decision (LGPL?).
5732 release. Only remaining thing: licence decision (LGPL?).
5728
5733
5729 * Converted load_config to a class, ConfigLoader. Now recursion
5734 * Converted load_config to a class, ConfigLoader. Now recursion
5730 control is better organized. Doesn't include the same file twice.
5735 control is better organized. Doesn't include the same file twice.
5731
5736
5732 2001-11-29 Fernando Perez <fperez@colorado.edu>
5737 2001-11-29 Fernando Perez <fperez@colorado.edu>
5733
5738
5734 * Got input history working. Changed output history variables from
5739 * Got input history working. Changed output history variables from
5735 _p to _o so that _i is for input and _o for output. Just cleaner
5740 _p to _o so that _i is for input and _o for output. Just cleaner
5736 convention.
5741 convention.
5737
5742
5738 * Implemented parametric aliases. This pretty much allows the
5743 * Implemented parametric aliases. This pretty much allows the
5739 alias system to offer full-blown shell convenience, I think.
5744 alias system to offer full-blown shell convenience, I think.
5740
5745
5741 * Version 0.1.17 released, 0.1.18 opened.
5746 * Version 0.1.17 released, 0.1.18 opened.
5742
5747
5743 * dot_ipython/ipythonrc (alias): added documentation.
5748 * dot_ipython/ipythonrc (alias): added documentation.
5744 (xcolor): Fixed small bug (xcolors -> xcolor)
5749 (xcolor): Fixed small bug (xcolors -> xcolor)
5745
5750
5746 * Changed the alias system. Now alias is a magic command to define
5751 * Changed the alias system. Now alias is a magic command to define
5747 aliases just like the shell. Rationale: the builtin magics should
5752 aliases just like the shell. Rationale: the builtin magics should
5748 be there for things deeply connected to IPython's
5753 be there for things deeply connected to IPython's
5749 architecture. And this is a much lighter system for what I think
5754 architecture. And this is a much lighter system for what I think
5750 is the really important feature: allowing users to define quickly
5755 is the really important feature: allowing users to define quickly
5751 magics that will do shell things for them, so they can customize
5756 magics that will do shell things for them, so they can customize
5752 IPython easily to match their work habits. If someone is really
5757 IPython easily to match their work habits. If someone is really
5753 desperate to have another name for a builtin alias, they can
5758 desperate to have another name for a builtin alias, they can
5754 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5759 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5755 works.
5760 works.
5756
5761
5757 2001-11-28 Fernando Perez <fperez@colorado.edu>
5762 2001-11-28 Fernando Perez <fperez@colorado.edu>
5758
5763
5759 * Changed @file so that it opens the source file at the proper
5764 * Changed @file so that it opens the source file at the proper
5760 line. Since it uses less, if your EDITOR environment is
5765 line. Since it uses less, if your EDITOR environment is
5761 configured, typing v will immediately open your editor of choice
5766 configured, typing v will immediately open your editor of choice
5762 right at the line where the object is defined. Not as quick as
5767 right at the line where the object is defined. Not as quick as
5763 having a direct @edit command, but for all intents and purposes it
5768 having a direct @edit command, but for all intents and purposes it
5764 works. And I don't have to worry about writing @edit to deal with
5769 works. And I don't have to worry about writing @edit to deal with
5765 all the editors, less does that.
5770 all the editors, less does that.
5766
5771
5767 * Version 0.1.16 released, 0.1.17 opened.
5772 * Version 0.1.16 released, 0.1.17 opened.
5768
5773
5769 * Fixed some nasty bugs in the page/page_dumb combo that could
5774 * Fixed some nasty bugs in the page/page_dumb combo that could
5770 crash IPython.
5775 crash IPython.
5771
5776
5772 2001-11-27 Fernando Perez <fperez@colorado.edu>
5777 2001-11-27 Fernando Perez <fperez@colorado.edu>
5773
5778
5774 * Version 0.1.15 released, 0.1.16 opened.
5779 * Version 0.1.15 released, 0.1.16 opened.
5775
5780
5776 * Finally got ? and ?? to work for undefined things: now it's
5781 * Finally got ? and ?? to work for undefined things: now it's
5777 possible to type {}.get? and get information about the get method
5782 possible to type {}.get? and get information about the get method
5778 of dicts, or os.path? even if only os is defined (so technically
5783 of dicts, or os.path? even if only os is defined (so technically
5779 os.path isn't). Works at any level. For example, after import os,
5784 os.path isn't). Works at any level. For example, after import os,
5780 os?, os.path?, os.path.abspath? all work. This is great, took some
5785 os?, os.path?, os.path.abspath? all work. This is great, took some
5781 work in _ofind.
5786 work in _ofind.
5782
5787
5783 * Fixed more bugs with logging. The sanest way to do it was to add
5788 * Fixed more bugs with logging. The sanest way to do it was to add
5784 to @log a 'mode' parameter. Killed two in one shot (this mode
5789 to @log a 'mode' parameter. Killed two in one shot (this mode
5785 option was a request of Janko's). I think it's finally clean
5790 option was a request of Janko's). I think it's finally clean
5786 (famous last words).
5791 (famous last words).
5787
5792
5788 * Added a page_dumb() pager which does a decent job of paging on
5793 * Added a page_dumb() pager which does a decent job of paging on
5789 screen, if better things (like less) aren't available. One less
5794 screen, if better things (like less) aren't available. One less
5790 unix dependency (someday maybe somebody will port this to
5795 unix dependency (someday maybe somebody will port this to
5791 windows).
5796 windows).
5792
5797
5793 * Fixed problem in magic_log: would lock of logging out if log
5798 * Fixed problem in magic_log: would lock of logging out if log
5794 creation failed (because it would still think it had succeeded).
5799 creation failed (because it would still think it had succeeded).
5795
5800
5796 * Improved the page() function using curses to auto-detect screen
5801 * Improved the page() function using curses to auto-detect screen
5797 size. Now it can make a much better decision on whether to print
5802 size. Now it can make a much better decision on whether to print
5798 or page a string. Option screen_length was modified: a value 0
5803 or page a string. Option screen_length was modified: a value 0
5799 means auto-detect, and that's the default now.
5804 means auto-detect, and that's the default now.
5800
5805
5801 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5806 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5802 go out. I'll test it for a few days, then talk to Janko about
5807 go out. I'll test it for a few days, then talk to Janko about
5803 licences and announce it.
5808 licences and announce it.
5804
5809
5805 * Fixed the length of the auto-generated ---> prompt which appears
5810 * Fixed the length of the auto-generated ---> prompt which appears
5806 for auto-parens and auto-quotes. Getting this right isn't trivial,
5811 for auto-parens and auto-quotes. Getting this right isn't trivial,
5807 with all the color escapes, different prompt types and optional
5812 with all the color escapes, different prompt types and optional
5808 separators. But it seems to be working in all the combinations.
5813 separators. But it seems to be working in all the combinations.
5809
5814
5810 2001-11-26 Fernando Perez <fperez@colorado.edu>
5815 2001-11-26 Fernando Perez <fperez@colorado.edu>
5811
5816
5812 * Wrote a regexp filter to get option types from the option names
5817 * Wrote a regexp filter to get option types from the option names
5813 string. This eliminates the need to manually keep two duplicate
5818 string. This eliminates the need to manually keep two duplicate
5814 lists.
5819 lists.
5815
5820
5816 * Removed the unneeded check_option_names. Now options are handled
5821 * Removed the unneeded check_option_names. Now options are handled
5817 in a much saner manner and it's easy to visually check that things
5822 in a much saner manner and it's easy to visually check that things
5818 are ok.
5823 are ok.
5819
5824
5820 * Updated version numbers on all files I modified to carry a
5825 * Updated version numbers on all files I modified to carry a
5821 notice so Janko and Nathan have clear version markers.
5826 notice so Janko and Nathan have clear version markers.
5822
5827
5823 * Updated docstring for ultraTB with my changes. I should send
5828 * Updated docstring for ultraTB with my changes. I should send
5824 this to Nathan.
5829 this to Nathan.
5825
5830
5826 * Lots of small fixes. Ran everything through pychecker again.
5831 * Lots of small fixes. Ran everything through pychecker again.
5827
5832
5828 * Made loading of deep_reload an cmd line option. If it's not too
5833 * Made loading of deep_reload an cmd line option. If it's not too
5829 kosher, now people can just disable it. With -nodeep_reload it's
5834 kosher, now people can just disable it. With -nodeep_reload it's
5830 still available as dreload(), it just won't overwrite reload().
5835 still available as dreload(), it just won't overwrite reload().
5831
5836
5832 * Moved many options to the no| form (-opt and -noopt
5837 * Moved many options to the no| form (-opt and -noopt
5833 accepted). Cleaner.
5838 accepted). Cleaner.
5834
5839
5835 * Changed magic_log so that if called with no parameters, it uses
5840 * Changed magic_log so that if called with no parameters, it uses
5836 'rotate' mode. That way auto-generated logs aren't automatically
5841 'rotate' mode. That way auto-generated logs aren't automatically
5837 over-written. For normal logs, now a backup is made if it exists
5842 over-written. For normal logs, now a backup is made if it exists
5838 (only 1 level of backups). A new 'backup' mode was added to the
5843 (only 1 level of backups). A new 'backup' mode was added to the
5839 Logger class to support this. This was a request by Janko.
5844 Logger class to support this. This was a request by Janko.
5840
5845
5841 * Added @logoff/@logon to stop/restart an active log.
5846 * Added @logoff/@logon to stop/restart an active log.
5842
5847
5843 * Fixed a lot of bugs in log saving/replay. It was pretty
5848 * Fixed a lot of bugs in log saving/replay. It was pretty
5844 broken. Now special lines (!@,/) appear properly in the command
5849 broken. Now special lines (!@,/) appear properly in the command
5845 history after a log replay.
5850 history after a log replay.
5846
5851
5847 * Tried and failed to implement full session saving via pickle. My
5852 * Tried and failed to implement full session saving via pickle. My
5848 idea was to pickle __main__.__dict__, but modules can't be
5853 idea was to pickle __main__.__dict__, but modules can't be
5849 pickled. This would be a better alternative to replaying logs, but
5854 pickled. This would be a better alternative to replaying logs, but
5850 seems quite tricky to get to work. Changed -session to be called
5855 seems quite tricky to get to work. Changed -session to be called
5851 -logplay, which more accurately reflects what it does. And if we
5856 -logplay, which more accurately reflects what it does. And if we
5852 ever get real session saving working, -session is now available.
5857 ever get real session saving working, -session is now available.
5853
5858
5854 * Implemented color schemes for prompts also. As for tracebacks,
5859 * Implemented color schemes for prompts also. As for tracebacks,
5855 currently only NoColor and Linux are supported. But now the
5860 currently only NoColor and Linux are supported. But now the
5856 infrastructure is in place, based on a generic ColorScheme
5861 infrastructure is in place, based on a generic ColorScheme
5857 class. So writing and activating new schemes both for the prompts
5862 class. So writing and activating new schemes both for the prompts
5858 and the tracebacks should be straightforward.
5863 and the tracebacks should be straightforward.
5859
5864
5860 * Version 0.1.13 released, 0.1.14 opened.
5865 * Version 0.1.13 released, 0.1.14 opened.
5861
5866
5862 * Changed handling of options for output cache. Now counter is
5867 * Changed handling of options for output cache. Now counter is
5863 hardwired starting at 1 and one specifies the maximum number of
5868 hardwired starting at 1 and one specifies the maximum number of
5864 entries *in the outcache* (not the max prompt counter). This is
5869 entries *in the outcache* (not the max prompt counter). This is
5865 much better, since many statements won't increase the cache
5870 much better, since many statements won't increase the cache
5866 count. It also eliminated some confusing options, now there's only
5871 count. It also eliminated some confusing options, now there's only
5867 one: cache_size.
5872 one: cache_size.
5868
5873
5869 * Added 'alias' magic function and magic_alias option in the
5874 * Added 'alias' magic function and magic_alias option in the
5870 ipythonrc file. Now the user can easily define whatever names he
5875 ipythonrc file. Now the user can easily define whatever names he
5871 wants for the magic functions without having to play weird
5876 wants for the magic functions without having to play weird
5872 namespace games. This gives IPython a real shell-like feel.
5877 namespace games. This gives IPython a real shell-like feel.
5873
5878
5874 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5879 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5875 @ or not).
5880 @ or not).
5876
5881
5877 This was one of the last remaining 'visible' bugs (that I know
5882 This was one of the last remaining 'visible' bugs (that I know
5878 of). I think if I can clean up the session loading so it works
5883 of). I think if I can clean up the session loading so it works
5879 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5884 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5880 about licensing).
5885 about licensing).
5881
5886
5882 2001-11-25 Fernando Perez <fperez@colorado.edu>
5887 2001-11-25 Fernando Perez <fperez@colorado.edu>
5883
5888
5884 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5889 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5885 there's a cleaner distinction between what ? and ?? show.
5890 there's a cleaner distinction between what ? and ?? show.
5886
5891
5887 * Added screen_length option. Now the user can define his own
5892 * Added screen_length option. Now the user can define his own
5888 screen size for page() operations.
5893 screen size for page() operations.
5889
5894
5890 * Implemented magic shell-like functions with automatic code
5895 * Implemented magic shell-like functions with automatic code
5891 generation. Now adding another function is just a matter of adding
5896 generation. Now adding another function is just a matter of adding
5892 an entry to a dict, and the function is dynamically generated at
5897 an entry to a dict, and the function is dynamically generated at
5893 run-time. Python has some really cool features!
5898 run-time. Python has some really cool features!
5894
5899
5895 * Renamed many options to cleanup conventions a little. Now all
5900 * Renamed many options to cleanup conventions a little. Now all
5896 are lowercase, and only underscores where needed. Also in the code
5901 are lowercase, and only underscores where needed. Also in the code
5897 option name tables are clearer.
5902 option name tables are clearer.
5898
5903
5899 * Changed prompts a little. Now input is 'In [n]:' instead of
5904 * Changed prompts a little. Now input is 'In [n]:' instead of
5900 'In[n]:='. This allows it the numbers to be aligned with the
5905 'In[n]:='. This allows it the numbers to be aligned with the
5901 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5906 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5902 Python (it was a Mathematica thing). The '...' continuation prompt
5907 Python (it was a Mathematica thing). The '...' continuation prompt
5903 was also changed a little to align better.
5908 was also changed a little to align better.
5904
5909
5905 * Fixed bug when flushing output cache. Not all _p<n> variables
5910 * Fixed bug when flushing output cache. Not all _p<n> variables
5906 exist, so their deletion needs to be wrapped in a try:
5911 exist, so their deletion needs to be wrapped in a try:
5907
5912
5908 * Figured out how to properly use inspect.formatargspec() (it
5913 * Figured out how to properly use inspect.formatargspec() (it
5909 requires the args preceded by *). So I removed all the code from
5914 requires the args preceded by *). So I removed all the code from
5910 _get_pdef in Magic, which was just replicating that.
5915 _get_pdef in Magic, which was just replicating that.
5911
5916
5912 * Added test to prefilter to allow redefining magic function names
5917 * Added test to prefilter to allow redefining magic function names
5913 as variables. This is ok, since the @ form is always available,
5918 as variables. This is ok, since the @ form is always available,
5914 but whe should allow the user to define a variable called 'ls' if
5919 but whe should allow the user to define a variable called 'ls' if
5915 he needs it.
5920 he needs it.
5916
5921
5917 * Moved the ToDo information from README into a separate ToDo.
5922 * Moved the ToDo information from README into a separate ToDo.
5918
5923
5919 * General code cleanup and small bugfixes. I think it's close to a
5924 * General code cleanup and small bugfixes. I think it's close to a
5920 state where it can be released, obviously with a big 'beta'
5925 state where it can be released, obviously with a big 'beta'
5921 warning on it.
5926 warning on it.
5922
5927
5923 * Got the magic function split to work. Now all magics are defined
5928 * Got the magic function split to work. Now all magics are defined
5924 in a separate class. It just organizes things a bit, and now
5929 in a separate class. It just organizes things a bit, and now
5925 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5930 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5926 was too long).
5931 was too long).
5927
5932
5928 * Changed @clear to @reset to avoid potential confusions with
5933 * Changed @clear to @reset to avoid potential confusions with
5929 the shell command clear. Also renamed @cl to @clear, which does
5934 the shell command clear. Also renamed @cl to @clear, which does
5930 exactly what people expect it to from their shell experience.
5935 exactly what people expect it to from their shell experience.
5931
5936
5932 Added a check to the @reset command (since it's so
5937 Added a check to the @reset command (since it's so
5933 destructive, it's probably a good idea to ask for confirmation).
5938 destructive, it's probably a good idea to ask for confirmation).
5934 But now reset only works for full namespace resetting. Since the
5939 But now reset only works for full namespace resetting. Since the
5935 del keyword is already there for deleting a few specific
5940 del keyword is already there for deleting a few specific
5936 variables, I don't see the point of having a redundant magic
5941 variables, I don't see the point of having a redundant magic
5937 function for the same task.
5942 function for the same task.
5938
5943
5939 2001-11-24 Fernando Perez <fperez@colorado.edu>
5944 2001-11-24 Fernando Perez <fperez@colorado.edu>
5940
5945
5941 * Updated the builtin docs (esp. the ? ones).
5946 * Updated the builtin docs (esp. the ? ones).
5942
5947
5943 * Ran all the code through pychecker. Not terribly impressed with
5948 * Ran all the code through pychecker. Not terribly impressed with
5944 it: lots of spurious warnings and didn't really find anything of
5949 it: lots of spurious warnings and didn't really find anything of
5945 substance (just a few modules being imported and not used).
5950 substance (just a few modules being imported and not used).
5946
5951
5947 * Implemented the new ultraTB functionality into IPython. New
5952 * Implemented the new ultraTB functionality into IPython. New
5948 option: xcolors. This chooses color scheme. xmode now only selects
5953 option: xcolors. This chooses color scheme. xmode now only selects
5949 between Plain and Verbose. Better orthogonality.
5954 between Plain and Verbose. Better orthogonality.
5950
5955
5951 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5956 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5952 mode and color scheme for the exception handlers. Now it's
5957 mode and color scheme for the exception handlers. Now it's
5953 possible to have the verbose traceback with no coloring.
5958 possible to have the verbose traceback with no coloring.
5954
5959
5955 2001-11-23 Fernando Perez <fperez@colorado.edu>
5960 2001-11-23 Fernando Perez <fperez@colorado.edu>
5956
5961
5957 * Version 0.1.12 released, 0.1.13 opened.
5962 * Version 0.1.12 released, 0.1.13 opened.
5958
5963
5959 * Removed option to set auto-quote and auto-paren escapes by
5964 * Removed option to set auto-quote and auto-paren escapes by
5960 user. The chances of breaking valid syntax are just too high. If
5965 user. The chances of breaking valid syntax are just too high. If
5961 someone *really* wants, they can always dig into the code.
5966 someone *really* wants, they can always dig into the code.
5962
5967
5963 * Made prompt separators configurable.
5968 * Made prompt separators configurable.
5964
5969
5965 2001-11-22 Fernando Perez <fperez@colorado.edu>
5970 2001-11-22 Fernando Perez <fperez@colorado.edu>
5966
5971
5967 * Small bugfixes in many places.
5972 * Small bugfixes in many places.
5968
5973
5969 * Removed the MyCompleter class from ipplib. It seemed redundant
5974 * Removed the MyCompleter class from ipplib. It seemed redundant
5970 with the C-p,C-n history search functionality. Less code to
5975 with the C-p,C-n history search functionality. Less code to
5971 maintain.
5976 maintain.
5972
5977
5973 * Moved all the original ipython.py code into ipythonlib.py. Right
5978 * Moved all the original ipython.py code into ipythonlib.py. Right
5974 now it's just one big dump into a function called make_IPython, so
5979 now it's just one big dump into a function called make_IPython, so
5975 no real modularity has been gained. But at least it makes the
5980 no real modularity has been gained. But at least it makes the
5976 wrapper script tiny, and since ipythonlib is a module, it gets
5981 wrapper script tiny, and since ipythonlib is a module, it gets
5977 compiled and startup is much faster.
5982 compiled and startup is much faster.
5978
5983
5979 This is a reasobably 'deep' change, so we should test it for a
5984 This is a reasobably 'deep' change, so we should test it for a
5980 while without messing too much more with the code.
5985 while without messing too much more with the code.
5981
5986
5982 2001-11-21 Fernando Perez <fperez@colorado.edu>
5987 2001-11-21 Fernando Perez <fperez@colorado.edu>
5983
5988
5984 * Version 0.1.11 released, 0.1.12 opened for further work.
5989 * Version 0.1.11 released, 0.1.12 opened for further work.
5985
5990
5986 * Removed dependency on Itpl. It was only needed in one place. It
5991 * Removed dependency on Itpl. It was only needed in one place. It
5987 would be nice if this became part of python, though. It makes life
5992 would be nice if this became part of python, though. It makes life
5988 *a lot* easier in some cases.
5993 *a lot* easier in some cases.
5989
5994
5990 * Simplified the prefilter code a bit. Now all handlers are
5995 * Simplified the prefilter code a bit. Now all handlers are
5991 expected to explicitly return a value (at least a blank string).
5996 expected to explicitly return a value (at least a blank string).
5992
5997
5993 * Heavy edits in ipplib. Removed the help system altogether. Now
5998 * Heavy edits in ipplib. Removed the help system altogether. Now
5994 obj?/?? is used for inspecting objects, a magic @doc prints
5999 obj?/?? is used for inspecting objects, a magic @doc prints
5995 docstrings, and full-blown Python help is accessed via the 'help'
6000 docstrings, and full-blown Python help is accessed via the 'help'
5996 keyword. This cleans up a lot of code (less to maintain) and does
6001 keyword. This cleans up a lot of code (less to maintain) and does
5997 the job. Since 'help' is now a standard Python component, might as
6002 the job. Since 'help' is now a standard Python component, might as
5998 well use it and remove duplicate functionality.
6003 well use it and remove duplicate functionality.
5999
6004
6000 Also removed the option to use ipplib as a standalone program. By
6005 Also removed the option to use ipplib as a standalone program. By
6001 now it's too dependent on other parts of IPython to function alone.
6006 now it's too dependent on other parts of IPython to function alone.
6002
6007
6003 * Fixed bug in genutils.pager. It would crash if the pager was
6008 * Fixed bug in genutils.pager. It would crash if the pager was
6004 exited immediately after opening (broken pipe).
6009 exited immediately after opening (broken pipe).
6005
6010
6006 * Trimmed down the VerboseTB reporting a little. The header is
6011 * Trimmed down the VerboseTB reporting a little. The header is
6007 much shorter now and the repeated exception arguments at the end
6012 much shorter now and the repeated exception arguments at the end
6008 have been removed. For interactive use the old header seemed a bit
6013 have been removed. For interactive use the old header seemed a bit
6009 excessive.
6014 excessive.
6010
6015
6011 * Fixed small bug in output of @whos for variables with multi-word
6016 * Fixed small bug in output of @whos for variables with multi-word
6012 types (only first word was displayed).
6017 types (only first word was displayed).
6013
6018
6014 2001-11-17 Fernando Perez <fperez@colorado.edu>
6019 2001-11-17 Fernando Perez <fperez@colorado.edu>
6015
6020
6016 * Version 0.1.10 released, 0.1.11 opened for further work.
6021 * Version 0.1.10 released, 0.1.11 opened for further work.
6017
6022
6018 * Modified dirs and friends. dirs now *returns* the stack (not
6023 * Modified dirs and friends. dirs now *returns* the stack (not
6019 prints), so one can manipulate it as a variable. Convenient to
6024 prints), so one can manipulate it as a variable. Convenient to
6020 travel along many directories.
6025 travel along many directories.
6021
6026
6022 * Fixed bug in magic_pdef: would only work with functions with
6027 * Fixed bug in magic_pdef: would only work with functions with
6023 arguments with default values.
6028 arguments with default values.
6024
6029
6025 2001-11-14 Fernando Perez <fperez@colorado.edu>
6030 2001-11-14 Fernando Perez <fperez@colorado.edu>
6026
6031
6027 * Added the PhysicsInput stuff to dot_ipython so it ships as an
6032 * Added the PhysicsInput stuff to dot_ipython so it ships as an
6028 example with IPython. Various other minor fixes and cleanups.
6033 example with IPython. Various other minor fixes and cleanups.
6029
6034
6030 * Version 0.1.9 released, 0.1.10 opened for further work.
6035 * Version 0.1.9 released, 0.1.10 opened for further work.
6031
6036
6032 * Added sys.path to the list of directories searched in the
6037 * Added sys.path to the list of directories searched in the
6033 execfile= option. It used to be the current directory and the
6038 execfile= option. It used to be the current directory and the
6034 user's IPYTHONDIR only.
6039 user's IPYTHONDIR only.
6035
6040
6036 2001-11-13 Fernando Perez <fperez@colorado.edu>
6041 2001-11-13 Fernando Perez <fperez@colorado.edu>
6037
6042
6038 * Reinstated the raw_input/prefilter separation that Janko had
6043 * Reinstated the raw_input/prefilter separation that Janko had
6039 initially. This gives a more convenient setup for extending the
6044 initially. This gives a more convenient setup for extending the
6040 pre-processor from the outside: raw_input always gets a string,
6045 pre-processor from the outside: raw_input always gets a string,
6041 and prefilter has to process it. We can then redefine prefilter
6046 and prefilter has to process it. We can then redefine prefilter
6042 from the outside and implement extensions for special
6047 from the outside and implement extensions for special
6043 purposes.
6048 purposes.
6044
6049
6045 Today I got one for inputting PhysicalQuantity objects
6050 Today I got one for inputting PhysicalQuantity objects
6046 (from Scientific) without needing any function calls at
6051 (from Scientific) without needing any function calls at
6047 all. Extremely convenient, and it's all done as a user-level
6052 all. Extremely convenient, and it's all done as a user-level
6048 extension (no IPython code was touched). Now instead of:
6053 extension (no IPython code was touched). Now instead of:
6049 a = PhysicalQuantity(4.2,'m/s**2')
6054 a = PhysicalQuantity(4.2,'m/s**2')
6050 one can simply say
6055 one can simply say
6051 a = 4.2 m/s**2
6056 a = 4.2 m/s**2
6052 or even
6057 or even
6053 a = 4.2 m/s^2
6058 a = 4.2 m/s^2
6054
6059
6055 I use this, but it's also a proof of concept: IPython really is
6060 I use this, but it's also a proof of concept: IPython really is
6056 fully user-extensible, even at the level of the parsing of the
6061 fully user-extensible, even at the level of the parsing of the
6057 command line. It's not trivial, but it's perfectly doable.
6062 command line. It's not trivial, but it's perfectly doable.
6058
6063
6059 * Added 'add_flip' method to inclusion conflict resolver. Fixes
6064 * Added 'add_flip' method to inclusion conflict resolver. Fixes
6060 the problem of modules being loaded in the inverse order in which
6065 the problem of modules being loaded in the inverse order in which
6061 they were defined in
6066 they were defined in
6062
6067
6063 * Version 0.1.8 released, 0.1.9 opened for further work.
6068 * Version 0.1.8 released, 0.1.9 opened for further work.
6064
6069
6065 * Added magics pdef, source and file. They respectively show the
6070 * Added magics pdef, source and file. They respectively show the
6066 definition line ('prototype' in C), source code and full python
6071 definition line ('prototype' in C), source code and full python
6067 file for any callable object. The object inspector oinfo uses
6072 file for any callable object. The object inspector oinfo uses
6068 these to show the same information.
6073 these to show the same information.
6069
6074
6070 * Version 0.1.7 released, 0.1.8 opened for further work.
6075 * Version 0.1.7 released, 0.1.8 opened for further work.
6071
6076
6072 * Separated all the magic functions into a class called Magic. The
6077 * Separated all the magic functions into a class called Magic. The
6073 InteractiveShell class was becoming too big for Xemacs to handle
6078 InteractiveShell class was becoming too big for Xemacs to handle
6074 (de-indenting a line would lock it up for 10 seconds while it
6079 (de-indenting a line would lock it up for 10 seconds while it
6075 backtracked on the whole class!)
6080 backtracked on the whole class!)
6076
6081
6077 FIXME: didn't work. It can be done, but right now namespaces are
6082 FIXME: didn't work. It can be done, but right now namespaces are
6078 all messed up. Do it later (reverted it for now, so at least
6083 all messed up. Do it later (reverted it for now, so at least
6079 everything works as before).
6084 everything works as before).
6080
6085
6081 * Got the object introspection system (magic_oinfo) working! I
6086 * Got the object introspection system (magic_oinfo) working! I
6082 think this is pretty much ready for release to Janko, so he can
6087 think this is pretty much ready for release to Janko, so he can
6083 test it for a while and then announce it. Pretty much 100% of what
6088 test it for a while and then announce it. Pretty much 100% of what
6084 I wanted for the 'phase 1' release is ready. Happy, tired.
6089 I wanted for the 'phase 1' release is ready. Happy, tired.
6085
6090
6086 2001-11-12 Fernando Perez <fperez@colorado.edu>
6091 2001-11-12 Fernando Perez <fperez@colorado.edu>
6087
6092
6088 * Version 0.1.6 released, 0.1.7 opened for further work.
6093 * Version 0.1.6 released, 0.1.7 opened for further work.
6089
6094
6090 * Fixed bug in printing: it used to test for truth before
6095 * Fixed bug in printing: it used to test for truth before
6091 printing, so 0 wouldn't print. Now checks for None.
6096 printing, so 0 wouldn't print. Now checks for None.
6092
6097
6093 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
6098 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
6094 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
6099 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
6095 reaches by hand into the outputcache. Think of a better way to do
6100 reaches by hand into the outputcache. Think of a better way to do
6096 this later.
6101 this later.
6097
6102
6098 * Various small fixes thanks to Nathan's comments.
6103 * Various small fixes thanks to Nathan's comments.
6099
6104
6100 * Changed magic_pprint to magic_Pprint. This way it doesn't
6105 * Changed magic_pprint to magic_Pprint. This way it doesn't
6101 collide with pprint() and the name is consistent with the command
6106 collide with pprint() and the name is consistent with the command
6102 line option.
6107 line option.
6103
6108
6104 * Changed prompt counter behavior to be fully like
6109 * Changed prompt counter behavior to be fully like
6105 Mathematica's. That is, even input that doesn't return a result
6110 Mathematica's. That is, even input that doesn't return a result
6106 raises the prompt counter. The old behavior was kind of confusing
6111 raises the prompt counter. The old behavior was kind of confusing
6107 (getting the same prompt number several times if the operation
6112 (getting the same prompt number several times if the operation
6108 didn't return a result).
6113 didn't return a result).
6109
6114
6110 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
6115 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
6111
6116
6112 * Fixed -Classic mode (wasn't working anymore).
6117 * Fixed -Classic mode (wasn't working anymore).
6113
6118
6114 * Added colored prompts using Nathan's new code. Colors are
6119 * Added colored prompts using Nathan's new code. Colors are
6115 currently hardwired, they can be user-configurable. For
6120 currently hardwired, they can be user-configurable. For
6116 developers, they can be chosen in file ipythonlib.py, at the
6121 developers, they can be chosen in file ipythonlib.py, at the
6117 beginning of the CachedOutput class def.
6122 beginning of the CachedOutput class def.
6118
6123
6119 2001-11-11 Fernando Perez <fperez@colorado.edu>
6124 2001-11-11 Fernando Perez <fperez@colorado.edu>
6120
6125
6121 * Version 0.1.5 released, 0.1.6 opened for further work.
6126 * Version 0.1.5 released, 0.1.6 opened for further work.
6122
6127
6123 * Changed magic_env to *return* the environment as a dict (not to
6128 * Changed magic_env to *return* the environment as a dict (not to
6124 print it). This way it prints, but it can also be processed.
6129 print it). This way it prints, but it can also be processed.
6125
6130
6126 * Added Verbose exception reporting to interactive
6131 * Added Verbose exception reporting to interactive
6127 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
6132 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
6128 traceback. Had to make some changes to the ultraTB file. This is
6133 traceback. Had to make some changes to the ultraTB file. This is
6129 probably the last 'big' thing in my mental todo list. This ties
6134 probably the last 'big' thing in my mental todo list. This ties
6130 in with the next entry:
6135 in with the next entry:
6131
6136
6132 * Changed -Xi and -Xf to a single -xmode option. Now all the user
6137 * Changed -Xi and -Xf to a single -xmode option. Now all the user
6133 has to specify is Plain, Color or Verbose for all exception
6138 has to specify is Plain, Color or Verbose for all exception
6134 handling.
6139 handling.
6135
6140
6136 * Removed ShellServices option. All this can really be done via
6141 * Removed ShellServices option. All this can really be done via
6137 the magic system. It's easier to extend, cleaner and has automatic
6142 the magic system. It's easier to extend, cleaner and has automatic
6138 namespace protection and documentation.
6143 namespace protection and documentation.
6139
6144
6140 2001-11-09 Fernando Perez <fperez@colorado.edu>
6145 2001-11-09 Fernando Perez <fperez@colorado.edu>
6141
6146
6142 * Fixed bug in output cache flushing (missing parameter to
6147 * Fixed bug in output cache flushing (missing parameter to
6143 __init__). Other small bugs fixed (found using pychecker).
6148 __init__). Other small bugs fixed (found using pychecker).
6144
6149
6145 * Version 0.1.4 opened for bugfixing.
6150 * Version 0.1.4 opened for bugfixing.
6146
6151
6147 2001-11-07 Fernando Perez <fperez@colorado.edu>
6152 2001-11-07 Fernando Perez <fperez@colorado.edu>
6148
6153
6149 * Version 0.1.3 released, mainly because of the raw_input bug.
6154 * Version 0.1.3 released, mainly because of the raw_input bug.
6150
6155
6151 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
6156 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
6152 and when testing for whether things were callable, a call could
6157 and when testing for whether things were callable, a call could
6153 actually be made to certain functions. They would get called again
6158 actually be made to certain functions. They would get called again
6154 once 'really' executed, with a resulting double call. A disaster
6159 once 'really' executed, with a resulting double call. A disaster
6155 in many cases (list.reverse() would never work!).
6160 in many cases (list.reverse() would never work!).
6156
6161
6157 * Removed prefilter() function, moved its code to raw_input (which
6162 * Removed prefilter() function, moved its code to raw_input (which
6158 after all was just a near-empty caller for prefilter). This saves
6163 after all was just a near-empty caller for prefilter). This saves
6159 a function call on every prompt, and simplifies the class a tiny bit.
6164 a function call on every prompt, and simplifies the class a tiny bit.
6160
6165
6161 * Fix _ip to __ip name in magic example file.
6166 * Fix _ip to __ip name in magic example file.
6162
6167
6163 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
6168 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
6164 work with non-gnu versions of tar.
6169 work with non-gnu versions of tar.
6165
6170
6166 2001-11-06 Fernando Perez <fperez@colorado.edu>
6171 2001-11-06 Fernando Perez <fperez@colorado.edu>
6167
6172
6168 * Version 0.1.2. Just to keep track of the recent changes.
6173 * Version 0.1.2. Just to keep track of the recent changes.
6169
6174
6170 * Fixed nasty bug in output prompt routine. It used to check 'if
6175 * Fixed nasty bug in output prompt routine. It used to check 'if
6171 arg != None...'. Problem is, this fails if arg implements a
6176 arg != None...'. Problem is, this fails if arg implements a
6172 special comparison (__cmp__) which disallows comparing to
6177 special comparison (__cmp__) which disallows comparing to
6173 None. Found it when trying to use the PhysicalQuantity module from
6178 None. Found it when trying to use the PhysicalQuantity module from
6174 ScientificPython.
6179 ScientificPython.
6175
6180
6176 2001-11-05 Fernando Perez <fperez@colorado.edu>
6181 2001-11-05 Fernando Perez <fperez@colorado.edu>
6177
6182
6178 * Also added dirs. Now the pushd/popd/dirs family functions
6183 * Also added dirs. Now the pushd/popd/dirs family functions
6179 basically like the shell, with the added convenience of going home
6184 basically like the shell, with the added convenience of going home
6180 when called with no args.
6185 when called with no args.
6181
6186
6182 * pushd/popd slightly modified to mimic shell behavior more
6187 * pushd/popd slightly modified to mimic shell behavior more
6183 closely.
6188 closely.
6184
6189
6185 * Added env,pushd,popd from ShellServices as magic functions. I
6190 * Added env,pushd,popd from ShellServices as magic functions. I
6186 think the cleanest will be to port all desired functions from
6191 think the cleanest will be to port all desired functions from
6187 ShellServices as magics and remove ShellServices altogether. This
6192 ShellServices as magics and remove ShellServices altogether. This
6188 will provide a single, clean way of adding functionality
6193 will provide a single, clean way of adding functionality
6189 (shell-type or otherwise) to IP.
6194 (shell-type or otherwise) to IP.
6190
6195
6191 2001-11-04 Fernando Perez <fperez@colorado.edu>
6196 2001-11-04 Fernando Perez <fperez@colorado.edu>
6192
6197
6193 * Added .ipython/ directory to sys.path. This way users can keep
6198 * Added .ipython/ directory to sys.path. This way users can keep
6194 customizations there and access them via import.
6199 customizations there and access them via import.
6195
6200
6196 2001-11-03 Fernando Perez <fperez@colorado.edu>
6201 2001-11-03 Fernando Perez <fperez@colorado.edu>
6197
6202
6198 * Opened version 0.1.1 for new changes.
6203 * Opened version 0.1.1 for new changes.
6199
6204
6200 * Changed version number to 0.1.0: first 'public' release, sent to
6205 * Changed version number to 0.1.0: first 'public' release, sent to
6201 Nathan and Janko.
6206 Nathan and Janko.
6202
6207
6203 * Lots of small fixes and tweaks.
6208 * Lots of small fixes and tweaks.
6204
6209
6205 * Minor changes to whos format. Now strings are shown, snipped if
6210 * Minor changes to whos format. Now strings are shown, snipped if
6206 too long.
6211 too long.
6207
6212
6208 * Changed ShellServices to work on __main__ so they show up in @who
6213 * Changed ShellServices to work on __main__ so they show up in @who
6209
6214
6210 * Help also works with ? at the end of a line:
6215 * Help also works with ? at the end of a line:
6211 ?sin and sin?
6216 ?sin and sin?
6212 both produce the same effect. This is nice, as often I use the
6217 both produce the same effect. This is nice, as often I use the
6213 tab-complete to find the name of a method, but I used to then have
6218 tab-complete to find the name of a method, but I used to then have
6214 to go to the beginning of the line to put a ? if I wanted more
6219 to go to the beginning of the line to put a ? if I wanted more
6215 info. Now I can just add the ? and hit return. Convenient.
6220 info. Now I can just add the ? and hit return. Convenient.
6216
6221
6217 2001-11-02 Fernando Perez <fperez@colorado.edu>
6222 2001-11-02 Fernando Perez <fperez@colorado.edu>
6218
6223
6219 * Python version check (>=2.1) added.
6224 * Python version check (>=2.1) added.
6220
6225
6221 * Added LazyPython documentation. At this point the docs are quite
6226 * Added LazyPython documentation. At this point the docs are quite
6222 a mess. A cleanup is in order.
6227 a mess. A cleanup is in order.
6223
6228
6224 * Auto-installer created. For some bizarre reason, the zipfiles
6229 * Auto-installer created. For some bizarre reason, the zipfiles
6225 module isn't working on my system. So I made a tar version
6230 module isn't working on my system. So I made a tar version
6226 (hopefully the command line options in various systems won't kill
6231 (hopefully the command line options in various systems won't kill
6227 me).
6232 me).
6228
6233
6229 * Fixes to Struct in genutils. Now all dictionary-like methods are
6234 * Fixes to Struct in genutils. Now all dictionary-like methods are
6230 protected (reasonably).
6235 protected (reasonably).
6231
6236
6232 * Added pager function to genutils and changed ? to print usage
6237 * Added pager function to genutils and changed ? to print usage
6233 note through it (it was too long).
6238 note through it (it was too long).
6234
6239
6235 * Added the LazyPython functionality. Works great! I changed the
6240 * Added the LazyPython functionality. Works great! I changed the
6236 auto-quote escape to ';', it's on home row and next to '. But
6241 auto-quote escape to ';', it's on home row and next to '. But
6237 both auto-quote and auto-paren (still /) escapes are command-line
6242 both auto-quote and auto-paren (still /) escapes are command-line
6238 parameters.
6243 parameters.
6239
6244
6240
6245
6241 2001-11-01 Fernando Perez <fperez@colorado.edu>
6246 2001-11-01 Fernando Perez <fperez@colorado.edu>
6242
6247
6243 * Version changed to 0.0.7. Fairly large change: configuration now
6248 * Version changed to 0.0.7. Fairly large change: configuration now
6244 is all stored in a directory, by default .ipython. There, all
6249 is all stored in a directory, by default .ipython. There, all
6245 config files have normal looking names (not .names)
6250 config files have normal looking names (not .names)
6246
6251
6247 * Version 0.0.6 Released first to Lucas and Archie as a test
6252 * Version 0.0.6 Released first to Lucas and Archie as a test
6248 run. Since it's the first 'semi-public' release, change version to
6253 run. Since it's the first 'semi-public' release, change version to
6249 > 0.0.6 for any changes now.
6254 > 0.0.6 for any changes now.
6250
6255
6251 * Stuff I had put in the ipplib.py changelog:
6256 * Stuff I had put in the ipplib.py changelog:
6252
6257
6253 Changes to InteractiveShell:
6258 Changes to InteractiveShell:
6254
6259
6255 - Made the usage message a parameter.
6260 - Made the usage message a parameter.
6256
6261
6257 - Require the name of the shell variable to be given. It's a bit
6262 - Require the name of the shell variable to be given. It's a bit
6258 of a hack, but allows the name 'shell' not to be hardwired in the
6263 of a hack, but allows the name 'shell' not to be hardwired in the
6259 magic (@) handler, which is problematic b/c it requires
6264 magic (@) handler, which is problematic b/c it requires
6260 polluting the global namespace with 'shell'. This in turn is
6265 polluting the global namespace with 'shell'. This in turn is
6261 fragile: if a user redefines a variable called shell, things
6266 fragile: if a user redefines a variable called shell, things
6262 break.
6267 break.
6263
6268
6264 - magic @: all functions available through @ need to be defined
6269 - magic @: all functions available through @ need to be defined
6265 as magic_<name>, even though they can be called simply as
6270 as magic_<name>, even though they can be called simply as
6266 @<name>. This allows the special command @magic to gather
6271 @<name>. This allows the special command @magic to gather
6267 information automatically about all existing magic functions,
6272 information automatically about all existing magic functions,
6268 even if they are run-time user extensions, by parsing the shell
6273 even if they are run-time user extensions, by parsing the shell
6269 instance __dict__ looking for special magic_ names.
6274 instance __dict__ looking for special magic_ names.
6270
6275
6271 - mainloop: added *two* local namespace parameters. This allows
6276 - mainloop: added *two* local namespace parameters. This allows
6272 the class to differentiate between parameters which were there
6277 the class to differentiate between parameters which were there
6273 before and after command line initialization was processed. This
6278 before and after command line initialization was processed. This
6274 way, later @who can show things loaded at startup by the
6279 way, later @who can show things loaded at startup by the
6275 user. This trick was necessary to make session saving/reloading
6280 user. This trick was necessary to make session saving/reloading
6276 really work: ideally after saving/exiting/reloading a session,
6281 really work: ideally after saving/exiting/reloading a session,
6277 *everything* should look the same, including the output of @who. I
6282 *everything* should look the same, including the output of @who. I
6278 was only able to make this work with this double namespace
6283 was only able to make this work with this double namespace
6279 trick.
6284 trick.
6280
6285
6281 - added a header to the logfile which allows (almost) full
6286 - added a header to the logfile which allows (almost) full
6282 session restoring.
6287 session restoring.
6283
6288
6284 - prepend lines beginning with @ or !, with a and log
6289 - prepend lines beginning with @ or !, with a and log
6285 them. Why? !lines: may be useful to know what you did @lines:
6290 them. Why? !lines: may be useful to know what you did @lines:
6286 they may affect session state. So when restoring a session, at
6291 they may affect session state. So when restoring a session, at
6287 least inform the user of their presence. I couldn't quite get
6292 least inform the user of their presence. I couldn't quite get
6288 them to properly re-execute, but at least the user is warned.
6293 them to properly re-execute, but at least the user is warned.
6289
6294
6290 * Started ChangeLog.
6295 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now