##// END OF EJS Templates
Add arguments dirs and files to the ils() constructor....
walter.doerwald -
Show More
@@ -1,2119 +1,2130 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 ``ls`` (listing the
18 * ``Table``s: These objects produce items. Examples are ``ls`` (listing the
19 current directory, ``ienv`` (listing environment variables), ``ipwd`` (listing
19 current directory, ``ienv`` (listing environment variables), ``ipwd`` (listing
20 user account) and ``igrp`` (listing user groups). A ``Table`` must be the
20 user account) 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 ``browse`` which is a ``curses``
32 display objects will be used. One example is ``browse`` 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)``. This method must return a
40 implement the method ``__xattrs__(self, mode)``. This method must return a
41 sequence of attribute names. This sequence may also contain integers, which
41 sequence of attribute names. This sequence may also contain integers, which
42 will be treated as sequence indizes. Also supported is ``None``, which uses
42 will be treated as sequence indizes. Also supported is ``None``, which uses
43 the object itself and callables which will be called with the object as the
43 the object itself and callables which will be called with the object as the
44 an argument. If ``__xattrs__()`` isn't implemented ``(None,)`` will be used as
44 an argument. If ``__xattrs__()`` isn't implemented ``(None,)`` will be used as
45 the attribute sequence (i.e. the object itself (it's ``repr()`` format) will
45 the attribute sequence (i.e. the object itself (it's ``repr()`` format) will
46 be being displayed. The global function ``xattrs()`` implements this
46 be being displayed. The global function ``xattrs()`` implements this
47 functionality.
47 functionality.
48
48
49 * When an object ``foo`` is displayed in the header, footer or table cell of the
49 * When an object ``foo`` is displayed in the header, footer or table cell of the
50 browser ``foo.__xrepr__(mode)`` is called. Mode can be ``"header"`` or
50 browser ``foo.__xrepr__(mode)`` is called. Mode can be ``"header"`` or
51 ``"footer"`` for the header or footer line and ``"cell"`` for a table cell.
51 ``"footer"`` for the header or footer line and ``"cell"`` for a table cell.
52 ``__xrepr__()```must return an iterable (e.g. by being a generator) which
52 ``__xrepr__()```must return an iterable (e.g. by being a generator) which
53 produces the following items: The first item should be a tuple containing
53 produces the following items: The first item should be a tuple containing
54 the alignment (-1 left aligned, 0 centered and 1 right aligned) and whether
54 the alignment (-1 left aligned, 0 centered and 1 right aligned) and whether
55 the complete output must be displayed or if the browser is allowed to stop
55 the complete output must be displayed or if the browser is allowed to stop
56 output after enough text has been produced (e.g. a syntax highlighted text
56 output after enough text has been produced (e.g. a syntax highlighted text
57 line would use ``True``, but for a large data structure (i.e. a nested list,
57 line would use ``True``, but for a large data structure (i.e. a nested list,
58 tuple or dictionary) ``False`` would be used). The other output ``__xrepr__()``
58 tuple or dictionary) ``False`` would be used). The other output ``__xrepr__()``
59 may produce is tuples of ``Style```objects and text (which contain the text
59 may produce is tuples of ``Style```objects and text (which contain the text
60 representation of the object; see the ``astyle`` module). If ``__xrepr__()``
60 representation of the object; see the ``astyle`` module). If ``__xrepr__()``
61 recursively outputs a data structure the function ``xrepr(object, mode)`` can
61 recursively outputs a data structure the function ``xrepr(object, mode)`` can
62 be used and ``"default"`` must be passed as the mode in these calls. This in
62 be used and ``"default"`` must be passed as the mode in these calls. This in
63 turn calls the ``__xrepr__()`` method on ``object`` (or uses ``repr(object)``
63 turn calls the ``__xrepr__()`` method on ``object`` (or uses ``repr(object)``
64 as the string representation if ``__xrepr__()`` doesn't exist).
64 as the string representation if ``__xrepr__()`` doesn't exist).
65
65
66 * Objects that can be iterated by ``Pipe``s must implement the method
66 * Objects that can be iterated by ``Pipe``s must implement the method
67 ``__xiter__(self, mode)``. ``mode`` can take the following values:
67 ``__xiter__(self, mode)``. ``mode`` can take the following values:
68
68
69 - ``"default"``: This is the default value and ist always used by pipeline
69 - ``"default"``: This is the default value and ist always used by pipeline
70 expressions. Other values are only used in the browser.
70 expressions. Other values are only used in the browser.
71 - ``None``: This value is passed by the browser. The object must return an
71 - ``None``: This value is passed by the browser. The object must return an
72 iterable of ``XMode`` objects describing all modes supported by the object.
72 iterable of ``XMode`` objects describing all modes supported by the object.
73 (This should never include ``"default"`` or ``None``).
73 (This should never include ``"default"`` or ``None``).
74 - Any other value that the object supports.
74 - Any other value that the object supports.
75
75
76 The global function ``xiter()`` can be called to get such an iterator. If
76 The global function ``xiter()`` can be called to get such an iterator. If
77 the method ``_xiter__`` isn't implemented, ``xiter()`` falls back to
77 the method ``_xiter__`` isn't implemented, ``xiter()`` falls back to
78 ``__iter__``. In addition to that, dictionaries and modules receive special
78 ``__iter__``. In addition to that, dictionaries and modules receive special
79 treatment (returning an iterator over ``(key, value)`` pairs). This makes it
79 treatment (returning an iterator over ``(key, value)`` pairs). This makes it
80 possible to use dictionaries and modules in pipeline expressions, for example:
80 possible to use dictionaries and modules in pipeline expressions, for example:
81
81
82 >>> import sys
82 >>> import sys
83 >>> sys | ifilter("isinstance(value, int)") | idump
83 >>> sys | ifilter("isinstance(value, int)") | idump
84 key |value
84 key |value
85 api_version| 1012
85 api_version| 1012
86 dllhandle | 503316480
86 dllhandle | 503316480
87 hexversion | 33817328
87 hexversion | 33817328
88 maxint |2147483647
88 maxint |2147483647
89 maxunicode | 65535
89 maxunicode | 65535
90 >>> sys.modules | ifilter("_.value is not None") | isort("_.key.lower()")
90 >>> sys.modules | ifilter("_.value is not None") | isort("_.key.lower()")
91 ...
91 ...
92
92
93 Note: The expression strings passed to ``ifilter()`` and ``isort()`` can
93 Note: The expression strings passed to ``ifilter()`` and ``isort()`` can
94 refer to the object to be filtered or sorted via the variable ``_`` and to any
94 refer to the object to be filtered or sorted via the variable ``_`` and to any
95 of the attributes of the object, i.e.:
95 of the attributes of the object, i.e.:
96
96
97 >>> sys.modules | ifilter("_.value is not None") | isort("_.key.lower()")
97 >>> sys.modules | ifilter("_.value is not None") | isort("_.key.lower()")
98
98
99 does the same as
99 does the same as
100
100
101 >>> sys.modules | ifilter("value is not None") | isort("key.lower()")
101 >>> sys.modules | ifilter("value is not None") | isort("key.lower()")
102
102
103 In addition to expression strings, it's possible to pass callables (taking
103 In addition to expression strings, it's possible to pass callables (taking
104 the object as an argument) to ``ifilter()``, ``isort()`` and ``ieval()``:
104 the object as an argument) to ``ifilter()``, ``isort()`` and ``ieval()``:
105
105
106 >>> sys | ifilter(lambda _:isinstance(_.value, int)) \
106 >>> sys | ifilter(lambda _:isinstance(_.value, int)) \
107 ... | ieval(lambda _: (_.key, hex(_.value))) | idump
107 ... | ieval(lambda _: (_.key, hex(_.value))) | idump
108 0 |1
108 0 |1
109 api_version|0x3f4
109 api_version|0x3f4
110 dllhandle |0x1e000000
110 dllhandle |0x1e000000
111 hexversion |0x20402f0
111 hexversion |0x20402f0
112 maxint |0x7fffffff
112 maxint |0x7fffffff
113 maxunicode |0xffff
113 maxunicode |0xffff
114 """
114 """
115
115
116 import sys, os, os.path, stat, glob, new, csv, datetime, types
116 import sys, os, os.path, stat, glob, new, csv, datetime, types
117 import itertools, mimetypes
117 import itertools, mimetypes
118
118
119 try: # Python 2.3 compatibility
119 try: # Python 2.3 compatibility
120 import collections
120 import collections
121 except ImportError:
121 except ImportError:
122 deque = list
122 deque = list
123 else:
123 else:
124 deque = collections.deque
124 deque = collections.deque
125
125
126 try: # Python 2.3 compatibility
126 try: # Python 2.3 compatibility
127 set
127 set
128 except NameError:
128 except NameError:
129 import sets
129 import sets
130 set = sets.Set
130 set = sets.Set
131
131
132 try: # Python 2.3 compatibility
132 try: # Python 2.3 compatibility
133 sorted
133 sorted
134 except NameError:
134 except NameError:
135 def sorted(iterator, key=None, reverse=False):
135 def sorted(iterator, key=None, reverse=False):
136 items = list(iterator)
136 items = list(iterator)
137 if key is not None:
137 if key is not None:
138 items.sort(lambda i1, i2: cmp(key(i1), key(i2)))
138 items.sort(lambda i1, i2: cmp(key(i1), key(i2)))
139 else:
139 else:
140 items.sort()
140 items.sort()
141 if reverse:
141 if reverse:
142 items.reverse()
142 items.reverse()
143 return items
143 return items
144
144
145 try:
145 try:
146 import pwd
146 import pwd
147 except ImportError:
147 except ImportError:
148 pwd = None
148 pwd = None
149
149
150 try:
150 try:
151 import grp
151 import grp
152 except ImportError:
152 except ImportError:
153 grp = None
153 grp = None
154
154
155 import path
155 import path
156 try:
156 try:
157 from IPython import genutils, ipapi
157 from IPython import genutils, ipapi
158 except ImportError:
158 except ImportError:
159 genutils = None
159 genutils = None
160 ipapi = None
160 ipapi = None
161
161
162 import astyle
162 import astyle
163
163
164
164
165 __all__ = [
165 __all__ = [
166 "ifile", "ils", "iglob", "iwalk", "ipwdentry", "ipwd", "igrpentry", "igrp",
166 "ifile", "ils", "iglob", "iwalk", "ipwdentry", "ipwd", "igrpentry", "igrp",
167 "icsv", "ix", "ichain", "isort", "ifilter", "ieval", "ienum", "ienv",
167 "icsv", "ix", "ichain", "isort", "ifilter", "ieval", "ienum", "ienv",
168 "idump", "iless"
168 "idump", "iless"
169 ]
169 ]
170
170
171
171
172 os.stat_float_times(True) # enable microseconds
172 os.stat_float_times(True) # enable microseconds
173
173
174
174
175 class AttrNamespace(object):
175 class AttrNamespace(object):
176 """
176 """
177 Helper class that is used for providing a namespace for evaluating
177 Helper class that is used for providing a namespace for evaluating
178 expressions containing attribute names of an object.
178 expressions containing attribute names of an object.
179 """
179 """
180 def __init__(self, wrapped):
180 def __init__(self, wrapped):
181 self.wrapped = wrapped
181 self.wrapped = wrapped
182
182
183 def __getitem__(self, name):
183 def __getitem__(self, name):
184 if name == "_":
184 if name == "_":
185 return self.wrapped
185 return self.wrapped
186 try:
186 try:
187 return getattr(self.wrapped, name)
187 return getattr(self.wrapped, name)
188 except AttributeError:
188 except AttributeError:
189 raise KeyError(name)
189 raise KeyError(name)
190
190
191 # Python 2.3 compatibility
191 # Python 2.3 compatibility
192 # use eval workaround to find out which names are used in the
192 # use eval workaround to find out which names are used in the
193 # eval string and put them into the locals. This works for most
193 # eval string and put them into the locals. This works for most
194 # normal uses case, bizarre ones like accessing the locals()
194 # normal uses case, bizarre ones like accessing the locals()
195 # will fail
195 # will fail
196 try:
196 try:
197 eval("_", None, AttrNamespace(None))
197 eval("_", None, AttrNamespace(None))
198 except TypeError:
198 except TypeError:
199 real_eval = eval
199 real_eval = eval
200 def eval(codestring, _globals, _locals):
200 def eval(codestring, _globals, _locals):
201 """
201 """
202 eval(source[, globals[, locals]]) -> value
202 eval(source[, globals[, locals]]) -> value
203
203
204 Evaluate the source in the context of globals and locals.
204 Evaluate the source in the context of globals and locals.
205 The source may be a string representing a Python expression
205 The source may be a string representing a Python expression
206 or a code object as returned by compile().
206 or a code object as returned by compile().
207 The globals must be a dictionary and locals can be any mappping.
207 The globals must be a dictionary and locals can be any mappping.
208
208
209 This function is a workaround for the shortcomings of
209 This function is a workaround for the shortcomings of
210 Python 2.3's eval.
210 Python 2.3's eval.
211 """
211 """
212
212
213 if isinstance(codestring, basestring):
213 if isinstance(codestring, basestring):
214 code = compile(codestring, "_eval", "eval")
214 code = compile(codestring, "_eval", "eval")
215 else:
215 else:
216 code = codestring
216 code = codestring
217 newlocals = {}
217 newlocals = {}
218 for name in code.co_names:
218 for name in code.co_names:
219 try:
219 try:
220 newlocals[name] = _locals[name]
220 newlocals[name] = _locals[name]
221 except KeyError:
221 except KeyError:
222 pass
222 pass
223 return real_eval(code, _globals, newlocals)
223 return real_eval(code, _globals, newlocals)
224
224
225
225
226 noitem = object()
226 noitem = object()
227
227
228 def item(iterator, index, default=noitem):
228 def item(iterator, index, default=noitem):
229 """
229 """
230 Return the ``index``th item from the iterator ``iterator``.
230 Return the ``index``th item from the iterator ``iterator``.
231 ``index`` must be an integer (negative integers are relative to the
231 ``index`` must be an integer (negative integers are relative to the
232 end (i.e. the last item produced by the iterator)).
232 end (i.e. the last item produced by the iterator)).
233
233
234 If ``default`` is given, this will be the default value when
234 If ``default`` is given, this will be the default value when
235 the iterator doesn't contain an item at this position. Otherwise an
235 the iterator doesn't contain an item at this position. Otherwise an
236 ``IndexError`` will be raised.
236 ``IndexError`` will be raised.
237
237
238 Note that using this function will partially or totally exhaust the
238 Note that using this function will partially or totally exhaust the
239 iterator.
239 iterator.
240 """
240 """
241 i = index
241 i = index
242 if i>=0:
242 if i>=0:
243 for item in iterator:
243 for item in iterator:
244 if not i:
244 if not i:
245 return item
245 return item
246 i -= 1
246 i -= 1
247 else:
247 else:
248 i = -index
248 i = -index
249 cache = deque()
249 cache = deque()
250 for item in iterator:
250 for item in iterator:
251 cache.append(item)
251 cache.append(item)
252 if len(cache)>i:
252 if len(cache)>i:
253 cache.popleft()
253 cache.popleft()
254 if len(cache)==i:
254 if len(cache)==i:
255 return cache.popleft()
255 return cache.popleft()
256 if default is noitem:
256 if default is noitem:
257 raise IndexError(index)
257 raise IndexError(index)
258 else:
258 else:
259 return default
259 return default
260
260
261
261
262 def getglobals(g):
262 def getglobals(g):
263 if g is None:
263 if g is None:
264 if ipapi is not None:
264 if ipapi is not None:
265 api = ipapi.get()
265 api = ipapi.get()
266 if api is not None:
266 if api is not None:
267 return api.user_ns
267 return api.user_ns
268 return globals()
268 return globals()
269 return g
269 return g
270
270
271
271
272 class Descriptor(object):
272 class Descriptor(object):
273 def __hash__(self):
273 def __hash__(self):
274 return hash(self.__class__) ^ hash(self.key())
274 return hash(self.__class__) ^ hash(self.key())
275
275
276 def __eq__(self, other):
276 def __eq__(self, other):
277 return self.__class__ is other.__class__ and self.key() == other.key()
277 return self.__class__ is other.__class__ and self.key() == other.key()
278
278
279 def __ne__(self, other):
279 def __ne__(self, other):
280 return self.__class__ is not other.__class__ or self.key() != other.key()
280 return self.__class__ is not other.__class__ or self.key() != other.key()
281
281
282 def key(self):
282 def key(self):
283 pass
283 pass
284
284
285 def name(self):
285 def name(self):
286 key = self.key()
286 key = self.key()
287 if key is None:
287 if key is None:
288 return "_"
288 return "_"
289 return str(key)
289 return str(key)
290
290
291 def attrtype(self, obj):
291 def attrtype(self, obj):
292 pass
292 pass
293
293
294 def valuetype(self, obj):
294 def valuetype(self, obj):
295 pass
295 pass
296
296
297 def value(self, obj):
297 def value(self, obj):
298 pass
298 pass
299
299
300 def doc(self, obj):
300 def doc(self, obj):
301 pass
301 pass
302
302
303 def shortdoc(self, obj):
303 def shortdoc(self, obj):
304 doc = self.doc(obj)
304 doc = self.doc(obj)
305 if doc is not None:
305 if doc is not None:
306 doc = doc.strip().splitlines()[0].strip()
306 doc = doc.strip().splitlines()[0].strip()
307 return doc
307 return doc
308
308
309 def iter(self, obj):
309 def iter(self, obj):
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 def key(self):
314 def key(self):
315 return None
315 return None
316
316
317 def attrtype(self, obj):
317 def attrtype(self, obj):
318 return "self"
318 return "self"
319
319
320 def valuetype(self, obj):
320 def valuetype(self, obj):
321 return type(obj)
321 return type(obj)
322
322
323 def value(self, obj):
323 def value(self, obj):
324 return obj
324 return obj
325
325
326 def __repr__(self):
326 def __repr__(self):
327 return "Self"
327 return "Self"
328
328
329 selfdescriptor = SelfDescriptor() # there's no need for more than one
329 selfdescriptor = SelfDescriptor() # there's no need for more than one
330
330
331
331
332 class AttributeDescriptor(Descriptor):
332 class AttributeDescriptor(Descriptor):
333 __slots__ = ("_name", "_doc")
333 __slots__ = ("_name", "_doc")
334
334
335 def __init__(self, name, doc=None):
335 def __init__(self, name, doc=None):
336 self._name = name
336 self._name = name
337 self._doc = doc
337 self._doc = doc
338
338
339 def key(self):
339 def key(self):
340 return self._name
340 return self._name
341
341
342 def doc(self, obj):
342 def doc(self, obj):
343 return self._doc
343 return self._doc
344
344
345 def attrtype(self, obj):
345 def attrtype(self, obj):
346 return "attr"
346 return "attr"
347
347
348 def valuetype(self, obj):
348 def valuetype(self, obj):
349 return type(getattr(obj, self._name))
349 return type(getattr(obj, self._name))
350
350
351 def value(self, obj):
351 def value(self, obj):
352 return getattr(obj, self._name)
352 return getattr(obj, self._name)
353
353
354 def __repr__(self):
354 def __repr__(self):
355 if self._doc is None:
355 if self._doc is None:
356 return "Attribute(%r)" % self._name
356 return "Attribute(%r)" % self._name
357 else:
357 else:
358 return "Attribute(%r, %r)" % (self._name, self._doc)
358 return "Attribute(%r, %r)" % (self._name, self._doc)
359
359
360
360
361 class IndexDescriptor(Descriptor):
361 class IndexDescriptor(Descriptor):
362 __slots__ = ("_index",)
362 __slots__ = ("_index",)
363
363
364 def __init__(self, index):
364 def __init__(self, index):
365 self._index = index
365 self._index = index
366
366
367 def key(self):
367 def key(self):
368 return self._index
368 return self._index
369
369
370 def attrtype(self, obj):
370 def attrtype(self, obj):
371 return "item"
371 return "item"
372
372
373 def valuetype(self, obj):
373 def valuetype(self, obj):
374 return type(obj[self._index])
374 return type(obj[self._index])
375
375
376 def value(self, obj):
376 def value(self, obj):
377 return obj[self._index]
377 return obj[self._index]
378
378
379 def __repr__(self):
379 def __repr__(self):
380 return "Index(%r)" % self._index
380 return "Index(%r)" % self._index
381
381
382
382
383 class MethodDescriptor(Descriptor):
383 class MethodDescriptor(Descriptor):
384 __slots__ = ("_name", "_doc")
384 __slots__ = ("_name", "_doc")
385
385
386 def __init__(self, name, doc=None):
386 def __init__(self, name, doc=None):
387 self._name = name
387 self._name = name
388 self._doc = doc
388 self._doc = doc
389
389
390 def key(self):
390 def key(self):
391 return self._name
391 return self._name
392
392
393 def doc(self, obj):
393 def doc(self, obj):
394 if self._doc is None:
394 if self._doc is None:
395 return getattr(obj, self._name).__doc__
395 return getattr(obj, self._name).__doc__
396 return self._doc
396 return self._doc
397
397
398 def attrtype(self, obj):
398 def attrtype(self, obj):
399 return "method"
399 return "method"
400
400
401 def valuetype(self, obj):
401 def valuetype(self, obj):
402 return type(self.value(obj))
402 return type(self.value(obj))
403
403
404 def value(self, obj):
404 def value(self, obj):
405 return getattr(obj, self._name)()
405 return getattr(obj, self._name)()
406
406
407 def __repr__(self):
407 def __repr__(self):
408 if self._doc is None:
408 if self._doc is None:
409 return "Method(%r)" % self._name
409 return "Method(%r)" % self._name
410 else:
410 else:
411 return "Method(%r, %r)" % (self._name, self._doc)
411 return "Method(%r, %r)" % (self._name, self._doc)
412
412
413
413
414 class IterAttributeDescriptor(Descriptor):
414 class IterAttributeDescriptor(Descriptor):
415 __slots__ = ("_name", "_doc")
415 __slots__ = ("_name", "_doc")
416
416
417 def __init__(self, name, doc=None):
417 def __init__(self, name, doc=None):
418 self._name = name
418 self._name = name
419 self._doc = doc
419 self._doc = doc
420
420
421 def key(self):
421 def key(self):
422 return self._name
422 return self._name
423
423
424 def doc(self, obj):
424 def doc(self, obj):
425 return self._doc
425 return self._doc
426
426
427 def attrtype(self, obj):
427 def attrtype(self, obj):
428 return "iter"
428 return "iter"
429
429
430 def valuetype(self, obj):
430 def valuetype(self, obj):
431 return noitem
431 return noitem
432
432
433 def value(self, obj):
433 def value(self, obj):
434 return noitem
434 return noitem
435
435
436 def iter(self, obj):
436 def iter(self, obj):
437 return xiter(getattr(obj, self._name))
437 return xiter(getattr(obj, self._name))
438
438
439 def __repr__(self):
439 def __repr__(self):
440 if self._doc is None:
440 if self._doc is None:
441 return "IterAttribute(%r)" % self._name
441 return "IterAttribute(%r)" % self._name
442 else:
442 else:
443 return "IterAttribute(%r, %r)" % (self._name, self._doc)
443 return "IterAttribute(%r, %r)" % (self._name, self._doc)
444
444
445
445
446 class IterMethodDescriptor(Descriptor):
446 class IterMethodDescriptor(Descriptor):
447 __slots__ = ("_name", "_doc")
447 __slots__ = ("_name", "_doc")
448
448
449 def __init__(self, name, doc=None):
449 def __init__(self, name, doc=None):
450 self._name = name
450 self._name = name
451 self._doc = doc
451 self._doc = doc
452
452
453 def key(self):
453 def key(self):
454 return self._name
454 return self._name
455
455
456 def doc(self, obj):
456 def doc(self, obj):
457 if self._doc is None:
457 if self._doc is None:
458 return getattr(obj, self._name).__doc__
458 return getattr(obj, self._name).__doc__
459 return self._doc
459 return self._doc
460
460
461 def attrtype(self, obj):
461 def attrtype(self, obj):
462 return "itermethod"
462 return "itermethod"
463
463
464 def valuetype(self, obj):
464 def valuetype(self, obj):
465 return noitem
465 return noitem
466
466
467 def value(self, obj):
467 def value(self, obj):
468 return noitem
468 return noitem
469
469
470 def iter(self, obj):
470 def iter(self, obj):
471 return xiter(getattr(obj, self._name)())
471 return xiter(getattr(obj, self._name)())
472
472
473 def __repr__(self):
473 def __repr__(self):
474 if self._doc is None:
474 if self._doc is None:
475 return "IterMethod(%r)" % self._name
475 return "IterMethod(%r)" % self._name
476 else:
476 else:
477 return "IterMethod(%r, %r)" % (self._name, self._doc)
477 return "IterMethod(%r, %r)" % (self._name, self._doc)
478
478
479
479
480 class FunctionDescriptor(Descriptor):
480 class FunctionDescriptor(Descriptor):
481 __slots__ = ("_function", "_name", "_doc")
481 __slots__ = ("_function", "_name", "_doc")
482
482
483 def __init__(self, function, name=None, doc=None):
483 def __init__(self, function, name=None, doc=None):
484 self._function = function
484 self._function = function
485 self._name = name
485 self._name = name
486 self._doc = doc
486 self._doc = doc
487
487
488 def key(self):
488 def key(self):
489 return self._function
489 return self._function
490
490
491 def name(self):
491 def name(self):
492 if self._name is not None:
492 if self._name is not None:
493 return self._name
493 return self._name
494 return getattr(self._function, "__xname__", self._function.__name__)
494 return getattr(self._function, "__xname__", self._function.__name__)
495
495
496 def doc(self, obj):
496 def doc(self, obj):
497 if self._doc is None:
497 if self._doc is None:
498 return self._function.__doc__
498 return self._function.__doc__
499 return self._doc
499 return self._doc
500
500
501 def attrtype(self, obj):
501 def attrtype(self, obj):
502 return "function"
502 return "function"
503
503
504 def valuetype(self, obj):
504 def valuetype(self, obj):
505 return type(self._function(obj))
505 return type(self._function(obj))
506
506
507 def value(self, obj):
507 def value(self, obj):
508 return self._function(obj)
508 return self._function(obj)
509
509
510 def __repr__(self):
510 def __repr__(self):
511 if self._doc is None:
511 if self._doc is None:
512 return "Function(%r)" % self._name
512 return "Function(%r)" % self._name
513 else:
513 else:
514 return "Function(%r, %r)" % (self._name, self._doc)
514 return "Function(%r, %r)" % (self._name, self._doc)
515
515
516
516
517 class Table(object):
517 class Table(object):
518 """
518 """
519 A ``Table`` is an object that produces items (just like a normal Python
519 A ``Table`` is an object that produces items (just like a normal Python
520 iterator/generator does) and can be used as the first object in a pipeline
520 iterator/generator does) and can be used as the first object in a pipeline
521 expression. The displayhook will open the default browser for such an object
521 expression. The displayhook will open the default browser for such an object
522 (instead of simply printing the ``repr()`` result).
522 (instead of simply printing the ``repr()`` result).
523 """
523 """
524
524
525 # We want to support ``foo`` and ``foo()`` in pipeline expression:
525 # We want to support ``foo`` and ``foo()`` in pipeline expression:
526 # So we implement the required operators (``|`` and ``+``) in the metaclass,
526 # So we implement the required operators (``|`` and ``+``) in the metaclass,
527 # instantiate the class and forward the operator to the instance
527 # instantiate the class and forward the operator to the instance
528 class __metaclass__(type):
528 class __metaclass__(type):
529 def __iter__(self):
529 def __iter__(self):
530 return iter(self())
530 return iter(self())
531
531
532 def __or__(self, other):
532 def __or__(self, other):
533 return self() | other
533 return self() | other
534
534
535 def __add__(self, other):
535 def __add__(self, other):
536 return self() + other
536 return self() + other
537
537
538 def __radd__(self, other):
538 def __radd__(self, other):
539 return other + self()
539 return other + self()
540
540
541 def __getitem__(self, index):
541 def __getitem__(self, index):
542 return self()[index]
542 return self()[index]
543
543
544 def __getitem__(self, index):
544 def __getitem__(self, index):
545 return item(self, index)
545 return item(self, index)
546
546
547 def __contains__(self, item):
547 def __contains__(self, item):
548 for haveitem in self:
548 for haveitem in self:
549 if item == haveitem:
549 if item == haveitem:
550 return True
550 return True
551 return False
551 return False
552
552
553 def __or__(self, other):
553 def __or__(self, other):
554 # autoinstantiate right hand side
554 # autoinstantiate right hand side
555 if isinstance(other, type) and issubclass(other, (Table, Display)):
555 if isinstance(other, type) and issubclass(other, (Table, Display)):
556 other = other()
556 other = other()
557 # treat simple strings and functions as ``ieval`` instances
557 # treat simple strings and functions as ``ieval`` instances
558 elif not isinstance(other, Display) and not isinstance(other, Table):
558 elif not isinstance(other, Display) and not isinstance(other, Table):
559 other = ieval(other)
559 other = ieval(other)
560 # forward operations to the right hand side
560 # forward operations to the right hand side
561 return other.__ror__(self)
561 return other.__ror__(self)
562
562
563 def __add__(self, other):
563 def __add__(self, other):
564 # autoinstantiate right hand side
564 # autoinstantiate right hand side
565 if isinstance(other, type) and issubclass(other, Table):
565 if isinstance(other, type) and issubclass(other, Table):
566 other = other()
566 other = other()
567 return ichain(self, other)
567 return ichain(self, other)
568
568
569 def __radd__(self, other):
569 def __radd__(self, other):
570 # autoinstantiate left hand side
570 # autoinstantiate left hand side
571 if isinstance(other, type) and issubclass(other, Table):
571 if isinstance(other, type) and issubclass(other, Table):
572 other = other()
572 other = other()
573 return ichain(other, self)
573 return ichain(other, self)
574
574
575 def __iter__(self):
575 def __iter__(self):
576 return xiter(self, "default")
576 return xiter(self, "default")
577
577
578
578
579 class Pipe(Table):
579 class Pipe(Table):
580 """
580 """
581 A ``Pipe`` is an object that can be used in a pipeline expression. It
581 A ``Pipe`` is an object that can be used in a pipeline expression. It
582 processes the objects it gets from its input ``Table``/``Pipe``. Note that
582 processes the objects it gets from its input ``Table``/``Pipe``. Note that
583 a ``Pipe`` object can't be used as the first object in a pipeline
583 a ``Pipe`` object can't be used as the first object in a pipeline
584 expression, as it doesn't produces items itself.
584 expression, as it doesn't produces items itself.
585 """
585 """
586 class __metaclass__(Table.__metaclass__):
586 class __metaclass__(Table.__metaclass__):
587 def __ror__(self, input):
587 def __ror__(self, input):
588 return input | self()
588 return input | self()
589
589
590 def __ror__(self, input):
590 def __ror__(self, input):
591 # autoinstantiate left hand side
591 # autoinstantiate left hand side
592 if isinstance(input, type) and issubclass(input, Table):
592 if isinstance(input, type) and issubclass(input, Table):
593 input = input()
593 input = input()
594 self.input = input
594 self.input = input
595 return self
595 return self
596
596
597
597
598 def xrepr(item, mode="default"):
598 def xrepr(item, mode="default"):
599 try:
599 try:
600 func = item.__xrepr__
600 func = item.__xrepr__
601 except AttributeError:
601 except AttributeError:
602 pass
602 pass
603 else:
603 else:
604 try:
604 try:
605 for x in func(mode):
605 for x in func(mode):
606 yield x
606 yield x
607 except (KeyboardInterrupt, SystemExit):
607 except (KeyboardInterrupt, SystemExit):
608 raise
608 raise
609 except Exception:
609 except Exception:
610 yield (astyle.style_default, repr(item))
610 yield (astyle.style_default, repr(item))
611 return
611 return
612 if item is None:
612 if item is None:
613 yield (astyle.style_type_none, repr(item))
613 yield (astyle.style_type_none, repr(item))
614 elif isinstance(item, bool):
614 elif isinstance(item, bool):
615 yield (astyle.style_type_bool, repr(item))
615 yield (astyle.style_type_bool, repr(item))
616 elif isinstance(item, str):
616 elif isinstance(item, str):
617 if mode == "cell":
617 if mode == "cell":
618 yield (astyle.style_default, repr(item.expandtabs(tab))[1:-1])
618 yield (astyle.style_default, repr(item.expandtabs(tab))[1:-1])
619 else:
619 else:
620 yield (astyle.style_default, repr(item))
620 yield (astyle.style_default, repr(item))
621 elif isinstance(item, unicode):
621 elif isinstance(item, unicode):
622 if mode == "cell":
622 if mode == "cell":
623 yield (astyle.style_default, repr(item.expandtabs(tab))[2:-1])
623 yield (astyle.style_default, repr(item.expandtabs(tab))[2:-1])
624 else:
624 else:
625 yield (astyle.style_default, repr(item))
625 yield (astyle.style_default, repr(item))
626 elif isinstance(item, (int, long, float)):
626 elif isinstance(item, (int, long, float)):
627 yield (1, True)
627 yield (1, True)
628 yield (astyle.style_type_number, repr(item))
628 yield (astyle.style_type_number, repr(item))
629 elif isinstance(item, complex):
629 elif isinstance(item, complex):
630 yield (astyle.style_type_number, repr(item))
630 yield (astyle.style_type_number, repr(item))
631 elif isinstance(item, datetime.datetime):
631 elif isinstance(item, datetime.datetime):
632 if mode == "cell":
632 if mode == "cell":
633 # Don't use strftime() here, as this requires year >= 1900
633 # Don't use strftime() here, as this requires year >= 1900
634 yield (astyle.style_type_datetime,
634 yield (astyle.style_type_datetime,
635 "%04d-%02d-%02d %02d:%02d:%02d.%06d" % \
635 "%04d-%02d-%02d %02d:%02d:%02d.%06d" % \
636 (item.year, item.month, item.day,
636 (item.year, item.month, item.day,
637 item.hour, item.minute, item.second,
637 item.hour, item.minute, item.second,
638 item.microsecond),
638 item.microsecond),
639 )
639 )
640 else:
640 else:
641 yield (astyle.style_type_datetime, repr(item))
641 yield (astyle.style_type_datetime, repr(item))
642 elif isinstance(item, datetime.date):
642 elif isinstance(item, datetime.date):
643 if mode == "cell":
643 if mode == "cell":
644 yield (astyle.style_type_datetime,
644 yield (astyle.style_type_datetime,
645 "%04d-%02d-%02d" % (item.year, item.month, item.day))
645 "%04d-%02d-%02d" % (item.year, item.month, item.day))
646 else:
646 else:
647 yield (astyle.style_type_datetime, repr(item))
647 yield (astyle.style_type_datetime, repr(item))
648 elif isinstance(item, datetime.time):
648 elif isinstance(item, datetime.time):
649 if mode == "cell":
649 if mode == "cell":
650 yield (astyle.style_type_datetime,
650 yield (astyle.style_type_datetime,
651 "%02d:%02d:%02d.%06d" % \
651 "%02d:%02d:%02d.%06d" % \
652 (item.hour, item.minute, item.second, item.microsecond))
652 (item.hour, item.minute, item.second, item.microsecond))
653 else:
653 else:
654 yield (astyle.style_type_datetime, repr(item))
654 yield (astyle.style_type_datetime, repr(item))
655 elif isinstance(item, datetime.timedelta):
655 elif isinstance(item, datetime.timedelta):
656 yield (astyle.style_type_datetime, repr(item))
656 yield (astyle.style_type_datetime, repr(item))
657 elif isinstance(item, type):
657 elif isinstance(item, type):
658 if item.__module__ == "__builtin__":
658 if item.__module__ == "__builtin__":
659 yield (astyle.style_type_type, item.__name__)
659 yield (astyle.style_type_type, item.__name__)
660 else:
660 else:
661 yield (astyle.style_type_type, "%s.%s" % (item.__module__, item.__name__))
661 yield (astyle.style_type_type, "%s.%s" % (item.__module__, item.__name__))
662 elif isinstance(item, Exception):
662 elif isinstance(item, Exception):
663 if item.__class__.__module__ == "exceptions":
663 if item.__class__.__module__ == "exceptions":
664 classname = item.__class__.__name__
664 classname = item.__class__.__name__
665 else:
665 else:
666 classname = "%s.%s" % \
666 classname = "%s.%s" % \
667 (item.__class__.__module__, item.__class__.__name__)
667 (item.__class__.__module__, item.__class__.__name__)
668 if mode == "header" or mode == "footer":
668 if mode == "header" or mode == "footer":
669 yield (astyle.style_error, "%s: %s" % (classname, item))
669 yield (astyle.style_error, "%s: %s" % (classname, item))
670 else:
670 else:
671 yield (astyle.style_error, classname)
671 yield (astyle.style_error, classname)
672 elif isinstance(item, (list, tuple)):
672 elif isinstance(item, (list, tuple)):
673 if mode == "header" or mode == "footer":
673 if mode == "header" or mode == "footer":
674 if item.__class__.__module__ == "__builtin__":
674 if item.__class__.__module__ == "__builtin__":
675 classname = item.__class__.__name__
675 classname = item.__class__.__name__
676 else:
676 else:
677 classname = "%s.%s" % \
677 classname = "%s.%s" % \
678 (item.__class__.__module__,item.__class__.__name__)
678 (item.__class__.__module__,item.__class__.__name__)
679 yield (astyle.style_default,
679 yield (astyle.style_default,
680 "<%s object with %d items at 0x%x>" % \
680 "<%s object with %d items at 0x%x>" % \
681 (classname, len(item), id(item)))
681 (classname, len(item), id(item)))
682 else:
682 else:
683 yield (-1, False)
683 yield (-1, False)
684 if isinstance(item, list):
684 if isinstance(item, list):
685 yield (astyle.style_default, "[")
685 yield (astyle.style_default, "[")
686 end = "]"
686 end = "]"
687 else:
687 else:
688 yield (astyle.style_default, "(")
688 yield (astyle.style_default, "(")
689 end = ")"
689 end = ")"
690 for (i, subitem) in enumerate(item):
690 for (i, subitem) in enumerate(item):
691 if i:
691 if i:
692 yield (astyle.style_default, ", ")
692 yield (astyle.style_default, ", ")
693 for part in xrepr(subitem, "default"):
693 for part in xrepr(subitem, "default"):
694 yield part
694 yield part
695 yield (astyle.style_default, end)
695 yield (astyle.style_default, end)
696 elif isinstance(item, (dict, types.DictProxyType)):
696 elif isinstance(item, (dict, types.DictProxyType)):
697 if mode == "header" or mode == "footer":
697 if mode == "header" or mode == "footer":
698 if item.__class__.__module__ == "__builtin__":
698 if item.__class__.__module__ == "__builtin__":
699 classname = item.__class__.__name__
699 classname = item.__class__.__name__
700 else:
700 else:
701 classname = "%s.%s" % \
701 classname = "%s.%s" % \
702 (item.__class__.__module__,item.__class__.__name__)
702 (item.__class__.__module__,item.__class__.__name__)
703 yield (astyle.style_default,
703 yield (astyle.style_default,
704 "<%s object with %d items at 0x%x>" % \
704 "<%s object with %d items at 0x%x>" % \
705 (classname, len(item), id(item)))
705 (classname, len(item), id(item)))
706 else:
706 else:
707 yield (-1, False)
707 yield (-1, False)
708 if isinstance(item, dict):
708 if isinstance(item, dict):
709 yield (astyle.style_default, "{")
709 yield (astyle.style_default, "{")
710 end = "}"
710 end = "}"
711 else:
711 else:
712 yield (astyle.style_default, "dictproxy((")
712 yield (astyle.style_default, "dictproxy((")
713 end = "})"
713 end = "})"
714 for (i, (key, value)) in enumerate(item.iteritems()):
714 for (i, (key, value)) in enumerate(item.iteritems()):
715 if i:
715 if i:
716 yield (astyle.style_default, ", ")
716 yield (astyle.style_default, ", ")
717 for part in xrepr(key, "default"):
717 for part in xrepr(key, "default"):
718 yield part
718 yield part
719 yield (astyle.style_default, ": ")
719 yield (astyle.style_default, ": ")
720 for part in xrepr(value, "default"):
720 for part in xrepr(value, "default"):
721 yield part
721 yield part
722 yield (astyle.style_default, end)
722 yield (astyle.style_default, end)
723 else:
723 else:
724 yield (astyle.style_default, repr(item))
724 yield (astyle.style_default, repr(item))
725
725
726
726
727 def upgradexattr(attr):
727 def upgradexattr(attr):
728 if attr is None:
728 if attr is None:
729 return selfdescriptor
729 return selfdescriptor
730 elif isinstance(attr, Descriptor):
730 elif isinstance(attr, Descriptor):
731 return attr
731 return attr
732 elif isinstance(attr, str):
732 elif isinstance(attr, str):
733 if attr.endswith("()"):
733 if attr.endswith("()"):
734 if attr.startswith("-"):
734 if attr.startswith("-"):
735 return IterMethodDescriptor(attr[1:-2])
735 return IterMethodDescriptor(attr[1:-2])
736 else:
736 else:
737 return MethodDescriptor(attr[:-2])
737 return MethodDescriptor(attr[:-2])
738 else:
738 else:
739 if attr.startswith("-"):
739 if attr.startswith("-"):
740 return IterAttributeDescriptor(attr[1:])
740 return IterAttributeDescriptor(attr[1:])
741 else:
741 else:
742 return AttributeDescriptor(attr)
742 return AttributeDescriptor(attr)
743 elif isinstance(attr, (int, long)):
743 elif isinstance(attr, (int, long)):
744 return IndexDescriptor(attr)
744 return IndexDescriptor(attr)
745 elif callable(attr):
745 elif callable(attr):
746 return FunctionDescriptor(attr)
746 return FunctionDescriptor(attr)
747 else:
747 else:
748 raise TypeError("can't handle descriptor %r" % attr)
748 raise TypeError("can't handle descriptor %r" % attr)
749
749
750
750
751 def xattrs(item, mode="default"):
751 def xattrs(item, mode="default"):
752 try:
752 try:
753 func = item.__xattrs__
753 func = item.__xattrs__
754 except AttributeError:
754 except AttributeError:
755 if mode == "detail":
755 if mode == "detail":
756 for attrname in dir(item):
756 for attrname in dir(item):
757 yield AttributeDescriptor(attrname)
757 yield AttributeDescriptor(attrname)
758 else:
758 else:
759 yield selfdescriptor
759 yield selfdescriptor
760 else:
760 else:
761 for attr in func(mode):
761 for attr in func(mode):
762 yield upgradexattr(attr)
762 yield upgradexattr(attr)
763
763
764
764
765 def _isdict(item):
765 def _isdict(item):
766 try:
766 try:
767 itermeth = item.__class__.__iter__
767 itermeth = item.__class__.__iter__
768 except (AttributeError, TypeError):
768 except (AttributeError, TypeError):
769 return False
769 return False
770 return itermeth is dict.__iter__ or itermeth is types.DictProxyType.__iter__
770 return itermeth is dict.__iter__ or itermeth is types.DictProxyType.__iter__
771
771
772
772
773 def _isstr(item):
773 def _isstr(item):
774 if not isinstance(item, basestring):
774 if not isinstance(item, basestring):
775 return False
775 return False
776 try:
776 try:
777 itermeth = item.__class__.__iter__
777 itermeth = item.__class__.__iter__
778 except AttributeError:
778 except AttributeError:
779 return True
779 return True
780 return False # ``__iter__`` has been redefined
780 return False # ``__iter__`` has been redefined
781
781
782
782
783 def xiter(item, mode="default"):
783 def xiter(item, mode="default"):
784 try:
784 try:
785 func = item.__xiter__
785 func = item.__xiter__
786 except AttributeError:
786 except AttributeError:
787 if _isdict(item):
787 if _isdict(item):
788 def items(item):
788 def items(item):
789 fields = ("key", "value")
789 fields = ("key", "value")
790 for (key, value) in item.iteritems():
790 for (key, value) in item.iteritems():
791 yield Fields(fields, key=key, value=value)
791 yield Fields(fields, key=key, value=value)
792 return items(item)
792 return items(item)
793 elif isinstance(item, new.module):
793 elif isinstance(item, new.module):
794 def items(item):
794 def items(item):
795 fields = ("key", "value")
795 fields = ("key", "value")
796 for key in sorted(item.__dict__):
796 for key in sorted(item.__dict__):
797 yield Fields(fields, key=key, value=getattr(item, key))
797 yield Fields(fields, key=key, value=getattr(item, key))
798 return items(item)
798 return items(item)
799 elif _isstr(item):
799 elif _isstr(item):
800 if not item:
800 if not item:
801 raise ValueError("can't enter empty string")
801 raise ValueError("can't enter empty string")
802 lines = item.splitlines()
802 lines = item.splitlines()
803 if len(lines) <= 1:
803 if len(lines) <= 1:
804 raise ValueError("can't enter one line string")
804 raise ValueError("can't enter one line string")
805 return iter(lines)
805 return iter(lines)
806 return iter(item)
806 return iter(item)
807 else:
807 else:
808 return iter(func(mode)) # iter() just to be safe
808 return iter(func(mode)) # iter() just to be safe
809
809
810
810
811 class ichain(Pipe):
811 class ichain(Pipe):
812 """
812 """
813 Chains multiple ``Table``s into one.
813 Chains multiple ``Table``s into one.
814 """
814 """
815
815
816 def __init__(self, *iters):
816 def __init__(self, *iters):
817 self.iters = iters
817 self.iters = iters
818
818
819 def __iter__(self):
819 def __iter__(self):
820 return itertools.chain(*self.iters)
820 return itertools.chain(*self.iters)
821
821
822 def __xrepr__(self, mode):
822 def __xrepr__(self, mode):
823 if mode == "header" or mode == "footer":
823 if mode == "header" or mode == "footer":
824 for (i, item) in enumerate(self.iters):
824 for (i, item) in enumerate(self.iters):
825 if i:
825 if i:
826 yield (astyle.style_default, "+")
826 yield (astyle.style_default, "+")
827 if isinstance(item, Pipe):
827 if isinstance(item, Pipe):
828 yield (astyle.style_default, "(")
828 yield (astyle.style_default, "(")
829 for part in xrepr(item, mode):
829 for part in xrepr(item, mode):
830 yield part
830 yield part
831 if isinstance(item, Pipe):
831 if isinstance(item, Pipe):
832 yield (astyle.style_default, ")")
832 yield (astyle.style_default, ")")
833 else:
833 else:
834 yield (astyle.style_default, repr(self))
834 yield (astyle.style_default, repr(self))
835
835
836 def __repr__(self):
836 def __repr__(self):
837 args = ", ".join([repr(it) for it in self.iters])
837 args = ", ".join([repr(it) for it in self.iters])
838 return "%s.%s(%s)" % \
838 return "%s.%s(%s)" % \
839 (self.__class__.__module__, self.__class__.__name__, args)
839 (self.__class__.__module__, self.__class__.__name__, args)
840
840
841
841
842 class ifile(path.path):
842 class ifile(path.path):
843 """
843 """
844 file (or directory) object.
844 file (or directory) object.
845 """
845 """
846
846
847 def __add_(self, other):
847 def __add_(self, other):
848 return ifile(path._base(self) + other)
848 return ifile(path._base(self) + other)
849
849
850 def __radd_(self, other):
850 def __radd_(self, other):
851 return ifile(other + path._base(self))
851 return ifile(other + path._base(self))
852
852
853 def __div_(self, other):
853 def __div_(self, other):
854 return ifile(path.__div__(self, other))
854 return ifile(path.__div__(self, other))
855
855
856 def getcwd():
856 def getcwd():
857 return ifile(path.path.getcwd())
857 return ifile(path.path.getcwd())
858 getcwd.__doc__ = path.path.getcwd.__doc__
858 getcwd.__doc__ = path.path.getcwd.__doc__
859 getcwd = staticmethod(getcwd)
859 getcwd = staticmethod(getcwd)
860
860
861 def abspath(self):
861 def abspath(self):
862 return ifile(path.path.abspath(self))
862 return ifile(path.path.abspath(self))
863 abspath.__doc__ = path.path.abspath.__doc__
863 abspath.__doc__ = path.path.abspath.__doc__
864
864
865 def normcase(self):
865 def normcase(self):
866 return ifile(path.path.normcase(self))
866 return ifile(path.path.normcase(self))
867 normcase.__doc__ = path.path.normcase.__doc__
867 normcase.__doc__ = path.path.normcase.__doc__
868
868
869 def normpath(self):
869 def normpath(self):
870 return ifile(path.path.normpath(self))
870 return ifile(path.path.normpath(self))
871 normpath.__doc__ = path.path.normpath.__doc__
871 normpath.__doc__ = path.path.normpath.__doc__
872
872
873 def realpath(self):
873 def realpath(self):
874 return ifile(path.path.realpath(self))
874 return ifile(path.path.realpath(self))
875 realpath.__doc__ = path.path.realpath.__doc__
875 realpath.__doc__ = path.path.realpath.__doc__
876
876
877 def expanduser(self):
877 def expanduser(self):
878 return ifile(path.path.expanduser(self))
878 return ifile(path.path.expanduser(self))
879 expanduser.__doc__ = path.path.expanduser.__doc__
879 expanduser.__doc__ = path.path.expanduser.__doc__
880
880
881 def expandvars(self):
881 def expandvars(self):
882 return ifile(path.path.expandvars(self))
882 return ifile(path.path.expandvars(self))
883 expandvars.__doc__ = path.path.expandvars.__doc__
883 expandvars.__doc__ = path.path.expandvars.__doc__
884
884
885 def dirname(self):
885 def dirname(self):
886 return ifile(path.path.dirname(self))
886 return ifile(path.path.dirname(self))
887 dirname.__doc__ = path.path.dirname.__doc__
887 dirname.__doc__ = path.path.dirname.__doc__
888
888
889 parent = property(dirname, None, None, path.path.parent.__doc__)
889 parent = property(dirname, None, None, path.path.parent.__doc__)
890
890
891 def splitpath(self):
891 def splitpath(self):
892 (parent, child) = path.path.splitpath(self)
892 (parent, child) = path.path.splitpath(self)
893 return (ifile(parent), child)
893 return (ifile(parent), child)
894 splitpath.__doc__ = path.path.splitpath.__doc__
894 splitpath.__doc__ = path.path.splitpath.__doc__
895
895
896 def splitdrive(self):
896 def splitdrive(self):
897 (drive, rel) = path.path.splitdrive(self)
897 (drive, rel) = path.path.splitdrive(self)
898 return (ifile(drive), rel)
898 return (ifile(drive), rel)
899 splitdrive.__doc__ = path.path.splitdrive.__doc__
899 splitdrive.__doc__ = path.path.splitdrive.__doc__
900
900
901 def splitext(self):
901 def splitext(self):
902 (filename, ext) = path.path.splitext(self)
902 (filename, ext) = path.path.splitext(self)
903 return (ifile(filename), ext)
903 return (ifile(filename), ext)
904 splitext.__doc__ = path.path.splitext.__doc__
904 splitext.__doc__ = path.path.splitext.__doc__
905
905
906 if hasattr(path.path, "splitunc"):
906 if hasattr(path.path, "splitunc"):
907 def splitunc(self):
907 def splitunc(self):
908 (unc, rest) = path.path.splitunc(self)
908 (unc, rest) = path.path.splitunc(self)
909 return (ifile(unc), rest)
909 return (ifile(unc), rest)
910 splitunc.__doc__ = path.path.splitunc.__doc__
910 splitunc.__doc__ = path.path.splitunc.__doc__
911
911
912 def _get_uncshare(self):
912 def _get_uncshare(self):
913 unc, r = os.path.splitunc(self)
913 unc, r = os.path.splitunc(self)
914 return ifile(unc)
914 return ifile(unc)
915
915
916 uncshare = property(
916 uncshare = property(
917 _get_uncshare, None, None,
917 _get_uncshare, None, None,
918 """ The UNC mount point for this path.
918 """ The UNC mount point for this path.
919 This is empty for paths on local drives. """)
919 This is empty for paths on local drives. """)
920
920
921 def joinpath(self, *args):
921 def joinpath(self, *args):
922 return ifile(path.path.joinpath(self, *args))
922 return ifile(path.path.joinpath(self, *args))
923 joinpath.__doc__ = path.path.joinpath.__doc__
923 joinpath.__doc__ = path.path.joinpath.__doc__
924
924
925 def splitall(self):
925 def splitall(self):
926 return map(ifile, path.path.splitall(self))
926 return map(ifile, path.path.splitall(self))
927 splitall.__doc__ = path.path.splitall.__doc__
927 splitall.__doc__ = path.path.splitall.__doc__
928
928
929 def relpath(self):
929 def relpath(self):
930 return ifile(path.path.relpath(self))
930 return ifile(path.path.relpath(self))
931 relpath.__doc__ = path.path.relpath.__doc__
931 relpath.__doc__ = path.path.relpath.__doc__
932
932
933 def relpathto(self, dest):
933 def relpathto(self, dest):
934 return ifile(path.path.relpathto(self, dest))
934 return ifile(path.path.relpathto(self, dest))
935 relpathto.__doc__ = path.path.relpathto.__doc__
935 relpathto.__doc__ = path.path.relpathto.__doc__
936
936
937 def listdir(self, pattern=None):
937 def listdir(self, pattern=None):
938 return [ifile(child) for child in path.path.listdir(self, pattern)]
938 return [ifile(child) for child in path.path.listdir(self, pattern)]
939 listdir.__doc__ = path.path.listdir.__doc__
939 listdir.__doc__ = path.path.listdir.__doc__
940
940
941 def dirs(self, pattern=None):
941 def dirs(self, pattern=None):
942 return [ifile(child) for child in path.path.dirs(self, pattern)]
942 return [ifile(child) for child in path.path.dirs(self, pattern)]
943 dirs.__doc__ = path.path.dirs.__doc__
943 dirs.__doc__ = path.path.dirs.__doc__
944
944
945 def files(self, pattern=None):
945 def files(self, pattern=None):
946 return [ifile(child) for child in path.path.files(self, pattern)]
946 return [ifile(child) for child in path.path.files(self, pattern)]
947 files.__doc__ = path.path.files.__doc__
947 files.__doc__ = path.path.files.__doc__
948
948
949 def walk(self, pattern=None):
949 def walk(self, pattern=None):
950 for child in path.path.walk(self, pattern):
950 for child in path.path.walk(self, pattern):
951 yield ifile(child)
951 yield ifile(child)
952 walk.__doc__ = path.path.walk.__doc__
952 walk.__doc__ = path.path.walk.__doc__
953
953
954 def walkdirs(self, pattern=None):
954 def walkdirs(self, pattern=None):
955 for child in path.path.walkdirs(self, pattern):
955 for child in path.path.walkdirs(self, pattern):
956 yield ifile(child)
956 yield ifile(child)
957 walkdirs.__doc__ = path.path.walkdirs.__doc__
957 walkdirs.__doc__ = path.path.walkdirs.__doc__
958
958
959 def walkfiles(self, pattern=None):
959 def walkfiles(self, pattern=None):
960 for child in path.path.walkfiles(self, pattern):
960 for child in path.path.walkfiles(self, pattern):
961 yield ifile(child)
961 yield ifile(child)
962 walkfiles.__doc__ = path.path.walkfiles.__doc__
962 walkfiles.__doc__ = path.path.walkfiles.__doc__
963
963
964 def glob(self, pattern):
964 def glob(self, pattern):
965 return map(ifile, path.path.glob(self, pattern))
965 return map(ifile, path.path.glob(self, pattern))
966 glob.__doc__ = path.path.glob.__doc__
966 glob.__doc__ = path.path.glob.__doc__
967
967
968 if hasattr(os, 'readlink'):
968 if hasattr(os, 'readlink'):
969 def readlink(self):
969 def readlink(self):
970 return ifile(path.path.readlink(self))
970 return ifile(path.path.readlink(self))
971 readlink.__doc__ = path.path.readlink.__doc__
971 readlink.__doc__ = path.path.readlink.__doc__
972
972
973 def readlinkabs(self):
973 def readlinkabs(self):
974 return ifile(path.path.readlinkabs(self))
974 return ifile(path.path.readlinkabs(self))
975 readlinkabs.__doc__ = path.path.readlinkabs.__doc__
975 readlinkabs.__doc__ = path.path.readlinkabs.__doc__
976
976
977 def getmode(self):
977 def getmode(self):
978 return self.stat().st_mode
978 return self.stat().st_mode
979 mode = property(getmode, None, None, "Access mode")
979 mode = property(getmode, None, None, "Access mode")
980
980
981 def gettype(self):
981 def gettype(self):
982 data = [
982 data = [
983 (stat.S_ISREG, "file"),
983 (stat.S_ISREG, "file"),
984 (stat.S_ISDIR, "dir"),
984 (stat.S_ISDIR, "dir"),
985 (stat.S_ISCHR, "chardev"),
985 (stat.S_ISCHR, "chardev"),
986 (stat.S_ISBLK, "blockdev"),
986 (stat.S_ISBLK, "blockdev"),
987 (stat.S_ISFIFO, "fifo"),
987 (stat.S_ISFIFO, "fifo"),
988 (stat.S_ISLNK, "symlink"),
988 (stat.S_ISLNK, "symlink"),
989 (stat.S_ISSOCK,"socket"),
989 (stat.S_ISSOCK,"socket"),
990 ]
990 ]
991 lstat = self.lstat()
991 lstat = self.lstat()
992 if lstat is not None:
992 if lstat is not None:
993 types = set([text for (func, text) in data if func(lstat.st_mode)])
993 types = set([text for (func, text) in data if func(lstat.st_mode)])
994 else:
994 else:
995 types = set()
995 types = set()
996 m = self.mode
996 m = self.mode
997 types.update([text for (func, text) in data if func(m)])
997 types.update([text for (func, text) in data if func(m)])
998 return ", ".join(types)
998 return ", ".join(types)
999 type = property(gettype, None, None, "file type (file, directory, link, etc.)")
999 type = property(gettype, None, None, "file type (file, directory, link, etc.)")
1000
1000
1001 def getmodestr(self):
1001 def getmodestr(self):
1002 m = self.mode
1002 m = self.mode
1003 data = [
1003 data = [
1004 (stat.S_IRUSR, "-r"),
1004 (stat.S_IRUSR, "-r"),
1005 (stat.S_IWUSR, "-w"),
1005 (stat.S_IWUSR, "-w"),
1006 (stat.S_IXUSR, "-x"),
1006 (stat.S_IXUSR, "-x"),
1007 (stat.S_IRGRP, "-r"),
1007 (stat.S_IRGRP, "-r"),
1008 (stat.S_IWGRP, "-w"),
1008 (stat.S_IWGRP, "-w"),
1009 (stat.S_IXGRP, "-x"),
1009 (stat.S_IXGRP, "-x"),
1010 (stat.S_IROTH, "-r"),
1010 (stat.S_IROTH, "-r"),
1011 (stat.S_IWOTH, "-w"),
1011 (stat.S_IWOTH, "-w"),
1012 (stat.S_IXOTH, "-x"),
1012 (stat.S_IXOTH, "-x"),
1013 ]
1013 ]
1014 return "".join([text[bool(m&bit)] for (bit, text) in data])
1014 return "".join([text[bool(m&bit)] for (bit, text) in data])
1015
1015
1016 modestr = property(getmodestr, None, None, "Access mode as string")
1016 modestr = property(getmodestr, None, None, "Access mode as string")
1017
1017
1018 def getblocks(self):
1018 def getblocks(self):
1019 return self.stat().st_blocks
1019 return self.stat().st_blocks
1020 blocks = property(getblocks, None, None, "File size in blocks")
1020 blocks = property(getblocks, None, None, "File size in blocks")
1021
1021
1022 def getblksize(self):
1022 def getblksize(self):
1023 return self.stat().st_blksize
1023 return self.stat().st_blksize
1024 blksize = property(getblksize, None, None, "Filesystem block size")
1024 blksize = property(getblksize, None, None, "Filesystem block size")
1025
1025
1026 def getdev(self):
1026 def getdev(self):
1027 return self.stat().st_dev
1027 return self.stat().st_dev
1028 dev = property(getdev)
1028 dev = property(getdev)
1029
1029
1030 def getnlink(self):
1030 def getnlink(self):
1031 return self.stat().st_nlink
1031 return self.stat().st_nlink
1032 nlink = property(getnlink, None, None, "Number of links")
1032 nlink = property(getnlink, None, None, "Number of links")
1033
1033
1034 def getuid(self):
1034 def getuid(self):
1035 return self.stat().st_uid
1035 return self.stat().st_uid
1036 uid = property(getuid, None, None, "User id of file owner")
1036 uid = property(getuid, None, None, "User id of file owner")
1037
1037
1038 def getgid(self):
1038 def getgid(self):
1039 return self.stat().st_gid
1039 return self.stat().st_gid
1040 gid = property(getgid, None, None, "Group id of file owner")
1040 gid = property(getgid, None, None, "Group id of file owner")
1041
1041
1042 def getowner(self):
1042 def getowner(self):
1043 stat = self.stat()
1043 stat = self.stat()
1044 try:
1044 try:
1045 return pwd.getpwuid(stat.st_uid).pw_name
1045 return pwd.getpwuid(stat.st_uid).pw_name
1046 except KeyError:
1046 except KeyError:
1047 return stat.st_uid
1047 return stat.st_uid
1048 owner = property(getowner, None, None, "Owner name (or id)")
1048 owner = property(getowner, None, None, "Owner name (or id)")
1049
1049
1050 def getgroup(self):
1050 def getgroup(self):
1051 stat = self.stat()
1051 stat = self.stat()
1052 try:
1052 try:
1053 return grp.getgrgid(stat.st_gid).gr_name
1053 return grp.getgrgid(stat.st_gid).gr_name
1054 except KeyError:
1054 except KeyError:
1055 return stat.st_gid
1055 return stat.st_gid
1056 group = property(getgroup, None, None, "Group name (or id)")
1056 group = property(getgroup, None, None, "Group name (or id)")
1057
1057
1058 def getadate(self):
1058 def getadate(self):
1059 return datetime.datetime.utcfromtimestamp(self.atime)
1059 return datetime.datetime.utcfromtimestamp(self.atime)
1060 adate = property(getadate, None, None, "Access date")
1060 adate = property(getadate, None, None, "Access date")
1061
1061
1062 def getcdate(self):
1062 def getcdate(self):
1063 return datetime.datetime.utcfromtimestamp(self.ctime)
1063 return datetime.datetime.utcfromtimestamp(self.ctime)
1064 cdate = property(getcdate, None, None, "Creation date")
1064 cdate = property(getcdate, None, None, "Creation date")
1065
1065
1066 def getmdate(self):
1066 def getmdate(self):
1067 return datetime.datetime.utcfromtimestamp(self.mtime)
1067 return datetime.datetime.utcfromtimestamp(self.mtime)
1068 mdate = property(getmdate, None, None, "Modification date")
1068 mdate = property(getmdate, None, None, "Modification date")
1069
1069
1070 def mimetype(self):
1070 def mimetype(self):
1071 """
1071 """
1072 Return MIME type guessed from the extension.
1072 Return MIME type guessed from the extension.
1073 """
1073 """
1074 return mimetypes.guess_type(self.basename())[0]
1074 return mimetypes.guess_type(self.basename())[0]
1075
1075
1076 def encoding(self):
1076 def encoding(self):
1077 """
1077 """
1078 Return guessed compression (like "compress" or "gzip").
1078 Return guessed compression (like "compress" or "gzip").
1079 """
1079 """
1080 return mimetypes.guess_type(self.basename())[1]
1080 return mimetypes.guess_type(self.basename())[1]
1081
1081
1082 def __repr__(self):
1082 def __repr__(self):
1083 return "ifile(%s)" % path._base.__repr__(self)
1083 return "ifile(%s)" % path._base.__repr__(self)
1084
1084
1085 defaultattrs = (None, "type", "size", "modestr", "owner", "group", "mdate")
1085 defaultattrs = (None, "type", "size", "modestr", "owner", "group", "mdate")
1086
1086
1087 def __xattrs__(self, mode):
1087 def __xattrs__(self, mode):
1088 if mode == "detail":
1088 if mode == "detail":
1089 return (
1089 return (
1090 "name",
1090 "name",
1091 "basename()",
1091 "basename()",
1092 "abspath()",
1092 "abspath()",
1093 "realpath()",
1093 "realpath()",
1094 "type",
1094 "type",
1095 "mode",
1095 "mode",
1096 "modestr",
1096 "modestr",
1097 "stat()",
1097 "stat()",
1098 "lstat()",
1098 "lstat()",
1099 "uid",
1099 "uid",
1100 "gid",
1100 "gid",
1101 "owner",
1101 "owner",
1102 "group",
1102 "group",
1103 "dev",
1103 "dev",
1104 "nlink",
1104 "nlink",
1105 "ctime",
1105 "ctime",
1106 "mtime",
1106 "mtime",
1107 "atime",
1107 "atime",
1108 "cdate",
1108 "cdate",
1109 "mdate",
1109 "mdate",
1110 "adate",
1110 "adate",
1111 "size",
1111 "size",
1112 "blocks",
1112 "blocks",
1113 "blksize",
1113 "blksize",
1114 "isdir()",
1114 "isdir()",
1115 "islink()",
1115 "islink()",
1116 "mimetype()",
1116 "mimetype()",
1117 "encoding()",
1117 "encoding()",
1118 "-listdir()",
1118 "-listdir()",
1119 "-dirs()",
1119 "-dirs()",
1120 "-files()",
1120 "-files()",
1121 "-walk()",
1121 "-walk()",
1122 "-walkdirs()",
1122 "-walkdirs()",
1123 "-walkfiles()",
1123 "-walkfiles()",
1124 )
1124 )
1125 else:
1125 else:
1126 return self.defaultattrs
1126 return self.defaultattrs
1127
1127
1128 def __xrepr__(self, mode):
1128 def __xrepr__(self, mode):
1129 try:
1129 try:
1130 if self.isdir():
1130 if self.isdir():
1131 name = "idir"
1131 name = "idir"
1132 style = astyle.style_dir
1132 style = astyle.style_dir
1133 else:
1133 else:
1134 name = "ifile"
1134 name = "ifile"
1135 style = astyle.style_file
1135 style = astyle.style_file
1136 except IOError:
1136 except IOError:
1137 name = "ifile"
1137 name = "ifile"
1138 style = astyle.style_default
1138 style = astyle.style_default
1139 if mode == "cell" or mode in "header" or mode == "footer":
1139 if mode == "cell" or mode in "header" or mode == "footer":
1140 abspath = repr(path._base(self.normpath()))
1140 abspath = repr(path._base(self.normpath()))
1141 if abspath.startswith("u"):
1141 if abspath.startswith("u"):
1142 abspath = abspath[2:-1]
1142 abspath = abspath[2:-1]
1143 else:
1143 else:
1144 abspath = abspath[1:-1]
1144 abspath = abspath[1:-1]
1145 if mode == "cell":
1145 if mode == "cell":
1146 yield (style, abspath)
1146 yield (style, abspath)
1147 else:
1147 else:
1148 yield (style, "%s(%s)" % (name, abspath))
1148 yield (style, "%s(%s)" % (name, abspath))
1149 else:
1149 else:
1150 yield (style, repr(self))
1150 yield (style, repr(self))
1151
1151
1152 def __iter__(self):
1152 def __iter__(self):
1153 if self.isdir():
1153 if self.isdir():
1154 yield iparentdir(self / os.pardir)
1154 yield iparentdir(self / os.pardir)
1155 for child in sorted(self.listdir()):
1155 for child in sorted(self.listdir()):
1156 yield child
1156 yield child
1157 else:
1157 else:
1158 f = self.open("rb")
1158 f = self.open("rb")
1159 for line in f:
1159 for line in f:
1160 yield line
1160 yield line
1161 f.close()
1161 f.close()
1162
1162
1163
1163
1164 class iparentdir(ifile):
1164 class iparentdir(ifile):
1165 def __xrepr__(self, mode):
1165 def __xrepr__(self, mode):
1166 if mode == "cell":
1166 if mode == "cell":
1167 yield (astyle.style_dir, os.pardir)
1167 yield (astyle.style_dir, os.pardir)
1168 else:
1168 else:
1169 for part in ifile.__xrepr__(self, mode):
1169 for part in ifile.__xrepr__(self, mode):
1170 yield part
1170 yield part
1171
1171
1172
1172
1173 class ils(Table):
1173 class ils(Table):
1174 """
1174 """
1175 List the current (or a specific) directory.
1175 List the current (or a specific) directory.
1176
1176
1177 Examples:
1177 Examples:
1178
1178
1179 >>> ils
1179 >>> ils
1180 >>> ils("/usr/local/lib/python2.4")
1180 >>> ils("/usr/local/lib/python2.4")
1181 >>> ils("~")
1181 >>> ils("~")
1182 """
1182 """
1183 def __init__(self, base=os.curdir):
1183 def __init__(self, base=os.curdir, dirs=True, files=True):
1184 self.base = os.path.expanduser(base)
1184 self.base = os.path.expanduser(base)
1185 self.dirs = dirs
1186 self.files = files
1185
1187
1186 def __iter__(self):
1188 def __iter__(self):
1187 return xiter(ifile(self.base))
1189 for child in ifile(self.base).listdir():
1190 if self.dirs:
1191 if self.files:
1192 yield child
1193 else:
1194 if child.isdir():
1195 yield child
1196 elif self.files:
1197 if not child.isdir():
1198 yield child
1188
1199
1189 def __xrepr__(self, mode):
1200 def __xrepr__(self, mode):
1190 return ifile(self.base).__xrepr__(mode)
1201 return ifile(self.base).__xrepr__(mode)
1191
1202
1192 def __repr__(self):
1203 def __repr__(self):
1193 return "%s.%s(%r)" % \
1204 return "%s.%s(%r)" % \
1194 (self.__class__.__module__, self.__class__.__name__, self.base)
1205 (self.__class__.__module__, self.__class__.__name__, self.base)
1195
1206
1196
1207
1197 class iglob(Table):
1208 class iglob(Table):
1198 """
1209 """
1199 List all files and directories matching a specified pattern.
1210 List all files and directories matching a specified pattern.
1200 (See ``glob.glob()`` for more info.).
1211 (See ``glob.glob()`` for more info.).
1201
1212
1202 Examples:
1213 Examples:
1203
1214
1204 >>> iglob("*.py")
1215 >>> iglob("*.py")
1205 """
1216 """
1206 def __init__(self, glob):
1217 def __init__(self, glob):
1207 self.glob = glob
1218 self.glob = glob
1208
1219
1209 def __iter__(self):
1220 def __iter__(self):
1210 for name in glob.glob(self.glob):
1221 for name in glob.glob(self.glob):
1211 yield ifile(name)
1222 yield ifile(name)
1212
1223
1213 def __xrepr__(self, mode):
1224 def __xrepr__(self, mode):
1214 if mode == "header" or mode == "footer" or mode == "cell":
1225 if mode == "header" or mode == "footer" or mode == "cell":
1215 yield (astyle.style_default,
1226 yield (astyle.style_default,
1216 "%s(%r)" % (self.__class__.__name__, self.glob))
1227 "%s(%r)" % (self.__class__.__name__, self.glob))
1217 else:
1228 else:
1218 yield (astyle.style_default, repr(self))
1229 yield (astyle.style_default, repr(self))
1219
1230
1220 def __repr__(self):
1231 def __repr__(self):
1221 return "%s.%s(%r)" % \
1232 return "%s.%s(%r)" % \
1222 (self.__class__.__module__, self.__class__.__name__, self.glob)
1233 (self.__class__.__module__, self.__class__.__name__, self.glob)
1223
1234
1224
1235
1225 class iwalk(Table):
1236 class iwalk(Table):
1226 """
1237 """
1227 List all files and directories in a directory and it's subdirectory.
1238 List all files and directories in a directory and it's subdirectory.
1228
1239
1229 >>> iwalk
1240 >>> iwalk
1230 >>> iwalk("/usr/local/lib/python2.4")
1241 >>> iwalk("/usr/local/lib/python2.4")
1231 >>> iwalk("~")
1242 >>> iwalk("~")
1232 """
1243 """
1233 def __init__(self, base=os.curdir, dirs=True, files=True):
1244 def __init__(self, base=os.curdir, dirs=True, files=True):
1234 self.base = os.path.expanduser(base)
1245 self.base = os.path.expanduser(base)
1235 self.dirs = dirs
1246 self.dirs = dirs
1236 self.files = files
1247 self.files = files
1237
1248
1238 def __iter__(self):
1249 def __iter__(self):
1239 for (dirpath, dirnames, filenames) in os.walk(self.base):
1250 for (dirpath, dirnames, filenames) in os.walk(self.base):
1240 if self.dirs:
1251 if self.dirs:
1241 for name in sorted(dirnames):
1252 for name in sorted(dirnames):
1242 yield ifile(os.path.join(dirpath, name))
1253 yield ifile(os.path.join(dirpath, name))
1243 if self.files:
1254 if self.files:
1244 for name in sorted(filenames):
1255 for name in sorted(filenames):
1245 yield ifile(os.path.join(dirpath, name))
1256 yield ifile(os.path.join(dirpath, name))
1246
1257
1247 def __xrepr__(self, mode):
1258 def __xrepr__(self, mode):
1248 if mode == "header" or mode == "footer" or mode == "cell":
1259 if mode == "header" or mode == "footer" or mode == "cell":
1249 yield (astyle.style_default,
1260 yield (astyle.style_default,
1250 "%s(%r)" % (self.__class__.__name__, self.base))
1261 "%s(%r)" % (self.__class__.__name__, self.base))
1251 else:
1262 else:
1252 yield (astyle.style_default, repr(self))
1263 yield (astyle.style_default, repr(self))
1253
1264
1254 def __repr__(self):
1265 def __repr__(self):
1255 return "%s.%s(%r)" % \
1266 return "%s.%s(%r)" % \
1256 (self.__class__.__module__, self.__class__.__name__, self.base)
1267 (self.__class__.__module__, self.__class__.__name__, self.base)
1257
1268
1258
1269
1259 class ipwdentry(object):
1270 class ipwdentry(object):
1260 """
1271 """
1261 ``ipwdentry`` objects encapsulate entries in the Unix user account and
1272 ``ipwdentry`` objects encapsulate entries in the Unix user account and
1262 password database.
1273 password database.
1263 """
1274 """
1264 def __init__(self, id):
1275 def __init__(self, id):
1265 self._id = id
1276 self._id = id
1266 self._entry = None
1277 self._entry = None
1267
1278
1268 def _getentry(self):
1279 def _getentry(self):
1269 if self._entry is None:
1280 if self._entry is None:
1270 if isinstance(self._id, basestring):
1281 if isinstance(self._id, basestring):
1271 self._entry = pwd.getpwnam(self._id)
1282 self._entry = pwd.getpwnam(self._id)
1272 else:
1283 else:
1273 self._entry = pwd.getpwuid(self._id)
1284 self._entry = pwd.getpwuid(self._id)
1274 return self._entry
1285 return self._entry
1275
1286
1276 def getname(self):
1287 def getname(self):
1277 if isinstance(self._id, basestring):
1288 if isinstance(self._id, basestring):
1278 return self._id
1289 return self._id
1279 else:
1290 else:
1280 return self._getentry().pw_name
1291 return self._getentry().pw_name
1281 name = property(getname, None, None, "User name")
1292 name = property(getname, None, None, "User name")
1282
1293
1283 def getpasswd(self):
1294 def getpasswd(self):
1284 return self._getentry().pw_passwd
1295 return self._getentry().pw_passwd
1285 passwd = property(getpasswd, None, None, "Password")
1296 passwd = property(getpasswd, None, None, "Password")
1286
1297
1287 def getuid(self):
1298 def getuid(self):
1288 if isinstance(self._id, basestring):
1299 if isinstance(self._id, basestring):
1289 return self._getentry().pw_uid
1300 return self._getentry().pw_uid
1290 else:
1301 else:
1291 return self._id
1302 return self._id
1292 uid = property(getuid, None, None, "User id")
1303 uid = property(getuid, None, None, "User id")
1293
1304
1294 def getgid(self):
1305 def getgid(self):
1295 return self._getentry().pw_gid
1306 return self._getentry().pw_gid
1296 gid = property(getgid, None, None, "Primary group id")
1307 gid = property(getgid, None, None, "Primary group id")
1297
1308
1298 def getgroup(self):
1309 def getgroup(self):
1299 return igrpentry(self.gid)
1310 return igrpentry(self.gid)
1300 group = property(getgroup, None, None, "Group")
1311 group = property(getgroup, None, None, "Group")
1301
1312
1302 def getgecos(self):
1313 def getgecos(self):
1303 return self._getentry().pw_gecos
1314 return self._getentry().pw_gecos
1304 gecos = property(getgecos, None, None, "Information (e.g. full user name)")
1315 gecos = property(getgecos, None, None, "Information (e.g. full user name)")
1305
1316
1306 def getdir(self):
1317 def getdir(self):
1307 return self._getentry().pw_dir
1318 return self._getentry().pw_dir
1308 dir = property(getdir, None, None, "$HOME directory")
1319 dir = property(getdir, None, None, "$HOME directory")
1309
1320
1310 def getshell(self):
1321 def getshell(self):
1311 return self._getentry().pw_shell
1322 return self._getentry().pw_shell
1312 shell = property(getshell, None, None, "Login shell")
1323 shell = property(getshell, None, None, "Login shell")
1313
1324
1314 def __xattrs__(self, mode):
1325 def __xattrs__(self, mode):
1315 return ("name", "passwd", "uid", "gid", "gecos", "dir", "shell")
1326 return ("name", "passwd", "uid", "gid", "gecos", "dir", "shell")
1316
1327
1317 def __repr__(self):
1328 def __repr__(self):
1318 return "%s.%s(%r)" % \
1329 return "%s.%s(%r)" % \
1319 (self.__class__.__module__, self.__class__.__name__, self._id)
1330 (self.__class__.__module__, self.__class__.__name__, self._id)
1320
1331
1321
1332
1322 class ipwd(Table):
1333 class ipwd(Table):
1323 """
1334 """
1324 List all entries in the Unix user account and password database.
1335 List all entries in the Unix user account and password database.
1325
1336
1326 Example:
1337 Example:
1327
1338
1328 >>> ipwd | isort("uid")
1339 >>> ipwd | isort("uid")
1329 """
1340 """
1330 def __iter__(self):
1341 def __iter__(self):
1331 for entry in pwd.getpwall():
1342 for entry in pwd.getpwall():
1332 yield ipwdentry(entry.pw_name)
1343 yield ipwdentry(entry.pw_name)
1333
1344
1334 def __xrepr__(self, mode):
1345 def __xrepr__(self, mode):
1335 if mode == "header" or mode == "footer" or mode == "cell":
1346 if mode == "header" or mode == "footer" or mode == "cell":
1336 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1347 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1337 else:
1348 else:
1338 yield (astyle.style_default, repr(self))
1349 yield (astyle.style_default, repr(self))
1339
1350
1340
1351
1341 class igrpentry(object):
1352 class igrpentry(object):
1342 """
1353 """
1343 ``igrpentry`` objects encapsulate entries in the Unix group database.
1354 ``igrpentry`` objects encapsulate entries in the Unix group database.
1344 """
1355 """
1345 def __init__(self, id):
1356 def __init__(self, id):
1346 self._id = id
1357 self._id = id
1347 self._entry = None
1358 self._entry = None
1348
1359
1349 def _getentry(self):
1360 def _getentry(self):
1350 if self._entry is None:
1361 if self._entry is None:
1351 if isinstance(self._id, basestring):
1362 if isinstance(self._id, basestring):
1352 self._entry = grp.getgrnam(self._id)
1363 self._entry = grp.getgrnam(self._id)
1353 else:
1364 else:
1354 self._entry = grp.getgrgid(self._id)
1365 self._entry = grp.getgrgid(self._id)
1355 return self._entry
1366 return self._entry
1356
1367
1357 def getname(self):
1368 def getname(self):
1358 if isinstance(self._id, basestring):
1369 if isinstance(self._id, basestring):
1359 return self._id
1370 return self._id
1360 else:
1371 else:
1361 return self._getentry().gr_name
1372 return self._getentry().gr_name
1362 name = property(getname, None, None, "Group name")
1373 name = property(getname, None, None, "Group name")
1363
1374
1364 def getpasswd(self):
1375 def getpasswd(self):
1365 return self._getentry().gr_passwd
1376 return self._getentry().gr_passwd
1366 passwd = property(getpasswd, None, None, "Password")
1377 passwd = property(getpasswd, None, None, "Password")
1367
1378
1368 def getgid(self):
1379 def getgid(self):
1369 if isinstance(self._id, basestring):
1380 if isinstance(self._id, basestring):
1370 return self._getentry().gr_gid
1381 return self._getentry().gr_gid
1371 else:
1382 else:
1372 return self._id
1383 return self._id
1373 gid = property(getgid, None, None, "Group id")
1384 gid = property(getgid, None, None, "Group id")
1374
1385
1375 def getmem(self):
1386 def getmem(self):
1376 return self._getentry().gr_mem
1387 return self._getentry().gr_mem
1377 mem = property(getmem, None, None, "Members")
1388 mem = property(getmem, None, None, "Members")
1378
1389
1379 def __xattrs__(self, mode):
1390 def __xattrs__(self, mode):
1380 return ("name", "passwd", "gid", "mem")
1391 return ("name", "passwd", "gid", "mem")
1381
1392
1382 def __xrepr__(self, mode):
1393 def __xrepr__(self, mode):
1383 if mode == "header" or mode == "footer" or mode == "cell":
1394 if mode == "header" or mode == "footer" or mode == "cell":
1384 yield (astyle.style_default, "group ")
1395 yield (astyle.style_default, "group ")
1385 try:
1396 try:
1386 yield (astyle.style_default, self.name)
1397 yield (astyle.style_default, self.name)
1387 except KeyError:
1398 except KeyError:
1388 if isinstance(self._id, basestring):
1399 if isinstance(self._id, basestring):
1389 yield (astyle.style_default, self.name_id)
1400 yield (astyle.style_default, self.name_id)
1390 else:
1401 else:
1391 yield (astyle.style_type_number, str(self._id))
1402 yield (astyle.style_type_number, str(self._id))
1392 else:
1403 else:
1393 yield (astyle.style_default, repr(self))
1404 yield (astyle.style_default, repr(self))
1394
1405
1395 def __iter__(self):
1406 def __iter__(self):
1396 for member in self.mem:
1407 for member in self.mem:
1397 yield ipwdentry(member)
1408 yield ipwdentry(member)
1398
1409
1399 def __repr__(self):
1410 def __repr__(self):
1400 return "%s.%s(%r)" % \
1411 return "%s.%s(%r)" % \
1401 (self.__class__.__module__, self.__class__.__name__, self._id)
1412 (self.__class__.__module__, self.__class__.__name__, self._id)
1402
1413
1403
1414
1404 class igrp(Table):
1415 class igrp(Table):
1405 """
1416 """
1406 This ``Table`` lists all entries in the Unix group database.
1417 This ``Table`` lists all entries in the Unix group database.
1407 """
1418 """
1408 def __iter__(self):
1419 def __iter__(self):
1409 for entry in grp.getgrall():
1420 for entry in grp.getgrall():
1410 yield igrpentry(entry.gr_name)
1421 yield igrpentry(entry.gr_name)
1411
1422
1412 def __xrepr__(self, mode):
1423 def __xrepr__(self, mode):
1413 if mode == "header" or mode == "footer":
1424 if mode == "header" or mode == "footer":
1414 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1425 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1415 else:
1426 else:
1416 yield (astyle.style_default, repr(self))
1427 yield (astyle.style_default, repr(self))
1417
1428
1418
1429
1419 class Fields(object):
1430 class Fields(object):
1420 def __init__(self, fieldnames, **fields):
1431 def __init__(self, fieldnames, **fields):
1421 self.__fieldnames = [upgradexattr(fieldname) for fieldname in fieldnames]
1432 self.__fieldnames = [upgradexattr(fieldname) for fieldname in fieldnames]
1422 for (key, value) in fields.iteritems():
1433 for (key, value) in fields.iteritems():
1423 setattr(self, key, value)
1434 setattr(self, key, value)
1424
1435
1425 def __xattrs__(self, mode):
1436 def __xattrs__(self, mode):
1426 return self.__fieldnames
1437 return self.__fieldnames
1427
1438
1428 def __xrepr__(self, mode):
1439 def __xrepr__(self, mode):
1429 yield (-1, False)
1440 yield (-1, False)
1430 if mode == "header" or mode == "cell":
1441 if mode == "header" or mode == "cell":
1431 yield (astyle.style_default, self.__class__.__name__)
1442 yield (astyle.style_default, self.__class__.__name__)
1432 yield (astyle.style_default, "(")
1443 yield (astyle.style_default, "(")
1433 for (i, f) in enumerate(self.__fieldnames):
1444 for (i, f) in enumerate(self.__fieldnames):
1434 if i:
1445 if i:
1435 yield (astyle.style_default, ", ")
1446 yield (astyle.style_default, ", ")
1436 yield (astyle.style_default, f.name())
1447 yield (astyle.style_default, f.name())
1437 yield (astyle.style_default, "=")
1448 yield (astyle.style_default, "=")
1438 for part in xrepr(getattr(self, f), "default"):
1449 for part in xrepr(getattr(self, f), "default"):
1439 yield part
1450 yield part
1440 yield (astyle.style_default, ")")
1451 yield (astyle.style_default, ")")
1441 elif mode == "footer":
1452 elif mode == "footer":
1442 yield (astyle.style_default, self.__class__.__name__)
1453 yield (astyle.style_default, self.__class__.__name__)
1443 yield (astyle.style_default, "(")
1454 yield (astyle.style_default, "(")
1444 for (i, f) in enumerate(self.__fieldnames):
1455 for (i, f) in enumerate(self.__fieldnames):
1445 if i:
1456 if i:
1446 yield (astyle.style_default, ", ")
1457 yield (astyle.style_default, ", ")
1447 yield (astyle.style_default, f.name())
1458 yield (astyle.style_default, f.name())
1448 yield (astyle.style_default, ")")
1459 yield (astyle.style_default, ")")
1449 else:
1460 else:
1450 yield (astyle.style_default, repr(self))
1461 yield (astyle.style_default, repr(self))
1451
1462
1452
1463
1453 class FieldTable(Table, list):
1464 class FieldTable(Table, list):
1454 def __init__(self, *fields):
1465 def __init__(self, *fields):
1455 Table.__init__(self)
1466 Table.__init__(self)
1456 list.__init__(self)
1467 list.__init__(self)
1457 self.fields = fields
1468 self.fields = fields
1458
1469
1459 def add(self, **fields):
1470 def add(self, **fields):
1460 self.append(Fields(self.fields, **fields))
1471 self.append(Fields(self.fields, **fields))
1461
1472
1462 def __xrepr__(self, mode):
1473 def __xrepr__(self, mode):
1463 yield (-1, False)
1474 yield (-1, False)
1464 if mode == "header" or mode == "footer":
1475 if mode == "header" or mode == "footer":
1465 yield (astyle.style_default, self.__class__.__name__)
1476 yield (astyle.style_default, self.__class__.__name__)
1466 yield (astyle.style_default, "(")
1477 yield (astyle.style_default, "(")
1467 for (i, f) in enumerate(self.__fieldnames):
1478 for (i, f) in enumerate(self.__fieldnames):
1468 if i:
1479 if i:
1469 yield (astyle.style_default, ", ")
1480 yield (astyle.style_default, ", ")
1470 yield (astyle.style_default, f)
1481 yield (astyle.style_default, f)
1471 yield (astyle.style_default, ")")
1482 yield (astyle.style_default, ")")
1472 else:
1483 else:
1473 yield (astyle.style_default, repr(self))
1484 yield (astyle.style_default, repr(self))
1474
1485
1475 def __repr__(self):
1486 def __repr__(self):
1476 return "<%s.%s object with fields=%r at 0x%x>" % \
1487 return "<%s.%s object with fields=%r at 0x%x>" % \
1477 (self.__class__.__module__, self.__class__.__name__,
1488 (self.__class__.__module__, self.__class__.__name__,
1478 ", ".join(map(repr, self.fields)), id(self))
1489 ", ".join(map(repr, self.fields)), id(self))
1479
1490
1480
1491
1481 class List(list):
1492 class List(list):
1482 def __xattrs__(self, mode):
1493 def __xattrs__(self, mode):
1483 return xrange(len(self))
1494 return xrange(len(self))
1484
1495
1485 def __xrepr__(self, mode):
1496 def __xrepr__(self, mode):
1486 yield (-1, False)
1497 yield (-1, False)
1487 if mode == "header" or mode == "cell" or mode == "footer" or mode == "default":
1498 if mode == "header" or mode == "cell" or mode == "footer" or mode == "default":
1488 yield (astyle.style_default, self.__class__.__name__)
1499 yield (astyle.style_default, self.__class__.__name__)
1489 yield (astyle.style_default, "(")
1500 yield (astyle.style_default, "(")
1490 for (i, item) in enumerate(self):
1501 for (i, item) in enumerate(self):
1491 if i:
1502 if i:
1492 yield (astyle.style_default, ", ")
1503 yield (astyle.style_default, ", ")
1493 for part in xrepr(item, "default"):
1504 for part in xrepr(item, "default"):
1494 yield part
1505 yield part
1495 yield (astyle.style_default, ")")
1506 yield (astyle.style_default, ")")
1496 else:
1507 else:
1497 yield (astyle.style_default, repr(self))
1508 yield (astyle.style_default, repr(self))
1498
1509
1499
1510
1500 class ienv(Table):
1511 class ienv(Table):
1501 """
1512 """
1502 List environment variables.
1513 List environment variables.
1503
1514
1504 Example:
1515 Example:
1505
1516
1506 >>> ienv
1517 >>> ienv
1507 """
1518 """
1508
1519
1509 def __iter__(self):
1520 def __iter__(self):
1510 fields = ("key", "value")
1521 fields = ("key", "value")
1511 for (key, value) in os.environ.iteritems():
1522 for (key, value) in os.environ.iteritems():
1512 yield Fields(fields, key=key, value=value)
1523 yield Fields(fields, key=key, value=value)
1513
1524
1514 def __xrepr__(self, mode):
1525 def __xrepr__(self, mode):
1515 if mode == "header" or mode == "cell":
1526 if mode == "header" or mode == "cell":
1516 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1527 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1517 else:
1528 else:
1518 yield (astyle.style_default, repr(self))
1529 yield (astyle.style_default, repr(self))
1519
1530
1520
1531
1521 class icsv(Pipe):
1532 class icsv(Pipe):
1522 """
1533 """
1523 This ``Pipe`` lists turn the input (with must be a pipe outputting lines
1534 This ``Pipe`` lists turn the input (with must be a pipe outputting lines
1524 or an ``ifile``) into lines of CVS columns.
1535 or an ``ifile``) into lines of CVS columns.
1525 """
1536 """
1526 def __init__(self, **csvargs):
1537 def __init__(self, **csvargs):
1527 """
1538 """
1528 Create an ``icsv`` object. ``cvsargs`` will be passed through as
1539 Create an ``icsv`` object. ``cvsargs`` will be passed through as
1529 keyword arguments to ``cvs.reader()``.
1540 keyword arguments to ``cvs.reader()``.
1530 """
1541 """
1531 self.csvargs = csvargs
1542 self.csvargs = csvargs
1532
1543
1533 def __iter__(self):
1544 def __iter__(self):
1534 input = self.input
1545 input = self.input
1535 if isinstance(input, ifile):
1546 if isinstance(input, ifile):
1536 input = input.open("rb")
1547 input = input.open("rb")
1537 reader = csv.reader(input, **self.csvargs)
1548 reader = csv.reader(input, **self.csvargs)
1538 for line in reader:
1549 for line in reader:
1539 yield List(line)
1550 yield List(line)
1540
1551
1541 def __xrepr__(self, mode):
1552 def __xrepr__(self, mode):
1542 yield (-1, False)
1553 yield (-1, False)
1543 if mode == "header" or mode == "footer":
1554 if mode == "header" or mode == "footer":
1544 input = getattr(self, "input", None)
1555 input = getattr(self, "input", None)
1545 if input is not None:
1556 if input is not None:
1546 for part in xrepr(input, mode):
1557 for part in xrepr(input, mode):
1547 yield part
1558 yield part
1548 yield (astyle.style_default, " | ")
1559 yield (astyle.style_default, " | ")
1549 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1560 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1550 for (i, (name, value)) in enumerate(self.csvargs.iteritems()):
1561 for (i, (name, value)) in enumerate(self.csvargs.iteritems()):
1551 if i:
1562 if i:
1552 yield (astyle.style_default, ", ")
1563 yield (astyle.style_default, ", ")
1553 yield (astyle.style_default, name)
1564 yield (astyle.style_default, name)
1554 yield (astyle.style_default, "=")
1565 yield (astyle.style_default, "=")
1555 for part in xrepr(value, "default"):
1566 for part in xrepr(value, "default"):
1556 yield part
1567 yield part
1557 yield (astyle.style_default, ")")
1568 yield (astyle.style_default, ")")
1558 else:
1569 else:
1559 yield (astyle.style_default, repr(self))
1570 yield (astyle.style_default, repr(self))
1560
1571
1561 def __repr__(self):
1572 def __repr__(self):
1562 args = ", ".join(["%s=%r" % item for item in self.csvargs.iteritems()])
1573 args = ", ".join(["%s=%r" % item for item in self.csvargs.iteritems()])
1563 return "<%s.%s %s at 0x%x>" % \
1574 return "<%s.%s %s at 0x%x>" % \
1564 (self.__class__.__module__, self.__class__.__name__, args, id(self))
1575 (self.__class__.__module__, self.__class__.__name__, args, id(self))
1565
1576
1566
1577
1567 class ix(Table):
1578 class ix(Table):
1568 """
1579 """
1569 Execute a system command and list its output as lines
1580 Execute a system command and list its output as lines
1570 (similar to ``os.popen()``).
1581 (similar to ``os.popen()``).
1571
1582
1572 Examples:
1583 Examples:
1573
1584
1574 >>> ix("ps x")
1585 >>> ix("ps x")
1575 >>> ix("find .") | ifile
1586 >>> ix("find .") | ifile
1576 """
1587 """
1577 def __init__(self, cmd):
1588 def __init__(self, cmd):
1578 self.cmd = cmd
1589 self.cmd = cmd
1579 self._pipeout = None
1590 self._pipeout = None
1580
1591
1581 def __iter__(self):
1592 def __iter__(self):
1582 (_pipein, self._pipeout) = os.popen4(self.cmd)
1593 (_pipein, self._pipeout) = os.popen4(self.cmd)
1583 _pipein.close()
1594 _pipein.close()
1584 for l in self._pipeout:
1595 for l in self._pipeout:
1585 yield l.rstrip("\r\n")
1596 yield l.rstrip("\r\n")
1586 self._pipeout.close()
1597 self._pipeout.close()
1587 self._pipeout = None
1598 self._pipeout = None
1588
1599
1589 def __del__(self):
1600 def __del__(self):
1590 if self._pipeout is not None and not self._pipeout.closed:
1601 if self._pipeout is not None and not self._pipeout.closed:
1591 self._pipeout.close()
1602 self._pipeout.close()
1592 self._pipeout = None
1603 self._pipeout = None
1593
1604
1594 def __xrepr__(self, mode):
1605 def __xrepr__(self, mode):
1595 if mode == "header" or mode == "footer":
1606 if mode == "header" or mode == "footer":
1596 yield (astyle.style_default,
1607 yield (astyle.style_default,
1597 "%s(%r)" % (self.__class__.__name__, self.cmd))
1608 "%s(%r)" % (self.__class__.__name__, self.cmd))
1598 else:
1609 else:
1599 yield (astyle.style_default, repr(self))
1610 yield (astyle.style_default, repr(self))
1600
1611
1601 def __repr__(self):
1612 def __repr__(self):
1602 return "%s.%s(%r)" % \
1613 return "%s.%s(%r)" % \
1603 (self.__class__.__module__, self.__class__.__name__, self.cmd)
1614 (self.__class__.__module__, self.__class__.__name__, self.cmd)
1604
1615
1605
1616
1606 class ifilter(Pipe):
1617 class ifilter(Pipe):
1607 """
1618 """
1608 Filter an input pipe. Only objects where an expression evaluates to true
1619 Filter an input pipe. Only objects where an expression evaluates to true
1609 (and doesn't raise an exception) are listed.
1620 (and doesn't raise an exception) are listed.
1610
1621
1611 Examples:
1622 Examples:
1612
1623
1613 >>> ils | ifilter("_.isfile() and size>1000")
1624 >>> ils | ifilter("_.isfile() and size>1000")
1614 >>> igrp | ifilter("len(mem)")
1625 >>> igrp | ifilter("len(mem)")
1615 >>> sys.modules | ifilter(lambda _:_.value is not None)
1626 >>> sys.modules | ifilter(lambda _:_.value is not None)
1616 """
1627 """
1617
1628
1618 def __init__(self, expr, globals=None, errors="raiseifallfail"):
1629 def __init__(self, expr, globals=None, errors="raiseifallfail"):
1619 """
1630 """
1620 Create an ``ifilter`` object. ``expr`` can be a callable or a string
1631 Create an ``ifilter`` object. ``expr`` can be a callable or a string
1621 containing an expression. ``globals`` will be used as the global
1632 containing an expression. ``globals`` will be used as the global
1622 namespace for calling string expressions (defaulting to IPython's
1633 namespace for calling string expressions (defaulting to IPython's
1623 user namespace). ``errors`` specifies how exception during evaluation
1634 user namespace). ``errors`` specifies how exception during evaluation
1624 of ``expr`` are handled:
1635 of ``expr`` are handled:
1625
1636
1626 * ``drop``: drop all items that have errors;
1637 * ``drop``: drop all items that have errors;
1627
1638
1628 * ``keep``: keep all items that have errors;
1639 * ``keep``: keep all items that have errors;
1629
1640
1630 * ``keeperror``: keep the exception of all items that have errors;
1641 * ``keeperror``: keep the exception of all items that have errors;
1631
1642
1632 * ``raise``: raise the exception;
1643 * ``raise``: raise the exception;
1633
1644
1634 * ``raiseifallfail``: raise the first exception if all items have errors;
1645 * ``raiseifallfail``: raise the first exception if all items have errors;
1635 otherwise drop those with errors (this is the default).
1646 otherwise drop those with errors (this is the default).
1636 """
1647 """
1637 self.expr = expr
1648 self.expr = expr
1638 self.globals = globals
1649 self.globals = globals
1639 self.errors = errors
1650 self.errors = errors
1640
1651
1641 def __iter__(self):
1652 def __iter__(self):
1642 if callable(self.expr):
1653 if callable(self.expr):
1643 test = self.expr
1654 test = self.expr
1644 else:
1655 else:
1645 g = getglobals(self.globals)
1656 g = getglobals(self.globals)
1646 expr = compile(self.expr, "ipipe-expression", "eval")
1657 expr = compile(self.expr, "ipipe-expression", "eval")
1647 def test(item):
1658 def test(item):
1648 return eval(expr, g, AttrNamespace(item))
1659 return eval(expr, g, AttrNamespace(item))
1649
1660
1650 ok = 0
1661 ok = 0
1651 exc_info = None
1662 exc_info = None
1652 for item in xiter(self.input):
1663 for item in xiter(self.input):
1653 try:
1664 try:
1654 if test(item):
1665 if test(item):
1655 yield item
1666 yield item
1656 ok += 1
1667 ok += 1
1657 except (KeyboardInterrupt, SystemExit):
1668 except (KeyboardInterrupt, SystemExit):
1658 raise
1669 raise
1659 except Exception, exc:
1670 except Exception, exc:
1660 if self.errors == "drop":
1671 if self.errors == "drop":
1661 pass # Ignore errors
1672 pass # Ignore errors
1662 elif self.errors == "keep":
1673 elif self.errors == "keep":
1663 yield item
1674 yield item
1664 elif self.errors == "keeperror":
1675 elif self.errors == "keeperror":
1665 yield exc
1676 yield exc
1666 elif self.errors == "raise":
1677 elif self.errors == "raise":
1667 raise
1678 raise
1668 elif self.errors == "raiseifallfail":
1679 elif self.errors == "raiseifallfail":
1669 if exc_info is None:
1680 if exc_info is None:
1670 exc_info = sys.exc_info()
1681 exc_info = sys.exc_info()
1671 if not ok and exc_info is not None:
1682 if not ok and exc_info is not None:
1672 raise exc_info[0], exc_info[1], exc_info[2]
1683 raise exc_info[0], exc_info[1], exc_info[2]
1673
1684
1674 def __xrepr__(self, mode):
1685 def __xrepr__(self, mode):
1675 if mode == "header" or mode == "footer":
1686 if mode == "header" or mode == "footer":
1676 input = getattr(self, "input", None)
1687 input = getattr(self, "input", None)
1677 if input is not None:
1688 if input is not None:
1678 for part in xrepr(input, mode):
1689 for part in xrepr(input, mode):
1679 yield part
1690 yield part
1680 yield (astyle.style_default, " | ")
1691 yield (astyle.style_default, " | ")
1681 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1692 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1682 for part in xrepr(self.expr, "default"):
1693 for part in xrepr(self.expr, "default"):
1683 yield part
1694 yield part
1684 yield (astyle.style_default, ")")
1695 yield (astyle.style_default, ")")
1685 else:
1696 else:
1686 yield (astyle.style_default, repr(self))
1697 yield (astyle.style_default, repr(self))
1687
1698
1688 def __repr__(self):
1699 def __repr__(self):
1689 return "<%s.%s expr=%r at 0x%x>" % \
1700 return "<%s.%s expr=%r at 0x%x>" % \
1690 (self.__class__.__module__, self.__class__.__name__,
1701 (self.__class__.__module__, self.__class__.__name__,
1691 self.expr, id(self))
1702 self.expr, id(self))
1692
1703
1693
1704
1694 class ieval(Pipe):
1705 class ieval(Pipe):
1695 """
1706 """
1696 Evaluate an expression for each object in the input pipe.
1707 Evaluate an expression for each object in the input pipe.
1697
1708
1698 Examples:
1709 Examples:
1699
1710
1700 >>> ils | ieval("_.abspath()")
1711 >>> ils | ieval("_.abspath()")
1701 >>> sys.path | ieval(ifile)
1712 >>> sys.path | ieval(ifile)
1702 """
1713 """
1703
1714
1704 def __init__(self, expr, globals=None, errors="raiseifallfail"):
1715 def __init__(self, expr, globals=None, errors="raiseifallfail"):
1705 """
1716 """
1706 Create an ``ieval`` object. ``expr`` can be a callable or a string
1717 Create an ``ieval`` object. ``expr`` can be a callable or a string
1707 containing an expression. For the meaning of ``globals`` and
1718 containing an expression. For the meaning of ``globals`` and
1708 ``errors`` see ``ifilter``.
1719 ``errors`` see ``ifilter``.
1709 """
1720 """
1710 self.expr = expr
1721 self.expr = expr
1711 self.globals = globals
1722 self.globals = globals
1712 self.errors = errors
1723 self.errors = errors
1713
1724
1714 def __iter__(self):
1725 def __iter__(self):
1715 if callable(self.expr):
1726 if callable(self.expr):
1716 do = self.expr
1727 do = self.expr
1717 else:
1728 else:
1718 g = getglobals(self.globals)
1729 g = getglobals(self.globals)
1719 expr = compile(self.expr, "ipipe-expression", "eval")
1730 expr = compile(self.expr, "ipipe-expression", "eval")
1720 def do(item):
1731 def do(item):
1721 return eval(expr, g, AttrNamespace(item))
1732 return eval(expr, g, AttrNamespace(item))
1722
1733
1723 ok = 0
1734 ok = 0
1724 exc_info = None
1735 exc_info = None
1725 for item in xiter(self.input):
1736 for item in xiter(self.input):
1726 try:
1737 try:
1727 yield do(item)
1738 yield do(item)
1728 except (KeyboardInterrupt, SystemExit):
1739 except (KeyboardInterrupt, SystemExit):
1729 raise
1740 raise
1730 except Exception, exc:
1741 except Exception, exc:
1731 if self.errors == "drop":
1742 if self.errors == "drop":
1732 pass # Ignore errors
1743 pass # Ignore errors
1733 elif self.errors == "keep":
1744 elif self.errors == "keep":
1734 yield item
1745 yield item
1735 elif self.errors == "keeperror":
1746 elif self.errors == "keeperror":
1736 yield exc
1747 yield exc
1737 elif self.errors == "raise":
1748 elif self.errors == "raise":
1738 raise
1749 raise
1739 elif self.errors == "raiseifallfail":
1750 elif self.errors == "raiseifallfail":
1740 if exc_info is None:
1751 if exc_info is None:
1741 exc_info = sys.exc_info()
1752 exc_info = sys.exc_info()
1742 if not ok and exc_info is not None:
1753 if not ok and exc_info is not None:
1743 raise exc_info[0], exc_info[1], exc_info[2]
1754 raise exc_info[0], exc_info[1], exc_info[2]
1744
1755
1745 def __xrepr__(self, mode):
1756 def __xrepr__(self, mode):
1746 if mode == "header" or mode == "footer":
1757 if mode == "header" or mode == "footer":
1747 input = getattr(self, "input", None)
1758 input = getattr(self, "input", None)
1748 if input is not None:
1759 if input is not None:
1749 for part in xrepr(input, mode):
1760 for part in xrepr(input, mode):
1750 yield part
1761 yield part
1751 yield (astyle.style_default, " | ")
1762 yield (astyle.style_default, " | ")
1752 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1763 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1753 for part in xrepr(self.expr, "default"):
1764 for part in xrepr(self.expr, "default"):
1754 yield part
1765 yield part
1755 yield (astyle.style_default, ")")
1766 yield (astyle.style_default, ")")
1756 else:
1767 else:
1757 yield (astyle.style_default, repr(self))
1768 yield (astyle.style_default, repr(self))
1758
1769
1759 def __repr__(self):
1770 def __repr__(self):
1760 return "<%s.%s expr=%r at 0x%x>" % \
1771 return "<%s.%s expr=%r at 0x%x>" % \
1761 (self.__class__.__module__, self.__class__.__name__,
1772 (self.__class__.__module__, self.__class__.__name__,
1762 self.expr, id(self))
1773 self.expr, id(self))
1763
1774
1764
1775
1765 class ienum(Pipe):
1776 class ienum(Pipe):
1766 """
1777 """
1767 Enumerate the input pipe (i.e. wrap each input object in an object
1778 Enumerate the input pipe (i.e. wrap each input object in an object
1768 with ``index`` and ``object`` attributes).
1779 with ``index`` and ``object`` attributes).
1769
1780
1770 Examples:
1781 Examples:
1771
1782
1772 >>> xrange(20) | ieval("_,_*_") | ienum | ifilter("index % 2 == 0") | ieval("object")
1783 >>> xrange(20) | ieval("_,_*_") | ienum | ifilter("index % 2 == 0") | ieval("object")
1773 """
1784 """
1774 def __iter__(self):
1785 def __iter__(self):
1775 fields = ("index", "object")
1786 fields = ("index", "object")
1776 for (index, object) in enumerate(xiter(self.input)):
1787 for (index, object) in enumerate(xiter(self.input)):
1777 yield Fields(fields, index=index, object=object)
1788 yield Fields(fields, index=index, object=object)
1778
1789
1779
1790
1780 class isort(Pipe):
1791 class isort(Pipe):
1781 """
1792 """
1782 Sorts the input pipe.
1793 Sorts the input pipe.
1783
1794
1784 Examples:
1795 Examples:
1785
1796
1786 >>> ils | isort("size")
1797 >>> ils | isort("size")
1787 >>> ils | isort("_.isdir(), _.lower()", reverse=True)
1798 >>> ils | isort("_.isdir(), _.lower()", reverse=True)
1788 """
1799 """
1789
1800
1790 def __init__(self, key=None, globals=None, reverse=False):
1801 def __init__(self, key=None, globals=None, reverse=False):
1791 """
1802 """
1792 Create an ``isort`` object. ``key`` can be a callable or a string
1803 Create an ``isort`` object. ``key`` can be a callable or a string
1793 containing an expression (or ``None`` in which case the items
1804 containing an expression (or ``None`` in which case the items
1794 themselves will be sorted). If ``reverse`` is true the sort order
1805 themselves will be sorted). If ``reverse`` is true the sort order
1795 will be reversed. For the meaning of ``globals`` see ``ifilter``.
1806 will be reversed. For the meaning of ``globals`` see ``ifilter``.
1796 """
1807 """
1797 self.key = key
1808 self.key = key
1798 self.globals = globals
1809 self.globals = globals
1799 self.reverse = reverse
1810 self.reverse = reverse
1800
1811
1801 def __iter__(self):
1812 def __iter__(self):
1802 if self.key is None:
1813 if self.key is None:
1803 items = sorted(xiter(self.input), reverse=self.reverse)
1814 items = sorted(xiter(self.input), reverse=self.reverse)
1804 elif callable(self.key):
1815 elif callable(self.key):
1805 items = sorted(xiter(self.input), key=self.key, reverse=self.reverse)
1816 items = sorted(xiter(self.input), key=self.key, reverse=self.reverse)
1806 else:
1817 else:
1807 g = getglobals(self.globals)
1818 g = getglobals(self.globals)
1808 key = compile(self.key, "ipipe-expression", "eval")
1819 key = compile(self.key, "ipipe-expression", "eval")
1809 def realkey(item):
1820 def realkey(item):
1810 return eval(key, g, AttrNamespace(item))
1821 return eval(key, g, AttrNamespace(item))
1811 items = sorted(xiter(self.input), key=realkey, reverse=self.reverse)
1822 items = sorted(xiter(self.input), key=realkey, reverse=self.reverse)
1812 for item in items:
1823 for item in items:
1813 yield item
1824 yield item
1814
1825
1815 def __xrepr__(self, mode):
1826 def __xrepr__(self, mode):
1816 if mode == "header" or mode == "footer":
1827 if mode == "header" or mode == "footer":
1817 input = getattr(self, "input", None)
1828 input = getattr(self, "input", None)
1818 if input is not None:
1829 if input is not None:
1819 for part in xrepr(input, mode):
1830 for part in xrepr(input, mode):
1820 yield part
1831 yield part
1821 yield (astyle.style_default, " | ")
1832 yield (astyle.style_default, " | ")
1822 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1833 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1823 for part in xrepr(self.key, "default"):
1834 for part in xrepr(self.key, "default"):
1824 yield part
1835 yield part
1825 if self.reverse:
1836 if self.reverse:
1826 yield (astyle.style_default, ", ")
1837 yield (astyle.style_default, ", ")
1827 for part in xrepr(True, "default"):
1838 for part in xrepr(True, "default"):
1828 yield part
1839 yield part
1829 yield (astyle.style_default, ")")
1840 yield (astyle.style_default, ")")
1830 else:
1841 else:
1831 yield (astyle.style_default, repr(self))
1842 yield (astyle.style_default, repr(self))
1832
1843
1833 def __repr__(self):
1844 def __repr__(self):
1834 return "<%s.%s key=%r reverse=%r at 0x%x>" % \
1845 return "<%s.%s key=%r reverse=%r at 0x%x>" % \
1835 (self.__class__.__module__, self.__class__.__name__,
1846 (self.__class__.__module__, self.__class__.__name__,
1836 self.key, self.reverse, id(self))
1847 self.key, self.reverse, id(self))
1837
1848
1838
1849
1839 tab = 3 # for expandtabs()
1850 tab = 3 # for expandtabs()
1840
1851
1841 def _format(field):
1852 def _format(field):
1842 if isinstance(field, str):
1853 if isinstance(field, str):
1843 text = repr(field.expandtabs(tab))[1:-1]
1854 text = repr(field.expandtabs(tab))[1:-1]
1844 elif isinstance(field, unicode):
1855 elif isinstance(field, unicode):
1845 text = repr(field.expandtabs(tab))[2:-1]
1856 text = repr(field.expandtabs(tab))[2:-1]
1846 elif isinstance(field, datetime.datetime):
1857 elif isinstance(field, datetime.datetime):
1847 # Don't use strftime() here, as this requires year >= 1900
1858 # Don't use strftime() here, as this requires year >= 1900
1848 text = "%04d-%02d-%02d %02d:%02d:%02d.%06d" % \
1859 text = "%04d-%02d-%02d %02d:%02d:%02d.%06d" % \
1849 (field.year, field.month, field.day,
1860 (field.year, field.month, field.day,
1850 field.hour, field.minute, field.second, field.microsecond)
1861 field.hour, field.minute, field.second, field.microsecond)
1851 elif isinstance(field, datetime.date):
1862 elif isinstance(field, datetime.date):
1852 text = "%04d-%02d-%02d" % (field.year, field.month, field.day)
1863 text = "%04d-%02d-%02d" % (field.year, field.month, field.day)
1853 else:
1864 else:
1854 text = repr(field)
1865 text = repr(field)
1855 return text
1866 return text
1856
1867
1857
1868
1858 class Display(object):
1869 class Display(object):
1859 class __metaclass__(type):
1870 class __metaclass__(type):
1860 def __ror__(self, input):
1871 def __ror__(self, input):
1861 return input | self()
1872 return input | self()
1862
1873
1863 def __ror__(self, input):
1874 def __ror__(self, input):
1864 self.input = input
1875 self.input = input
1865 return self
1876 return self
1866
1877
1867 def display(self):
1878 def display(self):
1868 pass
1879 pass
1869
1880
1870
1881
1871 class iless(Display):
1882 class iless(Display):
1872 cmd = "less --quit-if-one-screen --LONG-PROMPT --LINE-NUMBERS --chop-long-lines --shift=8 --RAW-CONTROL-CHARS"
1883 cmd = "less --quit-if-one-screen --LONG-PROMPT --LINE-NUMBERS --chop-long-lines --shift=8 --RAW-CONTROL-CHARS"
1873
1884
1874 def display(self):
1885 def display(self):
1875 try:
1886 try:
1876 pager = os.popen(self.cmd, "w")
1887 pager = os.popen(self.cmd, "w")
1877 try:
1888 try:
1878 for item in xiter(self.input, "default"):
1889 for item in xiter(self.input, "default"):
1879 attrs = tuple(_upgradexattrs(item, "default"))
1890 attrs = tuple(_upgradexattrs(item, "default"))
1880 attrs = ["%s=%s" % (a.name(item), a.value(item)) for a in attrs]
1891 attrs = ["%s=%s" % (a.name(item), a.value(item)) for a in attrs]
1881 pager.write(" ".join(attrs))
1892 pager.write(" ".join(attrs))
1882 pager.write("\n")
1893 pager.write("\n")
1883 finally:
1894 finally:
1884 pager.close()
1895 pager.close()
1885 except Exception, exc:
1896 except Exception, exc:
1886 print "%s: %s" % (exc.__class__.__name__, str(exc))
1897 print "%s: %s" % (exc.__class__.__name__, str(exc))
1887
1898
1888
1899
1889 def xformat(value, mode, maxlength):
1900 def xformat(value, mode, maxlength):
1890 align = None
1901 align = None
1891 full = True
1902 full = True
1892 width = 0
1903 width = 0
1893 text = astyle.Text()
1904 text = astyle.Text()
1894 for (style, part) in xrepr(value, mode):
1905 for (style, part) in xrepr(value, mode):
1895 # only consider the first result
1906 # only consider the first result
1896 if align is None:
1907 if align is None:
1897 if isinstance(style, int):
1908 if isinstance(style, int):
1898 # (style, text) really is (alignment, stop)
1909 # (style, text) really is (alignment, stop)
1899 align = style
1910 align = style
1900 full = part
1911 full = part
1901 continue
1912 continue
1902 else:
1913 else:
1903 align = -1
1914 align = -1
1904 full = True
1915 full = True
1905 if not isinstance(style, int):
1916 if not isinstance(style, int):
1906 text.append((style, part))
1917 text.append((style, part))
1907 width += len(part)
1918 width += len(part)
1908 if width >= maxlength and not full:
1919 if width >= maxlength and not full:
1909 text.append((astyle.style_ellisis, "..."))
1920 text.append((astyle.style_ellisis, "..."))
1910 width += 3
1921 width += 3
1911 break
1922 break
1912 if align is None: # default to left alignment
1923 if align is None: # default to left alignment
1913 align = -1
1924 align = -1
1914 return (align, width, text)
1925 return (align, width, text)
1915
1926
1916
1927
1917 class idump(Display):
1928 class idump(Display):
1918 # The approximate maximum length of a column entry
1929 # The approximate maximum length of a column entry
1919 maxattrlength = 200
1930 maxattrlength = 200
1920
1931
1921 # Style for column names
1932 # Style for column names
1922 style_header = astyle.Style.fromstr("white:black:bold")
1933 style_header = astyle.Style.fromstr("white:black:bold")
1923
1934
1924 def __init__(self, *attrs):
1935 def __init__(self, *attrs):
1925 self.attrs = [upgradexattr(attr) for attr in attrs]
1936 self.attrs = [upgradexattr(attr) for attr in attrs]
1926 self.headerpadchar = " "
1937 self.headerpadchar = " "
1927 self.headersepchar = "|"
1938 self.headersepchar = "|"
1928 self.datapadchar = " "
1939 self.datapadchar = " "
1929 self.datasepchar = "|"
1940 self.datasepchar = "|"
1930
1941
1931 def display(self):
1942 def display(self):
1932 stream = genutils.Term.cout
1943 stream = genutils.Term.cout
1933 allattrs = []
1944 allattrs = []
1934 attrset = set()
1945 attrset = set()
1935 colwidths = {}
1946 colwidths = {}
1936 rows = []
1947 rows = []
1937 for item in xiter(self.input, "default"):
1948 for item in xiter(self.input, "default"):
1938 row = {}
1949 row = {}
1939 attrs = self.attrs
1950 attrs = self.attrs
1940 if not attrs:
1951 if not attrs:
1941 attrs = xattrs(item, "default")
1952 attrs = xattrs(item, "default")
1942 for attr in attrs:
1953 for attr in attrs:
1943 if attr not in attrset:
1954 if attr not in attrset:
1944 allattrs.append(attr)
1955 allattrs.append(attr)
1945 attrset.add(attr)
1956 attrset.add(attr)
1946 colwidths[attr] = len(attr.name())
1957 colwidths[attr] = len(attr.name())
1947 try:
1958 try:
1948 value = attr.value(item)
1959 value = attr.value(item)
1949 except (KeyboardInterrupt, SystemExit):
1960 except (KeyboardInterrupt, SystemExit):
1950 raise
1961 raise
1951 except Exception, exc:
1962 except Exception, exc:
1952 value = exc
1963 value = exc
1953 (align, width, text) = xformat(value, "cell", self.maxattrlength)
1964 (align, width, text) = xformat(value, "cell", self.maxattrlength)
1954 colwidths[attr] = max(colwidths[attr], width)
1965 colwidths[attr] = max(colwidths[attr], width)
1955 # remember alignment, length and colored parts
1966 # remember alignment, length and colored parts
1956 row[attr] = (align, width, text)
1967 row[attr] = (align, width, text)
1957 rows.append(row)
1968 rows.append(row)
1958
1969
1959 stream.write("\n")
1970 stream.write("\n")
1960 for (i, attr) in enumerate(allattrs):
1971 for (i, attr) in enumerate(allattrs):
1961 attrname = attr.name()
1972 attrname = attr.name()
1962 self.style_header(attrname).write(stream)
1973 self.style_header(attrname).write(stream)
1963 spc = colwidths[attr] - len(attrname)
1974 spc = colwidths[attr] - len(attrname)
1964 if i < len(colwidths)-1:
1975 if i < len(colwidths)-1:
1965 stream.write(self.headerpadchar*spc)
1976 stream.write(self.headerpadchar*spc)
1966 stream.write(self.headersepchar)
1977 stream.write(self.headersepchar)
1967 stream.write("\n")
1978 stream.write("\n")
1968
1979
1969 for row in rows:
1980 for row in rows:
1970 for (i, attr) in enumerate(allattrs):
1981 for (i, attr) in enumerate(allattrs):
1971 (align, width, text) = row[attr]
1982 (align, width, text) = row[attr]
1972 spc = colwidths[attr] - width
1983 spc = colwidths[attr] - width
1973 if align == -1:
1984 if align == -1:
1974 text.write(stream)
1985 text.write(stream)
1975 if i < len(colwidths)-1:
1986 if i < len(colwidths)-1:
1976 stream.write(self.datapadchar*spc)
1987 stream.write(self.datapadchar*spc)
1977 elif align == 0:
1988 elif align == 0:
1978 spc = colwidths[attr] - width
1989 spc = colwidths[attr] - width
1979 spc1 = spc//2
1990 spc1 = spc//2
1980 spc2 = spc-spc1
1991 spc2 = spc-spc1
1981 stream.write(self.datapadchar*spc1)
1992 stream.write(self.datapadchar*spc1)
1982 text.write(stream)
1993 text.write(stream)
1983 if i < len(colwidths)-1:
1994 if i < len(colwidths)-1:
1984 stream.write(self.datapadchar*spc2)
1995 stream.write(self.datapadchar*spc2)
1985 else:
1996 else:
1986 stream.write(self.datapadchar*spc)
1997 stream.write(self.datapadchar*spc)
1987 text.write(stream)
1998 text.write(stream)
1988 if i < len(colwidths)-1:
1999 if i < len(colwidths)-1:
1989 stream.write(self.datasepchar)
2000 stream.write(self.datasepchar)
1990 stream.write("\n")
2001 stream.write("\n")
1991
2002
1992
2003
1993 class XMode(object):
2004 class XMode(object):
1994 """
2005 """
1995 An ``XMode`` object describes one enter mode available for an object
2006 An ``XMode`` object describes one enter mode available for an object
1996 """
2007 """
1997 def __init__(self, object, mode, title=None, description=None):
2008 def __init__(self, object, mode, title=None, description=None):
1998 """
2009 """
1999 Create a new ``XMode`` object for the object ``object``. This object
2010 Create a new ``XMode`` object for the object ``object``. This object
2000 must support the enter mode ``mode`` (i.e. ``object.__xiter__(mode)``
2011 must support the enter mode ``mode`` (i.e. ``object.__xiter__(mode)``
2001 must return an iterable). ``title`` and ``description`` will be
2012 must return an iterable). ``title`` and ``description`` will be
2002 displayed in the browser when selecting among the available modes.
2013 displayed in the browser when selecting among the available modes.
2003 """
2014 """
2004 self.object = object
2015 self.object = object
2005 self.mode = mode
2016 self.mode = mode
2006 self.title = title
2017 self.title = title
2007 self.description = description
2018 self.description = description
2008
2019
2009 def __repr__(self):
2020 def __repr__(self):
2010 return "<%s.%s object mode=%r at 0x%x>" % \
2021 return "<%s.%s object mode=%r at 0x%x>" % \
2011 (self.__class__.__module__, self.__class__.__name__,
2022 (self.__class__.__module__, self.__class__.__name__,
2012 self.mode, id(self))
2023 self.mode, id(self))
2013
2024
2014 def __xrepr__(self, mode):
2025 def __xrepr__(self, mode):
2015 if mode == "header" or mode == "footer":
2026 if mode == "header" or mode == "footer":
2016 yield (astyle.style_default, self.title)
2027 yield (astyle.style_default, self.title)
2017 else:
2028 else:
2018 yield (astyle.style_default, repr(self))
2029 yield (astyle.style_default, repr(self))
2019
2030
2020 def __xattrs__(self, mode):
2031 def __xattrs__(self, mode):
2021 if mode == "detail":
2032 if mode == "detail":
2022 return ("object", "mode")
2033 return ("object", "mode")
2023 else:
2034 else:
2024 return ("object", "mode", "title", "description")
2035 return ("object", "mode", "title", "description")
2025
2036
2026 def __xiter__(self, mode):
2037 def __xiter__(self, mode):
2027 return xiter(self.object, self.mode)
2038 return xiter(self.object, self.mode)
2028
2039
2029
2040
2030 class AttributeDetail(Table):
2041 class AttributeDetail(Table):
2031 def __init__(self, object, descriptor):
2042 def __init__(self, object, descriptor):
2032 self.object = object
2043 self.object = object
2033 self.descriptor = descriptor
2044 self.descriptor = descriptor
2034
2045
2035 def __iter__(self):
2046 def __iter__(self):
2036 return self.descriptor.iter(self.object)
2047 return self.descriptor.iter(self.object)
2037
2048
2038 def name(self):
2049 def name(self):
2039 return self.descriptor.name()
2050 return self.descriptor.name()
2040
2051
2041 def attrtype(self):
2052 def attrtype(self):
2042 return self.descriptor.attrtype(self.object)
2053 return self.descriptor.attrtype(self.object)
2043
2054
2044 def valuetype(self):
2055 def valuetype(self):
2045 return self.descriptor.valuetype(self.object)
2056 return self.descriptor.valuetype(self.object)
2046
2057
2047 def doc(self):
2058 def doc(self):
2048 return self.descriptor.doc(self.object)
2059 return self.descriptor.doc(self.object)
2049
2060
2050 def shortdoc(self):
2061 def shortdoc(self):
2051 return self.descriptor.shortdoc(self.object)
2062 return self.descriptor.shortdoc(self.object)
2052
2063
2053 def value(self):
2064 def value(self):
2054 return self.descriptor.value(self.object)
2065 return self.descriptor.value(self.object)
2055
2066
2056 def __xattrs__(self, mode):
2067 def __xattrs__(self, mode):
2057 attrs = ("name()", "attrtype()", "valuetype()", "value()", "shortdoc()")
2068 attrs = ("name()", "attrtype()", "valuetype()", "value()", "shortdoc()")
2058 if mode == "detail":
2069 if mode == "detail":
2059 attrs += ("doc()",)
2070 attrs += ("doc()",)
2060 return attrs
2071 return attrs
2061
2072
2062 def __xrepr__(self, mode):
2073 def __xrepr__(self, mode):
2063 yield (-1, True)
2074 yield (-1, True)
2064 yield (astyle.style_default, self.attrtype())
2075 yield (astyle.style_default, self.attrtype())
2065 yield (astyle.style_default, "(")
2076 yield (astyle.style_default, "(")
2066 for part in xrepr(self.valuetype()):
2077 for part in xrepr(self.valuetype()):
2067 yield part
2078 yield part
2068 yield (astyle.style_default, ") ")
2079 yield (astyle.style_default, ") ")
2069 yield (astyle.style_default, self.name())
2080 yield (astyle.style_default, self.name())
2070 yield (astyle.style_default, " of ")
2081 yield (astyle.style_default, " of ")
2071 for part in xrepr(self.object):
2082 for part in xrepr(self.object):
2072 yield part
2083 yield part
2073
2084
2074
2085
2075 try:
2086 try:
2076 from ibrowse import ibrowse
2087 from ibrowse import ibrowse
2077 except ImportError:
2088 except ImportError:
2078 # No curses (probably Windows) => use ``idump`` as the default display.
2089 # No curses (probably Windows) => use ``idump`` as the default display.
2079 defaultdisplay = idump
2090 defaultdisplay = idump
2080 else:
2091 else:
2081 defaultdisplay = ibrowse
2092 defaultdisplay = ibrowse
2082 __all__.append("ibrowse")
2093 __all__.append("ibrowse")
2083
2094
2084
2095
2085 # If we're running under IPython, install an IPython displayhook that
2096 # If we're running under IPython, install an IPython displayhook that
2086 # returns the object from Display.display(), else install a displayhook
2097 # returns the object from Display.display(), else install a displayhook
2087 # directly as sys.displayhook
2098 # directly as sys.displayhook
2088 api = None
2099 api = None
2089 if ipapi is not None:
2100 if ipapi is not None:
2090 try:
2101 try:
2091 api = ipapi.get()
2102 api = ipapi.get()
2092 except AttributeError:
2103 except AttributeError:
2093 pass
2104 pass
2094
2105
2095 if api is not None:
2106 if api is not None:
2096 def displayhook(self, obj):
2107 def displayhook(self, obj):
2097 if isinstance(obj, type) and issubclass(obj, Table):
2108 if isinstance(obj, type) and issubclass(obj, Table):
2098 obj = obj()
2109 obj = obj()
2099 if isinstance(obj, Table):
2110 if isinstance(obj, Table):
2100 obj = obj | defaultdisplay
2111 obj = obj | defaultdisplay
2101 if isinstance(obj, Display):
2112 if isinstance(obj, Display):
2102 return obj.display()
2113 return obj.display()
2103 else:
2114 else:
2104 raise ipapi.TryNext
2115 raise ipapi.TryNext
2105 api.set_hook("result_display", displayhook)
2116 api.set_hook("result_display", displayhook)
2106 else:
2117 else:
2107 def installdisplayhook():
2118 def installdisplayhook():
2108 _originalhook = sys.displayhook
2119 _originalhook = sys.displayhook
2109 def displayhook(obj):
2120 def displayhook(obj):
2110 if isinstance(obj, type) and issubclass(obj, Table):
2121 if isinstance(obj, type) and issubclass(obj, Table):
2111 obj = obj()
2122 obj = obj()
2112 if isinstance(obj, Table):
2123 if isinstance(obj, Table):
2113 obj = obj | defaultdisplay
2124 obj = obj | defaultdisplay
2114 if isinstance(obj, Display):
2125 if isinstance(obj, Display):
2115 return obj.display()
2126 return obj.display()
2116 else:
2127 else:
2117 _originalhook(obj)
2128 _originalhook(obj)
2118 sys.displayhook = displayhook
2129 sys.displayhook = displayhook
2119 installdisplayhook()
2130 installdisplayhook()
@@ -1,5724 +1,5730 b''
1 2006-08-25 Walter Doerwald <walter@livinglogic.de>
2
3 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
4 the constructor, this makes it possible to get a list of only directories
5 or only files.
6
1 2006-08-12 Ville Vainio <vivainio@gmail.com>
7 2006-08-12 Ville Vainio <vivainio@gmail.com>
2
8
3 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
9 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
4 they broke unittest
10 they broke unittest
5
11
6 2006-08-11 Ville Vainio <vivainio@gmail.com>
12 2006-08-11 Ville Vainio <vivainio@gmail.com>
7
13
8 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
14 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
9 by resolving issue properly, i.e. by inheriting FakeModule
15 by resolving issue properly, i.e. by inheriting FakeModule
10 from types.ModuleType. Pickling ipython interactive data
16 from types.ModuleType. Pickling ipython interactive data
11 should still work as usual (testing appreciated).
17 should still work as usual (testing appreciated).
12
18
13 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
19 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
14
20
15 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
21 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
16 running under python 2.3 with code from 2.4 to fix a bug with
22 running under python 2.3 with code from 2.4 to fix a bug with
17 help(). Reported by the Debian maintainers, Norbert Tretkowski
23 help(). Reported by the Debian maintainers, Norbert Tretkowski
18 <norbert-AT-tretkowski.de> and Alexandre Fayolle
24 <norbert-AT-tretkowski.de> and Alexandre Fayolle
19 <afayolle-AT-debian.org>.
25 <afayolle-AT-debian.org>.
20
26
21 2006-08-04 Walter Doerwald <walter@livinglogic.de>
27 2006-08-04 Walter Doerwald <walter@livinglogic.de>
22
28
23 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
29 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
24 (which was displaying "quit" twice).
30 (which was displaying "quit" twice).
25
31
26 2006-07-28 Walter Doerwald <walter@livinglogic.de>
32 2006-07-28 Walter Doerwald <walter@livinglogic.de>
27
33
28 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
34 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
29 the mode argument).
35 the mode argument).
30
36
31 2006-07-27 Walter Doerwald <walter@livinglogic.de>
37 2006-07-27 Walter Doerwald <walter@livinglogic.de>
32
38
33 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
39 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
34 not running under IPython.
40 not running under IPython.
35
41
36 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
42 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
37 and make it iterable (iterating over the attribute itself). Add two new
43 and make it iterable (iterating over the attribute itself). Add two new
38 magic strings for __xattrs__(): If the string starts with "-", the attribute
44 magic strings for __xattrs__(): If the string starts with "-", the attribute
39 will not be displayed in ibrowse's detail view (but it can still be
45 will not be displayed in ibrowse's detail view (but it can still be
40 iterated over). This makes it possible to add attributes that are large
46 iterated over). This makes it possible to add attributes that are large
41 lists or generator methods to the detail view. Replace magic attribute names
47 lists or generator methods to the detail view. Replace magic attribute names
42 and _attrname() and _getattr() with "descriptors": For each type of magic
48 and _attrname() and _getattr() with "descriptors": For each type of magic
43 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
49 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
44 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
50 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
45 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
51 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
46 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
52 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
47 are still supported.
53 are still supported.
48
54
49 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
55 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
50 fails in ibrowse.fetch(), the exception object is added as the last item
56 fails in ibrowse.fetch(), the exception object is added as the last item
51 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
57 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
52 a generator throws an exception midway through execution.
58 a generator throws an exception midway through execution.
53
59
54 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
60 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
55 encoding into methods.
61 encoding into methods.
56
62
57 2006-07-26 Ville Vainio <vivainio@gmail.com>
63 2006-07-26 Ville Vainio <vivainio@gmail.com>
58
64
59 * iplib.py: history now stores multiline input as single
65 * iplib.py: history now stores multiline input as single
60 history entries. Patch by Jorgen Cederlof.
66 history entries. Patch by Jorgen Cederlof.
61
67
62 2006-07-18 Walter Doerwald <walter@livinglogic.de>
68 2006-07-18 Walter Doerwald <walter@livinglogic.de>
63
69
64 * IPython/Extensions/ibrowse.py: Make cursor visible over
70 * IPython/Extensions/ibrowse.py: Make cursor visible over
65 non existing attributes.
71 non existing attributes.
66
72
67 2006-07-14 Walter Doerwald <walter@livinglogic.de>
73 2006-07-14 Walter Doerwald <walter@livinglogic.de>
68
74
69 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
75 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
70 error output of the running command doesn't mess up the screen.
76 error output of the running command doesn't mess up the screen.
71
77
72 2006-07-13 Walter Doerwald <walter@livinglogic.de>
78 2006-07-13 Walter Doerwald <walter@livinglogic.de>
73
79
74 * IPython/Extensions/ipipe.py (isort): Make isort usable without
80 * IPython/Extensions/ipipe.py (isort): Make isort usable without
75 argument. This sorts the items themselves.
81 argument. This sorts the items themselves.
76
82
77 2006-07-12 Walter Doerwald <walter@livinglogic.de>
83 2006-07-12 Walter Doerwald <walter@livinglogic.de>
78
84
79 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
85 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
80 Compile expression strings into code objects. This should speed
86 Compile expression strings into code objects. This should speed
81 up ifilter and friends somewhat.
87 up ifilter and friends somewhat.
82
88
83 2006-07-08 Ville Vainio <vivainio@gmail.com>
89 2006-07-08 Ville Vainio <vivainio@gmail.com>
84
90
85 * Magic.py: %cpaste now strips > from the beginning of lines
91 * Magic.py: %cpaste now strips > from the beginning of lines
86 to ease pasting quoted code from emails. Contributed by
92 to ease pasting quoted code from emails. Contributed by
87 Stefan van der Walt.
93 Stefan van der Walt.
88
94
89 2006-06-29 Ville Vainio <vivainio@gmail.com>
95 2006-06-29 Ville Vainio <vivainio@gmail.com>
90
96
91 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
97 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
92 mode, patch contributed by Darren Dale. NEEDS TESTING!
98 mode, patch contributed by Darren Dale. NEEDS TESTING!
93
99
94 2006-06-28 Walter Doerwald <walter@livinglogic.de>
100 2006-06-28 Walter Doerwald <walter@livinglogic.de>
95
101
96 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
102 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
97 a blue background. Fix fetching new display rows when the browser
103 a blue background. Fix fetching new display rows when the browser
98 scrolls more than a screenful (e.g. by using the goto command).
104 scrolls more than a screenful (e.g. by using the goto command).
99
105
100 2006-06-27 Ville Vainio <vivainio@gmail.com>
106 2006-06-27 Ville Vainio <vivainio@gmail.com>
101
107
102 * Magic.py (_inspect, _ofind) Apply David Huard's
108 * Magic.py (_inspect, _ofind) Apply David Huard's
103 patch for displaying the correct docstring for 'property'
109 patch for displaying the correct docstring for 'property'
104 attributes.
110 attributes.
105
111
106 2006-06-23 Walter Doerwald <walter@livinglogic.de>
112 2006-06-23 Walter Doerwald <walter@livinglogic.de>
107
113
108 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
114 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
109 commands into the methods implementing them.
115 commands into the methods implementing them.
110
116
111 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
117 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
112
118
113 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
119 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
114 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
120 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
115 autoindent support was authored by Jin Liu.
121 autoindent support was authored by Jin Liu.
116
122
117 2006-06-22 Walter Doerwald <walter@livinglogic.de>
123 2006-06-22 Walter Doerwald <walter@livinglogic.de>
118
124
119 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
125 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
120 for keymaps with a custom class that simplifies handling.
126 for keymaps with a custom class that simplifies handling.
121
127
122 2006-06-19 Walter Doerwald <walter@livinglogic.de>
128 2006-06-19 Walter Doerwald <walter@livinglogic.de>
123
129
124 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
130 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
125 resizing. This requires Python 2.5 to work.
131 resizing. This requires Python 2.5 to work.
126
132
127 2006-06-16 Walter Doerwald <walter@livinglogic.de>
133 2006-06-16 Walter Doerwald <walter@livinglogic.de>
128
134
129 * IPython/Extensions/ibrowse.py: Add two new commands to
135 * IPython/Extensions/ibrowse.py: Add two new commands to
130 ibrowse: "hideattr" (mapped to "h") hides the attribute under
136 ibrowse: "hideattr" (mapped to "h") hides the attribute under
131 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
137 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
132 attributes again. Remapped the help command to "?". Display
138 attributes again. Remapped the help command to "?". Display
133 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
139 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
134 as keys for the "home" and "end" commands. Add three new commands
140 as keys for the "home" and "end" commands. Add three new commands
135 to the input mode for "find" and friends: "delend" (CTRL-K)
141 to the input mode for "find" and friends: "delend" (CTRL-K)
136 deletes to the end of line. "incsearchup" searches upwards in the
142 deletes to the end of line. "incsearchup" searches upwards in the
137 command history for an input that starts with the text before the cursor.
143 command history for an input that starts with the text before the cursor.
138 "incsearchdown" does the same downwards. Removed a bogus mapping of
144 "incsearchdown" does the same downwards. Removed a bogus mapping of
139 the x key to "delete".
145 the x key to "delete".
140
146
141 2006-06-15 Ville Vainio <vivainio@gmail.com>
147 2006-06-15 Ville Vainio <vivainio@gmail.com>
142
148
143 * iplib.py, hooks.py: Added new generate_prompt hook that can be
149 * iplib.py, hooks.py: Added new generate_prompt hook that can be
144 used to create prompts dynamically, instead of the "old" way of
150 used to create prompts dynamically, instead of the "old" way of
145 assigning "magic" strings to prompt_in1 and prompt_in2. The old
151 assigning "magic" strings to prompt_in1 and prompt_in2. The old
146 way still works (it's invoked by the default hook), of course.
152 way still works (it's invoked by the default hook), of course.
147
153
148 * Prompts.py: added generate_output_prompt hook for altering output
154 * Prompts.py: added generate_output_prompt hook for altering output
149 prompt
155 prompt
150
156
151 * Release.py: Changed version string to 0.7.3.svn.
157 * Release.py: Changed version string to 0.7.3.svn.
152
158
153 2006-06-15 Walter Doerwald <walter@livinglogic.de>
159 2006-06-15 Walter Doerwald <walter@livinglogic.de>
154
160
155 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
161 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
156 the call to fetch() always tries to fetch enough data for at least one
162 the call to fetch() always tries to fetch enough data for at least one
157 full screen. This makes it possible to simply call moveto(0,0,True) in
163 full screen. This makes it possible to simply call moveto(0,0,True) in
158 the constructor. Fix typos and removed the obsolete goto attribute.
164 the constructor. Fix typos and removed the obsolete goto attribute.
159
165
160 2006-06-12 Ville Vainio <vivainio@gmail.com>
166 2006-06-12 Ville Vainio <vivainio@gmail.com>
161
167
162 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
168 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
163 allowing $variable interpolation within multiline statements,
169 allowing $variable interpolation within multiline statements,
164 though so far only with "sh" profile for a testing period.
170 though so far only with "sh" profile for a testing period.
165 The patch also enables splitting long commands with \ but it
171 The patch also enables splitting long commands with \ but it
166 doesn't work properly yet.
172 doesn't work properly yet.
167
173
168 2006-06-12 Walter Doerwald <walter@livinglogic.de>
174 2006-06-12 Walter Doerwald <walter@livinglogic.de>
169
175
170 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
176 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
171 input history and the position of the cursor in the input history for
177 input history and the position of the cursor in the input history for
172 the find, findbackwards and goto command.
178 the find, findbackwards and goto command.
173
179
174 2006-06-10 Walter Doerwald <walter@livinglogic.de>
180 2006-06-10 Walter Doerwald <walter@livinglogic.de>
175
181
176 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
182 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
177 implements the basic functionality of browser commands that require
183 implements the basic functionality of browser commands that require
178 input. Reimplement the goto, find and findbackwards commands as
184 input. Reimplement the goto, find and findbackwards commands as
179 subclasses of _CommandInput. Add an input history and keymaps to those
185 subclasses of _CommandInput. Add an input history and keymaps to those
180 commands. Add "\r" as a keyboard shortcut for the enterdefault and
186 commands. Add "\r" as a keyboard shortcut for the enterdefault and
181 execute commands.
187 execute commands.
182
188
183 2006-06-07 Ville Vainio <vivainio@gmail.com>
189 2006-06-07 Ville Vainio <vivainio@gmail.com>
184
190
185 * iplib.py: ipython mybatch.ipy exits ipython immediately after
191 * iplib.py: ipython mybatch.ipy exits ipython immediately after
186 running the batch files instead of leaving the session open.
192 running the batch files instead of leaving the session open.
187
193
188 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
194 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
189
195
190 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
196 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
191 the original fix was incomplete. Patch submitted by W. Maier.
197 the original fix was incomplete. Patch submitted by W. Maier.
192
198
193 2006-06-07 Ville Vainio <vivainio@gmail.com>
199 2006-06-07 Ville Vainio <vivainio@gmail.com>
194
200
195 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
201 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
196 Confirmation prompts can be supressed by 'quiet' option.
202 Confirmation prompts can be supressed by 'quiet' option.
197 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
203 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
198
204
199 2006-06-06 *** Released version 0.7.2
205 2006-06-06 *** Released version 0.7.2
200
206
201 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
207 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
202
208
203 * IPython/Release.py (version): Made 0.7.2 final for release.
209 * IPython/Release.py (version): Made 0.7.2 final for release.
204 Repo tagged and release cut.
210 Repo tagged and release cut.
205
211
206 2006-06-05 Ville Vainio <vivainio@gmail.com>
212 2006-06-05 Ville Vainio <vivainio@gmail.com>
207
213
208 * Magic.py (magic_rehashx): Honor no_alias list earlier in
214 * Magic.py (magic_rehashx): Honor no_alias list earlier in
209 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
215 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
210
216
211 * upgrade_dir.py: try import 'path' module a bit harder
217 * upgrade_dir.py: try import 'path' module a bit harder
212 (for %upgrade)
218 (for %upgrade)
213
219
214 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
220 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
215
221
216 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
222 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
217 instead of looping 20 times.
223 instead of looping 20 times.
218
224
219 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
225 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
220 correctly at initialization time. Bug reported by Krishna Mohan
226 correctly at initialization time. Bug reported by Krishna Mohan
221 Gundu <gkmohan-AT-gmail.com> on the user list.
227 Gundu <gkmohan-AT-gmail.com> on the user list.
222
228
223 * IPython/Release.py (version): Mark 0.7.2 version to start
229 * IPython/Release.py (version): Mark 0.7.2 version to start
224 testing for release on 06/06.
230 testing for release on 06/06.
225
231
226 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
232 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
227
233
228 * scripts/irunner: thin script interface so users don't have to
234 * scripts/irunner: thin script interface so users don't have to
229 find the module and call it as an executable, since modules rarely
235 find the module and call it as an executable, since modules rarely
230 live in people's PATH.
236 live in people's PATH.
231
237
232 * IPython/irunner.py (InteractiveRunner.__init__): added
238 * IPython/irunner.py (InteractiveRunner.__init__): added
233 delaybeforesend attribute to control delays with newer versions of
239 delaybeforesend attribute to control delays with newer versions of
234 pexpect. Thanks to detailed help from pexpect's author, Noah
240 pexpect. Thanks to detailed help from pexpect's author, Noah
235 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
241 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
236 correctly (it works in NoColor mode).
242 correctly (it works in NoColor mode).
237
243
238 * IPython/iplib.py (handle_normal): fix nasty crash reported on
244 * IPython/iplib.py (handle_normal): fix nasty crash reported on
239 SAGE list, from improper log() calls.
245 SAGE list, from improper log() calls.
240
246
241 2006-05-31 Ville Vainio <vivainio@gmail.com>
247 2006-05-31 Ville Vainio <vivainio@gmail.com>
242
248
243 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
249 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
244 with args in parens to work correctly with dirs that have spaces.
250 with args in parens to work correctly with dirs that have spaces.
245
251
246 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
252 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
247
253
248 * IPython/Logger.py (Logger.logstart): add option to log raw input
254 * IPython/Logger.py (Logger.logstart): add option to log raw input
249 instead of the processed one. A -r flag was added to the
255 instead of the processed one. A -r flag was added to the
250 %logstart magic used for controlling logging.
256 %logstart magic used for controlling logging.
251
257
252 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
258 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
253
259
254 * IPython/iplib.py (InteractiveShell.__init__): add check for the
260 * IPython/iplib.py (InteractiveShell.__init__): add check for the
255 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
261 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
256 recognize the option. After a bug report by Will Maier. This
262 recognize the option. After a bug report by Will Maier. This
257 closes #64 (will do it after confirmation from W. Maier).
263 closes #64 (will do it after confirmation from W. Maier).
258
264
259 * IPython/irunner.py: New module to run scripts as if manually
265 * IPython/irunner.py: New module to run scripts as if manually
260 typed into an interactive environment, based on pexpect. After a
266 typed into an interactive environment, based on pexpect. After a
261 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
267 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
262 ipython-user list. Simple unittests in the tests/ directory.
268 ipython-user list. Simple unittests in the tests/ directory.
263
269
264 * tools/release: add Will Maier, OpenBSD port maintainer, to
270 * tools/release: add Will Maier, OpenBSD port maintainer, to
265 recepients list. We are now officially part of the OpenBSD ports:
271 recepients list. We are now officially part of the OpenBSD ports:
266 http://www.openbsd.org/ports.html ! Many thanks to Will for the
272 http://www.openbsd.org/ports.html ! Many thanks to Will for the
267 work.
273 work.
268
274
269 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
275 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
270
276
271 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
277 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
272 so that it doesn't break tkinter apps.
278 so that it doesn't break tkinter apps.
273
279
274 * IPython/iplib.py (_prefilter): fix bug where aliases would
280 * IPython/iplib.py (_prefilter): fix bug where aliases would
275 shadow variables when autocall was fully off. Reported by SAGE
281 shadow variables when autocall was fully off. Reported by SAGE
276 author William Stein.
282 author William Stein.
277
283
278 * IPython/OInspect.py (Inspector.__init__): add a flag to control
284 * IPython/OInspect.py (Inspector.__init__): add a flag to control
279 at what detail level strings are computed when foo? is requested.
285 at what detail level strings are computed when foo? is requested.
280 This allows users to ask for example that the string form of an
286 This allows users to ask for example that the string form of an
281 object is only computed when foo?? is called, or even never, by
287 object is only computed when foo?? is called, or even never, by
282 setting the object_info_string_level >= 2 in the configuration
288 setting the object_info_string_level >= 2 in the configuration
283 file. This new option has been added and documented. After a
289 file. This new option has been added and documented. After a
284 request by SAGE to be able to control the printing of very large
290 request by SAGE to be able to control the printing of very large
285 objects more easily.
291 objects more easily.
286
292
287 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
293 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
288
294
289 * IPython/ipmaker.py (make_IPython): remove the ipython call path
295 * IPython/ipmaker.py (make_IPython): remove the ipython call path
290 from sys.argv, to be 100% consistent with how Python itself works
296 from sys.argv, to be 100% consistent with how Python itself works
291 (as seen for example with python -i file.py). After a bug report
297 (as seen for example with python -i file.py). After a bug report
292 by Jeffrey Collins.
298 by Jeffrey Collins.
293
299
294 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
300 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
295 nasty bug which was preventing custom namespaces with -pylab,
301 nasty bug which was preventing custom namespaces with -pylab,
296 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
302 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
297 compatibility (long gone from mpl).
303 compatibility (long gone from mpl).
298
304
299 * IPython/ipapi.py (make_session): name change: create->make. We
305 * IPython/ipapi.py (make_session): name change: create->make. We
300 use make in other places (ipmaker,...), it's shorter and easier to
306 use make in other places (ipmaker,...), it's shorter and easier to
301 type and say, etc. I'm trying to clean things before 0.7.2 so
307 type and say, etc. I'm trying to clean things before 0.7.2 so
302 that I can keep things stable wrt to ipapi in the chainsaw branch.
308 that I can keep things stable wrt to ipapi in the chainsaw branch.
303
309
304 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
310 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
305 python-mode recognizes our debugger mode. Add support for
311 python-mode recognizes our debugger mode. Add support for
306 autoindent inside (X)emacs. After a patch sent in by Jin Liu
312 autoindent inside (X)emacs. After a patch sent in by Jin Liu
307 <m.liu.jin-AT-gmail.com> originally written by
313 <m.liu.jin-AT-gmail.com> originally written by
308 doxgen-AT-newsmth.net (with minor modifications for xemacs
314 doxgen-AT-newsmth.net (with minor modifications for xemacs
309 compatibility)
315 compatibility)
310
316
311 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
317 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
312 tracebacks when walking the stack so that the stack tracking system
318 tracebacks when walking the stack so that the stack tracking system
313 in emacs' python-mode can identify the frames correctly.
319 in emacs' python-mode can identify the frames correctly.
314
320
315 * IPython/ipmaker.py (make_IPython): make the internal (and
321 * IPython/ipmaker.py (make_IPython): make the internal (and
316 default config) autoedit_syntax value false by default. Too many
322 default config) autoedit_syntax value false by default. Too many
317 users have complained to me (both on and off-list) about problems
323 users have complained to me (both on and off-list) about problems
318 with this option being on by default, so I'm making it default to
324 with this option being on by default, so I'm making it default to
319 off. It can still be enabled by anyone via the usual mechanisms.
325 off. It can still be enabled by anyone via the usual mechanisms.
320
326
321 * IPython/completer.py (Completer.attr_matches): add support for
327 * IPython/completer.py (Completer.attr_matches): add support for
322 PyCrust-style _getAttributeNames magic method. Patch contributed
328 PyCrust-style _getAttributeNames magic method. Patch contributed
323 by <mscott-AT-goldenspud.com>. Closes #50.
329 by <mscott-AT-goldenspud.com>. Closes #50.
324
330
325 * IPython/iplib.py (InteractiveShell.__init__): remove the
331 * IPython/iplib.py (InteractiveShell.__init__): remove the
326 deletion of exit/quit from __builtin__, which can break
332 deletion of exit/quit from __builtin__, which can break
327 third-party tools like the Zope debugging console. The
333 third-party tools like the Zope debugging console. The
328 %exit/%quit magics remain. In general, it's probably a good idea
334 %exit/%quit magics remain. In general, it's probably a good idea
329 not to delete anything from __builtin__, since we never know what
335 not to delete anything from __builtin__, since we never know what
330 that will break. In any case, python now (for 2.5) will support
336 that will break. In any case, python now (for 2.5) will support
331 'real' exit/quit, so this issue is moot. Closes #55.
337 'real' exit/quit, so this issue is moot. Closes #55.
332
338
333 * IPython/genutils.py (with_obj): rename the 'with' function to
339 * IPython/genutils.py (with_obj): rename the 'with' function to
334 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
340 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
335 becomes a language keyword. Closes #53.
341 becomes a language keyword. Closes #53.
336
342
337 * IPython/FakeModule.py (FakeModule.__init__): add a proper
343 * IPython/FakeModule.py (FakeModule.__init__): add a proper
338 __file__ attribute to this so it fools more things into thinking
344 __file__ attribute to this so it fools more things into thinking
339 it is a real module. Closes #59.
345 it is a real module. Closes #59.
340
346
341 * IPython/Magic.py (magic_edit): add -n option to open the editor
347 * IPython/Magic.py (magic_edit): add -n option to open the editor
342 at a specific line number. After a patch by Stefan van der Walt.
348 at a specific line number. After a patch by Stefan van der Walt.
343
349
344 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
350 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
345
351
346 * IPython/iplib.py (edit_syntax_error): fix crash when for some
352 * IPython/iplib.py (edit_syntax_error): fix crash when for some
347 reason the file could not be opened. After automatic crash
353 reason the file could not be opened. After automatic crash
348 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
354 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
349 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
355 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
350 (_should_recompile): Don't fire editor if using %bg, since there
356 (_should_recompile): Don't fire editor if using %bg, since there
351 is no file in the first place. From the same report as above.
357 is no file in the first place. From the same report as above.
352 (raw_input): protect against faulty third-party prefilters. After
358 (raw_input): protect against faulty third-party prefilters. After
353 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
359 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
354 while running under SAGE.
360 while running under SAGE.
355
361
356 2006-05-23 Ville Vainio <vivainio@gmail.com>
362 2006-05-23 Ville Vainio <vivainio@gmail.com>
357
363
358 * ipapi.py: Stripped down ip.to_user_ns() to work only as
364 * ipapi.py: Stripped down ip.to_user_ns() to work only as
359 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
365 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
360 now returns None (again), unless dummy is specifically allowed by
366 now returns None (again), unless dummy is specifically allowed by
361 ipapi.get(allow_dummy=True).
367 ipapi.get(allow_dummy=True).
362
368
363 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
369 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
364
370
365 * IPython: remove all 2.2-compatibility objects and hacks from
371 * IPython: remove all 2.2-compatibility objects and hacks from
366 everywhere, since we only support 2.3 at this point. Docs
372 everywhere, since we only support 2.3 at this point. Docs
367 updated.
373 updated.
368
374
369 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
375 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
370 Anything requiring extra validation can be turned into a Python
376 Anything requiring extra validation can be turned into a Python
371 property in the future. I used a property for the db one b/c
377 property in the future. I used a property for the db one b/c
372 there was a nasty circularity problem with the initialization
378 there was a nasty circularity problem with the initialization
373 order, which right now I don't have time to clean up.
379 order, which right now I don't have time to clean up.
374
380
375 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
381 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
376 another locking bug reported by Jorgen. I'm not 100% sure though,
382 another locking bug reported by Jorgen. I'm not 100% sure though,
377 so more testing is needed...
383 so more testing is needed...
378
384
379 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
385 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
380
386
381 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
387 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
382 local variables from any routine in user code (typically executed
388 local variables from any routine in user code (typically executed
383 with %run) directly into the interactive namespace. Very useful
389 with %run) directly into the interactive namespace. Very useful
384 when doing complex debugging.
390 when doing complex debugging.
385 (IPythonNotRunning): Changed the default None object to a dummy
391 (IPythonNotRunning): Changed the default None object to a dummy
386 whose attributes can be queried as well as called without
392 whose attributes can be queried as well as called without
387 exploding, to ease writing code which works transparently both in
393 exploding, to ease writing code which works transparently both in
388 and out of ipython and uses some of this API.
394 and out of ipython and uses some of this API.
389
395
390 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
396 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
391
397
392 * IPython/hooks.py (result_display): Fix the fact that our display
398 * IPython/hooks.py (result_display): Fix the fact that our display
393 hook was using str() instead of repr(), as the default python
399 hook was using str() instead of repr(), as the default python
394 console does. This had gone unnoticed b/c it only happened if
400 console does. This had gone unnoticed b/c it only happened if
395 %Pprint was off, but the inconsistency was there.
401 %Pprint was off, but the inconsistency was there.
396
402
397 2006-05-15 Ville Vainio <vivainio@gmail.com>
403 2006-05-15 Ville Vainio <vivainio@gmail.com>
398
404
399 * Oinspect.py: Only show docstring for nonexisting/binary files
405 * Oinspect.py: Only show docstring for nonexisting/binary files
400 when doing object??, closing ticket #62
406 when doing object??, closing ticket #62
401
407
402 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
408 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
403
409
404 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
410 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
405 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
411 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
406 was being released in a routine which hadn't checked if it had
412 was being released in a routine which hadn't checked if it had
407 been the one to acquire it.
413 been the one to acquire it.
408
414
409 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
415 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
410
416
411 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
417 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
412
418
413 2006-04-11 Ville Vainio <vivainio@gmail.com>
419 2006-04-11 Ville Vainio <vivainio@gmail.com>
414
420
415 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
421 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
416 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
422 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
417 prefilters, allowing stuff like magics and aliases in the file.
423 prefilters, allowing stuff like magics and aliases in the file.
418
424
419 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
425 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
420 added. Supported now are "%clear in" and "%clear out" (clear input and
426 added. Supported now are "%clear in" and "%clear out" (clear input and
421 output history, respectively). Also fixed CachedOutput.flush to
427 output history, respectively). Also fixed CachedOutput.flush to
422 properly flush the output cache.
428 properly flush the output cache.
423
429
424 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
430 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
425 half-success (and fail explicitly).
431 half-success (and fail explicitly).
426
432
427 2006-03-28 Ville Vainio <vivainio@gmail.com>
433 2006-03-28 Ville Vainio <vivainio@gmail.com>
428
434
429 * iplib.py: Fix quoting of aliases so that only argless ones
435 * iplib.py: Fix quoting of aliases so that only argless ones
430 are quoted
436 are quoted
431
437
432 2006-03-28 Ville Vainio <vivainio@gmail.com>
438 2006-03-28 Ville Vainio <vivainio@gmail.com>
433
439
434 * iplib.py: Quote aliases with spaces in the name.
440 * iplib.py: Quote aliases with spaces in the name.
435 "c:\program files\blah\bin" is now legal alias target.
441 "c:\program files\blah\bin" is now legal alias target.
436
442
437 * ext_rehashdir.py: Space no longer allowed as arg
443 * ext_rehashdir.py: Space no longer allowed as arg
438 separator, since space is legal in path names.
444 separator, since space is legal in path names.
439
445
440 2006-03-16 Ville Vainio <vivainio@gmail.com>
446 2006-03-16 Ville Vainio <vivainio@gmail.com>
441
447
442 * upgrade_dir.py: Take path.py from Extensions, correcting
448 * upgrade_dir.py: Take path.py from Extensions, correcting
443 %upgrade magic
449 %upgrade magic
444
450
445 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
451 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
446
452
447 * hooks.py: Only enclose editor binary in quotes if legal and
453 * hooks.py: Only enclose editor binary in quotes if legal and
448 necessary (space in the name, and is an existing file). Fixes a bug
454 necessary (space in the name, and is an existing file). Fixes a bug
449 reported by Zachary Pincus.
455 reported by Zachary Pincus.
450
456
451 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
457 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
452
458
453 * Manual: thanks to a tip on proper color handling for Emacs, by
459 * Manual: thanks to a tip on proper color handling for Emacs, by
454 Eric J Haywiser <ejh1-AT-MIT.EDU>.
460 Eric J Haywiser <ejh1-AT-MIT.EDU>.
455
461
456 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
462 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
457 by applying the provided patch. Thanks to Liu Jin
463 by applying the provided patch. Thanks to Liu Jin
458 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
464 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
459 XEmacs/Linux, I'm trusting the submitter that it actually helps
465 XEmacs/Linux, I'm trusting the submitter that it actually helps
460 under win32/GNU Emacs. Will revisit if any problems are reported.
466 under win32/GNU Emacs. Will revisit if any problems are reported.
461
467
462 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
468 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
463
469
464 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
470 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
465 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
471 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
466
472
467 2006-03-12 Ville Vainio <vivainio@gmail.com>
473 2006-03-12 Ville Vainio <vivainio@gmail.com>
468
474
469 * Magic.py (magic_timeit): Added %timeit magic, contributed by
475 * Magic.py (magic_timeit): Added %timeit magic, contributed by
470 Torsten Marek.
476 Torsten Marek.
471
477
472 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
478 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
473
479
474 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
480 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
475 line ranges works again.
481 line ranges works again.
476
482
477 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
483 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
478
484
479 * IPython/iplib.py (showtraceback): add back sys.last_traceback
485 * IPython/iplib.py (showtraceback): add back sys.last_traceback
480 and friends, after a discussion with Zach Pincus on ipython-user.
486 and friends, after a discussion with Zach Pincus on ipython-user.
481 I'm not 100% sure, but after thinking about it quite a bit, it may
487 I'm not 100% sure, but after thinking about it quite a bit, it may
482 be OK. Testing with the multithreaded shells didn't reveal any
488 be OK. Testing with the multithreaded shells didn't reveal any
483 problems, but let's keep an eye out.
489 problems, but let's keep an eye out.
484
490
485 In the process, I fixed a few things which were calling
491 In the process, I fixed a few things which were calling
486 self.InteractiveTB() directly (like safe_execfile), which is a
492 self.InteractiveTB() directly (like safe_execfile), which is a
487 mistake: ALL exception reporting should be done by calling
493 mistake: ALL exception reporting should be done by calling
488 self.showtraceback(), which handles state and tab-completion and
494 self.showtraceback(), which handles state and tab-completion and
489 more.
495 more.
490
496
491 2006-03-01 Ville Vainio <vivainio@gmail.com>
497 2006-03-01 Ville Vainio <vivainio@gmail.com>
492
498
493 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
499 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
494 To use, do "from ipipe import *".
500 To use, do "from ipipe import *".
495
501
496 2006-02-24 Ville Vainio <vivainio@gmail.com>
502 2006-02-24 Ville Vainio <vivainio@gmail.com>
497
503
498 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
504 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
499 "cleanly" and safely than the older upgrade mechanism.
505 "cleanly" and safely than the older upgrade mechanism.
500
506
501 2006-02-21 Ville Vainio <vivainio@gmail.com>
507 2006-02-21 Ville Vainio <vivainio@gmail.com>
502
508
503 * Magic.py: %save works again.
509 * Magic.py: %save works again.
504
510
505 2006-02-15 Ville Vainio <vivainio@gmail.com>
511 2006-02-15 Ville Vainio <vivainio@gmail.com>
506
512
507 * Magic.py: %Pprint works again
513 * Magic.py: %Pprint works again
508
514
509 * Extensions/ipy_sane_defaults.py: Provide everything provided
515 * Extensions/ipy_sane_defaults.py: Provide everything provided
510 in default ipythonrc, to make it possible to have a completely empty
516 in default ipythonrc, to make it possible to have a completely empty
511 ipythonrc (and thus completely rc-file free configuration)
517 ipythonrc (and thus completely rc-file free configuration)
512
518
513 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
519 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
514
520
515 * IPython/hooks.py (editor): quote the call to the editor command,
521 * IPython/hooks.py (editor): quote the call to the editor command,
516 to allow commands with spaces in them. Problem noted by watching
522 to allow commands with spaces in them. Problem noted by watching
517 Ian Oswald's video about textpad under win32 at
523 Ian Oswald's video about textpad under win32 at
518 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
524 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
519
525
520 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
526 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
521 describing magics (we haven't used @ for a loong time).
527 describing magics (we haven't used @ for a loong time).
522
528
523 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
529 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
524 contributed by marienz to close
530 contributed by marienz to close
525 http://www.scipy.net/roundup/ipython/issue53.
531 http://www.scipy.net/roundup/ipython/issue53.
526
532
527 2006-02-10 Ville Vainio <vivainio@gmail.com>
533 2006-02-10 Ville Vainio <vivainio@gmail.com>
528
534
529 * genutils.py: getoutput now works in win32 too
535 * genutils.py: getoutput now works in win32 too
530
536
531 * completer.py: alias and magic completion only invoked
537 * completer.py: alias and magic completion only invoked
532 at the first "item" in the line, to avoid "cd %store"
538 at the first "item" in the line, to avoid "cd %store"
533 nonsense.
539 nonsense.
534
540
535 2006-02-09 Ville Vainio <vivainio@gmail.com>
541 2006-02-09 Ville Vainio <vivainio@gmail.com>
536
542
537 * test/*: Added a unit testing framework (finally).
543 * test/*: Added a unit testing framework (finally).
538 '%run runtests.py' to run test_*.
544 '%run runtests.py' to run test_*.
539
545
540 * ipapi.py: Exposed runlines and set_custom_exc
546 * ipapi.py: Exposed runlines and set_custom_exc
541
547
542 2006-02-07 Ville Vainio <vivainio@gmail.com>
548 2006-02-07 Ville Vainio <vivainio@gmail.com>
543
549
544 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
550 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
545 instead use "f(1 2)" as before.
551 instead use "f(1 2)" as before.
546
552
547 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
553 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
548
554
549 * IPython/demo.py (IPythonDemo): Add new classes to the demo
555 * IPython/demo.py (IPythonDemo): Add new classes to the demo
550 facilities, for demos processed by the IPython input filter
556 facilities, for demos processed by the IPython input filter
551 (IPythonDemo), and for running a script one-line-at-a-time as a
557 (IPythonDemo), and for running a script one-line-at-a-time as a
552 demo, both for pure Python (LineDemo) and for IPython-processed
558 demo, both for pure Python (LineDemo) and for IPython-processed
553 input (IPythonLineDemo). After a request by Dave Kohel, from the
559 input (IPythonLineDemo). After a request by Dave Kohel, from the
554 SAGE team.
560 SAGE team.
555 (Demo.edit): added an edit() method to the demo objects, to edit
561 (Demo.edit): added an edit() method to the demo objects, to edit
556 the in-memory copy of the last executed block.
562 the in-memory copy of the last executed block.
557
563
558 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
564 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
559 processing to %edit, %macro and %save. These commands can now be
565 processing to %edit, %macro and %save. These commands can now be
560 invoked on the unprocessed input as it was typed by the user
566 invoked on the unprocessed input as it was typed by the user
561 (without any prefilters applied). After requests by the SAGE team
567 (without any prefilters applied). After requests by the SAGE team
562 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
568 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
563
569
564 2006-02-01 Ville Vainio <vivainio@gmail.com>
570 2006-02-01 Ville Vainio <vivainio@gmail.com>
565
571
566 * setup.py, eggsetup.py: easy_install ipython==dev works
572 * setup.py, eggsetup.py: easy_install ipython==dev works
567 correctly now (on Linux)
573 correctly now (on Linux)
568
574
569 * ipy_user_conf,ipmaker: user config changes, removed spurious
575 * ipy_user_conf,ipmaker: user config changes, removed spurious
570 warnings
576 warnings
571
577
572 * iplib: if rc.banner is string, use it as is.
578 * iplib: if rc.banner is string, use it as is.
573
579
574 * Magic: %pycat accepts a string argument and pages it's contents.
580 * Magic: %pycat accepts a string argument and pages it's contents.
575
581
576
582
577 2006-01-30 Ville Vainio <vivainio@gmail.com>
583 2006-01-30 Ville Vainio <vivainio@gmail.com>
578
584
579 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
585 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
580 Now %store and bookmarks work through PickleShare, meaning that
586 Now %store and bookmarks work through PickleShare, meaning that
581 concurrent access is possible and all ipython sessions see the
587 concurrent access is possible and all ipython sessions see the
582 same database situation all the time, instead of snapshot of
588 same database situation all the time, instead of snapshot of
583 the situation when the session was started. Hence, %bookmark
589 the situation when the session was started. Hence, %bookmark
584 results are immediately accessible from othes sessions. The database
590 results are immediately accessible from othes sessions. The database
585 is also available for use by user extensions. See:
591 is also available for use by user extensions. See:
586 http://www.python.org/pypi/pickleshare
592 http://www.python.org/pypi/pickleshare
587
593
588 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
594 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
589
595
590 * aliases can now be %store'd
596 * aliases can now be %store'd
591
597
592 * path.py moved to Extensions so that pickleshare does not need
598 * path.py moved to Extensions so that pickleshare does not need
593 IPython-specific import. Extensions added to pythonpath right
599 IPython-specific import. Extensions added to pythonpath right
594 at __init__.
600 at __init__.
595
601
596 * iplib.py: ipalias deprecated/redundant; aliases are converted and
602 * iplib.py: ipalias deprecated/redundant; aliases are converted and
597 called with _ip.system and the pre-transformed command string.
603 called with _ip.system and the pre-transformed command string.
598
604
599 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
605 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
600
606
601 * IPython/iplib.py (interact): Fix that we were not catching
607 * IPython/iplib.py (interact): Fix that we were not catching
602 KeyboardInterrupt exceptions properly. I'm not quite sure why the
608 KeyboardInterrupt exceptions properly. I'm not quite sure why the
603 logic here had to change, but it's fixed now.
609 logic here had to change, but it's fixed now.
604
610
605 2006-01-29 Ville Vainio <vivainio@gmail.com>
611 2006-01-29 Ville Vainio <vivainio@gmail.com>
606
612
607 * iplib.py: Try to import pyreadline on Windows.
613 * iplib.py: Try to import pyreadline on Windows.
608
614
609 2006-01-27 Ville Vainio <vivainio@gmail.com>
615 2006-01-27 Ville Vainio <vivainio@gmail.com>
610
616
611 * iplib.py: Expose ipapi as _ip in builtin namespace.
617 * iplib.py: Expose ipapi as _ip in builtin namespace.
612 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
618 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
613 and ip_set_hook (-> _ip.set_hook) redundant. % and !
619 and ip_set_hook (-> _ip.set_hook) redundant. % and !
614 syntax now produce _ip.* variant of the commands.
620 syntax now produce _ip.* variant of the commands.
615
621
616 * "_ip.options().autoedit_syntax = 2" automatically throws
622 * "_ip.options().autoedit_syntax = 2" automatically throws
617 user to editor for syntax error correction without prompting.
623 user to editor for syntax error correction without prompting.
618
624
619 2006-01-27 Ville Vainio <vivainio@gmail.com>
625 2006-01-27 Ville Vainio <vivainio@gmail.com>
620
626
621 * ipmaker.py: Give "realistic" sys.argv for scripts (without
627 * ipmaker.py: Give "realistic" sys.argv for scripts (without
622 'ipython' at argv[0]) executed through command line.
628 'ipython' at argv[0]) executed through command line.
623 NOTE: this DEPRECATES calling ipython with multiple scripts
629 NOTE: this DEPRECATES calling ipython with multiple scripts
624 ("ipython a.py b.py c.py")
630 ("ipython a.py b.py c.py")
625
631
626 * iplib.py, hooks.py: Added configurable input prefilter,
632 * iplib.py, hooks.py: Added configurable input prefilter,
627 named 'input_prefilter'. See ext_rescapture.py for example
633 named 'input_prefilter'. See ext_rescapture.py for example
628 usage.
634 usage.
629
635
630 * ext_rescapture.py, Magic.py: Better system command output capture
636 * ext_rescapture.py, Magic.py: Better system command output capture
631 through 'var = !ls' (deprecates user-visible %sc). Same notation
637 through 'var = !ls' (deprecates user-visible %sc). Same notation
632 applies for magics, 'var = %alias' assigns alias list to var.
638 applies for magics, 'var = %alias' assigns alias list to var.
633
639
634 * ipapi.py: added meta() for accessing extension-usable data store.
640 * ipapi.py: added meta() for accessing extension-usable data store.
635
641
636 * iplib.py: added InteractiveShell.getapi(). New magics should be
642 * iplib.py: added InteractiveShell.getapi(). New magics should be
637 written doing self.getapi() instead of using the shell directly.
643 written doing self.getapi() instead of using the shell directly.
638
644
639 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
645 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
640 %store foo >> ~/myfoo.txt to store variables to files (in clean
646 %store foo >> ~/myfoo.txt to store variables to files (in clean
641 textual form, not a restorable pickle).
647 textual form, not a restorable pickle).
642
648
643 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
649 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
644
650
645 * usage.py, Magic.py: added %quickref
651 * usage.py, Magic.py: added %quickref
646
652
647 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
653 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
648
654
649 * GetoptErrors when invoking magics etc. with wrong args
655 * GetoptErrors when invoking magics etc. with wrong args
650 are now more helpful:
656 are now more helpful:
651 GetoptError: option -l not recognized (allowed: "qb" )
657 GetoptError: option -l not recognized (allowed: "qb" )
652
658
653 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
659 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
654
660
655 * IPython/demo.py (Demo.show): Flush stdout after each block, so
661 * IPython/demo.py (Demo.show): Flush stdout after each block, so
656 computationally intensive blocks don't appear to stall the demo.
662 computationally intensive blocks don't appear to stall the demo.
657
663
658 2006-01-24 Ville Vainio <vivainio@gmail.com>
664 2006-01-24 Ville Vainio <vivainio@gmail.com>
659
665
660 * iplib.py, hooks.py: 'result_display' hook can return a non-None
666 * iplib.py, hooks.py: 'result_display' hook can return a non-None
661 value to manipulate resulting history entry.
667 value to manipulate resulting history entry.
662
668
663 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
669 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
664 to instance methods of IPApi class, to make extending an embedded
670 to instance methods of IPApi class, to make extending an embedded
665 IPython feasible. See ext_rehashdir.py for example usage.
671 IPython feasible. See ext_rehashdir.py for example usage.
666
672
667 * Merged 1071-1076 from branches/0.7.1
673 * Merged 1071-1076 from branches/0.7.1
668
674
669
675
670 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
676 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
671
677
672 * tools/release (daystamp): Fix build tools to use the new
678 * tools/release (daystamp): Fix build tools to use the new
673 eggsetup.py script to build lightweight eggs.
679 eggsetup.py script to build lightweight eggs.
674
680
675 * Applied changesets 1062 and 1064 before 0.7.1 release.
681 * Applied changesets 1062 and 1064 before 0.7.1 release.
676
682
677 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
683 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
678 see the raw input history (without conversions like %ls ->
684 see the raw input history (without conversions like %ls ->
679 ipmagic("ls")). After a request from W. Stein, SAGE
685 ipmagic("ls")). After a request from W. Stein, SAGE
680 (http://modular.ucsd.edu/sage) developer. This information is
686 (http://modular.ucsd.edu/sage) developer. This information is
681 stored in the input_hist_raw attribute of the IPython instance, so
687 stored in the input_hist_raw attribute of the IPython instance, so
682 developers can access it if needed (it's an InputList instance).
688 developers can access it if needed (it's an InputList instance).
683
689
684 * Versionstring = 0.7.2.svn
690 * Versionstring = 0.7.2.svn
685
691
686 * eggsetup.py: A separate script for constructing eggs, creates
692 * eggsetup.py: A separate script for constructing eggs, creates
687 proper launch scripts even on Windows (an .exe file in
693 proper launch scripts even on Windows (an .exe file in
688 \python24\scripts).
694 \python24\scripts).
689
695
690 * ipapi.py: launch_new_instance, launch entry point needed for the
696 * ipapi.py: launch_new_instance, launch entry point needed for the
691 egg.
697 egg.
692
698
693 2006-01-23 Ville Vainio <vivainio@gmail.com>
699 2006-01-23 Ville Vainio <vivainio@gmail.com>
694
700
695 * Added %cpaste magic for pasting python code
701 * Added %cpaste magic for pasting python code
696
702
697 2006-01-22 Ville Vainio <vivainio@gmail.com>
703 2006-01-22 Ville Vainio <vivainio@gmail.com>
698
704
699 * Merge from branches/0.7.1 into trunk, revs 1052-1057
705 * Merge from branches/0.7.1 into trunk, revs 1052-1057
700
706
701 * Versionstring = 0.7.2.svn
707 * Versionstring = 0.7.2.svn
702
708
703 * eggsetup.py: A separate script for constructing eggs, creates
709 * eggsetup.py: A separate script for constructing eggs, creates
704 proper launch scripts even on Windows (an .exe file in
710 proper launch scripts even on Windows (an .exe file in
705 \python24\scripts).
711 \python24\scripts).
706
712
707 * ipapi.py: launch_new_instance, launch entry point needed for the
713 * ipapi.py: launch_new_instance, launch entry point needed for the
708 egg.
714 egg.
709
715
710 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
716 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
711
717
712 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
718 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
713 %pfile foo would print the file for foo even if it was a binary.
719 %pfile foo would print the file for foo even if it was a binary.
714 Now, extensions '.so' and '.dll' are skipped.
720 Now, extensions '.so' and '.dll' are skipped.
715
721
716 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
722 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
717 bug, where macros would fail in all threaded modes. I'm not 100%
723 bug, where macros would fail in all threaded modes. I'm not 100%
718 sure, so I'm going to put out an rc instead of making a release
724 sure, so I'm going to put out an rc instead of making a release
719 today, and wait for feedback for at least a few days.
725 today, and wait for feedback for at least a few days.
720
726
721 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
727 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
722 it...) the handling of pasting external code with autoindent on.
728 it...) the handling of pasting external code with autoindent on.
723 To get out of a multiline input, the rule will appear for most
729 To get out of a multiline input, the rule will appear for most
724 users unchanged: two blank lines or change the indent level
730 users unchanged: two blank lines or change the indent level
725 proposed by IPython. But there is a twist now: you can
731 proposed by IPython. But there is a twist now: you can
726 add/subtract only *one or two spaces*. If you add/subtract three
732 add/subtract only *one or two spaces*. If you add/subtract three
727 or more (unless you completely delete the line), IPython will
733 or more (unless you completely delete the line), IPython will
728 accept that line, and you'll need to enter a second one of pure
734 accept that line, and you'll need to enter a second one of pure
729 whitespace. I know it sounds complicated, but I can't find a
735 whitespace. I know it sounds complicated, but I can't find a
730 different solution that covers all the cases, with the right
736 different solution that covers all the cases, with the right
731 heuristics. Hopefully in actual use, nobody will really notice
737 heuristics. Hopefully in actual use, nobody will really notice
732 all these strange rules and things will 'just work'.
738 all these strange rules and things will 'just work'.
733
739
734 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
740 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
735
741
736 * IPython/iplib.py (interact): catch exceptions which can be
742 * IPython/iplib.py (interact): catch exceptions which can be
737 triggered asynchronously by signal handlers. Thanks to an
743 triggered asynchronously by signal handlers. Thanks to an
738 automatic crash report, submitted by Colin Kingsley
744 automatic crash report, submitted by Colin Kingsley
739 <tercel-AT-gentoo.org>.
745 <tercel-AT-gentoo.org>.
740
746
741 2006-01-20 Ville Vainio <vivainio@gmail.com>
747 2006-01-20 Ville Vainio <vivainio@gmail.com>
742
748
743 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
749 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
744 (%rehashdir, very useful, try it out) of how to extend ipython
750 (%rehashdir, very useful, try it out) of how to extend ipython
745 with new magics. Also added Extensions dir to pythonpath to make
751 with new magics. Also added Extensions dir to pythonpath to make
746 importing extensions easy.
752 importing extensions easy.
747
753
748 * %store now complains when trying to store interactively declared
754 * %store now complains when trying to store interactively declared
749 classes / instances of those classes.
755 classes / instances of those classes.
750
756
751 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
757 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
752 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
758 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
753 if they exist, and ipy_user_conf.py with some defaults is created for
759 if they exist, and ipy_user_conf.py with some defaults is created for
754 the user.
760 the user.
755
761
756 * Startup rehashing done by the config file, not InterpreterExec.
762 * Startup rehashing done by the config file, not InterpreterExec.
757 This means system commands are available even without selecting the
763 This means system commands are available even without selecting the
758 pysh profile. It's the sensible default after all.
764 pysh profile. It's the sensible default after all.
759
765
760 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
766 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
761
767
762 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
768 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
763 multiline code with autoindent on working. But I am really not
769 multiline code with autoindent on working. But I am really not
764 sure, so this needs more testing. Will commit a debug-enabled
770 sure, so this needs more testing. Will commit a debug-enabled
765 version for now, while I test it some more, so that Ville and
771 version for now, while I test it some more, so that Ville and
766 others may also catch any problems. Also made
772 others may also catch any problems. Also made
767 self.indent_current_str() a method, to ensure that there's no
773 self.indent_current_str() a method, to ensure that there's no
768 chance of the indent space count and the corresponding string
774 chance of the indent space count and the corresponding string
769 falling out of sync. All code needing the string should just call
775 falling out of sync. All code needing the string should just call
770 the method.
776 the method.
771
777
772 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
778 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
773
779
774 * IPython/Magic.py (magic_edit): fix check for when users don't
780 * IPython/Magic.py (magic_edit): fix check for when users don't
775 save their output files, the try/except was in the wrong section.
781 save their output files, the try/except was in the wrong section.
776
782
777 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
783 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
778
784
779 * IPython/Magic.py (magic_run): fix __file__ global missing from
785 * IPython/Magic.py (magic_run): fix __file__ global missing from
780 script's namespace when executed via %run. After a report by
786 script's namespace when executed via %run. After a report by
781 Vivian.
787 Vivian.
782
788
783 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
789 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
784 when using python 2.4. The parent constructor changed in 2.4, and
790 when using python 2.4. The parent constructor changed in 2.4, and
785 we need to track it directly (we can't call it, as it messes up
791 we need to track it directly (we can't call it, as it messes up
786 readline and tab-completion inside our pdb would stop working).
792 readline and tab-completion inside our pdb would stop working).
787 After a bug report by R. Bernstein <rocky-AT-panix.com>.
793 After a bug report by R. Bernstein <rocky-AT-panix.com>.
788
794
789 2006-01-16 Ville Vainio <vivainio@gmail.com>
795 2006-01-16 Ville Vainio <vivainio@gmail.com>
790
796
791 * Ipython/magic.py: Reverted back to old %edit functionality
797 * Ipython/magic.py: Reverted back to old %edit functionality
792 that returns file contents on exit.
798 that returns file contents on exit.
793
799
794 * IPython/path.py: Added Jason Orendorff's "path" module to
800 * IPython/path.py: Added Jason Orendorff's "path" module to
795 IPython tree, http://www.jorendorff.com/articles/python/path/.
801 IPython tree, http://www.jorendorff.com/articles/python/path/.
796 You can get path objects conveniently through %sc, and !!, e.g.:
802 You can get path objects conveniently through %sc, and !!, e.g.:
797 sc files=ls
803 sc files=ls
798 for p in files.paths: # or files.p
804 for p in files.paths: # or files.p
799 print p,p.mtime
805 print p,p.mtime
800
806
801 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
807 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
802 now work again without considering the exclusion regexp -
808 now work again without considering the exclusion regexp -
803 hence, things like ',foo my/path' turn to 'foo("my/path")'
809 hence, things like ',foo my/path' turn to 'foo("my/path")'
804 instead of syntax error.
810 instead of syntax error.
805
811
806
812
807 2006-01-14 Ville Vainio <vivainio@gmail.com>
813 2006-01-14 Ville Vainio <vivainio@gmail.com>
808
814
809 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
815 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
810 ipapi decorators for python 2.4 users, options() provides access to rc
816 ipapi decorators for python 2.4 users, options() provides access to rc
811 data.
817 data.
812
818
813 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
819 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
814 as path separators (even on Linux ;-). Space character after
820 as path separators (even on Linux ;-). Space character after
815 backslash (as yielded by tab completer) is still space;
821 backslash (as yielded by tab completer) is still space;
816 "%cd long\ name" works as expected.
822 "%cd long\ name" works as expected.
817
823
818 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
824 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
819 as "chain of command", with priority. API stays the same,
825 as "chain of command", with priority. API stays the same,
820 TryNext exception raised by a hook function signals that
826 TryNext exception raised by a hook function signals that
821 current hook failed and next hook should try handling it, as
827 current hook failed and next hook should try handling it, as
822 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
828 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
823 requested configurable display hook, which is now implemented.
829 requested configurable display hook, which is now implemented.
824
830
825 2006-01-13 Ville Vainio <vivainio@gmail.com>
831 2006-01-13 Ville Vainio <vivainio@gmail.com>
826
832
827 * IPython/platutils*.py: platform specific utility functions,
833 * IPython/platutils*.py: platform specific utility functions,
828 so far only set_term_title is implemented (change terminal
834 so far only set_term_title is implemented (change terminal
829 label in windowing systems). %cd now changes the title to
835 label in windowing systems). %cd now changes the title to
830 current dir.
836 current dir.
831
837
832 * IPython/Release.py: Added myself to "authors" list,
838 * IPython/Release.py: Added myself to "authors" list,
833 had to create new files.
839 had to create new files.
834
840
835 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
841 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
836 shell escape; not a known bug but had potential to be one in the
842 shell escape; not a known bug but had potential to be one in the
837 future.
843 future.
838
844
839 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
845 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
840 extension API for IPython! See the module for usage example. Fix
846 extension API for IPython! See the module for usage example. Fix
841 OInspect for docstring-less magic functions.
847 OInspect for docstring-less magic functions.
842
848
843
849
844 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
850 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
845
851
846 * IPython/iplib.py (raw_input): temporarily deactivate all
852 * IPython/iplib.py (raw_input): temporarily deactivate all
847 attempts at allowing pasting of code with autoindent on. It
853 attempts at allowing pasting of code with autoindent on. It
848 introduced bugs (reported by Prabhu) and I can't seem to find a
854 introduced bugs (reported by Prabhu) and I can't seem to find a
849 robust combination which works in all cases. Will have to revisit
855 robust combination which works in all cases. Will have to revisit
850 later.
856 later.
851
857
852 * IPython/genutils.py: remove isspace() function. We've dropped
858 * IPython/genutils.py: remove isspace() function. We've dropped
853 2.2 compatibility, so it's OK to use the string method.
859 2.2 compatibility, so it's OK to use the string method.
854
860
855 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
861 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
856
862
857 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
863 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
858 matching what NOT to autocall on, to include all python binary
864 matching what NOT to autocall on, to include all python binary
859 operators (including things like 'and', 'or', 'is' and 'in').
865 operators (including things like 'and', 'or', 'is' and 'in').
860 Prompted by a bug report on 'foo & bar', but I realized we had
866 Prompted by a bug report on 'foo & bar', but I realized we had
861 many more potential bug cases with other operators. The regexp is
867 many more potential bug cases with other operators. The regexp is
862 self.re_exclude_auto, it's fairly commented.
868 self.re_exclude_auto, it's fairly commented.
863
869
864 2006-01-12 Ville Vainio <vivainio@gmail.com>
870 2006-01-12 Ville Vainio <vivainio@gmail.com>
865
871
866 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
872 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
867 Prettified and hardened string/backslash quoting with ipsystem(),
873 Prettified and hardened string/backslash quoting with ipsystem(),
868 ipalias() and ipmagic(). Now even \ characters are passed to
874 ipalias() and ipmagic(). Now even \ characters are passed to
869 %magics, !shell escapes and aliases exactly as they are in the
875 %magics, !shell escapes and aliases exactly as they are in the
870 ipython command line. Should improve backslash experience,
876 ipython command line. Should improve backslash experience,
871 particularly in Windows (path delimiter for some commands that
877 particularly in Windows (path delimiter for some commands that
872 won't understand '/'), but Unix benefits as well (regexps). %cd
878 won't understand '/'), but Unix benefits as well (regexps). %cd
873 magic still doesn't support backslash path delimiters, though. Also
879 magic still doesn't support backslash path delimiters, though. Also
874 deleted all pretense of supporting multiline command strings in
880 deleted all pretense of supporting multiline command strings in
875 !system or %magic commands. Thanks to Jerry McRae for suggestions.
881 !system or %magic commands. Thanks to Jerry McRae for suggestions.
876
882
877 * doc/build_doc_instructions.txt added. Documentation on how to
883 * doc/build_doc_instructions.txt added. Documentation on how to
878 use doc/update_manual.py, added yesterday. Both files contributed
884 use doc/update_manual.py, added yesterday. Both files contributed
879 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
885 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
880 doc/*.sh for deprecation at a later date.
886 doc/*.sh for deprecation at a later date.
881
887
882 * /ipython.py Added ipython.py to root directory for
888 * /ipython.py Added ipython.py to root directory for
883 zero-installation (tar xzvf ipython.tgz; cd ipython; python
889 zero-installation (tar xzvf ipython.tgz; cd ipython; python
884 ipython.py) and development convenience (no need to keep doing
890 ipython.py) and development convenience (no need to keep doing
885 "setup.py install" between changes).
891 "setup.py install" between changes).
886
892
887 * Made ! and !! shell escapes work (again) in multiline expressions:
893 * Made ! and !! shell escapes work (again) in multiline expressions:
888 if 1:
894 if 1:
889 !ls
895 !ls
890 !!ls
896 !!ls
891
897
892 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
898 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
893
899
894 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
900 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
895 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
901 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
896 module in case-insensitive installation. Was causing crashes
902 module in case-insensitive installation. Was causing crashes
897 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
903 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
898
904
899 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
905 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
900 <marienz-AT-gentoo.org>, closes
906 <marienz-AT-gentoo.org>, closes
901 http://www.scipy.net/roundup/ipython/issue51.
907 http://www.scipy.net/roundup/ipython/issue51.
902
908
903 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
909 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
904
910
905 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
911 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
906 problem of excessive CPU usage under *nix and keyboard lag under
912 problem of excessive CPU usage under *nix and keyboard lag under
907 win32.
913 win32.
908
914
909 2006-01-10 *** Released version 0.7.0
915 2006-01-10 *** Released version 0.7.0
910
916
911 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
917 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
912
918
913 * IPython/Release.py (revision): tag version number to 0.7.0,
919 * IPython/Release.py (revision): tag version number to 0.7.0,
914 ready for release.
920 ready for release.
915
921
916 * IPython/Magic.py (magic_edit): Add print statement to %edit so
922 * IPython/Magic.py (magic_edit): Add print statement to %edit so
917 it informs the user of the name of the temp. file used. This can
923 it informs the user of the name of the temp. file used. This can
918 help if you decide later to reuse that same file, so you know
924 help if you decide later to reuse that same file, so you know
919 where to copy the info from.
925 where to copy the info from.
920
926
921 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
927 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
922
928
923 * setup_bdist_egg.py: little script to build an egg. Added
929 * setup_bdist_egg.py: little script to build an egg. Added
924 support in the release tools as well.
930 support in the release tools as well.
925
931
926 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
932 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
927
933
928 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
934 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
929 version selection (new -wxversion command line and ipythonrc
935 version selection (new -wxversion command line and ipythonrc
930 parameter). Patch contributed by Arnd Baecker
936 parameter). Patch contributed by Arnd Baecker
931 <arnd.baecker-AT-web.de>.
937 <arnd.baecker-AT-web.de>.
932
938
933 * IPython/iplib.py (embed_mainloop): fix tab-completion in
939 * IPython/iplib.py (embed_mainloop): fix tab-completion in
934 embedded instances, for variables defined at the interactive
940 embedded instances, for variables defined at the interactive
935 prompt of the embedded ipython. Reported by Arnd.
941 prompt of the embedded ipython. Reported by Arnd.
936
942
937 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
943 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
938 it can be used as a (stateful) toggle, or with a direct parameter.
944 it can be used as a (stateful) toggle, or with a direct parameter.
939
945
940 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
946 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
941 could be triggered in certain cases and cause the traceback
947 could be triggered in certain cases and cause the traceback
942 printer not to work.
948 printer not to work.
943
949
944 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
950 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
945
951
946 * IPython/iplib.py (_should_recompile): Small fix, closes
952 * IPython/iplib.py (_should_recompile): Small fix, closes
947 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
953 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
948
954
949 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
955 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
950
956
951 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
957 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
952 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
958 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
953 Moad for help with tracking it down.
959 Moad for help with tracking it down.
954
960
955 * IPython/iplib.py (handle_auto): fix autocall handling for
961 * IPython/iplib.py (handle_auto): fix autocall handling for
956 objects which support BOTH __getitem__ and __call__ (so that f [x]
962 objects which support BOTH __getitem__ and __call__ (so that f [x]
957 is left alone, instead of becoming f([x]) automatically).
963 is left alone, instead of becoming f([x]) automatically).
958
964
959 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
965 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
960 Ville's patch.
966 Ville's patch.
961
967
962 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
968 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
963
969
964 * IPython/iplib.py (handle_auto): changed autocall semantics to
970 * IPython/iplib.py (handle_auto): changed autocall semantics to
965 include 'smart' mode, where the autocall transformation is NOT
971 include 'smart' mode, where the autocall transformation is NOT
966 applied if there are no arguments on the line. This allows you to
972 applied if there are no arguments on the line. This allows you to
967 just type 'foo' if foo is a callable to see its internal form,
973 just type 'foo' if foo is a callable to see its internal form,
968 instead of having it called with no arguments (typically a
974 instead of having it called with no arguments (typically a
969 mistake). The old 'full' autocall still exists: for that, you
975 mistake). The old 'full' autocall still exists: for that, you
970 need to set the 'autocall' parameter to 2 in your ipythonrc file.
976 need to set the 'autocall' parameter to 2 in your ipythonrc file.
971
977
972 * IPython/completer.py (Completer.attr_matches): add
978 * IPython/completer.py (Completer.attr_matches): add
973 tab-completion support for Enthoughts' traits. After a report by
979 tab-completion support for Enthoughts' traits. After a report by
974 Arnd and a patch by Prabhu.
980 Arnd and a patch by Prabhu.
975
981
976 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
982 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
977
983
978 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
984 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
979 Schmolck's patch to fix inspect.getinnerframes().
985 Schmolck's patch to fix inspect.getinnerframes().
980
986
981 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
987 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
982 for embedded instances, regarding handling of namespaces and items
988 for embedded instances, regarding handling of namespaces and items
983 added to the __builtin__ one. Multiple embedded instances and
989 added to the __builtin__ one. Multiple embedded instances and
984 recursive embeddings should work better now (though I'm not sure
990 recursive embeddings should work better now (though I'm not sure
985 I've got all the corner cases fixed, that code is a bit of a brain
991 I've got all the corner cases fixed, that code is a bit of a brain
986 twister).
992 twister).
987
993
988 * IPython/Magic.py (magic_edit): added support to edit in-memory
994 * IPython/Magic.py (magic_edit): added support to edit in-memory
989 macros (automatically creates the necessary temp files). %edit
995 macros (automatically creates the necessary temp files). %edit
990 also doesn't return the file contents anymore, it's just noise.
996 also doesn't return the file contents anymore, it's just noise.
991
997
992 * IPython/completer.py (Completer.attr_matches): revert change to
998 * IPython/completer.py (Completer.attr_matches): revert change to
993 complete only on attributes listed in __all__. I realized it
999 complete only on attributes listed in __all__. I realized it
994 cripples the tab-completion system as a tool for exploring the
1000 cripples the tab-completion system as a tool for exploring the
995 internals of unknown libraries (it renders any non-__all__
1001 internals of unknown libraries (it renders any non-__all__
996 attribute off-limits). I got bit by this when trying to see
1002 attribute off-limits). I got bit by this when trying to see
997 something inside the dis module.
1003 something inside the dis module.
998
1004
999 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
1005 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
1000
1006
1001 * IPython/iplib.py (InteractiveShell.__init__): add .meta
1007 * IPython/iplib.py (InteractiveShell.__init__): add .meta
1002 namespace for users and extension writers to hold data in. This
1008 namespace for users and extension writers to hold data in. This
1003 follows the discussion in
1009 follows the discussion in
1004 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
1010 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
1005
1011
1006 * IPython/completer.py (IPCompleter.complete): small patch to help
1012 * IPython/completer.py (IPCompleter.complete): small patch to help
1007 tab-completion under Emacs, after a suggestion by John Barnard
1013 tab-completion under Emacs, after a suggestion by John Barnard
1008 <barnarj-AT-ccf.org>.
1014 <barnarj-AT-ccf.org>.
1009
1015
1010 * IPython/Magic.py (Magic.extract_input_slices): added support for
1016 * IPython/Magic.py (Magic.extract_input_slices): added support for
1011 the slice notation in magics to use N-M to represent numbers N...M
1017 the slice notation in magics to use N-M to represent numbers N...M
1012 (closed endpoints). This is used by %macro and %save.
1018 (closed endpoints). This is used by %macro and %save.
1013
1019
1014 * IPython/completer.py (Completer.attr_matches): for modules which
1020 * IPython/completer.py (Completer.attr_matches): for modules which
1015 define __all__, complete only on those. After a patch by Jeffrey
1021 define __all__, complete only on those. After a patch by Jeffrey
1016 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
1022 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
1017 speed up this routine.
1023 speed up this routine.
1018
1024
1019 * IPython/Logger.py (Logger.log): fix a history handling bug. I
1025 * IPython/Logger.py (Logger.log): fix a history handling bug. I
1020 don't know if this is the end of it, but the behavior now is
1026 don't know if this is the end of it, but the behavior now is
1021 certainly much more correct. Note that coupled with macros,
1027 certainly much more correct. Note that coupled with macros,
1022 slightly surprising (at first) behavior may occur: a macro will in
1028 slightly surprising (at first) behavior may occur: a macro will in
1023 general expand to multiple lines of input, so upon exiting, the
1029 general expand to multiple lines of input, so upon exiting, the
1024 in/out counters will both be bumped by the corresponding amount
1030 in/out counters will both be bumped by the corresponding amount
1025 (as if the macro's contents had been typed interactively). Typing
1031 (as if the macro's contents had been typed interactively). Typing
1026 %hist will reveal the intermediate (silently processed) lines.
1032 %hist will reveal the intermediate (silently processed) lines.
1027
1033
1028 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
1034 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
1029 pickle to fail (%run was overwriting __main__ and not restoring
1035 pickle to fail (%run was overwriting __main__ and not restoring
1030 it, but pickle relies on __main__ to operate).
1036 it, but pickle relies on __main__ to operate).
1031
1037
1032 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
1038 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
1033 using properties, but forgot to make the main InteractiveShell
1039 using properties, but forgot to make the main InteractiveShell
1034 class a new-style class. Properties fail silently, and
1040 class a new-style class. Properties fail silently, and
1035 mysteriously, with old-style class (getters work, but
1041 mysteriously, with old-style class (getters work, but
1036 setters don't do anything).
1042 setters don't do anything).
1037
1043
1038 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
1044 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
1039
1045
1040 * IPython/Magic.py (magic_history): fix history reporting bug (I
1046 * IPython/Magic.py (magic_history): fix history reporting bug (I
1041 know some nasties are still there, I just can't seem to find a
1047 know some nasties are still there, I just can't seem to find a
1042 reproducible test case to track them down; the input history is
1048 reproducible test case to track them down; the input history is
1043 falling out of sync...)
1049 falling out of sync...)
1044
1050
1045 * IPython/iplib.py (handle_shell_escape): fix bug where both
1051 * IPython/iplib.py (handle_shell_escape): fix bug where both
1046 aliases and system accesses where broken for indented code (such
1052 aliases and system accesses where broken for indented code (such
1047 as loops).
1053 as loops).
1048
1054
1049 * IPython/genutils.py (shell): fix small but critical bug for
1055 * IPython/genutils.py (shell): fix small but critical bug for
1050 win32 system access.
1056 win32 system access.
1051
1057
1052 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
1058 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
1053
1059
1054 * IPython/iplib.py (showtraceback): remove use of the
1060 * IPython/iplib.py (showtraceback): remove use of the
1055 sys.last_{type/value/traceback} structures, which are non
1061 sys.last_{type/value/traceback} structures, which are non
1056 thread-safe.
1062 thread-safe.
1057 (_prefilter): change control flow to ensure that we NEVER
1063 (_prefilter): change control flow to ensure that we NEVER
1058 introspect objects when autocall is off. This will guarantee that
1064 introspect objects when autocall is off. This will guarantee that
1059 having an input line of the form 'x.y', where access to attribute
1065 having an input line of the form 'x.y', where access to attribute
1060 'y' has side effects, doesn't trigger the side effect TWICE. It
1066 'y' has side effects, doesn't trigger the side effect TWICE. It
1061 is important to note that, with autocall on, these side effects
1067 is important to note that, with autocall on, these side effects
1062 can still happen.
1068 can still happen.
1063 (ipsystem): new builtin, to complete the ip{magic/alias/system}
1069 (ipsystem): new builtin, to complete the ip{magic/alias/system}
1064 trio. IPython offers these three kinds of special calls which are
1070 trio. IPython offers these three kinds of special calls which are
1065 not python code, and it's a good thing to have their call method
1071 not python code, and it's a good thing to have their call method
1066 be accessible as pure python functions (not just special syntax at
1072 be accessible as pure python functions (not just special syntax at
1067 the command line). It gives us a better internal implementation
1073 the command line). It gives us a better internal implementation
1068 structure, as well as exposing these for user scripting more
1074 structure, as well as exposing these for user scripting more
1069 cleanly.
1075 cleanly.
1070
1076
1071 * IPython/macro.py (Macro.__init__): moved macros to a standalone
1077 * IPython/macro.py (Macro.__init__): moved macros to a standalone
1072 file. Now that they'll be more likely to be used with the
1078 file. Now that they'll be more likely to be used with the
1073 persistance system (%store), I want to make sure their module path
1079 persistance system (%store), I want to make sure their module path
1074 doesn't change in the future, so that we don't break things for
1080 doesn't change in the future, so that we don't break things for
1075 users' persisted data.
1081 users' persisted data.
1076
1082
1077 * IPython/iplib.py (autoindent_update): move indentation
1083 * IPython/iplib.py (autoindent_update): move indentation
1078 management into the _text_ processing loop, not the keyboard
1084 management into the _text_ processing loop, not the keyboard
1079 interactive one. This is necessary to correctly process non-typed
1085 interactive one. This is necessary to correctly process non-typed
1080 multiline input (such as macros).
1086 multiline input (such as macros).
1081
1087
1082 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
1088 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
1083 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
1089 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
1084 which was producing problems in the resulting manual.
1090 which was producing problems in the resulting manual.
1085 (magic_whos): improve reporting of instances (show their class,
1091 (magic_whos): improve reporting of instances (show their class,
1086 instead of simply printing 'instance' which isn't terribly
1092 instead of simply printing 'instance' which isn't terribly
1087 informative).
1093 informative).
1088
1094
1089 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
1095 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
1090 (minor mods) to support network shares under win32.
1096 (minor mods) to support network shares under win32.
1091
1097
1092 * IPython/winconsole.py (get_console_size): add new winconsole
1098 * IPython/winconsole.py (get_console_size): add new winconsole
1093 module and fixes to page_dumb() to improve its behavior under
1099 module and fixes to page_dumb() to improve its behavior under
1094 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1100 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1095
1101
1096 * IPython/Magic.py (Macro): simplified Macro class to just
1102 * IPython/Magic.py (Macro): simplified Macro class to just
1097 subclass list. We've had only 2.2 compatibility for a very long
1103 subclass list. We've had only 2.2 compatibility for a very long
1098 time, yet I was still avoiding subclassing the builtin types. No
1104 time, yet I was still avoiding subclassing the builtin types. No
1099 more (I'm also starting to use properties, though I won't shift to
1105 more (I'm also starting to use properties, though I won't shift to
1100 2.3-specific features quite yet).
1106 2.3-specific features quite yet).
1101 (magic_store): added Ville's patch for lightweight variable
1107 (magic_store): added Ville's patch for lightweight variable
1102 persistence, after a request on the user list by Matt Wilkie
1108 persistence, after a request on the user list by Matt Wilkie
1103 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1109 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1104 details.
1110 details.
1105
1111
1106 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1112 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1107 changed the default logfile name from 'ipython.log' to
1113 changed the default logfile name from 'ipython.log' to
1108 'ipython_log.py'. These logs are real python files, and now that
1114 'ipython_log.py'. These logs are real python files, and now that
1109 we have much better multiline support, people are more likely to
1115 we have much better multiline support, people are more likely to
1110 want to use them as such. Might as well name them correctly.
1116 want to use them as such. Might as well name them correctly.
1111
1117
1112 * IPython/Magic.py: substantial cleanup. While we can't stop
1118 * IPython/Magic.py: substantial cleanup. While we can't stop
1113 using magics as mixins, due to the existing customizations 'out
1119 using magics as mixins, due to the existing customizations 'out
1114 there' which rely on the mixin naming conventions, at least I
1120 there' which rely on the mixin naming conventions, at least I
1115 cleaned out all cross-class name usage. So once we are OK with
1121 cleaned out all cross-class name usage. So once we are OK with
1116 breaking compatibility, the two systems can be separated.
1122 breaking compatibility, the two systems can be separated.
1117
1123
1118 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1124 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1119 anymore, and the class is a fair bit less hideous as well. New
1125 anymore, and the class is a fair bit less hideous as well. New
1120 features were also introduced: timestamping of input, and logging
1126 features were also introduced: timestamping of input, and logging
1121 of output results. These are user-visible with the -t and -o
1127 of output results. These are user-visible with the -t and -o
1122 options to %logstart. Closes
1128 options to %logstart. Closes
1123 http://www.scipy.net/roundup/ipython/issue11 and a request by
1129 http://www.scipy.net/roundup/ipython/issue11 and a request by
1124 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1130 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1125
1131
1126 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1132 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1127
1133
1128 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1134 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1129 better handle backslashes in paths. See the thread 'More Windows
1135 better handle backslashes in paths. See the thread 'More Windows
1130 questions part 2 - \/ characters revisited' on the iypthon user
1136 questions part 2 - \/ characters revisited' on the iypthon user
1131 list:
1137 list:
1132 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1138 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1133
1139
1134 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1140 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1135
1141
1136 (InteractiveShell.__init__): change threaded shells to not use the
1142 (InteractiveShell.__init__): change threaded shells to not use the
1137 ipython crash handler. This was causing more problems than not,
1143 ipython crash handler. This was causing more problems than not,
1138 as exceptions in the main thread (GUI code, typically) would
1144 as exceptions in the main thread (GUI code, typically) would
1139 always show up as a 'crash', when they really weren't.
1145 always show up as a 'crash', when they really weren't.
1140
1146
1141 The colors and exception mode commands (%colors/%xmode) have been
1147 The colors and exception mode commands (%colors/%xmode) have been
1142 synchronized to also take this into account, so users can get
1148 synchronized to also take this into account, so users can get
1143 verbose exceptions for their threaded code as well. I also added
1149 verbose exceptions for their threaded code as well. I also added
1144 support for activating pdb inside this exception handler as well,
1150 support for activating pdb inside this exception handler as well,
1145 so now GUI authors can use IPython's enhanced pdb at runtime.
1151 so now GUI authors can use IPython's enhanced pdb at runtime.
1146
1152
1147 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1153 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1148 true by default, and add it to the shipped ipythonrc file. Since
1154 true by default, and add it to the shipped ipythonrc file. Since
1149 this asks the user before proceeding, I think it's OK to make it
1155 this asks the user before proceeding, I think it's OK to make it
1150 true by default.
1156 true by default.
1151
1157
1152 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1158 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1153 of the previous special-casing of input in the eval loop. I think
1159 of the previous special-casing of input in the eval loop. I think
1154 this is cleaner, as they really are commands and shouldn't have
1160 this is cleaner, as they really are commands and shouldn't have
1155 a special role in the middle of the core code.
1161 a special role in the middle of the core code.
1156
1162
1157 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1163 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1158
1164
1159 * IPython/iplib.py (edit_syntax_error): added support for
1165 * IPython/iplib.py (edit_syntax_error): added support for
1160 automatically reopening the editor if the file had a syntax error
1166 automatically reopening the editor if the file had a syntax error
1161 in it. Thanks to scottt who provided the patch at:
1167 in it. Thanks to scottt who provided the patch at:
1162 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1168 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1163 version committed).
1169 version committed).
1164
1170
1165 * IPython/iplib.py (handle_normal): add suport for multi-line
1171 * IPython/iplib.py (handle_normal): add suport for multi-line
1166 input with emtpy lines. This fixes
1172 input with emtpy lines. This fixes
1167 http://www.scipy.net/roundup/ipython/issue43 and a similar
1173 http://www.scipy.net/roundup/ipython/issue43 and a similar
1168 discussion on the user list.
1174 discussion on the user list.
1169
1175
1170 WARNING: a behavior change is necessarily introduced to support
1176 WARNING: a behavior change is necessarily introduced to support
1171 blank lines: now a single blank line with whitespace does NOT
1177 blank lines: now a single blank line with whitespace does NOT
1172 break the input loop, which means that when autoindent is on, by
1178 break the input loop, which means that when autoindent is on, by
1173 default hitting return on the next (indented) line does NOT exit.
1179 default hitting return on the next (indented) line does NOT exit.
1174
1180
1175 Instead, to exit a multiline input you can either have:
1181 Instead, to exit a multiline input you can either have:
1176
1182
1177 - TWO whitespace lines (just hit return again), or
1183 - TWO whitespace lines (just hit return again), or
1178 - a single whitespace line of a different length than provided
1184 - a single whitespace line of a different length than provided
1179 by the autoindent (add or remove a space).
1185 by the autoindent (add or remove a space).
1180
1186
1181 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1187 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1182 module to better organize all readline-related functionality.
1188 module to better organize all readline-related functionality.
1183 I've deleted FlexCompleter and put all completion clases here.
1189 I've deleted FlexCompleter and put all completion clases here.
1184
1190
1185 * IPython/iplib.py (raw_input): improve indentation management.
1191 * IPython/iplib.py (raw_input): improve indentation management.
1186 It is now possible to paste indented code with autoindent on, and
1192 It is now possible to paste indented code with autoindent on, and
1187 the code is interpreted correctly (though it still looks bad on
1193 the code is interpreted correctly (though it still looks bad on
1188 screen, due to the line-oriented nature of ipython).
1194 screen, due to the line-oriented nature of ipython).
1189 (MagicCompleter.complete): change behavior so that a TAB key on an
1195 (MagicCompleter.complete): change behavior so that a TAB key on an
1190 otherwise empty line actually inserts a tab, instead of completing
1196 otherwise empty line actually inserts a tab, instead of completing
1191 on the entire global namespace. This makes it easier to use the
1197 on the entire global namespace. This makes it easier to use the
1192 TAB key for indentation. After a request by Hans Meine
1198 TAB key for indentation. After a request by Hans Meine
1193 <hans_meine-AT-gmx.net>
1199 <hans_meine-AT-gmx.net>
1194 (_prefilter): add support so that typing plain 'exit' or 'quit'
1200 (_prefilter): add support so that typing plain 'exit' or 'quit'
1195 does a sensible thing. Originally I tried to deviate as little as
1201 does a sensible thing. Originally I tried to deviate as little as
1196 possible from the default python behavior, but even that one may
1202 possible from the default python behavior, but even that one may
1197 change in this direction (thread on python-dev to that effect).
1203 change in this direction (thread on python-dev to that effect).
1198 Regardless, ipython should do the right thing even if CPython's
1204 Regardless, ipython should do the right thing even if CPython's
1199 '>>>' prompt doesn't.
1205 '>>>' prompt doesn't.
1200 (InteractiveShell): removed subclassing code.InteractiveConsole
1206 (InteractiveShell): removed subclassing code.InteractiveConsole
1201 class. By now we'd overridden just about all of its methods: I've
1207 class. By now we'd overridden just about all of its methods: I've
1202 copied the remaining two over, and now ipython is a standalone
1208 copied the remaining two over, and now ipython is a standalone
1203 class. This will provide a clearer picture for the chainsaw
1209 class. This will provide a clearer picture for the chainsaw
1204 branch refactoring.
1210 branch refactoring.
1205
1211
1206 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1212 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1207
1213
1208 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1214 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1209 failures for objects which break when dir() is called on them.
1215 failures for objects which break when dir() is called on them.
1210
1216
1211 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1217 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1212 distinct local and global namespaces in the completer API. This
1218 distinct local and global namespaces in the completer API. This
1213 change allows us to properly handle completion with distinct
1219 change allows us to properly handle completion with distinct
1214 scopes, including in embedded instances (this had never really
1220 scopes, including in embedded instances (this had never really
1215 worked correctly).
1221 worked correctly).
1216
1222
1217 Note: this introduces a change in the constructor for
1223 Note: this introduces a change in the constructor for
1218 MagicCompleter, as a new global_namespace parameter is now the
1224 MagicCompleter, as a new global_namespace parameter is now the
1219 second argument (the others were bumped one position).
1225 second argument (the others were bumped one position).
1220
1226
1221 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1227 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1222
1228
1223 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1229 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1224 embedded instances (which can be done now thanks to Vivian's
1230 embedded instances (which can be done now thanks to Vivian's
1225 frame-handling fixes for pdb).
1231 frame-handling fixes for pdb).
1226 (InteractiveShell.__init__): Fix namespace handling problem in
1232 (InteractiveShell.__init__): Fix namespace handling problem in
1227 embedded instances. We were overwriting __main__ unconditionally,
1233 embedded instances. We were overwriting __main__ unconditionally,
1228 and this should only be done for 'full' (non-embedded) IPython;
1234 and this should only be done for 'full' (non-embedded) IPython;
1229 embedded instances must respect the caller's __main__. Thanks to
1235 embedded instances must respect the caller's __main__. Thanks to
1230 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1236 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1231
1237
1232 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1238 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1233
1239
1234 * setup.py: added download_url to setup(). This registers the
1240 * setup.py: added download_url to setup(). This registers the
1235 download address at PyPI, which is not only useful to humans
1241 download address at PyPI, which is not only useful to humans
1236 browsing the site, but is also picked up by setuptools (the Eggs
1242 browsing the site, but is also picked up by setuptools (the Eggs
1237 machinery). Thanks to Ville and R. Kern for the info/discussion
1243 machinery). Thanks to Ville and R. Kern for the info/discussion
1238 on this.
1244 on this.
1239
1245
1240 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1246 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1241
1247
1242 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1248 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1243 This brings a lot of nice functionality to the pdb mode, which now
1249 This brings a lot of nice functionality to the pdb mode, which now
1244 has tab-completion, syntax highlighting, and better stack handling
1250 has tab-completion, syntax highlighting, and better stack handling
1245 than before. Many thanks to Vivian De Smedt
1251 than before. Many thanks to Vivian De Smedt
1246 <vivian-AT-vdesmedt.com> for the original patches.
1252 <vivian-AT-vdesmedt.com> for the original patches.
1247
1253
1248 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1254 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1249
1255
1250 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1256 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1251 sequence to consistently accept the banner argument. The
1257 sequence to consistently accept the banner argument. The
1252 inconsistency was tripping SAGE, thanks to Gary Zablackis
1258 inconsistency was tripping SAGE, thanks to Gary Zablackis
1253 <gzabl-AT-yahoo.com> for the report.
1259 <gzabl-AT-yahoo.com> for the report.
1254
1260
1255 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1261 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1256
1262
1257 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1263 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1258 Fix bug where a naked 'alias' call in the ipythonrc file would
1264 Fix bug where a naked 'alias' call in the ipythonrc file would
1259 cause a crash. Bug reported by Jorgen Stenarson.
1265 cause a crash. Bug reported by Jorgen Stenarson.
1260
1266
1261 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1267 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1262
1268
1263 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1269 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1264 startup time.
1270 startup time.
1265
1271
1266 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1272 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1267 instances had introduced a bug with globals in normal code. Now
1273 instances had introduced a bug with globals in normal code. Now
1268 it's working in all cases.
1274 it's working in all cases.
1269
1275
1270 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1276 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1271 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1277 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1272 has been introduced to set the default case sensitivity of the
1278 has been introduced to set the default case sensitivity of the
1273 searches. Users can still select either mode at runtime on a
1279 searches. Users can still select either mode at runtime on a
1274 per-search basis.
1280 per-search basis.
1275
1281
1276 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1282 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1277
1283
1278 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1284 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1279 attributes in wildcard searches for subclasses. Modified version
1285 attributes in wildcard searches for subclasses. Modified version
1280 of a patch by Jorgen.
1286 of a patch by Jorgen.
1281
1287
1282 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1288 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1283
1289
1284 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1290 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1285 embedded instances. I added a user_global_ns attribute to the
1291 embedded instances. I added a user_global_ns attribute to the
1286 InteractiveShell class to handle this.
1292 InteractiveShell class to handle this.
1287
1293
1288 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1294 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1289
1295
1290 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1296 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1291 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1297 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1292 (reported under win32, but may happen also in other platforms).
1298 (reported under win32, but may happen also in other platforms).
1293 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1299 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1294
1300
1295 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1301 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1296
1302
1297 * IPython/Magic.py (magic_psearch): new support for wildcard
1303 * IPython/Magic.py (magic_psearch): new support for wildcard
1298 patterns. Now, typing ?a*b will list all names which begin with a
1304 patterns. Now, typing ?a*b will list all names which begin with a
1299 and end in b, for example. The %psearch magic has full
1305 and end in b, for example. The %psearch magic has full
1300 docstrings. Many thanks to JΓΆrgen Stenarson
1306 docstrings. Many thanks to JΓΆrgen Stenarson
1301 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1307 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1302 implementing this functionality.
1308 implementing this functionality.
1303
1309
1304 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1310 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1305
1311
1306 * Manual: fixed long-standing annoyance of double-dashes (as in
1312 * Manual: fixed long-standing annoyance of double-dashes (as in
1307 --prefix=~, for example) being stripped in the HTML version. This
1313 --prefix=~, for example) being stripped in the HTML version. This
1308 is a latex2html bug, but a workaround was provided. Many thanks
1314 is a latex2html bug, but a workaround was provided. Many thanks
1309 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1315 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1310 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1316 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1311 rolling. This seemingly small issue had tripped a number of users
1317 rolling. This seemingly small issue had tripped a number of users
1312 when first installing, so I'm glad to see it gone.
1318 when first installing, so I'm glad to see it gone.
1313
1319
1314 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1320 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1315
1321
1316 * IPython/Extensions/numeric_formats.py: fix missing import,
1322 * IPython/Extensions/numeric_formats.py: fix missing import,
1317 reported by Stephen Walton.
1323 reported by Stephen Walton.
1318
1324
1319 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1325 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1320
1326
1321 * IPython/demo.py: finish demo module, fully documented now.
1327 * IPython/demo.py: finish demo module, fully documented now.
1322
1328
1323 * IPython/genutils.py (file_read): simple little utility to read a
1329 * IPython/genutils.py (file_read): simple little utility to read a
1324 file and ensure it's closed afterwards.
1330 file and ensure it's closed afterwards.
1325
1331
1326 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1332 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1327
1333
1328 * IPython/demo.py (Demo.__init__): added support for individually
1334 * IPython/demo.py (Demo.__init__): added support for individually
1329 tagging blocks for automatic execution.
1335 tagging blocks for automatic execution.
1330
1336
1331 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1337 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1332 syntax-highlighted python sources, requested by John.
1338 syntax-highlighted python sources, requested by John.
1333
1339
1334 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1340 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1335
1341
1336 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1342 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1337 finishing.
1343 finishing.
1338
1344
1339 * IPython/genutils.py (shlex_split): moved from Magic to here,
1345 * IPython/genutils.py (shlex_split): moved from Magic to here,
1340 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1346 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1341
1347
1342 * IPython/demo.py (Demo.__init__): added support for silent
1348 * IPython/demo.py (Demo.__init__): added support for silent
1343 blocks, improved marks as regexps, docstrings written.
1349 blocks, improved marks as regexps, docstrings written.
1344 (Demo.__init__): better docstring, added support for sys.argv.
1350 (Demo.__init__): better docstring, added support for sys.argv.
1345
1351
1346 * IPython/genutils.py (marquee): little utility used by the demo
1352 * IPython/genutils.py (marquee): little utility used by the demo
1347 code, handy in general.
1353 code, handy in general.
1348
1354
1349 * IPython/demo.py (Demo.__init__): new class for interactive
1355 * IPython/demo.py (Demo.__init__): new class for interactive
1350 demos. Not documented yet, I just wrote it in a hurry for
1356 demos. Not documented yet, I just wrote it in a hurry for
1351 scipy'05. Will docstring later.
1357 scipy'05. Will docstring later.
1352
1358
1353 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1359 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1354
1360
1355 * IPython/Shell.py (sigint_handler): Drastic simplification which
1361 * IPython/Shell.py (sigint_handler): Drastic simplification which
1356 also seems to make Ctrl-C work correctly across threads! This is
1362 also seems to make Ctrl-C work correctly across threads! This is
1357 so simple, that I can't beleive I'd missed it before. Needs more
1363 so simple, that I can't beleive I'd missed it before. Needs more
1358 testing, though.
1364 testing, though.
1359 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1365 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1360 like this before...
1366 like this before...
1361
1367
1362 * IPython/genutils.py (get_home_dir): add protection against
1368 * IPython/genutils.py (get_home_dir): add protection against
1363 non-dirs in win32 registry.
1369 non-dirs in win32 registry.
1364
1370
1365 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1371 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1366 bug where dict was mutated while iterating (pysh crash).
1372 bug where dict was mutated while iterating (pysh crash).
1367
1373
1368 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1374 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1369
1375
1370 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1376 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1371 spurious newlines added by this routine. After a report by
1377 spurious newlines added by this routine. After a report by
1372 F. Mantegazza.
1378 F. Mantegazza.
1373
1379
1374 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1380 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1375
1381
1376 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1382 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1377 calls. These were a leftover from the GTK 1.x days, and can cause
1383 calls. These were a leftover from the GTK 1.x days, and can cause
1378 problems in certain cases (after a report by John Hunter).
1384 problems in certain cases (after a report by John Hunter).
1379
1385
1380 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1386 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1381 os.getcwd() fails at init time. Thanks to patch from David Remahl
1387 os.getcwd() fails at init time. Thanks to patch from David Remahl
1382 <chmod007-AT-mac.com>.
1388 <chmod007-AT-mac.com>.
1383 (InteractiveShell.__init__): prevent certain special magics from
1389 (InteractiveShell.__init__): prevent certain special magics from
1384 being shadowed by aliases. Closes
1390 being shadowed by aliases. Closes
1385 http://www.scipy.net/roundup/ipython/issue41.
1391 http://www.scipy.net/roundup/ipython/issue41.
1386
1392
1387 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1393 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1388
1394
1389 * IPython/iplib.py (InteractiveShell.complete): Added new
1395 * IPython/iplib.py (InteractiveShell.complete): Added new
1390 top-level completion method to expose the completion mechanism
1396 top-level completion method to expose the completion mechanism
1391 beyond readline-based environments.
1397 beyond readline-based environments.
1392
1398
1393 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1399 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1394
1400
1395 * tools/ipsvnc (svnversion): fix svnversion capture.
1401 * tools/ipsvnc (svnversion): fix svnversion capture.
1396
1402
1397 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1403 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1398 attribute to self, which was missing. Before, it was set by a
1404 attribute to self, which was missing. Before, it was set by a
1399 routine which in certain cases wasn't being called, so the
1405 routine which in certain cases wasn't being called, so the
1400 instance could end up missing the attribute. This caused a crash.
1406 instance could end up missing the attribute. This caused a crash.
1401 Closes http://www.scipy.net/roundup/ipython/issue40.
1407 Closes http://www.scipy.net/roundup/ipython/issue40.
1402
1408
1403 2005-08-16 Fernando Perez <fperez@colorado.edu>
1409 2005-08-16 Fernando Perez <fperez@colorado.edu>
1404
1410
1405 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1411 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1406 contains non-string attribute. Closes
1412 contains non-string attribute. Closes
1407 http://www.scipy.net/roundup/ipython/issue38.
1413 http://www.scipy.net/roundup/ipython/issue38.
1408
1414
1409 2005-08-14 Fernando Perez <fperez@colorado.edu>
1415 2005-08-14 Fernando Perez <fperez@colorado.edu>
1410
1416
1411 * tools/ipsvnc: Minor improvements, to add changeset info.
1417 * tools/ipsvnc: Minor improvements, to add changeset info.
1412
1418
1413 2005-08-12 Fernando Perez <fperez@colorado.edu>
1419 2005-08-12 Fernando Perez <fperez@colorado.edu>
1414
1420
1415 * IPython/iplib.py (runsource): remove self.code_to_run_src
1421 * IPython/iplib.py (runsource): remove self.code_to_run_src
1416 attribute. I realized this is nothing more than
1422 attribute. I realized this is nothing more than
1417 '\n'.join(self.buffer), and having the same data in two different
1423 '\n'.join(self.buffer), and having the same data in two different
1418 places is just asking for synchronization bugs. This may impact
1424 places is just asking for synchronization bugs. This may impact
1419 people who have custom exception handlers, so I need to warn
1425 people who have custom exception handlers, so I need to warn
1420 ipython-dev about it (F. Mantegazza may use them).
1426 ipython-dev about it (F. Mantegazza may use them).
1421
1427
1422 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1428 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1423
1429
1424 * IPython/genutils.py: fix 2.2 compatibility (generators)
1430 * IPython/genutils.py: fix 2.2 compatibility (generators)
1425
1431
1426 2005-07-18 Fernando Perez <fperez@colorado.edu>
1432 2005-07-18 Fernando Perez <fperez@colorado.edu>
1427
1433
1428 * IPython/genutils.py (get_home_dir): fix to help users with
1434 * IPython/genutils.py (get_home_dir): fix to help users with
1429 invalid $HOME under win32.
1435 invalid $HOME under win32.
1430
1436
1431 2005-07-17 Fernando Perez <fperez@colorado.edu>
1437 2005-07-17 Fernando Perez <fperez@colorado.edu>
1432
1438
1433 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1439 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1434 some old hacks and clean up a bit other routines; code should be
1440 some old hacks and clean up a bit other routines; code should be
1435 simpler and a bit faster.
1441 simpler and a bit faster.
1436
1442
1437 * IPython/iplib.py (interact): removed some last-resort attempts
1443 * IPython/iplib.py (interact): removed some last-resort attempts
1438 to survive broken stdout/stderr. That code was only making it
1444 to survive broken stdout/stderr. That code was only making it
1439 harder to abstract out the i/o (necessary for gui integration),
1445 harder to abstract out the i/o (necessary for gui integration),
1440 and the crashes it could prevent were extremely rare in practice
1446 and the crashes it could prevent were extremely rare in practice
1441 (besides being fully user-induced in a pretty violent manner).
1447 (besides being fully user-induced in a pretty violent manner).
1442
1448
1443 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1449 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1444 Nothing major yet, but the code is simpler to read; this should
1450 Nothing major yet, but the code is simpler to read; this should
1445 make it easier to do more serious modifications in the future.
1451 make it easier to do more serious modifications in the future.
1446
1452
1447 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1453 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1448 which broke in .15 (thanks to a report by Ville).
1454 which broke in .15 (thanks to a report by Ville).
1449
1455
1450 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1456 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1451 be quite correct, I know next to nothing about unicode). This
1457 be quite correct, I know next to nothing about unicode). This
1452 will allow unicode strings to be used in prompts, amongst other
1458 will allow unicode strings to be used in prompts, amongst other
1453 cases. It also will prevent ipython from crashing when unicode
1459 cases. It also will prevent ipython from crashing when unicode
1454 shows up unexpectedly in many places. If ascii encoding fails, we
1460 shows up unexpectedly in many places. If ascii encoding fails, we
1455 assume utf_8. Currently the encoding is not a user-visible
1461 assume utf_8. Currently the encoding is not a user-visible
1456 setting, though it could be made so if there is demand for it.
1462 setting, though it could be made so if there is demand for it.
1457
1463
1458 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1464 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1459
1465
1460 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1466 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1461
1467
1462 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1468 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1463
1469
1464 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1470 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1465 code can work transparently for 2.2/2.3.
1471 code can work transparently for 2.2/2.3.
1466
1472
1467 2005-07-16 Fernando Perez <fperez@colorado.edu>
1473 2005-07-16 Fernando Perez <fperez@colorado.edu>
1468
1474
1469 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1475 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1470 out of the color scheme table used for coloring exception
1476 out of the color scheme table used for coloring exception
1471 tracebacks. This allows user code to add new schemes at runtime.
1477 tracebacks. This allows user code to add new schemes at runtime.
1472 This is a minimally modified version of the patch at
1478 This is a minimally modified version of the patch at
1473 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1479 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1474 for the contribution.
1480 for the contribution.
1475
1481
1476 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1482 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1477 slightly modified version of the patch in
1483 slightly modified version of the patch in
1478 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1484 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1479 to remove the previous try/except solution (which was costlier).
1485 to remove the previous try/except solution (which was costlier).
1480 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1486 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1481
1487
1482 2005-06-08 Fernando Perez <fperez@colorado.edu>
1488 2005-06-08 Fernando Perez <fperez@colorado.edu>
1483
1489
1484 * IPython/iplib.py (write/write_err): Add methods to abstract all
1490 * IPython/iplib.py (write/write_err): Add methods to abstract all
1485 I/O a bit more.
1491 I/O a bit more.
1486
1492
1487 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1493 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1488 warning, reported by Aric Hagberg, fix by JD Hunter.
1494 warning, reported by Aric Hagberg, fix by JD Hunter.
1489
1495
1490 2005-06-02 *** Released version 0.6.15
1496 2005-06-02 *** Released version 0.6.15
1491
1497
1492 2005-06-01 Fernando Perez <fperez@colorado.edu>
1498 2005-06-01 Fernando Perez <fperez@colorado.edu>
1493
1499
1494 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1500 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1495 tab-completion of filenames within open-quoted strings. Note that
1501 tab-completion of filenames within open-quoted strings. Note that
1496 this requires that in ~/.ipython/ipythonrc, users change the
1502 this requires that in ~/.ipython/ipythonrc, users change the
1497 readline delimiters configuration to read:
1503 readline delimiters configuration to read:
1498
1504
1499 readline_remove_delims -/~
1505 readline_remove_delims -/~
1500
1506
1501
1507
1502 2005-05-31 *** Released version 0.6.14
1508 2005-05-31 *** Released version 0.6.14
1503
1509
1504 2005-05-29 Fernando Perez <fperez@colorado.edu>
1510 2005-05-29 Fernando Perez <fperez@colorado.edu>
1505
1511
1506 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1512 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1507 with files not on the filesystem. Reported by Eliyahu Sandler
1513 with files not on the filesystem. Reported by Eliyahu Sandler
1508 <eli@gondolin.net>
1514 <eli@gondolin.net>
1509
1515
1510 2005-05-22 Fernando Perez <fperez@colorado.edu>
1516 2005-05-22 Fernando Perez <fperez@colorado.edu>
1511
1517
1512 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1518 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1513 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1519 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1514
1520
1515 2005-05-19 Fernando Perez <fperez@colorado.edu>
1521 2005-05-19 Fernando Perez <fperez@colorado.edu>
1516
1522
1517 * IPython/iplib.py (safe_execfile): close a file which could be
1523 * IPython/iplib.py (safe_execfile): close a file which could be
1518 left open (causing problems in win32, which locks open files).
1524 left open (causing problems in win32, which locks open files).
1519 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1525 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1520
1526
1521 2005-05-18 Fernando Perez <fperez@colorado.edu>
1527 2005-05-18 Fernando Perez <fperez@colorado.edu>
1522
1528
1523 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1529 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1524 keyword arguments correctly to safe_execfile().
1530 keyword arguments correctly to safe_execfile().
1525
1531
1526 2005-05-13 Fernando Perez <fperez@colorado.edu>
1532 2005-05-13 Fernando Perez <fperez@colorado.edu>
1527
1533
1528 * ipython.1: Added info about Qt to manpage, and threads warning
1534 * ipython.1: Added info about Qt to manpage, and threads warning
1529 to usage page (invoked with --help).
1535 to usage page (invoked with --help).
1530
1536
1531 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1537 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1532 new matcher (it goes at the end of the priority list) to do
1538 new matcher (it goes at the end of the priority list) to do
1533 tab-completion on named function arguments. Submitted by George
1539 tab-completion on named function arguments. Submitted by George
1534 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1540 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1535 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1541 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1536 for more details.
1542 for more details.
1537
1543
1538 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1544 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1539 SystemExit exceptions in the script being run. Thanks to a report
1545 SystemExit exceptions in the script being run. Thanks to a report
1540 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1546 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1541 producing very annoying behavior when running unit tests.
1547 producing very annoying behavior when running unit tests.
1542
1548
1543 2005-05-12 Fernando Perez <fperez@colorado.edu>
1549 2005-05-12 Fernando Perez <fperez@colorado.edu>
1544
1550
1545 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1551 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1546 which I'd broken (again) due to a changed regexp. In the process,
1552 which I'd broken (again) due to a changed regexp. In the process,
1547 added ';' as an escape to auto-quote the whole line without
1553 added ';' as an escape to auto-quote the whole line without
1548 splitting its arguments. Thanks to a report by Jerry McRae
1554 splitting its arguments. Thanks to a report by Jerry McRae
1549 <qrs0xyc02-AT-sneakemail.com>.
1555 <qrs0xyc02-AT-sneakemail.com>.
1550
1556
1551 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1557 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1552 possible crashes caused by a TokenError. Reported by Ed Schofield
1558 possible crashes caused by a TokenError. Reported by Ed Schofield
1553 <schofield-AT-ftw.at>.
1559 <schofield-AT-ftw.at>.
1554
1560
1555 2005-05-06 Fernando Perez <fperez@colorado.edu>
1561 2005-05-06 Fernando Perez <fperez@colorado.edu>
1556
1562
1557 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1563 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1558
1564
1559 2005-04-29 Fernando Perez <fperez@colorado.edu>
1565 2005-04-29 Fernando Perez <fperez@colorado.edu>
1560
1566
1561 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1567 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1562 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1568 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1563 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1569 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1564 which provides support for Qt interactive usage (similar to the
1570 which provides support for Qt interactive usage (similar to the
1565 existing one for WX and GTK). This had been often requested.
1571 existing one for WX and GTK). This had been often requested.
1566
1572
1567 2005-04-14 *** Released version 0.6.13
1573 2005-04-14 *** Released version 0.6.13
1568
1574
1569 2005-04-08 Fernando Perez <fperez@colorado.edu>
1575 2005-04-08 Fernando Perez <fperez@colorado.edu>
1570
1576
1571 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1577 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1572 from _ofind, which gets called on almost every input line. Now,
1578 from _ofind, which gets called on almost every input line. Now,
1573 we only try to get docstrings if they are actually going to be
1579 we only try to get docstrings if they are actually going to be
1574 used (the overhead of fetching unnecessary docstrings can be
1580 used (the overhead of fetching unnecessary docstrings can be
1575 noticeable for certain objects, such as Pyro proxies).
1581 noticeable for certain objects, such as Pyro proxies).
1576
1582
1577 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1583 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1578 for completers. For some reason I had been passing them the state
1584 for completers. For some reason I had been passing them the state
1579 variable, which completers never actually need, and was in
1585 variable, which completers never actually need, and was in
1580 conflict with the rlcompleter API. Custom completers ONLY need to
1586 conflict with the rlcompleter API. Custom completers ONLY need to
1581 take the text parameter.
1587 take the text parameter.
1582
1588
1583 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1589 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1584 work correctly in pysh. I've also moved all the logic which used
1590 work correctly in pysh. I've also moved all the logic which used
1585 to be in pysh.py here, which will prevent problems with future
1591 to be in pysh.py here, which will prevent problems with future
1586 upgrades. However, this time I must warn users to update their
1592 upgrades. However, this time I must warn users to update their
1587 pysh profile to include the line
1593 pysh profile to include the line
1588
1594
1589 import_all IPython.Extensions.InterpreterExec
1595 import_all IPython.Extensions.InterpreterExec
1590
1596
1591 because otherwise things won't work for them. They MUST also
1597 because otherwise things won't work for them. They MUST also
1592 delete pysh.py and the line
1598 delete pysh.py and the line
1593
1599
1594 execfile pysh.py
1600 execfile pysh.py
1595
1601
1596 from their ipythonrc-pysh.
1602 from their ipythonrc-pysh.
1597
1603
1598 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1604 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1599 robust in the face of objects whose dir() returns non-strings
1605 robust in the face of objects whose dir() returns non-strings
1600 (which it shouldn't, but some broken libs like ITK do). Thanks to
1606 (which it shouldn't, but some broken libs like ITK do). Thanks to
1601 a patch by John Hunter (implemented differently, though). Also
1607 a patch by John Hunter (implemented differently, though). Also
1602 minor improvements by using .extend instead of + on lists.
1608 minor improvements by using .extend instead of + on lists.
1603
1609
1604 * pysh.py:
1610 * pysh.py:
1605
1611
1606 2005-04-06 Fernando Perez <fperez@colorado.edu>
1612 2005-04-06 Fernando Perez <fperez@colorado.edu>
1607
1613
1608 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1614 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1609 by default, so that all users benefit from it. Those who don't
1615 by default, so that all users benefit from it. Those who don't
1610 want it can still turn it off.
1616 want it can still turn it off.
1611
1617
1612 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1618 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1613 config file, I'd forgotten about this, so users were getting it
1619 config file, I'd forgotten about this, so users were getting it
1614 off by default.
1620 off by default.
1615
1621
1616 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1622 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1617 consistency. Now magics can be called in multiline statements,
1623 consistency. Now magics can be called in multiline statements,
1618 and python variables can be expanded in magic calls via $var.
1624 and python variables can be expanded in magic calls via $var.
1619 This makes the magic system behave just like aliases or !system
1625 This makes the magic system behave just like aliases or !system
1620 calls.
1626 calls.
1621
1627
1622 2005-03-28 Fernando Perez <fperez@colorado.edu>
1628 2005-03-28 Fernando Perez <fperez@colorado.edu>
1623
1629
1624 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1630 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1625 expensive string additions for building command. Add support for
1631 expensive string additions for building command. Add support for
1626 trailing ';' when autocall is used.
1632 trailing ';' when autocall is used.
1627
1633
1628 2005-03-26 Fernando Perez <fperez@colorado.edu>
1634 2005-03-26 Fernando Perez <fperez@colorado.edu>
1629
1635
1630 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1636 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1631 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1637 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1632 ipython.el robust against prompts with any number of spaces
1638 ipython.el robust against prompts with any number of spaces
1633 (including 0) after the ':' character.
1639 (including 0) after the ':' character.
1634
1640
1635 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1641 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1636 continuation prompt, which misled users to think the line was
1642 continuation prompt, which misled users to think the line was
1637 already indented. Closes debian Bug#300847, reported to me by
1643 already indented. Closes debian Bug#300847, reported to me by
1638 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1644 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1639
1645
1640 2005-03-23 Fernando Perez <fperez@colorado.edu>
1646 2005-03-23 Fernando Perez <fperez@colorado.edu>
1641
1647
1642 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1648 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1643 properly aligned if they have embedded newlines.
1649 properly aligned if they have embedded newlines.
1644
1650
1645 * IPython/iplib.py (runlines): Add a public method to expose
1651 * IPython/iplib.py (runlines): Add a public method to expose
1646 IPython's code execution machinery, so that users can run strings
1652 IPython's code execution machinery, so that users can run strings
1647 as if they had been typed at the prompt interactively.
1653 as if they had been typed at the prompt interactively.
1648 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1654 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1649 methods which can call the system shell, but with python variable
1655 methods which can call the system shell, but with python variable
1650 expansion. The three such methods are: __IPYTHON__.system,
1656 expansion. The three such methods are: __IPYTHON__.system,
1651 .getoutput and .getoutputerror. These need to be documented in a
1657 .getoutput and .getoutputerror. These need to be documented in a
1652 'public API' section (to be written) of the manual.
1658 'public API' section (to be written) of the manual.
1653
1659
1654 2005-03-20 Fernando Perez <fperez@colorado.edu>
1660 2005-03-20 Fernando Perez <fperez@colorado.edu>
1655
1661
1656 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1662 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1657 for custom exception handling. This is quite powerful, and it
1663 for custom exception handling. This is quite powerful, and it
1658 allows for user-installable exception handlers which can trap
1664 allows for user-installable exception handlers which can trap
1659 custom exceptions at runtime and treat them separately from
1665 custom exceptions at runtime and treat them separately from
1660 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1666 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1661 Mantegazza <mantegazza-AT-ill.fr>.
1667 Mantegazza <mantegazza-AT-ill.fr>.
1662 (InteractiveShell.set_custom_completer): public API function to
1668 (InteractiveShell.set_custom_completer): public API function to
1663 add new completers at runtime.
1669 add new completers at runtime.
1664
1670
1665 2005-03-19 Fernando Perez <fperez@colorado.edu>
1671 2005-03-19 Fernando Perez <fperez@colorado.edu>
1666
1672
1667 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1673 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1668 allow objects which provide their docstrings via non-standard
1674 allow objects which provide their docstrings via non-standard
1669 mechanisms (like Pyro proxies) to still be inspected by ipython's
1675 mechanisms (like Pyro proxies) to still be inspected by ipython's
1670 ? system.
1676 ? system.
1671
1677
1672 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1678 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1673 automatic capture system. I tried quite hard to make it work
1679 automatic capture system. I tried quite hard to make it work
1674 reliably, and simply failed. I tried many combinations with the
1680 reliably, and simply failed. I tried many combinations with the
1675 subprocess module, but eventually nothing worked in all needed
1681 subprocess module, but eventually nothing worked in all needed
1676 cases (not blocking stdin for the child, duplicating stdout
1682 cases (not blocking stdin for the child, duplicating stdout
1677 without blocking, etc). The new %sc/%sx still do capture to these
1683 without blocking, etc). The new %sc/%sx still do capture to these
1678 magical list/string objects which make shell use much more
1684 magical list/string objects which make shell use much more
1679 conveninent, so not all is lost.
1685 conveninent, so not all is lost.
1680
1686
1681 XXX - FIX MANUAL for the change above!
1687 XXX - FIX MANUAL for the change above!
1682
1688
1683 (runsource): I copied code.py's runsource() into ipython to modify
1689 (runsource): I copied code.py's runsource() into ipython to modify
1684 it a bit. Now the code object and source to be executed are
1690 it a bit. Now the code object and source to be executed are
1685 stored in ipython. This makes this info accessible to third-party
1691 stored in ipython. This makes this info accessible to third-party
1686 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1692 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1687 Mantegazza <mantegazza-AT-ill.fr>.
1693 Mantegazza <mantegazza-AT-ill.fr>.
1688
1694
1689 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1695 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1690 history-search via readline (like C-p/C-n). I'd wanted this for a
1696 history-search via readline (like C-p/C-n). I'd wanted this for a
1691 long time, but only recently found out how to do it. For users
1697 long time, but only recently found out how to do it. For users
1692 who already have their ipythonrc files made and want this, just
1698 who already have their ipythonrc files made and want this, just
1693 add:
1699 add:
1694
1700
1695 readline_parse_and_bind "\e[A": history-search-backward
1701 readline_parse_and_bind "\e[A": history-search-backward
1696 readline_parse_and_bind "\e[B": history-search-forward
1702 readline_parse_and_bind "\e[B": history-search-forward
1697
1703
1698 2005-03-18 Fernando Perez <fperez@colorado.edu>
1704 2005-03-18 Fernando Perez <fperez@colorado.edu>
1699
1705
1700 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1706 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1701 LSString and SList classes which allow transparent conversions
1707 LSString and SList classes which allow transparent conversions
1702 between list mode and whitespace-separated string.
1708 between list mode and whitespace-separated string.
1703 (magic_r): Fix recursion problem in %r.
1709 (magic_r): Fix recursion problem in %r.
1704
1710
1705 * IPython/genutils.py (LSString): New class to be used for
1711 * IPython/genutils.py (LSString): New class to be used for
1706 automatic storage of the results of all alias/system calls in _o
1712 automatic storage of the results of all alias/system calls in _o
1707 and _e (stdout/err). These provide a .l/.list attribute which
1713 and _e (stdout/err). These provide a .l/.list attribute which
1708 does automatic splitting on newlines. This means that for most
1714 does automatic splitting on newlines. This means that for most
1709 uses, you'll never need to do capturing of output with %sc/%sx
1715 uses, you'll never need to do capturing of output with %sc/%sx
1710 anymore, since ipython keeps this always done for you. Note that
1716 anymore, since ipython keeps this always done for you. Note that
1711 only the LAST results are stored, the _o/e variables are
1717 only the LAST results are stored, the _o/e variables are
1712 overwritten on each call. If you need to save their contents
1718 overwritten on each call. If you need to save their contents
1713 further, simply bind them to any other name.
1719 further, simply bind them to any other name.
1714
1720
1715 2005-03-17 Fernando Perez <fperez@colorado.edu>
1721 2005-03-17 Fernando Perez <fperez@colorado.edu>
1716
1722
1717 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1723 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1718 prompt namespace handling.
1724 prompt namespace handling.
1719
1725
1720 2005-03-16 Fernando Perez <fperez@colorado.edu>
1726 2005-03-16 Fernando Perez <fperez@colorado.edu>
1721
1727
1722 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1728 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1723 classic prompts to be '>>> ' (final space was missing, and it
1729 classic prompts to be '>>> ' (final space was missing, and it
1724 trips the emacs python mode).
1730 trips the emacs python mode).
1725 (BasePrompt.__str__): Added safe support for dynamic prompt
1731 (BasePrompt.__str__): Added safe support for dynamic prompt
1726 strings. Now you can set your prompt string to be '$x', and the
1732 strings. Now you can set your prompt string to be '$x', and the
1727 value of x will be printed from your interactive namespace. The
1733 value of x will be printed from your interactive namespace. The
1728 interpolation syntax includes the full Itpl support, so
1734 interpolation syntax includes the full Itpl support, so
1729 ${foo()+x+bar()} is a valid prompt string now, and the function
1735 ${foo()+x+bar()} is a valid prompt string now, and the function
1730 calls will be made at runtime.
1736 calls will be made at runtime.
1731
1737
1732 2005-03-15 Fernando Perez <fperez@colorado.edu>
1738 2005-03-15 Fernando Perez <fperez@colorado.edu>
1733
1739
1734 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1740 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1735 avoid name clashes in pylab. %hist still works, it just forwards
1741 avoid name clashes in pylab. %hist still works, it just forwards
1736 the call to %history.
1742 the call to %history.
1737
1743
1738 2005-03-02 *** Released version 0.6.12
1744 2005-03-02 *** Released version 0.6.12
1739
1745
1740 2005-03-02 Fernando Perez <fperez@colorado.edu>
1746 2005-03-02 Fernando Perez <fperez@colorado.edu>
1741
1747
1742 * IPython/iplib.py (handle_magic): log magic calls properly as
1748 * IPython/iplib.py (handle_magic): log magic calls properly as
1743 ipmagic() function calls.
1749 ipmagic() function calls.
1744
1750
1745 * IPython/Magic.py (magic_time): Improved %time to support
1751 * IPython/Magic.py (magic_time): Improved %time to support
1746 statements and provide wall-clock as well as CPU time.
1752 statements and provide wall-clock as well as CPU time.
1747
1753
1748 2005-02-27 Fernando Perez <fperez@colorado.edu>
1754 2005-02-27 Fernando Perez <fperez@colorado.edu>
1749
1755
1750 * IPython/hooks.py: New hooks module, to expose user-modifiable
1756 * IPython/hooks.py: New hooks module, to expose user-modifiable
1751 IPython functionality in a clean manner. For now only the editor
1757 IPython functionality in a clean manner. For now only the editor
1752 hook is actually written, and other thigns which I intend to turn
1758 hook is actually written, and other thigns which I intend to turn
1753 into proper hooks aren't yet there. The display and prefilter
1759 into proper hooks aren't yet there. The display and prefilter
1754 stuff, for example, should be hooks. But at least now the
1760 stuff, for example, should be hooks. But at least now the
1755 framework is in place, and the rest can be moved here with more
1761 framework is in place, and the rest can be moved here with more
1756 time later. IPython had had a .hooks variable for a long time for
1762 time later. IPython had had a .hooks variable for a long time for
1757 this purpose, but I'd never actually used it for anything.
1763 this purpose, but I'd never actually used it for anything.
1758
1764
1759 2005-02-26 Fernando Perez <fperez@colorado.edu>
1765 2005-02-26 Fernando Perez <fperez@colorado.edu>
1760
1766
1761 * IPython/ipmaker.py (make_IPython): make the default ipython
1767 * IPython/ipmaker.py (make_IPython): make the default ipython
1762 directory be called _ipython under win32, to follow more the
1768 directory be called _ipython under win32, to follow more the
1763 naming peculiarities of that platform (where buggy software like
1769 naming peculiarities of that platform (where buggy software like
1764 Visual Sourcesafe breaks with .named directories). Reported by
1770 Visual Sourcesafe breaks with .named directories). Reported by
1765 Ville Vainio.
1771 Ville Vainio.
1766
1772
1767 2005-02-23 Fernando Perez <fperez@colorado.edu>
1773 2005-02-23 Fernando Perez <fperez@colorado.edu>
1768
1774
1769 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1775 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1770 auto_aliases for win32 which were causing problems. Users can
1776 auto_aliases for win32 which were causing problems. Users can
1771 define the ones they personally like.
1777 define the ones they personally like.
1772
1778
1773 2005-02-21 Fernando Perez <fperez@colorado.edu>
1779 2005-02-21 Fernando Perez <fperez@colorado.edu>
1774
1780
1775 * IPython/Magic.py (magic_time): new magic to time execution of
1781 * IPython/Magic.py (magic_time): new magic to time execution of
1776 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1782 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1777
1783
1778 2005-02-19 Fernando Perez <fperez@colorado.edu>
1784 2005-02-19 Fernando Perez <fperez@colorado.edu>
1779
1785
1780 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1786 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1781 into keys (for prompts, for example).
1787 into keys (for prompts, for example).
1782
1788
1783 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1789 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1784 prompts in case users want them. This introduces a small behavior
1790 prompts in case users want them. This introduces a small behavior
1785 change: ipython does not automatically add a space to all prompts
1791 change: ipython does not automatically add a space to all prompts
1786 anymore. To get the old prompts with a space, users should add it
1792 anymore. To get the old prompts with a space, users should add it
1787 manually to their ipythonrc file, so for example prompt_in1 should
1793 manually to their ipythonrc file, so for example prompt_in1 should
1788 now read 'In [\#]: ' instead of 'In [\#]:'.
1794 now read 'In [\#]: ' instead of 'In [\#]:'.
1789 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1795 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1790 file) to control left-padding of secondary prompts.
1796 file) to control left-padding of secondary prompts.
1791
1797
1792 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1798 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1793 the profiler can't be imported. Fix for Debian, which removed
1799 the profiler can't be imported. Fix for Debian, which removed
1794 profile.py because of License issues. I applied a slightly
1800 profile.py because of License issues. I applied a slightly
1795 modified version of the original Debian patch at
1801 modified version of the original Debian patch at
1796 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1802 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1797
1803
1798 2005-02-17 Fernando Perez <fperez@colorado.edu>
1804 2005-02-17 Fernando Perez <fperez@colorado.edu>
1799
1805
1800 * IPython/genutils.py (native_line_ends): Fix bug which would
1806 * IPython/genutils.py (native_line_ends): Fix bug which would
1801 cause improper line-ends under win32 b/c I was not opening files
1807 cause improper line-ends under win32 b/c I was not opening files
1802 in binary mode. Bug report and fix thanks to Ville.
1808 in binary mode. Bug report and fix thanks to Ville.
1803
1809
1804 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1810 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1805 trying to catch spurious foo[1] autocalls. My fix actually broke
1811 trying to catch spurious foo[1] autocalls. My fix actually broke
1806 ',/' autoquote/call with explicit escape (bad regexp).
1812 ',/' autoquote/call with explicit escape (bad regexp).
1807
1813
1808 2005-02-15 *** Released version 0.6.11
1814 2005-02-15 *** Released version 0.6.11
1809
1815
1810 2005-02-14 Fernando Perez <fperez@colorado.edu>
1816 2005-02-14 Fernando Perez <fperez@colorado.edu>
1811
1817
1812 * IPython/background_jobs.py: New background job management
1818 * IPython/background_jobs.py: New background job management
1813 subsystem. This is implemented via a new set of classes, and
1819 subsystem. This is implemented via a new set of classes, and
1814 IPython now provides a builtin 'jobs' object for background job
1820 IPython now provides a builtin 'jobs' object for background job
1815 execution. A convenience %bg magic serves as a lightweight
1821 execution. A convenience %bg magic serves as a lightweight
1816 frontend for starting the more common type of calls. This was
1822 frontend for starting the more common type of calls. This was
1817 inspired by discussions with B. Granger and the BackgroundCommand
1823 inspired by discussions with B. Granger and the BackgroundCommand
1818 class described in the book Python Scripting for Computational
1824 class described in the book Python Scripting for Computational
1819 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1825 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1820 (although ultimately no code from this text was used, as IPython's
1826 (although ultimately no code from this text was used, as IPython's
1821 system is a separate implementation).
1827 system is a separate implementation).
1822
1828
1823 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1829 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1824 to control the completion of single/double underscore names
1830 to control the completion of single/double underscore names
1825 separately. As documented in the example ipytonrc file, the
1831 separately. As documented in the example ipytonrc file, the
1826 readline_omit__names variable can now be set to 2, to omit even
1832 readline_omit__names variable can now be set to 2, to omit even
1827 single underscore names. Thanks to a patch by Brian Wong
1833 single underscore names. Thanks to a patch by Brian Wong
1828 <BrianWong-AT-AirgoNetworks.Com>.
1834 <BrianWong-AT-AirgoNetworks.Com>.
1829 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1835 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1830 be autocalled as foo([1]) if foo were callable. A problem for
1836 be autocalled as foo([1]) if foo were callable. A problem for
1831 things which are both callable and implement __getitem__.
1837 things which are both callable and implement __getitem__.
1832 (init_readline): Fix autoindentation for win32. Thanks to a patch
1838 (init_readline): Fix autoindentation for win32. Thanks to a patch
1833 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1839 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1834
1840
1835 2005-02-12 Fernando Perez <fperez@colorado.edu>
1841 2005-02-12 Fernando Perez <fperez@colorado.edu>
1836
1842
1837 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1843 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1838 which I had written long ago to sort out user error messages which
1844 which I had written long ago to sort out user error messages which
1839 may occur during startup. This seemed like a good idea initially,
1845 may occur during startup. This seemed like a good idea initially,
1840 but it has proven a disaster in retrospect. I don't want to
1846 but it has proven a disaster in retrospect. I don't want to
1841 change much code for now, so my fix is to set the internal 'debug'
1847 change much code for now, so my fix is to set the internal 'debug'
1842 flag to true everywhere, whose only job was precisely to control
1848 flag to true everywhere, whose only job was precisely to control
1843 this subsystem. This closes issue 28 (as well as avoiding all
1849 this subsystem. This closes issue 28 (as well as avoiding all
1844 sorts of strange hangups which occur from time to time).
1850 sorts of strange hangups which occur from time to time).
1845
1851
1846 2005-02-07 Fernando Perez <fperez@colorado.edu>
1852 2005-02-07 Fernando Perez <fperez@colorado.edu>
1847
1853
1848 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1854 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1849 previous call produced a syntax error.
1855 previous call produced a syntax error.
1850
1856
1851 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1857 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1852 classes without constructor.
1858 classes without constructor.
1853
1859
1854 2005-02-06 Fernando Perez <fperez@colorado.edu>
1860 2005-02-06 Fernando Perez <fperez@colorado.edu>
1855
1861
1856 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1862 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1857 completions with the results of each matcher, so we return results
1863 completions with the results of each matcher, so we return results
1858 to the user from all namespaces. This breaks with ipython
1864 to the user from all namespaces. This breaks with ipython
1859 tradition, but I think it's a nicer behavior. Now you get all
1865 tradition, but I think it's a nicer behavior. Now you get all
1860 possible completions listed, from all possible namespaces (python,
1866 possible completions listed, from all possible namespaces (python,
1861 filesystem, magics...) After a request by John Hunter
1867 filesystem, magics...) After a request by John Hunter
1862 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1868 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1863
1869
1864 2005-02-05 Fernando Perez <fperez@colorado.edu>
1870 2005-02-05 Fernando Perez <fperez@colorado.edu>
1865
1871
1866 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1872 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1867 the call had quote characters in it (the quotes were stripped).
1873 the call had quote characters in it (the quotes were stripped).
1868
1874
1869 2005-01-31 Fernando Perez <fperez@colorado.edu>
1875 2005-01-31 Fernando Perez <fperez@colorado.edu>
1870
1876
1871 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1877 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1872 Itpl.itpl() to make the code more robust against psyco
1878 Itpl.itpl() to make the code more robust against psyco
1873 optimizations.
1879 optimizations.
1874
1880
1875 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1881 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1876 of causing an exception. Quicker, cleaner.
1882 of causing an exception. Quicker, cleaner.
1877
1883
1878 2005-01-28 Fernando Perez <fperez@colorado.edu>
1884 2005-01-28 Fernando Perez <fperez@colorado.edu>
1879
1885
1880 * scripts/ipython_win_post_install.py (install): hardcode
1886 * scripts/ipython_win_post_install.py (install): hardcode
1881 sys.prefix+'python.exe' as the executable path. It turns out that
1887 sys.prefix+'python.exe' as the executable path. It turns out that
1882 during the post-installation run, sys.executable resolves to the
1888 during the post-installation run, sys.executable resolves to the
1883 name of the binary installer! I should report this as a distutils
1889 name of the binary installer! I should report this as a distutils
1884 bug, I think. I updated the .10 release with this tiny fix, to
1890 bug, I think. I updated the .10 release with this tiny fix, to
1885 avoid annoying the lists further.
1891 avoid annoying the lists further.
1886
1892
1887 2005-01-27 *** Released version 0.6.10
1893 2005-01-27 *** Released version 0.6.10
1888
1894
1889 2005-01-27 Fernando Perez <fperez@colorado.edu>
1895 2005-01-27 Fernando Perez <fperez@colorado.edu>
1890
1896
1891 * IPython/numutils.py (norm): Added 'inf' as optional name for
1897 * IPython/numutils.py (norm): Added 'inf' as optional name for
1892 L-infinity norm, included references to mathworld.com for vector
1898 L-infinity norm, included references to mathworld.com for vector
1893 norm definitions.
1899 norm definitions.
1894 (amin/amax): added amin/amax for array min/max. Similar to what
1900 (amin/amax): added amin/amax for array min/max. Similar to what
1895 pylab ships with after the recent reorganization of names.
1901 pylab ships with after the recent reorganization of names.
1896 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1902 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1897
1903
1898 * ipython.el: committed Alex's recent fixes and improvements.
1904 * ipython.el: committed Alex's recent fixes and improvements.
1899 Tested with python-mode from CVS, and it looks excellent. Since
1905 Tested with python-mode from CVS, and it looks excellent. Since
1900 python-mode hasn't released anything in a while, I'm temporarily
1906 python-mode hasn't released anything in a while, I'm temporarily
1901 putting a copy of today's CVS (v 4.70) of python-mode in:
1907 putting a copy of today's CVS (v 4.70) of python-mode in:
1902 http://ipython.scipy.org/tmp/python-mode.el
1908 http://ipython.scipy.org/tmp/python-mode.el
1903
1909
1904 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1910 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1905 sys.executable for the executable name, instead of assuming it's
1911 sys.executable for the executable name, instead of assuming it's
1906 called 'python.exe' (the post-installer would have produced broken
1912 called 'python.exe' (the post-installer would have produced broken
1907 setups on systems with a differently named python binary).
1913 setups on systems with a differently named python binary).
1908
1914
1909 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1915 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1910 references to os.linesep, to make the code more
1916 references to os.linesep, to make the code more
1911 platform-independent. This is also part of the win32 coloring
1917 platform-independent. This is also part of the win32 coloring
1912 fixes.
1918 fixes.
1913
1919
1914 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1920 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1915 lines, which actually cause coloring bugs because the length of
1921 lines, which actually cause coloring bugs because the length of
1916 the line is very difficult to correctly compute with embedded
1922 the line is very difficult to correctly compute with embedded
1917 escapes. This was the source of all the coloring problems under
1923 escapes. This was the source of all the coloring problems under
1918 Win32. I think that _finally_, Win32 users have a properly
1924 Win32. I think that _finally_, Win32 users have a properly
1919 working ipython in all respects. This would never have happened
1925 working ipython in all respects. This would never have happened
1920 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1926 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1921
1927
1922 2005-01-26 *** Released version 0.6.9
1928 2005-01-26 *** Released version 0.6.9
1923
1929
1924 2005-01-25 Fernando Perez <fperez@colorado.edu>
1930 2005-01-25 Fernando Perez <fperez@colorado.edu>
1925
1931
1926 * setup.py: finally, we have a true Windows installer, thanks to
1932 * setup.py: finally, we have a true Windows installer, thanks to
1927 the excellent work of Viktor Ransmayr
1933 the excellent work of Viktor Ransmayr
1928 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1934 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1929 Windows users. The setup routine is quite a bit cleaner thanks to
1935 Windows users. The setup routine is quite a bit cleaner thanks to
1930 this, and the post-install script uses the proper functions to
1936 this, and the post-install script uses the proper functions to
1931 allow a clean de-installation using the standard Windows Control
1937 allow a clean de-installation using the standard Windows Control
1932 Panel.
1938 Panel.
1933
1939
1934 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1940 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1935 environment variable under all OSes (including win32) if
1941 environment variable under all OSes (including win32) if
1936 available. This will give consistency to win32 users who have set
1942 available. This will give consistency to win32 users who have set
1937 this variable for any reason. If os.environ['HOME'] fails, the
1943 this variable for any reason. If os.environ['HOME'] fails, the
1938 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1944 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1939
1945
1940 2005-01-24 Fernando Perez <fperez@colorado.edu>
1946 2005-01-24 Fernando Perez <fperez@colorado.edu>
1941
1947
1942 * IPython/numutils.py (empty_like): add empty_like(), similar to
1948 * IPython/numutils.py (empty_like): add empty_like(), similar to
1943 zeros_like() but taking advantage of the new empty() Numeric routine.
1949 zeros_like() but taking advantage of the new empty() Numeric routine.
1944
1950
1945 2005-01-23 *** Released version 0.6.8
1951 2005-01-23 *** Released version 0.6.8
1946
1952
1947 2005-01-22 Fernando Perez <fperez@colorado.edu>
1953 2005-01-22 Fernando Perez <fperez@colorado.edu>
1948
1954
1949 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1955 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1950 automatic show() calls. After discussing things with JDH, it
1956 automatic show() calls. After discussing things with JDH, it
1951 turns out there are too many corner cases where this can go wrong.
1957 turns out there are too many corner cases where this can go wrong.
1952 It's best not to try to be 'too smart', and simply have ipython
1958 It's best not to try to be 'too smart', and simply have ipython
1953 reproduce as much as possible the default behavior of a normal
1959 reproduce as much as possible the default behavior of a normal
1954 python shell.
1960 python shell.
1955
1961
1956 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1962 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1957 line-splitting regexp and _prefilter() to avoid calling getattr()
1963 line-splitting regexp and _prefilter() to avoid calling getattr()
1958 on assignments. This closes
1964 on assignments. This closes
1959 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1965 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1960 readline uses getattr(), so a simple <TAB> keypress is still
1966 readline uses getattr(), so a simple <TAB> keypress is still
1961 enough to trigger getattr() calls on an object.
1967 enough to trigger getattr() calls on an object.
1962
1968
1963 2005-01-21 Fernando Perez <fperez@colorado.edu>
1969 2005-01-21 Fernando Perez <fperez@colorado.edu>
1964
1970
1965 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1971 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1966 docstring under pylab so it doesn't mask the original.
1972 docstring under pylab so it doesn't mask the original.
1967
1973
1968 2005-01-21 *** Released version 0.6.7
1974 2005-01-21 *** Released version 0.6.7
1969
1975
1970 2005-01-21 Fernando Perez <fperez@colorado.edu>
1976 2005-01-21 Fernando Perez <fperez@colorado.edu>
1971
1977
1972 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1978 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1973 signal handling for win32 users in multithreaded mode.
1979 signal handling for win32 users in multithreaded mode.
1974
1980
1975 2005-01-17 Fernando Perez <fperez@colorado.edu>
1981 2005-01-17 Fernando Perez <fperez@colorado.edu>
1976
1982
1977 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1983 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1978 instances with no __init__. After a crash report by Norbert Nemec
1984 instances with no __init__. After a crash report by Norbert Nemec
1979 <Norbert-AT-nemec-online.de>.
1985 <Norbert-AT-nemec-online.de>.
1980
1986
1981 2005-01-14 Fernando Perez <fperez@colorado.edu>
1987 2005-01-14 Fernando Perez <fperez@colorado.edu>
1982
1988
1983 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1989 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1984 names for verbose exceptions, when multiple dotted names and the
1990 names for verbose exceptions, when multiple dotted names and the
1985 'parent' object were present on the same line.
1991 'parent' object were present on the same line.
1986
1992
1987 2005-01-11 Fernando Perez <fperez@colorado.edu>
1993 2005-01-11 Fernando Perez <fperez@colorado.edu>
1988
1994
1989 * IPython/genutils.py (flag_calls): new utility to trap and flag
1995 * IPython/genutils.py (flag_calls): new utility to trap and flag
1990 calls in functions. I need it to clean up matplotlib support.
1996 calls in functions. I need it to clean up matplotlib support.
1991 Also removed some deprecated code in genutils.
1997 Also removed some deprecated code in genutils.
1992
1998
1993 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1999 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1994 that matplotlib scripts called with %run, which don't call show()
2000 that matplotlib scripts called with %run, which don't call show()
1995 themselves, still have their plotting windows open.
2001 themselves, still have their plotting windows open.
1996
2002
1997 2005-01-05 Fernando Perez <fperez@colorado.edu>
2003 2005-01-05 Fernando Perez <fperez@colorado.edu>
1998
2004
1999 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
2005 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
2000 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
2006 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
2001
2007
2002 2004-12-19 Fernando Perez <fperez@colorado.edu>
2008 2004-12-19 Fernando Perez <fperez@colorado.edu>
2003
2009
2004 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
2010 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
2005 parent_runcode, which was an eyesore. The same result can be
2011 parent_runcode, which was an eyesore. The same result can be
2006 obtained with Python's regular superclass mechanisms.
2012 obtained with Python's regular superclass mechanisms.
2007
2013
2008 2004-12-17 Fernando Perez <fperez@colorado.edu>
2014 2004-12-17 Fernando Perez <fperez@colorado.edu>
2009
2015
2010 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
2016 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
2011 reported by Prabhu.
2017 reported by Prabhu.
2012 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
2018 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
2013 sys.stderr) instead of explicitly calling sys.stderr. This helps
2019 sys.stderr) instead of explicitly calling sys.stderr. This helps
2014 maintain our I/O abstractions clean, for future GUI embeddings.
2020 maintain our I/O abstractions clean, for future GUI embeddings.
2015
2021
2016 * IPython/genutils.py (info): added new utility for sys.stderr
2022 * IPython/genutils.py (info): added new utility for sys.stderr
2017 unified info message handling (thin wrapper around warn()).
2023 unified info message handling (thin wrapper around warn()).
2018
2024
2019 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
2025 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
2020 composite (dotted) names on verbose exceptions.
2026 composite (dotted) names on verbose exceptions.
2021 (VerboseTB.nullrepr): harden against another kind of errors which
2027 (VerboseTB.nullrepr): harden against another kind of errors which
2022 Python's inspect module can trigger, and which were crashing
2028 Python's inspect module can trigger, and which were crashing
2023 IPython. Thanks to a report by Marco Lombardi
2029 IPython. Thanks to a report by Marco Lombardi
2024 <mlombard-AT-ma010192.hq.eso.org>.
2030 <mlombard-AT-ma010192.hq.eso.org>.
2025
2031
2026 2004-12-13 *** Released version 0.6.6
2032 2004-12-13 *** Released version 0.6.6
2027
2033
2028 2004-12-12 Fernando Perez <fperez@colorado.edu>
2034 2004-12-12 Fernando Perez <fperez@colorado.edu>
2029
2035
2030 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
2036 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
2031 generated by pygtk upon initialization if it was built without
2037 generated by pygtk upon initialization if it was built without
2032 threads (for matplotlib users). After a crash reported by
2038 threads (for matplotlib users). After a crash reported by
2033 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
2039 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
2034
2040
2035 * IPython/ipmaker.py (make_IPython): fix small bug in the
2041 * IPython/ipmaker.py (make_IPython): fix small bug in the
2036 import_some parameter for multiple imports.
2042 import_some parameter for multiple imports.
2037
2043
2038 * IPython/iplib.py (ipmagic): simplified the interface of
2044 * IPython/iplib.py (ipmagic): simplified the interface of
2039 ipmagic() to take a single string argument, just as it would be
2045 ipmagic() to take a single string argument, just as it would be
2040 typed at the IPython cmd line.
2046 typed at the IPython cmd line.
2041 (ipalias): Added new ipalias() with an interface identical to
2047 (ipalias): Added new ipalias() with an interface identical to
2042 ipmagic(). This completes exposing a pure python interface to the
2048 ipmagic(). This completes exposing a pure python interface to the
2043 alias and magic system, which can be used in loops or more complex
2049 alias and magic system, which can be used in loops or more complex
2044 code where IPython's automatic line mangling is not active.
2050 code where IPython's automatic line mangling is not active.
2045
2051
2046 * IPython/genutils.py (timing): changed interface of timing to
2052 * IPython/genutils.py (timing): changed interface of timing to
2047 simply run code once, which is the most common case. timings()
2053 simply run code once, which is the most common case. timings()
2048 remains unchanged, for the cases where you want multiple runs.
2054 remains unchanged, for the cases where you want multiple runs.
2049
2055
2050 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
2056 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
2051 bug where Python2.2 crashes with exec'ing code which does not end
2057 bug where Python2.2 crashes with exec'ing code which does not end
2052 in a single newline. Python 2.3 is OK, so I hadn't noticed this
2058 in a single newline. Python 2.3 is OK, so I hadn't noticed this
2053 before.
2059 before.
2054
2060
2055 2004-12-10 Fernando Perez <fperez@colorado.edu>
2061 2004-12-10 Fernando Perez <fperez@colorado.edu>
2056
2062
2057 * IPython/Magic.py (Magic.magic_prun): changed name of option from
2063 * IPython/Magic.py (Magic.magic_prun): changed name of option from
2058 -t to -T, to accomodate the new -t flag in %run (the %run and
2064 -t to -T, to accomodate the new -t flag in %run (the %run and
2059 %prun options are kind of intermixed, and it's not easy to change
2065 %prun options are kind of intermixed, and it's not easy to change
2060 this with the limitations of python's getopt).
2066 this with the limitations of python's getopt).
2061
2067
2062 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
2068 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
2063 the execution of scripts. It's not as fine-tuned as timeit.py,
2069 the execution of scripts. It's not as fine-tuned as timeit.py,
2064 but it works from inside ipython (and under 2.2, which lacks
2070 but it works from inside ipython (and under 2.2, which lacks
2065 timeit.py). Optionally a number of runs > 1 can be given for
2071 timeit.py). Optionally a number of runs > 1 can be given for
2066 timing very short-running code.
2072 timing very short-running code.
2067
2073
2068 * IPython/genutils.py (uniq_stable): new routine which returns a
2074 * IPython/genutils.py (uniq_stable): new routine which returns a
2069 list of unique elements in any iterable, but in stable order of
2075 list of unique elements in any iterable, but in stable order of
2070 appearance. I needed this for the ultraTB fixes, and it's a handy
2076 appearance. I needed this for the ultraTB fixes, and it's a handy
2071 utility.
2077 utility.
2072
2078
2073 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
2079 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
2074 dotted names in Verbose exceptions. This had been broken since
2080 dotted names in Verbose exceptions. This had been broken since
2075 the very start, now x.y will properly be printed in a Verbose
2081 the very start, now x.y will properly be printed in a Verbose
2076 traceback, instead of x being shown and y appearing always as an
2082 traceback, instead of x being shown and y appearing always as an
2077 'undefined global'. Getting this to work was a bit tricky,
2083 'undefined global'. Getting this to work was a bit tricky,
2078 because by default python tokenizers are stateless. Saved by
2084 because by default python tokenizers are stateless. Saved by
2079 python's ability to easily add a bit of state to an arbitrary
2085 python's ability to easily add a bit of state to an arbitrary
2080 function (without needing to build a full-blown callable object).
2086 function (without needing to build a full-blown callable object).
2081
2087
2082 Also big cleanup of this code, which had horrendous runtime
2088 Also big cleanup of this code, which had horrendous runtime
2083 lookups of zillions of attributes for colorization. Moved all
2089 lookups of zillions of attributes for colorization. Moved all
2084 this code into a few templates, which make it cleaner and quicker.
2090 this code into a few templates, which make it cleaner and quicker.
2085
2091
2086 Printout quality was also improved for Verbose exceptions: one
2092 Printout quality was also improved for Verbose exceptions: one
2087 variable per line, and memory addresses are printed (this can be
2093 variable per line, and memory addresses are printed (this can be
2088 quite handy in nasty debugging situations, which is what Verbose
2094 quite handy in nasty debugging situations, which is what Verbose
2089 is for).
2095 is for).
2090
2096
2091 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
2097 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
2092 the command line as scripts to be loaded by embedded instances.
2098 the command line as scripts to be loaded by embedded instances.
2093 Doing so has the potential for an infinite recursion if there are
2099 Doing so has the potential for an infinite recursion if there are
2094 exceptions thrown in the process. This fixes a strange crash
2100 exceptions thrown in the process. This fixes a strange crash
2095 reported by Philippe MULLER <muller-AT-irit.fr>.
2101 reported by Philippe MULLER <muller-AT-irit.fr>.
2096
2102
2097 2004-12-09 Fernando Perez <fperez@colorado.edu>
2103 2004-12-09 Fernando Perez <fperez@colorado.edu>
2098
2104
2099 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2105 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2100 to reflect new names in matplotlib, which now expose the
2106 to reflect new names in matplotlib, which now expose the
2101 matlab-compatible interface via a pylab module instead of the
2107 matlab-compatible interface via a pylab module instead of the
2102 'matlab' name. The new code is backwards compatible, so users of
2108 'matlab' name. The new code is backwards compatible, so users of
2103 all matplotlib versions are OK. Patch by J. Hunter.
2109 all matplotlib versions are OK. Patch by J. Hunter.
2104
2110
2105 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2111 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2106 of __init__ docstrings for instances (class docstrings are already
2112 of __init__ docstrings for instances (class docstrings are already
2107 automatically printed). Instances with customized docstrings
2113 automatically printed). Instances with customized docstrings
2108 (indep. of the class) are also recognized and all 3 separate
2114 (indep. of the class) are also recognized and all 3 separate
2109 docstrings are printed (instance, class, constructor). After some
2115 docstrings are printed (instance, class, constructor). After some
2110 comments/suggestions by J. Hunter.
2116 comments/suggestions by J. Hunter.
2111
2117
2112 2004-12-05 Fernando Perez <fperez@colorado.edu>
2118 2004-12-05 Fernando Perez <fperez@colorado.edu>
2113
2119
2114 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2120 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2115 warnings when tab-completion fails and triggers an exception.
2121 warnings when tab-completion fails and triggers an exception.
2116
2122
2117 2004-12-03 Fernando Perez <fperez@colorado.edu>
2123 2004-12-03 Fernando Perez <fperez@colorado.edu>
2118
2124
2119 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2125 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2120 be triggered when using 'run -p'. An incorrect option flag was
2126 be triggered when using 'run -p'. An incorrect option flag was
2121 being set ('d' instead of 'D').
2127 being set ('d' instead of 'D').
2122 (manpage): fix missing escaped \- sign.
2128 (manpage): fix missing escaped \- sign.
2123
2129
2124 2004-11-30 *** Released version 0.6.5
2130 2004-11-30 *** Released version 0.6.5
2125
2131
2126 2004-11-30 Fernando Perez <fperez@colorado.edu>
2132 2004-11-30 Fernando Perez <fperez@colorado.edu>
2127
2133
2128 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2134 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2129 setting with -d option.
2135 setting with -d option.
2130
2136
2131 * setup.py (docfiles): Fix problem where the doc glob I was using
2137 * setup.py (docfiles): Fix problem where the doc glob I was using
2132 was COMPLETELY BROKEN. It was giving the right files by pure
2138 was COMPLETELY BROKEN. It was giving the right files by pure
2133 accident, but failed once I tried to include ipython.el. Note:
2139 accident, but failed once I tried to include ipython.el. Note:
2134 glob() does NOT allow you to do exclusion on multiple endings!
2140 glob() does NOT allow you to do exclusion on multiple endings!
2135
2141
2136 2004-11-29 Fernando Perez <fperez@colorado.edu>
2142 2004-11-29 Fernando Perez <fperez@colorado.edu>
2137
2143
2138 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2144 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2139 the manpage as the source. Better formatting & consistency.
2145 the manpage as the source. Better formatting & consistency.
2140
2146
2141 * IPython/Magic.py (magic_run): Added new -d option, to run
2147 * IPython/Magic.py (magic_run): Added new -d option, to run
2142 scripts under the control of the python pdb debugger. Note that
2148 scripts under the control of the python pdb debugger. Note that
2143 this required changing the %prun option -d to -D, to avoid a clash
2149 this required changing the %prun option -d to -D, to avoid a clash
2144 (since %run must pass options to %prun, and getopt is too dumb to
2150 (since %run must pass options to %prun, and getopt is too dumb to
2145 handle options with string values with embedded spaces). Thanks
2151 handle options with string values with embedded spaces). Thanks
2146 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2152 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2147 (magic_who_ls): added type matching to %who and %whos, so that one
2153 (magic_who_ls): added type matching to %who and %whos, so that one
2148 can filter their output to only include variables of certain
2154 can filter their output to only include variables of certain
2149 types. Another suggestion by Matthew.
2155 types. Another suggestion by Matthew.
2150 (magic_whos): Added memory summaries in kb and Mb for arrays.
2156 (magic_whos): Added memory summaries in kb and Mb for arrays.
2151 (magic_who): Improve formatting (break lines every 9 vars).
2157 (magic_who): Improve formatting (break lines every 9 vars).
2152
2158
2153 2004-11-28 Fernando Perez <fperez@colorado.edu>
2159 2004-11-28 Fernando Perez <fperez@colorado.edu>
2154
2160
2155 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2161 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2156 cache when empty lines were present.
2162 cache when empty lines were present.
2157
2163
2158 2004-11-24 Fernando Perez <fperez@colorado.edu>
2164 2004-11-24 Fernando Perez <fperez@colorado.edu>
2159
2165
2160 * IPython/usage.py (__doc__): document the re-activated threading
2166 * IPython/usage.py (__doc__): document the re-activated threading
2161 options for WX and GTK.
2167 options for WX and GTK.
2162
2168
2163 2004-11-23 Fernando Perez <fperez@colorado.edu>
2169 2004-11-23 Fernando Perez <fperez@colorado.edu>
2164
2170
2165 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2171 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2166 the -wthread and -gthread options, along with a new -tk one to try
2172 the -wthread and -gthread options, along with a new -tk one to try
2167 and coordinate Tk threading with wx/gtk. The tk support is very
2173 and coordinate Tk threading with wx/gtk. The tk support is very
2168 platform dependent, since it seems to require Tcl and Tk to be
2174 platform dependent, since it seems to require Tcl and Tk to be
2169 built with threads (Fedora1/2 appears NOT to have it, but in
2175 built with threads (Fedora1/2 appears NOT to have it, but in
2170 Prabhu's Debian boxes it works OK). But even with some Tk
2176 Prabhu's Debian boxes it works OK). But even with some Tk
2171 limitations, this is a great improvement.
2177 limitations, this is a great improvement.
2172
2178
2173 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2179 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2174 info in user prompts. Patch by Prabhu.
2180 info in user prompts. Patch by Prabhu.
2175
2181
2176 2004-11-18 Fernando Perez <fperez@colorado.edu>
2182 2004-11-18 Fernando Perez <fperez@colorado.edu>
2177
2183
2178 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2184 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2179 EOFErrors and bail, to avoid infinite loops if a non-terminating
2185 EOFErrors and bail, to avoid infinite loops if a non-terminating
2180 file is fed into ipython. Patch submitted in issue 19 by user,
2186 file is fed into ipython. Patch submitted in issue 19 by user,
2181 many thanks.
2187 many thanks.
2182
2188
2183 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2189 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2184 autoquote/parens in continuation prompts, which can cause lots of
2190 autoquote/parens in continuation prompts, which can cause lots of
2185 problems. Closes roundup issue 20.
2191 problems. Closes roundup issue 20.
2186
2192
2187 2004-11-17 Fernando Perez <fperez@colorado.edu>
2193 2004-11-17 Fernando Perez <fperez@colorado.edu>
2188
2194
2189 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2195 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2190 reported as debian bug #280505. I'm not sure my local changelog
2196 reported as debian bug #280505. I'm not sure my local changelog
2191 entry has the proper debian format (Jack?).
2197 entry has the proper debian format (Jack?).
2192
2198
2193 2004-11-08 *** Released version 0.6.4
2199 2004-11-08 *** Released version 0.6.4
2194
2200
2195 2004-11-08 Fernando Perez <fperez@colorado.edu>
2201 2004-11-08 Fernando Perez <fperez@colorado.edu>
2196
2202
2197 * IPython/iplib.py (init_readline): Fix exit message for Windows
2203 * IPython/iplib.py (init_readline): Fix exit message for Windows
2198 when readline is active. Thanks to a report by Eric Jones
2204 when readline is active. Thanks to a report by Eric Jones
2199 <eric-AT-enthought.com>.
2205 <eric-AT-enthought.com>.
2200
2206
2201 2004-11-07 Fernando Perez <fperez@colorado.edu>
2207 2004-11-07 Fernando Perez <fperez@colorado.edu>
2202
2208
2203 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2209 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2204 sometimes seen by win2k/cygwin users.
2210 sometimes seen by win2k/cygwin users.
2205
2211
2206 2004-11-06 Fernando Perez <fperez@colorado.edu>
2212 2004-11-06 Fernando Perez <fperez@colorado.edu>
2207
2213
2208 * IPython/iplib.py (interact): Change the handling of %Exit from
2214 * IPython/iplib.py (interact): Change the handling of %Exit from
2209 trying to propagate a SystemExit to an internal ipython flag.
2215 trying to propagate a SystemExit to an internal ipython flag.
2210 This is less elegant than using Python's exception mechanism, but
2216 This is less elegant than using Python's exception mechanism, but
2211 I can't get that to work reliably with threads, so under -pylab
2217 I can't get that to work reliably with threads, so under -pylab
2212 %Exit was hanging IPython. Cross-thread exception handling is
2218 %Exit was hanging IPython. Cross-thread exception handling is
2213 really a bitch. Thaks to a bug report by Stephen Walton
2219 really a bitch. Thaks to a bug report by Stephen Walton
2214 <stephen.walton-AT-csun.edu>.
2220 <stephen.walton-AT-csun.edu>.
2215
2221
2216 2004-11-04 Fernando Perez <fperez@colorado.edu>
2222 2004-11-04 Fernando Perez <fperez@colorado.edu>
2217
2223
2218 * IPython/iplib.py (raw_input_original): store a pointer to the
2224 * IPython/iplib.py (raw_input_original): store a pointer to the
2219 true raw_input to harden against code which can modify it
2225 true raw_input to harden against code which can modify it
2220 (wx.py.PyShell does this and would otherwise crash ipython).
2226 (wx.py.PyShell does this and would otherwise crash ipython).
2221 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2227 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2222
2228
2223 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2229 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2224 Ctrl-C problem, which does not mess up the input line.
2230 Ctrl-C problem, which does not mess up the input line.
2225
2231
2226 2004-11-03 Fernando Perez <fperez@colorado.edu>
2232 2004-11-03 Fernando Perez <fperez@colorado.edu>
2227
2233
2228 * IPython/Release.py: Changed licensing to BSD, in all files.
2234 * IPython/Release.py: Changed licensing to BSD, in all files.
2229 (name): lowercase name for tarball/RPM release.
2235 (name): lowercase name for tarball/RPM release.
2230
2236
2231 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2237 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2232 use throughout ipython.
2238 use throughout ipython.
2233
2239
2234 * IPython/Magic.py (Magic._ofind): Switch to using the new
2240 * IPython/Magic.py (Magic._ofind): Switch to using the new
2235 OInspect.getdoc() function.
2241 OInspect.getdoc() function.
2236
2242
2237 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2243 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2238 of the line currently being canceled via Ctrl-C. It's extremely
2244 of the line currently being canceled via Ctrl-C. It's extremely
2239 ugly, but I don't know how to do it better (the problem is one of
2245 ugly, but I don't know how to do it better (the problem is one of
2240 handling cross-thread exceptions).
2246 handling cross-thread exceptions).
2241
2247
2242 2004-10-28 Fernando Perez <fperez@colorado.edu>
2248 2004-10-28 Fernando Perez <fperez@colorado.edu>
2243
2249
2244 * IPython/Shell.py (signal_handler): add signal handlers to trap
2250 * IPython/Shell.py (signal_handler): add signal handlers to trap
2245 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2251 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2246 report by Francesc Alted.
2252 report by Francesc Alted.
2247
2253
2248 2004-10-21 Fernando Perez <fperez@colorado.edu>
2254 2004-10-21 Fernando Perez <fperez@colorado.edu>
2249
2255
2250 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2256 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2251 to % for pysh syntax extensions.
2257 to % for pysh syntax extensions.
2252
2258
2253 2004-10-09 Fernando Perez <fperez@colorado.edu>
2259 2004-10-09 Fernando Perez <fperez@colorado.edu>
2254
2260
2255 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2261 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2256 arrays to print a more useful summary, without calling str(arr).
2262 arrays to print a more useful summary, without calling str(arr).
2257 This avoids the problem of extremely lengthy computations which
2263 This avoids the problem of extremely lengthy computations which
2258 occur if arr is large, and appear to the user as a system lockup
2264 occur if arr is large, and appear to the user as a system lockup
2259 with 100% cpu activity. After a suggestion by Kristian Sandberg
2265 with 100% cpu activity. After a suggestion by Kristian Sandberg
2260 <Kristian.Sandberg@colorado.edu>.
2266 <Kristian.Sandberg@colorado.edu>.
2261 (Magic.__init__): fix bug in global magic escapes not being
2267 (Magic.__init__): fix bug in global magic escapes not being
2262 correctly set.
2268 correctly set.
2263
2269
2264 2004-10-08 Fernando Perez <fperez@colorado.edu>
2270 2004-10-08 Fernando Perez <fperez@colorado.edu>
2265
2271
2266 * IPython/Magic.py (__license__): change to absolute imports of
2272 * IPython/Magic.py (__license__): change to absolute imports of
2267 ipython's own internal packages, to start adapting to the absolute
2273 ipython's own internal packages, to start adapting to the absolute
2268 import requirement of PEP-328.
2274 import requirement of PEP-328.
2269
2275
2270 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2276 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2271 files, and standardize author/license marks through the Release
2277 files, and standardize author/license marks through the Release
2272 module instead of having per/file stuff (except for files with
2278 module instead of having per/file stuff (except for files with
2273 particular licenses, like the MIT/PSF-licensed codes).
2279 particular licenses, like the MIT/PSF-licensed codes).
2274
2280
2275 * IPython/Debugger.py: remove dead code for python 2.1
2281 * IPython/Debugger.py: remove dead code for python 2.1
2276
2282
2277 2004-10-04 Fernando Perez <fperez@colorado.edu>
2283 2004-10-04 Fernando Perez <fperez@colorado.edu>
2278
2284
2279 * IPython/iplib.py (ipmagic): New function for accessing magics
2285 * IPython/iplib.py (ipmagic): New function for accessing magics
2280 via a normal python function call.
2286 via a normal python function call.
2281
2287
2282 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2288 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2283 from '@' to '%', to accomodate the new @decorator syntax of python
2289 from '@' to '%', to accomodate the new @decorator syntax of python
2284 2.4.
2290 2.4.
2285
2291
2286 2004-09-29 Fernando Perez <fperez@colorado.edu>
2292 2004-09-29 Fernando Perez <fperez@colorado.edu>
2287
2293
2288 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2294 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2289 matplotlib.use to prevent running scripts which try to switch
2295 matplotlib.use to prevent running scripts which try to switch
2290 interactive backends from within ipython. This will just crash
2296 interactive backends from within ipython. This will just crash
2291 the python interpreter, so we can't allow it (but a detailed error
2297 the python interpreter, so we can't allow it (but a detailed error
2292 is given to the user).
2298 is given to the user).
2293
2299
2294 2004-09-28 Fernando Perez <fperez@colorado.edu>
2300 2004-09-28 Fernando Perez <fperez@colorado.edu>
2295
2301
2296 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2302 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2297 matplotlib-related fixes so that using @run with non-matplotlib
2303 matplotlib-related fixes so that using @run with non-matplotlib
2298 scripts doesn't pop up spurious plot windows. This requires
2304 scripts doesn't pop up spurious plot windows. This requires
2299 matplotlib >= 0.63, where I had to make some changes as well.
2305 matplotlib >= 0.63, where I had to make some changes as well.
2300
2306
2301 * IPython/ipmaker.py (make_IPython): update version requirement to
2307 * IPython/ipmaker.py (make_IPython): update version requirement to
2302 python 2.2.
2308 python 2.2.
2303
2309
2304 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2310 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2305 banner arg for embedded customization.
2311 banner arg for embedded customization.
2306
2312
2307 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2313 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2308 explicit uses of __IP as the IPython's instance name. Now things
2314 explicit uses of __IP as the IPython's instance name. Now things
2309 are properly handled via the shell.name value. The actual code
2315 are properly handled via the shell.name value. The actual code
2310 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2316 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2311 is much better than before. I'll clean things completely when the
2317 is much better than before. I'll clean things completely when the
2312 magic stuff gets a real overhaul.
2318 magic stuff gets a real overhaul.
2313
2319
2314 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2320 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2315 minor changes to debian dir.
2321 minor changes to debian dir.
2316
2322
2317 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2323 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2318 pointer to the shell itself in the interactive namespace even when
2324 pointer to the shell itself in the interactive namespace even when
2319 a user-supplied dict is provided. This is needed for embedding
2325 a user-supplied dict is provided. This is needed for embedding
2320 purposes (found by tests with Michel Sanner).
2326 purposes (found by tests with Michel Sanner).
2321
2327
2322 2004-09-27 Fernando Perez <fperez@colorado.edu>
2328 2004-09-27 Fernando Perez <fperez@colorado.edu>
2323
2329
2324 * IPython/UserConfig/ipythonrc: remove []{} from
2330 * IPython/UserConfig/ipythonrc: remove []{} from
2325 readline_remove_delims, so that things like [modname.<TAB> do
2331 readline_remove_delims, so that things like [modname.<TAB> do
2326 proper completion. This disables [].TAB, but that's a less common
2332 proper completion. This disables [].TAB, but that's a less common
2327 case than module names in list comprehensions, for example.
2333 case than module names in list comprehensions, for example.
2328 Thanks to a report by Andrea Riciputi.
2334 Thanks to a report by Andrea Riciputi.
2329
2335
2330 2004-09-09 Fernando Perez <fperez@colorado.edu>
2336 2004-09-09 Fernando Perez <fperez@colorado.edu>
2331
2337
2332 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2338 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2333 blocking problems in win32 and osx. Fix by John.
2339 blocking problems in win32 and osx. Fix by John.
2334
2340
2335 2004-09-08 Fernando Perez <fperez@colorado.edu>
2341 2004-09-08 Fernando Perez <fperez@colorado.edu>
2336
2342
2337 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2343 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2338 for Win32 and OSX. Fix by John Hunter.
2344 for Win32 and OSX. Fix by John Hunter.
2339
2345
2340 2004-08-30 *** Released version 0.6.3
2346 2004-08-30 *** Released version 0.6.3
2341
2347
2342 2004-08-30 Fernando Perez <fperez@colorado.edu>
2348 2004-08-30 Fernando Perez <fperez@colorado.edu>
2343
2349
2344 * setup.py (isfile): Add manpages to list of dependent files to be
2350 * setup.py (isfile): Add manpages to list of dependent files to be
2345 updated.
2351 updated.
2346
2352
2347 2004-08-27 Fernando Perez <fperez@colorado.edu>
2353 2004-08-27 Fernando Perez <fperez@colorado.edu>
2348
2354
2349 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2355 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2350 for now. They don't really work with standalone WX/GTK code
2356 for now. They don't really work with standalone WX/GTK code
2351 (though matplotlib IS working fine with both of those backends).
2357 (though matplotlib IS working fine with both of those backends).
2352 This will neeed much more testing. I disabled most things with
2358 This will neeed much more testing. I disabled most things with
2353 comments, so turning it back on later should be pretty easy.
2359 comments, so turning it back on later should be pretty easy.
2354
2360
2355 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2361 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2356 autocalling of expressions like r'foo', by modifying the line
2362 autocalling of expressions like r'foo', by modifying the line
2357 split regexp. Closes
2363 split regexp. Closes
2358 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2364 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2359 Riley <ipythonbugs-AT-sabi.net>.
2365 Riley <ipythonbugs-AT-sabi.net>.
2360 (InteractiveShell.mainloop): honor --nobanner with banner
2366 (InteractiveShell.mainloop): honor --nobanner with banner
2361 extensions.
2367 extensions.
2362
2368
2363 * IPython/Shell.py: Significant refactoring of all classes, so
2369 * IPython/Shell.py: Significant refactoring of all classes, so
2364 that we can really support ALL matplotlib backends and threading
2370 that we can really support ALL matplotlib backends and threading
2365 models (John spotted a bug with Tk which required this). Now we
2371 models (John spotted a bug with Tk which required this). Now we
2366 should support single-threaded, WX-threads and GTK-threads, both
2372 should support single-threaded, WX-threads and GTK-threads, both
2367 for generic code and for matplotlib.
2373 for generic code and for matplotlib.
2368
2374
2369 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2375 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2370 -pylab, to simplify things for users. Will also remove the pylab
2376 -pylab, to simplify things for users. Will also remove the pylab
2371 profile, since now all of matplotlib configuration is directly
2377 profile, since now all of matplotlib configuration is directly
2372 handled here. This also reduces startup time.
2378 handled here. This also reduces startup time.
2373
2379
2374 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2380 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2375 shell wasn't being correctly called. Also in IPShellWX.
2381 shell wasn't being correctly called. Also in IPShellWX.
2376
2382
2377 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2383 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2378 fine-tune banner.
2384 fine-tune banner.
2379
2385
2380 * IPython/numutils.py (spike): Deprecate these spike functions,
2386 * IPython/numutils.py (spike): Deprecate these spike functions,
2381 delete (long deprecated) gnuplot_exec handler.
2387 delete (long deprecated) gnuplot_exec handler.
2382
2388
2383 2004-08-26 Fernando Perez <fperez@colorado.edu>
2389 2004-08-26 Fernando Perez <fperez@colorado.edu>
2384
2390
2385 * ipython.1: Update for threading options, plus some others which
2391 * ipython.1: Update for threading options, plus some others which
2386 were missing.
2392 were missing.
2387
2393
2388 * IPython/ipmaker.py (__call__): Added -wthread option for
2394 * IPython/ipmaker.py (__call__): Added -wthread option for
2389 wxpython thread handling. Make sure threading options are only
2395 wxpython thread handling. Make sure threading options are only
2390 valid at the command line.
2396 valid at the command line.
2391
2397
2392 * scripts/ipython: moved shell selection into a factory function
2398 * scripts/ipython: moved shell selection into a factory function
2393 in Shell.py, to keep the starter script to a minimum.
2399 in Shell.py, to keep the starter script to a minimum.
2394
2400
2395 2004-08-25 Fernando Perez <fperez@colorado.edu>
2401 2004-08-25 Fernando Perez <fperez@colorado.edu>
2396
2402
2397 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2403 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2398 John. Along with some recent changes he made to matplotlib, the
2404 John. Along with some recent changes he made to matplotlib, the
2399 next versions of both systems should work very well together.
2405 next versions of both systems should work very well together.
2400
2406
2401 2004-08-24 Fernando Perez <fperez@colorado.edu>
2407 2004-08-24 Fernando Perez <fperez@colorado.edu>
2402
2408
2403 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2409 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2404 tried to switch the profiling to using hotshot, but I'm getting
2410 tried to switch the profiling to using hotshot, but I'm getting
2405 strange errors from prof.runctx() there. I may be misreading the
2411 strange errors from prof.runctx() there. I may be misreading the
2406 docs, but it looks weird. For now the profiling code will
2412 docs, but it looks weird. For now the profiling code will
2407 continue to use the standard profiler.
2413 continue to use the standard profiler.
2408
2414
2409 2004-08-23 Fernando Perez <fperez@colorado.edu>
2415 2004-08-23 Fernando Perez <fperez@colorado.edu>
2410
2416
2411 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2417 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2412 threaded shell, by John Hunter. It's not quite ready yet, but
2418 threaded shell, by John Hunter. It's not quite ready yet, but
2413 close.
2419 close.
2414
2420
2415 2004-08-22 Fernando Perez <fperez@colorado.edu>
2421 2004-08-22 Fernando Perez <fperez@colorado.edu>
2416
2422
2417 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2423 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2418 in Magic and ultraTB.
2424 in Magic and ultraTB.
2419
2425
2420 * ipython.1: document threading options in manpage.
2426 * ipython.1: document threading options in manpage.
2421
2427
2422 * scripts/ipython: Changed name of -thread option to -gthread,
2428 * scripts/ipython: Changed name of -thread option to -gthread,
2423 since this is GTK specific. I want to leave the door open for a
2429 since this is GTK specific. I want to leave the door open for a
2424 -wthread option for WX, which will most likely be necessary. This
2430 -wthread option for WX, which will most likely be necessary. This
2425 change affects usage and ipmaker as well.
2431 change affects usage and ipmaker as well.
2426
2432
2427 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2433 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2428 handle the matplotlib shell issues. Code by John Hunter
2434 handle the matplotlib shell issues. Code by John Hunter
2429 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2435 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2430 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2436 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2431 broken (and disabled for end users) for now, but it puts the
2437 broken (and disabled for end users) for now, but it puts the
2432 infrastructure in place.
2438 infrastructure in place.
2433
2439
2434 2004-08-21 Fernando Perez <fperez@colorado.edu>
2440 2004-08-21 Fernando Perez <fperez@colorado.edu>
2435
2441
2436 * ipythonrc-pylab: Add matplotlib support.
2442 * ipythonrc-pylab: Add matplotlib support.
2437
2443
2438 * matplotlib_config.py: new files for matplotlib support, part of
2444 * matplotlib_config.py: new files for matplotlib support, part of
2439 the pylab profile.
2445 the pylab profile.
2440
2446
2441 * IPython/usage.py (__doc__): documented the threading options.
2447 * IPython/usage.py (__doc__): documented the threading options.
2442
2448
2443 2004-08-20 Fernando Perez <fperez@colorado.edu>
2449 2004-08-20 Fernando Perez <fperez@colorado.edu>
2444
2450
2445 * ipython: Modified the main calling routine to handle the -thread
2451 * ipython: Modified the main calling routine to handle the -thread
2446 and -mpthread options. This needs to be done as a top-level hack,
2452 and -mpthread options. This needs to be done as a top-level hack,
2447 because it determines which class to instantiate for IPython
2453 because it determines which class to instantiate for IPython
2448 itself.
2454 itself.
2449
2455
2450 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2456 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2451 classes to support multithreaded GTK operation without blocking,
2457 classes to support multithreaded GTK operation without blocking,
2452 and matplotlib with all backends. This is a lot of still very
2458 and matplotlib with all backends. This is a lot of still very
2453 experimental code, and threads are tricky. So it may still have a
2459 experimental code, and threads are tricky. So it may still have a
2454 few rough edges... This code owes a lot to
2460 few rough edges... This code owes a lot to
2455 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2461 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2456 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2462 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2457 to John Hunter for all the matplotlib work.
2463 to John Hunter for all the matplotlib work.
2458
2464
2459 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2465 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2460 options for gtk thread and matplotlib support.
2466 options for gtk thread and matplotlib support.
2461
2467
2462 2004-08-16 Fernando Perez <fperez@colorado.edu>
2468 2004-08-16 Fernando Perez <fperez@colorado.edu>
2463
2469
2464 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2470 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2465 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2471 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2466 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2472 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2467
2473
2468 2004-08-11 Fernando Perez <fperez@colorado.edu>
2474 2004-08-11 Fernando Perez <fperez@colorado.edu>
2469
2475
2470 * setup.py (isfile): Fix build so documentation gets updated for
2476 * setup.py (isfile): Fix build so documentation gets updated for
2471 rpms (it was only done for .tgz builds).
2477 rpms (it was only done for .tgz builds).
2472
2478
2473 2004-08-10 Fernando Perez <fperez@colorado.edu>
2479 2004-08-10 Fernando Perez <fperez@colorado.edu>
2474
2480
2475 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2481 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2476
2482
2477 * iplib.py : Silence syntax error exceptions in tab-completion.
2483 * iplib.py : Silence syntax error exceptions in tab-completion.
2478
2484
2479 2004-08-05 Fernando Perez <fperez@colorado.edu>
2485 2004-08-05 Fernando Perez <fperez@colorado.edu>
2480
2486
2481 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2487 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2482 'color off' mark for continuation prompts. This was causing long
2488 'color off' mark for continuation prompts. This was causing long
2483 continuation lines to mis-wrap.
2489 continuation lines to mis-wrap.
2484
2490
2485 2004-08-01 Fernando Perez <fperez@colorado.edu>
2491 2004-08-01 Fernando Perez <fperez@colorado.edu>
2486
2492
2487 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2493 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2488 for building ipython to be a parameter. All this is necessary
2494 for building ipython to be a parameter. All this is necessary
2489 right now to have a multithreaded version, but this insane
2495 right now to have a multithreaded version, but this insane
2490 non-design will be cleaned up soon. For now, it's a hack that
2496 non-design will be cleaned up soon. For now, it's a hack that
2491 works.
2497 works.
2492
2498
2493 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2499 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2494 args in various places. No bugs so far, but it's a dangerous
2500 args in various places. No bugs so far, but it's a dangerous
2495 practice.
2501 practice.
2496
2502
2497 2004-07-31 Fernando Perez <fperez@colorado.edu>
2503 2004-07-31 Fernando Perez <fperez@colorado.edu>
2498
2504
2499 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2505 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2500 fix completion of files with dots in their names under most
2506 fix completion of files with dots in their names under most
2501 profiles (pysh was OK because the completion order is different).
2507 profiles (pysh was OK because the completion order is different).
2502
2508
2503 2004-07-27 Fernando Perez <fperez@colorado.edu>
2509 2004-07-27 Fernando Perez <fperez@colorado.edu>
2504
2510
2505 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2511 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2506 keywords manually, b/c the one in keyword.py was removed in python
2512 keywords manually, b/c the one in keyword.py was removed in python
2507 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2513 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2508 This is NOT a bug under python 2.3 and earlier.
2514 This is NOT a bug under python 2.3 and earlier.
2509
2515
2510 2004-07-26 Fernando Perez <fperez@colorado.edu>
2516 2004-07-26 Fernando Perez <fperez@colorado.edu>
2511
2517
2512 * IPython/ultraTB.py (VerboseTB.text): Add another
2518 * IPython/ultraTB.py (VerboseTB.text): Add another
2513 linecache.checkcache() call to try to prevent inspect.py from
2519 linecache.checkcache() call to try to prevent inspect.py from
2514 crashing under python 2.3. I think this fixes
2520 crashing under python 2.3. I think this fixes
2515 http://www.scipy.net/roundup/ipython/issue17.
2521 http://www.scipy.net/roundup/ipython/issue17.
2516
2522
2517 2004-07-26 *** Released version 0.6.2
2523 2004-07-26 *** Released version 0.6.2
2518
2524
2519 2004-07-26 Fernando Perez <fperez@colorado.edu>
2525 2004-07-26 Fernando Perez <fperez@colorado.edu>
2520
2526
2521 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2527 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2522 fail for any number.
2528 fail for any number.
2523 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2529 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2524 empty bookmarks.
2530 empty bookmarks.
2525
2531
2526 2004-07-26 *** Released version 0.6.1
2532 2004-07-26 *** Released version 0.6.1
2527
2533
2528 2004-07-26 Fernando Perez <fperez@colorado.edu>
2534 2004-07-26 Fernando Perez <fperez@colorado.edu>
2529
2535
2530 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2536 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2531
2537
2532 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2538 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2533 escaping '()[]{}' in filenames.
2539 escaping '()[]{}' in filenames.
2534
2540
2535 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2541 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2536 Python 2.2 users who lack a proper shlex.split.
2542 Python 2.2 users who lack a proper shlex.split.
2537
2543
2538 2004-07-19 Fernando Perez <fperez@colorado.edu>
2544 2004-07-19 Fernando Perez <fperez@colorado.edu>
2539
2545
2540 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2546 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2541 for reading readline's init file. I follow the normal chain:
2547 for reading readline's init file. I follow the normal chain:
2542 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2548 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2543 report by Mike Heeter. This closes
2549 report by Mike Heeter. This closes
2544 http://www.scipy.net/roundup/ipython/issue16.
2550 http://www.scipy.net/roundup/ipython/issue16.
2545
2551
2546 2004-07-18 Fernando Perez <fperez@colorado.edu>
2552 2004-07-18 Fernando Perez <fperez@colorado.edu>
2547
2553
2548 * IPython/iplib.py (__init__): Add better handling of '\' under
2554 * IPython/iplib.py (__init__): Add better handling of '\' under
2549 Win32 for filenames. After a patch by Ville.
2555 Win32 for filenames. After a patch by Ville.
2550
2556
2551 2004-07-17 Fernando Perez <fperez@colorado.edu>
2557 2004-07-17 Fernando Perez <fperez@colorado.edu>
2552
2558
2553 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2559 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2554 autocalling would be triggered for 'foo is bar' if foo is
2560 autocalling would be triggered for 'foo is bar' if foo is
2555 callable. I also cleaned up the autocall detection code to use a
2561 callable. I also cleaned up the autocall detection code to use a
2556 regexp, which is faster. Bug reported by Alexander Schmolck.
2562 regexp, which is faster. Bug reported by Alexander Schmolck.
2557
2563
2558 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2564 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2559 '?' in them would confuse the help system. Reported by Alex
2565 '?' in them would confuse the help system. Reported by Alex
2560 Schmolck.
2566 Schmolck.
2561
2567
2562 2004-07-16 Fernando Perez <fperez@colorado.edu>
2568 2004-07-16 Fernando Perez <fperez@colorado.edu>
2563
2569
2564 * IPython/GnuplotInteractive.py (__all__): added plot2.
2570 * IPython/GnuplotInteractive.py (__all__): added plot2.
2565
2571
2566 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2572 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2567 plotting dictionaries, lists or tuples of 1d arrays.
2573 plotting dictionaries, lists or tuples of 1d arrays.
2568
2574
2569 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2575 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2570 optimizations.
2576 optimizations.
2571
2577
2572 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2578 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2573 the information which was there from Janko's original IPP code:
2579 the information which was there from Janko's original IPP code:
2574
2580
2575 03.05.99 20:53 porto.ifm.uni-kiel.de
2581 03.05.99 20:53 porto.ifm.uni-kiel.de
2576 --Started changelog.
2582 --Started changelog.
2577 --make clear do what it say it does
2583 --make clear do what it say it does
2578 --added pretty output of lines from inputcache
2584 --added pretty output of lines from inputcache
2579 --Made Logger a mixin class, simplifies handling of switches
2585 --Made Logger a mixin class, simplifies handling of switches
2580 --Added own completer class. .string<TAB> expands to last history
2586 --Added own completer class. .string<TAB> expands to last history
2581 line which starts with string. The new expansion is also present
2587 line which starts with string. The new expansion is also present
2582 with Ctrl-r from the readline library. But this shows, who this
2588 with Ctrl-r from the readline library. But this shows, who this
2583 can be done for other cases.
2589 can be done for other cases.
2584 --Added convention that all shell functions should accept a
2590 --Added convention that all shell functions should accept a
2585 parameter_string This opens the door for different behaviour for
2591 parameter_string This opens the door for different behaviour for
2586 each function. @cd is a good example of this.
2592 each function. @cd is a good example of this.
2587
2593
2588 04.05.99 12:12 porto.ifm.uni-kiel.de
2594 04.05.99 12:12 porto.ifm.uni-kiel.de
2589 --added logfile rotation
2595 --added logfile rotation
2590 --added new mainloop method which freezes first the namespace
2596 --added new mainloop method which freezes first the namespace
2591
2597
2592 07.05.99 21:24 porto.ifm.uni-kiel.de
2598 07.05.99 21:24 porto.ifm.uni-kiel.de
2593 --added the docreader classes. Now there is a help system.
2599 --added the docreader classes. Now there is a help system.
2594 -This is only a first try. Currently it's not easy to put new
2600 -This is only a first try. Currently it's not easy to put new
2595 stuff in the indices. But this is the way to go. Info would be
2601 stuff in the indices. But this is the way to go. Info would be
2596 better, but HTML is every where and not everybody has an info
2602 better, but HTML is every where and not everybody has an info
2597 system installed and it's not so easy to change html-docs to info.
2603 system installed and it's not so easy to change html-docs to info.
2598 --added global logfile option
2604 --added global logfile option
2599 --there is now a hook for object inspection method pinfo needs to
2605 --there is now a hook for object inspection method pinfo needs to
2600 be provided for this. Can be reached by two '??'.
2606 be provided for this. Can be reached by two '??'.
2601
2607
2602 08.05.99 20:51 porto.ifm.uni-kiel.de
2608 08.05.99 20:51 porto.ifm.uni-kiel.de
2603 --added a README
2609 --added a README
2604 --bug in rc file. Something has changed so functions in the rc
2610 --bug in rc file. Something has changed so functions in the rc
2605 file need to reference the shell and not self. Not clear if it's a
2611 file need to reference the shell and not self. Not clear if it's a
2606 bug or feature.
2612 bug or feature.
2607 --changed rc file for new behavior
2613 --changed rc file for new behavior
2608
2614
2609 2004-07-15 Fernando Perez <fperez@colorado.edu>
2615 2004-07-15 Fernando Perez <fperez@colorado.edu>
2610
2616
2611 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2617 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2612 cache was falling out of sync in bizarre manners when multi-line
2618 cache was falling out of sync in bizarre manners when multi-line
2613 input was present. Minor optimizations and cleanup.
2619 input was present. Minor optimizations and cleanup.
2614
2620
2615 (Logger): Remove old Changelog info for cleanup. This is the
2621 (Logger): Remove old Changelog info for cleanup. This is the
2616 information which was there from Janko's original code:
2622 information which was there from Janko's original code:
2617
2623
2618 Changes to Logger: - made the default log filename a parameter
2624 Changes to Logger: - made the default log filename a parameter
2619
2625
2620 - put a check for lines beginning with !@? in log(). Needed
2626 - put a check for lines beginning with !@? in log(). Needed
2621 (even if the handlers properly log their lines) for mid-session
2627 (even if the handlers properly log their lines) for mid-session
2622 logging activation to work properly. Without this, lines logged
2628 logging activation to work properly. Without this, lines logged
2623 in mid session, which get read from the cache, would end up
2629 in mid session, which get read from the cache, would end up
2624 'bare' (with !@? in the open) in the log. Now they are caught
2630 'bare' (with !@? in the open) in the log. Now they are caught
2625 and prepended with a #.
2631 and prepended with a #.
2626
2632
2627 * IPython/iplib.py (InteractiveShell.init_readline): added check
2633 * IPython/iplib.py (InteractiveShell.init_readline): added check
2628 in case MagicCompleter fails to be defined, so we don't crash.
2634 in case MagicCompleter fails to be defined, so we don't crash.
2629
2635
2630 2004-07-13 Fernando Perez <fperez@colorado.edu>
2636 2004-07-13 Fernando Perez <fperez@colorado.edu>
2631
2637
2632 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2638 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2633 of EPS if the requested filename ends in '.eps'.
2639 of EPS if the requested filename ends in '.eps'.
2634
2640
2635 2004-07-04 Fernando Perez <fperez@colorado.edu>
2641 2004-07-04 Fernando Perez <fperez@colorado.edu>
2636
2642
2637 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2643 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2638 escaping of quotes when calling the shell.
2644 escaping of quotes when calling the shell.
2639
2645
2640 2004-07-02 Fernando Perez <fperez@colorado.edu>
2646 2004-07-02 Fernando Perez <fperez@colorado.edu>
2641
2647
2642 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2648 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2643 gettext not working because we were clobbering '_'. Fixes
2649 gettext not working because we were clobbering '_'. Fixes
2644 http://www.scipy.net/roundup/ipython/issue6.
2650 http://www.scipy.net/roundup/ipython/issue6.
2645
2651
2646 2004-07-01 Fernando Perez <fperez@colorado.edu>
2652 2004-07-01 Fernando Perez <fperez@colorado.edu>
2647
2653
2648 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2654 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2649 into @cd. Patch by Ville.
2655 into @cd. Patch by Ville.
2650
2656
2651 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2657 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2652 new function to store things after ipmaker runs. Patch by Ville.
2658 new function to store things after ipmaker runs. Patch by Ville.
2653 Eventually this will go away once ipmaker is removed and the class
2659 Eventually this will go away once ipmaker is removed and the class
2654 gets cleaned up, but for now it's ok. Key functionality here is
2660 gets cleaned up, but for now it's ok. Key functionality here is
2655 the addition of the persistent storage mechanism, a dict for
2661 the addition of the persistent storage mechanism, a dict for
2656 keeping data across sessions (for now just bookmarks, but more can
2662 keeping data across sessions (for now just bookmarks, but more can
2657 be implemented later).
2663 be implemented later).
2658
2664
2659 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2665 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2660 persistent across sections. Patch by Ville, I modified it
2666 persistent across sections. Patch by Ville, I modified it
2661 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2667 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2662 added a '-l' option to list all bookmarks.
2668 added a '-l' option to list all bookmarks.
2663
2669
2664 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2670 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2665 center for cleanup. Registered with atexit.register(). I moved
2671 center for cleanup. Registered with atexit.register(). I moved
2666 here the old exit_cleanup(). After a patch by Ville.
2672 here the old exit_cleanup(). After a patch by Ville.
2667
2673
2668 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2674 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2669 characters in the hacked shlex_split for python 2.2.
2675 characters in the hacked shlex_split for python 2.2.
2670
2676
2671 * IPython/iplib.py (file_matches): more fixes to filenames with
2677 * IPython/iplib.py (file_matches): more fixes to filenames with
2672 whitespace in them. It's not perfect, but limitations in python's
2678 whitespace in them. It's not perfect, but limitations in python's
2673 readline make it impossible to go further.
2679 readline make it impossible to go further.
2674
2680
2675 2004-06-29 Fernando Perez <fperez@colorado.edu>
2681 2004-06-29 Fernando Perez <fperez@colorado.edu>
2676
2682
2677 * IPython/iplib.py (file_matches): escape whitespace correctly in
2683 * IPython/iplib.py (file_matches): escape whitespace correctly in
2678 filename completions. Bug reported by Ville.
2684 filename completions. Bug reported by Ville.
2679
2685
2680 2004-06-28 Fernando Perez <fperez@colorado.edu>
2686 2004-06-28 Fernando Perez <fperez@colorado.edu>
2681
2687
2682 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2688 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2683 the history file will be called 'history-PROFNAME' (or just
2689 the history file will be called 'history-PROFNAME' (or just
2684 'history' if no profile is loaded). I was getting annoyed at
2690 'history' if no profile is loaded). I was getting annoyed at
2685 getting my Numerical work history clobbered by pysh sessions.
2691 getting my Numerical work history clobbered by pysh sessions.
2686
2692
2687 * IPython/iplib.py (InteractiveShell.__init__): Internal
2693 * IPython/iplib.py (InteractiveShell.__init__): Internal
2688 getoutputerror() function so that we can honor the system_verbose
2694 getoutputerror() function so that we can honor the system_verbose
2689 flag for _all_ system calls. I also added escaping of #
2695 flag for _all_ system calls. I also added escaping of #
2690 characters here to avoid confusing Itpl.
2696 characters here to avoid confusing Itpl.
2691
2697
2692 * IPython/Magic.py (shlex_split): removed call to shell in
2698 * IPython/Magic.py (shlex_split): removed call to shell in
2693 parse_options and replaced it with shlex.split(). The annoying
2699 parse_options and replaced it with shlex.split(). The annoying
2694 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2700 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2695 to backport it from 2.3, with several frail hacks (the shlex
2701 to backport it from 2.3, with several frail hacks (the shlex
2696 module is rather limited in 2.2). Thanks to a suggestion by Ville
2702 module is rather limited in 2.2). Thanks to a suggestion by Ville
2697 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2703 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2698 problem.
2704 problem.
2699
2705
2700 (Magic.magic_system_verbose): new toggle to print the actual
2706 (Magic.magic_system_verbose): new toggle to print the actual
2701 system calls made by ipython. Mainly for debugging purposes.
2707 system calls made by ipython. Mainly for debugging purposes.
2702
2708
2703 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2709 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2704 doesn't support persistence. Reported (and fix suggested) by
2710 doesn't support persistence. Reported (and fix suggested) by
2705 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2711 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2706
2712
2707 2004-06-26 Fernando Perez <fperez@colorado.edu>
2713 2004-06-26 Fernando Perez <fperez@colorado.edu>
2708
2714
2709 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2715 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2710 continue prompts.
2716 continue prompts.
2711
2717
2712 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2718 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2713 function (basically a big docstring) and a few more things here to
2719 function (basically a big docstring) and a few more things here to
2714 speedup startup. pysh.py is now very lightweight. We want because
2720 speedup startup. pysh.py is now very lightweight. We want because
2715 it gets execfile'd, while InterpreterExec gets imported, so
2721 it gets execfile'd, while InterpreterExec gets imported, so
2716 byte-compilation saves time.
2722 byte-compilation saves time.
2717
2723
2718 2004-06-25 Fernando Perez <fperez@colorado.edu>
2724 2004-06-25 Fernando Perez <fperez@colorado.edu>
2719
2725
2720 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2726 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2721 -NUM', which was recently broken.
2727 -NUM', which was recently broken.
2722
2728
2723 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2729 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2724 in multi-line input (but not !!, which doesn't make sense there).
2730 in multi-line input (but not !!, which doesn't make sense there).
2725
2731
2726 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2732 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2727 It's just too useful, and people can turn it off in the less
2733 It's just too useful, and people can turn it off in the less
2728 common cases where it's a problem.
2734 common cases where it's a problem.
2729
2735
2730 2004-06-24 Fernando Perez <fperez@colorado.edu>
2736 2004-06-24 Fernando Perez <fperez@colorado.edu>
2731
2737
2732 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2738 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2733 special syntaxes (like alias calling) is now allied in multi-line
2739 special syntaxes (like alias calling) is now allied in multi-line
2734 input. This is still _very_ experimental, but it's necessary for
2740 input. This is still _very_ experimental, but it's necessary for
2735 efficient shell usage combining python looping syntax with system
2741 efficient shell usage combining python looping syntax with system
2736 calls. For now it's restricted to aliases, I don't think it
2742 calls. For now it's restricted to aliases, I don't think it
2737 really even makes sense to have this for magics.
2743 really even makes sense to have this for magics.
2738
2744
2739 2004-06-23 Fernando Perez <fperez@colorado.edu>
2745 2004-06-23 Fernando Perez <fperez@colorado.edu>
2740
2746
2741 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2747 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2742 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2748 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2743
2749
2744 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2750 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2745 extensions under Windows (after code sent by Gary Bishop). The
2751 extensions under Windows (after code sent by Gary Bishop). The
2746 extensions considered 'executable' are stored in IPython's rc
2752 extensions considered 'executable' are stored in IPython's rc
2747 structure as win_exec_ext.
2753 structure as win_exec_ext.
2748
2754
2749 * IPython/genutils.py (shell): new function, like system() but
2755 * IPython/genutils.py (shell): new function, like system() but
2750 without return value. Very useful for interactive shell work.
2756 without return value. Very useful for interactive shell work.
2751
2757
2752 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2758 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2753 delete aliases.
2759 delete aliases.
2754
2760
2755 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2761 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2756 sure that the alias table doesn't contain python keywords.
2762 sure that the alias table doesn't contain python keywords.
2757
2763
2758 2004-06-21 Fernando Perez <fperez@colorado.edu>
2764 2004-06-21 Fernando Perez <fperez@colorado.edu>
2759
2765
2760 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2766 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2761 non-existent items are found in $PATH. Reported by Thorsten.
2767 non-existent items are found in $PATH. Reported by Thorsten.
2762
2768
2763 2004-06-20 Fernando Perez <fperez@colorado.edu>
2769 2004-06-20 Fernando Perez <fperez@colorado.edu>
2764
2770
2765 * IPython/iplib.py (complete): modified the completer so that the
2771 * IPython/iplib.py (complete): modified the completer so that the
2766 order of priorities can be easily changed at runtime.
2772 order of priorities can be easily changed at runtime.
2767
2773
2768 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2774 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2769 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2775 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2770
2776
2771 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2777 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2772 expand Python variables prepended with $ in all system calls. The
2778 expand Python variables prepended with $ in all system calls. The
2773 same was done to InteractiveShell.handle_shell_escape. Now all
2779 same was done to InteractiveShell.handle_shell_escape. Now all
2774 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2780 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2775 expansion of python variables and expressions according to the
2781 expansion of python variables and expressions according to the
2776 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2782 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2777
2783
2778 Though PEP-215 has been rejected, a similar (but simpler) one
2784 Though PEP-215 has been rejected, a similar (but simpler) one
2779 seems like it will go into Python 2.4, PEP-292 -
2785 seems like it will go into Python 2.4, PEP-292 -
2780 http://www.python.org/peps/pep-0292.html.
2786 http://www.python.org/peps/pep-0292.html.
2781
2787
2782 I'll keep the full syntax of PEP-215, since IPython has since the
2788 I'll keep the full syntax of PEP-215, since IPython has since the
2783 start used Ka-Ping Yee's reference implementation discussed there
2789 start used Ka-Ping Yee's reference implementation discussed there
2784 (Itpl), and I actually like the powerful semantics it offers.
2790 (Itpl), and I actually like the powerful semantics it offers.
2785
2791
2786 In order to access normal shell variables, the $ has to be escaped
2792 In order to access normal shell variables, the $ has to be escaped
2787 via an extra $. For example:
2793 via an extra $. For example:
2788
2794
2789 In [7]: PATH='a python variable'
2795 In [7]: PATH='a python variable'
2790
2796
2791 In [8]: !echo $PATH
2797 In [8]: !echo $PATH
2792 a python variable
2798 a python variable
2793
2799
2794 In [9]: !echo $$PATH
2800 In [9]: !echo $$PATH
2795 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2801 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2796
2802
2797 (Magic.parse_options): escape $ so the shell doesn't evaluate
2803 (Magic.parse_options): escape $ so the shell doesn't evaluate
2798 things prematurely.
2804 things prematurely.
2799
2805
2800 * IPython/iplib.py (InteractiveShell.call_alias): added the
2806 * IPython/iplib.py (InteractiveShell.call_alias): added the
2801 ability for aliases to expand python variables via $.
2807 ability for aliases to expand python variables via $.
2802
2808
2803 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2809 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2804 system, now there's a @rehash/@rehashx pair of magics. These work
2810 system, now there's a @rehash/@rehashx pair of magics. These work
2805 like the csh rehash command, and can be invoked at any time. They
2811 like the csh rehash command, and can be invoked at any time. They
2806 build a table of aliases to everything in the user's $PATH
2812 build a table of aliases to everything in the user's $PATH
2807 (@rehash uses everything, @rehashx is slower but only adds
2813 (@rehash uses everything, @rehashx is slower but only adds
2808 executable files). With this, the pysh.py-based shell profile can
2814 executable files). With this, the pysh.py-based shell profile can
2809 now simply call rehash upon startup, and full access to all
2815 now simply call rehash upon startup, and full access to all
2810 programs in the user's path is obtained.
2816 programs in the user's path is obtained.
2811
2817
2812 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2818 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2813 functionality is now fully in place. I removed the old dynamic
2819 functionality is now fully in place. I removed the old dynamic
2814 code generation based approach, in favor of a much lighter one
2820 code generation based approach, in favor of a much lighter one
2815 based on a simple dict. The advantage is that this allows me to
2821 based on a simple dict. The advantage is that this allows me to
2816 now have thousands of aliases with negligible cost (unthinkable
2822 now have thousands of aliases with negligible cost (unthinkable
2817 with the old system).
2823 with the old system).
2818
2824
2819 2004-06-19 Fernando Perez <fperez@colorado.edu>
2825 2004-06-19 Fernando Perez <fperez@colorado.edu>
2820
2826
2821 * IPython/iplib.py (__init__): extended MagicCompleter class to
2827 * IPython/iplib.py (__init__): extended MagicCompleter class to
2822 also complete (last in priority) on user aliases.
2828 also complete (last in priority) on user aliases.
2823
2829
2824 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2830 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2825 call to eval.
2831 call to eval.
2826 (ItplNS.__init__): Added a new class which functions like Itpl,
2832 (ItplNS.__init__): Added a new class which functions like Itpl,
2827 but allows configuring the namespace for the evaluation to occur
2833 but allows configuring the namespace for the evaluation to occur
2828 in.
2834 in.
2829
2835
2830 2004-06-18 Fernando Perez <fperez@colorado.edu>
2836 2004-06-18 Fernando Perez <fperez@colorado.edu>
2831
2837
2832 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2838 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2833 better message when 'exit' or 'quit' are typed (a common newbie
2839 better message when 'exit' or 'quit' are typed (a common newbie
2834 confusion).
2840 confusion).
2835
2841
2836 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2842 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2837 check for Windows users.
2843 check for Windows users.
2838
2844
2839 * IPython/iplib.py (InteractiveShell.user_setup): removed
2845 * IPython/iplib.py (InteractiveShell.user_setup): removed
2840 disabling of colors for Windows. I'll test at runtime and issue a
2846 disabling of colors for Windows. I'll test at runtime and issue a
2841 warning if Gary's readline isn't found, as to nudge users to
2847 warning if Gary's readline isn't found, as to nudge users to
2842 download it.
2848 download it.
2843
2849
2844 2004-06-16 Fernando Perez <fperez@colorado.edu>
2850 2004-06-16 Fernando Perez <fperez@colorado.edu>
2845
2851
2846 * IPython/genutils.py (Stream.__init__): changed to print errors
2852 * IPython/genutils.py (Stream.__init__): changed to print errors
2847 to sys.stderr. I had a circular dependency here. Now it's
2853 to sys.stderr. I had a circular dependency here. Now it's
2848 possible to run ipython as IDLE's shell (consider this pre-alpha,
2854 possible to run ipython as IDLE's shell (consider this pre-alpha,
2849 since true stdout things end up in the starting terminal instead
2855 since true stdout things end up in the starting terminal instead
2850 of IDLE's out).
2856 of IDLE's out).
2851
2857
2852 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2858 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2853 users who haven't # updated their prompt_in2 definitions. Remove
2859 users who haven't # updated their prompt_in2 definitions. Remove
2854 eventually.
2860 eventually.
2855 (multiple_replace): added credit to original ASPN recipe.
2861 (multiple_replace): added credit to original ASPN recipe.
2856
2862
2857 2004-06-15 Fernando Perez <fperez@colorado.edu>
2863 2004-06-15 Fernando Perez <fperez@colorado.edu>
2858
2864
2859 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2865 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2860 list of auto-defined aliases.
2866 list of auto-defined aliases.
2861
2867
2862 2004-06-13 Fernando Perez <fperez@colorado.edu>
2868 2004-06-13 Fernando Perez <fperez@colorado.edu>
2863
2869
2864 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2870 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2865 install was really requested (so setup.py can be used for other
2871 install was really requested (so setup.py can be used for other
2866 things under Windows).
2872 things under Windows).
2867
2873
2868 2004-06-10 Fernando Perez <fperez@colorado.edu>
2874 2004-06-10 Fernando Perez <fperez@colorado.edu>
2869
2875
2870 * IPython/Logger.py (Logger.create_log): Manually remove any old
2876 * IPython/Logger.py (Logger.create_log): Manually remove any old
2871 backup, since os.remove may fail under Windows. Fixes bug
2877 backup, since os.remove may fail under Windows. Fixes bug
2872 reported by Thorsten.
2878 reported by Thorsten.
2873
2879
2874 2004-06-09 Fernando Perez <fperez@colorado.edu>
2880 2004-06-09 Fernando Perez <fperez@colorado.edu>
2875
2881
2876 * examples/example-embed.py: fixed all references to %n (replaced
2882 * examples/example-embed.py: fixed all references to %n (replaced
2877 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2883 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2878 for all examples and the manual as well.
2884 for all examples and the manual as well.
2879
2885
2880 2004-06-08 Fernando Perez <fperez@colorado.edu>
2886 2004-06-08 Fernando Perez <fperez@colorado.edu>
2881
2887
2882 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2888 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2883 alignment and color management. All 3 prompt subsystems now
2889 alignment and color management. All 3 prompt subsystems now
2884 inherit from BasePrompt.
2890 inherit from BasePrompt.
2885
2891
2886 * tools/release: updates for windows installer build and tag rpms
2892 * tools/release: updates for windows installer build and tag rpms
2887 with python version (since paths are fixed).
2893 with python version (since paths are fixed).
2888
2894
2889 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2895 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2890 which will become eventually obsolete. Also fixed the default
2896 which will become eventually obsolete. Also fixed the default
2891 prompt_in2 to use \D, so at least new users start with the correct
2897 prompt_in2 to use \D, so at least new users start with the correct
2892 defaults.
2898 defaults.
2893 WARNING: Users with existing ipythonrc files will need to apply
2899 WARNING: Users with existing ipythonrc files will need to apply
2894 this fix manually!
2900 this fix manually!
2895
2901
2896 * setup.py: make windows installer (.exe). This is finally the
2902 * setup.py: make windows installer (.exe). This is finally the
2897 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2903 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2898 which I hadn't included because it required Python 2.3 (or recent
2904 which I hadn't included because it required Python 2.3 (or recent
2899 distutils).
2905 distutils).
2900
2906
2901 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2907 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2902 usage of new '\D' escape.
2908 usage of new '\D' escape.
2903
2909
2904 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2910 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2905 lacks os.getuid())
2911 lacks os.getuid())
2906 (CachedOutput.set_colors): Added the ability to turn coloring
2912 (CachedOutput.set_colors): Added the ability to turn coloring
2907 on/off with @colors even for manually defined prompt colors. It
2913 on/off with @colors even for manually defined prompt colors. It
2908 uses a nasty global, but it works safely and via the generic color
2914 uses a nasty global, but it works safely and via the generic color
2909 handling mechanism.
2915 handling mechanism.
2910 (Prompt2.__init__): Introduced new escape '\D' for continuation
2916 (Prompt2.__init__): Introduced new escape '\D' for continuation
2911 prompts. It represents the counter ('\#') as dots.
2917 prompts. It represents the counter ('\#') as dots.
2912 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2918 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2913 need to update their ipythonrc files and replace '%n' with '\D' in
2919 need to update their ipythonrc files and replace '%n' with '\D' in
2914 their prompt_in2 settings everywhere. Sorry, but there's
2920 their prompt_in2 settings everywhere. Sorry, but there's
2915 otherwise no clean way to get all prompts to properly align. The
2921 otherwise no clean way to get all prompts to properly align. The
2916 ipythonrc shipped with IPython has been updated.
2922 ipythonrc shipped with IPython has been updated.
2917
2923
2918 2004-06-07 Fernando Perez <fperez@colorado.edu>
2924 2004-06-07 Fernando Perez <fperez@colorado.edu>
2919
2925
2920 * setup.py (isfile): Pass local_icons option to latex2html, so the
2926 * setup.py (isfile): Pass local_icons option to latex2html, so the
2921 resulting HTML file is self-contained. Thanks to
2927 resulting HTML file is self-contained. Thanks to
2922 dryice-AT-liu.com.cn for the tip.
2928 dryice-AT-liu.com.cn for the tip.
2923
2929
2924 * pysh.py: I created a new profile 'shell', which implements a
2930 * pysh.py: I created a new profile 'shell', which implements a
2925 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2931 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2926 system shell, nor will it become one anytime soon. It's mainly
2932 system shell, nor will it become one anytime soon. It's mainly
2927 meant to illustrate the use of the new flexible bash-like prompts.
2933 meant to illustrate the use of the new flexible bash-like prompts.
2928 I guess it could be used by hardy souls for true shell management,
2934 I guess it could be used by hardy souls for true shell management,
2929 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2935 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2930 profile. This uses the InterpreterExec extension provided by
2936 profile. This uses the InterpreterExec extension provided by
2931 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2937 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2932
2938
2933 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2939 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2934 auto-align itself with the length of the previous input prompt
2940 auto-align itself with the length of the previous input prompt
2935 (taking into account the invisible color escapes).
2941 (taking into account the invisible color escapes).
2936 (CachedOutput.__init__): Large restructuring of this class. Now
2942 (CachedOutput.__init__): Large restructuring of this class. Now
2937 all three prompts (primary1, primary2, output) are proper objects,
2943 all three prompts (primary1, primary2, output) are proper objects,
2938 managed by the 'parent' CachedOutput class. The code is still a
2944 managed by the 'parent' CachedOutput class. The code is still a
2939 bit hackish (all prompts share state via a pointer to the cache),
2945 bit hackish (all prompts share state via a pointer to the cache),
2940 but it's overall far cleaner than before.
2946 but it's overall far cleaner than before.
2941
2947
2942 * IPython/genutils.py (getoutputerror): modified to add verbose,
2948 * IPython/genutils.py (getoutputerror): modified to add verbose,
2943 debug and header options. This makes the interface of all getout*
2949 debug and header options. This makes the interface of all getout*
2944 functions uniform.
2950 functions uniform.
2945 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2951 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2946
2952
2947 * IPython/Magic.py (Magic.default_option): added a function to
2953 * IPython/Magic.py (Magic.default_option): added a function to
2948 allow registering default options for any magic command. This
2954 allow registering default options for any magic command. This
2949 makes it easy to have profiles which customize the magics globally
2955 makes it easy to have profiles which customize the magics globally
2950 for a certain use. The values set through this function are
2956 for a certain use. The values set through this function are
2951 picked up by the parse_options() method, which all magics should
2957 picked up by the parse_options() method, which all magics should
2952 use to parse their options.
2958 use to parse their options.
2953
2959
2954 * IPython/genutils.py (warn): modified the warnings framework to
2960 * IPython/genutils.py (warn): modified the warnings framework to
2955 use the Term I/O class. I'm trying to slowly unify all of
2961 use the Term I/O class. I'm trying to slowly unify all of
2956 IPython's I/O operations to pass through Term.
2962 IPython's I/O operations to pass through Term.
2957
2963
2958 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2964 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2959 the secondary prompt to correctly match the length of the primary
2965 the secondary prompt to correctly match the length of the primary
2960 one for any prompt. Now multi-line code will properly line up
2966 one for any prompt. Now multi-line code will properly line up
2961 even for path dependent prompts, such as the new ones available
2967 even for path dependent prompts, such as the new ones available
2962 via the prompt_specials.
2968 via the prompt_specials.
2963
2969
2964 2004-06-06 Fernando Perez <fperez@colorado.edu>
2970 2004-06-06 Fernando Perez <fperez@colorado.edu>
2965
2971
2966 * IPython/Prompts.py (prompt_specials): Added the ability to have
2972 * IPython/Prompts.py (prompt_specials): Added the ability to have
2967 bash-like special sequences in the prompts, which get
2973 bash-like special sequences in the prompts, which get
2968 automatically expanded. Things like hostname, current working
2974 automatically expanded. Things like hostname, current working
2969 directory and username are implemented already, but it's easy to
2975 directory and username are implemented already, but it's easy to
2970 add more in the future. Thanks to a patch by W.J. van der Laan
2976 add more in the future. Thanks to a patch by W.J. van der Laan
2971 <gnufnork-AT-hetdigitalegat.nl>
2977 <gnufnork-AT-hetdigitalegat.nl>
2972 (prompt_specials): Added color support for prompt strings, so
2978 (prompt_specials): Added color support for prompt strings, so
2973 users can define arbitrary color setups for their prompts.
2979 users can define arbitrary color setups for their prompts.
2974
2980
2975 2004-06-05 Fernando Perez <fperez@colorado.edu>
2981 2004-06-05 Fernando Perez <fperez@colorado.edu>
2976
2982
2977 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2983 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2978 code to load Gary Bishop's readline and configure it
2984 code to load Gary Bishop's readline and configure it
2979 automatically. Thanks to Gary for help on this.
2985 automatically. Thanks to Gary for help on this.
2980
2986
2981 2004-06-01 Fernando Perez <fperez@colorado.edu>
2987 2004-06-01 Fernando Perez <fperez@colorado.edu>
2982
2988
2983 * IPython/Logger.py (Logger.create_log): fix bug for logging
2989 * IPython/Logger.py (Logger.create_log): fix bug for logging
2984 with no filename (previous fix was incomplete).
2990 with no filename (previous fix was incomplete).
2985
2991
2986 2004-05-25 Fernando Perez <fperez@colorado.edu>
2992 2004-05-25 Fernando Perez <fperez@colorado.edu>
2987
2993
2988 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2994 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2989 parens would get passed to the shell.
2995 parens would get passed to the shell.
2990
2996
2991 2004-05-20 Fernando Perez <fperez@colorado.edu>
2997 2004-05-20 Fernando Perez <fperez@colorado.edu>
2992
2998
2993 * IPython/Magic.py (Magic.magic_prun): changed default profile
2999 * IPython/Magic.py (Magic.magic_prun): changed default profile
2994 sort order to 'time' (the more common profiling need).
3000 sort order to 'time' (the more common profiling need).
2995
3001
2996 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
3002 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2997 so that source code shown is guaranteed in sync with the file on
3003 so that source code shown is guaranteed in sync with the file on
2998 disk (also changed in psource). Similar fix to the one for
3004 disk (also changed in psource). Similar fix to the one for
2999 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
3005 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
3000 <yann.ledu-AT-noos.fr>.
3006 <yann.ledu-AT-noos.fr>.
3001
3007
3002 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
3008 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
3003 with a single option would not be correctly parsed. Closes
3009 with a single option would not be correctly parsed. Closes
3004 http://www.scipy.net/roundup/ipython/issue14. This bug had been
3010 http://www.scipy.net/roundup/ipython/issue14. This bug had been
3005 introduced in 0.6.0 (on 2004-05-06).
3011 introduced in 0.6.0 (on 2004-05-06).
3006
3012
3007 2004-05-13 *** Released version 0.6.0
3013 2004-05-13 *** Released version 0.6.0
3008
3014
3009 2004-05-13 Fernando Perez <fperez@colorado.edu>
3015 2004-05-13 Fernando Perez <fperez@colorado.edu>
3010
3016
3011 * debian/: Added debian/ directory to CVS, so that debian support
3017 * debian/: Added debian/ directory to CVS, so that debian support
3012 is publicly accessible. The debian package is maintained by Jack
3018 is publicly accessible. The debian package is maintained by Jack
3013 Moffit <jack-AT-xiph.org>.
3019 Moffit <jack-AT-xiph.org>.
3014
3020
3015 * Documentation: included the notes about an ipython-based system
3021 * Documentation: included the notes about an ipython-based system
3016 shell (the hypothetical 'pysh') into the new_design.pdf document,
3022 shell (the hypothetical 'pysh') into the new_design.pdf document,
3017 so that these ideas get distributed to users along with the
3023 so that these ideas get distributed to users along with the
3018 official documentation.
3024 official documentation.
3019
3025
3020 2004-05-10 Fernando Perez <fperez@colorado.edu>
3026 2004-05-10 Fernando Perez <fperez@colorado.edu>
3021
3027
3022 * IPython/Logger.py (Logger.create_log): fix recently introduced
3028 * IPython/Logger.py (Logger.create_log): fix recently introduced
3023 bug (misindented line) where logstart would fail when not given an
3029 bug (misindented line) where logstart would fail when not given an
3024 explicit filename.
3030 explicit filename.
3025
3031
3026 2004-05-09 Fernando Perez <fperez@colorado.edu>
3032 2004-05-09 Fernando Perez <fperez@colorado.edu>
3027
3033
3028 * IPython/Magic.py (Magic.parse_options): skip system call when
3034 * IPython/Magic.py (Magic.parse_options): skip system call when
3029 there are no options to look for. Faster, cleaner for the common
3035 there are no options to look for. Faster, cleaner for the common
3030 case.
3036 case.
3031
3037
3032 * Documentation: many updates to the manual: describing Windows
3038 * Documentation: many updates to the manual: describing Windows
3033 support better, Gnuplot updates, credits, misc small stuff. Also
3039 support better, Gnuplot updates, credits, misc small stuff. Also
3034 updated the new_design doc a bit.
3040 updated the new_design doc a bit.
3035
3041
3036 2004-05-06 *** Released version 0.6.0.rc1
3042 2004-05-06 *** Released version 0.6.0.rc1
3037
3043
3038 2004-05-06 Fernando Perez <fperez@colorado.edu>
3044 2004-05-06 Fernando Perez <fperez@colorado.edu>
3039
3045
3040 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
3046 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
3041 operations to use the vastly more efficient list/''.join() method.
3047 operations to use the vastly more efficient list/''.join() method.
3042 (FormattedTB.text): Fix
3048 (FormattedTB.text): Fix
3043 http://www.scipy.net/roundup/ipython/issue12 - exception source
3049 http://www.scipy.net/roundup/ipython/issue12 - exception source
3044 extract not updated after reload. Thanks to Mike Salib
3050 extract not updated after reload. Thanks to Mike Salib
3045 <msalib-AT-mit.edu> for pinning the source of the problem.
3051 <msalib-AT-mit.edu> for pinning the source of the problem.
3046 Fortunately, the solution works inside ipython and doesn't require
3052 Fortunately, the solution works inside ipython and doesn't require
3047 any changes to python proper.
3053 any changes to python proper.
3048
3054
3049 * IPython/Magic.py (Magic.parse_options): Improved to process the
3055 * IPython/Magic.py (Magic.parse_options): Improved to process the
3050 argument list as a true shell would (by actually using the
3056 argument list as a true shell would (by actually using the
3051 underlying system shell). This way, all @magics automatically get
3057 underlying system shell). This way, all @magics automatically get
3052 shell expansion for variables. Thanks to a comment by Alex
3058 shell expansion for variables. Thanks to a comment by Alex
3053 Schmolck.
3059 Schmolck.
3054
3060
3055 2004-04-04 Fernando Perez <fperez@colorado.edu>
3061 2004-04-04 Fernando Perez <fperez@colorado.edu>
3056
3062
3057 * IPython/iplib.py (InteractiveShell.interact): Added a special
3063 * IPython/iplib.py (InteractiveShell.interact): Added a special
3058 trap for a debugger quit exception, which is basically impossible
3064 trap for a debugger quit exception, which is basically impossible
3059 to handle by normal mechanisms, given what pdb does to the stack.
3065 to handle by normal mechanisms, given what pdb does to the stack.
3060 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
3066 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
3061
3067
3062 2004-04-03 Fernando Perez <fperez@colorado.edu>
3068 2004-04-03 Fernando Perez <fperez@colorado.edu>
3063
3069
3064 * IPython/genutils.py (Term): Standardized the names of the Term
3070 * IPython/genutils.py (Term): Standardized the names of the Term
3065 class streams to cin/cout/cerr, following C++ naming conventions
3071 class streams to cin/cout/cerr, following C++ naming conventions
3066 (I can't use in/out/err because 'in' is not a valid attribute
3072 (I can't use in/out/err because 'in' is not a valid attribute
3067 name).
3073 name).
3068
3074
3069 * IPython/iplib.py (InteractiveShell.interact): don't increment
3075 * IPython/iplib.py (InteractiveShell.interact): don't increment
3070 the prompt if there's no user input. By Daniel 'Dang' Griffith
3076 the prompt if there's no user input. By Daniel 'Dang' Griffith
3071 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
3077 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
3072 Francois Pinard.
3078 Francois Pinard.
3073
3079
3074 2004-04-02 Fernando Perez <fperez@colorado.edu>
3080 2004-04-02 Fernando Perez <fperez@colorado.edu>
3075
3081
3076 * IPython/genutils.py (Stream.__init__): Modified to survive at
3082 * IPython/genutils.py (Stream.__init__): Modified to survive at
3077 least importing in contexts where stdin/out/err aren't true file
3083 least importing in contexts where stdin/out/err aren't true file
3078 objects, such as PyCrust (they lack fileno() and mode). However,
3084 objects, such as PyCrust (they lack fileno() and mode). However,
3079 the recovery facilities which rely on these things existing will
3085 the recovery facilities which rely on these things existing will
3080 not work.
3086 not work.
3081
3087
3082 2004-04-01 Fernando Perez <fperez@colorado.edu>
3088 2004-04-01 Fernando Perez <fperez@colorado.edu>
3083
3089
3084 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
3090 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
3085 use the new getoutputerror() function, so it properly
3091 use the new getoutputerror() function, so it properly
3086 distinguishes stdout/err.
3092 distinguishes stdout/err.
3087
3093
3088 * IPython/genutils.py (getoutputerror): added a function to
3094 * IPython/genutils.py (getoutputerror): added a function to
3089 capture separately the standard output and error of a command.
3095 capture separately the standard output and error of a command.
3090 After a comment from dang on the mailing lists. This code is
3096 After a comment from dang on the mailing lists. This code is
3091 basically a modified version of commands.getstatusoutput(), from
3097 basically a modified version of commands.getstatusoutput(), from
3092 the standard library.
3098 the standard library.
3093
3099
3094 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3100 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3095 '!!' as a special syntax (shorthand) to access @sx.
3101 '!!' as a special syntax (shorthand) to access @sx.
3096
3102
3097 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3103 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3098 command and return its output as a list split on '\n'.
3104 command and return its output as a list split on '\n'.
3099
3105
3100 2004-03-31 Fernando Perez <fperez@colorado.edu>
3106 2004-03-31 Fernando Perez <fperez@colorado.edu>
3101
3107
3102 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3108 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3103 method to dictionaries used as FakeModule instances if they lack
3109 method to dictionaries used as FakeModule instances if they lack
3104 it. At least pydoc in python2.3 breaks for runtime-defined
3110 it. At least pydoc in python2.3 breaks for runtime-defined
3105 functions without this hack. At some point I need to _really_
3111 functions without this hack. At some point I need to _really_
3106 understand what FakeModule is doing, because it's a gross hack.
3112 understand what FakeModule is doing, because it's a gross hack.
3107 But it solves Arnd's problem for now...
3113 But it solves Arnd's problem for now...
3108
3114
3109 2004-02-27 Fernando Perez <fperez@colorado.edu>
3115 2004-02-27 Fernando Perez <fperez@colorado.edu>
3110
3116
3111 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3117 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3112 mode would behave erratically. Also increased the number of
3118 mode would behave erratically. Also increased the number of
3113 possible logs in rotate mod to 999. Thanks to Rod Holland
3119 possible logs in rotate mod to 999. Thanks to Rod Holland
3114 <rhh@StructureLABS.com> for the report and fixes.
3120 <rhh@StructureLABS.com> for the report and fixes.
3115
3121
3116 2004-02-26 Fernando Perez <fperez@colorado.edu>
3122 2004-02-26 Fernando Perez <fperez@colorado.edu>
3117
3123
3118 * IPython/genutils.py (page): Check that the curses module really
3124 * IPython/genutils.py (page): Check that the curses module really
3119 has the initscr attribute before trying to use it. For some
3125 has the initscr attribute before trying to use it. For some
3120 reason, the Solaris curses module is missing this. I think this
3126 reason, the Solaris curses module is missing this. I think this
3121 should be considered a Solaris python bug, but I'm not sure.
3127 should be considered a Solaris python bug, but I'm not sure.
3122
3128
3123 2004-01-17 Fernando Perez <fperez@colorado.edu>
3129 2004-01-17 Fernando Perez <fperez@colorado.edu>
3124
3130
3125 * IPython/genutils.py (Stream.__init__): Changes to try to make
3131 * IPython/genutils.py (Stream.__init__): Changes to try to make
3126 ipython robust against stdin/out/err being closed by the user.
3132 ipython robust against stdin/out/err being closed by the user.
3127 This is 'user error' (and blocks a normal python session, at least
3133 This is 'user error' (and blocks a normal python session, at least
3128 the stdout case). However, Ipython should be able to survive such
3134 the stdout case). However, Ipython should be able to survive such
3129 instances of abuse as gracefully as possible. To simplify the
3135 instances of abuse as gracefully as possible. To simplify the
3130 coding and maintain compatibility with Gary Bishop's Term
3136 coding and maintain compatibility with Gary Bishop's Term
3131 contributions, I've made use of classmethods for this. I think
3137 contributions, I've made use of classmethods for this. I think
3132 this introduces a dependency on python 2.2.
3138 this introduces a dependency on python 2.2.
3133
3139
3134 2004-01-13 Fernando Perez <fperez@colorado.edu>
3140 2004-01-13 Fernando Perez <fperez@colorado.edu>
3135
3141
3136 * IPython/numutils.py (exp_safe): simplified the code a bit and
3142 * IPython/numutils.py (exp_safe): simplified the code a bit and
3137 removed the need for importing the kinds module altogether.
3143 removed the need for importing the kinds module altogether.
3138
3144
3139 2004-01-06 Fernando Perez <fperez@colorado.edu>
3145 2004-01-06 Fernando Perez <fperez@colorado.edu>
3140
3146
3141 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3147 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3142 a magic function instead, after some community feedback. No
3148 a magic function instead, after some community feedback. No
3143 special syntax will exist for it, but its name is deliberately
3149 special syntax will exist for it, but its name is deliberately
3144 very short.
3150 very short.
3145
3151
3146 2003-12-20 Fernando Perez <fperez@colorado.edu>
3152 2003-12-20 Fernando Perez <fperez@colorado.edu>
3147
3153
3148 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3154 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3149 new functionality, to automagically assign the result of a shell
3155 new functionality, to automagically assign the result of a shell
3150 command to a variable. I'll solicit some community feedback on
3156 command to a variable. I'll solicit some community feedback on
3151 this before making it permanent.
3157 this before making it permanent.
3152
3158
3153 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3159 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3154 requested about callables for which inspect couldn't obtain a
3160 requested about callables for which inspect couldn't obtain a
3155 proper argspec. Thanks to a crash report sent by Etienne
3161 proper argspec. Thanks to a crash report sent by Etienne
3156 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3162 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3157
3163
3158 2003-12-09 Fernando Perez <fperez@colorado.edu>
3164 2003-12-09 Fernando Perez <fperez@colorado.edu>
3159
3165
3160 * IPython/genutils.py (page): patch for the pager to work across
3166 * IPython/genutils.py (page): patch for the pager to work across
3161 various versions of Windows. By Gary Bishop.
3167 various versions of Windows. By Gary Bishop.
3162
3168
3163 2003-12-04 Fernando Perez <fperez@colorado.edu>
3169 2003-12-04 Fernando Perez <fperez@colorado.edu>
3164
3170
3165 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3171 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3166 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3172 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3167 While I tested this and it looks ok, there may still be corner
3173 While I tested this and it looks ok, there may still be corner
3168 cases I've missed.
3174 cases I've missed.
3169
3175
3170 2003-12-01 Fernando Perez <fperez@colorado.edu>
3176 2003-12-01 Fernando Perez <fperez@colorado.edu>
3171
3177
3172 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3178 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3173 where a line like 'p,q=1,2' would fail because the automagic
3179 where a line like 'p,q=1,2' would fail because the automagic
3174 system would be triggered for @p.
3180 system would be triggered for @p.
3175
3181
3176 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3182 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3177 cleanups, code unmodified.
3183 cleanups, code unmodified.
3178
3184
3179 * IPython/genutils.py (Term): added a class for IPython to handle
3185 * IPython/genutils.py (Term): added a class for IPython to handle
3180 output. In most cases it will just be a proxy for stdout/err, but
3186 output. In most cases it will just be a proxy for stdout/err, but
3181 having this allows modifications to be made for some platforms,
3187 having this allows modifications to be made for some platforms,
3182 such as handling color escapes under Windows. All of this code
3188 such as handling color escapes under Windows. All of this code
3183 was contributed by Gary Bishop, with minor modifications by me.
3189 was contributed by Gary Bishop, with minor modifications by me.
3184 The actual changes affect many files.
3190 The actual changes affect many files.
3185
3191
3186 2003-11-30 Fernando Perez <fperez@colorado.edu>
3192 2003-11-30 Fernando Perez <fperez@colorado.edu>
3187
3193
3188 * IPython/iplib.py (file_matches): new completion code, courtesy
3194 * IPython/iplib.py (file_matches): new completion code, courtesy
3189 of Jeff Collins. This enables filename completion again under
3195 of Jeff Collins. This enables filename completion again under
3190 python 2.3, which disabled it at the C level.
3196 python 2.3, which disabled it at the C level.
3191
3197
3192 2003-11-11 Fernando Perez <fperez@colorado.edu>
3198 2003-11-11 Fernando Perez <fperez@colorado.edu>
3193
3199
3194 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3200 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3195 for Numeric.array(map(...)), but often convenient.
3201 for Numeric.array(map(...)), but often convenient.
3196
3202
3197 2003-11-05 Fernando Perez <fperez@colorado.edu>
3203 2003-11-05 Fernando Perez <fperez@colorado.edu>
3198
3204
3199 * IPython/numutils.py (frange): Changed a call from int() to
3205 * IPython/numutils.py (frange): Changed a call from int() to
3200 int(round()) to prevent a problem reported with arange() in the
3206 int(round()) to prevent a problem reported with arange() in the
3201 numpy list.
3207 numpy list.
3202
3208
3203 2003-10-06 Fernando Perez <fperez@colorado.edu>
3209 2003-10-06 Fernando Perez <fperez@colorado.edu>
3204
3210
3205 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3211 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3206 prevent crashes if sys lacks an argv attribute (it happens with
3212 prevent crashes if sys lacks an argv attribute (it happens with
3207 embedded interpreters which build a bare-bones sys module).
3213 embedded interpreters which build a bare-bones sys module).
3208 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3214 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3209
3215
3210 2003-09-24 Fernando Perez <fperez@colorado.edu>
3216 2003-09-24 Fernando Perez <fperez@colorado.edu>
3211
3217
3212 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3218 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3213 to protect against poorly written user objects where __getattr__
3219 to protect against poorly written user objects where __getattr__
3214 raises exceptions other than AttributeError. Thanks to a bug
3220 raises exceptions other than AttributeError. Thanks to a bug
3215 report by Oliver Sander <osander-AT-gmx.de>.
3221 report by Oliver Sander <osander-AT-gmx.de>.
3216
3222
3217 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3223 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3218 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3224 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3219
3225
3220 2003-09-09 Fernando Perez <fperez@colorado.edu>
3226 2003-09-09 Fernando Perez <fperez@colorado.edu>
3221
3227
3222 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3228 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3223 unpacking a list whith a callable as first element would
3229 unpacking a list whith a callable as first element would
3224 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3230 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3225 Collins.
3231 Collins.
3226
3232
3227 2003-08-25 *** Released version 0.5.0
3233 2003-08-25 *** Released version 0.5.0
3228
3234
3229 2003-08-22 Fernando Perez <fperez@colorado.edu>
3235 2003-08-22 Fernando Perez <fperez@colorado.edu>
3230
3236
3231 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3237 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3232 improperly defined user exceptions. Thanks to feedback from Mark
3238 improperly defined user exceptions. Thanks to feedback from Mark
3233 Russell <mrussell-AT-verio.net>.
3239 Russell <mrussell-AT-verio.net>.
3234
3240
3235 2003-08-20 Fernando Perez <fperez@colorado.edu>
3241 2003-08-20 Fernando Perez <fperez@colorado.edu>
3236
3242
3237 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3243 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3238 printing so that it would print multi-line string forms starting
3244 printing so that it would print multi-line string forms starting
3239 with a new line. This way the formatting is better respected for
3245 with a new line. This way the formatting is better respected for
3240 objects which work hard to make nice string forms.
3246 objects which work hard to make nice string forms.
3241
3247
3242 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3248 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3243 autocall would overtake data access for objects with both
3249 autocall would overtake data access for objects with both
3244 __getitem__ and __call__.
3250 __getitem__ and __call__.
3245
3251
3246 2003-08-19 *** Released version 0.5.0-rc1
3252 2003-08-19 *** Released version 0.5.0-rc1
3247
3253
3248 2003-08-19 Fernando Perez <fperez@colorado.edu>
3254 2003-08-19 Fernando Perez <fperez@colorado.edu>
3249
3255
3250 * IPython/deep_reload.py (load_tail): single tiny change here
3256 * IPython/deep_reload.py (load_tail): single tiny change here
3251 seems to fix the long-standing bug of dreload() failing to work
3257 seems to fix the long-standing bug of dreload() failing to work
3252 for dotted names. But this module is pretty tricky, so I may have
3258 for dotted names. But this module is pretty tricky, so I may have
3253 missed some subtlety. Needs more testing!.
3259 missed some subtlety. Needs more testing!.
3254
3260
3255 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3261 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3256 exceptions which have badly implemented __str__ methods.
3262 exceptions which have badly implemented __str__ methods.
3257 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3263 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3258 which I've been getting reports about from Python 2.3 users. I
3264 which I've been getting reports about from Python 2.3 users. I
3259 wish I had a simple test case to reproduce the problem, so I could
3265 wish I had a simple test case to reproduce the problem, so I could
3260 either write a cleaner workaround or file a bug report if
3266 either write a cleaner workaround or file a bug report if
3261 necessary.
3267 necessary.
3262
3268
3263 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3269 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3264 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3270 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3265 a bug report by Tjabo Kloppenburg.
3271 a bug report by Tjabo Kloppenburg.
3266
3272
3267 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3273 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3268 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3274 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3269 seems rather unstable. Thanks to a bug report by Tjabo
3275 seems rather unstable. Thanks to a bug report by Tjabo
3270 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3276 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3271
3277
3272 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3278 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3273 this out soon because of the critical fixes in the inner loop for
3279 this out soon because of the critical fixes in the inner loop for
3274 generators.
3280 generators.
3275
3281
3276 * IPython/Magic.py (Magic.getargspec): removed. This (and
3282 * IPython/Magic.py (Magic.getargspec): removed. This (and
3277 _get_def) have been obsoleted by OInspect for a long time, I
3283 _get_def) have been obsoleted by OInspect for a long time, I
3278 hadn't noticed that they were dead code.
3284 hadn't noticed that they were dead code.
3279 (Magic._ofind): restored _ofind functionality for a few literals
3285 (Magic._ofind): restored _ofind functionality for a few literals
3280 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3286 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3281 for things like "hello".capitalize?, since that would require a
3287 for things like "hello".capitalize?, since that would require a
3282 potentially dangerous eval() again.
3288 potentially dangerous eval() again.
3283
3289
3284 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3290 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3285 logic a bit more to clean up the escapes handling and minimize the
3291 logic a bit more to clean up the escapes handling and minimize the
3286 use of _ofind to only necessary cases. The interactive 'feel' of
3292 use of _ofind to only necessary cases. The interactive 'feel' of
3287 IPython should have improved quite a bit with the changes in
3293 IPython should have improved quite a bit with the changes in
3288 _prefilter and _ofind (besides being far safer than before).
3294 _prefilter and _ofind (besides being far safer than before).
3289
3295
3290 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3296 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3291 obscure, never reported). Edit would fail to find the object to
3297 obscure, never reported). Edit would fail to find the object to
3292 edit under some circumstances.
3298 edit under some circumstances.
3293 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3299 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3294 which were causing double-calling of generators. Those eval calls
3300 which were causing double-calling of generators. Those eval calls
3295 were _very_ dangerous, since code with side effects could be
3301 were _very_ dangerous, since code with side effects could be
3296 triggered. As they say, 'eval is evil'... These were the
3302 triggered. As they say, 'eval is evil'... These were the
3297 nastiest evals in IPython. Besides, _ofind is now far simpler,
3303 nastiest evals in IPython. Besides, _ofind is now far simpler,
3298 and it should also be quite a bit faster. Its use of inspect is
3304 and it should also be quite a bit faster. Its use of inspect is
3299 also safer, so perhaps some of the inspect-related crashes I've
3305 also safer, so perhaps some of the inspect-related crashes I've
3300 seen lately with Python 2.3 might be taken care of. That will
3306 seen lately with Python 2.3 might be taken care of. That will
3301 need more testing.
3307 need more testing.
3302
3308
3303 2003-08-17 Fernando Perez <fperez@colorado.edu>
3309 2003-08-17 Fernando Perez <fperez@colorado.edu>
3304
3310
3305 * IPython/iplib.py (InteractiveShell._prefilter): significant
3311 * IPython/iplib.py (InteractiveShell._prefilter): significant
3306 simplifications to the logic for handling user escapes. Faster
3312 simplifications to the logic for handling user escapes. Faster
3307 and simpler code.
3313 and simpler code.
3308
3314
3309 2003-08-14 Fernando Perez <fperez@colorado.edu>
3315 2003-08-14 Fernando Perez <fperez@colorado.edu>
3310
3316
3311 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3317 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3312 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3318 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3313 but it should be quite a bit faster. And the recursive version
3319 but it should be quite a bit faster. And the recursive version
3314 generated O(log N) intermediate storage for all rank>1 arrays,
3320 generated O(log N) intermediate storage for all rank>1 arrays,
3315 even if they were contiguous.
3321 even if they were contiguous.
3316 (l1norm): Added this function.
3322 (l1norm): Added this function.
3317 (norm): Added this function for arbitrary norms (including
3323 (norm): Added this function for arbitrary norms (including
3318 l-infinity). l1 and l2 are still special cases for convenience
3324 l-infinity). l1 and l2 are still special cases for convenience
3319 and speed.
3325 and speed.
3320
3326
3321 2003-08-03 Fernando Perez <fperez@colorado.edu>
3327 2003-08-03 Fernando Perez <fperez@colorado.edu>
3322
3328
3323 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3329 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3324 exceptions, which now raise PendingDeprecationWarnings in Python
3330 exceptions, which now raise PendingDeprecationWarnings in Python
3325 2.3. There were some in Magic and some in Gnuplot2.
3331 2.3. There were some in Magic and some in Gnuplot2.
3326
3332
3327 2003-06-30 Fernando Perez <fperez@colorado.edu>
3333 2003-06-30 Fernando Perez <fperez@colorado.edu>
3328
3334
3329 * IPython/genutils.py (page): modified to call curses only for
3335 * IPython/genutils.py (page): modified to call curses only for
3330 terminals where TERM=='xterm'. After problems under many other
3336 terminals where TERM=='xterm'. After problems under many other
3331 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3337 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3332
3338
3333 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3339 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3334 would be triggered when readline was absent. This was just an old
3340 would be triggered when readline was absent. This was just an old
3335 debugging statement I'd forgotten to take out.
3341 debugging statement I'd forgotten to take out.
3336
3342
3337 2003-06-20 Fernando Perez <fperez@colorado.edu>
3343 2003-06-20 Fernando Perez <fperez@colorado.edu>
3338
3344
3339 * IPython/genutils.py (clock): modified to return only user time
3345 * IPython/genutils.py (clock): modified to return only user time
3340 (not counting system time), after a discussion on scipy. While
3346 (not counting system time), after a discussion on scipy. While
3341 system time may be a useful quantity occasionally, it may much
3347 system time may be a useful quantity occasionally, it may much
3342 more easily be skewed by occasional swapping or other similar
3348 more easily be skewed by occasional swapping or other similar
3343 activity.
3349 activity.
3344
3350
3345 2003-06-05 Fernando Perez <fperez@colorado.edu>
3351 2003-06-05 Fernando Perez <fperez@colorado.edu>
3346
3352
3347 * IPython/numutils.py (identity): new function, for building
3353 * IPython/numutils.py (identity): new function, for building
3348 arbitrary rank Kronecker deltas (mostly backwards compatible with
3354 arbitrary rank Kronecker deltas (mostly backwards compatible with
3349 Numeric.identity)
3355 Numeric.identity)
3350
3356
3351 2003-06-03 Fernando Perez <fperez@colorado.edu>
3357 2003-06-03 Fernando Perez <fperez@colorado.edu>
3352
3358
3353 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3359 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3354 arguments passed to magics with spaces, to allow trailing '\' to
3360 arguments passed to magics with spaces, to allow trailing '\' to
3355 work normally (mainly for Windows users).
3361 work normally (mainly for Windows users).
3356
3362
3357 2003-05-29 Fernando Perez <fperez@colorado.edu>
3363 2003-05-29 Fernando Perez <fperez@colorado.edu>
3358
3364
3359 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3365 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3360 instead of pydoc.help. This fixes a bizarre behavior where
3366 instead of pydoc.help. This fixes a bizarre behavior where
3361 printing '%s' % locals() would trigger the help system. Now
3367 printing '%s' % locals() would trigger the help system. Now
3362 ipython behaves like normal python does.
3368 ipython behaves like normal python does.
3363
3369
3364 Note that if one does 'from pydoc import help', the bizarre
3370 Note that if one does 'from pydoc import help', the bizarre
3365 behavior returns, but this will also happen in normal python, so
3371 behavior returns, but this will also happen in normal python, so
3366 it's not an ipython bug anymore (it has to do with how pydoc.help
3372 it's not an ipython bug anymore (it has to do with how pydoc.help
3367 is implemented).
3373 is implemented).
3368
3374
3369 2003-05-22 Fernando Perez <fperez@colorado.edu>
3375 2003-05-22 Fernando Perez <fperez@colorado.edu>
3370
3376
3371 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3377 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3372 return [] instead of None when nothing matches, also match to end
3378 return [] instead of None when nothing matches, also match to end
3373 of line. Patch by Gary Bishop.
3379 of line. Patch by Gary Bishop.
3374
3380
3375 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3381 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3376 protection as before, for files passed on the command line. This
3382 protection as before, for files passed on the command line. This
3377 prevents the CrashHandler from kicking in if user files call into
3383 prevents the CrashHandler from kicking in if user files call into
3378 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3384 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3379 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3385 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3380
3386
3381 2003-05-20 *** Released version 0.4.0
3387 2003-05-20 *** Released version 0.4.0
3382
3388
3383 2003-05-20 Fernando Perez <fperez@colorado.edu>
3389 2003-05-20 Fernando Perez <fperez@colorado.edu>
3384
3390
3385 * setup.py: added support for manpages. It's a bit hackish b/c of
3391 * setup.py: added support for manpages. It's a bit hackish b/c of
3386 a bug in the way the bdist_rpm distutils target handles gzipped
3392 a bug in the way the bdist_rpm distutils target handles gzipped
3387 manpages, but it works. After a patch by Jack.
3393 manpages, but it works. After a patch by Jack.
3388
3394
3389 2003-05-19 Fernando Perez <fperez@colorado.edu>
3395 2003-05-19 Fernando Perez <fperez@colorado.edu>
3390
3396
3391 * IPython/numutils.py: added a mockup of the kinds module, since
3397 * IPython/numutils.py: added a mockup of the kinds module, since
3392 it was recently removed from Numeric. This way, numutils will
3398 it was recently removed from Numeric. This way, numutils will
3393 work for all users even if they are missing kinds.
3399 work for all users even if they are missing kinds.
3394
3400
3395 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3401 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3396 failure, which can occur with SWIG-wrapped extensions. After a
3402 failure, which can occur with SWIG-wrapped extensions. After a
3397 crash report from Prabhu.
3403 crash report from Prabhu.
3398
3404
3399 2003-05-16 Fernando Perez <fperez@colorado.edu>
3405 2003-05-16 Fernando Perez <fperez@colorado.edu>
3400
3406
3401 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3407 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3402 protect ipython from user code which may call directly
3408 protect ipython from user code which may call directly
3403 sys.excepthook (this looks like an ipython crash to the user, even
3409 sys.excepthook (this looks like an ipython crash to the user, even
3404 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3410 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3405 This is especially important to help users of WxWindows, but may
3411 This is especially important to help users of WxWindows, but may
3406 also be useful in other cases.
3412 also be useful in other cases.
3407
3413
3408 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3414 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3409 an optional tb_offset to be specified, and to preserve exception
3415 an optional tb_offset to be specified, and to preserve exception
3410 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3416 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3411
3417
3412 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3418 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3413
3419
3414 2003-05-15 Fernando Perez <fperez@colorado.edu>
3420 2003-05-15 Fernando Perez <fperez@colorado.edu>
3415
3421
3416 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3422 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3417 installing for a new user under Windows.
3423 installing for a new user under Windows.
3418
3424
3419 2003-05-12 Fernando Perez <fperez@colorado.edu>
3425 2003-05-12 Fernando Perez <fperez@colorado.edu>
3420
3426
3421 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3427 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3422 handler for Emacs comint-based lines. Currently it doesn't do
3428 handler for Emacs comint-based lines. Currently it doesn't do
3423 much (but importantly, it doesn't update the history cache). In
3429 much (but importantly, it doesn't update the history cache). In
3424 the future it may be expanded if Alex needs more functionality
3430 the future it may be expanded if Alex needs more functionality
3425 there.
3431 there.
3426
3432
3427 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3433 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3428 info to crash reports.
3434 info to crash reports.
3429
3435
3430 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3436 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3431 just like Python's -c. Also fixed crash with invalid -color
3437 just like Python's -c. Also fixed crash with invalid -color
3432 option value at startup. Thanks to Will French
3438 option value at startup. Thanks to Will French
3433 <wfrench-AT-bestweb.net> for the bug report.
3439 <wfrench-AT-bestweb.net> for the bug report.
3434
3440
3435 2003-05-09 Fernando Perez <fperez@colorado.edu>
3441 2003-05-09 Fernando Perez <fperez@colorado.edu>
3436
3442
3437 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3443 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3438 to EvalDict (it's a mapping, after all) and simplified its code
3444 to EvalDict (it's a mapping, after all) and simplified its code
3439 quite a bit, after a nice discussion on c.l.py where Gustavo
3445 quite a bit, after a nice discussion on c.l.py where Gustavo
3440 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3446 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3441
3447
3442 2003-04-30 Fernando Perez <fperez@colorado.edu>
3448 2003-04-30 Fernando Perez <fperez@colorado.edu>
3443
3449
3444 * IPython/genutils.py (timings_out): modified it to reduce its
3450 * IPython/genutils.py (timings_out): modified it to reduce its
3445 overhead in the common reps==1 case.
3451 overhead in the common reps==1 case.
3446
3452
3447 2003-04-29 Fernando Perez <fperez@colorado.edu>
3453 2003-04-29 Fernando Perez <fperez@colorado.edu>
3448
3454
3449 * IPython/genutils.py (timings_out): Modified to use the resource
3455 * IPython/genutils.py (timings_out): Modified to use the resource
3450 module, which avoids the wraparound problems of time.clock().
3456 module, which avoids the wraparound problems of time.clock().
3451
3457
3452 2003-04-17 *** Released version 0.2.15pre4
3458 2003-04-17 *** Released version 0.2.15pre4
3453
3459
3454 2003-04-17 Fernando Perez <fperez@colorado.edu>
3460 2003-04-17 Fernando Perez <fperez@colorado.edu>
3455
3461
3456 * setup.py (scriptfiles): Split windows-specific stuff over to a
3462 * setup.py (scriptfiles): Split windows-specific stuff over to a
3457 separate file, in an attempt to have a Windows GUI installer.
3463 separate file, in an attempt to have a Windows GUI installer.
3458 That didn't work, but part of the groundwork is done.
3464 That didn't work, but part of the groundwork is done.
3459
3465
3460 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3466 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3461 indent/unindent with 4 spaces. Particularly useful in combination
3467 indent/unindent with 4 spaces. Particularly useful in combination
3462 with the new auto-indent option.
3468 with the new auto-indent option.
3463
3469
3464 2003-04-16 Fernando Perez <fperez@colorado.edu>
3470 2003-04-16 Fernando Perez <fperez@colorado.edu>
3465
3471
3466 * IPython/Magic.py: various replacements of self.rc for
3472 * IPython/Magic.py: various replacements of self.rc for
3467 self.shell.rc. A lot more remains to be done to fully disentangle
3473 self.shell.rc. A lot more remains to be done to fully disentangle
3468 this class from the main Shell class.
3474 this class from the main Shell class.
3469
3475
3470 * IPython/GnuplotRuntime.py: added checks for mouse support so
3476 * IPython/GnuplotRuntime.py: added checks for mouse support so
3471 that we don't try to enable it if the current gnuplot doesn't
3477 that we don't try to enable it if the current gnuplot doesn't
3472 really support it. Also added checks so that we don't try to
3478 really support it. Also added checks so that we don't try to
3473 enable persist under Windows (where Gnuplot doesn't recognize the
3479 enable persist under Windows (where Gnuplot doesn't recognize the
3474 option).
3480 option).
3475
3481
3476 * IPython/iplib.py (InteractiveShell.interact): Added optional
3482 * IPython/iplib.py (InteractiveShell.interact): Added optional
3477 auto-indenting code, after a patch by King C. Shu
3483 auto-indenting code, after a patch by King C. Shu
3478 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3484 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3479 get along well with pasting indented code. If I ever figure out
3485 get along well with pasting indented code. If I ever figure out
3480 how to make that part go well, it will become on by default.
3486 how to make that part go well, it will become on by default.
3481
3487
3482 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3488 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3483 crash ipython if there was an unmatched '%' in the user's prompt
3489 crash ipython if there was an unmatched '%' in the user's prompt
3484 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3490 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3485
3491
3486 * IPython/iplib.py (InteractiveShell.interact): removed the
3492 * IPython/iplib.py (InteractiveShell.interact): removed the
3487 ability to ask the user whether he wants to crash or not at the
3493 ability to ask the user whether he wants to crash or not at the
3488 'last line' exception handler. Calling functions at that point
3494 'last line' exception handler. Calling functions at that point
3489 changes the stack, and the error reports would have incorrect
3495 changes the stack, and the error reports would have incorrect
3490 tracebacks.
3496 tracebacks.
3491
3497
3492 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3498 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3493 pass through a peger a pretty-printed form of any object. After a
3499 pass through a peger a pretty-printed form of any object. After a
3494 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3500 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3495
3501
3496 2003-04-14 Fernando Perez <fperez@colorado.edu>
3502 2003-04-14 Fernando Perez <fperez@colorado.edu>
3497
3503
3498 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3504 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3499 all files in ~ would be modified at first install (instead of
3505 all files in ~ would be modified at first install (instead of
3500 ~/.ipython). This could be potentially disastrous, as the
3506 ~/.ipython). This could be potentially disastrous, as the
3501 modification (make line-endings native) could damage binary files.
3507 modification (make line-endings native) could damage binary files.
3502
3508
3503 2003-04-10 Fernando Perez <fperez@colorado.edu>
3509 2003-04-10 Fernando Perez <fperez@colorado.edu>
3504
3510
3505 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3511 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3506 handle only lines which are invalid python. This now means that
3512 handle only lines which are invalid python. This now means that
3507 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3513 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3508 for the bug report.
3514 for the bug report.
3509
3515
3510 2003-04-01 Fernando Perez <fperez@colorado.edu>
3516 2003-04-01 Fernando Perez <fperez@colorado.edu>
3511
3517
3512 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3518 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3513 where failing to set sys.last_traceback would crash pdb.pm().
3519 where failing to set sys.last_traceback would crash pdb.pm().
3514 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3520 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3515 report.
3521 report.
3516
3522
3517 2003-03-25 Fernando Perez <fperez@colorado.edu>
3523 2003-03-25 Fernando Perez <fperez@colorado.edu>
3518
3524
3519 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3525 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3520 before printing it (it had a lot of spurious blank lines at the
3526 before printing it (it had a lot of spurious blank lines at the
3521 end).
3527 end).
3522
3528
3523 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3529 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3524 output would be sent 21 times! Obviously people don't use this
3530 output would be sent 21 times! Obviously people don't use this
3525 too often, or I would have heard about it.
3531 too often, or I would have heard about it.
3526
3532
3527 2003-03-24 Fernando Perez <fperez@colorado.edu>
3533 2003-03-24 Fernando Perez <fperez@colorado.edu>
3528
3534
3529 * setup.py (scriptfiles): renamed the data_files parameter from
3535 * setup.py (scriptfiles): renamed the data_files parameter from
3530 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3536 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3531 for the patch.
3537 for the patch.
3532
3538
3533 2003-03-20 Fernando Perez <fperez@colorado.edu>
3539 2003-03-20 Fernando Perez <fperez@colorado.edu>
3534
3540
3535 * IPython/genutils.py (error): added error() and fatal()
3541 * IPython/genutils.py (error): added error() and fatal()
3536 functions.
3542 functions.
3537
3543
3538 2003-03-18 *** Released version 0.2.15pre3
3544 2003-03-18 *** Released version 0.2.15pre3
3539
3545
3540 2003-03-18 Fernando Perez <fperez@colorado.edu>
3546 2003-03-18 Fernando Perez <fperez@colorado.edu>
3541
3547
3542 * setupext/install_data_ext.py
3548 * setupext/install_data_ext.py
3543 (install_data_ext.initialize_options): Class contributed by Jack
3549 (install_data_ext.initialize_options): Class contributed by Jack
3544 Moffit for fixing the old distutils hack. He is sending this to
3550 Moffit for fixing the old distutils hack. He is sending this to
3545 the distutils folks so in the future we may not need it as a
3551 the distutils folks so in the future we may not need it as a
3546 private fix.
3552 private fix.
3547
3553
3548 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3554 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3549 changes for Debian packaging. See his patch for full details.
3555 changes for Debian packaging. See his patch for full details.
3550 The old distutils hack of making the ipythonrc* files carry a
3556 The old distutils hack of making the ipythonrc* files carry a
3551 bogus .py extension is gone, at last. Examples were moved to a
3557 bogus .py extension is gone, at last. Examples were moved to a
3552 separate subdir under doc/, and the separate executable scripts
3558 separate subdir under doc/, and the separate executable scripts
3553 now live in their own directory. Overall a great cleanup. The
3559 now live in their own directory. Overall a great cleanup. The
3554 manual was updated to use the new files, and setup.py has been
3560 manual was updated to use the new files, and setup.py has been
3555 fixed for this setup.
3561 fixed for this setup.
3556
3562
3557 * IPython/PyColorize.py (Parser.usage): made non-executable and
3563 * IPython/PyColorize.py (Parser.usage): made non-executable and
3558 created a pycolor wrapper around it to be included as a script.
3564 created a pycolor wrapper around it to be included as a script.
3559
3565
3560 2003-03-12 *** Released version 0.2.15pre2
3566 2003-03-12 *** Released version 0.2.15pre2
3561
3567
3562 2003-03-12 Fernando Perez <fperez@colorado.edu>
3568 2003-03-12 Fernando Perez <fperez@colorado.edu>
3563
3569
3564 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3570 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3565 long-standing problem with garbage characters in some terminals.
3571 long-standing problem with garbage characters in some terminals.
3566 The issue was really that the \001 and \002 escapes must _only_ be
3572 The issue was really that the \001 and \002 escapes must _only_ be
3567 passed to input prompts (which call readline), but _never_ to
3573 passed to input prompts (which call readline), but _never_ to
3568 normal text to be printed on screen. I changed ColorANSI to have
3574 normal text to be printed on screen. I changed ColorANSI to have
3569 two classes: TermColors and InputTermColors, each with the
3575 two classes: TermColors and InputTermColors, each with the
3570 appropriate escapes for input prompts or normal text. The code in
3576 appropriate escapes for input prompts or normal text. The code in
3571 Prompts.py got slightly more complicated, but this very old and
3577 Prompts.py got slightly more complicated, but this very old and
3572 annoying bug is finally fixed.
3578 annoying bug is finally fixed.
3573
3579
3574 All the credit for nailing down the real origin of this problem
3580 All the credit for nailing down the real origin of this problem
3575 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3581 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3576 *Many* thanks to him for spending quite a bit of effort on this.
3582 *Many* thanks to him for spending quite a bit of effort on this.
3577
3583
3578 2003-03-05 *** Released version 0.2.15pre1
3584 2003-03-05 *** Released version 0.2.15pre1
3579
3585
3580 2003-03-03 Fernando Perez <fperez@colorado.edu>
3586 2003-03-03 Fernando Perez <fperez@colorado.edu>
3581
3587
3582 * IPython/FakeModule.py: Moved the former _FakeModule to a
3588 * IPython/FakeModule.py: Moved the former _FakeModule to a
3583 separate file, because it's also needed by Magic (to fix a similar
3589 separate file, because it's also needed by Magic (to fix a similar
3584 pickle-related issue in @run).
3590 pickle-related issue in @run).
3585
3591
3586 2003-03-02 Fernando Perez <fperez@colorado.edu>
3592 2003-03-02 Fernando Perez <fperez@colorado.edu>
3587
3593
3588 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3594 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3589 the autocall option at runtime.
3595 the autocall option at runtime.
3590 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3596 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3591 across Magic.py to start separating Magic from InteractiveShell.
3597 across Magic.py to start separating Magic from InteractiveShell.
3592 (Magic._ofind): Fixed to return proper namespace for dotted
3598 (Magic._ofind): Fixed to return proper namespace for dotted
3593 names. Before, a dotted name would always return 'not currently
3599 names. Before, a dotted name would always return 'not currently
3594 defined', because it would find the 'parent'. s.x would be found,
3600 defined', because it would find the 'parent'. s.x would be found,
3595 but since 'x' isn't defined by itself, it would get confused.
3601 but since 'x' isn't defined by itself, it would get confused.
3596 (Magic.magic_run): Fixed pickling problems reported by Ralf
3602 (Magic.magic_run): Fixed pickling problems reported by Ralf
3597 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3603 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3598 that I'd used when Mike Heeter reported similar issues at the
3604 that I'd used when Mike Heeter reported similar issues at the
3599 top-level, but now for @run. It boils down to injecting the
3605 top-level, but now for @run. It boils down to injecting the
3600 namespace where code is being executed with something that looks
3606 namespace where code is being executed with something that looks
3601 enough like a module to fool pickle.dump(). Since a pickle stores
3607 enough like a module to fool pickle.dump(). Since a pickle stores
3602 a named reference to the importing module, we need this for
3608 a named reference to the importing module, we need this for
3603 pickles to save something sensible.
3609 pickles to save something sensible.
3604
3610
3605 * IPython/ipmaker.py (make_IPython): added an autocall option.
3611 * IPython/ipmaker.py (make_IPython): added an autocall option.
3606
3612
3607 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3613 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3608 the auto-eval code. Now autocalling is an option, and the code is
3614 the auto-eval code. Now autocalling is an option, and the code is
3609 also vastly safer. There is no more eval() involved at all.
3615 also vastly safer. There is no more eval() involved at all.
3610
3616
3611 2003-03-01 Fernando Perez <fperez@colorado.edu>
3617 2003-03-01 Fernando Perez <fperez@colorado.edu>
3612
3618
3613 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3619 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3614 dict with named keys instead of a tuple.
3620 dict with named keys instead of a tuple.
3615
3621
3616 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3622 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3617
3623
3618 * setup.py (make_shortcut): Fixed message about directories
3624 * setup.py (make_shortcut): Fixed message about directories
3619 created during Windows installation (the directories were ok, just
3625 created during Windows installation (the directories were ok, just
3620 the printed message was misleading). Thanks to Chris Liechti
3626 the printed message was misleading). Thanks to Chris Liechti
3621 <cliechti-AT-gmx.net> for the heads up.
3627 <cliechti-AT-gmx.net> for the heads up.
3622
3628
3623 2003-02-21 Fernando Perez <fperez@colorado.edu>
3629 2003-02-21 Fernando Perez <fperez@colorado.edu>
3624
3630
3625 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3631 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3626 of ValueError exception when checking for auto-execution. This
3632 of ValueError exception when checking for auto-execution. This
3627 one is raised by things like Numeric arrays arr.flat when the
3633 one is raised by things like Numeric arrays arr.flat when the
3628 array is non-contiguous.
3634 array is non-contiguous.
3629
3635
3630 2003-01-31 Fernando Perez <fperez@colorado.edu>
3636 2003-01-31 Fernando Perez <fperez@colorado.edu>
3631
3637
3632 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3638 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3633 not return any value at all (even though the command would get
3639 not return any value at all (even though the command would get
3634 executed).
3640 executed).
3635 (xsys): Flush stdout right after printing the command to ensure
3641 (xsys): Flush stdout right after printing the command to ensure
3636 proper ordering of commands and command output in the total
3642 proper ordering of commands and command output in the total
3637 output.
3643 output.
3638 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3644 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3639 system/getoutput as defaults. The old ones are kept for
3645 system/getoutput as defaults. The old ones are kept for
3640 compatibility reasons, so no code which uses this library needs
3646 compatibility reasons, so no code which uses this library needs
3641 changing.
3647 changing.
3642
3648
3643 2003-01-27 *** Released version 0.2.14
3649 2003-01-27 *** Released version 0.2.14
3644
3650
3645 2003-01-25 Fernando Perez <fperez@colorado.edu>
3651 2003-01-25 Fernando Perez <fperez@colorado.edu>
3646
3652
3647 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3653 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3648 functions defined in previous edit sessions could not be re-edited
3654 functions defined in previous edit sessions could not be re-edited
3649 (because the temp files were immediately removed). Now temp files
3655 (because the temp files were immediately removed). Now temp files
3650 are removed only at IPython's exit.
3656 are removed only at IPython's exit.
3651 (Magic.magic_run): Improved @run to perform shell-like expansions
3657 (Magic.magic_run): Improved @run to perform shell-like expansions
3652 on its arguments (~users and $VARS). With this, @run becomes more
3658 on its arguments (~users and $VARS). With this, @run becomes more
3653 like a normal command-line.
3659 like a normal command-line.
3654
3660
3655 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3661 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3656 bugs related to embedding and cleaned up that code. A fairly
3662 bugs related to embedding and cleaned up that code. A fairly
3657 important one was the impossibility to access the global namespace
3663 important one was the impossibility to access the global namespace
3658 through the embedded IPython (only local variables were visible).
3664 through the embedded IPython (only local variables were visible).
3659
3665
3660 2003-01-14 Fernando Perez <fperez@colorado.edu>
3666 2003-01-14 Fernando Perez <fperez@colorado.edu>
3661
3667
3662 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3668 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3663 auto-calling to be a bit more conservative. Now it doesn't get
3669 auto-calling to be a bit more conservative. Now it doesn't get
3664 triggered if any of '!=()<>' are in the rest of the input line, to
3670 triggered if any of '!=()<>' are in the rest of the input line, to
3665 allow comparing callables. Thanks to Alex for the heads up.
3671 allow comparing callables. Thanks to Alex for the heads up.
3666
3672
3667 2003-01-07 Fernando Perez <fperez@colorado.edu>
3673 2003-01-07 Fernando Perez <fperez@colorado.edu>
3668
3674
3669 * IPython/genutils.py (page): fixed estimation of the number of
3675 * IPython/genutils.py (page): fixed estimation of the number of
3670 lines in a string to be paged to simply count newlines. This
3676 lines in a string to be paged to simply count newlines. This
3671 prevents over-guessing due to embedded escape sequences. A better
3677 prevents over-guessing due to embedded escape sequences. A better
3672 long-term solution would involve stripping out the control chars
3678 long-term solution would involve stripping out the control chars
3673 for the count, but it's potentially so expensive I just don't
3679 for the count, but it's potentially so expensive I just don't
3674 think it's worth doing.
3680 think it's worth doing.
3675
3681
3676 2002-12-19 *** Released version 0.2.14pre50
3682 2002-12-19 *** Released version 0.2.14pre50
3677
3683
3678 2002-12-19 Fernando Perez <fperez@colorado.edu>
3684 2002-12-19 Fernando Perez <fperez@colorado.edu>
3679
3685
3680 * tools/release (version): Changed release scripts to inform
3686 * tools/release (version): Changed release scripts to inform
3681 Andrea and build a NEWS file with a list of recent changes.
3687 Andrea and build a NEWS file with a list of recent changes.
3682
3688
3683 * IPython/ColorANSI.py (__all__): changed terminal detection
3689 * IPython/ColorANSI.py (__all__): changed terminal detection
3684 code. Seems to work better for xterms without breaking
3690 code. Seems to work better for xterms without breaking
3685 konsole. Will need more testing to determine if WinXP and Mac OSX
3691 konsole. Will need more testing to determine if WinXP and Mac OSX
3686 also work ok.
3692 also work ok.
3687
3693
3688 2002-12-18 *** Released version 0.2.14pre49
3694 2002-12-18 *** Released version 0.2.14pre49
3689
3695
3690 2002-12-18 Fernando Perez <fperez@colorado.edu>
3696 2002-12-18 Fernando Perez <fperez@colorado.edu>
3691
3697
3692 * Docs: added new info about Mac OSX, from Andrea.
3698 * Docs: added new info about Mac OSX, from Andrea.
3693
3699
3694 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3700 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3695 allow direct plotting of python strings whose format is the same
3701 allow direct plotting of python strings whose format is the same
3696 of gnuplot data files.
3702 of gnuplot data files.
3697
3703
3698 2002-12-16 Fernando Perez <fperez@colorado.edu>
3704 2002-12-16 Fernando Perez <fperez@colorado.edu>
3699
3705
3700 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3706 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3701 value of exit question to be acknowledged.
3707 value of exit question to be acknowledged.
3702
3708
3703 2002-12-03 Fernando Perez <fperez@colorado.edu>
3709 2002-12-03 Fernando Perez <fperez@colorado.edu>
3704
3710
3705 * IPython/ipmaker.py: removed generators, which had been added
3711 * IPython/ipmaker.py: removed generators, which had been added
3706 by mistake in an earlier debugging run. This was causing trouble
3712 by mistake in an earlier debugging run. This was causing trouble
3707 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3713 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3708 for pointing this out.
3714 for pointing this out.
3709
3715
3710 2002-11-17 Fernando Perez <fperez@colorado.edu>
3716 2002-11-17 Fernando Perez <fperez@colorado.edu>
3711
3717
3712 * Manual: updated the Gnuplot section.
3718 * Manual: updated the Gnuplot section.
3713
3719
3714 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3720 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3715 a much better split of what goes in Runtime and what goes in
3721 a much better split of what goes in Runtime and what goes in
3716 Interactive.
3722 Interactive.
3717
3723
3718 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3724 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3719 being imported from iplib.
3725 being imported from iplib.
3720
3726
3721 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3727 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3722 for command-passing. Now the global Gnuplot instance is called
3728 for command-passing. Now the global Gnuplot instance is called
3723 'gp' instead of 'g', which was really a far too fragile and
3729 'gp' instead of 'g', which was really a far too fragile and
3724 common name.
3730 common name.
3725
3731
3726 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3732 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3727 bounding boxes generated by Gnuplot for square plots.
3733 bounding boxes generated by Gnuplot for square plots.
3728
3734
3729 * IPython/genutils.py (popkey): new function added. I should
3735 * IPython/genutils.py (popkey): new function added. I should
3730 suggest this on c.l.py as a dict method, it seems useful.
3736 suggest this on c.l.py as a dict method, it seems useful.
3731
3737
3732 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3738 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3733 to transparently handle PostScript generation. MUCH better than
3739 to transparently handle PostScript generation. MUCH better than
3734 the previous plot_eps/replot_eps (which I removed now). The code
3740 the previous plot_eps/replot_eps (which I removed now). The code
3735 is also fairly clean and well documented now (including
3741 is also fairly clean and well documented now (including
3736 docstrings).
3742 docstrings).
3737
3743
3738 2002-11-13 Fernando Perez <fperez@colorado.edu>
3744 2002-11-13 Fernando Perez <fperez@colorado.edu>
3739
3745
3740 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3746 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3741 (inconsistent with options).
3747 (inconsistent with options).
3742
3748
3743 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3749 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3744 manually disabled, I don't know why. Fixed it.
3750 manually disabled, I don't know why. Fixed it.
3745 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3751 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3746 eps output.
3752 eps output.
3747
3753
3748 2002-11-12 Fernando Perez <fperez@colorado.edu>
3754 2002-11-12 Fernando Perez <fperez@colorado.edu>
3749
3755
3750 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3756 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3751 don't propagate up to caller. Fixes crash reported by François
3757 don't propagate up to caller. Fixes crash reported by François
3752 Pinard.
3758 Pinard.
3753
3759
3754 2002-11-09 Fernando Perez <fperez@colorado.edu>
3760 2002-11-09 Fernando Perez <fperez@colorado.edu>
3755
3761
3756 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3762 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3757 history file for new users.
3763 history file for new users.
3758 (make_IPython): fixed bug where initial install would leave the
3764 (make_IPython): fixed bug where initial install would leave the
3759 user running in the .ipython dir.
3765 user running in the .ipython dir.
3760 (make_IPython): fixed bug where config dir .ipython would be
3766 (make_IPython): fixed bug where config dir .ipython would be
3761 created regardless of the given -ipythondir option. Thanks to Cory
3767 created regardless of the given -ipythondir option. Thanks to Cory
3762 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3768 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3763
3769
3764 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3770 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3765 type confirmations. Will need to use it in all of IPython's code
3771 type confirmations. Will need to use it in all of IPython's code
3766 consistently.
3772 consistently.
3767
3773
3768 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3774 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3769 context to print 31 lines instead of the default 5. This will make
3775 context to print 31 lines instead of the default 5. This will make
3770 the crash reports extremely detailed in case the problem is in
3776 the crash reports extremely detailed in case the problem is in
3771 libraries I don't have access to.
3777 libraries I don't have access to.
3772
3778
3773 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3779 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3774 line of defense' code to still crash, but giving users fair
3780 line of defense' code to still crash, but giving users fair
3775 warning. I don't want internal errors to go unreported: if there's
3781 warning. I don't want internal errors to go unreported: if there's
3776 an internal problem, IPython should crash and generate a full
3782 an internal problem, IPython should crash and generate a full
3777 report.
3783 report.
3778
3784
3779 2002-11-08 Fernando Perez <fperez@colorado.edu>
3785 2002-11-08 Fernando Perez <fperez@colorado.edu>
3780
3786
3781 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3787 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3782 otherwise uncaught exceptions which can appear if people set
3788 otherwise uncaught exceptions which can appear if people set
3783 sys.stdout to something badly broken. Thanks to a crash report
3789 sys.stdout to something badly broken. Thanks to a crash report
3784 from henni-AT-mail.brainbot.com.
3790 from henni-AT-mail.brainbot.com.
3785
3791
3786 2002-11-04 Fernando Perez <fperez@colorado.edu>
3792 2002-11-04 Fernando Perez <fperez@colorado.edu>
3787
3793
3788 * IPython/iplib.py (InteractiveShell.interact): added
3794 * IPython/iplib.py (InteractiveShell.interact): added
3789 __IPYTHON__active to the builtins. It's a flag which goes on when
3795 __IPYTHON__active to the builtins. It's a flag which goes on when
3790 the interaction starts and goes off again when it stops. This
3796 the interaction starts and goes off again when it stops. This
3791 allows embedding code to detect being inside IPython. Before this
3797 allows embedding code to detect being inside IPython. Before this
3792 was done via __IPYTHON__, but that only shows that an IPython
3798 was done via __IPYTHON__, but that only shows that an IPython
3793 instance has been created.
3799 instance has been created.
3794
3800
3795 * IPython/Magic.py (Magic.magic_env): I realized that in a
3801 * IPython/Magic.py (Magic.magic_env): I realized that in a
3796 UserDict, instance.data holds the data as a normal dict. So I
3802 UserDict, instance.data holds the data as a normal dict. So I
3797 modified @env to return os.environ.data instead of rebuilding a
3803 modified @env to return os.environ.data instead of rebuilding a
3798 dict by hand.
3804 dict by hand.
3799
3805
3800 2002-11-02 Fernando Perez <fperez@colorado.edu>
3806 2002-11-02 Fernando Perez <fperez@colorado.edu>
3801
3807
3802 * IPython/genutils.py (warn): changed so that level 1 prints no
3808 * IPython/genutils.py (warn): changed so that level 1 prints no
3803 header. Level 2 is now the default (with 'WARNING' header, as
3809 header. Level 2 is now the default (with 'WARNING' header, as
3804 before). I think I tracked all places where changes were needed in
3810 before). I think I tracked all places where changes were needed in
3805 IPython, but outside code using the old level numbering may have
3811 IPython, but outside code using the old level numbering may have
3806 broken.
3812 broken.
3807
3813
3808 * IPython/iplib.py (InteractiveShell.runcode): added this to
3814 * IPython/iplib.py (InteractiveShell.runcode): added this to
3809 handle the tracebacks in SystemExit traps correctly. The previous
3815 handle the tracebacks in SystemExit traps correctly. The previous
3810 code (through interact) was printing more of the stack than
3816 code (through interact) was printing more of the stack than
3811 necessary, showing IPython internal code to the user.
3817 necessary, showing IPython internal code to the user.
3812
3818
3813 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3819 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3814 default. Now that the default at the confirmation prompt is yes,
3820 default. Now that the default at the confirmation prompt is yes,
3815 it's not so intrusive. François' argument that ipython sessions
3821 it's not so intrusive. François' argument that ipython sessions
3816 tend to be complex enough not to lose them from an accidental C-d,
3822 tend to be complex enough not to lose them from an accidental C-d,
3817 is a valid one.
3823 is a valid one.
3818
3824
3819 * IPython/iplib.py (InteractiveShell.interact): added a
3825 * IPython/iplib.py (InteractiveShell.interact): added a
3820 showtraceback() call to the SystemExit trap, and modified the exit
3826 showtraceback() call to the SystemExit trap, and modified the exit
3821 confirmation to have yes as the default.
3827 confirmation to have yes as the default.
3822
3828
3823 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3829 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3824 this file. It's been gone from the code for a long time, this was
3830 this file. It's been gone from the code for a long time, this was
3825 simply leftover junk.
3831 simply leftover junk.
3826
3832
3827 2002-11-01 Fernando Perez <fperez@colorado.edu>
3833 2002-11-01 Fernando Perez <fperez@colorado.edu>
3828
3834
3829 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3835 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3830 added. If set, IPython now traps EOF and asks for
3836 added. If set, IPython now traps EOF and asks for
3831 confirmation. After a request by François Pinard.
3837 confirmation. After a request by François Pinard.
3832
3838
3833 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3839 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3834 of @abort, and with a new (better) mechanism for handling the
3840 of @abort, and with a new (better) mechanism for handling the
3835 exceptions.
3841 exceptions.
3836
3842
3837 2002-10-27 Fernando Perez <fperez@colorado.edu>
3843 2002-10-27 Fernando Perez <fperez@colorado.edu>
3838
3844
3839 * IPython/usage.py (__doc__): updated the --help information and
3845 * IPython/usage.py (__doc__): updated the --help information and
3840 the ipythonrc file to indicate that -log generates
3846 the ipythonrc file to indicate that -log generates
3841 ./ipython.log. Also fixed the corresponding info in @logstart.
3847 ./ipython.log. Also fixed the corresponding info in @logstart.
3842 This and several other fixes in the manuals thanks to reports by
3848 This and several other fixes in the manuals thanks to reports by
3843 François Pinard <pinard-AT-iro.umontreal.ca>.
3849 François Pinard <pinard-AT-iro.umontreal.ca>.
3844
3850
3845 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3851 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3846 refer to @logstart (instead of @log, which doesn't exist).
3852 refer to @logstart (instead of @log, which doesn't exist).
3847
3853
3848 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3854 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3849 AttributeError crash. Thanks to Christopher Armstrong
3855 AttributeError crash. Thanks to Christopher Armstrong
3850 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3856 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3851 introduced recently (in 0.2.14pre37) with the fix to the eval
3857 introduced recently (in 0.2.14pre37) with the fix to the eval
3852 problem mentioned below.
3858 problem mentioned below.
3853
3859
3854 2002-10-17 Fernando Perez <fperez@colorado.edu>
3860 2002-10-17 Fernando Perez <fperez@colorado.edu>
3855
3861
3856 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3862 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3857 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3863 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3858
3864
3859 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3865 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3860 this function to fix a problem reported by Alex Schmolck. He saw
3866 this function to fix a problem reported by Alex Schmolck. He saw
3861 it with list comprehensions and generators, which were getting
3867 it with list comprehensions and generators, which were getting
3862 called twice. The real problem was an 'eval' call in testing for
3868 called twice. The real problem was an 'eval' call in testing for
3863 automagic which was evaluating the input line silently.
3869 automagic which was evaluating the input line silently.
3864
3870
3865 This is a potentially very nasty bug, if the input has side
3871 This is a potentially very nasty bug, if the input has side
3866 effects which must not be repeated. The code is much cleaner now,
3872 effects which must not be repeated. The code is much cleaner now,
3867 without any blanket 'except' left and with a regexp test for
3873 without any blanket 'except' left and with a regexp test for
3868 actual function names.
3874 actual function names.
3869
3875
3870 But an eval remains, which I'm not fully comfortable with. I just
3876 But an eval remains, which I'm not fully comfortable with. I just
3871 don't know how to find out if an expression could be a callable in
3877 don't know how to find out if an expression could be a callable in
3872 the user's namespace without doing an eval on the string. However
3878 the user's namespace without doing an eval on the string. However
3873 that string is now much more strictly checked so that no code
3879 that string is now much more strictly checked so that no code
3874 slips by, so the eval should only happen for things that can
3880 slips by, so the eval should only happen for things that can
3875 really be only function/method names.
3881 really be only function/method names.
3876
3882
3877 2002-10-15 Fernando Perez <fperez@colorado.edu>
3883 2002-10-15 Fernando Perez <fperez@colorado.edu>
3878
3884
3879 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3885 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3880 OSX information to main manual, removed README_Mac_OSX file from
3886 OSX information to main manual, removed README_Mac_OSX file from
3881 distribution. Also updated credits for recent additions.
3887 distribution. Also updated credits for recent additions.
3882
3888
3883 2002-10-10 Fernando Perez <fperez@colorado.edu>
3889 2002-10-10 Fernando Perez <fperez@colorado.edu>
3884
3890
3885 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3891 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3886 terminal-related issues. Many thanks to Andrea Riciputi
3892 terminal-related issues. Many thanks to Andrea Riciputi
3887 <andrea.riciputi-AT-libero.it> for writing it.
3893 <andrea.riciputi-AT-libero.it> for writing it.
3888
3894
3889 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3895 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3890 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3896 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3891
3897
3892 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3898 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3893 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3899 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3894 <syver-en-AT-online.no> who both submitted patches for this problem.
3900 <syver-en-AT-online.no> who both submitted patches for this problem.
3895
3901
3896 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3902 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3897 global embedding to make sure that things don't overwrite user
3903 global embedding to make sure that things don't overwrite user
3898 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3904 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3899
3905
3900 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3906 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3901 compatibility. Thanks to Hayden Callow
3907 compatibility. Thanks to Hayden Callow
3902 <h.callow-AT-elec.canterbury.ac.nz>
3908 <h.callow-AT-elec.canterbury.ac.nz>
3903
3909
3904 2002-10-04 Fernando Perez <fperez@colorado.edu>
3910 2002-10-04 Fernando Perez <fperez@colorado.edu>
3905
3911
3906 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3912 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3907 Gnuplot.File objects.
3913 Gnuplot.File objects.
3908
3914
3909 2002-07-23 Fernando Perez <fperez@colorado.edu>
3915 2002-07-23 Fernando Perez <fperez@colorado.edu>
3910
3916
3911 * IPython/genutils.py (timing): Added timings() and timing() for
3917 * IPython/genutils.py (timing): Added timings() and timing() for
3912 quick access to the most commonly needed data, the execution
3918 quick access to the most commonly needed data, the execution
3913 times. Old timing() renamed to timings_out().
3919 times. Old timing() renamed to timings_out().
3914
3920
3915 2002-07-18 Fernando Perez <fperez@colorado.edu>
3921 2002-07-18 Fernando Perez <fperez@colorado.edu>
3916
3922
3917 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3923 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3918 bug with nested instances disrupting the parent's tab completion.
3924 bug with nested instances disrupting the parent's tab completion.
3919
3925
3920 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3926 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3921 all_completions code to begin the emacs integration.
3927 all_completions code to begin the emacs integration.
3922
3928
3923 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3929 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3924 argument to allow titling individual arrays when plotting.
3930 argument to allow titling individual arrays when plotting.
3925
3931
3926 2002-07-15 Fernando Perez <fperez@colorado.edu>
3932 2002-07-15 Fernando Perez <fperez@colorado.edu>
3927
3933
3928 * setup.py (make_shortcut): changed to retrieve the value of
3934 * setup.py (make_shortcut): changed to retrieve the value of
3929 'Program Files' directory from the registry (this value changes in
3935 'Program Files' directory from the registry (this value changes in
3930 non-english versions of Windows). Thanks to Thomas Fanslau
3936 non-english versions of Windows). Thanks to Thomas Fanslau
3931 <tfanslau-AT-gmx.de> for the report.
3937 <tfanslau-AT-gmx.de> for the report.
3932
3938
3933 2002-07-10 Fernando Perez <fperez@colorado.edu>
3939 2002-07-10 Fernando Perez <fperez@colorado.edu>
3934
3940
3935 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3941 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3936 a bug in pdb, which crashes if a line with only whitespace is
3942 a bug in pdb, which crashes if a line with only whitespace is
3937 entered. Bug report submitted to sourceforge.
3943 entered. Bug report submitted to sourceforge.
3938
3944
3939 2002-07-09 Fernando Perez <fperez@colorado.edu>
3945 2002-07-09 Fernando Perez <fperez@colorado.edu>
3940
3946
3941 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3947 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3942 reporting exceptions (it's a bug in inspect.py, I just set a
3948 reporting exceptions (it's a bug in inspect.py, I just set a
3943 workaround).
3949 workaround).
3944
3950
3945 2002-07-08 Fernando Perez <fperez@colorado.edu>
3951 2002-07-08 Fernando Perez <fperez@colorado.edu>
3946
3952
3947 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3953 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3948 __IPYTHON__ in __builtins__ to show up in user_ns.
3954 __IPYTHON__ in __builtins__ to show up in user_ns.
3949
3955
3950 2002-07-03 Fernando Perez <fperez@colorado.edu>
3956 2002-07-03 Fernando Perez <fperez@colorado.edu>
3951
3957
3952 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3958 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3953 name from @gp_set_instance to @gp_set_default.
3959 name from @gp_set_instance to @gp_set_default.
3954
3960
3955 * IPython/ipmaker.py (make_IPython): default editor value set to
3961 * IPython/ipmaker.py (make_IPython): default editor value set to
3956 '0' (a string), to match the rc file. Otherwise will crash when
3962 '0' (a string), to match the rc file. Otherwise will crash when
3957 .strip() is called on it.
3963 .strip() is called on it.
3958
3964
3959
3965
3960 2002-06-28 Fernando Perez <fperez@colorado.edu>
3966 2002-06-28 Fernando Perez <fperez@colorado.edu>
3961
3967
3962 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3968 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3963 of files in current directory when a file is executed via
3969 of files in current directory when a file is executed via
3964 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3970 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3965
3971
3966 * setup.py (manfiles): fix for rpm builds, submitted by RA
3972 * setup.py (manfiles): fix for rpm builds, submitted by RA
3967 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3973 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3968
3974
3969 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3975 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3970 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3976 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3971 string!). A. Schmolck caught this one.
3977 string!). A. Schmolck caught this one.
3972
3978
3973 2002-06-27 Fernando Perez <fperez@colorado.edu>
3979 2002-06-27 Fernando Perez <fperez@colorado.edu>
3974
3980
3975 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3981 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3976 defined files at the cmd line. __name__ wasn't being set to
3982 defined files at the cmd line. __name__ wasn't being set to
3977 __main__.
3983 __main__.
3978
3984
3979 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3985 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3980 regular lists and tuples besides Numeric arrays.
3986 regular lists and tuples besides Numeric arrays.
3981
3987
3982 * IPython/Prompts.py (CachedOutput.__call__): Added output
3988 * IPython/Prompts.py (CachedOutput.__call__): Added output
3983 supression for input ending with ';'. Similar to Mathematica and
3989 supression for input ending with ';'. Similar to Mathematica and
3984 Matlab. The _* vars and Out[] list are still updated, just like
3990 Matlab. The _* vars and Out[] list are still updated, just like
3985 Mathematica behaves.
3991 Mathematica behaves.
3986
3992
3987 2002-06-25 Fernando Perez <fperez@colorado.edu>
3993 2002-06-25 Fernando Perez <fperez@colorado.edu>
3988
3994
3989 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3995 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3990 .ini extensions for profiels under Windows.
3996 .ini extensions for profiels under Windows.
3991
3997
3992 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3998 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3993 string form. Fix contributed by Alexander Schmolck
3999 string form. Fix contributed by Alexander Schmolck
3994 <a.schmolck-AT-gmx.net>
4000 <a.schmolck-AT-gmx.net>
3995
4001
3996 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
4002 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3997 pre-configured Gnuplot instance.
4003 pre-configured Gnuplot instance.
3998
4004
3999 2002-06-21 Fernando Perez <fperez@colorado.edu>
4005 2002-06-21 Fernando Perez <fperez@colorado.edu>
4000
4006
4001 * IPython/numutils.py (exp_safe): new function, works around the
4007 * IPython/numutils.py (exp_safe): new function, works around the
4002 underflow problems in Numeric.
4008 underflow problems in Numeric.
4003 (log2): New fn. Safe log in base 2: returns exact integer answer
4009 (log2): New fn. Safe log in base 2: returns exact integer answer
4004 for exact integer powers of 2.
4010 for exact integer powers of 2.
4005
4011
4006 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
4012 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
4007 properly.
4013 properly.
4008
4014
4009 2002-06-20 Fernando Perez <fperez@colorado.edu>
4015 2002-06-20 Fernando Perez <fperez@colorado.edu>
4010
4016
4011 * IPython/genutils.py (timing): new function like
4017 * IPython/genutils.py (timing): new function like
4012 Mathematica's. Similar to time_test, but returns more info.
4018 Mathematica's. Similar to time_test, but returns more info.
4013
4019
4014 2002-06-18 Fernando Perez <fperez@colorado.edu>
4020 2002-06-18 Fernando Perez <fperez@colorado.edu>
4015
4021
4016 * IPython/Magic.py (Magic.magic_save): modified @save and @r
4022 * IPython/Magic.py (Magic.magic_save): modified @save and @r
4017 according to Mike Heeter's suggestions.
4023 according to Mike Heeter's suggestions.
4018
4024
4019 2002-06-16 Fernando Perez <fperez@colorado.edu>
4025 2002-06-16 Fernando Perez <fperez@colorado.edu>
4020
4026
4021 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
4027 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
4022 system. GnuplotMagic is gone as a user-directory option. New files
4028 system. GnuplotMagic is gone as a user-directory option. New files
4023 make it easier to use all the gnuplot stuff both from external
4029 make it easier to use all the gnuplot stuff both from external
4024 programs as well as from IPython. Had to rewrite part of
4030 programs as well as from IPython. Had to rewrite part of
4025 hardcopy() b/c of a strange bug: often the ps files simply don't
4031 hardcopy() b/c of a strange bug: often the ps files simply don't
4026 get created, and require a repeat of the command (often several
4032 get created, and require a repeat of the command (often several
4027 times).
4033 times).
4028
4034
4029 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
4035 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
4030 resolve output channel at call time, so that if sys.stderr has
4036 resolve output channel at call time, so that if sys.stderr has
4031 been redirected by user this gets honored.
4037 been redirected by user this gets honored.
4032
4038
4033 2002-06-13 Fernando Perez <fperez@colorado.edu>
4039 2002-06-13 Fernando Perez <fperez@colorado.edu>
4034
4040
4035 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
4041 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
4036 IPShell. Kept a copy with the old names to avoid breaking people's
4042 IPShell. Kept a copy with the old names to avoid breaking people's
4037 embedded code.
4043 embedded code.
4038
4044
4039 * IPython/ipython: simplified it to the bare minimum after
4045 * IPython/ipython: simplified it to the bare minimum after
4040 Holger's suggestions. Added info about how to use it in
4046 Holger's suggestions. Added info about how to use it in
4041 PYTHONSTARTUP.
4047 PYTHONSTARTUP.
4042
4048
4043 * IPython/Shell.py (IPythonShell): changed the options passing
4049 * IPython/Shell.py (IPythonShell): changed the options passing
4044 from a string with funky %s replacements to a straight list. Maybe
4050 from a string with funky %s replacements to a straight list. Maybe
4045 a bit more typing, but it follows sys.argv conventions, so there's
4051 a bit more typing, but it follows sys.argv conventions, so there's
4046 less special-casing to remember.
4052 less special-casing to remember.
4047
4053
4048 2002-06-12 Fernando Perez <fperez@colorado.edu>
4054 2002-06-12 Fernando Perez <fperez@colorado.edu>
4049
4055
4050 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
4056 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
4051 command. Thanks to a suggestion by Mike Heeter.
4057 command. Thanks to a suggestion by Mike Heeter.
4052 (Magic.magic_pfile): added behavior to look at filenames if given
4058 (Magic.magic_pfile): added behavior to look at filenames if given
4053 arg is not a defined object.
4059 arg is not a defined object.
4054 (Magic.magic_save): New @save function to save code snippets. Also
4060 (Magic.magic_save): New @save function to save code snippets. Also
4055 a Mike Heeter idea.
4061 a Mike Heeter idea.
4056
4062
4057 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
4063 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
4058 plot() and replot(). Much more convenient now, especially for
4064 plot() and replot(). Much more convenient now, especially for
4059 interactive use.
4065 interactive use.
4060
4066
4061 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
4067 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
4062 filenames.
4068 filenames.
4063
4069
4064 2002-06-02 Fernando Perez <fperez@colorado.edu>
4070 2002-06-02 Fernando Perez <fperez@colorado.edu>
4065
4071
4066 * IPython/Struct.py (Struct.__init__): modified to admit
4072 * IPython/Struct.py (Struct.__init__): modified to admit
4067 initialization via another struct.
4073 initialization via another struct.
4068
4074
4069 * IPython/genutils.py (SystemExec.__init__): New stateful
4075 * IPython/genutils.py (SystemExec.__init__): New stateful
4070 interface to xsys and bq. Useful for writing system scripts.
4076 interface to xsys and bq. Useful for writing system scripts.
4071
4077
4072 2002-05-30 Fernando Perez <fperez@colorado.edu>
4078 2002-05-30 Fernando Perez <fperez@colorado.edu>
4073
4079
4074 * MANIFEST.in: Changed docfile selection to exclude all the lyx
4080 * MANIFEST.in: Changed docfile selection to exclude all the lyx
4075 documents. This will make the user download smaller (it's getting
4081 documents. This will make the user download smaller (it's getting
4076 too big).
4082 too big).
4077
4083
4078 2002-05-29 Fernando Perez <fperez@colorado.edu>
4084 2002-05-29 Fernando Perez <fperez@colorado.edu>
4079
4085
4080 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
4086 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
4081 fix problems with shelve and pickle. Seems to work, but I don't
4087 fix problems with shelve and pickle. Seems to work, but I don't
4082 know if corner cases break it. Thanks to Mike Heeter
4088 know if corner cases break it. Thanks to Mike Heeter
4083 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
4089 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
4084
4090
4085 2002-05-24 Fernando Perez <fperez@colorado.edu>
4091 2002-05-24 Fernando Perez <fperez@colorado.edu>
4086
4092
4087 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
4093 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
4088 macros having broken.
4094 macros having broken.
4089
4095
4090 2002-05-21 Fernando Perez <fperez@colorado.edu>
4096 2002-05-21 Fernando Perez <fperez@colorado.edu>
4091
4097
4092 * IPython/Magic.py (Magic.magic_logstart): fixed recently
4098 * IPython/Magic.py (Magic.magic_logstart): fixed recently
4093 introduced logging bug: all history before logging started was
4099 introduced logging bug: all history before logging started was
4094 being written one character per line! This came from the redesign
4100 being written one character per line! This came from the redesign
4095 of the input history as a special list which slices to strings,
4101 of the input history as a special list which slices to strings,
4096 not to lists.
4102 not to lists.
4097
4103
4098 2002-05-20 Fernando Perez <fperez@colorado.edu>
4104 2002-05-20 Fernando Perez <fperez@colorado.edu>
4099
4105
4100 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4106 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4101 be an attribute of all classes in this module. The design of these
4107 be an attribute of all classes in this module. The design of these
4102 classes needs some serious overhauling.
4108 classes needs some serious overhauling.
4103
4109
4104 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4110 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4105 which was ignoring '_' in option names.
4111 which was ignoring '_' in option names.
4106
4112
4107 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4113 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4108 'Verbose_novars' to 'Context' and made it the new default. It's a
4114 'Verbose_novars' to 'Context' and made it the new default. It's a
4109 bit more readable and also safer than verbose.
4115 bit more readable and also safer than verbose.
4110
4116
4111 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4117 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4112 triple-quoted strings.
4118 triple-quoted strings.
4113
4119
4114 * IPython/OInspect.py (__all__): new module exposing the object
4120 * IPython/OInspect.py (__all__): new module exposing the object
4115 introspection facilities. Now the corresponding magics are dummy
4121 introspection facilities. Now the corresponding magics are dummy
4116 wrappers around this. Having this module will make it much easier
4122 wrappers around this. Having this module will make it much easier
4117 to put these functions into our modified pdb.
4123 to put these functions into our modified pdb.
4118 This new object inspector system uses the new colorizing module,
4124 This new object inspector system uses the new colorizing module,
4119 so source code and other things are nicely syntax highlighted.
4125 so source code and other things are nicely syntax highlighted.
4120
4126
4121 2002-05-18 Fernando Perez <fperez@colorado.edu>
4127 2002-05-18 Fernando Perez <fperez@colorado.edu>
4122
4128
4123 * IPython/ColorANSI.py: Split the coloring tools into a separate
4129 * IPython/ColorANSI.py: Split the coloring tools into a separate
4124 module so I can use them in other code easier (they were part of
4130 module so I can use them in other code easier (they were part of
4125 ultraTB).
4131 ultraTB).
4126
4132
4127 2002-05-17 Fernando Perez <fperez@colorado.edu>
4133 2002-05-17 Fernando Perez <fperez@colorado.edu>
4128
4134
4129 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4135 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4130 fixed it to set the global 'g' also to the called instance, as
4136 fixed it to set the global 'g' also to the called instance, as
4131 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4137 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4132 user's 'g' variables).
4138 user's 'g' variables).
4133
4139
4134 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4140 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4135 global variables (aliases to _ih,_oh) so that users which expect
4141 global variables (aliases to _ih,_oh) so that users which expect
4136 In[5] or Out[7] to work aren't unpleasantly surprised.
4142 In[5] or Out[7] to work aren't unpleasantly surprised.
4137 (InputList.__getslice__): new class to allow executing slices of
4143 (InputList.__getslice__): new class to allow executing slices of
4138 input history directly. Very simple class, complements the use of
4144 input history directly. Very simple class, complements the use of
4139 macros.
4145 macros.
4140
4146
4141 2002-05-16 Fernando Perez <fperez@colorado.edu>
4147 2002-05-16 Fernando Perez <fperez@colorado.edu>
4142
4148
4143 * setup.py (docdirbase): make doc directory be just doc/IPython
4149 * setup.py (docdirbase): make doc directory be just doc/IPython
4144 without version numbers, it will reduce clutter for users.
4150 without version numbers, it will reduce clutter for users.
4145
4151
4146 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4152 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4147 execfile call to prevent possible memory leak. See for details:
4153 execfile call to prevent possible memory leak. See for details:
4148 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4154 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4149
4155
4150 2002-05-15 Fernando Perez <fperez@colorado.edu>
4156 2002-05-15 Fernando Perez <fperez@colorado.edu>
4151
4157
4152 * IPython/Magic.py (Magic.magic_psource): made the object
4158 * IPython/Magic.py (Magic.magic_psource): made the object
4153 introspection names be more standard: pdoc, pdef, pfile and
4159 introspection names be more standard: pdoc, pdef, pfile and
4154 psource. They all print/page their output, and it makes
4160 psource. They all print/page their output, and it makes
4155 remembering them easier. Kept old names for compatibility as
4161 remembering them easier. Kept old names for compatibility as
4156 aliases.
4162 aliases.
4157
4163
4158 2002-05-14 Fernando Perez <fperez@colorado.edu>
4164 2002-05-14 Fernando Perez <fperez@colorado.edu>
4159
4165
4160 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4166 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4161 what the mouse problem was. The trick is to use gnuplot with temp
4167 what the mouse problem was. The trick is to use gnuplot with temp
4162 files and NOT with pipes (for data communication), because having
4168 files and NOT with pipes (for data communication), because having
4163 both pipes and the mouse on is bad news.
4169 both pipes and the mouse on is bad news.
4164
4170
4165 2002-05-13 Fernando Perez <fperez@colorado.edu>
4171 2002-05-13 Fernando Perez <fperez@colorado.edu>
4166
4172
4167 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4173 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4168 bug. Information would be reported about builtins even when
4174 bug. Information would be reported about builtins even when
4169 user-defined functions overrode them.
4175 user-defined functions overrode them.
4170
4176
4171 2002-05-11 Fernando Perez <fperez@colorado.edu>
4177 2002-05-11 Fernando Perez <fperez@colorado.edu>
4172
4178
4173 * IPython/__init__.py (__all__): removed FlexCompleter from
4179 * IPython/__init__.py (__all__): removed FlexCompleter from
4174 __all__ so that things don't fail in platforms without readline.
4180 __all__ so that things don't fail in platforms without readline.
4175
4181
4176 2002-05-10 Fernando Perez <fperez@colorado.edu>
4182 2002-05-10 Fernando Perez <fperez@colorado.edu>
4177
4183
4178 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4184 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4179 it requires Numeric, effectively making Numeric a dependency for
4185 it requires Numeric, effectively making Numeric a dependency for
4180 IPython.
4186 IPython.
4181
4187
4182 * Released 0.2.13
4188 * Released 0.2.13
4183
4189
4184 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4190 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4185 profiler interface. Now all the major options from the profiler
4191 profiler interface. Now all the major options from the profiler
4186 module are directly supported in IPython, both for single
4192 module are directly supported in IPython, both for single
4187 expressions (@prun) and for full programs (@run -p).
4193 expressions (@prun) and for full programs (@run -p).
4188
4194
4189 2002-05-09 Fernando Perez <fperez@colorado.edu>
4195 2002-05-09 Fernando Perez <fperez@colorado.edu>
4190
4196
4191 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4197 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4192 magic properly formatted for screen.
4198 magic properly formatted for screen.
4193
4199
4194 * setup.py (make_shortcut): Changed things to put pdf version in
4200 * setup.py (make_shortcut): Changed things to put pdf version in
4195 doc/ instead of doc/manual (had to change lyxport a bit).
4201 doc/ instead of doc/manual (had to change lyxport a bit).
4196
4202
4197 * IPython/Magic.py (Profile.string_stats): made profile runs go
4203 * IPython/Magic.py (Profile.string_stats): made profile runs go
4198 through pager (they are long and a pager allows searching, saving,
4204 through pager (they are long and a pager allows searching, saving,
4199 etc.)
4205 etc.)
4200
4206
4201 2002-05-08 Fernando Perez <fperez@colorado.edu>
4207 2002-05-08 Fernando Perez <fperez@colorado.edu>
4202
4208
4203 * Released 0.2.12
4209 * Released 0.2.12
4204
4210
4205 2002-05-06 Fernando Perez <fperez@colorado.edu>
4211 2002-05-06 Fernando Perez <fperez@colorado.edu>
4206
4212
4207 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4213 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4208 introduced); 'hist n1 n2' was broken.
4214 introduced); 'hist n1 n2' was broken.
4209 (Magic.magic_pdb): added optional on/off arguments to @pdb
4215 (Magic.magic_pdb): added optional on/off arguments to @pdb
4210 (Magic.magic_run): added option -i to @run, which executes code in
4216 (Magic.magic_run): added option -i to @run, which executes code in
4211 the IPython namespace instead of a clean one. Also added @irun as
4217 the IPython namespace instead of a clean one. Also added @irun as
4212 an alias to @run -i.
4218 an alias to @run -i.
4213
4219
4214 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4220 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4215 fixed (it didn't really do anything, the namespaces were wrong).
4221 fixed (it didn't really do anything, the namespaces were wrong).
4216
4222
4217 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4223 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4218
4224
4219 * IPython/__init__.py (__all__): Fixed package namespace, now
4225 * IPython/__init__.py (__all__): Fixed package namespace, now
4220 'import IPython' does give access to IPython.<all> as
4226 'import IPython' does give access to IPython.<all> as
4221 expected. Also renamed __release__ to Release.
4227 expected. Also renamed __release__ to Release.
4222
4228
4223 * IPython/Debugger.py (__license__): created new Pdb class which
4229 * IPython/Debugger.py (__license__): created new Pdb class which
4224 functions like a drop-in for the normal pdb.Pdb but does NOT
4230 functions like a drop-in for the normal pdb.Pdb but does NOT
4225 import readline by default. This way it doesn't muck up IPython's
4231 import readline by default. This way it doesn't muck up IPython's
4226 readline handling, and now tab-completion finally works in the
4232 readline handling, and now tab-completion finally works in the
4227 debugger -- sort of. It completes things globally visible, but the
4233 debugger -- sort of. It completes things globally visible, but the
4228 completer doesn't track the stack as pdb walks it. That's a bit
4234 completer doesn't track the stack as pdb walks it. That's a bit
4229 tricky, and I'll have to implement it later.
4235 tricky, and I'll have to implement it later.
4230
4236
4231 2002-05-05 Fernando Perez <fperez@colorado.edu>
4237 2002-05-05 Fernando Perez <fperez@colorado.edu>
4232
4238
4233 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4239 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4234 magic docstrings when printed via ? (explicit \'s were being
4240 magic docstrings when printed via ? (explicit \'s were being
4235 printed).
4241 printed).
4236
4242
4237 * IPython/ipmaker.py (make_IPython): fixed namespace
4243 * IPython/ipmaker.py (make_IPython): fixed namespace
4238 identification bug. Now variables loaded via logs or command-line
4244 identification bug. Now variables loaded via logs or command-line
4239 files are recognized in the interactive namespace by @who.
4245 files are recognized in the interactive namespace by @who.
4240
4246
4241 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4247 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4242 log replay system stemming from the string form of Structs.
4248 log replay system stemming from the string form of Structs.
4243
4249
4244 * IPython/Magic.py (Macro.__init__): improved macros to properly
4250 * IPython/Magic.py (Macro.__init__): improved macros to properly
4245 handle magic commands in them.
4251 handle magic commands in them.
4246 (Magic.magic_logstart): usernames are now expanded so 'logstart
4252 (Magic.magic_logstart): usernames are now expanded so 'logstart
4247 ~/mylog' now works.
4253 ~/mylog' now works.
4248
4254
4249 * IPython/iplib.py (complete): fixed bug where paths starting with
4255 * IPython/iplib.py (complete): fixed bug where paths starting with
4250 '/' would be completed as magic names.
4256 '/' would be completed as magic names.
4251
4257
4252 2002-05-04 Fernando Perez <fperez@colorado.edu>
4258 2002-05-04 Fernando Perez <fperez@colorado.edu>
4253
4259
4254 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4260 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4255 allow running full programs under the profiler's control.
4261 allow running full programs under the profiler's control.
4256
4262
4257 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4263 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4258 mode to report exceptions verbosely but without formatting
4264 mode to report exceptions verbosely but without formatting
4259 variables. This addresses the issue of ipython 'freezing' (it's
4265 variables. This addresses the issue of ipython 'freezing' (it's
4260 not frozen, but caught in an expensive formatting loop) when huge
4266 not frozen, but caught in an expensive formatting loop) when huge
4261 variables are in the context of an exception.
4267 variables are in the context of an exception.
4262 (VerboseTB.text): Added '--->' markers at line where exception was
4268 (VerboseTB.text): Added '--->' markers at line where exception was
4263 triggered. Much clearer to read, especially in NoColor modes.
4269 triggered. Much clearer to read, especially in NoColor modes.
4264
4270
4265 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4271 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4266 implemented in reverse when changing to the new parse_options().
4272 implemented in reverse when changing to the new parse_options().
4267
4273
4268 2002-05-03 Fernando Perez <fperez@colorado.edu>
4274 2002-05-03 Fernando Perez <fperez@colorado.edu>
4269
4275
4270 * IPython/Magic.py (Magic.parse_options): new function so that
4276 * IPython/Magic.py (Magic.parse_options): new function so that
4271 magics can parse options easier.
4277 magics can parse options easier.
4272 (Magic.magic_prun): new function similar to profile.run(),
4278 (Magic.magic_prun): new function similar to profile.run(),
4273 suggested by Chris Hart.
4279 suggested by Chris Hart.
4274 (Magic.magic_cd): fixed behavior so that it only changes if
4280 (Magic.magic_cd): fixed behavior so that it only changes if
4275 directory actually is in history.
4281 directory actually is in history.
4276
4282
4277 * IPython/usage.py (__doc__): added information about potential
4283 * IPython/usage.py (__doc__): added information about potential
4278 slowness of Verbose exception mode when there are huge data
4284 slowness of Verbose exception mode when there are huge data
4279 structures to be formatted (thanks to Archie Paulson).
4285 structures to be formatted (thanks to Archie Paulson).
4280
4286
4281 * IPython/ipmaker.py (make_IPython): Changed default logging
4287 * IPython/ipmaker.py (make_IPython): Changed default logging
4282 (when simply called with -log) to use curr_dir/ipython.log in
4288 (when simply called with -log) to use curr_dir/ipython.log in
4283 rotate mode. Fixed crash which was occuring with -log before
4289 rotate mode. Fixed crash which was occuring with -log before
4284 (thanks to Jim Boyle).
4290 (thanks to Jim Boyle).
4285
4291
4286 2002-05-01 Fernando Perez <fperez@colorado.edu>
4292 2002-05-01 Fernando Perez <fperez@colorado.edu>
4287
4293
4288 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4294 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4289 was nasty -- though somewhat of a corner case).
4295 was nasty -- though somewhat of a corner case).
4290
4296
4291 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4297 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4292 text (was a bug).
4298 text (was a bug).
4293
4299
4294 2002-04-30 Fernando Perez <fperez@colorado.edu>
4300 2002-04-30 Fernando Perez <fperez@colorado.edu>
4295
4301
4296 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4302 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4297 a print after ^D or ^C from the user so that the In[] prompt
4303 a print after ^D or ^C from the user so that the In[] prompt
4298 doesn't over-run the gnuplot one.
4304 doesn't over-run the gnuplot one.
4299
4305
4300 2002-04-29 Fernando Perez <fperez@colorado.edu>
4306 2002-04-29 Fernando Perez <fperez@colorado.edu>
4301
4307
4302 * Released 0.2.10
4308 * Released 0.2.10
4303
4309
4304 * IPython/__release__.py (version): get date dynamically.
4310 * IPython/__release__.py (version): get date dynamically.
4305
4311
4306 * Misc. documentation updates thanks to Arnd's comments. Also ran
4312 * Misc. documentation updates thanks to Arnd's comments. Also ran
4307 a full spellcheck on the manual (hadn't been done in a while).
4313 a full spellcheck on the manual (hadn't been done in a while).
4308
4314
4309 2002-04-27 Fernando Perez <fperez@colorado.edu>
4315 2002-04-27 Fernando Perez <fperez@colorado.edu>
4310
4316
4311 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4317 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4312 starting a log in mid-session would reset the input history list.
4318 starting a log in mid-session would reset the input history list.
4313
4319
4314 2002-04-26 Fernando Perez <fperez@colorado.edu>
4320 2002-04-26 Fernando Perez <fperez@colorado.edu>
4315
4321
4316 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4322 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4317 all files were being included in an update. Now anything in
4323 all files were being included in an update. Now anything in
4318 UserConfig that matches [A-Za-z]*.py will go (this excludes
4324 UserConfig that matches [A-Za-z]*.py will go (this excludes
4319 __init__.py)
4325 __init__.py)
4320
4326
4321 2002-04-25 Fernando Perez <fperez@colorado.edu>
4327 2002-04-25 Fernando Perez <fperez@colorado.edu>
4322
4328
4323 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4329 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4324 to __builtins__ so that any form of embedded or imported code can
4330 to __builtins__ so that any form of embedded or imported code can
4325 test for being inside IPython.
4331 test for being inside IPython.
4326
4332
4327 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4333 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4328 changed to GnuplotMagic because it's now an importable module,
4334 changed to GnuplotMagic because it's now an importable module,
4329 this makes the name follow that of the standard Gnuplot module.
4335 this makes the name follow that of the standard Gnuplot module.
4330 GnuplotMagic can now be loaded at any time in mid-session.
4336 GnuplotMagic can now be loaded at any time in mid-session.
4331
4337
4332 2002-04-24 Fernando Perez <fperez@colorado.edu>
4338 2002-04-24 Fernando Perez <fperez@colorado.edu>
4333
4339
4334 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4340 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4335 the globals (IPython has its own namespace) and the
4341 the globals (IPython has its own namespace) and the
4336 PhysicalQuantity stuff is much better anyway.
4342 PhysicalQuantity stuff is much better anyway.
4337
4343
4338 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4344 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4339 embedding example to standard user directory for
4345 embedding example to standard user directory for
4340 distribution. Also put it in the manual.
4346 distribution. Also put it in the manual.
4341
4347
4342 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4348 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4343 instance as first argument (so it doesn't rely on some obscure
4349 instance as first argument (so it doesn't rely on some obscure
4344 hidden global).
4350 hidden global).
4345
4351
4346 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4352 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4347 delimiters. While it prevents ().TAB from working, it allows
4353 delimiters. While it prevents ().TAB from working, it allows
4348 completions in open (... expressions. This is by far a more common
4354 completions in open (... expressions. This is by far a more common
4349 case.
4355 case.
4350
4356
4351 2002-04-23 Fernando Perez <fperez@colorado.edu>
4357 2002-04-23 Fernando Perez <fperez@colorado.edu>
4352
4358
4353 * IPython/Extensions/InterpreterPasteInput.py: new
4359 * IPython/Extensions/InterpreterPasteInput.py: new
4354 syntax-processing module for pasting lines with >>> or ... at the
4360 syntax-processing module for pasting lines with >>> or ... at the
4355 start.
4361 start.
4356
4362
4357 * IPython/Extensions/PhysicalQ_Interactive.py
4363 * IPython/Extensions/PhysicalQ_Interactive.py
4358 (PhysicalQuantityInteractive.__int__): fixed to work with either
4364 (PhysicalQuantityInteractive.__int__): fixed to work with either
4359 Numeric or math.
4365 Numeric or math.
4360
4366
4361 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4367 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4362 provided profiles. Now we have:
4368 provided profiles. Now we have:
4363 -math -> math module as * and cmath with its own namespace.
4369 -math -> math module as * and cmath with its own namespace.
4364 -numeric -> Numeric as *, plus gnuplot & grace
4370 -numeric -> Numeric as *, plus gnuplot & grace
4365 -physics -> same as before
4371 -physics -> same as before
4366
4372
4367 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4373 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4368 user-defined magics wouldn't be found by @magic if they were
4374 user-defined magics wouldn't be found by @magic if they were
4369 defined as class methods. Also cleaned up the namespace search
4375 defined as class methods. Also cleaned up the namespace search
4370 logic and the string building (to use %s instead of many repeated
4376 logic and the string building (to use %s instead of many repeated
4371 string adds).
4377 string adds).
4372
4378
4373 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4379 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4374 of user-defined magics to operate with class methods (cleaner, in
4380 of user-defined magics to operate with class methods (cleaner, in
4375 line with the gnuplot code).
4381 line with the gnuplot code).
4376
4382
4377 2002-04-22 Fernando Perez <fperez@colorado.edu>
4383 2002-04-22 Fernando Perez <fperez@colorado.edu>
4378
4384
4379 * setup.py: updated dependency list so that manual is updated when
4385 * setup.py: updated dependency list so that manual is updated when
4380 all included files change.
4386 all included files change.
4381
4387
4382 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4388 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4383 the delimiter removal option (the fix is ugly right now).
4389 the delimiter removal option (the fix is ugly right now).
4384
4390
4385 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4391 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4386 all of the math profile (quicker loading, no conflict between
4392 all of the math profile (quicker loading, no conflict between
4387 g-9.8 and g-gnuplot).
4393 g-9.8 and g-gnuplot).
4388
4394
4389 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4395 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4390 name of post-mortem files to IPython_crash_report.txt.
4396 name of post-mortem files to IPython_crash_report.txt.
4391
4397
4392 * Cleanup/update of the docs. Added all the new readline info and
4398 * Cleanup/update of the docs. Added all the new readline info and
4393 formatted all lists as 'real lists'.
4399 formatted all lists as 'real lists'.
4394
4400
4395 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4401 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4396 tab-completion options, since the full readline parse_and_bind is
4402 tab-completion options, since the full readline parse_and_bind is
4397 now accessible.
4403 now accessible.
4398
4404
4399 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4405 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4400 handling of readline options. Now users can specify any string to
4406 handling of readline options. Now users can specify any string to
4401 be passed to parse_and_bind(), as well as the delimiters to be
4407 be passed to parse_and_bind(), as well as the delimiters to be
4402 removed.
4408 removed.
4403 (InteractiveShell.__init__): Added __name__ to the global
4409 (InteractiveShell.__init__): Added __name__ to the global
4404 namespace so that things like Itpl which rely on its existence
4410 namespace so that things like Itpl which rely on its existence
4405 don't crash.
4411 don't crash.
4406 (InteractiveShell._prefilter): Defined the default with a _ so
4412 (InteractiveShell._prefilter): Defined the default with a _ so
4407 that prefilter() is easier to override, while the default one
4413 that prefilter() is easier to override, while the default one
4408 remains available.
4414 remains available.
4409
4415
4410 2002-04-18 Fernando Perez <fperez@colorado.edu>
4416 2002-04-18 Fernando Perez <fperez@colorado.edu>
4411
4417
4412 * Added information about pdb in the docs.
4418 * Added information about pdb in the docs.
4413
4419
4414 2002-04-17 Fernando Perez <fperez@colorado.edu>
4420 2002-04-17 Fernando Perez <fperez@colorado.edu>
4415
4421
4416 * IPython/ipmaker.py (make_IPython): added rc_override option to
4422 * IPython/ipmaker.py (make_IPython): added rc_override option to
4417 allow passing config options at creation time which may override
4423 allow passing config options at creation time which may override
4418 anything set in the config files or command line. This is
4424 anything set in the config files or command line. This is
4419 particularly useful for configuring embedded instances.
4425 particularly useful for configuring embedded instances.
4420
4426
4421 2002-04-15 Fernando Perez <fperez@colorado.edu>
4427 2002-04-15 Fernando Perez <fperez@colorado.edu>
4422
4428
4423 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4429 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4424 crash embedded instances because of the input cache falling out of
4430 crash embedded instances because of the input cache falling out of
4425 sync with the output counter.
4431 sync with the output counter.
4426
4432
4427 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4433 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4428 mode which calls pdb after an uncaught exception in IPython itself.
4434 mode which calls pdb after an uncaught exception in IPython itself.
4429
4435
4430 2002-04-14 Fernando Perez <fperez@colorado.edu>
4436 2002-04-14 Fernando Perez <fperez@colorado.edu>
4431
4437
4432 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4438 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4433 readline, fix it back after each call.
4439 readline, fix it back after each call.
4434
4440
4435 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4441 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4436 method to force all access via __call__(), which guarantees that
4442 method to force all access via __call__(), which guarantees that
4437 traceback references are properly deleted.
4443 traceback references are properly deleted.
4438
4444
4439 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4445 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4440 improve printing when pprint is in use.
4446 improve printing when pprint is in use.
4441
4447
4442 2002-04-13 Fernando Perez <fperez@colorado.edu>
4448 2002-04-13 Fernando Perez <fperez@colorado.edu>
4443
4449
4444 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4450 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4445 exceptions aren't caught anymore. If the user triggers one, he
4451 exceptions aren't caught anymore. If the user triggers one, he
4446 should know why he's doing it and it should go all the way up,
4452 should know why he's doing it and it should go all the way up,
4447 just like any other exception. So now @abort will fully kill the
4453 just like any other exception. So now @abort will fully kill the
4448 embedded interpreter and the embedding code (unless that happens
4454 embedded interpreter and the embedding code (unless that happens
4449 to catch SystemExit).
4455 to catch SystemExit).
4450
4456
4451 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4457 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4452 and a debugger() method to invoke the interactive pdb debugger
4458 and a debugger() method to invoke the interactive pdb debugger
4453 after printing exception information. Also added the corresponding
4459 after printing exception information. Also added the corresponding
4454 -pdb option and @pdb magic to control this feature, and updated
4460 -pdb option and @pdb magic to control this feature, and updated
4455 the docs. After a suggestion from Christopher Hart
4461 the docs. After a suggestion from Christopher Hart
4456 (hart-AT-caltech.edu).
4462 (hart-AT-caltech.edu).
4457
4463
4458 2002-04-12 Fernando Perez <fperez@colorado.edu>
4464 2002-04-12 Fernando Perez <fperez@colorado.edu>
4459
4465
4460 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4466 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4461 the exception handlers defined by the user (not the CrashHandler)
4467 the exception handlers defined by the user (not the CrashHandler)
4462 so that user exceptions don't trigger an ipython bug report.
4468 so that user exceptions don't trigger an ipython bug report.
4463
4469
4464 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4470 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4465 configurable (it should have always been so).
4471 configurable (it should have always been so).
4466
4472
4467 2002-03-26 Fernando Perez <fperez@colorado.edu>
4473 2002-03-26 Fernando Perez <fperez@colorado.edu>
4468
4474
4469 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4475 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4470 and there to fix embedding namespace issues. This should all be
4476 and there to fix embedding namespace issues. This should all be
4471 done in a more elegant way.
4477 done in a more elegant way.
4472
4478
4473 2002-03-25 Fernando Perez <fperez@colorado.edu>
4479 2002-03-25 Fernando Perez <fperez@colorado.edu>
4474
4480
4475 * IPython/genutils.py (get_home_dir): Try to make it work under
4481 * IPython/genutils.py (get_home_dir): Try to make it work under
4476 win9x also.
4482 win9x also.
4477
4483
4478 2002-03-20 Fernando Perez <fperez@colorado.edu>
4484 2002-03-20 Fernando Perez <fperez@colorado.edu>
4479
4485
4480 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4486 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4481 sys.displayhook untouched upon __init__.
4487 sys.displayhook untouched upon __init__.
4482
4488
4483 2002-03-19 Fernando Perez <fperez@colorado.edu>
4489 2002-03-19 Fernando Perez <fperez@colorado.edu>
4484
4490
4485 * Released 0.2.9 (for embedding bug, basically).
4491 * Released 0.2.9 (for embedding bug, basically).
4486
4492
4487 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4493 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4488 exceptions so that enclosing shell's state can be restored.
4494 exceptions so that enclosing shell's state can be restored.
4489
4495
4490 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4496 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4491 naming conventions in the .ipython/ dir.
4497 naming conventions in the .ipython/ dir.
4492
4498
4493 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4499 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4494 from delimiters list so filenames with - in them get expanded.
4500 from delimiters list so filenames with - in them get expanded.
4495
4501
4496 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4502 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4497 sys.displayhook not being properly restored after an embedded call.
4503 sys.displayhook not being properly restored after an embedded call.
4498
4504
4499 2002-03-18 Fernando Perez <fperez@colorado.edu>
4505 2002-03-18 Fernando Perez <fperez@colorado.edu>
4500
4506
4501 * Released 0.2.8
4507 * Released 0.2.8
4502
4508
4503 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4509 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4504 some files weren't being included in a -upgrade.
4510 some files weren't being included in a -upgrade.
4505 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4511 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4506 on' so that the first tab completes.
4512 on' so that the first tab completes.
4507 (InteractiveShell.handle_magic): fixed bug with spaces around
4513 (InteractiveShell.handle_magic): fixed bug with spaces around
4508 quotes breaking many magic commands.
4514 quotes breaking many magic commands.
4509
4515
4510 * setup.py: added note about ignoring the syntax error messages at
4516 * setup.py: added note about ignoring the syntax error messages at
4511 installation.
4517 installation.
4512
4518
4513 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4519 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4514 streamlining the gnuplot interface, now there's only one magic @gp.
4520 streamlining the gnuplot interface, now there's only one magic @gp.
4515
4521
4516 2002-03-17 Fernando Perez <fperez@colorado.edu>
4522 2002-03-17 Fernando Perez <fperez@colorado.edu>
4517
4523
4518 * IPython/UserConfig/magic_gnuplot.py: new name for the
4524 * IPython/UserConfig/magic_gnuplot.py: new name for the
4519 example-magic_pm.py file. Much enhanced system, now with a shell
4525 example-magic_pm.py file. Much enhanced system, now with a shell
4520 for communicating directly with gnuplot, one command at a time.
4526 for communicating directly with gnuplot, one command at a time.
4521
4527
4522 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4528 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4523 setting __name__=='__main__'.
4529 setting __name__=='__main__'.
4524
4530
4525 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4531 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4526 mini-shell for accessing gnuplot from inside ipython. Should
4532 mini-shell for accessing gnuplot from inside ipython. Should
4527 extend it later for grace access too. Inspired by Arnd's
4533 extend it later for grace access too. Inspired by Arnd's
4528 suggestion.
4534 suggestion.
4529
4535
4530 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4536 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4531 calling magic functions with () in their arguments. Thanks to Arnd
4537 calling magic functions with () in their arguments. Thanks to Arnd
4532 Baecker for pointing this to me.
4538 Baecker for pointing this to me.
4533
4539
4534 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4540 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4535 infinitely for integer or complex arrays (only worked with floats).
4541 infinitely for integer or complex arrays (only worked with floats).
4536
4542
4537 2002-03-16 Fernando Perez <fperez@colorado.edu>
4543 2002-03-16 Fernando Perez <fperez@colorado.edu>
4538
4544
4539 * setup.py: Merged setup and setup_windows into a single script
4545 * setup.py: Merged setup and setup_windows into a single script
4540 which properly handles things for windows users.
4546 which properly handles things for windows users.
4541
4547
4542 2002-03-15 Fernando Perez <fperez@colorado.edu>
4548 2002-03-15 Fernando Perez <fperez@colorado.edu>
4543
4549
4544 * Big change to the manual: now the magics are all automatically
4550 * Big change to the manual: now the magics are all automatically
4545 documented. This information is generated from their docstrings
4551 documented. This information is generated from their docstrings
4546 and put in a latex file included by the manual lyx file. This way
4552 and put in a latex file included by the manual lyx file. This way
4547 we get always up to date information for the magics. The manual
4553 we get always up to date information for the magics. The manual
4548 now also has proper version information, also auto-synced.
4554 now also has proper version information, also auto-synced.
4549
4555
4550 For this to work, an undocumented --magic_docstrings option was added.
4556 For this to work, an undocumented --magic_docstrings option was added.
4551
4557
4552 2002-03-13 Fernando Perez <fperez@colorado.edu>
4558 2002-03-13 Fernando Perez <fperez@colorado.edu>
4553
4559
4554 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4560 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4555 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4561 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4556
4562
4557 2002-03-12 Fernando Perez <fperez@colorado.edu>
4563 2002-03-12 Fernando Perez <fperez@colorado.edu>
4558
4564
4559 * IPython/ultraTB.py (TermColors): changed color escapes again to
4565 * IPython/ultraTB.py (TermColors): changed color escapes again to
4560 fix the (old, reintroduced) line-wrapping bug. Basically, if
4566 fix the (old, reintroduced) line-wrapping bug. Basically, if
4561 \001..\002 aren't given in the color escapes, lines get wrapped
4567 \001..\002 aren't given in the color escapes, lines get wrapped
4562 weirdly. But giving those screws up old xterms and emacs terms. So
4568 weirdly. But giving those screws up old xterms and emacs terms. So
4563 I added some logic for emacs terms to be ok, but I can't identify old
4569 I added some logic for emacs terms to be ok, but I can't identify old
4564 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4570 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4565
4571
4566 2002-03-10 Fernando Perez <fperez@colorado.edu>
4572 2002-03-10 Fernando Perez <fperez@colorado.edu>
4567
4573
4568 * IPython/usage.py (__doc__): Various documentation cleanups and
4574 * IPython/usage.py (__doc__): Various documentation cleanups and
4569 updates, both in usage docstrings and in the manual.
4575 updates, both in usage docstrings and in the manual.
4570
4576
4571 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4577 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4572 handling of caching. Set minimum acceptabe value for having a
4578 handling of caching. Set minimum acceptabe value for having a
4573 cache at 20 values.
4579 cache at 20 values.
4574
4580
4575 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4581 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4576 install_first_time function to a method, renamed it and added an
4582 install_first_time function to a method, renamed it and added an
4577 'upgrade' mode. Now people can update their config directory with
4583 'upgrade' mode. Now people can update their config directory with
4578 a simple command line switch (-upgrade, also new).
4584 a simple command line switch (-upgrade, also new).
4579
4585
4580 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4586 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4581 @file (convenient for automagic users under Python >= 2.2).
4587 @file (convenient for automagic users under Python >= 2.2).
4582 Removed @files (it seemed more like a plural than an abbrev. of
4588 Removed @files (it seemed more like a plural than an abbrev. of
4583 'file show').
4589 'file show').
4584
4590
4585 * IPython/iplib.py (install_first_time): Fixed crash if there were
4591 * IPython/iplib.py (install_first_time): Fixed crash if there were
4586 backup files ('~') in .ipython/ install directory.
4592 backup files ('~') in .ipython/ install directory.
4587
4593
4588 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4594 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4589 system. Things look fine, but these changes are fairly
4595 system. Things look fine, but these changes are fairly
4590 intrusive. Test them for a few days.
4596 intrusive. Test them for a few days.
4591
4597
4592 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4598 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4593 the prompts system. Now all in/out prompt strings are user
4599 the prompts system. Now all in/out prompt strings are user
4594 controllable. This is particularly useful for embedding, as one
4600 controllable. This is particularly useful for embedding, as one
4595 can tag embedded instances with particular prompts.
4601 can tag embedded instances with particular prompts.
4596
4602
4597 Also removed global use of sys.ps1/2, which now allows nested
4603 Also removed global use of sys.ps1/2, which now allows nested
4598 embeddings without any problems. Added command-line options for
4604 embeddings without any problems. Added command-line options for
4599 the prompt strings.
4605 the prompt strings.
4600
4606
4601 2002-03-08 Fernando Perez <fperez@colorado.edu>
4607 2002-03-08 Fernando Perez <fperez@colorado.edu>
4602
4608
4603 * IPython/UserConfig/example-embed-short.py (ipshell): added
4609 * IPython/UserConfig/example-embed-short.py (ipshell): added
4604 example file with the bare minimum code for embedding.
4610 example file with the bare minimum code for embedding.
4605
4611
4606 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4612 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4607 functionality for the embeddable shell to be activated/deactivated
4613 functionality for the embeddable shell to be activated/deactivated
4608 either globally or at each call.
4614 either globally or at each call.
4609
4615
4610 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4616 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4611 rewriting the prompt with '--->' for auto-inputs with proper
4617 rewriting the prompt with '--->' for auto-inputs with proper
4612 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4618 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4613 this is handled by the prompts class itself, as it should.
4619 this is handled by the prompts class itself, as it should.
4614
4620
4615 2002-03-05 Fernando Perez <fperez@colorado.edu>
4621 2002-03-05 Fernando Perez <fperez@colorado.edu>
4616
4622
4617 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4623 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4618 @logstart to avoid name clashes with the math log function.
4624 @logstart to avoid name clashes with the math log function.
4619
4625
4620 * Big updates to X/Emacs section of the manual.
4626 * Big updates to X/Emacs section of the manual.
4621
4627
4622 * Removed ipython_emacs. Milan explained to me how to pass
4628 * Removed ipython_emacs. Milan explained to me how to pass
4623 arguments to ipython through Emacs. Some day I'm going to end up
4629 arguments to ipython through Emacs. Some day I'm going to end up
4624 learning some lisp...
4630 learning some lisp...
4625
4631
4626 2002-03-04 Fernando Perez <fperez@colorado.edu>
4632 2002-03-04 Fernando Perez <fperez@colorado.edu>
4627
4633
4628 * IPython/ipython_emacs: Created script to be used as the
4634 * IPython/ipython_emacs: Created script to be used as the
4629 py-python-command Emacs variable so we can pass IPython
4635 py-python-command Emacs variable so we can pass IPython
4630 parameters. I can't figure out how to tell Emacs directly to pass
4636 parameters. I can't figure out how to tell Emacs directly to pass
4631 parameters to IPython, so a dummy shell script will do it.
4637 parameters to IPython, so a dummy shell script will do it.
4632
4638
4633 Other enhancements made for things to work better under Emacs'
4639 Other enhancements made for things to work better under Emacs'
4634 various types of terminals. Many thanks to Milan Zamazal
4640 various types of terminals. Many thanks to Milan Zamazal
4635 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4641 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4636
4642
4637 2002-03-01 Fernando Perez <fperez@colorado.edu>
4643 2002-03-01 Fernando Perez <fperez@colorado.edu>
4638
4644
4639 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4645 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4640 that loading of readline is now optional. This gives better
4646 that loading of readline is now optional. This gives better
4641 control to emacs users.
4647 control to emacs users.
4642
4648
4643 * IPython/ultraTB.py (__date__): Modified color escape sequences
4649 * IPython/ultraTB.py (__date__): Modified color escape sequences
4644 and now things work fine under xterm and in Emacs' term buffers
4650 and now things work fine under xterm and in Emacs' term buffers
4645 (though not shell ones). Well, in emacs you get colors, but all
4651 (though not shell ones). Well, in emacs you get colors, but all
4646 seem to be 'light' colors (no difference between dark and light
4652 seem to be 'light' colors (no difference between dark and light
4647 ones). But the garbage chars are gone, and also in xterms. It
4653 ones). But the garbage chars are gone, and also in xterms. It
4648 seems that now I'm using 'cleaner' ansi sequences.
4654 seems that now I'm using 'cleaner' ansi sequences.
4649
4655
4650 2002-02-21 Fernando Perez <fperez@colorado.edu>
4656 2002-02-21 Fernando Perez <fperez@colorado.edu>
4651
4657
4652 * Released 0.2.7 (mainly to publish the scoping fix).
4658 * Released 0.2.7 (mainly to publish the scoping fix).
4653
4659
4654 * IPython/Logger.py (Logger.logstate): added. A corresponding
4660 * IPython/Logger.py (Logger.logstate): added. A corresponding
4655 @logstate magic was created.
4661 @logstate magic was created.
4656
4662
4657 * IPython/Magic.py: fixed nested scoping problem under Python
4663 * IPython/Magic.py: fixed nested scoping problem under Python
4658 2.1.x (automagic wasn't working).
4664 2.1.x (automagic wasn't working).
4659
4665
4660 2002-02-20 Fernando Perez <fperez@colorado.edu>
4666 2002-02-20 Fernando Perez <fperez@colorado.edu>
4661
4667
4662 * Released 0.2.6.
4668 * Released 0.2.6.
4663
4669
4664 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4670 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4665 option so that logs can come out without any headers at all.
4671 option so that logs can come out without any headers at all.
4666
4672
4667 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4673 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4668 SciPy.
4674 SciPy.
4669
4675
4670 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4676 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4671 that embedded IPython calls don't require vars() to be explicitly
4677 that embedded IPython calls don't require vars() to be explicitly
4672 passed. Now they are extracted from the caller's frame (code
4678 passed. Now they are extracted from the caller's frame (code
4673 snatched from Eric Jones' weave). Added better documentation to
4679 snatched from Eric Jones' weave). Added better documentation to
4674 the section on embedding and the example file.
4680 the section on embedding and the example file.
4675
4681
4676 * IPython/genutils.py (page): Changed so that under emacs, it just
4682 * IPython/genutils.py (page): Changed so that under emacs, it just
4677 prints the string. You can then page up and down in the emacs
4683 prints the string. You can then page up and down in the emacs
4678 buffer itself. This is how the builtin help() works.
4684 buffer itself. This is how the builtin help() works.
4679
4685
4680 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4686 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4681 macro scoping: macros need to be executed in the user's namespace
4687 macro scoping: macros need to be executed in the user's namespace
4682 to work as if they had been typed by the user.
4688 to work as if they had been typed by the user.
4683
4689
4684 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4690 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4685 execute automatically (no need to type 'exec...'). They then
4691 execute automatically (no need to type 'exec...'). They then
4686 behave like 'true macros'. The printing system was also modified
4692 behave like 'true macros'. The printing system was also modified
4687 for this to work.
4693 for this to work.
4688
4694
4689 2002-02-19 Fernando Perez <fperez@colorado.edu>
4695 2002-02-19 Fernando Perez <fperez@colorado.edu>
4690
4696
4691 * IPython/genutils.py (page_file): new function for paging files
4697 * IPython/genutils.py (page_file): new function for paging files
4692 in an OS-independent way. Also necessary for file viewing to work
4698 in an OS-independent way. Also necessary for file viewing to work
4693 well inside Emacs buffers.
4699 well inside Emacs buffers.
4694 (page): Added checks for being in an emacs buffer.
4700 (page): Added checks for being in an emacs buffer.
4695 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4701 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4696 same bug in iplib.
4702 same bug in iplib.
4697
4703
4698 2002-02-18 Fernando Perez <fperez@colorado.edu>
4704 2002-02-18 Fernando Perez <fperez@colorado.edu>
4699
4705
4700 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4706 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4701 of readline so that IPython can work inside an Emacs buffer.
4707 of readline so that IPython can work inside an Emacs buffer.
4702
4708
4703 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4709 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4704 method signatures (they weren't really bugs, but it looks cleaner
4710 method signatures (they weren't really bugs, but it looks cleaner
4705 and keeps PyChecker happy).
4711 and keeps PyChecker happy).
4706
4712
4707 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4713 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4708 for implementing various user-defined hooks. Currently only
4714 for implementing various user-defined hooks. Currently only
4709 display is done.
4715 display is done.
4710
4716
4711 * IPython/Prompts.py (CachedOutput._display): changed display
4717 * IPython/Prompts.py (CachedOutput._display): changed display
4712 functions so that they can be dynamically changed by users easily.
4718 functions so that they can be dynamically changed by users easily.
4713
4719
4714 * IPython/Extensions/numeric_formats.py (num_display): added an
4720 * IPython/Extensions/numeric_formats.py (num_display): added an
4715 extension for printing NumPy arrays in flexible manners. It
4721 extension for printing NumPy arrays in flexible manners. It
4716 doesn't do anything yet, but all the structure is in
4722 doesn't do anything yet, but all the structure is in
4717 place. Ultimately the plan is to implement output format control
4723 place. Ultimately the plan is to implement output format control
4718 like in Octave.
4724 like in Octave.
4719
4725
4720 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4726 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4721 methods are found at run-time by all the automatic machinery.
4727 methods are found at run-time by all the automatic machinery.
4722
4728
4723 2002-02-17 Fernando Perez <fperez@colorado.edu>
4729 2002-02-17 Fernando Perez <fperez@colorado.edu>
4724
4730
4725 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4731 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4726 whole file a little.
4732 whole file a little.
4727
4733
4728 * ToDo: closed this document. Now there's a new_design.lyx
4734 * ToDo: closed this document. Now there's a new_design.lyx
4729 document for all new ideas. Added making a pdf of it for the
4735 document for all new ideas. Added making a pdf of it for the
4730 end-user distro.
4736 end-user distro.
4731
4737
4732 * IPython/Logger.py (Logger.switch_log): Created this to replace
4738 * IPython/Logger.py (Logger.switch_log): Created this to replace
4733 logon() and logoff(). It also fixes a nasty crash reported by
4739 logon() and logoff(). It also fixes a nasty crash reported by
4734 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4740 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4735
4741
4736 * IPython/iplib.py (complete): got auto-completion to work with
4742 * IPython/iplib.py (complete): got auto-completion to work with
4737 automagic (I had wanted this for a long time).
4743 automagic (I had wanted this for a long time).
4738
4744
4739 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4745 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4740 to @file, since file() is now a builtin and clashes with automagic
4746 to @file, since file() is now a builtin and clashes with automagic
4741 for @file.
4747 for @file.
4742
4748
4743 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4749 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4744 of this was previously in iplib, which had grown to more than 2000
4750 of this was previously in iplib, which had grown to more than 2000
4745 lines, way too long. No new functionality, but it makes managing
4751 lines, way too long. No new functionality, but it makes managing
4746 the code a bit easier.
4752 the code a bit easier.
4747
4753
4748 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4754 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4749 information to crash reports.
4755 information to crash reports.
4750
4756
4751 2002-02-12 Fernando Perez <fperez@colorado.edu>
4757 2002-02-12 Fernando Perez <fperez@colorado.edu>
4752
4758
4753 * Released 0.2.5.
4759 * Released 0.2.5.
4754
4760
4755 2002-02-11 Fernando Perez <fperez@colorado.edu>
4761 2002-02-11 Fernando Perez <fperez@colorado.edu>
4756
4762
4757 * Wrote a relatively complete Windows installer. It puts
4763 * Wrote a relatively complete Windows installer. It puts
4758 everything in place, creates Start Menu entries and fixes the
4764 everything in place, creates Start Menu entries and fixes the
4759 color issues. Nothing fancy, but it works.
4765 color issues. Nothing fancy, but it works.
4760
4766
4761 2002-02-10 Fernando Perez <fperez@colorado.edu>
4767 2002-02-10 Fernando Perez <fperez@colorado.edu>
4762
4768
4763 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4769 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4764 os.path.expanduser() call so that we can type @run ~/myfile.py and
4770 os.path.expanduser() call so that we can type @run ~/myfile.py and
4765 have thigs work as expected.
4771 have thigs work as expected.
4766
4772
4767 * IPython/genutils.py (page): fixed exception handling so things
4773 * IPython/genutils.py (page): fixed exception handling so things
4768 work both in Unix and Windows correctly. Quitting a pager triggers
4774 work both in Unix and Windows correctly. Quitting a pager triggers
4769 an IOError/broken pipe in Unix, and in windows not finding a pager
4775 an IOError/broken pipe in Unix, and in windows not finding a pager
4770 is also an IOError, so I had to actually look at the return value
4776 is also an IOError, so I had to actually look at the return value
4771 of the exception, not just the exception itself. Should be ok now.
4777 of the exception, not just the exception itself. Should be ok now.
4772
4778
4773 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4779 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4774 modified to allow case-insensitive color scheme changes.
4780 modified to allow case-insensitive color scheme changes.
4775
4781
4776 2002-02-09 Fernando Perez <fperez@colorado.edu>
4782 2002-02-09 Fernando Perez <fperez@colorado.edu>
4777
4783
4778 * IPython/genutils.py (native_line_ends): new function to leave
4784 * IPython/genutils.py (native_line_ends): new function to leave
4779 user config files with os-native line-endings.
4785 user config files with os-native line-endings.
4780
4786
4781 * README and manual updates.
4787 * README and manual updates.
4782
4788
4783 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4789 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4784 instead of StringType to catch Unicode strings.
4790 instead of StringType to catch Unicode strings.
4785
4791
4786 * IPython/genutils.py (filefind): fixed bug for paths with
4792 * IPython/genutils.py (filefind): fixed bug for paths with
4787 embedded spaces (very common in Windows).
4793 embedded spaces (very common in Windows).
4788
4794
4789 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4795 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4790 files under Windows, so that they get automatically associated
4796 files under Windows, so that they get automatically associated
4791 with a text editor. Windows makes it a pain to handle
4797 with a text editor. Windows makes it a pain to handle
4792 extension-less files.
4798 extension-less files.
4793
4799
4794 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4800 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4795 warning about readline only occur for Posix. In Windows there's no
4801 warning about readline only occur for Posix. In Windows there's no
4796 way to get readline, so why bother with the warning.
4802 way to get readline, so why bother with the warning.
4797
4803
4798 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4804 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4799 for __str__ instead of dir(self), since dir() changed in 2.2.
4805 for __str__ instead of dir(self), since dir() changed in 2.2.
4800
4806
4801 * Ported to Windows! Tested on XP, I suspect it should work fine
4807 * Ported to Windows! Tested on XP, I suspect it should work fine
4802 on NT/2000, but I don't think it will work on 98 et al. That
4808 on NT/2000, but I don't think it will work on 98 et al. That
4803 series of Windows is such a piece of junk anyway that I won't try
4809 series of Windows is such a piece of junk anyway that I won't try
4804 porting it there. The XP port was straightforward, showed a few
4810 porting it there. The XP port was straightforward, showed a few
4805 bugs here and there (fixed all), in particular some string
4811 bugs here and there (fixed all), in particular some string
4806 handling stuff which required considering Unicode strings (which
4812 handling stuff which required considering Unicode strings (which
4807 Windows uses). This is good, but hasn't been too tested :) No
4813 Windows uses). This is good, but hasn't been too tested :) No
4808 fancy installer yet, I'll put a note in the manual so people at
4814 fancy installer yet, I'll put a note in the manual so people at
4809 least make manually a shortcut.
4815 least make manually a shortcut.
4810
4816
4811 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4817 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4812 into a single one, "colors". This now controls both prompt and
4818 into a single one, "colors". This now controls both prompt and
4813 exception color schemes, and can be changed both at startup
4819 exception color schemes, and can be changed both at startup
4814 (either via command-line switches or via ipythonrc files) and at
4820 (either via command-line switches or via ipythonrc files) and at
4815 runtime, with @colors.
4821 runtime, with @colors.
4816 (Magic.magic_run): renamed @prun to @run and removed the old
4822 (Magic.magic_run): renamed @prun to @run and removed the old
4817 @run. The two were too similar to warrant keeping both.
4823 @run. The two were too similar to warrant keeping both.
4818
4824
4819 2002-02-03 Fernando Perez <fperez@colorado.edu>
4825 2002-02-03 Fernando Perez <fperez@colorado.edu>
4820
4826
4821 * IPython/iplib.py (install_first_time): Added comment on how to
4827 * IPython/iplib.py (install_first_time): Added comment on how to
4822 configure the color options for first-time users. Put a <return>
4828 configure the color options for first-time users. Put a <return>
4823 request at the end so that small-terminal users get a chance to
4829 request at the end so that small-terminal users get a chance to
4824 read the startup info.
4830 read the startup info.
4825
4831
4826 2002-01-23 Fernando Perez <fperez@colorado.edu>
4832 2002-01-23 Fernando Perez <fperez@colorado.edu>
4827
4833
4828 * IPython/iplib.py (CachedOutput.update): Changed output memory
4834 * IPython/iplib.py (CachedOutput.update): Changed output memory
4829 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4835 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4830 input history we still use _i. Did this b/c these variable are
4836 input history we still use _i. Did this b/c these variable are
4831 very commonly used in interactive work, so the less we need to
4837 very commonly used in interactive work, so the less we need to
4832 type the better off we are.
4838 type the better off we are.
4833 (Magic.magic_prun): updated @prun to better handle the namespaces
4839 (Magic.magic_prun): updated @prun to better handle the namespaces
4834 the file will run in, including a fix for __name__ not being set
4840 the file will run in, including a fix for __name__ not being set
4835 before.
4841 before.
4836
4842
4837 2002-01-20 Fernando Perez <fperez@colorado.edu>
4843 2002-01-20 Fernando Perez <fperez@colorado.edu>
4838
4844
4839 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4845 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4840 extra garbage for Python 2.2. Need to look more carefully into
4846 extra garbage for Python 2.2. Need to look more carefully into
4841 this later.
4847 this later.
4842
4848
4843 2002-01-19 Fernando Perez <fperez@colorado.edu>
4849 2002-01-19 Fernando Perez <fperez@colorado.edu>
4844
4850
4845 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4851 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4846 display SyntaxError exceptions properly formatted when they occur
4852 display SyntaxError exceptions properly formatted when they occur
4847 (they can be triggered by imported code).
4853 (they can be triggered by imported code).
4848
4854
4849 2002-01-18 Fernando Perez <fperez@colorado.edu>
4855 2002-01-18 Fernando Perez <fperez@colorado.edu>
4850
4856
4851 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4857 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4852 SyntaxError exceptions are reported nicely formatted, instead of
4858 SyntaxError exceptions are reported nicely formatted, instead of
4853 spitting out only offset information as before.
4859 spitting out only offset information as before.
4854 (Magic.magic_prun): Added the @prun function for executing
4860 (Magic.magic_prun): Added the @prun function for executing
4855 programs with command line args inside IPython.
4861 programs with command line args inside IPython.
4856
4862
4857 2002-01-16 Fernando Perez <fperez@colorado.edu>
4863 2002-01-16 Fernando Perez <fperez@colorado.edu>
4858
4864
4859 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4865 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4860 to *not* include the last item given in a range. This brings their
4866 to *not* include the last item given in a range. This brings their
4861 behavior in line with Python's slicing:
4867 behavior in line with Python's slicing:
4862 a[n1:n2] -> a[n1]...a[n2-1]
4868 a[n1:n2] -> a[n1]...a[n2-1]
4863 It may be a bit less convenient, but I prefer to stick to Python's
4869 It may be a bit less convenient, but I prefer to stick to Python's
4864 conventions *everywhere*, so users never have to wonder.
4870 conventions *everywhere*, so users never have to wonder.
4865 (Magic.magic_macro): Added @macro function to ease the creation of
4871 (Magic.magic_macro): Added @macro function to ease the creation of
4866 macros.
4872 macros.
4867
4873
4868 2002-01-05 Fernando Perez <fperez@colorado.edu>
4874 2002-01-05 Fernando Perez <fperez@colorado.edu>
4869
4875
4870 * Released 0.2.4.
4876 * Released 0.2.4.
4871
4877
4872 * IPython/iplib.py (Magic.magic_pdef):
4878 * IPython/iplib.py (Magic.magic_pdef):
4873 (InteractiveShell.safe_execfile): report magic lines and error
4879 (InteractiveShell.safe_execfile): report magic lines and error
4874 lines without line numbers so one can easily copy/paste them for
4880 lines without line numbers so one can easily copy/paste them for
4875 re-execution.
4881 re-execution.
4876
4882
4877 * Updated manual with recent changes.
4883 * Updated manual with recent changes.
4878
4884
4879 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4885 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4880 docstring printing when class? is called. Very handy for knowing
4886 docstring printing when class? is called. Very handy for knowing
4881 how to create class instances (as long as __init__ is well
4887 how to create class instances (as long as __init__ is well
4882 documented, of course :)
4888 documented, of course :)
4883 (Magic.magic_doc): print both class and constructor docstrings.
4889 (Magic.magic_doc): print both class and constructor docstrings.
4884 (Magic.magic_pdef): give constructor info if passed a class and
4890 (Magic.magic_pdef): give constructor info if passed a class and
4885 __call__ info for callable object instances.
4891 __call__ info for callable object instances.
4886
4892
4887 2002-01-04 Fernando Perez <fperez@colorado.edu>
4893 2002-01-04 Fernando Perez <fperez@colorado.edu>
4888
4894
4889 * Made deep_reload() off by default. It doesn't always work
4895 * Made deep_reload() off by default. It doesn't always work
4890 exactly as intended, so it's probably safer to have it off. It's
4896 exactly as intended, so it's probably safer to have it off. It's
4891 still available as dreload() anyway, so nothing is lost.
4897 still available as dreload() anyway, so nothing is lost.
4892
4898
4893 2002-01-02 Fernando Perez <fperez@colorado.edu>
4899 2002-01-02 Fernando Perez <fperez@colorado.edu>
4894
4900
4895 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4901 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4896 so I wanted an updated release).
4902 so I wanted an updated release).
4897
4903
4898 2001-12-27 Fernando Perez <fperez@colorado.edu>
4904 2001-12-27 Fernando Perez <fperez@colorado.edu>
4899
4905
4900 * IPython/iplib.py (InteractiveShell.interact): Added the original
4906 * IPython/iplib.py (InteractiveShell.interact): Added the original
4901 code from 'code.py' for this module in order to change the
4907 code from 'code.py' for this module in order to change the
4902 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4908 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4903 the history cache would break when the user hit Ctrl-C, and
4909 the history cache would break when the user hit Ctrl-C, and
4904 interact() offers no way to add any hooks to it.
4910 interact() offers no way to add any hooks to it.
4905
4911
4906 2001-12-23 Fernando Perez <fperez@colorado.edu>
4912 2001-12-23 Fernando Perez <fperez@colorado.edu>
4907
4913
4908 * setup.py: added check for 'MANIFEST' before trying to remove
4914 * setup.py: added check for 'MANIFEST' before trying to remove
4909 it. Thanks to Sean Reifschneider.
4915 it. Thanks to Sean Reifschneider.
4910
4916
4911 2001-12-22 Fernando Perez <fperez@colorado.edu>
4917 2001-12-22 Fernando Perez <fperez@colorado.edu>
4912
4918
4913 * Released 0.2.2.
4919 * Released 0.2.2.
4914
4920
4915 * Finished (reasonably) writing the manual. Later will add the
4921 * Finished (reasonably) writing the manual. Later will add the
4916 python-standard navigation stylesheets, but for the time being
4922 python-standard navigation stylesheets, but for the time being
4917 it's fairly complete. Distribution will include html and pdf
4923 it's fairly complete. Distribution will include html and pdf
4918 versions.
4924 versions.
4919
4925
4920 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4926 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4921 (MayaVi author).
4927 (MayaVi author).
4922
4928
4923 2001-12-21 Fernando Perez <fperez@colorado.edu>
4929 2001-12-21 Fernando Perez <fperez@colorado.edu>
4924
4930
4925 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4931 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4926 good public release, I think (with the manual and the distutils
4932 good public release, I think (with the manual and the distutils
4927 installer). The manual can use some work, but that can go
4933 installer). The manual can use some work, but that can go
4928 slowly. Otherwise I think it's quite nice for end users. Next
4934 slowly. Otherwise I think it's quite nice for end users. Next
4929 summer, rewrite the guts of it...
4935 summer, rewrite the guts of it...
4930
4936
4931 * Changed format of ipythonrc files to use whitespace as the
4937 * Changed format of ipythonrc files to use whitespace as the
4932 separator instead of an explicit '='. Cleaner.
4938 separator instead of an explicit '='. Cleaner.
4933
4939
4934 2001-12-20 Fernando Perez <fperez@colorado.edu>
4940 2001-12-20 Fernando Perez <fperez@colorado.edu>
4935
4941
4936 * Started a manual in LyX. For now it's just a quick merge of the
4942 * Started a manual in LyX. For now it's just a quick merge of the
4937 various internal docstrings and READMEs. Later it may grow into a
4943 various internal docstrings and READMEs. Later it may grow into a
4938 nice, full-blown manual.
4944 nice, full-blown manual.
4939
4945
4940 * Set up a distutils based installer. Installation should now be
4946 * Set up a distutils based installer. Installation should now be
4941 trivially simple for end-users.
4947 trivially simple for end-users.
4942
4948
4943 2001-12-11 Fernando Perez <fperez@colorado.edu>
4949 2001-12-11 Fernando Perez <fperez@colorado.edu>
4944
4950
4945 * Released 0.2.0. First public release, announced it at
4951 * Released 0.2.0. First public release, announced it at
4946 comp.lang.python. From now on, just bugfixes...
4952 comp.lang.python. From now on, just bugfixes...
4947
4953
4948 * Went through all the files, set copyright/license notices and
4954 * Went through all the files, set copyright/license notices and
4949 cleaned up things. Ready for release.
4955 cleaned up things. Ready for release.
4950
4956
4951 2001-12-10 Fernando Perez <fperez@colorado.edu>
4957 2001-12-10 Fernando Perez <fperez@colorado.edu>
4952
4958
4953 * Changed the first-time installer not to use tarfiles. It's more
4959 * Changed the first-time installer not to use tarfiles. It's more
4954 robust now and less unix-dependent. Also makes it easier for
4960 robust now and less unix-dependent. Also makes it easier for
4955 people to later upgrade versions.
4961 people to later upgrade versions.
4956
4962
4957 * Changed @exit to @abort to reflect the fact that it's pretty
4963 * Changed @exit to @abort to reflect the fact that it's pretty
4958 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4964 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4959 becomes significant only when IPyhton is embedded: in that case,
4965 becomes significant only when IPyhton is embedded: in that case,
4960 C-D closes IPython only, but @abort kills the enclosing program
4966 C-D closes IPython only, but @abort kills the enclosing program
4961 too (unless it had called IPython inside a try catching
4967 too (unless it had called IPython inside a try catching
4962 SystemExit).
4968 SystemExit).
4963
4969
4964 * Created Shell module which exposes the actuall IPython Shell
4970 * Created Shell module which exposes the actuall IPython Shell
4965 classes, currently the normal and the embeddable one. This at
4971 classes, currently the normal and the embeddable one. This at
4966 least offers a stable interface we won't need to change when
4972 least offers a stable interface we won't need to change when
4967 (later) the internals are rewritten. That rewrite will be confined
4973 (later) the internals are rewritten. That rewrite will be confined
4968 to iplib and ipmaker, but the Shell interface should remain as is.
4974 to iplib and ipmaker, but the Shell interface should remain as is.
4969
4975
4970 * Added embed module which offers an embeddable IPShell object,
4976 * Added embed module which offers an embeddable IPShell object,
4971 useful to fire up IPython *inside* a running program. Great for
4977 useful to fire up IPython *inside* a running program. Great for
4972 debugging or dynamical data analysis.
4978 debugging or dynamical data analysis.
4973
4979
4974 2001-12-08 Fernando Perez <fperez@colorado.edu>
4980 2001-12-08 Fernando Perez <fperez@colorado.edu>
4975
4981
4976 * Fixed small bug preventing seeing info from methods of defined
4982 * Fixed small bug preventing seeing info from methods of defined
4977 objects (incorrect namespace in _ofind()).
4983 objects (incorrect namespace in _ofind()).
4978
4984
4979 * Documentation cleanup. Moved the main usage docstrings to a
4985 * Documentation cleanup. Moved the main usage docstrings to a
4980 separate file, usage.py (cleaner to maintain, and hopefully in the
4986 separate file, usage.py (cleaner to maintain, and hopefully in the
4981 future some perlpod-like way of producing interactive, man and
4987 future some perlpod-like way of producing interactive, man and
4982 html docs out of it will be found).
4988 html docs out of it will be found).
4983
4989
4984 * Added @profile to see your profile at any time.
4990 * Added @profile to see your profile at any time.
4985
4991
4986 * Added @p as an alias for 'print'. It's especially convenient if
4992 * Added @p as an alias for 'print'. It's especially convenient if
4987 using automagic ('p x' prints x).
4993 using automagic ('p x' prints x).
4988
4994
4989 * Small cleanups and fixes after a pychecker run.
4995 * Small cleanups and fixes after a pychecker run.
4990
4996
4991 * Changed the @cd command to handle @cd - and @cd -<n> for
4997 * Changed the @cd command to handle @cd - and @cd -<n> for
4992 visiting any directory in _dh.
4998 visiting any directory in _dh.
4993
4999
4994 * Introduced _dh, a history of visited directories. @dhist prints
5000 * Introduced _dh, a history of visited directories. @dhist prints
4995 it out with numbers.
5001 it out with numbers.
4996
5002
4997 2001-12-07 Fernando Perez <fperez@colorado.edu>
5003 2001-12-07 Fernando Perez <fperez@colorado.edu>
4998
5004
4999 * Released 0.1.22
5005 * Released 0.1.22
5000
5006
5001 * Made initialization a bit more robust against invalid color
5007 * Made initialization a bit more robust against invalid color
5002 options in user input (exit, not traceback-crash).
5008 options in user input (exit, not traceback-crash).
5003
5009
5004 * Changed the bug crash reporter to write the report only in the
5010 * Changed the bug crash reporter to write the report only in the
5005 user's .ipython directory. That way IPython won't litter people's
5011 user's .ipython directory. That way IPython won't litter people's
5006 hard disks with crash files all over the place. Also print on
5012 hard disks with crash files all over the place. Also print on
5007 screen the necessary mail command.
5013 screen the necessary mail command.
5008
5014
5009 * With the new ultraTB, implemented LightBG color scheme for light
5015 * With the new ultraTB, implemented LightBG color scheme for light
5010 background terminals. A lot of people like white backgrounds, so I
5016 background terminals. A lot of people like white backgrounds, so I
5011 guess we should at least give them something readable.
5017 guess we should at least give them something readable.
5012
5018
5013 2001-12-06 Fernando Perez <fperez@colorado.edu>
5019 2001-12-06 Fernando Perez <fperez@colorado.edu>
5014
5020
5015 * Modified the structure of ultraTB. Now there's a proper class
5021 * Modified the structure of ultraTB. Now there's a proper class
5016 for tables of color schemes which allow adding schemes easily and
5022 for tables of color schemes which allow adding schemes easily and
5017 switching the active scheme without creating a new instance every
5023 switching the active scheme without creating a new instance every
5018 time (which was ridiculous). The syntax for creating new schemes
5024 time (which was ridiculous). The syntax for creating new schemes
5019 is also cleaner. I think ultraTB is finally done, with a clean
5025 is also cleaner. I think ultraTB is finally done, with a clean
5020 class structure. Names are also much cleaner (now there's proper
5026 class structure. Names are also much cleaner (now there's proper
5021 color tables, no need for every variable to also have 'color' in
5027 color tables, no need for every variable to also have 'color' in
5022 its name).
5028 its name).
5023
5029
5024 * Broke down genutils into separate files. Now genutils only
5030 * Broke down genutils into separate files. Now genutils only
5025 contains utility functions, and classes have been moved to their
5031 contains utility functions, and classes have been moved to their
5026 own files (they had enough independent functionality to warrant
5032 own files (they had enough independent functionality to warrant
5027 it): ConfigLoader, OutputTrap, Struct.
5033 it): ConfigLoader, OutputTrap, Struct.
5028
5034
5029 2001-12-05 Fernando Perez <fperez@colorado.edu>
5035 2001-12-05 Fernando Perez <fperez@colorado.edu>
5030
5036
5031 * IPython turns 21! Released version 0.1.21, as a candidate for
5037 * IPython turns 21! Released version 0.1.21, as a candidate for
5032 public consumption. If all goes well, release in a few days.
5038 public consumption. If all goes well, release in a few days.
5033
5039
5034 * Fixed path bug (files in Extensions/ directory wouldn't be found
5040 * Fixed path bug (files in Extensions/ directory wouldn't be found
5035 unless IPython/ was explicitly in sys.path).
5041 unless IPython/ was explicitly in sys.path).
5036
5042
5037 * Extended the FlexCompleter class as MagicCompleter to allow
5043 * Extended the FlexCompleter class as MagicCompleter to allow
5038 completion of @-starting lines.
5044 completion of @-starting lines.
5039
5045
5040 * Created __release__.py file as a central repository for release
5046 * Created __release__.py file as a central repository for release
5041 info that other files can read from.
5047 info that other files can read from.
5042
5048
5043 * Fixed small bug in logging: when logging was turned on in
5049 * Fixed small bug in logging: when logging was turned on in
5044 mid-session, old lines with special meanings (!@?) were being
5050 mid-session, old lines with special meanings (!@?) were being
5045 logged without the prepended comment, which is necessary since
5051 logged without the prepended comment, which is necessary since
5046 they are not truly valid python syntax. This should make session
5052 they are not truly valid python syntax. This should make session
5047 restores produce less errors.
5053 restores produce less errors.
5048
5054
5049 * The namespace cleanup forced me to make a FlexCompleter class
5055 * The namespace cleanup forced me to make a FlexCompleter class
5050 which is nothing but a ripoff of rlcompleter, but with selectable
5056 which is nothing but a ripoff of rlcompleter, but with selectable
5051 namespace (rlcompleter only works in __main__.__dict__). I'll try
5057 namespace (rlcompleter only works in __main__.__dict__). I'll try
5052 to submit a note to the authors to see if this change can be
5058 to submit a note to the authors to see if this change can be
5053 incorporated in future rlcompleter releases (Dec.6: done)
5059 incorporated in future rlcompleter releases (Dec.6: done)
5054
5060
5055 * More fixes to namespace handling. It was a mess! Now all
5061 * More fixes to namespace handling. It was a mess! Now all
5056 explicit references to __main__.__dict__ are gone (except when
5062 explicit references to __main__.__dict__ are gone (except when
5057 really needed) and everything is handled through the namespace
5063 really needed) and everything is handled through the namespace
5058 dicts in the IPython instance. We seem to be getting somewhere
5064 dicts in the IPython instance. We seem to be getting somewhere
5059 with this, finally...
5065 with this, finally...
5060
5066
5061 * Small documentation updates.
5067 * Small documentation updates.
5062
5068
5063 * Created the Extensions directory under IPython (with an
5069 * Created the Extensions directory under IPython (with an
5064 __init__.py). Put the PhysicalQ stuff there. This directory should
5070 __init__.py). Put the PhysicalQ stuff there. This directory should
5065 be used for all special-purpose extensions.
5071 be used for all special-purpose extensions.
5066
5072
5067 * File renaming:
5073 * File renaming:
5068 ipythonlib --> ipmaker
5074 ipythonlib --> ipmaker
5069 ipplib --> iplib
5075 ipplib --> iplib
5070 This makes a bit more sense in terms of what these files actually do.
5076 This makes a bit more sense in terms of what these files actually do.
5071
5077
5072 * Moved all the classes and functions in ipythonlib to ipplib, so
5078 * Moved all the classes and functions in ipythonlib to ipplib, so
5073 now ipythonlib only has make_IPython(). This will ease up its
5079 now ipythonlib only has make_IPython(). This will ease up its
5074 splitting in smaller functional chunks later.
5080 splitting in smaller functional chunks later.
5075
5081
5076 * Cleaned up (done, I think) output of @whos. Better column
5082 * Cleaned up (done, I think) output of @whos. Better column
5077 formatting, and now shows str(var) for as much as it can, which is
5083 formatting, and now shows str(var) for as much as it can, which is
5078 typically what one gets with a 'print var'.
5084 typically what one gets with a 'print var'.
5079
5085
5080 2001-12-04 Fernando Perez <fperez@colorado.edu>
5086 2001-12-04 Fernando Perez <fperez@colorado.edu>
5081
5087
5082 * Fixed namespace problems. Now builtin/IPyhton/user names get
5088 * Fixed namespace problems. Now builtin/IPyhton/user names get
5083 properly reported in their namespace. Internal namespace handling
5089 properly reported in their namespace. Internal namespace handling
5084 is finally getting decent (not perfect yet, but much better than
5090 is finally getting decent (not perfect yet, but much better than
5085 the ad-hoc mess we had).
5091 the ad-hoc mess we had).
5086
5092
5087 * Removed -exit option. If people just want to run a python
5093 * Removed -exit option. If people just want to run a python
5088 script, that's what the normal interpreter is for. Less
5094 script, that's what the normal interpreter is for. Less
5089 unnecessary options, less chances for bugs.
5095 unnecessary options, less chances for bugs.
5090
5096
5091 * Added a crash handler which generates a complete post-mortem if
5097 * Added a crash handler which generates a complete post-mortem if
5092 IPython crashes. This will help a lot in tracking bugs down the
5098 IPython crashes. This will help a lot in tracking bugs down the
5093 road.
5099 road.
5094
5100
5095 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5101 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5096 which were boud to functions being reassigned would bypass the
5102 which were boud to functions being reassigned would bypass the
5097 logger, breaking the sync of _il with the prompt counter. This
5103 logger, breaking the sync of _il with the prompt counter. This
5098 would then crash IPython later when a new line was logged.
5104 would then crash IPython later when a new line was logged.
5099
5105
5100 2001-12-02 Fernando Perez <fperez@colorado.edu>
5106 2001-12-02 Fernando Perez <fperez@colorado.edu>
5101
5107
5102 * Made IPython a package. This means people don't have to clutter
5108 * Made IPython a package. This means people don't have to clutter
5103 their sys.path with yet another directory. Changed the INSTALL
5109 their sys.path with yet another directory. Changed the INSTALL
5104 file accordingly.
5110 file accordingly.
5105
5111
5106 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5112 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5107 sorts its output (so @who shows it sorted) and @whos formats the
5113 sorts its output (so @who shows it sorted) and @whos formats the
5108 table according to the width of the first column. Nicer, easier to
5114 table according to the width of the first column. Nicer, easier to
5109 read. Todo: write a generic table_format() which takes a list of
5115 read. Todo: write a generic table_format() which takes a list of
5110 lists and prints it nicely formatted, with optional row/column
5116 lists and prints it nicely formatted, with optional row/column
5111 separators and proper padding and justification.
5117 separators and proper padding and justification.
5112
5118
5113 * Released 0.1.20
5119 * Released 0.1.20
5114
5120
5115 * Fixed bug in @log which would reverse the inputcache list (a
5121 * Fixed bug in @log which would reverse the inputcache list (a
5116 copy operation was missing).
5122 copy operation was missing).
5117
5123
5118 * Code cleanup. @config was changed to use page(). Better, since
5124 * Code cleanup. @config was changed to use page(). Better, since
5119 its output is always quite long.
5125 its output is always quite long.
5120
5126
5121 * Itpl is back as a dependency. I was having too many problems
5127 * Itpl is back as a dependency. I was having too many problems
5122 getting the parametric aliases to work reliably, and it's just
5128 getting the parametric aliases to work reliably, and it's just
5123 easier to code weird string operations with it than playing %()s
5129 easier to code weird string operations with it than playing %()s
5124 games. It's only ~6k, so I don't think it's too big a deal.
5130 games. It's only ~6k, so I don't think it's too big a deal.
5125
5131
5126 * Found (and fixed) a very nasty bug with history. !lines weren't
5132 * Found (and fixed) a very nasty bug with history. !lines weren't
5127 getting cached, and the out of sync caches would crash
5133 getting cached, and the out of sync caches would crash
5128 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5134 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5129 division of labor a bit better. Bug fixed, cleaner structure.
5135 division of labor a bit better. Bug fixed, cleaner structure.
5130
5136
5131 2001-12-01 Fernando Perez <fperez@colorado.edu>
5137 2001-12-01 Fernando Perez <fperez@colorado.edu>
5132
5138
5133 * Released 0.1.19
5139 * Released 0.1.19
5134
5140
5135 * Added option -n to @hist to prevent line number printing. Much
5141 * Added option -n to @hist to prevent line number printing. Much
5136 easier to copy/paste code this way.
5142 easier to copy/paste code this way.
5137
5143
5138 * Created global _il to hold the input list. Allows easy
5144 * Created global _il to hold the input list. Allows easy
5139 re-execution of blocks of code by slicing it (inspired by Janko's
5145 re-execution of blocks of code by slicing it (inspired by Janko's
5140 comment on 'macros').
5146 comment on 'macros').
5141
5147
5142 * Small fixes and doc updates.
5148 * Small fixes and doc updates.
5143
5149
5144 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5150 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5145 much too fragile with automagic. Handles properly multi-line
5151 much too fragile with automagic. Handles properly multi-line
5146 statements and takes parameters.
5152 statements and takes parameters.
5147
5153
5148 2001-11-30 Fernando Perez <fperez@colorado.edu>
5154 2001-11-30 Fernando Perez <fperez@colorado.edu>
5149
5155
5150 * Version 0.1.18 released.
5156 * Version 0.1.18 released.
5151
5157
5152 * Fixed nasty namespace bug in initial module imports.
5158 * Fixed nasty namespace bug in initial module imports.
5153
5159
5154 * Added copyright/license notes to all code files (except
5160 * Added copyright/license notes to all code files (except
5155 DPyGetOpt). For the time being, LGPL. That could change.
5161 DPyGetOpt). For the time being, LGPL. That could change.
5156
5162
5157 * Rewrote a much nicer README, updated INSTALL, cleaned up
5163 * Rewrote a much nicer README, updated INSTALL, cleaned up
5158 ipythonrc-* samples.
5164 ipythonrc-* samples.
5159
5165
5160 * Overall code/documentation cleanup. Basically ready for
5166 * Overall code/documentation cleanup. Basically ready for
5161 release. Only remaining thing: licence decision (LGPL?).
5167 release. Only remaining thing: licence decision (LGPL?).
5162
5168
5163 * Converted load_config to a class, ConfigLoader. Now recursion
5169 * Converted load_config to a class, ConfigLoader. Now recursion
5164 control is better organized. Doesn't include the same file twice.
5170 control is better organized. Doesn't include the same file twice.
5165
5171
5166 2001-11-29 Fernando Perez <fperez@colorado.edu>
5172 2001-11-29 Fernando Perez <fperez@colorado.edu>
5167
5173
5168 * Got input history working. Changed output history variables from
5174 * Got input history working. Changed output history variables from
5169 _p to _o so that _i is for input and _o for output. Just cleaner
5175 _p to _o so that _i is for input and _o for output. Just cleaner
5170 convention.
5176 convention.
5171
5177
5172 * Implemented parametric aliases. This pretty much allows the
5178 * Implemented parametric aliases. This pretty much allows the
5173 alias system to offer full-blown shell convenience, I think.
5179 alias system to offer full-blown shell convenience, I think.
5174
5180
5175 * Version 0.1.17 released, 0.1.18 opened.
5181 * Version 0.1.17 released, 0.1.18 opened.
5176
5182
5177 * dot_ipython/ipythonrc (alias): added documentation.
5183 * dot_ipython/ipythonrc (alias): added documentation.
5178 (xcolor): Fixed small bug (xcolors -> xcolor)
5184 (xcolor): Fixed small bug (xcolors -> xcolor)
5179
5185
5180 * Changed the alias system. Now alias is a magic command to define
5186 * Changed the alias system. Now alias is a magic command to define
5181 aliases just like the shell. Rationale: the builtin magics should
5187 aliases just like the shell. Rationale: the builtin magics should
5182 be there for things deeply connected to IPython's
5188 be there for things deeply connected to IPython's
5183 architecture. And this is a much lighter system for what I think
5189 architecture. And this is a much lighter system for what I think
5184 is the really important feature: allowing users to define quickly
5190 is the really important feature: allowing users to define quickly
5185 magics that will do shell things for them, so they can customize
5191 magics that will do shell things for them, so they can customize
5186 IPython easily to match their work habits. If someone is really
5192 IPython easily to match their work habits. If someone is really
5187 desperate to have another name for a builtin alias, they can
5193 desperate to have another name for a builtin alias, they can
5188 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5194 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5189 works.
5195 works.
5190
5196
5191 2001-11-28 Fernando Perez <fperez@colorado.edu>
5197 2001-11-28 Fernando Perez <fperez@colorado.edu>
5192
5198
5193 * Changed @file so that it opens the source file at the proper
5199 * Changed @file so that it opens the source file at the proper
5194 line. Since it uses less, if your EDITOR environment is
5200 line. Since it uses less, if your EDITOR environment is
5195 configured, typing v will immediately open your editor of choice
5201 configured, typing v will immediately open your editor of choice
5196 right at the line where the object is defined. Not as quick as
5202 right at the line where the object is defined. Not as quick as
5197 having a direct @edit command, but for all intents and purposes it
5203 having a direct @edit command, but for all intents and purposes it
5198 works. And I don't have to worry about writing @edit to deal with
5204 works. And I don't have to worry about writing @edit to deal with
5199 all the editors, less does that.
5205 all the editors, less does that.
5200
5206
5201 * Version 0.1.16 released, 0.1.17 opened.
5207 * Version 0.1.16 released, 0.1.17 opened.
5202
5208
5203 * Fixed some nasty bugs in the page/page_dumb combo that could
5209 * Fixed some nasty bugs in the page/page_dumb combo that could
5204 crash IPython.
5210 crash IPython.
5205
5211
5206 2001-11-27 Fernando Perez <fperez@colorado.edu>
5212 2001-11-27 Fernando Perez <fperez@colorado.edu>
5207
5213
5208 * Version 0.1.15 released, 0.1.16 opened.
5214 * Version 0.1.15 released, 0.1.16 opened.
5209
5215
5210 * Finally got ? and ?? to work for undefined things: now it's
5216 * Finally got ? and ?? to work for undefined things: now it's
5211 possible to type {}.get? and get information about the get method
5217 possible to type {}.get? and get information about the get method
5212 of dicts, or os.path? even if only os is defined (so technically
5218 of dicts, or os.path? even if only os is defined (so technically
5213 os.path isn't). Works at any level. For example, after import os,
5219 os.path isn't). Works at any level. For example, after import os,
5214 os?, os.path?, os.path.abspath? all work. This is great, took some
5220 os?, os.path?, os.path.abspath? all work. This is great, took some
5215 work in _ofind.
5221 work in _ofind.
5216
5222
5217 * Fixed more bugs with logging. The sanest way to do it was to add
5223 * Fixed more bugs with logging. The sanest way to do it was to add
5218 to @log a 'mode' parameter. Killed two in one shot (this mode
5224 to @log a 'mode' parameter. Killed two in one shot (this mode
5219 option was a request of Janko's). I think it's finally clean
5225 option was a request of Janko's). I think it's finally clean
5220 (famous last words).
5226 (famous last words).
5221
5227
5222 * Added a page_dumb() pager which does a decent job of paging on
5228 * Added a page_dumb() pager which does a decent job of paging on
5223 screen, if better things (like less) aren't available. One less
5229 screen, if better things (like less) aren't available. One less
5224 unix dependency (someday maybe somebody will port this to
5230 unix dependency (someday maybe somebody will port this to
5225 windows).
5231 windows).
5226
5232
5227 * Fixed problem in magic_log: would lock of logging out if log
5233 * Fixed problem in magic_log: would lock of logging out if log
5228 creation failed (because it would still think it had succeeded).
5234 creation failed (because it would still think it had succeeded).
5229
5235
5230 * Improved the page() function using curses to auto-detect screen
5236 * Improved the page() function using curses to auto-detect screen
5231 size. Now it can make a much better decision on whether to print
5237 size. Now it can make a much better decision on whether to print
5232 or page a string. Option screen_length was modified: a value 0
5238 or page a string. Option screen_length was modified: a value 0
5233 means auto-detect, and that's the default now.
5239 means auto-detect, and that's the default now.
5234
5240
5235 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5241 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5236 go out. I'll test it for a few days, then talk to Janko about
5242 go out. I'll test it for a few days, then talk to Janko about
5237 licences and announce it.
5243 licences and announce it.
5238
5244
5239 * Fixed the length of the auto-generated ---> prompt which appears
5245 * Fixed the length of the auto-generated ---> prompt which appears
5240 for auto-parens and auto-quotes. Getting this right isn't trivial,
5246 for auto-parens and auto-quotes. Getting this right isn't trivial,
5241 with all the color escapes, different prompt types and optional
5247 with all the color escapes, different prompt types and optional
5242 separators. But it seems to be working in all the combinations.
5248 separators. But it seems to be working in all the combinations.
5243
5249
5244 2001-11-26 Fernando Perez <fperez@colorado.edu>
5250 2001-11-26 Fernando Perez <fperez@colorado.edu>
5245
5251
5246 * Wrote a regexp filter to get option types from the option names
5252 * Wrote a regexp filter to get option types from the option names
5247 string. This eliminates the need to manually keep two duplicate
5253 string. This eliminates the need to manually keep two duplicate
5248 lists.
5254 lists.
5249
5255
5250 * Removed the unneeded check_option_names. Now options are handled
5256 * Removed the unneeded check_option_names. Now options are handled
5251 in a much saner manner and it's easy to visually check that things
5257 in a much saner manner and it's easy to visually check that things
5252 are ok.
5258 are ok.
5253
5259
5254 * Updated version numbers on all files I modified to carry a
5260 * Updated version numbers on all files I modified to carry a
5255 notice so Janko and Nathan have clear version markers.
5261 notice so Janko and Nathan have clear version markers.
5256
5262
5257 * Updated docstring for ultraTB with my changes. I should send
5263 * Updated docstring for ultraTB with my changes. I should send
5258 this to Nathan.
5264 this to Nathan.
5259
5265
5260 * Lots of small fixes. Ran everything through pychecker again.
5266 * Lots of small fixes. Ran everything through pychecker again.
5261
5267
5262 * Made loading of deep_reload an cmd line option. If it's not too
5268 * Made loading of deep_reload an cmd line option. If it's not too
5263 kosher, now people can just disable it. With -nodeep_reload it's
5269 kosher, now people can just disable it. With -nodeep_reload it's
5264 still available as dreload(), it just won't overwrite reload().
5270 still available as dreload(), it just won't overwrite reload().
5265
5271
5266 * Moved many options to the no| form (-opt and -noopt
5272 * Moved many options to the no| form (-opt and -noopt
5267 accepted). Cleaner.
5273 accepted). Cleaner.
5268
5274
5269 * Changed magic_log so that if called with no parameters, it uses
5275 * Changed magic_log so that if called with no parameters, it uses
5270 'rotate' mode. That way auto-generated logs aren't automatically
5276 'rotate' mode. That way auto-generated logs aren't automatically
5271 over-written. For normal logs, now a backup is made if it exists
5277 over-written. For normal logs, now a backup is made if it exists
5272 (only 1 level of backups). A new 'backup' mode was added to the
5278 (only 1 level of backups). A new 'backup' mode was added to the
5273 Logger class to support this. This was a request by Janko.
5279 Logger class to support this. This was a request by Janko.
5274
5280
5275 * Added @logoff/@logon to stop/restart an active log.
5281 * Added @logoff/@logon to stop/restart an active log.
5276
5282
5277 * Fixed a lot of bugs in log saving/replay. It was pretty
5283 * Fixed a lot of bugs in log saving/replay. It was pretty
5278 broken. Now special lines (!@,/) appear properly in the command
5284 broken. Now special lines (!@,/) appear properly in the command
5279 history after a log replay.
5285 history after a log replay.
5280
5286
5281 * Tried and failed to implement full session saving via pickle. My
5287 * Tried and failed to implement full session saving via pickle. My
5282 idea was to pickle __main__.__dict__, but modules can't be
5288 idea was to pickle __main__.__dict__, but modules can't be
5283 pickled. This would be a better alternative to replaying logs, but
5289 pickled. This would be a better alternative to replaying logs, but
5284 seems quite tricky to get to work. Changed -session to be called
5290 seems quite tricky to get to work. Changed -session to be called
5285 -logplay, which more accurately reflects what it does. And if we
5291 -logplay, which more accurately reflects what it does. And if we
5286 ever get real session saving working, -session is now available.
5292 ever get real session saving working, -session is now available.
5287
5293
5288 * Implemented color schemes for prompts also. As for tracebacks,
5294 * Implemented color schemes for prompts also. As for tracebacks,
5289 currently only NoColor and Linux are supported. But now the
5295 currently only NoColor and Linux are supported. But now the
5290 infrastructure is in place, based on a generic ColorScheme
5296 infrastructure is in place, based on a generic ColorScheme
5291 class. So writing and activating new schemes both for the prompts
5297 class. So writing and activating new schemes both for the prompts
5292 and the tracebacks should be straightforward.
5298 and the tracebacks should be straightforward.
5293
5299
5294 * Version 0.1.13 released, 0.1.14 opened.
5300 * Version 0.1.13 released, 0.1.14 opened.
5295
5301
5296 * Changed handling of options for output cache. Now counter is
5302 * Changed handling of options for output cache. Now counter is
5297 hardwired starting at 1 and one specifies the maximum number of
5303 hardwired starting at 1 and one specifies the maximum number of
5298 entries *in the outcache* (not the max prompt counter). This is
5304 entries *in the outcache* (not the max prompt counter). This is
5299 much better, since many statements won't increase the cache
5305 much better, since many statements won't increase the cache
5300 count. It also eliminated some confusing options, now there's only
5306 count. It also eliminated some confusing options, now there's only
5301 one: cache_size.
5307 one: cache_size.
5302
5308
5303 * Added 'alias' magic function and magic_alias option in the
5309 * Added 'alias' magic function and magic_alias option in the
5304 ipythonrc file. Now the user can easily define whatever names he
5310 ipythonrc file. Now the user can easily define whatever names he
5305 wants for the magic functions without having to play weird
5311 wants for the magic functions without having to play weird
5306 namespace games. This gives IPython a real shell-like feel.
5312 namespace games. This gives IPython a real shell-like feel.
5307
5313
5308 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5314 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5309 @ or not).
5315 @ or not).
5310
5316
5311 This was one of the last remaining 'visible' bugs (that I know
5317 This was one of the last remaining 'visible' bugs (that I know
5312 of). I think if I can clean up the session loading so it works
5318 of). I think if I can clean up the session loading so it works
5313 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5319 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5314 about licensing).
5320 about licensing).
5315
5321
5316 2001-11-25 Fernando Perez <fperez@colorado.edu>
5322 2001-11-25 Fernando Perez <fperez@colorado.edu>
5317
5323
5318 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5324 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5319 there's a cleaner distinction between what ? and ?? show.
5325 there's a cleaner distinction between what ? and ?? show.
5320
5326
5321 * Added screen_length option. Now the user can define his own
5327 * Added screen_length option. Now the user can define his own
5322 screen size for page() operations.
5328 screen size for page() operations.
5323
5329
5324 * Implemented magic shell-like functions with automatic code
5330 * Implemented magic shell-like functions with automatic code
5325 generation. Now adding another function is just a matter of adding
5331 generation. Now adding another function is just a matter of adding
5326 an entry to a dict, and the function is dynamically generated at
5332 an entry to a dict, and the function is dynamically generated at
5327 run-time. Python has some really cool features!
5333 run-time. Python has some really cool features!
5328
5334
5329 * Renamed many options to cleanup conventions a little. Now all
5335 * Renamed many options to cleanup conventions a little. Now all
5330 are lowercase, and only underscores where needed. Also in the code
5336 are lowercase, and only underscores where needed. Also in the code
5331 option name tables are clearer.
5337 option name tables are clearer.
5332
5338
5333 * Changed prompts a little. Now input is 'In [n]:' instead of
5339 * Changed prompts a little. Now input is 'In [n]:' instead of
5334 'In[n]:='. This allows it the numbers to be aligned with the
5340 'In[n]:='. This allows it the numbers to be aligned with the
5335 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5341 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5336 Python (it was a Mathematica thing). The '...' continuation prompt
5342 Python (it was a Mathematica thing). The '...' continuation prompt
5337 was also changed a little to align better.
5343 was also changed a little to align better.
5338
5344
5339 * Fixed bug when flushing output cache. Not all _p<n> variables
5345 * Fixed bug when flushing output cache. Not all _p<n> variables
5340 exist, so their deletion needs to be wrapped in a try:
5346 exist, so their deletion needs to be wrapped in a try:
5341
5347
5342 * Figured out how to properly use inspect.formatargspec() (it
5348 * Figured out how to properly use inspect.formatargspec() (it
5343 requires the args preceded by *). So I removed all the code from
5349 requires the args preceded by *). So I removed all the code from
5344 _get_pdef in Magic, which was just replicating that.
5350 _get_pdef in Magic, which was just replicating that.
5345
5351
5346 * Added test to prefilter to allow redefining magic function names
5352 * Added test to prefilter to allow redefining magic function names
5347 as variables. This is ok, since the @ form is always available,
5353 as variables. This is ok, since the @ form is always available,
5348 but whe should allow the user to define a variable called 'ls' if
5354 but whe should allow the user to define a variable called 'ls' if
5349 he needs it.
5355 he needs it.
5350
5356
5351 * Moved the ToDo information from README into a separate ToDo.
5357 * Moved the ToDo information from README into a separate ToDo.
5352
5358
5353 * General code cleanup and small bugfixes. I think it's close to a
5359 * General code cleanup and small bugfixes. I think it's close to a
5354 state where it can be released, obviously with a big 'beta'
5360 state where it can be released, obviously with a big 'beta'
5355 warning on it.
5361 warning on it.
5356
5362
5357 * Got the magic function split to work. Now all magics are defined
5363 * Got the magic function split to work. Now all magics are defined
5358 in a separate class. It just organizes things a bit, and now
5364 in a separate class. It just organizes things a bit, and now
5359 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5365 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5360 was too long).
5366 was too long).
5361
5367
5362 * Changed @clear to @reset to avoid potential confusions with
5368 * Changed @clear to @reset to avoid potential confusions with
5363 the shell command clear. Also renamed @cl to @clear, which does
5369 the shell command clear. Also renamed @cl to @clear, which does
5364 exactly what people expect it to from their shell experience.
5370 exactly what people expect it to from their shell experience.
5365
5371
5366 Added a check to the @reset command (since it's so
5372 Added a check to the @reset command (since it's so
5367 destructive, it's probably a good idea to ask for confirmation).
5373 destructive, it's probably a good idea to ask for confirmation).
5368 But now reset only works for full namespace resetting. Since the
5374 But now reset only works for full namespace resetting. Since the
5369 del keyword is already there for deleting a few specific
5375 del keyword is already there for deleting a few specific
5370 variables, I don't see the point of having a redundant magic
5376 variables, I don't see the point of having a redundant magic
5371 function for the same task.
5377 function for the same task.
5372
5378
5373 2001-11-24 Fernando Perez <fperez@colorado.edu>
5379 2001-11-24 Fernando Perez <fperez@colorado.edu>
5374
5380
5375 * Updated the builtin docs (esp. the ? ones).
5381 * Updated the builtin docs (esp. the ? ones).
5376
5382
5377 * Ran all the code through pychecker. Not terribly impressed with
5383 * Ran all the code through pychecker. Not terribly impressed with
5378 it: lots of spurious warnings and didn't really find anything of
5384 it: lots of spurious warnings and didn't really find anything of
5379 substance (just a few modules being imported and not used).
5385 substance (just a few modules being imported and not used).
5380
5386
5381 * Implemented the new ultraTB functionality into IPython. New
5387 * Implemented the new ultraTB functionality into IPython. New
5382 option: xcolors. This chooses color scheme. xmode now only selects
5388 option: xcolors. This chooses color scheme. xmode now only selects
5383 between Plain and Verbose. Better orthogonality.
5389 between Plain and Verbose. Better orthogonality.
5384
5390
5385 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5391 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5386 mode and color scheme for the exception handlers. Now it's
5392 mode and color scheme for the exception handlers. Now it's
5387 possible to have the verbose traceback with no coloring.
5393 possible to have the verbose traceback with no coloring.
5388
5394
5389 2001-11-23 Fernando Perez <fperez@colorado.edu>
5395 2001-11-23 Fernando Perez <fperez@colorado.edu>
5390
5396
5391 * Version 0.1.12 released, 0.1.13 opened.
5397 * Version 0.1.12 released, 0.1.13 opened.
5392
5398
5393 * Removed option to set auto-quote and auto-paren escapes by
5399 * Removed option to set auto-quote and auto-paren escapes by
5394 user. The chances of breaking valid syntax are just too high. If
5400 user. The chances of breaking valid syntax are just too high. If
5395 someone *really* wants, they can always dig into the code.
5401 someone *really* wants, they can always dig into the code.
5396
5402
5397 * Made prompt separators configurable.
5403 * Made prompt separators configurable.
5398
5404
5399 2001-11-22 Fernando Perez <fperez@colorado.edu>
5405 2001-11-22 Fernando Perez <fperez@colorado.edu>
5400
5406
5401 * Small bugfixes in many places.
5407 * Small bugfixes in many places.
5402
5408
5403 * Removed the MyCompleter class from ipplib. It seemed redundant
5409 * Removed the MyCompleter class from ipplib. It seemed redundant
5404 with the C-p,C-n history search functionality. Less code to
5410 with the C-p,C-n history search functionality. Less code to
5405 maintain.
5411 maintain.
5406
5412
5407 * Moved all the original ipython.py code into ipythonlib.py. Right
5413 * Moved all the original ipython.py code into ipythonlib.py. Right
5408 now it's just one big dump into a function called make_IPython, so
5414 now it's just one big dump into a function called make_IPython, so
5409 no real modularity has been gained. But at least it makes the
5415 no real modularity has been gained. But at least it makes the
5410 wrapper script tiny, and since ipythonlib is a module, it gets
5416 wrapper script tiny, and since ipythonlib is a module, it gets
5411 compiled and startup is much faster.
5417 compiled and startup is much faster.
5412
5418
5413 This is a reasobably 'deep' change, so we should test it for a
5419 This is a reasobably 'deep' change, so we should test it for a
5414 while without messing too much more with the code.
5420 while without messing too much more with the code.
5415
5421
5416 2001-11-21 Fernando Perez <fperez@colorado.edu>
5422 2001-11-21 Fernando Perez <fperez@colorado.edu>
5417
5423
5418 * Version 0.1.11 released, 0.1.12 opened for further work.
5424 * Version 0.1.11 released, 0.1.12 opened for further work.
5419
5425
5420 * Removed dependency on Itpl. It was only needed in one place. It
5426 * Removed dependency on Itpl. It was only needed in one place. It
5421 would be nice if this became part of python, though. It makes life
5427 would be nice if this became part of python, though. It makes life
5422 *a lot* easier in some cases.
5428 *a lot* easier in some cases.
5423
5429
5424 * Simplified the prefilter code a bit. Now all handlers are
5430 * Simplified the prefilter code a bit. Now all handlers are
5425 expected to explicitly return a value (at least a blank string).
5431 expected to explicitly return a value (at least a blank string).
5426
5432
5427 * Heavy edits in ipplib. Removed the help system altogether. Now
5433 * Heavy edits in ipplib. Removed the help system altogether. Now
5428 obj?/?? is used for inspecting objects, a magic @doc prints
5434 obj?/?? is used for inspecting objects, a magic @doc prints
5429 docstrings, and full-blown Python help is accessed via the 'help'
5435 docstrings, and full-blown Python help is accessed via the 'help'
5430 keyword. This cleans up a lot of code (less to maintain) and does
5436 keyword. This cleans up a lot of code (less to maintain) and does
5431 the job. Since 'help' is now a standard Python component, might as
5437 the job. Since 'help' is now a standard Python component, might as
5432 well use it and remove duplicate functionality.
5438 well use it and remove duplicate functionality.
5433
5439
5434 Also removed the option to use ipplib as a standalone program. By
5440 Also removed the option to use ipplib as a standalone program. By
5435 now it's too dependent on other parts of IPython to function alone.
5441 now it's too dependent on other parts of IPython to function alone.
5436
5442
5437 * Fixed bug in genutils.pager. It would crash if the pager was
5443 * Fixed bug in genutils.pager. It would crash if the pager was
5438 exited immediately after opening (broken pipe).
5444 exited immediately after opening (broken pipe).
5439
5445
5440 * Trimmed down the VerboseTB reporting a little. The header is
5446 * Trimmed down the VerboseTB reporting a little. The header is
5441 much shorter now and the repeated exception arguments at the end
5447 much shorter now and the repeated exception arguments at the end
5442 have been removed. For interactive use the old header seemed a bit
5448 have been removed. For interactive use the old header seemed a bit
5443 excessive.
5449 excessive.
5444
5450
5445 * Fixed small bug in output of @whos for variables with multi-word
5451 * Fixed small bug in output of @whos for variables with multi-word
5446 types (only first word was displayed).
5452 types (only first word was displayed).
5447
5453
5448 2001-11-17 Fernando Perez <fperez@colorado.edu>
5454 2001-11-17 Fernando Perez <fperez@colorado.edu>
5449
5455
5450 * Version 0.1.10 released, 0.1.11 opened for further work.
5456 * Version 0.1.10 released, 0.1.11 opened for further work.
5451
5457
5452 * Modified dirs and friends. dirs now *returns* the stack (not
5458 * Modified dirs and friends. dirs now *returns* the stack (not
5453 prints), so one can manipulate it as a variable. Convenient to
5459 prints), so one can manipulate it as a variable. Convenient to
5454 travel along many directories.
5460 travel along many directories.
5455
5461
5456 * Fixed bug in magic_pdef: would only work with functions with
5462 * Fixed bug in magic_pdef: would only work with functions with
5457 arguments with default values.
5463 arguments with default values.
5458
5464
5459 2001-11-14 Fernando Perez <fperez@colorado.edu>
5465 2001-11-14 Fernando Perez <fperez@colorado.edu>
5460
5466
5461 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5467 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5462 example with IPython. Various other minor fixes and cleanups.
5468 example with IPython. Various other minor fixes and cleanups.
5463
5469
5464 * Version 0.1.9 released, 0.1.10 opened for further work.
5470 * Version 0.1.9 released, 0.1.10 opened for further work.
5465
5471
5466 * Added sys.path to the list of directories searched in the
5472 * Added sys.path to the list of directories searched in the
5467 execfile= option. It used to be the current directory and the
5473 execfile= option. It used to be the current directory and the
5468 user's IPYTHONDIR only.
5474 user's IPYTHONDIR only.
5469
5475
5470 2001-11-13 Fernando Perez <fperez@colorado.edu>
5476 2001-11-13 Fernando Perez <fperez@colorado.edu>
5471
5477
5472 * Reinstated the raw_input/prefilter separation that Janko had
5478 * Reinstated the raw_input/prefilter separation that Janko had
5473 initially. This gives a more convenient setup for extending the
5479 initially. This gives a more convenient setup for extending the
5474 pre-processor from the outside: raw_input always gets a string,
5480 pre-processor from the outside: raw_input always gets a string,
5475 and prefilter has to process it. We can then redefine prefilter
5481 and prefilter has to process it. We can then redefine prefilter
5476 from the outside and implement extensions for special
5482 from the outside and implement extensions for special
5477 purposes.
5483 purposes.
5478
5484
5479 Today I got one for inputting PhysicalQuantity objects
5485 Today I got one for inputting PhysicalQuantity objects
5480 (from Scientific) without needing any function calls at
5486 (from Scientific) without needing any function calls at
5481 all. Extremely convenient, and it's all done as a user-level
5487 all. Extremely convenient, and it's all done as a user-level
5482 extension (no IPython code was touched). Now instead of:
5488 extension (no IPython code was touched). Now instead of:
5483 a = PhysicalQuantity(4.2,'m/s**2')
5489 a = PhysicalQuantity(4.2,'m/s**2')
5484 one can simply say
5490 one can simply say
5485 a = 4.2 m/s**2
5491 a = 4.2 m/s**2
5486 or even
5492 or even
5487 a = 4.2 m/s^2
5493 a = 4.2 m/s^2
5488
5494
5489 I use this, but it's also a proof of concept: IPython really is
5495 I use this, but it's also a proof of concept: IPython really is
5490 fully user-extensible, even at the level of the parsing of the
5496 fully user-extensible, even at the level of the parsing of the
5491 command line. It's not trivial, but it's perfectly doable.
5497 command line. It's not trivial, but it's perfectly doable.
5492
5498
5493 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5499 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5494 the problem of modules being loaded in the inverse order in which
5500 the problem of modules being loaded in the inverse order in which
5495 they were defined in
5501 they were defined in
5496
5502
5497 * Version 0.1.8 released, 0.1.9 opened for further work.
5503 * Version 0.1.8 released, 0.1.9 opened for further work.
5498
5504
5499 * Added magics pdef, source and file. They respectively show the
5505 * Added magics pdef, source and file. They respectively show the
5500 definition line ('prototype' in C), source code and full python
5506 definition line ('prototype' in C), source code and full python
5501 file for any callable object. The object inspector oinfo uses
5507 file for any callable object. The object inspector oinfo uses
5502 these to show the same information.
5508 these to show the same information.
5503
5509
5504 * Version 0.1.7 released, 0.1.8 opened for further work.
5510 * Version 0.1.7 released, 0.1.8 opened for further work.
5505
5511
5506 * Separated all the magic functions into a class called Magic. The
5512 * Separated all the magic functions into a class called Magic. The
5507 InteractiveShell class was becoming too big for Xemacs to handle
5513 InteractiveShell class was becoming too big for Xemacs to handle
5508 (de-indenting a line would lock it up for 10 seconds while it
5514 (de-indenting a line would lock it up for 10 seconds while it
5509 backtracked on the whole class!)
5515 backtracked on the whole class!)
5510
5516
5511 FIXME: didn't work. It can be done, but right now namespaces are
5517 FIXME: didn't work. It can be done, but right now namespaces are
5512 all messed up. Do it later (reverted it for now, so at least
5518 all messed up. Do it later (reverted it for now, so at least
5513 everything works as before).
5519 everything works as before).
5514
5520
5515 * Got the object introspection system (magic_oinfo) working! I
5521 * Got the object introspection system (magic_oinfo) working! I
5516 think this is pretty much ready for release to Janko, so he can
5522 think this is pretty much ready for release to Janko, so he can
5517 test it for a while and then announce it. Pretty much 100% of what
5523 test it for a while and then announce it. Pretty much 100% of what
5518 I wanted for the 'phase 1' release is ready. Happy, tired.
5524 I wanted for the 'phase 1' release is ready. Happy, tired.
5519
5525
5520 2001-11-12 Fernando Perez <fperez@colorado.edu>
5526 2001-11-12 Fernando Perez <fperez@colorado.edu>
5521
5527
5522 * Version 0.1.6 released, 0.1.7 opened for further work.
5528 * Version 0.1.6 released, 0.1.7 opened for further work.
5523
5529
5524 * Fixed bug in printing: it used to test for truth before
5530 * Fixed bug in printing: it used to test for truth before
5525 printing, so 0 wouldn't print. Now checks for None.
5531 printing, so 0 wouldn't print. Now checks for None.
5526
5532
5527 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5533 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5528 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5534 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5529 reaches by hand into the outputcache. Think of a better way to do
5535 reaches by hand into the outputcache. Think of a better way to do
5530 this later.
5536 this later.
5531
5537
5532 * Various small fixes thanks to Nathan's comments.
5538 * Various small fixes thanks to Nathan's comments.
5533
5539
5534 * Changed magic_pprint to magic_Pprint. This way it doesn't
5540 * Changed magic_pprint to magic_Pprint. This way it doesn't
5535 collide with pprint() and the name is consistent with the command
5541 collide with pprint() and the name is consistent with the command
5536 line option.
5542 line option.
5537
5543
5538 * Changed prompt counter behavior to be fully like
5544 * Changed prompt counter behavior to be fully like
5539 Mathematica's. That is, even input that doesn't return a result
5545 Mathematica's. That is, even input that doesn't return a result
5540 raises the prompt counter. The old behavior was kind of confusing
5546 raises the prompt counter. The old behavior was kind of confusing
5541 (getting the same prompt number several times if the operation
5547 (getting the same prompt number several times if the operation
5542 didn't return a result).
5548 didn't return a result).
5543
5549
5544 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5550 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5545
5551
5546 * Fixed -Classic mode (wasn't working anymore).
5552 * Fixed -Classic mode (wasn't working anymore).
5547
5553
5548 * Added colored prompts using Nathan's new code. Colors are
5554 * Added colored prompts using Nathan's new code. Colors are
5549 currently hardwired, they can be user-configurable. For
5555 currently hardwired, they can be user-configurable. For
5550 developers, they can be chosen in file ipythonlib.py, at the
5556 developers, they can be chosen in file ipythonlib.py, at the
5551 beginning of the CachedOutput class def.
5557 beginning of the CachedOutput class def.
5552
5558
5553 2001-11-11 Fernando Perez <fperez@colorado.edu>
5559 2001-11-11 Fernando Perez <fperez@colorado.edu>
5554
5560
5555 * Version 0.1.5 released, 0.1.6 opened for further work.
5561 * Version 0.1.5 released, 0.1.6 opened for further work.
5556
5562
5557 * Changed magic_env to *return* the environment as a dict (not to
5563 * Changed magic_env to *return* the environment as a dict (not to
5558 print it). This way it prints, but it can also be processed.
5564 print it). This way it prints, but it can also be processed.
5559
5565
5560 * Added Verbose exception reporting to interactive
5566 * Added Verbose exception reporting to interactive
5561 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5567 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5562 traceback. Had to make some changes to the ultraTB file. This is
5568 traceback. Had to make some changes to the ultraTB file. This is
5563 probably the last 'big' thing in my mental todo list. This ties
5569 probably the last 'big' thing in my mental todo list. This ties
5564 in with the next entry:
5570 in with the next entry:
5565
5571
5566 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5572 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5567 has to specify is Plain, Color or Verbose for all exception
5573 has to specify is Plain, Color or Verbose for all exception
5568 handling.
5574 handling.
5569
5575
5570 * Removed ShellServices option. All this can really be done via
5576 * Removed ShellServices option. All this can really be done via
5571 the magic system. It's easier to extend, cleaner and has automatic
5577 the magic system. It's easier to extend, cleaner and has automatic
5572 namespace protection and documentation.
5578 namespace protection and documentation.
5573
5579
5574 2001-11-09 Fernando Perez <fperez@colorado.edu>
5580 2001-11-09 Fernando Perez <fperez@colorado.edu>
5575
5581
5576 * Fixed bug in output cache flushing (missing parameter to
5582 * Fixed bug in output cache flushing (missing parameter to
5577 __init__). Other small bugs fixed (found using pychecker).
5583 __init__). Other small bugs fixed (found using pychecker).
5578
5584
5579 * Version 0.1.4 opened for bugfixing.
5585 * Version 0.1.4 opened for bugfixing.
5580
5586
5581 2001-11-07 Fernando Perez <fperez@colorado.edu>
5587 2001-11-07 Fernando Perez <fperez@colorado.edu>
5582
5588
5583 * Version 0.1.3 released, mainly because of the raw_input bug.
5589 * Version 0.1.3 released, mainly because of the raw_input bug.
5584
5590
5585 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5591 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5586 and when testing for whether things were callable, a call could
5592 and when testing for whether things were callable, a call could
5587 actually be made to certain functions. They would get called again
5593 actually be made to certain functions. They would get called again
5588 once 'really' executed, with a resulting double call. A disaster
5594 once 'really' executed, with a resulting double call. A disaster
5589 in many cases (list.reverse() would never work!).
5595 in many cases (list.reverse() would never work!).
5590
5596
5591 * Removed prefilter() function, moved its code to raw_input (which
5597 * Removed prefilter() function, moved its code to raw_input (which
5592 after all was just a near-empty caller for prefilter). This saves
5598 after all was just a near-empty caller for prefilter). This saves
5593 a function call on every prompt, and simplifies the class a tiny bit.
5599 a function call on every prompt, and simplifies the class a tiny bit.
5594
5600
5595 * Fix _ip to __ip name in magic example file.
5601 * Fix _ip to __ip name in magic example file.
5596
5602
5597 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5603 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5598 work with non-gnu versions of tar.
5604 work with non-gnu versions of tar.
5599
5605
5600 2001-11-06 Fernando Perez <fperez@colorado.edu>
5606 2001-11-06 Fernando Perez <fperez@colorado.edu>
5601
5607
5602 * Version 0.1.2. Just to keep track of the recent changes.
5608 * Version 0.1.2. Just to keep track of the recent changes.
5603
5609
5604 * Fixed nasty bug in output prompt routine. It used to check 'if
5610 * Fixed nasty bug in output prompt routine. It used to check 'if
5605 arg != None...'. Problem is, this fails if arg implements a
5611 arg != None...'. Problem is, this fails if arg implements a
5606 special comparison (__cmp__) which disallows comparing to
5612 special comparison (__cmp__) which disallows comparing to
5607 None. Found it when trying to use the PhysicalQuantity module from
5613 None. Found it when trying to use the PhysicalQuantity module from
5608 ScientificPython.
5614 ScientificPython.
5609
5615
5610 2001-11-05 Fernando Perez <fperez@colorado.edu>
5616 2001-11-05 Fernando Perez <fperez@colorado.edu>
5611
5617
5612 * Also added dirs. Now the pushd/popd/dirs family functions
5618 * Also added dirs. Now the pushd/popd/dirs family functions
5613 basically like the shell, with the added convenience of going home
5619 basically like the shell, with the added convenience of going home
5614 when called with no args.
5620 when called with no args.
5615
5621
5616 * pushd/popd slightly modified to mimic shell behavior more
5622 * pushd/popd slightly modified to mimic shell behavior more
5617 closely.
5623 closely.
5618
5624
5619 * Added env,pushd,popd from ShellServices as magic functions. I
5625 * Added env,pushd,popd from ShellServices as magic functions. I
5620 think the cleanest will be to port all desired functions from
5626 think the cleanest will be to port all desired functions from
5621 ShellServices as magics and remove ShellServices altogether. This
5627 ShellServices as magics and remove ShellServices altogether. This
5622 will provide a single, clean way of adding functionality
5628 will provide a single, clean way of adding functionality
5623 (shell-type or otherwise) to IP.
5629 (shell-type or otherwise) to IP.
5624
5630
5625 2001-11-04 Fernando Perez <fperez@colorado.edu>
5631 2001-11-04 Fernando Perez <fperez@colorado.edu>
5626
5632
5627 * Added .ipython/ directory to sys.path. This way users can keep
5633 * Added .ipython/ directory to sys.path. This way users can keep
5628 customizations there and access them via import.
5634 customizations there and access them via import.
5629
5635
5630 2001-11-03 Fernando Perez <fperez@colorado.edu>
5636 2001-11-03 Fernando Perez <fperez@colorado.edu>
5631
5637
5632 * Opened version 0.1.1 for new changes.
5638 * Opened version 0.1.1 for new changes.
5633
5639
5634 * Changed version number to 0.1.0: first 'public' release, sent to
5640 * Changed version number to 0.1.0: first 'public' release, sent to
5635 Nathan and Janko.
5641 Nathan and Janko.
5636
5642
5637 * Lots of small fixes and tweaks.
5643 * Lots of small fixes and tweaks.
5638
5644
5639 * Minor changes to whos format. Now strings are shown, snipped if
5645 * Minor changes to whos format. Now strings are shown, snipped if
5640 too long.
5646 too long.
5641
5647
5642 * Changed ShellServices to work on __main__ so they show up in @who
5648 * Changed ShellServices to work on __main__ so they show up in @who
5643
5649
5644 * Help also works with ? at the end of a line:
5650 * Help also works with ? at the end of a line:
5645 ?sin and sin?
5651 ?sin and sin?
5646 both produce the same effect. This is nice, as often I use the
5652 both produce the same effect. This is nice, as often I use the
5647 tab-complete to find the name of a method, but I used to then have
5653 tab-complete to find the name of a method, but I used to then have
5648 to go to the beginning of the line to put a ? if I wanted more
5654 to go to the beginning of the line to put a ? if I wanted more
5649 info. Now I can just add the ? and hit return. Convenient.
5655 info. Now I can just add the ? and hit return. Convenient.
5650
5656
5651 2001-11-02 Fernando Perez <fperez@colorado.edu>
5657 2001-11-02 Fernando Perez <fperez@colorado.edu>
5652
5658
5653 * Python version check (>=2.1) added.
5659 * Python version check (>=2.1) added.
5654
5660
5655 * Added LazyPython documentation. At this point the docs are quite
5661 * Added LazyPython documentation. At this point the docs are quite
5656 a mess. A cleanup is in order.
5662 a mess. A cleanup is in order.
5657
5663
5658 * Auto-installer created. For some bizarre reason, the zipfiles
5664 * Auto-installer created. For some bizarre reason, the zipfiles
5659 module isn't working on my system. So I made a tar version
5665 module isn't working on my system. So I made a tar version
5660 (hopefully the command line options in various systems won't kill
5666 (hopefully the command line options in various systems won't kill
5661 me).
5667 me).
5662
5668
5663 * Fixes to Struct in genutils. Now all dictionary-like methods are
5669 * Fixes to Struct in genutils. Now all dictionary-like methods are
5664 protected (reasonably).
5670 protected (reasonably).
5665
5671
5666 * Added pager function to genutils and changed ? to print usage
5672 * Added pager function to genutils and changed ? to print usage
5667 note through it (it was too long).
5673 note through it (it was too long).
5668
5674
5669 * Added the LazyPython functionality. Works great! I changed the
5675 * Added the LazyPython functionality. Works great! I changed the
5670 auto-quote escape to ';', it's on home row and next to '. But
5676 auto-quote escape to ';', it's on home row and next to '. But
5671 both auto-quote and auto-paren (still /) escapes are command-line
5677 both auto-quote and auto-paren (still /) escapes are command-line
5672 parameters.
5678 parameters.
5673
5679
5674
5680
5675 2001-11-01 Fernando Perez <fperez@colorado.edu>
5681 2001-11-01 Fernando Perez <fperez@colorado.edu>
5676
5682
5677 * Version changed to 0.0.7. Fairly large change: configuration now
5683 * Version changed to 0.0.7. Fairly large change: configuration now
5678 is all stored in a directory, by default .ipython. There, all
5684 is all stored in a directory, by default .ipython. There, all
5679 config files have normal looking names (not .names)
5685 config files have normal looking names (not .names)
5680
5686
5681 * Version 0.0.6 Released first to Lucas and Archie as a test
5687 * Version 0.0.6 Released first to Lucas and Archie as a test
5682 run. Since it's the first 'semi-public' release, change version to
5688 run. Since it's the first 'semi-public' release, change version to
5683 > 0.0.6 for any changes now.
5689 > 0.0.6 for any changes now.
5684
5690
5685 * Stuff I had put in the ipplib.py changelog:
5691 * Stuff I had put in the ipplib.py changelog:
5686
5692
5687 Changes to InteractiveShell:
5693 Changes to InteractiveShell:
5688
5694
5689 - Made the usage message a parameter.
5695 - Made the usage message a parameter.
5690
5696
5691 - Require the name of the shell variable to be given. It's a bit
5697 - Require the name of the shell variable to be given. It's a bit
5692 of a hack, but allows the name 'shell' not to be hardwired in the
5698 of a hack, but allows the name 'shell' not to be hardwired in the
5693 magic (@) handler, which is problematic b/c it requires
5699 magic (@) handler, which is problematic b/c it requires
5694 polluting the global namespace with 'shell'. This in turn is
5700 polluting the global namespace with 'shell'. This in turn is
5695 fragile: if a user redefines a variable called shell, things
5701 fragile: if a user redefines a variable called shell, things
5696 break.
5702 break.
5697
5703
5698 - magic @: all functions available through @ need to be defined
5704 - magic @: all functions available through @ need to be defined
5699 as magic_<name>, even though they can be called simply as
5705 as magic_<name>, even though they can be called simply as
5700 @<name>. This allows the special command @magic to gather
5706 @<name>. This allows the special command @magic to gather
5701 information automatically about all existing magic functions,
5707 information automatically about all existing magic functions,
5702 even if they are run-time user extensions, by parsing the shell
5708 even if they are run-time user extensions, by parsing the shell
5703 instance __dict__ looking for special magic_ names.
5709 instance __dict__ looking for special magic_ names.
5704
5710
5705 - mainloop: added *two* local namespace parameters. This allows
5711 - mainloop: added *two* local namespace parameters. This allows
5706 the class to differentiate between parameters which were there
5712 the class to differentiate between parameters which were there
5707 before and after command line initialization was processed. This
5713 before and after command line initialization was processed. This
5708 way, later @who can show things loaded at startup by the
5714 way, later @who can show things loaded at startup by the
5709 user. This trick was necessary to make session saving/reloading
5715 user. This trick was necessary to make session saving/reloading
5710 really work: ideally after saving/exiting/reloading a session,
5716 really work: ideally after saving/exiting/reloading a session,
5711 *everything* should look the same, including the output of @who. I
5717 *everything* should look the same, including the output of @who. I
5712 was only able to make this work with this double namespace
5718 was only able to make this work with this double namespace
5713 trick.
5719 trick.
5714
5720
5715 - added a header to the logfile which allows (almost) full
5721 - added a header to the logfile which allows (almost) full
5716 session restoring.
5722 session restoring.
5717
5723
5718 - prepend lines beginning with @ or !, with a and log
5724 - prepend lines beginning with @ or !, with a and log
5719 them. Why? !lines: may be useful to know what you did @lines:
5725 them. Why? !lines: may be useful to know what you did @lines:
5720 they may affect session state. So when restoring a session, at
5726 they may affect session state. So when restoring a session, at
5721 least inform the user of their presence. I couldn't quite get
5727 least inform the user of their presence. I couldn't quite get
5722 them to properly re-execute, but at least the user is warned.
5728 them to properly re-execute, but at least the user is warned.
5723
5729
5724 * Started ChangeLog.
5730 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now