##// END OF EJS Templates
Compile expression strings into code objects. This should speed...
walter.doerwald -
Show More
@@ -1,1841 +1,1845 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 code = compile(codestring, "_eval", "eval")
213 if isinstance(codestring, basestring):
214 code = compile(codestring, "_eval", "eval")
215 else:
216 code = codestring
214 newlocals = {}
217 newlocals = {}
215 for name in code.co_names:
218 for name in code.co_names:
216 try:
219 try:
217 newlocals[name] = _locals[name]
220 newlocals[name] = _locals[name]
218 except KeyError:
221 except KeyError:
219 pass
222 pass
220 return real_eval(code, _globals, newlocals)
223 return real_eval(code, _globals, newlocals)
221
224
222
225
223 noitem = object()
226 noitem = object()
224
227
225 def item(iterator, index, default=noitem):
228 def item(iterator, index, default=noitem):
226 """
229 """
227 Return the ``index``th item from the iterator ``iterator``.
230 Return the ``index``th item from the iterator ``iterator``.
228 ``index`` must be an integer (negative integers are relative to the
231 ``index`` must be an integer (negative integers are relative to the
229 end (i.e. the last item produced by the iterator)).
232 end (i.e. the last item produced by the iterator)).
230
233
231 If ``default`` is given, this will be the default value when
234 If ``default`` is given, this will be the default value when
232 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
233 ``IndexError`` will be raised.
236 ``IndexError`` will be raised.
234
237
235 Note that using this function will partially or totally exhaust the
238 Note that using this function will partially or totally exhaust the
236 iterator.
239 iterator.
237 """
240 """
238 i = index
241 i = index
239 if i>=0:
242 if i>=0:
240 for item in iterator:
243 for item in iterator:
241 if not i:
244 if not i:
242 return item
245 return item
243 i -= 1
246 i -= 1
244 else:
247 else:
245 i = -index
248 i = -index
246 cache = deque()
249 cache = deque()
247 for item in iterator:
250 for item in iterator:
248 cache.append(item)
251 cache.append(item)
249 if len(cache)>i:
252 if len(cache)>i:
250 cache.popleft()
253 cache.popleft()
251 if len(cache)==i:
254 if len(cache)==i:
252 return cache.popleft()
255 return cache.popleft()
253 if default is noitem:
256 if default is noitem:
254 raise IndexError(index)
257 raise IndexError(index)
255 else:
258 else:
256 return default
259 return default
257
260
258
261
259 def getglobals(g):
262 def getglobals(g):
260 if g is None:
263 if g is None:
261 if ipapi is not None:
264 if ipapi is not None:
262 return ipapi.get().user_ns
265 return ipapi.get().user_ns
263 else:
266 else:
264 return globals()
267 return globals()
265 return g
268 return g
266
269
267
270
268 class Table(object):
271 class Table(object):
269 """
272 """
270 A ``Table`` is an object that produces items (just like a normal Python
273 A ``Table`` is an object that produces items (just like a normal Python
271 iterator/generator does) and can be used as the first object in a pipeline
274 iterator/generator does) and can be used as the first object in a pipeline
272 expression. The displayhook will open the default browser for such an object
275 expression. The displayhook will open the default browser for such an object
273 (instead of simply printing the ``repr()`` result).
276 (instead of simply printing the ``repr()`` result).
274 """
277 """
275
278
276 # We want to support ``foo`` and ``foo()`` in pipeline expression:
279 # We want to support ``foo`` and ``foo()`` in pipeline expression:
277 # So we implement the required operators (``|`` and ``+``) in the metaclass,
280 # So we implement the required operators (``|`` and ``+``) in the metaclass,
278 # instantiate the class and forward the operator to the instance
281 # instantiate the class and forward the operator to the instance
279 class __metaclass__(type):
282 class __metaclass__(type):
280 def __iter__(self):
283 def __iter__(self):
281 return iter(self())
284 return iter(self())
282
285
283 def __or__(self, other):
286 def __or__(self, other):
284 return self() | other
287 return self() | other
285
288
286 def __add__(self, other):
289 def __add__(self, other):
287 return self() + other
290 return self() + other
288
291
289 def __radd__(self, other):
292 def __radd__(self, other):
290 return other + self()
293 return other + self()
291
294
292 def __getitem__(self, index):
295 def __getitem__(self, index):
293 return self()[index]
296 return self()[index]
294
297
295 def __getitem__(self, index):
298 def __getitem__(self, index):
296 return item(self, index)
299 return item(self, index)
297
300
298 def __contains__(self, item):
301 def __contains__(self, item):
299 for haveitem in self:
302 for haveitem in self:
300 if item == haveitem:
303 if item == haveitem:
301 return True
304 return True
302 return False
305 return False
303
306
304 def __or__(self, other):
307 def __or__(self, other):
305 # autoinstantiate right hand side
308 # autoinstantiate right hand side
306 if isinstance(other, type) and issubclass(other, (Table, Display)):
309 if isinstance(other, type) and issubclass(other, (Table, Display)):
307 other = other()
310 other = other()
308 # treat simple strings and functions as ``ieval`` instances
311 # treat simple strings and functions as ``ieval`` instances
309 elif not isinstance(other, Display) and not isinstance(other, Table):
312 elif not isinstance(other, Display) and not isinstance(other, Table):
310 other = ieval(other)
313 other = ieval(other)
311 # forward operations to the right hand side
314 # forward operations to the right hand side
312 return other.__ror__(self)
315 return other.__ror__(self)
313
316
314 def __add__(self, other):
317 def __add__(self, other):
315 # autoinstantiate right hand side
318 # autoinstantiate right hand side
316 if isinstance(other, type) and issubclass(other, Table):
319 if isinstance(other, type) and issubclass(other, Table):
317 other = other()
320 other = other()
318 return ichain(self, other)
321 return ichain(self, other)
319
322
320 def __radd__(self, other):
323 def __radd__(self, other):
321 # autoinstantiate left hand side
324 # autoinstantiate left hand side
322 if isinstance(other, type) and issubclass(other, Table):
325 if isinstance(other, type) and issubclass(other, Table):
323 other = other()
326 other = other()
324 return ichain(other, self)
327 return ichain(other, self)
325
328
326 def __iter__(self):
329 def __iter__(self):
327 return xiter(self, "default")
330 return xiter(self, "default")
328
331
329
332
330 class Pipe(Table):
333 class Pipe(Table):
331 """
334 """
332 A ``Pipe`` is an object that can be used in a pipeline expression. It
335 A ``Pipe`` is an object that can be used in a pipeline expression. It
333 processes the objects it gets from its input ``Table``/``Pipe``. Note that
336 processes the objects it gets from its input ``Table``/``Pipe``. Note that
334 a ``Pipe`` object can't be used as the first object in a pipeline
337 a ``Pipe`` object can't be used as the first object in a pipeline
335 expression, as it doesn't produces items itself.
338 expression, as it doesn't produces items itself.
336 """
339 """
337 class __metaclass__(Table.__metaclass__):
340 class __metaclass__(Table.__metaclass__):
338 def __ror__(self, input):
341 def __ror__(self, input):
339 return input | self()
342 return input | self()
340
343
341 def __ror__(self, input):
344 def __ror__(self, input):
342 # autoinstantiate left hand side
345 # autoinstantiate left hand side
343 if isinstance(input, type) and issubclass(input, Table):
346 if isinstance(input, type) and issubclass(input, Table):
344 input = input()
347 input = input()
345 self.input = input
348 self.input = input
346 return self
349 return self
347
350
348
351
349 def _getattr(obj, name, default=noitem):
352 def _getattr(obj, name, default=noitem):
350 """
353 """
351 Internal helper for getting an attribute of an item. If ``name`` is ``None``
354 Internal helper for getting an attribute of an item. If ``name`` is ``None``
352 return the object itself. If ``name`` is an integer, use ``__getitem__``
355 return the object itself. If ``name`` is an integer, use ``__getitem__``
353 instead. If the attribute or item does not exist, return ``default``.
356 instead. If the attribute or item does not exist, return ``default``.
354 """
357 """
355 if name is None:
358 if name is None:
356 return obj
359 return obj
357 elif isinstance(name, basestring):
360 elif isinstance(name, basestring):
358 if name.endswith("()"):
361 if name.endswith("()"):
359 return getattr(obj, name[:-2], default)()
362 return getattr(obj, name[:-2], default)()
360 else:
363 else:
361 return getattr(obj, name, default)
364 return getattr(obj, name, default)
362 elif callable(name):
365 elif callable(name):
363 try:
366 try:
364 return name(obj)
367 return name(obj)
365 except AttributeError:
368 except AttributeError:
366 return default
369 return default
367 else:
370 else:
368 try:
371 try:
369 return obj[name]
372 return obj[name]
370 except IndexError:
373 except IndexError:
371 return default
374 return default
372
375
373
376
374 def _attrname(name):
377 def _attrname(name):
375 """
378 """
376 Internal helper that gives a proper name for the attribute ``name``
379 Internal helper that gives a proper name for the attribute ``name``
377 (which might be ``None`` or an ``int``).
380 (which might be ``None`` or an ``int``).
378 """
381 """
379 if name is None:
382 if name is None:
380 return "_"
383 return "_"
381 elif isinstance(name, basestring):
384 elif isinstance(name, basestring):
382 return name
385 return name
383 elif callable(name):
386 elif callable(name):
384 return getattr(name, "__xname__", name.__name__)
387 return getattr(name, "__xname__", name.__name__)
385 else:
388 else:
386 return str(name)
389 return str(name)
387
390
388
391
389 def xrepr(item, mode):
392 def xrepr(item, mode):
390 try:
393 try:
391 func = item.__xrepr__
394 func = item.__xrepr__
392 except AttributeError:
395 except AttributeError:
393 pass
396 pass
394 else:
397 else:
395 try:
398 try:
396 for x in func(mode):
399 for x in func(mode):
397 yield x
400 yield x
398 except (KeyboardInterrupt, SystemExit):
401 except (KeyboardInterrupt, SystemExit):
399 raise
402 raise
400 except Exception:
403 except Exception:
401 yield (astyle.style_default, repr(item))
404 yield (astyle.style_default, repr(item))
402 return
405 return
403 if item is None:
406 if item is None:
404 yield (astyle.style_type_none, repr(item))
407 yield (astyle.style_type_none, repr(item))
405 elif isinstance(item, bool):
408 elif isinstance(item, bool):
406 yield (astyle.style_type_bool, repr(item))
409 yield (astyle.style_type_bool, repr(item))
407 elif isinstance(item, str):
410 elif isinstance(item, str):
408 if mode == "cell":
411 if mode == "cell":
409 yield (astyle.style_default, repr(item.expandtabs(tab))[1:-1])
412 yield (astyle.style_default, repr(item.expandtabs(tab))[1:-1])
410 else:
413 else:
411 yield (astyle.style_default, repr(item))
414 yield (astyle.style_default, repr(item))
412 elif isinstance(item, unicode):
415 elif isinstance(item, unicode):
413 if mode == "cell":
416 if mode == "cell":
414 yield (astyle.style_default, repr(item.expandtabs(tab))[2:-1])
417 yield (astyle.style_default, repr(item.expandtabs(tab))[2:-1])
415 else:
418 else:
416 yield (astyle.style_default, repr(item))
419 yield (astyle.style_default, repr(item))
417 elif isinstance(item, (int, long, float)):
420 elif isinstance(item, (int, long, float)):
418 yield (1, True)
421 yield (1, True)
419 yield (astyle.style_type_number, repr(item))
422 yield (astyle.style_type_number, repr(item))
420 elif isinstance(item, complex):
423 elif isinstance(item, complex):
421 yield (astyle.style_type_number, repr(item))
424 yield (astyle.style_type_number, repr(item))
422 elif isinstance(item, datetime.datetime):
425 elif isinstance(item, datetime.datetime):
423 if mode == "cell":
426 if mode == "cell":
424 # Don't use strftime() here, as this requires year >= 1900
427 # Don't use strftime() here, as this requires year >= 1900
425 yield (astyle.style_type_datetime,
428 yield (astyle.style_type_datetime,
426 "%04d-%02d-%02d %02d:%02d:%02d.%06d" % \
429 "%04d-%02d-%02d %02d:%02d:%02d.%06d" % \
427 (item.year, item.month, item.day,
430 (item.year, item.month, item.day,
428 item.hour, item.minute, item.second,
431 item.hour, item.minute, item.second,
429 item.microsecond),
432 item.microsecond),
430 )
433 )
431 else:
434 else:
432 yield (astyle.style_type_datetime, repr(item))
435 yield (astyle.style_type_datetime, repr(item))
433 elif isinstance(item, datetime.date):
436 elif isinstance(item, datetime.date):
434 if mode == "cell":
437 if mode == "cell":
435 yield (astyle.style_type_datetime,
438 yield (astyle.style_type_datetime,
436 "%04d-%02d-%02d" % (item.year, item.month, item.day))
439 "%04d-%02d-%02d" % (item.year, item.month, item.day))
437 else:
440 else:
438 yield (astyle.style_type_datetime, repr(item))
441 yield (astyle.style_type_datetime, repr(item))
439 elif isinstance(item, datetime.time):
442 elif isinstance(item, datetime.time):
440 if mode == "cell":
443 if mode == "cell":
441 yield (astyle.style_type_datetime,
444 yield (astyle.style_type_datetime,
442 "%02d:%02d:%02d.%06d" % \
445 "%02d:%02d:%02d.%06d" % \
443 (item.hour, item.minute, item.second, item.microsecond))
446 (item.hour, item.minute, item.second, item.microsecond))
444 else:
447 else:
445 yield (astyle.style_type_datetime, repr(item))
448 yield (astyle.style_type_datetime, repr(item))
446 elif isinstance(item, datetime.timedelta):
449 elif isinstance(item, datetime.timedelta):
447 yield (astyle.style_type_datetime, repr(item))
450 yield (astyle.style_type_datetime, repr(item))
448 elif isinstance(item, Exception):
451 elif isinstance(item, Exception):
449 if item.__class__.__module__ == "exceptions":
452 if item.__class__.__module__ == "exceptions":
450 classname = item.__class__.__name__
453 classname = item.__class__.__name__
451 else:
454 else:
452 classname = "%s.%s" % \
455 classname = "%s.%s" % \
453 (item.__class__.__module__, item.__class__.__name__)
456 (item.__class__.__module__, item.__class__.__name__)
454 if mode == "header" or mode == "footer":
457 if mode == "header" or mode == "footer":
455 yield (astyle.style_error, "%s: %s" % (classname, item))
458 yield (astyle.style_error, "%s: %s" % (classname, item))
456 else:
459 else:
457 yield (astyle.style_error, classname)
460 yield (astyle.style_error, classname)
458 elif isinstance(item, (list, tuple)):
461 elif isinstance(item, (list, tuple)):
459 if mode == "header" or mode == "footer":
462 if mode == "header" or mode == "footer":
460 if item.__class__.__module__ == "__builtin__":
463 if item.__class__.__module__ == "__builtin__":
461 classname = item.__class__.__name__
464 classname = item.__class__.__name__
462 else:
465 else:
463 classname = "%s.%s" % \
466 classname = "%s.%s" % \
464 (item.__class__.__module__,item.__class__.__name__)
467 (item.__class__.__module__,item.__class__.__name__)
465 yield (astyle.style_default,
468 yield (astyle.style_default,
466 "<%s object with %d items at 0x%x>" % \
469 "<%s object with %d items at 0x%x>" % \
467 (classname, len(item), id(item)))
470 (classname, len(item), id(item)))
468 else:
471 else:
469 yield (-1, False)
472 yield (-1, False)
470 if isinstance(item, list):
473 if isinstance(item, list):
471 yield (astyle.style_default, "[")
474 yield (astyle.style_default, "[")
472 end = "]"
475 end = "]"
473 else:
476 else:
474 yield (astyle.style_default, "(")
477 yield (astyle.style_default, "(")
475 end = ")"
478 end = ")"
476 for (i, subitem) in enumerate(item):
479 for (i, subitem) in enumerate(item):
477 if i:
480 if i:
478 yield (astyle.style_default, ", ")
481 yield (astyle.style_default, ", ")
479 for part in xrepr(subitem, "default"):
482 for part in xrepr(subitem, "default"):
480 yield part
483 yield part
481 yield (astyle.style_default, end)
484 yield (astyle.style_default, end)
482 elif isinstance(item, (dict, types.DictProxyType)):
485 elif isinstance(item, (dict, types.DictProxyType)):
483 if mode == "header" or mode == "footer":
486 if mode == "header" or mode == "footer":
484 if item.__class__.__module__ == "__builtin__":
487 if item.__class__.__module__ == "__builtin__":
485 classname = item.__class__.__name__
488 classname = item.__class__.__name__
486 else:
489 else:
487 classname = "%s.%s" % \
490 classname = "%s.%s" % \
488 (item.__class__.__module__,item.__class__.__name__)
491 (item.__class__.__module__,item.__class__.__name__)
489 yield (astyle.style_default,
492 yield (astyle.style_default,
490 "<%s object with %d items at 0x%x>" % \
493 "<%s object with %d items at 0x%x>" % \
491 (classname, len(item), id(item)))
494 (classname, len(item), id(item)))
492 else:
495 else:
493 yield (-1, False)
496 yield (-1, False)
494 if isinstance(item, dict):
497 if isinstance(item, dict):
495 yield (astyle.style_default, "{")
498 yield (astyle.style_default, "{")
496 end = "}"
499 end = "}"
497 else:
500 else:
498 yield (astyle.style_default, "dictproxy((")
501 yield (astyle.style_default, "dictproxy((")
499 end = "})"
502 end = "})"
500 for (i, (key, value)) in enumerate(item.iteritems()):
503 for (i, (key, value)) in enumerate(item.iteritems()):
501 if i:
504 if i:
502 yield (astyle.style_default, ", ")
505 yield (astyle.style_default, ", ")
503 for part in xrepr(key, "default"):
506 for part in xrepr(key, "default"):
504 yield part
507 yield part
505 yield (astyle.style_default, ": ")
508 yield (astyle.style_default, ": ")
506 for part in xrepr(value, "default"):
509 for part in xrepr(value, "default"):
507 yield part
510 yield part
508 yield (astyle.style_default, end)
511 yield (astyle.style_default, end)
509 else:
512 else:
510 yield (astyle.style_default, repr(item))
513 yield (astyle.style_default, repr(item))
511
514
512
515
513 def xattrs(item, mode):
516 def xattrs(item, mode):
514 try:
517 try:
515 func = item.__xattrs__
518 func = item.__xattrs__
516 except AttributeError:
519 except AttributeError:
517 if mode == "detail":
520 if mode == "detail":
518 return dir(item)
521 return dir(item)
519 else:
522 else:
520 return (None,)
523 return (None,)
521 else:
524 else:
522 try:
525 try:
523 return func(mode)
526 return func(mode)
524 except (KeyboardInterrupt, SystemExit):
527 except (KeyboardInterrupt, SystemExit):
525 raise
528 raise
526 except Exception:
529 except Exception:
527 return (None,)
530 return (None,)
528
531
529
532
530 def xiter(item, mode):
533 def xiter(item, mode):
531 if mode == "detail":
534 if mode == "detail":
532 def items():
535 def items():
533 for name in xattrs(item, mode):
536 for name in xattrs(item, mode):
534 yield XAttr(item, name)
537 yield XAttr(item, name)
535 return items()
538 return items()
536 try:
539 try:
537 func = item.__xiter__
540 func = item.__xiter__
538 except AttributeError:
541 except AttributeError:
539 if isinstance(item, (dict, types.DictProxyType)):
542 if isinstance(item, (dict, types.DictProxyType)):
540 def items(item):
543 def items(item):
541 fields = ("key", "value")
544 fields = ("key", "value")
542 for (key, value) in item.iteritems():
545 for (key, value) in item.iteritems():
543 yield Fields(fields, key=key, value=value)
546 yield Fields(fields, key=key, value=value)
544 return items(item)
547 return items(item)
545 elif isinstance(item, new.module):
548 elif isinstance(item, new.module):
546 def items(item):
549 def items(item):
547 fields = ("key", "value")
550 fields = ("key", "value")
548 for key in sorted(item.__dict__):
551 for key in sorted(item.__dict__):
549 yield Fields(fields, key=key, value=getattr(item, key))
552 yield Fields(fields, key=key, value=getattr(item, key))
550 return items(item)
553 return items(item)
551 elif isinstance(item, basestring):
554 elif isinstance(item, basestring):
552 if not len(item):
555 if not len(item):
553 raise ValueError("can't enter empty string")
556 raise ValueError("can't enter empty string")
554 lines = item.splitlines()
557 lines = item.splitlines()
555 if len(lines) <= 1:
558 if len(lines) <= 1:
556 raise ValueError("can't enter one line string")
559 raise ValueError("can't enter one line string")
557 return iter(lines)
560 return iter(lines)
558 return iter(item)
561 return iter(item)
559 else:
562 else:
560 return iter(func(mode)) # iter() just to be safe
563 return iter(func(mode)) # iter() just to be safe
561
564
562
565
563 class ichain(Pipe):
566 class ichain(Pipe):
564 """
567 """
565 Chains multiple ``Table``s into one.
568 Chains multiple ``Table``s into one.
566 """
569 """
567
570
568 def __init__(self, *iters):
571 def __init__(self, *iters):
569 self.iters = iters
572 self.iters = iters
570
573
571 def __xiter__(self, mode):
574 def __xiter__(self, mode):
572 return itertools.chain(*self.iters)
575 return itertools.chain(*self.iters)
573
576
574 def __xrepr__(self, mode):
577 def __xrepr__(self, mode):
575 if mode == "header" or mode == "footer":
578 if mode == "header" or mode == "footer":
576 for (i, item) in enumerate(self.iters):
579 for (i, item) in enumerate(self.iters):
577 if i:
580 if i:
578 yield (astyle.style_default, "+")
581 yield (astyle.style_default, "+")
579 if isinstance(item, Pipe):
582 if isinstance(item, Pipe):
580 yield (astyle.style_default, "(")
583 yield (astyle.style_default, "(")
581 for part in xrepr(item, mode):
584 for part in xrepr(item, mode):
582 yield part
585 yield part
583 if isinstance(item, Pipe):
586 if isinstance(item, Pipe):
584 yield (astyle.style_default, ")")
587 yield (astyle.style_default, ")")
585 else:
588 else:
586 yield (astyle.style_default, repr(self))
589 yield (astyle.style_default, repr(self))
587
590
588 def __repr__(self):
591 def __repr__(self):
589 args = ", ".join([repr(it) for it in self.iters])
592 args = ", ".join([repr(it) for it in self.iters])
590 return "%s.%s(%s)" % \
593 return "%s.%s(%s)" % \
591 (self.__class__.__module__, self.__class__.__name__, args)
594 (self.__class__.__module__, self.__class__.__name__, args)
592
595
593
596
594 class ifile(path.path):
597 class ifile(path.path):
595 """
598 """
596 file (or directory) object.
599 file (or directory) object.
597 """
600 """
598
601
599 def __add_(self, other):
602 def __add_(self, other):
600 return ifile(path._base(self) + other)
603 return ifile(path._base(self) + other)
601
604
602 def __radd_(self, other):
605 def __radd_(self, other):
603 return ifile(other + path._base(self))
606 return ifile(other + path._base(self))
604
607
605 def __div_(self, other):
608 def __div_(self, other):
606 return ifile(path.__div__(self, other))
609 return ifile(path.__div__(self, other))
607
610
608 def getcwd():
611 def getcwd():
609 return ifile(path.path.getcwd())
612 return ifile(path.path.getcwd())
610 getcwd.__doc__ = path.path.getcwd.__doc__
613 getcwd.__doc__ = path.path.getcwd.__doc__
611 getcwd = staticmethod(getcwd)
614 getcwd = staticmethod(getcwd)
612
615
613 def abspath(self):
616 def abspath(self):
614 return ifile(path.path.abspath(self))
617 return ifile(path.path.abspath(self))
615 abspath.__doc__ = path.path.abspath.__doc__
618 abspath.__doc__ = path.path.abspath.__doc__
616
619
617 def normcase(self):
620 def normcase(self):
618 return ifile(path.path.normcase(self))
621 return ifile(path.path.normcase(self))
619 normcase.__doc__ = path.path.normcase.__doc__
622 normcase.__doc__ = path.path.normcase.__doc__
620
623
621 def normpath(self):
624 def normpath(self):
622 return ifile(path.path.normpath(self))
625 return ifile(path.path.normpath(self))
623 normpath.__doc__ = path.path.normpath.__doc__
626 normpath.__doc__ = path.path.normpath.__doc__
624
627
625 def realpath(self):
628 def realpath(self):
626 return ifile(path.path.realpath(self))
629 return ifile(path.path.realpath(self))
627 realpath.__doc__ = path.path.realpath.__doc__
630 realpath.__doc__ = path.path.realpath.__doc__
628
631
629 def expanduser(self):
632 def expanduser(self):
630 return ifile(path.path.expanduser(self))
633 return ifile(path.path.expanduser(self))
631 expanduser.__doc__ = path.path.expanduser.__doc__
634 expanduser.__doc__ = path.path.expanduser.__doc__
632
635
633 def expandvars(self):
636 def expandvars(self):
634 return ifile(path.path.expandvars(self))
637 return ifile(path.path.expandvars(self))
635 expandvars.__doc__ = path.path.expandvars.__doc__
638 expandvars.__doc__ = path.path.expandvars.__doc__
636
639
637 def dirname(self):
640 def dirname(self):
638 return ifile(path.path.dirname(self))
641 return ifile(path.path.dirname(self))
639 dirname.__doc__ = path.path.dirname.__doc__
642 dirname.__doc__ = path.path.dirname.__doc__
640
643
641 parent = property(dirname, None, None, path.path.parent.__doc__)
644 parent = property(dirname, None, None, path.path.parent.__doc__)
642
645
643 def splitpath(self):
646 def splitpath(self):
644 (parent, child) = path.path.splitpath(self)
647 (parent, child) = path.path.splitpath(self)
645 return (ifile(parent), child)
648 return (ifile(parent), child)
646 splitpath.__doc__ = path.path.splitpath.__doc__
649 splitpath.__doc__ = path.path.splitpath.__doc__
647
650
648 def splitdrive(self):
651 def splitdrive(self):
649 (drive, rel) = path.path.splitdrive(self)
652 (drive, rel) = path.path.splitdrive(self)
650 return (ifile(drive), rel)
653 return (ifile(drive), rel)
651 splitdrive.__doc__ = path.path.splitdrive.__doc__
654 splitdrive.__doc__ = path.path.splitdrive.__doc__
652
655
653 def splitext(self):
656 def splitext(self):
654 (filename, ext) = path.path.splitext(self)
657 (filename, ext) = path.path.splitext(self)
655 return (ifile(filename), ext)
658 return (ifile(filename), ext)
656 splitext.__doc__ = path.path.splitext.__doc__
659 splitext.__doc__ = path.path.splitext.__doc__
657
660
658 if hasattr(path.path, "splitunc"):
661 if hasattr(path.path, "splitunc"):
659 def splitunc(self):
662 def splitunc(self):
660 (unc, rest) = path.path.splitunc(self)
663 (unc, rest) = path.path.splitunc(self)
661 return (ifile(unc), rest)
664 return (ifile(unc), rest)
662 splitunc.__doc__ = path.path.splitunc.__doc__
665 splitunc.__doc__ = path.path.splitunc.__doc__
663
666
664 def _get_uncshare(self):
667 def _get_uncshare(self):
665 unc, r = os.path.splitunc(self)
668 unc, r = os.path.splitunc(self)
666 return ifile(unc)
669 return ifile(unc)
667
670
668 uncshare = property(
671 uncshare = property(
669 _get_uncshare, None, None,
672 _get_uncshare, None, None,
670 """ The UNC mount point for this path.
673 """ The UNC mount point for this path.
671 This is empty for paths on local drives. """)
674 This is empty for paths on local drives. """)
672
675
673 def joinpath(self, *args):
676 def joinpath(self, *args):
674 return ifile(path.path.joinpath(self, *args))
677 return ifile(path.path.joinpath(self, *args))
675 joinpath.__doc__ = path.path.joinpath.__doc__
678 joinpath.__doc__ = path.path.joinpath.__doc__
676
679
677 def splitall(self):
680 def splitall(self):
678 return map(ifile, path.path.splitall(self))
681 return map(ifile, path.path.splitall(self))
679 splitall.__doc__ = path.path.splitall.__doc__
682 splitall.__doc__ = path.path.splitall.__doc__
680
683
681 def relpath(self):
684 def relpath(self):
682 return ifile(path.path.relpath(self))
685 return ifile(path.path.relpath(self))
683 relpath.__doc__ = path.path.relpath.__doc__
686 relpath.__doc__ = path.path.relpath.__doc__
684
687
685 def relpathto(self, dest):
688 def relpathto(self, dest):
686 return ifile(path.path.relpathto(self, dest))
689 return ifile(path.path.relpathto(self, dest))
687 relpathto.__doc__ = path.path.relpathto.__doc__
690 relpathto.__doc__ = path.path.relpathto.__doc__
688
691
689 def listdir(self, pattern=None):
692 def listdir(self, pattern=None):
690 return [ifile(child) for child in path.path.listdir(self, pattern)]
693 return [ifile(child) for child in path.path.listdir(self, pattern)]
691 listdir.__doc__ = path.path.listdir.__doc__
694 listdir.__doc__ = path.path.listdir.__doc__
692
695
693 def dirs(self, pattern=None):
696 def dirs(self, pattern=None):
694 return [ifile(child) for child in path.path.dirs(self, pattern)]
697 return [ifile(child) for child in path.path.dirs(self, pattern)]
695 dirs.__doc__ = path.path.dirs.__doc__
698 dirs.__doc__ = path.path.dirs.__doc__
696
699
697 def files(self, pattern=None):
700 def files(self, pattern=None):
698 return [ifile(child) for child in path.path.files(self, pattern)]
701 return [ifile(child) for child in path.path.files(self, pattern)]
699 files.__doc__ = path.path.files.__doc__
702 files.__doc__ = path.path.files.__doc__
700
703
701 def walk(self, pattern=None):
704 def walk(self, pattern=None):
702 for child in path.path.walk(self, pattern):
705 for child in path.path.walk(self, pattern):
703 yield ifile(child)
706 yield ifile(child)
704 walk.__doc__ = path.path.walk.__doc__
707 walk.__doc__ = path.path.walk.__doc__
705
708
706 def walkdirs(self, pattern=None):
709 def walkdirs(self, pattern=None):
707 for child in path.path.walkdirs(self, pattern):
710 for child in path.path.walkdirs(self, pattern):
708 yield ifile(child)
711 yield ifile(child)
709 walkdirs.__doc__ = path.path.walkdirs.__doc__
712 walkdirs.__doc__ = path.path.walkdirs.__doc__
710
713
711 def walkfiles(self, pattern=None):
714 def walkfiles(self, pattern=None):
712 for child in path.path.walkfiles(self, pattern):
715 for child in path.path.walkfiles(self, pattern):
713 yield ifile(child)
716 yield ifile(child)
714 walkfiles.__doc__ = path.path.walkfiles.__doc__
717 walkfiles.__doc__ = path.path.walkfiles.__doc__
715
718
716 def glob(self, pattern):
719 def glob(self, pattern):
717 return map(ifile, path.path.glob(self, pattern))
720 return map(ifile, path.path.glob(self, pattern))
718 glob.__doc__ = path.path.glob.__doc__
721 glob.__doc__ = path.path.glob.__doc__
719
722
720 if hasattr(os, 'readlink'):
723 if hasattr(os, 'readlink'):
721 def readlink(self):
724 def readlink(self):
722 return ifile(path.path.readlink(self))
725 return ifile(path.path.readlink(self))
723 readlink.__doc__ = path.path.readlink.__doc__
726 readlink.__doc__ = path.path.readlink.__doc__
724
727
725 def readlinkabs(self):
728 def readlinkabs(self):
726 return ifile(path.path.readlinkabs(self))
729 return ifile(path.path.readlinkabs(self))
727 readlinkabs.__doc__ = path.path.readlinkabs.__doc__
730 readlinkabs.__doc__ = path.path.readlinkabs.__doc__
728
731
729 def getmode(self):
732 def getmode(self):
730 return self.stat().st_mode
733 return self.stat().st_mode
731 mode = property(getmode, None, None, "Access mode")
734 mode = property(getmode, None, None, "Access mode")
732
735
733 def gettype(self):
736 def gettype(self):
734 data = [
737 data = [
735 (stat.S_ISREG, "file"),
738 (stat.S_ISREG, "file"),
736 (stat.S_ISDIR, "dir"),
739 (stat.S_ISDIR, "dir"),
737 (stat.S_ISCHR, "chardev"),
740 (stat.S_ISCHR, "chardev"),
738 (stat.S_ISBLK, "blockdev"),
741 (stat.S_ISBLK, "blockdev"),
739 (stat.S_ISFIFO, "fifo"),
742 (stat.S_ISFIFO, "fifo"),
740 (stat.S_ISLNK, "symlink"),
743 (stat.S_ISLNK, "symlink"),
741 (stat.S_ISSOCK,"socket"),
744 (stat.S_ISSOCK,"socket"),
742 ]
745 ]
743 lstat = self.lstat()
746 lstat = self.lstat()
744 if lstat is not None:
747 if lstat is not None:
745 types = set([text for (func, text) in data if func(lstat.st_mode)])
748 types = set([text for (func, text) in data if func(lstat.st_mode)])
746 else:
749 else:
747 types = set()
750 types = set()
748 m = self.mode
751 m = self.mode
749 types.update([text for (func, text) in data if func(m)])
752 types.update([text for (func, text) in data if func(m)])
750 return ", ".join(types)
753 return ", ".join(types)
751 type = property(gettype, None, None, "file type (file, directory, link, etc.)")
754 type = property(gettype, None, None, "file type (file, directory, link, etc.)")
752
755
753 def getmodestr(self):
756 def getmodestr(self):
754 m = self.mode
757 m = self.mode
755 data = [
758 data = [
756 (stat.S_IRUSR, "-r"),
759 (stat.S_IRUSR, "-r"),
757 (stat.S_IWUSR, "-w"),
760 (stat.S_IWUSR, "-w"),
758 (stat.S_IXUSR, "-x"),
761 (stat.S_IXUSR, "-x"),
759 (stat.S_IRGRP, "-r"),
762 (stat.S_IRGRP, "-r"),
760 (stat.S_IWGRP, "-w"),
763 (stat.S_IWGRP, "-w"),
761 (stat.S_IXGRP, "-x"),
764 (stat.S_IXGRP, "-x"),
762 (stat.S_IROTH, "-r"),
765 (stat.S_IROTH, "-r"),
763 (stat.S_IWOTH, "-w"),
766 (stat.S_IWOTH, "-w"),
764 (stat.S_IXOTH, "-x"),
767 (stat.S_IXOTH, "-x"),
765 ]
768 ]
766 return "".join([text[bool(m&bit)] for (bit, text) in data])
769 return "".join([text[bool(m&bit)] for (bit, text) in data])
767
770
768 modestr = property(getmodestr, None, None, "Access mode as string")
771 modestr = property(getmodestr, None, None, "Access mode as string")
769
772
770 def getblocks(self):
773 def getblocks(self):
771 return self.stat().st_blocks
774 return self.stat().st_blocks
772 blocks = property(getblocks, None, None, "File size in blocks")
775 blocks = property(getblocks, None, None, "File size in blocks")
773
776
774 def getblksize(self):
777 def getblksize(self):
775 return self.stat().st_blksize
778 return self.stat().st_blksize
776 blksize = property(getblksize, None, None, "Filesystem block size")
779 blksize = property(getblksize, None, None, "Filesystem block size")
777
780
778 def getdev(self):
781 def getdev(self):
779 return self.stat().st_dev
782 return self.stat().st_dev
780 dev = property(getdev)
783 dev = property(getdev)
781
784
782 def getnlink(self):
785 def getnlink(self):
783 return self.stat().st_nlink
786 return self.stat().st_nlink
784 nlink = property(getnlink, None, None, "Number of links")
787 nlink = property(getnlink, None, None, "Number of links")
785
788
786 def getuid(self):
789 def getuid(self):
787 return self.stat().st_uid
790 return self.stat().st_uid
788 uid = property(getuid, None, None, "User id of file owner")
791 uid = property(getuid, None, None, "User id of file owner")
789
792
790 def getgid(self):
793 def getgid(self):
791 return self.stat().st_gid
794 return self.stat().st_gid
792 gid = property(getgid, None, None, "Group id of file owner")
795 gid = property(getgid, None, None, "Group id of file owner")
793
796
794 def getowner(self):
797 def getowner(self):
795 stat = self.stat()
798 stat = self.stat()
796 try:
799 try:
797 return pwd.getpwuid(stat.st_uid).pw_name
800 return pwd.getpwuid(stat.st_uid).pw_name
798 except KeyError:
801 except KeyError:
799 return stat.st_uid
802 return stat.st_uid
800 owner = property(getowner, None, None, "Owner name (or id)")
803 owner = property(getowner, None, None, "Owner name (or id)")
801
804
802 def getgroup(self):
805 def getgroup(self):
803 stat = self.stat()
806 stat = self.stat()
804 try:
807 try:
805 return grp.getgrgid(stat.st_gid).gr_name
808 return grp.getgrgid(stat.st_gid).gr_name
806 except KeyError:
809 except KeyError:
807 return stat.st_gid
810 return stat.st_gid
808 group = property(getgroup, None, None, "Group name (or id)")
811 group = property(getgroup, None, None, "Group name (or id)")
809
812
810 def getadate(self):
813 def getadate(self):
811 return datetime.datetime.utcfromtimestamp(self.atime)
814 return datetime.datetime.utcfromtimestamp(self.atime)
812 adate = property(getadate, None, None, "Access date")
815 adate = property(getadate, None, None, "Access date")
813
816
814 def getcdate(self):
817 def getcdate(self):
815 return datetime.datetime.utcfromtimestamp(self.ctime)
818 return datetime.datetime.utcfromtimestamp(self.ctime)
816 cdate = property(getcdate, None, None, "Creation date")
819 cdate = property(getcdate, None, None, "Creation date")
817
820
818 def getmdate(self):
821 def getmdate(self):
819 return datetime.datetime.utcfromtimestamp(self.mtime)
822 return datetime.datetime.utcfromtimestamp(self.mtime)
820 mdate = property(getmdate, None, None, "Modification date")
823 mdate = property(getmdate, None, None, "Modification date")
821
824
822 def getmimetype(self):
825 def getmimetype(self):
823 return mimetypes.guess_type(self.basename())[0]
826 return mimetypes.guess_type(self.basename())[0]
824 mimetype = property(getmimetype, None, None, "MIME type")
827 mimetype = property(getmimetype, None, None, "MIME type")
825
828
826 def getencoding(self):
829 def getencoding(self):
827 return mimetypes.guess_type(self.basename())[1]
830 return mimetypes.guess_type(self.basename())[1]
828 encoding = property(getencoding, None, None, "Compression")
831 encoding = property(getencoding, None, None, "Compression")
829
832
830 def __repr__(self):
833 def __repr__(self):
831 return "ifile(%s)" % path._base.__repr__(self)
834 return "ifile(%s)" % path._base.__repr__(self)
832
835
833 defaultattrs = (None, "type", "size", "modestr", "owner", "group", "mdate")
836 defaultattrs = (None, "type", "size", "modestr", "owner", "group", "mdate")
834
837
835 def __xattrs__(self, mode):
838 def __xattrs__(self, mode):
836 if mode == "detail":
839 if mode == "detail":
837 return (
840 return (
838 "name", "basename()", "abspath()", "realpath()",
841 "name", "basename()", "abspath()", "realpath()",
839 "type", "mode", "modestr", "stat()", "lstat()",
842 "type", "mode", "modestr", "stat()", "lstat()",
840 "uid", "gid", "owner", "group", "dev", "nlink",
843 "uid", "gid", "owner", "group", "dev", "nlink",
841 "ctime", "mtime", "atime", "cdate", "mdate", "adate",
844 "ctime", "mtime", "atime", "cdate", "mdate", "adate",
842 "size", "blocks", "blksize", "isdir()", "islink()",
845 "size", "blocks", "blksize", "isdir()", "islink()",
843 "mimetype", "encoding"
846 "mimetype", "encoding"
844 )
847 )
845 return self.defaultattrs
848 return self.defaultattrs
846
849
847 def __xrepr__(self, mode):
850 def __xrepr__(self, mode):
848 try:
851 try:
849 if self.isdir():
852 if self.isdir():
850 name = "idir"
853 name = "idir"
851 style = astyle.style_dir
854 style = astyle.style_dir
852 else:
855 else:
853 name = "ifile"
856 name = "ifile"
854 style = astyle.style_file
857 style = astyle.style_file
855 except IOError:
858 except IOError:
856 name = "ifile"
859 name = "ifile"
857 style = astyle.style_default
860 style = astyle.style_default
858 if mode == "cell" or mode in "header" or mode == "footer":
861 if mode == "cell" or mode in "header" or mode == "footer":
859 abspath = repr(path._base(self.normpath()))
862 abspath = repr(path._base(self.normpath()))
860 if abspath.startswith("u"):
863 if abspath.startswith("u"):
861 abspath = abspath[2:-1]
864 abspath = abspath[2:-1]
862 else:
865 else:
863 abspath = abspath[1:-1]
866 abspath = abspath[1:-1]
864 if mode == "cell":
867 if mode == "cell":
865 yield (style, abspath)
868 yield (style, abspath)
866 else:
869 else:
867 yield (style, "%s(%s)" % (name, abspath))
870 yield (style, "%s(%s)" % (name, abspath))
868 else:
871 else:
869 yield (style, repr(self))
872 yield (style, repr(self))
870
873
871 def __xiter__(self, mode):
874 def __xiter__(self, mode):
872 if self.isdir():
875 if self.isdir():
873 yield iparentdir(self / os.pardir)
876 yield iparentdir(self / os.pardir)
874 for child in sorted(self.listdir()):
877 for child in sorted(self.listdir()):
875 yield child
878 yield child
876 else:
879 else:
877 f = self.open("rb")
880 f = self.open("rb")
878 for line in f:
881 for line in f:
879 yield line
882 yield line
880 f.close()
883 f.close()
881
884
882
885
883 class iparentdir(ifile):
886 class iparentdir(ifile):
884 def __xrepr__(self, mode):
887 def __xrepr__(self, mode):
885 if mode == "cell":
888 if mode == "cell":
886 yield (astyle.style_dir, os.pardir)
889 yield (astyle.style_dir, os.pardir)
887 else:
890 else:
888 for part in ifile.__xrepr__(self, mode):
891 for part in ifile.__xrepr__(self, mode):
889 yield part
892 yield part
890
893
891
894
892 class ils(Table):
895 class ils(Table):
893 """
896 """
894 List the current (or a specific) directory.
897 List the current (or a specific) directory.
895
898
896 Examples:
899 Examples:
897
900
898 >>> ils
901 >>> ils
899 >>> ils("/usr/local/lib/python2.4")
902 >>> ils("/usr/local/lib/python2.4")
900 >>> ils("~")
903 >>> ils("~")
901 """
904 """
902 def __init__(self, base=os.curdir):
905 def __init__(self, base=os.curdir):
903 self.base = os.path.expanduser(base)
906 self.base = os.path.expanduser(base)
904
907
905 def __xiter__(self, mode):
908 def __xiter__(self, mode):
906 return xiter(ifile(self.base), mode)
909 return xiter(ifile(self.base), mode)
907
910
908 def __xrepr__(self, mode):
911 def __xrepr__(self, mode):
909 return ifile(self.base).__xrepr__(mode)
912 return ifile(self.base).__xrepr__(mode)
910
913
911 def __repr__(self):
914 def __repr__(self):
912 return "%s.%s(%r)" % \
915 return "%s.%s(%r)" % \
913 (self.__class__.__module__, self.__class__.__name__, self.base)
916 (self.__class__.__module__, self.__class__.__name__, self.base)
914
917
915
918
916 class iglob(Table):
919 class iglob(Table):
917 """
920 """
918 List all files and directories matching a specified pattern.
921 List all files and directories matching a specified pattern.
919 (See ``glob.glob()`` for more info.).
922 (See ``glob.glob()`` for more info.).
920
923
921 Examples:
924 Examples:
922
925
923 >>> iglob("*.py")
926 >>> iglob("*.py")
924 """
927 """
925 def __init__(self, glob):
928 def __init__(self, glob):
926 self.glob = glob
929 self.glob = glob
927
930
928 def __xiter__(self, mode):
931 def __xiter__(self, mode):
929 for name in glob.glob(self.glob):
932 for name in glob.glob(self.glob):
930 yield ifile(name)
933 yield ifile(name)
931
934
932 def __xrepr__(self, mode):
935 def __xrepr__(self, mode):
933 if mode == "header" or mode == "footer" or mode == "cell":
936 if mode == "header" or mode == "footer" or mode == "cell":
934 yield (astyle.style_default,
937 yield (astyle.style_default,
935 "%s(%r)" % (self.__class__.__name__, self.glob))
938 "%s(%r)" % (self.__class__.__name__, self.glob))
936 else:
939 else:
937 yield (astyle.style_default, repr(self))
940 yield (astyle.style_default, repr(self))
938
941
939 def __repr__(self):
942 def __repr__(self):
940 return "%s.%s(%r)" % \
943 return "%s.%s(%r)" % \
941 (self.__class__.__module__, self.__class__.__name__, self.glob)
944 (self.__class__.__module__, self.__class__.__name__, self.glob)
942
945
943
946
944 class iwalk(Table):
947 class iwalk(Table):
945 """
948 """
946 List all files and directories in a directory and it's subdirectory.
949 List all files and directories in a directory and it's subdirectory.
947
950
948 >>> iwalk
951 >>> iwalk
949 >>> iwalk("/usr/local/lib/python2.4")
952 >>> iwalk("/usr/local/lib/python2.4")
950 >>> iwalk("~")
953 >>> iwalk("~")
951 """
954 """
952 def __init__(self, base=os.curdir, dirs=True, files=True):
955 def __init__(self, base=os.curdir, dirs=True, files=True):
953 self.base = os.path.expanduser(base)
956 self.base = os.path.expanduser(base)
954 self.dirs = dirs
957 self.dirs = dirs
955 self.files = files
958 self.files = files
956
959
957 def __xiter__(self, mode):
960 def __xiter__(self, mode):
958 for (dirpath, dirnames, filenames) in os.walk(self.base):
961 for (dirpath, dirnames, filenames) in os.walk(self.base):
959 if self.dirs:
962 if self.dirs:
960 for name in sorted(dirnames):
963 for name in sorted(dirnames):
961 yield ifile(os.path.join(dirpath, name))
964 yield ifile(os.path.join(dirpath, name))
962 if self.files:
965 if self.files:
963 for name in sorted(filenames):
966 for name in sorted(filenames):
964 yield ifile(os.path.join(dirpath, name))
967 yield ifile(os.path.join(dirpath, name))
965
968
966 def __xrepr__(self, mode):
969 def __xrepr__(self, mode):
967 if mode == "header" or mode == "footer" or mode == "cell":
970 if mode == "header" or mode == "footer" or mode == "cell":
968 yield (astyle.style_default,
971 yield (astyle.style_default,
969 "%s(%r)" % (self.__class__.__name__, self.base))
972 "%s(%r)" % (self.__class__.__name__, self.base))
970 else:
973 else:
971 yield (astyle.style_default, repr(self))
974 yield (astyle.style_default, repr(self))
972
975
973 def __repr__(self):
976 def __repr__(self):
974 return "%s.%s(%r)" % \
977 return "%s.%s(%r)" % \
975 (self.__class__.__module__, self.__class__.__name__, self.base)
978 (self.__class__.__module__, self.__class__.__name__, self.base)
976
979
977
980
978 class ipwdentry(object):
981 class ipwdentry(object):
979 """
982 """
980 ``ipwdentry`` objects encapsulate entries in the Unix user account and
983 ``ipwdentry`` objects encapsulate entries in the Unix user account and
981 password database.
984 password database.
982 """
985 """
983 def __init__(self, id):
986 def __init__(self, id):
984 self._id = id
987 self._id = id
985 self._entry = None
988 self._entry = None
986
989
987 def _getentry(self):
990 def _getentry(self):
988 if self._entry is None:
991 if self._entry is None:
989 if isinstance(self._id, basestring):
992 if isinstance(self._id, basestring):
990 self._entry = pwd.getpwnam(self._id)
993 self._entry = pwd.getpwnam(self._id)
991 else:
994 else:
992 self._entry = pwd.getpwuid(self._id)
995 self._entry = pwd.getpwuid(self._id)
993 return self._entry
996 return self._entry
994
997
995 def getname(self):
998 def getname(self):
996 if isinstance(self._id, basestring):
999 if isinstance(self._id, basestring):
997 return self._id
1000 return self._id
998 else:
1001 else:
999 return self._getentry().pw_name
1002 return self._getentry().pw_name
1000 name = property(getname, None, None, "User name")
1003 name = property(getname, None, None, "User name")
1001
1004
1002 def getpasswd(self):
1005 def getpasswd(self):
1003 return self._getentry().pw_passwd
1006 return self._getentry().pw_passwd
1004 passwd = property(getpasswd, None, None, "Password")
1007 passwd = property(getpasswd, None, None, "Password")
1005
1008
1006 def getuid(self):
1009 def getuid(self):
1007 if isinstance(self._id, basestring):
1010 if isinstance(self._id, basestring):
1008 return self._getentry().pw_uid
1011 return self._getentry().pw_uid
1009 else:
1012 else:
1010 return self._id
1013 return self._id
1011 uid = property(getuid, None, None, "User id")
1014 uid = property(getuid, None, None, "User id")
1012
1015
1013 def getgid(self):
1016 def getgid(self):
1014 return self._getentry().pw_gid
1017 return self._getentry().pw_gid
1015 gid = property(getgid, None, None, "Primary group id")
1018 gid = property(getgid, None, None, "Primary group id")
1016
1019
1017 def getgroup(self):
1020 def getgroup(self):
1018 return igrpentry(self.gid)
1021 return igrpentry(self.gid)
1019 group = property(getgroup, None, None, "Group")
1022 group = property(getgroup, None, None, "Group")
1020
1023
1021 def getgecos(self):
1024 def getgecos(self):
1022 return self._getentry().pw_gecos
1025 return self._getentry().pw_gecos
1023 gecos = property(getgecos, None, None, "Information (e.g. full user name)")
1026 gecos = property(getgecos, None, None, "Information (e.g. full user name)")
1024
1027
1025 def getdir(self):
1028 def getdir(self):
1026 return self._getentry().pw_dir
1029 return self._getentry().pw_dir
1027 dir = property(getdir, None, None, "$HOME directory")
1030 dir = property(getdir, None, None, "$HOME directory")
1028
1031
1029 def getshell(self):
1032 def getshell(self):
1030 return self._getentry().pw_shell
1033 return self._getentry().pw_shell
1031 shell = property(getshell, None, None, "Login shell")
1034 shell = property(getshell, None, None, "Login shell")
1032
1035
1033 def __xattrs__(self, mode):
1036 def __xattrs__(self, mode):
1034 return ("name", "passwd", "uid", "gid", "gecos", "dir", "shell")
1037 return ("name", "passwd", "uid", "gid", "gecos", "dir", "shell")
1035
1038
1036 def __repr__(self):
1039 def __repr__(self):
1037 return "%s.%s(%r)" % \
1040 return "%s.%s(%r)" % \
1038 (self.__class__.__module__, self.__class__.__name__, self._id)
1041 (self.__class__.__module__, self.__class__.__name__, self._id)
1039
1042
1040
1043
1041 class ipwd(Table):
1044 class ipwd(Table):
1042 """
1045 """
1043 List all entries in the Unix user account and password database.
1046 List all entries in the Unix user account and password database.
1044
1047
1045 Example:
1048 Example:
1046
1049
1047 >>> ipwd | isort("uid")
1050 >>> ipwd | isort("uid")
1048 """
1051 """
1049 def __iter__(self):
1052 def __iter__(self):
1050 for entry in pwd.getpwall():
1053 for entry in pwd.getpwall():
1051 yield ipwdentry(entry.pw_name)
1054 yield ipwdentry(entry.pw_name)
1052
1055
1053 def __xrepr__(self, mode):
1056 def __xrepr__(self, mode):
1054 if mode == "header" or mode == "footer" or mode == "cell":
1057 if mode == "header" or mode == "footer" or mode == "cell":
1055 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1058 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1056 else:
1059 else:
1057 yield (astyle.style_default, repr(self))
1060 yield (astyle.style_default, repr(self))
1058
1061
1059
1062
1060 class igrpentry(object):
1063 class igrpentry(object):
1061 """
1064 """
1062 ``igrpentry`` objects encapsulate entries in the Unix group database.
1065 ``igrpentry`` objects encapsulate entries in the Unix group database.
1063 """
1066 """
1064 def __init__(self, id):
1067 def __init__(self, id):
1065 self._id = id
1068 self._id = id
1066 self._entry = None
1069 self._entry = None
1067
1070
1068 def _getentry(self):
1071 def _getentry(self):
1069 if self._entry is None:
1072 if self._entry is None:
1070 if isinstance(self._id, basestring):
1073 if isinstance(self._id, basestring):
1071 self._entry = grp.getgrnam(self._id)
1074 self._entry = grp.getgrnam(self._id)
1072 else:
1075 else:
1073 self._entry = grp.getgrgid(self._id)
1076 self._entry = grp.getgrgid(self._id)
1074 return self._entry
1077 return self._entry
1075
1078
1076 def getname(self):
1079 def getname(self):
1077 if isinstance(self._id, basestring):
1080 if isinstance(self._id, basestring):
1078 return self._id
1081 return self._id
1079 else:
1082 else:
1080 return self._getentry().gr_name
1083 return self._getentry().gr_name
1081 name = property(getname, None, None, "Group name")
1084 name = property(getname, None, None, "Group name")
1082
1085
1083 def getpasswd(self):
1086 def getpasswd(self):
1084 return self._getentry().gr_passwd
1087 return self._getentry().gr_passwd
1085 passwd = property(getpasswd, None, None, "Password")
1088 passwd = property(getpasswd, None, None, "Password")
1086
1089
1087 def getgid(self):
1090 def getgid(self):
1088 if isinstance(self._id, basestring):
1091 if isinstance(self._id, basestring):
1089 return self._getentry().gr_gid
1092 return self._getentry().gr_gid
1090 else:
1093 else:
1091 return self._id
1094 return self._id
1092 gid = property(getgid, None, None, "Group id")
1095 gid = property(getgid, None, None, "Group id")
1093
1096
1094 def getmem(self):
1097 def getmem(self):
1095 return self._getentry().gr_mem
1098 return self._getentry().gr_mem
1096 mem = property(getmem, None, None, "Members")
1099 mem = property(getmem, None, None, "Members")
1097
1100
1098 def __xattrs__(self, mode):
1101 def __xattrs__(self, mode):
1099 return ("name", "passwd", "gid", "mem")
1102 return ("name", "passwd", "gid", "mem")
1100
1103
1101 def __xrepr__(self, mode):
1104 def __xrepr__(self, mode):
1102 if mode == "header" or mode == "footer" or mode == "cell":
1105 if mode == "header" or mode == "footer" or mode == "cell":
1103 yield (astyle.style_default, "group ")
1106 yield (astyle.style_default, "group ")
1104 try:
1107 try:
1105 yield (astyle.style_default, self.name)
1108 yield (astyle.style_default, self.name)
1106 except KeyError:
1109 except KeyError:
1107 if isinstance(self._id, basestring):
1110 if isinstance(self._id, basestring):
1108 yield (astyle.style_default, self.name_id)
1111 yield (astyle.style_default, self.name_id)
1109 else:
1112 else:
1110 yield (astyle.style_type_number, str(self._id))
1113 yield (astyle.style_type_number, str(self._id))
1111 else:
1114 else:
1112 yield (astyle.style_default, repr(self))
1115 yield (astyle.style_default, repr(self))
1113
1116
1114 def __xiter__(self, mode):
1117 def __xiter__(self, mode):
1115 for member in self.mem:
1118 for member in self.mem:
1116 yield ipwdentry(member)
1119 yield ipwdentry(member)
1117
1120
1118 def __repr__(self):
1121 def __repr__(self):
1119 return "%s.%s(%r)" % \
1122 return "%s.%s(%r)" % \
1120 (self.__class__.__module__, self.__class__.__name__, self._id)
1123 (self.__class__.__module__, self.__class__.__name__, self._id)
1121
1124
1122
1125
1123 class igrp(Table):
1126 class igrp(Table):
1124 """
1127 """
1125 This ``Table`` lists all entries in the Unix group database.
1128 This ``Table`` lists all entries in the Unix group database.
1126 """
1129 """
1127 def __xiter__(self, mode):
1130 def __xiter__(self, mode):
1128 for entry in grp.getgrall():
1131 for entry in grp.getgrall():
1129 yield igrpentry(entry.gr_name)
1132 yield igrpentry(entry.gr_name)
1130
1133
1131 def __xrepr__(self, mode):
1134 def __xrepr__(self, mode):
1132 if mode == "header" or mode == "footer":
1135 if mode == "header" or mode == "footer":
1133 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1136 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1134 else:
1137 else:
1135 yield (astyle.style_default, repr(self))
1138 yield (astyle.style_default, repr(self))
1136
1139
1137
1140
1138 class Fields(object):
1141 class Fields(object):
1139 def __init__(self, fieldnames, **fields):
1142 def __init__(self, fieldnames, **fields):
1140 self.__fieldnames = fieldnames
1143 self.__fieldnames = fieldnames
1141 for (key, value) in fields.iteritems():
1144 for (key, value) in fields.iteritems():
1142 setattr(self, key, value)
1145 setattr(self, key, value)
1143
1146
1144 def __xattrs__(self, mode):
1147 def __xattrs__(self, mode):
1145 return self.__fieldnames
1148 return self.__fieldnames
1146
1149
1147 def __xrepr__(self, mode):
1150 def __xrepr__(self, mode):
1148 yield (-1, False)
1151 yield (-1, False)
1149 if mode == "header" or mode == "cell":
1152 if mode == "header" or mode == "cell":
1150 yield (astyle.style_default, self.__class__.__name__)
1153 yield (astyle.style_default, self.__class__.__name__)
1151 yield (astyle.style_default, "(")
1154 yield (astyle.style_default, "(")
1152 for (i, f) in enumerate(self.__fieldnames):
1155 for (i, f) in enumerate(self.__fieldnames):
1153 if i:
1156 if i:
1154 yield (astyle.style_default, ", ")
1157 yield (astyle.style_default, ", ")
1155 yield (astyle.style_default, f)
1158 yield (astyle.style_default, f)
1156 yield (astyle.style_default, "=")
1159 yield (astyle.style_default, "=")
1157 for part in xrepr(getattr(self, f), "default"):
1160 for part in xrepr(getattr(self, f), "default"):
1158 yield part
1161 yield part
1159 yield (astyle.style_default, ")")
1162 yield (astyle.style_default, ")")
1160 elif mode == "footer":
1163 elif mode == "footer":
1161 yield (astyle.style_default, self.__class__.__name__)
1164 yield (astyle.style_default, self.__class__.__name__)
1162 yield (astyle.style_default, "(")
1165 yield (astyle.style_default, "(")
1163 for (i, f) in enumerate(self.__fieldnames):
1166 for (i, f) in enumerate(self.__fieldnames):
1164 if i:
1167 if i:
1165 yield (astyle.style_default, ", ")
1168 yield (astyle.style_default, ", ")
1166 yield (astyle.style_default, f)
1169 yield (astyle.style_default, f)
1167 yield (astyle.style_default, ")")
1170 yield (astyle.style_default, ")")
1168 else:
1171 else:
1169 yield (astyle.style_default, repr(self))
1172 yield (astyle.style_default, repr(self))
1170
1173
1171
1174
1172 class FieldTable(Table, list):
1175 class FieldTable(Table, list):
1173 def __init__(self, *fields):
1176 def __init__(self, *fields):
1174 Table.__init__(self)
1177 Table.__init__(self)
1175 list.__init__(self)
1178 list.__init__(self)
1176 self.fields = fields
1179 self.fields = fields
1177
1180
1178 def add(self, **fields):
1181 def add(self, **fields):
1179 self.append(Fields(self.fields, **fields))
1182 self.append(Fields(self.fields, **fields))
1180
1183
1181 def __xiter__(self, mode):
1184 def __xiter__(self, mode):
1182 return list.__iter__(self)
1185 return list.__iter__(self)
1183
1186
1184 def __xrepr__(self, mode):
1187 def __xrepr__(self, mode):
1185 yield (-1, False)
1188 yield (-1, False)
1186 if mode == "header" or mode == "footer":
1189 if mode == "header" or mode == "footer":
1187 yield (astyle.style_default, self.__class__.__name__)
1190 yield (astyle.style_default, self.__class__.__name__)
1188 yield (astyle.style_default, "(")
1191 yield (astyle.style_default, "(")
1189 for (i, f) in enumerate(self.__fieldnames):
1192 for (i, f) in enumerate(self.__fieldnames):
1190 if i:
1193 if i:
1191 yield (astyle.style_default, ", ")
1194 yield (astyle.style_default, ", ")
1192 yield (astyle.style_default, f)
1195 yield (astyle.style_default, f)
1193 yield (astyle.style_default, ")")
1196 yield (astyle.style_default, ")")
1194 else:
1197 else:
1195 yield (astyle.style_default, repr(self))
1198 yield (astyle.style_default, repr(self))
1196
1199
1197 def __repr__(self):
1200 def __repr__(self):
1198 return "<%s.%s object with fields=%r at 0x%x>" % \
1201 return "<%s.%s object with fields=%r at 0x%x>" % \
1199 (self.__class__.__module__, self.__class__.__name__,
1202 (self.__class__.__module__, self.__class__.__name__,
1200 ", ".join(map(repr, self.fields)), id(self))
1203 ", ".join(map(repr, self.fields)), id(self))
1201
1204
1202
1205
1203 class List(list):
1206 class List(list):
1204 def __xattrs__(self, mode):
1207 def __xattrs__(self, mode):
1205 return xrange(len(self))
1208 return xrange(len(self))
1206
1209
1207 def __xrepr__(self, mode):
1210 def __xrepr__(self, mode):
1208 yield (-1, False)
1211 yield (-1, False)
1209 if mode == "header" or mode == "cell" or mode == "footer" or mode == "default":
1212 if mode == "header" or mode == "cell" or mode == "footer" or mode == "default":
1210 yield (astyle.style_default, self.__class__.__name__)
1213 yield (astyle.style_default, self.__class__.__name__)
1211 yield (astyle.style_default, "(")
1214 yield (astyle.style_default, "(")
1212 for (i, item) in enumerate(self):
1215 for (i, item) in enumerate(self):
1213 if i:
1216 if i:
1214 yield (astyle.style_default, ", ")
1217 yield (astyle.style_default, ", ")
1215 for part in xrepr(item, "default"):
1218 for part in xrepr(item, "default"):
1216 yield part
1219 yield part
1217 yield (astyle.style_default, ")")
1220 yield (astyle.style_default, ")")
1218 else:
1221 else:
1219 yield (astyle.style_default, repr(self))
1222 yield (astyle.style_default, repr(self))
1220
1223
1221
1224
1222 class ienv(Table):
1225 class ienv(Table):
1223 """
1226 """
1224 List environment variables.
1227 List environment variables.
1225
1228
1226 Example:
1229 Example:
1227
1230
1228 >>> ienv
1231 >>> ienv
1229 """
1232 """
1230
1233
1231 def __xiter__(self, mode):
1234 def __xiter__(self, mode):
1232 fields = ("key", "value")
1235 fields = ("key", "value")
1233 for (key, value) in os.environ.iteritems():
1236 for (key, value) in os.environ.iteritems():
1234 yield Fields(fields, key=key, value=value)
1237 yield Fields(fields, key=key, value=value)
1235
1238
1236 def __xrepr__(self, mode):
1239 def __xrepr__(self, mode):
1237 if mode == "header" or mode == "cell":
1240 if mode == "header" or mode == "cell":
1238 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1241 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1239 else:
1242 else:
1240 yield (astyle.style_default, repr(self))
1243 yield (astyle.style_default, repr(self))
1241
1244
1242
1245
1243 class icsv(Pipe):
1246 class icsv(Pipe):
1244 """
1247 """
1245 This ``Pipe`` lists turn the input (with must be a pipe outputting lines
1248 This ``Pipe`` lists turn the input (with must be a pipe outputting lines
1246 or an ``ifile``) into lines of CVS columns.
1249 or an ``ifile``) into lines of CVS columns.
1247 """
1250 """
1248 def __init__(self, **csvargs):
1251 def __init__(self, **csvargs):
1249 """
1252 """
1250 Create an ``icsv`` object. ``cvsargs`` will be passed through as
1253 Create an ``icsv`` object. ``cvsargs`` will be passed through as
1251 keyword arguments to ``cvs.reader()``.
1254 keyword arguments to ``cvs.reader()``.
1252 """
1255 """
1253 self.csvargs = csvargs
1256 self.csvargs = csvargs
1254
1257
1255 def __xiter__(self, mode):
1258 def __xiter__(self, mode):
1256 input = self.input
1259 input = self.input
1257 if isinstance(input, ifile):
1260 if isinstance(input, ifile):
1258 input = input.open("rb")
1261 input = input.open("rb")
1259 reader = csv.reader(input, **self.csvargs)
1262 reader = csv.reader(input, **self.csvargs)
1260 for line in reader:
1263 for line in reader:
1261 yield List(line)
1264 yield List(line)
1262
1265
1263 def __xrepr__(self, mode):
1266 def __xrepr__(self, mode):
1264 yield (-1, False)
1267 yield (-1, False)
1265 if mode == "header" or mode == "footer":
1268 if mode == "header" or mode == "footer":
1266 input = getattr(self, "input", None)
1269 input = getattr(self, "input", None)
1267 if input is not None:
1270 if input is not None:
1268 for part in xrepr(input, mode):
1271 for part in xrepr(input, mode):
1269 yield part
1272 yield part
1270 yield (astyle.style_default, " | ")
1273 yield (astyle.style_default, " | ")
1271 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1274 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1272 for (i, (name, value)) in enumerate(self.csvargs.iteritems()):
1275 for (i, (name, value)) in enumerate(self.csvargs.iteritems()):
1273 if i:
1276 if i:
1274 yield (astyle.style_default, ", ")
1277 yield (astyle.style_default, ", ")
1275 yield (astyle.style_default, name)
1278 yield (astyle.style_default, name)
1276 yield (astyle.style_default, "=")
1279 yield (astyle.style_default, "=")
1277 for part in xrepr(value, "default"):
1280 for part in xrepr(value, "default"):
1278 yield part
1281 yield part
1279 yield (astyle.style_default, ")")
1282 yield (astyle.style_default, ")")
1280 else:
1283 else:
1281 yield (astyle.style_default, repr(self))
1284 yield (astyle.style_default, repr(self))
1282
1285
1283 def __repr__(self):
1286 def __repr__(self):
1284 args = ", ".join(["%s=%r" % item for item in self.csvargs.iteritems()])
1287 args = ", ".join(["%s=%r" % item for item in self.csvargs.iteritems()])
1285 return "<%s.%s %s at 0x%x>" % \
1288 return "<%s.%s %s at 0x%x>" % \
1286 (self.__class__.__module__, self.__class__.__name__, args, id(self))
1289 (self.__class__.__module__, self.__class__.__name__, args, id(self))
1287
1290
1288
1291
1289 class ix(Table):
1292 class ix(Table):
1290 """
1293 """
1291 Execute a system command and list its output as lines
1294 Execute a system command and list its output as lines
1292 (similar to ``os.popen()``).
1295 (similar to ``os.popen()``).
1293
1296
1294 Examples:
1297 Examples:
1295
1298
1296 >>> ix("ps x")
1299 >>> ix("ps x")
1297 >>> ix("find .") | ifile
1300 >>> ix("find .") | ifile
1298 """
1301 """
1299 def __init__(self, cmd):
1302 def __init__(self, cmd):
1300 self.cmd = cmd
1303 self.cmd = cmd
1301 self._pipe = None
1304 self._pipe = None
1302
1305
1303 def __xiter__(self, mode):
1306 def __xiter__(self, mode):
1304 self._pipe = os.popen(self.cmd)
1307 self._pipe = os.popen(self.cmd)
1305 for l in self._pipe:
1308 for l in self._pipe:
1306 yield l.rstrip("\r\n")
1309 yield l.rstrip("\r\n")
1307 self._pipe.close()
1310 self._pipe.close()
1308 self._pipe = None
1311 self._pipe = None
1309
1312
1310 def __del__(self):
1313 def __del__(self):
1311 if self._pipe is not None and not self._pipe.closed:
1314 if self._pipe is not None and not self._pipe.closed:
1312 self._pipe.close()
1315 self._pipe.close()
1313 self._pipe = None
1316 self._pipe = None
1314
1317
1315 def __xrepr__(self, mode):
1318 def __xrepr__(self, mode):
1316 if mode == "header" or mode == "footer":
1319 if mode == "header" or mode == "footer":
1317 yield (astyle.style_default,
1320 yield (astyle.style_default,
1318 "%s(%r)" % (self.__class__.__name__, self.cmd))
1321 "%s(%r)" % (self.__class__.__name__, self.cmd))
1319 else:
1322 else:
1320 yield (astyle.style_default, repr(self))
1323 yield (astyle.style_default, repr(self))
1321
1324
1322 def __repr__(self):
1325 def __repr__(self):
1323 return "%s.%s(%r)" % \
1326 return "%s.%s(%r)" % \
1324 (self.__class__.__module__, self.__class__.__name__, self.cmd)
1327 (self.__class__.__module__, self.__class__.__name__, self.cmd)
1325
1328
1326
1329
1327 class ifilter(Pipe):
1330 class ifilter(Pipe):
1328 """
1331 """
1329 Filter an input pipe. Only objects where an expression evaluates to true
1332 Filter an input pipe. Only objects where an expression evaluates to true
1330 (and doesn't raise an exception) are listed.
1333 (and doesn't raise an exception) are listed.
1331
1334
1332 Examples:
1335 Examples:
1333
1336
1334 >>> ils | ifilter("_.isfile() and size>1000")
1337 >>> ils | ifilter("_.isfile() and size>1000")
1335 >>> igrp | ifilter("len(mem)")
1338 >>> igrp | ifilter("len(mem)")
1336 >>> sys.modules | ifilter(lambda _:_.value is not None)
1339 >>> sys.modules | ifilter(lambda _:_.value is not None)
1337 """
1340 """
1338
1341
1339 def __init__(self, expr, globals=None, errors="raiseifallfail"):
1342 def __init__(self, expr, globals=None, errors="raiseifallfail"):
1340 """
1343 """
1341 Create an ``ifilter`` object. ``expr`` can be a callable or a string
1344 Create an ``ifilter`` object. ``expr`` can be a callable or a string
1342 containing an expression. ``globals`` will be used as the global
1345 containing an expression. ``globals`` will be used as the global
1343 namespace for calling string expressions (defaulting to IPython's
1346 namespace for calling string expressions (defaulting to IPython's
1344 user namespace). ``errors`` specifies how exception during evaluation
1347 user namespace). ``errors`` specifies how exception during evaluation
1345 of ``expr`` are handled:
1348 of ``expr`` are handled:
1346
1349
1347 * ``drop``: drop all items that have errors;
1350 * ``drop``: drop all items that have errors;
1348
1351
1349 * ``keep``: keep all items that have errors;
1352 * ``keep``: keep all items that have errors;
1350
1353
1351 * ``keeperror``: keep the exception of all items that have errors;
1354 * ``keeperror``: keep the exception of all items that have errors;
1352
1355
1353 * ``raise``: raise the exception;
1356 * ``raise``: raise the exception;
1354
1357
1355 * ``raiseifallfail``: raise the first exception if all items have errors;
1358 * ``raiseifallfail``: raise the first exception if all items have errors;
1356 otherwise drop those with errors (this is the default).
1359 otherwise drop those with errors (this is the default).
1357 """
1360 """
1358 self.expr = expr
1361 self.expr = expr
1359 self.globals = globals
1362 self.globals = globals
1360 self.errors = errors
1363 self.errors = errors
1361
1364
1362 def __xiter__(self, mode):
1365 def __xiter__(self, mode):
1363 if callable(self.expr):
1366 if callable(self.expr):
1364 def test(item):
1367 test = self.expr
1365 return self.expr(item)
1366 else:
1368 else:
1367 g = getglobals(self.globals)
1369 g = getglobals(self.globals)
1370 expr = compile(self.expr, "ipipe-expression", "eval")
1368 def test(item):
1371 def test(item):
1369 return eval(self.expr, g, AttrNamespace(item))
1372 return eval(expr, g, AttrNamespace(item))
1370
1373
1371 ok = 0
1374 ok = 0
1372 exc_info = None
1375 exc_info = None
1373 for item in xiter(self.input, mode):
1376 for item in xiter(self.input, mode):
1374 try:
1377 try:
1375 if test(item):
1378 if test(item):
1376 yield item
1379 yield item
1377 ok += 1
1380 ok += 1
1378 except (KeyboardInterrupt, SystemExit):
1381 except (KeyboardInterrupt, SystemExit):
1379 raise
1382 raise
1380 except Exception, exc:
1383 except Exception, exc:
1381 if self.errors == "drop":
1384 if self.errors == "drop":
1382 pass # Ignore errors
1385 pass # Ignore errors
1383 elif self.errors == "keep":
1386 elif self.errors == "keep":
1384 yield item
1387 yield item
1385 elif self.errors == "keeperror":
1388 elif self.errors == "keeperror":
1386 yield exc
1389 yield exc
1387 elif self.errors == "raise":
1390 elif self.errors == "raise":
1388 raise
1391 raise
1389 elif self.errors == "raiseifallfail":
1392 elif self.errors == "raiseifallfail":
1390 if exc_info is None:
1393 if exc_info is None:
1391 exc_info = sys.exc_info()
1394 exc_info = sys.exc_info()
1392 if not ok and exc_info is not None:
1395 if not ok and exc_info is not None:
1393 raise exc_info[0], exc_info[1], exc_info[2]
1396 raise exc_info[0], exc_info[1], exc_info[2]
1394
1397
1395 def __xrepr__(self, mode):
1398 def __xrepr__(self, mode):
1396 if mode == "header" or mode == "footer":
1399 if mode == "header" or mode == "footer":
1397 input = getattr(self, "input", None)
1400 input = getattr(self, "input", None)
1398 if input is not None:
1401 if input is not None:
1399 for part in xrepr(input, mode):
1402 for part in xrepr(input, mode):
1400 yield part
1403 yield part
1401 yield (astyle.style_default, " | ")
1404 yield (astyle.style_default, " | ")
1402 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1405 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1403 for part in xrepr(self.expr, "default"):
1406 for part in xrepr(self.expr, "default"):
1404 yield part
1407 yield part
1405 yield (astyle.style_default, ")")
1408 yield (astyle.style_default, ")")
1406 else:
1409 else:
1407 yield (astyle.style_default, repr(self))
1410 yield (astyle.style_default, repr(self))
1408
1411
1409 def __repr__(self):
1412 def __repr__(self):
1410 return "<%s.%s expr=%r at 0x%x>" % \
1413 return "<%s.%s expr=%r at 0x%x>" % \
1411 (self.__class__.__module__, self.__class__.__name__,
1414 (self.__class__.__module__, self.__class__.__name__,
1412 self.expr, id(self))
1415 self.expr, id(self))
1413
1416
1414
1417
1415 class ieval(Pipe):
1418 class ieval(Pipe):
1416 """
1419 """
1417 Evaluate an expression for each object in the input pipe.
1420 Evaluate an expression for each object in the input pipe.
1418
1421
1419 Examples:
1422 Examples:
1420
1423
1421 >>> ils | ieval("_.abspath()")
1424 >>> ils | ieval("_.abspath()")
1422 >>> sys.path | ieval(ifile)
1425 >>> sys.path | ieval(ifile)
1423 """
1426 """
1424
1427
1425 def __init__(self, expr, globals=None, errors="raiseifallfail"):
1428 def __init__(self, expr, globals=None, errors="raiseifallfail"):
1426 """
1429 """
1427 Create an ``ieval`` object. ``expr`` can be a callable or a string
1430 Create an ``ieval`` object. ``expr`` can be a callable or a string
1428 containing an expression. For the meaning of ``globals`` and
1431 containing an expression. For the meaning of ``globals`` and
1429 ``errors`` see ``ifilter``.
1432 ``errors`` see ``ifilter``.
1430 """
1433 """
1431 self.expr = expr
1434 self.expr = expr
1432 self.globals = globals
1435 self.globals = globals
1433 self.errors = errors
1436 self.errors = errors
1434
1437
1435 def __xiter__(self, mode):
1438 def __xiter__(self, mode):
1436 if callable(self.expr):
1439 if callable(self.expr):
1437 def do(item):
1440 do = self.expr
1438 return self.expr(item)
1439 else:
1441 else:
1440 g = getglobals(self.globals)
1442 g = getglobals(self.globals)
1443 expr = compile(self.expr, "ipipe-expression", "eval")
1441 def do(item):
1444 def do(item):
1442 return eval(self.expr, g, AttrNamespace(item))
1445 return eval(expr, g, AttrNamespace(item))
1443
1446
1444 ok = 0
1447 ok = 0
1445 exc_info = None
1448 exc_info = None
1446 for item in xiter(self.input, mode):
1449 for item in xiter(self.input, mode):
1447 try:
1450 try:
1448 yield do(item)
1451 yield do(item)
1449 except (KeyboardInterrupt, SystemExit):
1452 except (KeyboardInterrupt, SystemExit):
1450 raise
1453 raise
1451 except Exception, exc:
1454 except Exception, exc:
1452 if self.errors == "drop":
1455 if self.errors == "drop":
1453 pass # Ignore errors
1456 pass # Ignore errors
1454 elif self.errors == "keep":
1457 elif self.errors == "keep":
1455 yield item
1458 yield item
1456 elif self.errors == "keeperror":
1459 elif self.errors == "keeperror":
1457 yield exc
1460 yield exc
1458 elif self.errors == "raise":
1461 elif self.errors == "raise":
1459 raise
1462 raise
1460 elif self.errors == "raiseifallfail":
1463 elif self.errors == "raiseifallfail":
1461 if exc_info is None:
1464 if exc_info is None:
1462 exc_info = sys.exc_info()
1465 exc_info = sys.exc_info()
1463 if not ok and exc_info is not None:
1466 if not ok and exc_info is not None:
1464 raise exc_info[0], exc_info[1], exc_info[2]
1467 raise exc_info[0], exc_info[1], exc_info[2]
1465
1468
1466 def __xrepr__(self, mode):
1469 def __xrepr__(self, mode):
1467 if mode == "header" or mode == "footer":
1470 if mode == "header" or mode == "footer":
1468 input = getattr(self, "input", None)
1471 input = getattr(self, "input", None)
1469 if input is not None:
1472 if input is not None:
1470 for part in xrepr(input, mode):
1473 for part in xrepr(input, mode):
1471 yield part
1474 yield part
1472 yield (astyle.style_default, " | ")
1475 yield (astyle.style_default, " | ")
1473 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1476 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1474 for part in xrepr(self.expr, "default"):
1477 for part in xrepr(self.expr, "default"):
1475 yield part
1478 yield part
1476 yield (astyle.style_default, ")")
1479 yield (astyle.style_default, ")")
1477 else:
1480 else:
1478 yield (astyle.style_default, repr(self))
1481 yield (astyle.style_default, repr(self))
1479
1482
1480 def __repr__(self):
1483 def __repr__(self):
1481 return "<%s.%s expr=%r at 0x%x>" % \
1484 return "<%s.%s expr=%r at 0x%x>" % \
1482 (self.__class__.__module__, self.__class__.__name__,
1485 (self.__class__.__module__, self.__class__.__name__,
1483 self.expr, id(self))
1486 self.expr, id(self))
1484
1487
1485
1488
1486 class ienum(Pipe):
1489 class ienum(Pipe):
1487 """
1490 """
1488 Enumerate the input pipe (i.e. wrap each input object in an object
1491 Enumerate the input pipe (i.e. wrap each input object in an object
1489 with ``index`` and ``object`` attributes).
1492 with ``index`` and ``object`` attributes).
1490
1493
1491 Examples:
1494 Examples:
1492
1495
1493 >>> xrange(20) | ieval("_,_*_") | ienum | ifilter("index % 2 == 0") | ieval("object")
1496 >>> xrange(20) | ieval("_,_*_") | ienum | ifilter("index % 2 == 0") | ieval("object")
1494 """
1497 """
1495 def __xiter__(self, mode):
1498 def __xiter__(self, mode):
1496 fields = ("index", "object")
1499 fields = ("index", "object")
1497 for (index, object) in enumerate(xiter(self.input, mode)):
1500 for (index, object) in enumerate(xiter(self.input, mode)):
1498 yield Fields(fields, index=index, object=object)
1501 yield Fields(fields, index=index, object=object)
1499
1502
1500
1503
1501 class isort(Pipe):
1504 class isort(Pipe):
1502 """
1505 """
1503 Sorts the input pipe.
1506 Sorts the input pipe.
1504
1507
1505 Examples:
1508 Examples:
1506
1509
1507 >>> ils | isort("size")
1510 >>> ils | isort("size")
1508 >>> ils | isort("_.isdir(), _.lower()", reverse=True)
1511 >>> ils | isort("_.isdir(), _.lower()", reverse=True)
1509 """
1512 """
1510
1513
1511 def __init__(self, key, globals=None, reverse=False):
1514 def __init__(self, key, globals=None, reverse=False):
1512 """
1515 """
1513 Create an ``isort`` object. ``key`` can be a callable or a string
1516 Create an ``isort`` object. ``key`` can be a callable or a string
1514 containing an expression. If ``reverse`` is true the sort order will
1517 containing an expression. If ``reverse`` is true the sort order will
1515 be reversed. For the meaning of ``globals`` see ``ifilter``.
1518 be reversed. For the meaning of ``globals`` see ``ifilter``.
1516 """
1519 """
1517 self.key = key
1520 self.key = key
1518 self.globals = globals
1521 self.globals = globals
1519 self.reverse = reverse
1522 self.reverse = reverse
1520
1523
1521 def __xiter__(self, mode):
1524 def __xiter__(self, mode):
1522 if callable(self.key):
1525 if callable(self.key):
1523 items = sorted(
1526 items = sorted(
1524 xiter(self.input, mode),
1527 xiter(self.input, mode),
1525 key=self.key,
1528 key=self.key,
1526 reverse=self.reverse
1529 reverse=self.reverse
1527 )
1530 )
1528 else:
1531 else:
1529 g = getglobals(self.globals)
1532 g = getglobals(self.globals)
1530 def key(item):
1533 key = compile(self.key, "ipipe-expression", "eval")
1531 return eval(self.key, g, AttrNamespace(item))
1534 def realkey(item):
1535 return eval(key, g, AttrNamespace(item))
1532 items = sorted(
1536 items = sorted(
1533 xiter(self.input, mode),
1537 xiter(self.input, mode),
1534 key=key,
1538 key=realkey,
1535 reverse=self.reverse
1539 reverse=self.reverse
1536 )
1540 )
1537 for item in items:
1541 for item in items:
1538 yield item
1542 yield item
1539
1543
1540 def __xrepr__(self, mode):
1544 def __xrepr__(self, mode):
1541 if mode == "header" or mode == "footer":
1545 if mode == "header" or mode == "footer":
1542 input = getattr(self, "input", None)
1546 input = getattr(self, "input", None)
1543 if input is not None:
1547 if input is not None:
1544 for part in xrepr(input, mode):
1548 for part in xrepr(input, mode):
1545 yield part
1549 yield part
1546 yield (astyle.style_default, " | ")
1550 yield (astyle.style_default, " | ")
1547 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1551 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1548 for part in xrepr(self.key, "default"):
1552 for part in xrepr(self.key, "default"):
1549 yield part
1553 yield part
1550 if self.reverse:
1554 if self.reverse:
1551 yield (astyle.style_default, ", ")
1555 yield (astyle.style_default, ", ")
1552 for part in xrepr(True, "default"):
1556 for part in xrepr(True, "default"):
1553 yield part
1557 yield part
1554 yield (astyle.style_default, ")")
1558 yield (astyle.style_default, ")")
1555 else:
1559 else:
1556 yield (astyle.style_default, repr(self))
1560 yield (astyle.style_default, repr(self))
1557
1561
1558 def __repr__(self):
1562 def __repr__(self):
1559 return "<%s.%s key=%r reverse=%r at 0x%x>" % \
1563 return "<%s.%s key=%r reverse=%r at 0x%x>" % \
1560 (self.__class__.__module__, self.__class__.__name__,
1564 (self.__class__.__module__, self.__class__.__name__,
1561 self.key, self.reverse, id(self))
1565 self.key, self.reverse, id(self))
1562
1566
1563
1567
1564 tab = 3 # for expandtabs()
1568 tab = 3 # for expandtabs()
1565
1569
1566 def _format(field):
1570 def _format(field):
1567 if isinstance(field, str):
1571 if isinstance(field, str):
1568 text = repr(field.expandtabs(tab))[1:-1]
1572 text = repr(field.expandtabs(tab))[1:-1]
1569 elif isinstance(field, unicode):
1573 elif isinstance(field, unicode):
1570 text = repr(field.expandtabs(tab))[2:-1]
1574 text = repr(field.expandtabs(tab))[2:-1]
1571 elif isinstance(field, datetime.datetime):
1575 elif isinstance(field, datetime.datetime):
1572 # Don't use strftime() here, as this requires year >= 1900
1576 # Don't use strftime() here, as this requires year >= 1900
1573 text = "%04d-%02d-%02d %02d:%02d:%02d.%06d" % \
1577 text = "%04d-%02d-%02d %02d:%02d:%02d.%06d" % \
1574 (field.year, field.month, field.day,
1578 (field.year, field.month, field.day,
1575 field.hour, field.minute, field.second, field.microsecond)
1579 field.hour, field.minute, field.second, field.microsecond)
1576 elif isinstance(field, datetime.date):
1580 elif isinstance(field, datetime.date):
1577 text = "%04d-%02d-%02d" % (field.year, field.month, field.day)
1581 text = "%04d-%02d-%02d" % (field.year, field.month, field.day)
1578 else:
1582 else:
1579 text = repr(field)
1583 text = repr(field)
1580 return text
1584 return text
1581
1585
1582
1586
1583 class Display(object):
1587 class Display(object):
1584 class __metaclass__(type):
1588 class __metaclass__(type):
1585 def __ror__(self, input):
1589 def __ror__(self, input):
1586 return input | self()
1590 return input | self()
1587
1591
1588 def __ror__(self, input):
1592 def __ror__(self, input):
1589 self.input = input
1593 self.input = input
1590 return self
1594 return self
1591
1595
1592 def display(self):
1596 def display(self):
1593 pass
1597 pass
1594
1598
1595
1599
1596 class iless(Display):
1600 class iless(Display):
1597 cmd = "less --quit-if-one-screen --LONG-PROMPT --LINE-NUMBERS --chop-long-lines --shift=8 --RAW-CONTROL-CHARS"
1601 cmd = "less --quit-if-one-screen --LONG-PROMPT --LINE-NUMBERS --chop-long-lines --shift=8 --RAW-CONTROL-CHARS"
1598
1602
1599 def display(self):
1603 def display(self):
1600 try:
1604 try:
1601 pager = os.popen(self.cmd, "w")
1605 pager = os.popen(self.cmd, "w")
1602 try:
1606 try:
1603 for item in xiter(self.input, "default"):
1607 for item in xiter(self.input, "default"):
1604 attrs = xattrs(item, "default")
1608 attrs = xattrs(item, "default")
1605 attrs = ["%s=%s" % (a, _format(_getattr(item, a))) for a in attrs]
1609 attrs = ["%s=%s" % (a, _format(_getattr(item, a))) for a in attrs]
1606 pager.write(" ".join(attrs))
1610 pager.write(" ".join(attrs))
1607 pager.write("\n")
1611 pager.write("\n")
1608 finally:
1612 finally:
1609 pager.close()
1613 pager.close()
1610 except Exception, exc:
1614 except Exception, exc:
1611 print "%s: %s" % (exc.__class__.__name__, str(exc))
1615 print "%s: %s" % (exc.__class__.__name__, str(exc))
1612
1616
1613
1617
1614 def xformat(value, mode, maxlength):
1618 def xformat(value, mode, maxlength):
1615 align = None
1619 align = None
1616 full = True
1620 full = True
1617 width = 0
1621 width = 0
1618 text = astyle.Text()
1622 text = astyle.Text()
1619 for (style, part) in xrepr(value, mode):
1623 for (style, part) in xrepr(value, mode):
1620 # only consider the first result
1624 # only consider the first result
1621 if align is None:
1625 if align is None:
1622 if isinstance(style, int):
1626 if isinstance(style, int):
1623 # (style, text) really is (alignment, stop)
1627 # (style, text) really is (alignment, stop)
1624 align = style
1628 align = style
1625 full = part
1629 full = part
1626 continue
1630 continue
1627 else:
1631 else:
1628 align = -1
1632 align = -1
1629 full = True
1633 full = True
1630 if not isinstance(style, int):
1634 if not isinstance(style, int):
1631 text.append((style, part))
1635 text.append((style, part))
1632 width += len(part)
1636 width += len(part)
1633 if width >= maxlength and not full:
1637 if width >= maxlength and not full:
1634 text.append((astyle.style_ellisis, "..."))
1638 text.append((astyle.style_ellisis, "..."))
1635 width += 3
1639 width += 3
1636 break
1640 break
1637 if align is None: # default to left alignment
1641 if align is None: # default to left alignment
1638 align = -1
1642 align = -1
1639 return (align, width, text)
1643 return (align, width, text)
1640
1644
1641
1645
1642 class idump(Display):
1646 class idump(Display):
1643 # The approximate maximum length of a column entry
1647 # The approximate maximum length of a column entry
1644 maxattrlength = 200
1648 maxattrlength = 200
1645
1649
1646 # Style for column names
1650 # Style for column names
1647 style_header = astyle.Style.fromstr("white:black:bold")
1651 style_header = astyle.Style.fromstr("white:black:bold")
1648
1652
1649 def __init__(self, *attrs):
1653 def __init__(self, *attrs):
1650 self.attrs = attrs
1654 self.attrs = attrs
1651 self.headerpadchar = " "
1655 self.headerpadchar = " "
1652 self.headersepchar = "|"
1656 self.headersepchar = "|"
1653 self.datapadchar = " "
1657 self.datapadchar = " "
1654 self.datasepchar = "|"
1658 self.datasepchar = "|"
1655
1659
1656 def display(self):
1660 def display(self):
1657 stream = genutils.Term.cout
1661 stream = genutils.Term.cout
1658 allattrs = []
1662 allattrs = []
1659 allattrset = set()
1663 allattrset = set()
1660 colwidths = {}
1664 colwidths = {}
1661 rows = []
1665 rows = []
1662 for item in xiter(self.input, "default"):
1666 for item in xiter(self.input, "default"):
1663 row = {}
1667 row = {}
1664 attrs = self.attrs
1668 attrs = self.attrs
1665 if not attrs:
1669 if not attrs:
1666 attrs = xattrs(item, "default")
1670 attrs = xattrs(item, "default")
1667 for attrname in attrs:
1671 for attrname in attrs:
1668 if attrname not in allattrset:
1672 if attrname not in allattrset:
1669 allattrs.append(attrname)
1673 allattrs.append(attrname)
1670 allattrset.add(attrname)
1674 allattrset.add(attrname)
1671 colwidths[attrname] = len(_attrname(attrname))
1675 colwidths[attrname] = len(_attrname(attrname))
1672 try:
1676 try:
1673 value = _getattr(item, attrname, None)
1677 value = _getattr(item, attrname, None)
1674 except (KeyboardInterrupt, SystemExit):
1678 except (KeyboardInterrupt, SystemExit):
1675 raise
1679 raise
1676 except Exception, exc:
1680 except Exception, exc:
1677 value = exc
1681 value = exc
1678 (align, width, text) = xformat(value, "cell", self.maxattrlength)
1682 (align, width, text) = xformat(value, "cell", self.maxattrlength)
1679 colwidths[attrname] = max(colwidths[attrname], width)
1683 colwidths[attrname] = max(colwidths[attrname], width)
1680 # remember alignment, length and colored parts
1684 # remember alignment, length and colored parts
1681 row[attrname] = (align, width, text)
1685 row[attrname] = (align, width, text)
1682 rows.append(row)
1686 rows.append(row)
1683
1687
1684 stream.write("\n")
1688 stream.write("\n")
1685 for (i, attrname) in enumerate(allattrs):
1689 for (i, attrname) in enumerate(allattrs):
1686 self.style_header(_attrname(attrname)).write(stream)
1690 self.style_header(_attrname(attrname)).write(stream)
1687 spc = colwidths[attrname] - len(_attrname(attrname))
1691 spc = colwidths[attrname] - len(_attrname(attrname))
1688 if i < len(colwidths)-1:
1692 if i < len(colwidths)-1:
1689 stream.write(self.headerpadchar*spc)
1693 stream.write(self.headerpadchar*spc)
1690 stream.write(self.headersepchar)
1694 stream.write(self.headersepchar)
1691 stream.write("\n")
1695 stream.write("\n")
1692
1696
1693 for row in rows:
1697 for row in rows:
1694 for (i, attrname) in enumerate(allattrs):
1698 for (i, attrname) in enumerate(allattrs):
1695 (align, width, text) = row[attrname]
1699 (align, width, text) = row[attrname]
1696 spc = colwidths[attrname] - width
1700 spc = colwidths[attrname] - width
1697 if align == -1:
1701 if align == -1:
1698 text.write(stream)
1702 text.write(stream)
1699 if i < len(colwidths)-1:
1703 if i < len(colwidths)-1:
1700 stream.write(self.datapadchar*spc)
1704 stream.write(self.datapadchar*spc)
1701 elif align == 0:
1705 elif align == 0:
1702 spc = colwidths[attrname] - width
1706 spc = colwidths[attrname] - width
1703 spc1 = spc//2
1707 spc1 = spc//2
1704 spc2 = spc-spc1
1708 spc2 = spc-spc1
1705 stream.write(self.datapadchar*spc1)
1709 stream.write(self.datapadchar*spc1)
1706 text.write(stream)
1710 text.write(stream)
1707 if i < len(colwidths)-1:
1711 if i < len(colwidths)-1:
1708 stream.write(self.datapadchar*spc2)
1712 stream.write(self.datapadchar*spc2)
1709 else:
1713 else:
1710 stream.write(self.datapadchar*spc)
1714 stream.write(self.datapadchar*spc)
1711 text.write(stream)
1715 text.write(stream)
1712 if i < len(colwidths)-1:
1716 if i < len(colwidths)-1:
1713 stream.write(self.datasepchar)
1717 stream.write(self.datasepchar)
1714 stream.write("\n")
1718 stream.write("\n")
1715
1719
1716
1720
1717 class XMode(object):
1721 class XMode(object):
1718 """
1722 """
1719 An ``XMode`` object describes one enter mode available for an object
1723 An ``XMode`` object describes one enter mode available for an object
1720 """
1724 """
1721 def __init__(self, object, mode, title=None, description=None):
1725 def __init__(self, object, mode, title=None, description=None):
1722 """
1726 """
1723 Create a new ``XMode`` object for the object ``object``. This object
1727 Create a new ``XMode`` object for the object ``object``. This object
1724 must support the enter mode ``mode`` (i.e. ``object.__xiter__(mode)``
1728 must support the enter mode ``mode`` (i.e. ``object.__xiter__(mode)``
1725 must return an iterable). ``title`` and ``description`` will be
1729 must return an iterable). ``title`` and ``description`` will be
1726 displayed in the browser when selecting among the available modes.
1730 displayed in the browser when selecting among the available modes.
1727 """
1731 """
1728 self.object = object
1732 self.object = object
1729 self.mode = mode
1733 self.mode = mode
1730 self.title = title
1734 self.title = title
1731 self.description = description
1735 self.description = description
1732
1736
1733 def __repr__(self):
1737 def __repr__(self):
1734 return "<%s.%s object mode=%r at 0x%x>" % \
1738 return "<%s.%s object mode=%r at 0x%x>" % \
1735 (self.__class__.__module__, self.__class__.__name__,
1739 (self.__class__.__module__, self.__class__.__name__,
1736 self.mode, id(self))
1740 self.mode, id(self))
1737
1741
1738 def __xrepr__(self, mode):
1742 def __xrepr__(self, mode):
1739 if mode == "header" or mode == "footer":
1743 if mode == "header" or mode == "footer":
1740 yield (astyle.style_default, self.title)
1744 yield (astyle.style_default, self.title)
1741 else:
1745 else:
1742 yield (astyle.style_default, repr(self))
1746 yield (astyle.style_default, repr(self))
1743
1747
1744 def __xattrs__(self, mode):
1748 def __xattrs__(self, mode):
1745 if mode == "detail":
1749 if mode == "detail":
1746 return ("object", "mode", "title", "description")
1750 return ("object", "mode", "title", "description")
1747 return ("title", "description")
1751 return ("title", "description")
1748
1752
1749 def __xiter__(self, mode):
1753 def __xiter__(self, mode):
1750 return xiter(self.object, self.mode)
1754 return xiter(self.object, self.mode)
1751
1755
1752
1756
1753 class XAttr(object):
1757 class XAttr(object):
1754 def __init__(self, object, name):
1758 def __init__(self, object, name):
1755 self.name = _attrname(name)
1759 self.name = _attrname(name)
1756
1760
1757 try:
1761 try:
1758 self.value = _getattr(object, name)
1762 self.value = _getattr(object, name)
1759 except (KeyboardInterrupt, SystemExit):
1763 except (KeyboardInterrupt, SystemExit):
1760 raise
1764 raise
1761 except Exception, exc:
1765 except Exception, exc:
1762 if exc.__class__.__module__ == "exceptions":
1766 if exc.__class__.__module__ == "exceptions":
1763 self.value = exc.__class__.__name__
1767 self.value = exc.__class__.__name__
1764 else:
1768 else:
1765 self.value = "%s.%s" % \
1769 self.value = "%s.%s" % \
1766 (exc.__class__.__module__, exc.__class__.__name__)
1770 (exc.__class__.__module__, exc.__class__.__name__)
1767 self.type = self.value
1771 self.type = self.value
1768 else:
1772 else:
1769 t = type(self.value)
1773 t = type(self.value)
1770 if t.__module__ == "__builtin__":
1774 if t.__module__ == "__builtin__":
1771 self.type = t.__name__
1775 self.type = t.__name__
1772 else:
1776 else:
1773 self.type = "%s.%s" % (t.__module__, t.__name__)
1777 self.type = "%s.%s" % (t.__module__, t.__name__)
1774
1778
1775 doc = None
1779 doc = None
1776 if isinstance(name, basestring):
1780 if isinstance(name, basestring):
1777 if name.endswith("()"):
1781 if name.endswith("()"):
1778 doc = getattr(getattr(object, name[:-2]), "__doc__", None)
1782 doc = getattr(getattr(object, name[:-2]), "__doc__", None)
1779 else:
1783 else:
1780 try:
1784 try:
1781 meta = getattr(type(object), name)
1785 meta = getattr(type(object), name)
1782 except AttributeError:
1786 except AttributeError:
1783 pass
1787 pass
1784 else:
1788 else:
1785 if isinstance(meta, property):
1789 if isinstance(meta, property):
1786 doc = getattr(meta, "__doc__", None)
1790 doc = getattr(meta, "__doc__", None)
1787 elif callable(name):
1791 elif callable(name):
1788 doc = getattr(name, "__doc__", None)
1792 doc = getattr(name, "__doc__", None)
1789 if isinstance(doc, basestring):
1793 if isinstance(doc, basestring):
1790 doc = doc.strip()
1794 doc = doc.strip()
1791 self.doc = doc
1795 self.doc = doc
1792
1796
1793 def __xattrs__(self, mode):
1797 def __xattrs__(self, mode):
1794 return ("name", "type", "doc", "value")
1798 return ("name", "type", "doc", "value")
1795
1799
1796
1800
1797 try:
1801 try:
1798 from ibrowse import ibrowse
1802 from ibrowse import ibrowse
1799 except ImportError:
1803 except ImportError:
1800 # No curses (probably Windows) => use ``idump`` as the default display.
1804 # No curses (probably Windows) => use ``idump`` as the default display.
1801 defaultdisplay = idump
1805 defaultdisplay = idump
1802 else:
1806 else:
1803 defaultdisplay = ibrowse
1807 defaultdisplay = ibrowse
1804 __all__.append("ibrowse")
1808 __all__.append("ibrowse")
1805
1809
1806
1810
1807 # If we're running under IPython, install an IPython displayhook that
1811 # If we're running under IPython, install an IPython displayhook that
1808 # returns the object from Display.display(), else install a displayhook
1812 # returns the object from Display.display(), else install a displayhook
1809 # directly as sys.displayhook
1813 # directly as sys.displayhook
1810 api = None
1814 api = None
1811 if ipapi is not None:
1815 if ipapi is not None:
1812 try:
1816 try:
1813 api = ipapi.get()
1817 api = ipapi.get()
1814 except AttributeError:
1818 except AttributeError:
1815 pass
1819 pass
1816
1820
1817 if api is not None:
1821 if api is not None:
1818 def displayhook(self, obj):
1822 def displayhook(self, obj):
1819 if isinstance(obj, type) and issubclass(obj, Table):
1823 if isinstance(obj, type) and issubclass(obj, Table):
1820 obj = obj()
1824 obj = obj()
1821 if isinstance(obj, Table):
1825 if isinstance(obj, Table):
1822 obj = obj | defaultdisplay
1826 obj = obj | defaultdisplay
1823 if isinstance(obj, Display):
1827 if isinstance(obj, Display):
1824 return obj.display()
1828 return obj.display()
1825 else:
1829 else:
1826 raise ipapi.TryNext
1830 raise ipapi.TryNext
1827 api.set_hook("result_display", displayhook)
1831 api.set_hook("result_display", displayhook)
1828 else:
1832 else:
1829 def installdisplayhook():
1833 def installdisplayhook():
1830 _originalhook = sys.displayhook
1834 _originalhook = sys.displayhook
1831 def displayhook(obj):
1835 def displayhook(obj):
1832 if isinstance(obj, type) and issubclass(obj, Table):
1836 if isinstance(obj, type) and issubclass(obj, Table):
1833 obj = obj()
1837 obj = obj()
1834 if isinstance(obj, Table):
1838 if isinstance(obj, Table):
1835 obj = obj | defaultdisplay
1839 obj = obj | defaultdisplay
1836 if isinstance(obj, Display):
1840 if isinstance(obj, Display):
1837 return obj.display()
1841 return obj.display()
1838 else:
1842 else:
1839 _originalhook(obj)
1843 _originalhook(obj)
1840 sys.displayhook = displayhook
1844 sys.displayhook = displayhook
1841 installdisplayhook()
1845 installdisplayhook()
@@ -1,5642 +1,5648 b''
1 2006-07-12 Walter Doerwald <walter@livinglogic.de>
2
3 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
4 Compile expression strings into code objects. This should speed
5 up ifilter and friends somewhat.
6
1 2006-07-08 Ville Vainio <vivainio@gmail.com>
7 2006-07-08 Ville Vainio <vivainio@gmail.com>
2
8
3 * Magic.py: %cpaste now strips > from the beginning of lines
9 * Magic.py: %cpaste now strips > from the beginning of lines
4 to ease pasting quoted code from emails. Contributed by
10 to ease pasting quoted code from emails. Contributed by
5 Stefan van der Walt.
11 Stefan van der Walt.
6
12
7 2006-06-29 Ville Vainio <vivainio@gmail.com>
13 2006-06-29 Ville Vainio <vivainio@gmail.com>
8
14
9 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
15 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
10 mode, patch contributed by Darren Dale. NEEDS TESTING!
16 mode, patch contributed by Darren Dale. NEEDS TESTING!
11
17
12 2006-06-28 Walter Doerwald <walter@livinglogic.de>
18 2006-06-28 Walter Doerwald <walter@livinglogic.de>
13
19
14 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
20 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
15 a blue background. Fix fetching new display rows when the browser
21 a blue background. Fix fetching new display rows when the browser
16 scrolls more than a screenful (e.g. by using the goto command).
22 scrolls more than a screenful (e.g. by using the goto command).
17
23
18 2006-06-27 Ville Vainio <vivainio@gmail.com>
24 2006-06-27 Ville Vainio <vivainio@gmail.com>
19
25
20 * Magic.py (_inspect, _ofind) Apply David Huard's
26 * Magic.py (_inspect, _ofind) Apply David Huard's
21 patch for displaying the correct docstring for 'property'
27 patch for displaying the correct docstring for 'property'
22 attributes.
28 attributes.
23
29
24 2006-06-23 Walter Doerwald <walter@livinglogic.de>
30 2006-06-23 Walter Doerwald <walter@livinglogic.de>
25
31
26 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
32 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
27 commands into the methods implementing them.
33 commands into the methods implementing them.
28
34
29 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
35 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
30
36
31 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
37 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
32 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
38 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
33 autoindent support was authored by Jin Liu.
39 autoindent support was authored by Jin Liu.
34
40
35 2006-06-22 Walter Doerwald <walter@livinglogic.de>
41 2006-06-22 Walter Doerwald <walter@livinglogic.de>
36
42
37 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
43 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
38 for keymaps with a custom class that simplifies handling.
44 for keymaps with a custom class that simplifies handling.
39
45
40 2006-06-19 Walter Doerwald <walter@livinglogic.de>
46 2006-06-19 Walter Doerwald <walter@livinglogic.de>
41
47
42 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
48 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
43 resizing. This requires Python 2.5 to work.
49 resizing. This requires Python 2.5 to work.
44
50
45 2006-06-16 Walter Doerwald <walter@livinglogic.de>
51 2006-06-16 Walter Doerwald <walter@livinglogic.de>
46
52
47 * IPython/Extensions/ibrowse.py: Add two new commands to
53 * IPython/Extensions/ibrowse.py: Add two new commands to
48 ibrowse: "hideattr" (mapped to "h") hides the attribute under
54 ibrowse: "hideattr" (mapped to "h") hides the attribute under
49 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
55 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
50 attributes again. Remapped the help command to "?". Display
56 attributes again. Remapped the help command to "?". Display
51 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
57 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
52 as keys for the "home" and "end" commands. Add three new commands
58 as keys for the "home" and "end" commands. Add three new commands
53 to the input mode for "find" and friends: "delend" (CTRL-K)
59 to the input mode for "find" and friends: "delend" (CTRL-K)
54 deletes to the end of line. "incsearchup" searches upwards in the
60 deletes to the end of line. "incsearchup" searches upwards in the
55 command history for an input that starts with the text before the cursor.
61 command history for an input that starts with the text before the cursor.
56 "incsearchdown" does the same downwards. Removed a bogus mapping of
62 "incsearchdown" does the same downwards. Removed a bogus mapping of
57 the x key to "delete".
63 the x key to "delete".
58
64
59 2006-06-15 Ville Vainio <vivainio@gmail.com>
65 2006-06-15 Ville Vainio <vivainio@gmail.com>
60
66
61 * iplib.py, hooks.py: Added new generate_prompt hook that can be
67 * iplib.py, hooks.py: Added new generate_prompt hook that can be
62 used to create prompts dynamically, instead of the "old" way of
68 used to create prompts dynamically, instead of the "old" way of
63 assigning "magic" strings to prompt_in1 and prompt_in2. The old
69 assigning "magic" strings to prompt_in1 and prompt_in2. The old
64 way still works (it's invoked by the default hook), of course.
70 way still works (it's invoked by the default hook), of course.
65
71
66 * Prompts.py: added generate_output_prompt hook for altering output
72 * Prompts.py: added generate_output_prompt hook for altering output
67 prompt
73 prompt
68
74
69 * Release.py: Changed version string to 0.7.3.svn.
75 * Release.py: Changed version string to 0.7.3.svn.
70
76
71 2006-06-15 Walter Doerwald <walter@livinglogic.de>
77 2006-06-15 Walter Doerwald <walter@livinglogic.de>
72
78
73 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
79 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
74 the call to fetch() always tries to fetch enough data for at least one
80 the call to fetch() always tries to fetch enough data for at least one
75 full screen. This makes it possible to simply call moveto(0,0,True) in
81 full screen. This makes it possible to simply call moveto(0,0,True) in
76 the constructor. Fix typos and removed the obsolete goto attribute.
82 the constructor. Fix typos and removed the obsolete goto attribute.
77
83
78 2006-06-12 Ville Vainio <vivainio@gmail.com>
84 2006-06-12 Ville Vainio <vivainio@gmail.com>
79
85
80 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
86 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
81 allowing $variable interpolation within multiline statements,
87 allowing $variable interpolation within multiline statements,
82 though so far only with "sh" profile for a testing period.
88 though so far only with "sh" profile for a testing period.
83 The patch also enables splitting long commands with \ but it
89 The patch also enables splitting long commands with \ but it
84 doesn't work properly yet.
90 doesn't work properly yet.
85
91
86 2006-06-12 Walter Doerwald <walter@livinglogic.de>
92 2006-06-12 Walter Doerwald <walter@livinglogic.de>
87
93
88 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
94 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
89 input history and the position of the cursor in the input history for
95 input history and the position of the cursor in the input history for
90 the find, findbackwards and goto command.
96 the find, findbackwards and goto command.
91
97
92 2006-06-10 Walter Doerwald <walter@livinglogic.de>
98 2006-06-10 Walter Doerwald <walter@livinglogic.de>
93
99
94 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
100 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
95 implements the basic functionality of browser commands that require
101 implements the basic functionality of browser commands that require
96 input. Reimplement the goto, find and findbackwards commands as
102 input. Reimplement the goto, find and findbackwards commands as
97 subclasses of _CommandInput. Add an input history and keymaps to those
103 subclasses of _CommandInput. Add an input history and keymaps to those
98 commands. Add "\r" as a keyboard shortcut for the enterdefault and
104 commands. Add "\r" as a keyboard shortcut for the enterdefault and
99 execute commands.
105 execute commands.
100
106
101 2006-06-07 Ville Vainio <vivainio@gmail.com>
107 2006-06-07 Ville Vainio <vivainio@gmail.com>
102
108
103 * iplib.py: ipython mybatch.ipy exits ipython immediately after
109 * iplib.py: ipython mybatch.ipy exits ipython immediately after
104 running the batch files instead of leaving the session open.
110 running the batch files instead of leaving the session open.
105
111
106 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
112 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
107
113
108 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
114 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
109 the original fix was incomplete. Patch submitted by W. Maier.
115 the original fix was incomplete. Patch submitted by W. Maier.
110
116
111 2006-06-07 Ville Vainio <vivainio@gmail.com>
117 2006-06-07 Ville Vainio <vivainio@gmail.com>
112
118
113 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
119 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
114 Confirmation prompts can be supressed by 'quiet' option.
120 Confirmation prompts can be supressed by 'quiet' option.
115 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
121 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
116
122
117 2006-06-06 *** Released version 0.7.2
123 2006-06-06 *** Released version 0.7.2
118
124
119 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
125 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
120
126
121 * IPython/Release.py (version): Made 0.7.2 final for release.
127 * IPython/Release.py (version): Made 0.7.2 final for release.
122 Repo tagged and release cut.
128 Repo tagged and release cut.
123
129
124 2006-06-05 Ville Vainio <vivainio@gmail.com>
130 2006-06-05 Ville Vainio <vivainio@gmail.com>
125
131
126 * Magic.py (magic_rehashx): Honor no_alias list earlier in
132 * Magic.py (magic_rehashx): Honor no_alias list earlier in
127 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
133 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
128
134
129 * upgrade_dir.py: try import 'path' module a bit harder
135 * upgrade_dir.py: try import 'path' module a bit harder
130 (for %upgrade)
136 (for %upgrade)
131
137
132 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
138 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
133
139
134 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
140 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
135 instead of looping 20 times.
141 instead of looping 20 times.
136
142
137 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
143 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
138 correctly at initialization time. Bug reported by Krishna Mohan
144 correctly at initialization time. Bug reported by Krishna Mohan
139 Gundu <gkmohan-AT-gmail.com> on the user list.
145 Gundu <gkmohan-AT-gmail.com> on the user list.
140
146
141 * IPython/Release.py (version): Mark 0.7.2 version to start
147 * IPython/Release.py (version): Mark 0.7.2 version to start
142 testing for release on 06/06.
148 testing for release on 06/06.
143
149
144 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
150 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
145
151
146 * scripts/irunner: thin script interface so users don't have to
152 * scripts/irunner: thin script interface so users don't have to
147 find the module and call it as an executable, since modules rarely
153 find the module and call it as an executable, since modules rarely
148 live in people's PATH.
154 live in people's PATH.
149
155
150 * IPython/irunner.py (InteractiveRunner.__init__): added
156 * IPython/irunner.py (InteractiveRunner.__init__): added
151 delaybeforesend attribute to control delays with newer versions of
157 delaybeforesend attribute to control delays with newer versions of
152 pexpect. Thanks to detailed help from pexpect's author, Noah
158 pexpect. Thanks to detailed help from pexpect's author, Noah
153 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
159 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
154 correctly (it works in NoColor mode).
160 correctly (it works in NoColor mode).
155
161
156 * IPython/iplib.py (handle_normal): fix nasty crash reported on
162 * IPython/iplib.py (handle_normal): fix nasty crash reported on
157 SAGE list, from improper log() calls.
163 SAGE list, from improper log() calls.
158
164
159 2006-05-31 Ville Vainio <vivainio@gmail.com>
165 2006-05-31 Ville Vainio <vivainio@gmail.com>
160
166
161 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
167 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
162 with args in parens to work correctly with dirs that have spaces.
168 with args in parens to work correctly with dirs that have spaces.
163
169
164 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
170 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
165
171
166 * IPython/Logger.py (Logger.logstart): add option to log raw input
172 * IPython/Logger.py (Logger.logstart): add option to log raw input
167 instead of the processed one. A -r flag was added to the
173 instead of the processed one. A -r flag was added to the
168 %logstart magic used for controlling logging.
174 %logstart magic used for controlling logging.
169
175
170 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
176 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
171
177
172 * IPython/iplib.py (InteractiveShell.__init__): add check for the
178 * IPython/iplib.py (InteractiveShell.__init__): add check for the
173 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
179 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
174 recognize the option. After a bug report by Will Maier. This
180 recognize the option. After a bug report by Will Maier. This
175 closes #64 (will do it after confirmation from W. Maier).
181 closes #64 (will do it after confirmation from W. Maier).
176
182
177 * IPython/irunner.py: New module to run scripts as if manually
183 * IPython/irunner.py: New module to run scripts as if manually
178 typed into an interactive environment, based on pexpect. After a
184 typed into an interactive environment, based on pexpect. After a
179 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
185 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
180 ipython-user list. Simple unittests in the tests/ directory.
186 ipython-user list. Simple unittests in the tests/ directory.
181
187
182 * tools/release: add Will Maier, OpenBSD port maintainer, to
188 * tools/release: add Will Maier, OpenBSD port maintainer, to
183 recepients list. We are now officially part of the OpenBSD ports:
189 recepients list. We are now officially part of the OpenBSD ports:
184 http://www.openbsd.org/ports.html ! Many thanks to Will for the
190 http://www.openbsd.org/ports.html ! Many thanks to Will for the
185 work.
191 work.
186
192
187 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
193 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
188
194
189 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
195 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
190 so that it doesn't break tkinter apps.
196 so that it doesn't break tkinter apps.
191
197
192 * IPython/iplib.py (_prefilter): fix bug where aliases would
198 * IPython/iplib.py (_prefilter): fix bug where aliases would
193 shadow variables when autocall was fully off. Reported by SAGE
199 shadow variables when autocall was fully off. Reported by SAGE
194 author William Stein.
200 author William Stein.
195
201
196 * IPython/OInspect.py (Inspector.__init__): add a flag to control
202 * IPython/OInspect.py (Inspector.__init__): add a flag to control
197 at what detail level strings are computed when foo? is requested.
203 at what detail level strings are computed when foo? is requested.
198 This allows users to ask for example that the string form of an
204 This allows users to ask for example that the string form of an
199 object is only computed when foo?? is called, or even never, by
205 object is only computed when foo?? is called, or even never, by
200 setting the object_info_string_level >= 2 in the configuration
206 setting the object_info_string_level >= 2 in the configuration
201 file. This new option has been added and documented. After a
207 file. This new option has been added and documented. After a
202 request by SAGE to be able to control the printing of very large
208 request by SAGE to be able to control the printing of very large
203 objects more easily.
209 objects more easily.
204
210
205 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
211 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
206
212
207 * IPython/ipmaker.py (make_IPython): remove the ipython call path
213 * IPython/ipmaker.py (make_IPython): remove the ipython call path
208 from sys.argv, to be 100% consistent with how Python itself works
214 from sys.argv, to be 100% consistent with how Python itself works
209 (as seen for example with python -i file.py). After a bug report
215 (as seen for example with python -i file.py). After a bug report
210 by Jeffrey Collins.
216 by Jeffrey Collins.
211
217
212 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
218 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
213 nasty bug which was preventing custom namespaces with -pylab,
219 nasty bug which was preventing custom namespaces with -pylab,
214 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
220 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
215 compatibility (long gone from mpl).
221 compatibility (long gone from mpl).
216
222
217 * IPython/ipapi.py (make_session): name change: create->make. We
223 * IPython/ipapi.py (make_session): name change: create->make. We
218 use make in other places (ipmaker,...), it's shorter and easier to
224 use make in other places (ipmaker,...), it's shorter and easier to
219 type and say, etc. I'm trying to clean things before 0.7.2 so
225 type and say, etc. I'm trying to clean things before 0.7.2 so
220 that I can keep things stable wrt to ipapi in the chainsaw branch.
226 that I can keep things stable wrt to ipapi in the chainsaw branch.
221
227
222 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
228 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
223 python-mode recognizes our debugger mode. Add support for
229 python-mode recognizes our debugger mode. Add support for
224 autoindent inside (X)emacs. After a patch sent in by Jin Liu
230 autoindent inside (X)emacs. After a patch sent in by Jin Liu
225 <m.liu.jin-AT-gmail.com> originally written by
231 <m.liu.jin-AT-gmail.com> originally written by
226 doxgen-AT-newsmth.net (with minor modifications for xemacs
232 doxgen-AT-newsmth.net (with minor modifications for xemacs
227 compatibility)
233 compatibility)
228
234
229 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
235 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
230 tracebacks when walking the stack so that the stack tracking system
236 tracebacks when walking the stack so that the stack tracking system
231 in emacs' python-mode can identify the frames correctly.
237 in emacs' python-mode can identify the frames correctly.
232
238
233 * IPython/ipmaker.py (make_IPython): make the internal (and
239 * IPython/ipmaker.py (make_IPython): make the internal (and
234 default config) autoedit_syntax value false by default. Too many
240 default config) autoedit_syntax value false by default. Too many
235 users have complained to me (both on and off-list) about problems
241 users have complained to me (both on and off-list) about problems
236 with this option being on by default, so I'm making it default to
242 with this option being on by default, so I'm making it default to
237 off. It can still be enabled by anyone via the usual mechanisms.
243 off. It can still be enabled by anyone via the usual mechanisms.
238
244
239 * IPython/completer.py (Completer.attr_matches): add support for
245 * IPython/completer.py (Completer.attr_matches): add support for
240 PyCrust-style _getAttributeNames magic method. Patch contributed
246 PyCrust-style _getAttributeNames magic method. Patch contributed
241 by <mscott-AT-goldenspud.com>. Closes #50.
247 by <mscott-AT-goldenspud.com>. Closes #50.
242
248
243 * IPython/iplib.py (InteractiveShell.__init__): remove the
249 * IPython/iplib.py (InteractiveShell.__init__): remove the
244 deletion of exit/quit from __builtin__, which can break
250 deletion of exit/quit from __builtin__, which can break
245 third-party tools like the Zope debugging console. The
251 third-party tools like the Zope debugging console. The
246 %exit/%quit magics remain. In general, it's probably a good idea
252 %exit/%quit magics remain. In general, it's probably a good idea
247 not to delete anything from __builtin__, since we never know what
253 not to delete anything from __builtin__, since we never know what
248 that will break. In any case, python now (for 2.5) will support
254 that will break. In any case, python now (for 2.5) will support
249 'real' exit/quit, so this issue is moot. Closes #55.
255 'real' exit/quit, so this issue is moot. Closes #55.
250
256
251 * IPython/genutils.py (with_obj): rename the 'with' function to
257 * IPython/genutils.py (with_obj): rename the 'with' function to
252 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
258 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
253 becomes a language keyword. Closes #53.
259 becomes a language keyword. Closes #53.
254
260
255 * IPython/FakeModule.py (FakeModule.__init__): add a proper
261 * IPython/FakeModule.py (FakeModule.__init__): add a proper
256 __file__ attribute to this so it fools more things into thinking
262 __file__ attribute to this so it fools more things into thinking
257 it is a real module. Closes #59.
263 it is a real module. Closes #59.
258
264
259 * IPython/Magic.py (magic_edit): add -n option to open the editor
265 * IPython/Magic.py (magic_edit): add -n option to open the editor
260 at a specific line number. After a patch by Stefan van der Walt.
266 at a specific line number. After a patch by Stefan van der Walt.
261
267
262 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
268 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
263
269
264 * IPython/iplib.py (edit_syntax_error): fix crash when for some
270 * IPython/iplib.py (edit_syntax_error): fix crash when for some
265 reason the file could not be opened. After automatic crash
271 reason the file could not be opened. After automatic crash
266 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
272 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
267 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
273 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
268 (_should_recompile): Don't fire editor if using %bg, since there
274 (_should_recompile): Don't fire editor if using %bg, since there
269 is no file in the first place. From the same report as above.
275 is no file in the first place. From the same report as above.
270 (raw_input): protect against faulty third-party prefilters. After
276 (raw_input): protect against faulty third-party prefilters. After
271 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
277 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
272 while running under SAGE.
278 while running under SAGE.
273
279
274 2006-05-23 Ville Vainio <vivainio@gmail.com>
280 2006-05-23 Ville Vainio <vivainio@gmail.com>
275
281
276 * ipapi.py: Stripped down ip.to_user_ns() to work only as
282 * ipapi.py: Stripped down ip.to_user_ns() to work only as
277 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
283 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
278 now returns None (again), unless dummy is specifically allowed by
284 now returns None (again), unless dummy is specifically allowed by
279 ipapi.get(allow_dummy=True).
285 ipapi.get(allow_dummy=True).
280
286
281 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
287 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
282
288
283 * IPython: remove all 2.2-compatibility objects and hacks from
289 * IPython: remove all 2.2-compatibility objects and hacks from
284 everywhere, since we only support 2.3 at this point. Docs
290 everywhere, since we only support 2.3 at this point. Docs
285 updated.
291 updated.
286
292
287 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
293 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
288 Anything requiring extra validation can be turned into a Python
294 Anything requiring extra validation can be turned into a Python
289 property in the future. I used a property for the db one b/c
295 property in the future. I used a property for the db one b/c
290 there was a nasty circularity problem with the initialization
296 there was a nasty circularity problem with the initialization
291 order, which right now I don't have time to clean up.
297 order, which right now I don't have time to clean up.
292
298
293 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
299 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
294 another locking bug reported by Jorgen. I'm not 100% sure though,
300 another locking bug reported by Jorgen. I'm not 100% sure though,
295 so more testing is needed...
301 so more testing is needed...
296
302
297 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
303 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
298
304
299 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
305 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
300 local variables from any routine in user code (typically executed
306 local variables from any routine in user code (typically executed
301 with %run) directly into the interactive namespace. Very useful
307 with %run) directly into the interactive namespace. Very useful
302 when doing complex debugging.
308 when doing complex debugging.
303 (IPythonNotRunning): Changed the default None object to a dummy
309 (IPythonNotRunning): Changed the default None object to a dummy
304 whose attributes can be queried as well as called without
310 whose attributes can be queried as well as called without
305 exploding, to ease writing code which works transparently both in
311 exploding, to ease writing code which works transparently both in
306 and out of ipython and uses some of this API.
312 and out of ipython and uses some of this API.
307
313
308 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
314 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
309
315
310 * IPython/hooks.py (result_display): Fix the fact that our display
316 * IPython/hooks.py (result_display): Fix the fact that our display
311 hook was using str() instead of repr(), as the default python
317 hook was using str() instead of repr(), as the default python
312 console does. This had gone unnoticed b/c it only happened if
318 console does. This had gone unnoticed b/c it only happened if
313 %Pprint was off, but the inconsistency was there.
319 %Pprint was off, but the inconsistency was there.
314
320
315 2006-05-15 Ville Vainio <vivainio@gmail.com>
321 2006-05-15 Ville Vainio <vivainio@gmail.com>
316
322
317 * Oinspect.py: Only show docstring for nonexisting/binary files
323 * Oinspect.py: Only show docstring for nonexisting/binary files
318 when doing object??, closing ticket #62
324 when doing object??, closing ticket #62
319
325
320 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
326 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
321
327
322 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
328 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
323 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
329 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
324 was being released in a routine which hadn't checked if it had
330 was being released in a routine which hadn't checked if it had
325 been the one to acquire it.
331 been the one to acquire it.
326
332
327 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
333 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
328
334
329 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
335 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
330
336
331 2006-04-11 Ville Vainio <vivainio@gmail.com>
337 2006-04-11 Ville Vainio <vivainio@gmail.com>
332
338
333 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
339 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
334 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
340 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
335 prefilters, allowing stuff like magics and aliases in the file.
341 prefilters, allowing stuff like magics and aliases in the file.
336
342
337 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
343 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
338 added. Supported now are "%clear in" and "%clear out" (clear input and
344 added. Supported now are "%clear in" and "%clear out" (clear input and
339 output history, respectively). Also fixed CachedOutput.flush to
345 output history, respectively). Also fixed CachedOutput.flush to
340 properly flush the output cache.
346 properly flush the output cache.
341
347
342 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
348 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
343 half-success (and fail explicitly).
349 half-success (and fail explicitly).
344
350
345 2006-03-28 Ville Vainio <vivainio@gmail.com>
351 2006-03-28 Ville Vainio <vivainio@gmail.com>
346
352
347 * iplib.py: Fix quoting of aliases so that only argless ones
353 * iplib.py: Fix quoting of aliases so that only argless ones
348 are quoted
354 are quoted
349
355
350 2006-03-28 Ville Vainio <vivainio@gmail.com>
356 2006-03-28 Ville Vainio <vivainio@gmail.com>
351
357
352 * iplib.py: Quote aliases with spaces in the name.
358 * iplib.py: Quote aliases with spaces in the name.
353 "c:\program files\blah\bin" is now legal alias target.
359 "c:\program files\blah\bin" is now legal alias target.
354
360
355 * ext_rehashdir.py: Space no longer allowed as arg
361 * ext_rehashdir.py: Space no longer allowed as arg
356 separator, since space is legal in path names.
362 separator, since space is legal in path names.
357
363
358 2006-03-16 Ville Vainio <vivainio@gmail.com>
364 2006-03-16 Ville Vainio <vivainio@gmail.com>
359
365
360 * upgrade_dir.py: Take path.py from Extensions, correcting
366 * upgrade_dir.py: Take path.py from Extensions, correcting
361 %upgrade magic
367 %upgrade magic
362
368
363 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
369 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
364
370
365 * hooks.py: Only enclose editor binary in quotes if legal and
371 * hooks.py: Only enclose editor binary in quotes if legal and
366 necessary (space in the name, and is an existing file). Fixes a bug
372 necessary (space in the name, and is an existing file). Fixes a bug
367 reported by Zachary Pincus.
373 reported by Zachary Pincus.
368
374
369 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
375 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
370
376
371 * Manual: thanks to a tip on proper color handling for Emacs, by
377 * Manual: thanks to a tip on proper color handling for Emacs, by
372 Eric J Haywiser <ejh1-AT-MIT.EDU>.
378 Eric J Haywiser <ejh1-AT-MIT.EDU>.
373
379
374 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
380 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
375 by applying the provided patch. Thanks to Liu Jin
381 by applying the provided patch. Thanks to Liu Jin
376 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
382 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
377 XEmacs/Linux, I'm trusting the submitter that it actually helps
383 XEmacs/Linux, I'm trusting the submitter that it actually helps
378 under win32/GNU Emacs. Will revisit if any problems are reported.
384 under win32/GNU Emacs. Will revisit if any problems are reported.
379
385
380 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
386 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
381
387
382 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
388 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
383 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
389 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
384
390
385 2006-03-12 Ville Vainio <vivainio@gmail.com>
391 2006-03-12 Ville Vainio <vivainio@gmail.com>
386
392
387 * Magic.py (magic_timeit): Added %timeit magic, contributed by
393 * Magic.py (magic_timeit): Added %timeit magic, contributed by
388 Torsten Marek.
394 Torsten Marek.
389
395
390 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
396 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
391
397
392 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
398 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
393 line ranges works again.
399 line ranges works again.
394
400
395 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
401 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
396
402
397 * IPython/iplib.py (showtraceback): add back sys.last_traceback
403 * IPython/iplib.py (showtraceback): add back sys.last_traceback
398 and friends, after a discussion with Zach Pincus on ipython-user.
404 and friends, after a discussion with Zach Pincus on ipython-user.
399 I'm not 100% sure, but after thinking about it quite a bit, it may
405 I'm not 100% sure, but after thinking about it quite a bit, it may
400 be OK. Testing with the multithreaded shells didn't reveal any
406 be OK. Testing with the multithreaded shells didn't reveal any
401 problems, but let's keep an eye out.
407 problems, but let's keep an eye out.
402
408
403 In the process, I fixed a few things which were calling
409 In the process, I fixed a few things which were calling
404 self.InteractiveTB() directly (like safe_execfile), which is a
410 self.InteractiveTB() directly (like safe_execfile), which is a
405 mistake: ALL exception reporting should be done by calling
411 mistake: ALL exception reporting should be done by calling
406 self.showtraceback(), which handles state and tab-completion and
412 self.showtraceback(), which handles state and tab-completion and
407 more.
413 more.
408
414
409 2006-03-01 Ville Vainio <vivainio@gmail.com>
415 2006-03-01 Ville Vainio <vivainio@gmail.com>
410
416
411 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
417 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
412 To use, do "from ipipe import *".
418 To use, do "from ipipe import *".
413
419
414 2006-02-24 Ville Vainio <vivainio@gmail.com>
420 2006-02-24 Ville Vainio <vivainio@gmail.com>
415
421
416 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
422 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
417 "cleanly" and safely than the older upgrade mechanism.
423 "cleanly" and safely than the older upgrade mechanism.
418
424
419 2006-02-21 Ville Vainio <vivainio@gmail.com>
425 2006-02-21 Ville Vainio <vivainio@gmail.com>
420
426
421 * Magic.py: %save works again.
427 * Magic.py: %save works again.
422
428
423 2006-02-15 Ville Vainio <vivainio@gmail.com>
429 2006-02-15 Ville Vainio <vivainio@gmail.com>
424
430
425 * Magic.py: %Pprint works again
431 * Magic.py: %Pprint works again
426
432
427 * Extensions/ipy_sane_defaults.py: Provide everything provided
433 * Extensions/ipy_sane_defaults.py: Provide everything provided
428 in default ipythonrc, to make it possible to have a completely empty
434 in default ipythonrc, to make it possible to have a completely empty
429 ipythonrc (and thus completely rc-file free configuration)
435 ipythonrc (and thus completely rc-file free configuration)
430
436
431 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
437 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
432
438
433 * IPython/hooks.py (editor): quote the call to the editor command,
439 * IPython/hooks.py (editor): quote the call to the editor command,
434 to allow commands with spaces in them. Problem noted by watching
440 to allow commands with spaces in them. Problem noted by watching
435 Ian Oswald's video about textpad under win32 at
441 Ian Oswald's video about textpad under win32 at
436 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
442 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
437
443
438 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
444 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
439 describing magics (we haven't used @ for a loong time).
445 describing magics (we haven't used @ for a loong time).
440
446
441 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
447 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
442 contributed by marienz to close
448 contributed by marienz to close
443 http://www.scipy.net/roundup/ipython/issue53.
449 http://www.scipy.net/roundup/ipython/issue53.
444
450
445 2006-02-10 Ville Vainio <vivainio@gmail.com>
451 2006-02-10 Ville Vainio <vivainio@gmail.com>
446
452
447 * genutils.py: getoutput now works in win32 too
453 * genutils.py: getoutput now works in win32 too
448
454
449 * completer.py: alias and magic completion only invoked
455 * completer.py: alias and magic completion only invoked
450 at the first "item" in the line, to avoid "cd %store"
456 at the first "item" in the line, to avoid "cd %store"
451 nonsense.
457 nonsense.
452
458
453 2006-02-09 Ville Vainio <vivainio@gmail.com>
459 2006-02-09 Ville Vainio <vivainio@gmail.com>
454
460
455 * test/*: Added a unit testing framework (finally).
461 * test/*: Added a unit testing framework (finally).
456 '%run runtests.py' to run test_*.
462 '%run runtests.py' to run test_*.
457
463
458 * ipapi.py: Exposed runlines and set_custom_exc
464 * ipapi.py: Exposed runlines and set_custom_exc
459
465
460 2006-02-07 Ville Vainio <vivainio@gmail.com>
466 2006-02-07 Ville Vainio <vivainio@gmail.com>
461
467
462 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
468 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
463 instead use "f(1 2)" as before.
469 instead use "f(1 2)" as before.
464
470
465 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
471 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
466
472
467 * IPython/demo.py (IPythonDemo): Add new classes to the demo
473 * IPython/demo.py (IPythonDemo): Add new classes to the demo
468 facilities, for demos processed by the IPython input filter
474 facilities, for demos processed by the IPython input filter
469 (IPythonDemo), and for running a script one-line-at-a-time as a
475 (IPythonDemo), and for running a script one-line-at-a-time as a
470 demo, both for pure Python (LineDemo) and for IPython-processed
476 demo, both for pure Python (LineDemo) and for IPython-processed
471 input (IPythonLineDemo). After a request by Dave Kohel, from the
477 input (IPythonLineDemo). After a request by Dave Kohel, from the
472 SAGE team.
478 SAGE team.
473 (Demo.edit): added an edit() method to the demo objects, to edit
479 (Demo.edit): added an edit() method to the demo objects, to edit
474 the in-memory copy of the last executed block.
480 the in-memory copy of the last executed block.
475
481
476 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
482 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
477 processing to %edit, %macro and %save. These commands can now be
483 processing to %edit, %macro and %save. These commands can now be
478 invoked on the unprocessed input as it was typed by the user
484 invoked on the unprocessed input as it was typed by the user
479 (without any prefilters applied). After requests by the SAGE team
485 (without any prefilters applied). After requests by the SAGE team
480 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
486 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
481
487
482 2006-02-01 Ville Vainio <vivainio@gmail.com>
488 2006-02-01 Ville Vainio <vivainio@gmail.com>
483
489
484 * setup.py, eggsetup.py: easy_install ipython==dev works
490 * setup.py, eggsetup.py: easy_install ipython==dev works
485 correctly now (on Linux)
491 correctly now (on Linux)
486
492
487 * ipy_user_conf,ipmaker: user config changes, removed spurious
493 * ipy_user_conf,ipmaker: user config changes, removed spurious
488 warnings
494 warnings
489
495
490 * iplib: if rc.banner is string, use it as is.
496 * iplib: if rc.banner is string, use it as is.
491
497
492 * Magic: %pycat accepts a string argument and pages it's contents.
498 * Magic: %pycat accepts a string argument and pages it's contents.
493
499
494
500
495 2006-01-30 Ville Vainio <vivainio@gmail.com>
501 2006-01-30 Ville Vainio <vivainio@gmail.com>
496
502
497 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
503 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
498 Now %store and bookmarks work through PickleShare, meaning that
504 Now %store and bookmarks work through PickleShare, meaning that
499 concurrent access is possible and all ipython sessions see the
505 concurrent access is possible and all ipython sessions see the
500 same database situation all the time, instead of snapshot of
506 same database situation all the time, instead of snapshot of
501 the situation when the session was started. Hence, %bookmark
507 the situation when the session was started. Hence, %bookmark
502 results are immediately accessible from othes sessions. The database
508 results are immediately accessible from othes sessions. The database
503 is also available for use by user extensions. See:
509 is also available for use by user extensions. See:
504 http://www.python.org/pypi/pickleshare
510 http://www.python.org/pypi/pickleshare
505
511
506 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
512 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
507
513
508 * aliases can now be %store'd
514 * aliases can now be %store'd
509
515
510 * path.py moved to Extensions so that pickleshare does not need
516 * path.py moved to Extensions so that pickleshare does not need
511 IPython-specific import. Extensions added to pythonpath right
517 IPython-specific import. Extensions added to pythonpath right
512 at __init__.
518 at __init__.
513
519
514 * iplib.py: ipalias deprecated/redundant; aliases are converted and
520 * iplib.py: ipalias deprecated/redundant; aliases are converted and
515 called with _ip.system and the pre-transformed command string.
521 called with _ip.system and the pre-transformed command string.
516
522
517 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
523 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
518
524
519 * IPython/iplib.py (interact): Fix that we were not catching
525 * IPython/iplib.py (interact): Fix that we were not catching
520 KeyboardInterrupt exceptions properly. I'm not quite sure why the
526 KeyboardInterrupt exceptions properly. I'm not quite sure why the
521 logic here had to change, but it's fixed now.
527 logic here had to change, but it's fixed now.
522
528
523 2006-01-29 Ville Vainio <vivainio@gmail.com>
529 2006-01-29 Ville Vainio <vivainio@gmail.com>
524
530
525 * iplib.py: Try to import pyreadline on Windows.
531 * iplib.py: Try to import pyreadline on Windows.
526
532
527 2006-01-27 Ville Vainio <vivainio@gmail.com>
533 2006-01-27 Ville Vainio <vivainio@gmail.com>
528
534
529 * iplib.py: Expose ipapi as _ip in builtin namespace.
535 * iplib.py: Expose ipapi as _ip in builtin namespace.
530 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
536 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
531 and ip_set_hook (-> _ip.set_hook) redundant. % and !
537 and ip_set_hook (-> _ip.set_hook) redundant. % and !
532 syntax now produce _ip.* variant of the commands.
538 syntax now produce _ip.* variant of the commands.
533
539
534 * "_ip.options().autoedit_syntax = 2" automatically throws
540 * "_ip.options().autoedit_syntax = 2" automatically throws
535 user to editor for syntax error correction without prompting.
541 user to editor for syntax error correction without prompting.
536
542
537 2006-01-27 Ville Vainio <vivainio@gmail.com>
543 2006-01-27 Ville Vainio <vivainio@gmail.com>
538
544
539 * ipmaker.py: Give "realistic" sys.argv for scripts (without
545 * ipmaker.py: Give "realistic" sys.argv for scripts (without
540 'ipython' at argv[0]) executed through command line.
546 'ipython' at argv[0]) executed through command line.
541 NOTE: this DEPRECATES calling ipython with multiple scripts
547 NOTE: this DEPRECATES calling ipython with multiple scripts
542 ("ipython a.py b.py c.py")
548 ("ipython a.py b.py c.py")
543
549
544 * iplib.py, hooks.py: Added configurable input prefilter,
550 * iplib.py, hooks.py: Added configurable input prefilter,
545 named 'input_prefilter'. See ext_rescapture.py for example
551 named 'input_prefilter'. See ext_rescapture.py for example
546 usage.
552 usage.
547
553
548 * ext_rescapture.py, Magic.py: Better system command output capture
554 * ext_rescapture.py, Magic.py: Better system command output capture
549 through 'var = !ls' (deprecates user-visible %sc). Same notation
555 through 'var = !ls' (deprecates user-visible %sc). Same notation
550 applies for magics, 'var = %alias' assigns alias list to var.
556 applies for magics, 'var = %alias' assigns alias list to var.
551
557
552 * ipapi.py: added meta() for accessing extension-usable data store.
558 * ipapi.py: added meta() for accessing extension-usable data store.
553
559
554 * iplib.py: added InteractiveShell.getapi(). New magics should be
560 * iplib.py: added InteractiveShell.getapi(). New magics should be
555 written doing self.getapi() instead of using the shell directly.
561 written doing self.getapi() instead of using the shell directly.
556
562
557 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
563 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
558 %store foo >> ~/myfoo.txt to store variables to files (in clean
564 %store foo >> ~/myfoo.txt to store variables to files (in clean
559 textual form, not a restorable pickle).
565 textual form, not a restorable pickle).
560
566
561 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
567 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
562
568
563 * usage.py, Magic.py: added %quickref
569 * usage.py, Magic.py: added %quickref
564
570
565 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
571 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
566
572
567 * GetoptErrors when invoking magics etc. with wrong args
573 * GetoptErrors when invoking magics etc. with wrong args
568 are now more helpful:
574 are now more helpful:
569 GetoptError: option -l not recognized (allowed: "qb" )
575 GetoptError: option -l not recognized (allowed: "qb" )
570
576
571 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
577 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
572
578
573 * IPython/demo.py (Demo.show): Flush stdout after each block, so
579 * IPython/demo.py (Demo.show): Flush stdout after each block, so
574 computationally intensive blocks don't appear to stall the demo.
580 computationally intensive blocks don't appear to stall the demo.
575
581
576 2006-01-24 Ville Vainio <vivainio@gmail.com>
582 2006-01-24 Ville Vainio <vivainio@gmail.com>
577
583
578 * iplib.py, hooks.py: 'result_display' hook can return a non-None
584 * iplib.py, hooks.py: 'result_display' hook can return a non-None
579 value to manipulate resulting history entry.
585 value to manipulate resulting history entry.
580
586
581 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
587 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
582 to instance methods of IPApi class, to make extending an embedded
588 to instance methods of IPApi class, to make extending an embedded
583 IPython feasible. See ext_rehashdir.py for example usage.
589 IPython feasible. See ext_rehashdir.py for example usage.
584
590
585 * Merged 1071-1076 from branches/0.7.1
591 * Merged 1071-1076 from branches/0.7.1
586
592
587
593
588 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
594 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
589
595
590 * tools/release (daystamp): Fix build tools to use the new
596 * tools/release (daystamp): Fix build tools to use the new
591 eggsetup.py script to build lightweight eggs.
597 eggsetup.py script to build lightweight eggs.
592
598
593 * Applied changesets 1062 and 1064 before 0.7.1 release.
599 * Applied changesets 1062 and 1064 before 0.7.1 release.
594
600
595 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
601 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
596 see the raw input history (without conversions like %ls ->
602 see the raw input history (without conversions like %ls ->
597 ipmagic("ls")). After a request from W. Stein, SAGE
603 ipmagic("ls")). After a request from W. Stein, SAGE
598 (http://modular.ucsd.edu/sage) developer. This information is
604 (http://modular.ucsd.edu/sage) developer. This information is
599 stored in the input_hist_raw attribute of the IPython instance, so
605 stored in the input_hist_raw attribute of the IPython instance, so
600 developers can access it if needed (it's an InputList instance).
606 developers can access it if needed (it's an InputList instance).
601
607
602 * Versionstring = 0.7.2.svn
608 * Versionstring = 0.7.2.svn
603
609
604 * eggsetup.py: A separate script for constructing eggs, creates
610 * eggsetup.py: A separate script for constructing eggs, creates
605 proper launch scripts even on Windows (an .exe file in
611 proper launch scripts even on Windows (an .exe file in
606 \python24\scripts).
612 \python24\scripts).
607
613
608 * ipapi.py: launch_new_instance, launch entry point needed for the
614 * ipapi.py: launch_new_instance, launch entry point needed for the
609 egg.
615 egg.
610
616
611 2006-01-23 Ville Vainio <vivainio@gmail.com>
617 2006-01-23 Ville Vainio <vivainio@gmail.com>
612
618
613 * Added %cpaste magic for pasting python code
619 * Added %cpaste magic for pasting python code
614
620
615 2006-01-22 Ville Vainio <vivainio@gmail.com>
621 2006-01-22 Ville Vainio <vivainio@gmail.com>
616
622
617 * Merge from branches/0.7.1 into trunk, revs 1052-1057
623 * Merge from branches/0.7.1 into trunk, revs 1052-1057
618
624
619 * Versionstring = 0.7.2.svn
625 * Versionstring = 0.7.2.svn
620
626
621 * eggsetup.py: A separate script for constructing eggs, creates
627 * eggsetup.py: A separate script for constructing eggs, creates
622 proper launch scripts even on Windows (an .exe file in
628 proper launch scripts even on Windows (an .exe file in
623 \python24\scripts).
629 \python24\scripts).
624
630
625 * ipapi.py: launch_new_instance, launch entry point needed for the
631 * ipapi.py: launch_new_instance, launch entry point needed for the
626 egg.
632 egg.
627
633
628 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
634 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
629
635
630 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
636 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
631 %pfile foo would print the file for foo even if it was a binary.
637 %pfile foo would print the file for foo even if it was a binary.
632 Now, extensions '.so' and '.dll' are skipped.
638 Now, extensions '.so' and '.dll' are skipped.
633
639
634 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
640 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
635 bug, where macros would fail in all threaded modes. I'm not 100%
641 bug, where macros would fail in all threaded modes. I'm not 100%
636 sure, so I'm going to put out an rc instead of making a release
642 sure, so I'm going to put out an rc instead of making a release
637 today, and wait for feedback for at least a few days.
643 today, and wait for feedback for at least a few days.
638
644
639 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
645 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
640 it...) the handling of pasting external code with autoindent on.
646 it...) the handling of pasting external code with autoindent on.
641 To get out of a multiline input, the rule will appear for most
647 To get out of a multiline input, the rule will appear for most
642 users unchanged: two blank lines or change the indent level
648 users unchanged: two blank lines or change the indent level
643 proposed by IPython. But there is a twist now: you can
649 proposed by IPython. But there is a twist now: you can
644 add/subtract only *one or two spaces*. If you add/subtract three
650 add/subtract only *one or two spaces*. If you add/subtract three
645 or more (unless you completely delete the line), IPython will
651 or more (unless you completely delete the line), IPython will
646 accept that line, and you'll need to enter a second one of pure
652 accept that line, and you'll need to enter a second one of pure
647 whitespace. I know it sounds complicated, but I can't find a
653 whitespace. I know it sounds complicated, but I can't find a
648 different solution that covers all the cases, with the right
654 different solution that covers all the cases, with the right
649 heuristics. Hopefully in actual use, nobody will really notice
655 heuristics. Hopefully in actual use, nobody will really notice
650 all these strange rules and things will 'just work'.
656 all these strange rules and things will 'just work'.
651
657
652 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
658 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
653
659
654 * IPython/iplib.py (interact): catch exceptions which can be
660 * IPython/iplib.py (interact): catch exceptions which can be
655 triggered asynchronously by signal handlers. Thanks to an
661 triggered asynchronously by signal handlers. Thanks to an
656 automatic crash report, submitted by Colin Kingsley
662 automatic crash report, submitted by Colin Kingsley
657 <tercel-AT-gentoo.org>.
663 <tercel-AT-gentoo.org>.
658
664
659 2006-01-20 Ville Vainio <vivainio@gmail.com>
665 2006-01-20 Ville Vainio <vivainio@gmail.com>
660
666
661 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
667 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
662 (%rehashdir, very useful, try it out) of how to extend ipython
668 (%rehashdir, very useful, try it out) of how to extend ipython
663 with new magics. Also added Extensions dir to pythonpath to make
669 with new magics. Also added Extensions dir to pythonpath to make
664 importing extensions easy.
670 importing extensions easy.
665
671
666 * %store now complains when trying to store interactively declared
672 * %store now complains when trying to store interactively declared
667 classes / instances of those classes.
673 classes / instances of those classes.
668
674
669 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
675 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
670 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
676 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
671 if they exist, and ipy_user_conf.py with some defaults is created for
677 if they exist, and ipy_user_conf.py with some defaults is created for
672 the user.
678 the user.
673
679
674 * Startup rehashing done by the config file, not InterpreterExec.
680 * Startup rehashing done by the config file, not InterpreterExec.
675 This means system commands are available even without selecting the
681 This means system commands are available even without selecting the
676 pysh profile. It's the sensible default after all.
682 pysh profile. It's the sensible default after all.
677
683
678 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
684 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
679
685
680 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
686 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
681 multiline code with autoindent on working. But I am really not
687 multiline code with autoindent on working. But I am really not
682 sure, so this needs more testing. Will commit a debug-enabled
688 sure, so this needs more testing. Will commit a debug-enabled
683 version for now, while I test it some more, so that Ville and
689 version for now, while I test it some more, so that Ville and
684 others may also catch any problems. Also made
690 others may also catch any problems. Also made
685 self.indent_current_str() a method, to ensure that there's no
691 self.indent_current_str() a method, to ensure that there's no
686 chance of the indent space count and the corresponding string
692 chance of the indent space count and the corresponding string
687 falling out of sync. All code needing the string should just call
693 falling out of sync. All code needing the string should just call
688 the method.
694 the method.
689
695
690 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
696 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
691
697
692 * IPython/Magic.py (magic_edit): fix check for when users don't
698 * IPython/Magic.py (magic_edit): fix check for when users don't
693 save their output files, the try/except was in the wrong section.
699 save their output files, the try/except was in the wrong section.
694
700
695 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
701 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
696
702
697 * IPython/Magic.py (magic_run): fix __file__ global missing from
703 * IPython/Magic.py (magic_run): fix __file__ global missing from
698 script's namespace when executed via %run. After a report by
704 script's namespace when executed via %run. After a report by
699 Vivian.
705 Vivian.
700
706
701 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
707 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
702 when using python 2.4. The parent constructor changed in 2.4, and
708 when using python 2.4. The parent constructor changed in 2.4, and
703 we need to track it directly (we can't call it, as it messes up
709 we need to track it directly (we can't call it, as it messes up
704 readline and tab-completion inside our pdb would stop working).
710 readline and tab-completion inside our pdb would stop working).
705 After a bug report by R. Bernstein <rocky-AT-panix.com>.
711 After a bug report by R. Bernstein <rocky-AT-panix.com>.
706
712
707 2006-01-16 Ville Vainio <vivainio@gmail.com>
713 2006-01-16 Ville Vainio <vivainio@gmail.com>
708
714
709 * Ipython/magic.py: Reverted back to old %edit functionality
715 * Ipython/magic.py: Reverted back to old %edit functionality
710 that returns file contents on exit.
716 that returns file contents on exit.
711
717
712 * IPython/path.py: Added Jason Orendorff's "path" module to
718 * IPython/path.py: Added Jason Orendorff's "path" module to
713 IPython tree, http://www.jorendorff.com/articles/python/path/.
719 IPython tree, http://www.jorendorff.com/articles/python/path/.
714 You can get path objects conveniently through %sc, and !!, e.g.:
720 You can get path objects conveniently through %sc, and !!, e.g.:
715 sc files=ls
721 sc files=ls
716 for p in files.paths: # or files.p
722 for p in files.paths: # or files.p
717 print p,p.mtime
723 print p,p.mtime
718
724
719 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
725 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
720 now work again without considering the exclusion regexp -
726 now work again without considering the exclusion regexp -
721 hence, things like ',foo my/path' turn to 'foo("my/path")'
727 hence, things like ',foo my/path' turn to 'foo("my/path")'
722 instead of syntax error.
728 instead of syntax error.
723
729
724
730
725 2006-01-14 Ville Vainio <vivainio@gmail.com>
731 2006-01-14 Ville Vainio <vivainio@gmail.com>
726
732
727 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
733 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
728 ipapi decorators for python 2.4 users, options() provides access to rc
734 ipapi decorators for python 2.4 users, options() provides access to rc
729 data.
735 data.
730
736
731 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
737 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
732 as path separators (even on Linux ;-). Space character after
738 as path separators (even on Linux ;-). Space character after
733 backslash (as yielded by tab completer) is still space;
739 backslash (as yielded by tab completer) is still space;
734 "%cd long\ name" works as expected.
740 "%cd long\ name" works as expected.
735
741
736 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
742 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
737 as "chain of command", with priority. API stays the same,
743 as "chain of command", with priority. API stays the same,
738 TryNext exception raised by a hook function signals that
744 TryNext exception raised by a hook function signals that
739 current hook failed and next hook should try handling it, as
745 current hook failed and next hook should try handling it, as
740 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
746 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
741 requested configurable display hook, which is now implemented.
747 requested configurable display hook, which is now implemented.
742
748
743 2006-01-13 Ville Vainio <vivainio@gmail.com>
749 2006-01-13 Ville Vainio <vivainio@gmail.com>
744
750
745 * IPython/platutils*.py: platform specific utility functions,
751 * IPython/platutils*.py: platform specific utility functions,
746 so far only set_term_title is implemented (change terminal
752 so far only set_term_title is implemented (change terminal
747 label in windowing systems). %cd now changes the title to
753 label in windowing systems). %cd now changes the title to
748 current dir.
754 current dir.
749
755
750 * IPython/Release.py: Added myself to "authors" list,
756 * IPython/Release.py: Added myself to "authors" list,
751 had to create new files.
757 had to create new files.
752
758
753 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
759 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
754 shell escape; not a known bug but had potential to be one in the
760 shell escape; not a known bug but had potential to be one in the
755 future.
761 future.
756
762
757 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
763 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
758 extension API for IPython! See the module for usage example. Fix
764 extension API for IPython! See the module for usage example. Fix
759 OInspect for docstring-less magic functions.
765 OInspect for docstring-less magic functions.
760
766
761
767
762 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
768 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
763
769
764 * IPython/iplib.py (raw_input): temporarily deactivate all
770 * IPython/iplib.py (raw_input): temporarily deactivate all
765 attempts at allowing pasting of code with autoindent on. It
771 attempts at allowing pasting of code with autoindent on. It
766 introduced bugs (reported by Prabhu) and I can't seem to find a
772 introduced bugs (reported by Prabhu) and I can't seem to find a
767 robust combination which works in all cases. Will have to revisit
773 robust combination which works in all cases. Will have to revisit
768 later.
774 later.
769
775
770 * IPython/genutils.py: remove isspace() function. We've dropped
776 * IPython/genutils.py: remove isspace() function. We've dropped
771 2.2 compatibility, so it's OK to use the string method.
777 2.2 compatibility, so it's OK to use the string method.
772
778
773 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
779 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
774
780
775 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
781 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
776 matching what NOT to autocall on, to include all python binary
782 matching what NOT to autocall on, to include all python binary
777 operators (including things like 'and', 'or', 'is' and 'in').
783 operators (including things like 'and', 'or', 'is' and 'in').
778 Prompted by a bug report on 'foo & bar', but I realized we had
784 Prompted by a bug report on 'foo & bar', but I realized we had
779 many more potential bug cases with other operators. The regexp is
785 many more potential bug cases with other operators. The regexp is
780 self.re_exclude_auto, it's fairly commented.
786 self.re_exclude_auto, it's fairly commented.
781
787
782 2006-01-12 Ville Vainio <vivainio@gmail.com>
788 2006-01-12 Ville Vainio <vivainio@gmail.com>
783
789
784 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
790 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
785 Prettified and hardened string/backslash quoting with ipsystem(),
791 Prettified and hardened string/backslash quoting with ipsystem(),
786 ipalias() and ipmagic(). Now even \ characters are passed to
792 ipalias() and ipmagic(). Now even \ characters are passed to
787 %magics, !shell escapes and aliases exactly as they are in the
793 %magics, !shell escapes and aliases exactly as they are in the
788 ipython command line. Should improve backslash experience,
794 ipython command line. Should improve backslash experience,
789 particularly in Windows (path delimiter for some commands that
795 particularly in Windows (path delimiter for some commands that
790 won't understand '/'), but Unix benefits as well (regexps). %cd
796 won't understand '/'), but Unix benefits as well (regexps). %cd
791 magic still doesn't support backslash path delimiters, though. Also
797 magic still doesn't support backslash path delimiters, though. Also
792 deleted all pretense of supporting multiline command strings in
798 deleted all pretense of supporting multiline command strings in
793 !system or %magic commands. Thanks to Jerry McRae for suggestions.
799 !system or %magic commands. Thanks to Jerry McRae for suggestions.
794
800
795 * doc/build_doc_instructions.txt added. Documentation on how to
801 * doc/build_doc_instructions.txt added. Documentation on how to
796 use doc/update_manual.py, added yesterday. Both files contributed
802 use doc/update_manual.py, added yesterday. Both files contributed
797 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
803 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
798 doc/*.sh for deprecation at a later date.
804 doc/*.sh for deprecation at a later date.
799
805
800 * /ipython.py Added ipython.py to root directory for
806 * /ipython.py Added ipython.py to root directory for
801 zero-installation (tar xzvf ipython.tgz; cd ipython; python
807 zero-installation (tar xzvf ipython.tgz; cd ipython; python
802 ipython.py) and development convenience (no need to keep doing
808 ipython.py) and development convenience (no need to keep doing
803 "setup.py install" between changes).
809 "setup.py install" between changes).
804
810
805 * Made ! and !! shell escapes work (again) in multiline expressions:
811 * Made ! and !! shell escapes work (again) in multiline expressions:
806 if 1:
812 if 1:
807 !ls
813 !ls
808 !!ls
814 !!ls
809
815
810 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
816 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
811
817
812 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
818 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
813 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
819 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
814 module in case-insensitive installation. Was causing crashes
820 module in case-insensitive installation. Was causing crashes
815 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
821 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
816
822
817 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
823 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
818 <marienz-AT-gentoo.org>, closes
824 <marienz-AT-gentoo.org>, closes
819 http://www.scipy.net/roundup/ipython/issue51.
825 http://www.scipy.net/roundup/ipython/issue51.
820
826
821 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
827 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
822
828
823 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
829 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
824 problem of excessive CPU usage under *nix and keyboard lag under
830 problem of excessive CPU usage under *nix and keyboard lag under
825 win32.
831 win32.
826
832
827 2006-01-10 *** Released version 0.7.0
833 2006-01-10 *** Released version 0.7.0
828
834
829 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
835 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
830
836
831 * IPython/Release.py (revision): tag version number to 0.7.0,
837 * IPython/Release.py (revision): tag version number to 0.7.0,
832 ready for release.
838 ready for release.
833
839
834 * IPython/Magic.py (magic_edit): Add print statement to %edit so
840 * IPython/Magic.py (magic_edit): Add print statement to %edit so
835 it informs the user of the name of the temp. file used. This can
841 it informs the user of the name of the temp. file used. This can
836 help if you decide later to reuse that same file, so you know
842 help if you decide later to reuse that same file, so you know
837 where to copy the info from.
843 where to copy the info from.
838
844
839 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
845 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
840
846
841 * setup_bdist_egg.py: little script to build an egg. Added
847 * setup_bdist_egg.py: little script to build an egg. Added
842 support in the release tools as well.
848 support in the release tools as well.
843
849
844 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
850 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
845
851
846 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
852 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
847 version selection (new -wxversion command line and ipythonrc
853 version selection (new -wxversion command line and ipythonrc
848 parameter). Patch contributed by Arnd Baecker
854 parameter). Patch contributed by Arnd Baecker
849 <arnd.baecker-AT-web.de>.
855 <arnd.baecker-AT-web.de>.
850
856
851 * IPython/iplib.py (embed_mainloop): fix tab-completion in
857 * IPython/iplib.py (embed_mainloop): fix tab-completion in
852 embedded instances, for variables defined at the interactive
858 embedded instances, for variables defined at the interactive
853 prompt of the embedded ipython. Reported by Arnd.
859 prompt of the embedded ipython. Reported by Arnd.
854
860
855 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
861 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
856 it can be used as a (stateful) toggle, or with a direct parameter.
862 it can be used as a (stateful) toggle, or with a direct parameter.
857
863
858 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
864 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
859 could be triggered in certain cases and cause the traceback
865 could be triggered in certain cases and cause the traceback
860 printer not to work.
866 printer not to work.
861
867
862 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
868 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
863
869
864 * IPython/iplib.py (_should_recompile): Small fix, closes
870 * IPython/iplib.py (_should_recompile): Small fix, closes
865 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
871 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
866
872
867 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
873 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
868
874
869 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
875 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
870 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
876 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
871 Moad for help with tracking it down.
877 Moad for help with tracking it down.
872
878
873 * IPython/iplib.py (handle_auto): fix autocall handling for
879 * IPython/iplib.py (handle_auto): fix autocall handling for
874 objects which support BOTH __getitem__ and __call__ (so that f [x]
880 objects which support BOTH __getitem__ and __call__ (so that f [x]
875 is left alone, instead of becoming f([x]) automatically).
881 is left alone, instead of becoming f([x]) automatically).
876
882
877 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
883 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
878 Ville's patch.
884 Ville's patch.
879
885
880 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
886 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
881
887
882 * IPython/iplib.py (handle_auto): changed autocall semantics to
888 * IPython/iplib.py (handle_auto): changed autocall semantics to
883 include 'smart' mode, where the autocall transformation is NOT
889 include 'smart' mode, where the autocall transformation is NOT
884 applied if there are no arguments on the line. This allows you to
890 applied if there are no arguments on the line. This allows you to
885 just type 'foo' if foo is a callable to see its internal form,
891 just type 'foo' if foo is a callable to see its internal form,
886 instead of having it called with no arguments (typically a
892 instead of having it called with no arguments (typically a
887 mistake). The old 'full' autocall still exists: for that, you
893 mistake). The old 'full' autocall still exists: for that, you
888 need to set the 'autocall' parameter to 2 in your ipythonrc file.
894 need to set the 'autocall' parameter to 2 in your ipythonrc file.
889
895
890 * IPython/completer.py (Completer.attr_matches): add
896 * IPython/completer.py (Completer.attr_matches): add
891 tab-completion support for Enthoughts' traits. After a report by
897 tab-completion support for Enthoughts' traits. After a report by
892 Arnd and a patch by Prabhu.
898 Arnd and a patch by Prabhu.
893
899
894 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
900 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
895
901
896 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
902 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
897 Schmolck's patch to fix inspect.getinnerframes().
903 Schmolck's patch to fix inspect.getinnerframes().
898
904
899 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
905 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
900 for embedded instances, regarding handling of namespaces and items
906 for embedded instances, regarding handling of namespaces and items
901 added to the __builtin__ one. Multiple embedded instances and
907 added to the __builtin__ one. Multiple embedded instances and
902 recursive embeddings should work better now (though I'm not sure
908 recursive embeddings should work better now (though I'm not sure
903 I've got all the corner cases fixed, that code is a bit of a brain
909 I've got all the corner cases fixed, that code is a bit of a brain
904 twister).
910 twister).
905
911
906 * IPython/Magic.py (magic_edit): added support to edit in-memory
912 * IPython/Magic.py (magic_edit): added support to edit in-memory
907 macros (automatically creates the necessary temp files). %edit
913 macros (automatically creates the necessary temp files). %edit
908 also doesn't return the file contents anymore, it's just noise.
914 also doesn't return the file contents anymore, it's just noise.
909
915
910 * IPython/completer.py (Completer.attr_matches): revert change to
916 * IPython/completer.py (Completer.attr_matches): revert change to
911 complete only on attributes listed in __all__. I realized it
917 complete only on attributes listed in __all__. I realized it
912 cripples the tab-completion system as a tool for exploring the
918 cripples the tab-completion system as a tool for exploring the
913 internals of unknown libraries (it renders any non-__all__
919 internals of unknown libraries (it renders any non-__all__
914 attribute off-limits). I got bit by this when trying to see
920 attribute off-limits). I got bit by this when trying to see
915 something inside the dis module.
921 something inside the dis module.
916
922
917 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
923 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
918
924
919 * IPython/iplib.py (InteractiveShell.__init__): add .meta
925 * IPython/iplib.py (InteractiveShell.__init__): add .meta
920 namespace for users and extension writers to hold data in. This
926 namespace for users and extension writers to hold data in. This
921 follows the discussion in
927 follows the discussion in
922 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
928 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
923
929
924 * IPython/completer.py (IPCompleter.complete): small patch to help
930 * IPython/completer.py (IPCompleter.complete): small patch to help
925 tab-completion under Emacs, after a suggestion by John Barnard
931 tab-completion under Emacs, after a suggestion by John Barnard
926 <barnarj-AT-ccf.org>.
932 <barnarj-AT-ccf.org>.
927
933
928 * IPython/Magic.py (Magic.extract_input_slices): added support for
934 * IPython/Magic.py (Magic.extract_input_slices): added support for
929 the slice notation in magics to use N-M to represent numbers N...M
935 the slice notation in magics to use N-M to represent numbers N...M
930 (closed endpoints). This is used by %macro and %save.
936 (closed endpoints). This is used by %macro and %save.
931
937
932 * IPython/completer.py (Completer.attr_matches): for modules which
938 * IPython/completer.py (Completer.attr_matches): for modules which
933 define __all__, complete only on those. After a patch by Jeffrey
939 define __all__, complete only on those. After a patch by Jeffrey
934 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
940 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
935 speed up this routine.
941 speed up this routine.
936
942
937 * IPython/Logger.py (Logger.log): fix a history handling bug. I
943 * IPython/Logger.py (Logger.log): fix a history handling bug. I
938 don't know if this is the end of it, but the behavior now is
944 don't know if this is the end of it, but the behavior now is
939 certainly much more correct. Note that coupled with macros,
945 certainly much more correct. Note that coupled with macros,
940 slightly surprising (at first) behavior may occur: a macro will in
946 slightly surprising (at first) behavior may occur: a macro will in
941 general expand to multiple lines of input, so upon exiting, the
947 general expand to multiple lines of input, so upon exiting, the
942 in/out counters will both be bumped by the corresponding amount
948 in/out counters will both be bumped by the corresponding amount
943 (as if the macro's contents had been typed interactively). Typing
949 (as if the macro's contents had been typed interactively). Typing
944 %hist will reveal the intermediate (silently processed) lines.
950 %hist will reveal the intermediate (silently processed) lines.
945
951
946 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
952 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
947 pickle to fail (%run was overwriting __main__ and not restoring
953 pickle to fail (%run was overwriting __main__ and not restoring
948 it, but pickle relies on __main__ to operate).
954 it, but pickle relies on __main__ to operate).
949
955
950 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
956 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
951 using properties, but forgot to make the main InteractiveShell
957 using properties, but forgot to make the main InteractiveShell
952 class a new-style class. Properties fail silently, and
958 class a new-style class. Properties fail silently, and
953 mysteriously, with old-style class (getters work, but
959 mysteriously, with old-style class (getters work, but
954 setters don't do anything).
960 setters don't do anything).
955
961
956 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
962 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
957
963
958 * IPython/Magic.py (magic_history): fix history reporting bug (I
964 * IPython/Magic.py (magic_history): fix history reporting bug (I
959 know some nasties are still there, I just can't seem to find a
965 know some nasties are still there, I just can't seem to find a
960 reproducible test case to track them down; the input history is
966 reproducible test case to track them down; the input history is
961 falling out of sync...)
967 falling out of sync...)
962
968
963 * IPython/iplib.py (handle_shell_escape): fix bug where both
969 * IPython/iplib.py (handle_shell_escape): fix bug where both
964 aliases and system accesses where broken for indented code (such
970 aliases and system accesses where broken for indented code (such
965 as loops).
971 as loops).
966
972
967 * IPython/genutils.py (shell): fix small but critical bug for
973 * IPython/genutils.py (shell): fix small but critical bug for
968 win32 system access.
974 win32 system access.
969
975
970 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
976 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
971
977
972 * IPython/iplib.py (showtraceback): remove use of the
978 * IPython/iplib.py (showtraceback): remove use of the
973 sys.last_{type/value/traceback} structures, which are non
979 sys.last_{type/value/traceback} structures, which are non
974 thread-safe.
980 thread-safe.
975 (_prefilter): change control flow to ensure that we NEVER
981 (_prefilter): change control flow to ensure that we NEVER
976 introspect objects when autocall is off. This will guarantee that
982 introspect objects when autocall is off. This will guarantee that
977 having an input line of the form 'x.y', where access to attribute
983 having an input line of the form 'x.y', where access to attribute
978 'y' has side effects, doesn't trigger the side effect TWICE. It
984 'y' has side effects, doesn't trigger the side effect TWICE. It
979 is important to note that, with autocall on, these side effects
985 is important to note that, with autocall on, these side effects
980 can still happen.
986 can still happen.
981 (ipsystem): new builtin, to complete the ip{magic/alias/system}
987 (ipsystem): new builtin, to complete the ip{magic/alias/system}
982 trio. IPython offers these three kinds of special calls which are
988 trio. IPython offers these three kinds of special calls which are
983 not python code, and it's a good thing to have their call method
989 not python code, and it's a good thing to have their call method
984 be accessible as pure python functions (not just special syntax at
990 be accessible as pure python functions (not just special syntax at
985 the command line). It gives us a better internal implementation
991 the command line). It gives us a better internal implementation
986 structure, as well as exposing these for user scripting more
992 structure, as well as exposing these for user scripting more
987 cleanly.
993 cleanly.
988
994
989 * IPython/macro.py (Macro.__init__): moved macros to a standalone
995 * IPython/macro.py (Macro.__init__): moved macros to a standalone
990 file. Now that they'll be more likely to be used with the
996 file. Now that they'll be more likely to be used with the
991 persistance system (%store), I want to make sure their module path
997 persistance system (%store), I want to make sure their module path
992 doesn't change in the future, so that we don't break things for
998 doesn't change in the future, so that we don't break things for
993 users' persisted data.
999 users' persisted data.
994
1000
995 * IPython/iplib.py (autoindent_update): move indentation
1001 * IPython/iplib.py (autoindent_update): move indentation
996 management into the _text_ processing loop, not the keyboard
1002 management into the _text_ processing loop, not the keyboard
997 interactive one. This is necessary to correctly process non-typed
1003 interactive one. This is necessary to correctly process non-typed
998 multiline input (such as macros).
1004 multiline input (such as macros).
999
1005
1000 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
1006 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
1001 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
1007 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
1002 which was producing problems in the resulting manual.
1008 which was producing problems in the resulting manual.
1003 (magic_whos): improve reporting of instances (show their class,
1009 (magic_whos): improve reporting of instances (show their class,
1004 instead of simply printing 'instance' which isn't terribly
1010 instead of simply printing 'instance' which isn't terribly
1005 informative).
1011 informative).
1006
1012
1007 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
1013 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
1008 (minor mods) to support network shares under win32.
1014 (minor mods) to support network shares under win32.
1009
1015
1010 * IPython/winconsole.py (get_console_size): add new winconsole
1016 * IPython/winconsole.py (get_console_size): add new winconsole
1011 module and fixes to page_dumb() to improve its behavior under
1017 module and fixes to page_dumb() to improve its behavior under
1012 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1018 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1013
1019
1014 * IPython/Magic.py (Macro): simplified Macro class to just
1020 * IPython/Magic.py (Macro): simplified Macro class to just
1015 subclass list. We've had only 2.2 compatibility for a very long
1021 subclass list. We've had only 2.2 compatibility for a very long
1016 time, yet I was still avoiding subclassing the builtin types. No
1022 time, yet I was still avoiding subclassing the builtin types. No
1017 more (I'm also starting to use properties, though I won't shift to
1023 more (I'm also starting to use properties, though I won't shift to
1018 2.3-specific features quite yet).
1024 2.3-specific features quite yet).
1019 (magic_store): added Ville's patch for lightweight variable
1025 (magic_store): added Ville's patch for lightweight variable
1020 persistence, after a request on the user list by Matt Wilkie
1026 persistence, after a request on the user list by Matt Wilkie
1021 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1027 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1022 details.
1028 details.
1023
1029
1024 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1030 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1025 changed the default logfile name from 'ipython.log' to
1031 changed the default logfile name from 'ipython.log' to
1026 'ipython_log.py'. These logs are real python files, and now that
1032 'ipython_log.py'. These logs are real python files, and now that
1027 we have much better multiline support, people are more likely to
1033 we have much better multiline support, people are more likely to
1028 want to use them as such. Might as well name them correctly.
1034 want to use them as such. Might as well name them correctly.
1029
1035
1030 * IPython/Magic.py: substantial cleanup. While we can't stop
1036 * IPython/Magic.py: substantial cleanup. While we can't stop
1031 using magics as mixins, due to the existing customizations 'out
1037 using magics as mixins, due to the existing customizations 'out
1032 there' which rely on the mixin naming conventions, at least I
1038 there' which rely on the mixin naming conventions, at least I
1033 cleaned out all cross-class name usage. So once we are OK with
1039 cleaned out all cross-class name usage. So once we are OK with
1034 breaking compatibility, the two systems can be separated.
1040 breaking compatibility, the two systems can be separated.
1035
1041
1036 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1042 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1037 anymore, and the class is a fair bit less hideous as well. New
1043 anymore, and the class is a fair bit less hideous as well. New
1038 features were also introduced: timestamping of input, and logging
1044 features were also introduced: timestamping of input, and logging
1039 of output results. These are user-visible with the -t and -o
1045 of output results. These are user-visible with the -t and -o
1040 options to %logstart. Closes
1046 options to %logstart. Closes
1041 http://www.scipy.net/roundup/ipython/issue11 and a request by
1047 http://www.scipy.net/roundup/ipython/issue11 and a request by
1042 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1048 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1043
1049
1044 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1050 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1045
1051
1046 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1052 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1047 better handle backslashes in paths. See the thread 'More Windows
1053 better handle backslashes in paths. See the thread 'More Windows
1048 questions part 2 - \/ characters revisited' on the iypthon user
1054 questions part 2 - \/ characters revisited' on the iypthon user
1049 list:
1055 list:
1050 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1056 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1051
1057
1052 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1058 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1053
1059
1054 (InteractiveShell.__init__): change threaded shells to not use the
1060 (InteractiveShell.__init__): change threaded shells to not use the
1055 ipython crash handler. This was causing more problems than not,
1061 ipython crash handler. This was causing more problems than not,
1056 as exceptions in the main thread (GUI code, typically) would
1062 as exceptions in the main thread (GUI code, typically) would
1057 always show up as a 'crash', when they really weren't.
1063 always show up as a 'crash', when they really weren't.
1058
1064
1059 The colors and exception mode commands (%colors/%xmode) have been
1065 The colors and exception mode commands (%colors/%xmode) have been
1060 synchronized to also take this into account, so users can get
1066 synchronized to also take this into account, so users can get
1061 verbose exceptions for their threaded code as well. I also added
1067 verbose exceptions for their threaded code as well. I also added
1062 support for activating pdb inside this exception handler as well,
1068 support for activating pdb inside this exception handler as well,
1063 so now GUI authors can use IPython's enhanced pdb at runtime.
1069 so now GUI authors can use IPython's enhanced pdb at runtime.
1064
1070
1065 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1071 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1066 true by default, and add it to the shipped ipythonrc file. Since
1072 true by default, and add it to the shipped ipythonrc file. Since
1067 this asks the user before proceeding, I think it's OK to make it
1073 this asks the user before proceeding, I think it's OK to make it
1068 true by default.
1074 true by default.
1069
1075
1070 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1076 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1071 of the previous special-casing of input in the eval loop. I think
1077 of the previous special-casing of input in the eval loop. I think
1072 this is cleaner, as they really are commands and shouldn't have
1078 this is cleaner, as they really are commands and shouldn't have
1073 a special role in the middle of the core code.
1079 a special role in the middle of the core code.
1074
1080
1075 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1081 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1076
1082
1077 * IPython/iplib.py (edit_syntax_error): added support for
1083 * IPython/iplib.py (edit_syntax_error): added support for
1078 automatically reopening the editor if the file had a syntax error
1084 automatically reopening the editor if the file had a syntax error
1079 in it. Thanks to scottt who provided the patch at:
1085 in it. Thanks to scottt who provided the patch at:
1080 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1086 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1081 version committed).
1087 version committed).
1082
1088
1083 * IPython/iplib.py (handle_normal): add suport for multi-line
1089 * IPython/iplib.py (handle_normal): add suport for multi-line
1084 input with emtpy lines. This fixes
1090 input with emtpy lines. This fixes
1085 http://www.scipy.net/roundup/ipython/issue43 and a similar
1091 http://www.scipy.net/roundup/ipython/issue43 and a similar
1086 discussion on the user list.
1092 discussion on the user list.
1087
1093
1088 WARNING: a behavior change is necessarily introduced to support
1094 WARNING: a behavior change is necessarily introduced to support
1089 blank lines: now a single blank line with whitespace does NOT
1095 blank lines: now a single blank line with whitespace does NOT
1090 break the input loop, which means that when autoindent is on, by
1096 break the input loop, which means that when autoindent is on, by
1091 default hitting return on the next (indented) line does NOT exit.
1097 default hitting return on the next (indented) line does NOT exit.
1092
1098
1093 Instead, to exit a multiline input you can either have:
1099 Instead, to exit a multiline input you can either have:
1094
1100
1095 - TWO whitespace lines (just hit return again), or
1101 - TWO whitespace lines (just hit return again), or
1096 - a single whitespace line of a different length than provided
1102 - a single whitespace line of a different length than provided
1097 by the autoindent (add or remove a space).
1103 by the autoindent (add or remove a space).
1098
1104
1099 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1105 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1100 module to better organize all readline-related functionality.
1106 module to better organize all readline-related functionality.
1101 I've deleted FlexCompleter and put all completion clases here.
1107 I've deleted FlexCompleter and put all completion clases here.
1102
1108
1103 * IPython/iplib.py (raw_input): improve indentation management.
1109 * IPython/iplib.py (raw_input): improve indentation management.
1104 It is now possible to paste indented code with autoindent on, and
1110 It is now possible to paste indented code with autoindent on, and
1105 the code is interpreted correctly (though it still looks bad on
1111 the code is interpreted correctly (though it still looks bad on
1106 screen, due to the line-oriented nature of ipython).
1112 screen, due to the line-oriented nature of ipython).
1107 (MagicCompleter.complete): change behavior so that a TAB key on an
1113 (MagicCompleter.complete): change behavior so that a TAB key on an
1108 otherwise empty line actually inserts a tab, instead of completing
1114 otherwise empty line actually inserts a tab, instead of completing
1109 on the entire global namespace. This makes it easier to use the
1115 on the entire global namespace. This makes it easier to use the
1110 TAB key for indentation. After a request by Hans Meine
1116 TAB key for indentation. After a request by Hans Meine
1111 <hans_meine-AT-gmx.net>
1117 <hans_meine-AT-gmx.net>
1112 (_prefilter): add support so that typing plain 'exit' or 'quit'
1118 (_prefilter): add support so that typing plain 'exit' or 'quit'
1113 does a sensible thing. Originally I tried to deviate as little as
1119 does a sensible thing. Originally I tried to deviate as little as
1114 possible from the default python behavior, but even that one may
1120 possible from the default python behavior, but even that one may
1115 change in this direction (thread on python-dev to that effect).
1121 change in this direction (thread on python-dev to that effect).
1116 Regardless, ipython should do the right thing even if CPython's
1122 Regardless, ipython should do the right thing even if CPython's
1117 '>>>' prompt doesn't.
1123 '>>>' prompt doesn't.
1118 (InteractiveShell): removed subclassing code.InteractiveConsole
1124 (InteractiveShell): removed subclassing code.InteractiveConsole
1119 class. By now we'd overridden just about all of its methods: I've
1125 class. By now we'd overridden just about all of its methods: I've
1120 copied the remaining two over, and now ipython is a standalone
1126 copied the remaining two over, and now ipython is a standalone
1121 class. This will provide a clearer picture for the chainsaw
1127 class. This will provide a clearer picture for the chainsaw
1122 branch refactoring.
1128 branch refactoring.
1123
1129
1124 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1130 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1125
1131
1126 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1132 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1127 failures for objects which break when dir() is called on them.
1133 failures for objects which break when dir() is called on them.
1128
1134
1129 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1135 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1130 distinct local and global namespaces in the completer API. This
1136 distinct local and global namespaces in the completer API. This
1131 change allows us to properly handle completion with distinct
1137 change allows us to properly handle completion with distinct
1132 scopes, including in embedded instances (this had never really
1138 scopes, including in embedded instances (this had never really
1133 worked correctly).
1139 worked correctly).
1134
1140
1135 Note: this introduces a change in the constructor for
1141 Note: this introduces a change in the constructor for
1136 MagicCompleter, as a new global_namespace parameter is now the
1142 MagicCompleter, as a new global_namespace parameter is now the
1137 second argument (the others were bumped one position).
1143 second argument (the others were bumped one position).
1138
1144
1139 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1145 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1140
1146
1141 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1147 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1142 embedded instances (which can be done now thanks to Vivian's
1148 embedded instances (which can be done now thanks to Vivian's
1143 frame-handling fixes for pdb).
1149 frame-handling fixes for pdb).
1144 (InteractiveShell.__init__): Fix namespace handling problem in
1150 (InteractiveShell.__init__): Fix namespace handling problem in
1145 embedded instances. We were overwriting __main__ unconditionally,
1151 embedded instances. We were overwriting __main__ unconditionally,
1146 and this should only be done for 'full' (non-embedded) IPython;
1152 and this should only be done for 'full' (non-embedded) IPython;
1147 embedded instances must respect the caller's __main__. Thanks to
1153 embedded instances must respect the caller's __main__. Thanks to
1148 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1154 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1149
1155
1150 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1156 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1151
1157
1152 * setup.py: added download_url to setup(). This registers the
1158 * setup.py: added download_url to setup(). This registers the
1153 download address at PyPI, which is not only useful to humans
1159 download address at PyPI, which is not only useful to humans
1154 browsing the site, but is also picked up by setuptools (the Eggs
1160 browsing the site, but is also picked up by setuptools (the Eggs
1155 machinery). Thanks to Ville and R. Kern for the info/discussion
1161 machinery). Thanks to Ville and R. Kern for the info/discussion
1156 on this.
1162 on this.
1157
1163
1158 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1164 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1159
1165
1160 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1166 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1161 This brings a lot of nice functionality to the pdb mode, which now
1167 This brings a lot of nice functionality to the pdb mode, which now
1162 has tab-completion, syntax highlighting, and better stack handling
1168 has tab-completion, syntax highlighting, and better stack handling
1163 than before. Many thanks to Vivian De Smedt
1169 than before. Many thanks to Vivian De Smedt
1164 <vivian-AT-vdesmedt.com> for the original patches.
1170 <vivian-AT-vdesmedt.com> for the original patches.
1165
1171
1166 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1172 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1167
1173
1168 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1174 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1169 sequence to consistently accept the banner argument. The
1175 sequence to consistently accept the banner argument. The
1170 inconsistency was tripping SAGE, thanks to Gary Zablackis
1176 inconsistency was tripping SAGE, thanks to Gary Zablackis
1171 <gzabl-AT-yahoo.com> for the report.
1177 <gzabl-AT-yahoo.com> for the report.
1172
1178
1173 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1179 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1174
1180
1175 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1181 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1176 Fix bug where a naked 'alias' call in the ipythonrc file would
1182 Fix bug where a naked 'alias' call in the ipythonrc file would
1177 cause a crash. Bug reported by Jorgen Stenarson.
1183 cause a crash. Bug reported by Jorgen Stenarson.
1178
1184
1179 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1185 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1180
1186
1181 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1187 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1182 startup time.
1188 startup time.
1183
1189
1184 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1190 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1185 instances had introduced a bug with globals in normal code. Now
1191 instances had introduced a bug with globals in normal code. Now
1186 it's working in all cases.
1192 it's working in all cases.
1187
1193
1188 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1194 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1189 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1195 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1190 has been introduced to set the default case sensitivity of the
1196 has been introduced to set the default case sensitivity of the
1191 searches. Users can still select either mode at runtime on a
1197 searches. Users can still select either mode at runtime on a
1192 per-search basis.
1198 per-search basis.
1193
1199
1194 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1200 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1195
1201
1196 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1202 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1197 attributes in wildcard searches for subclasses. Modified version
1203 attributes in wildcard searches for subclasses. Modified version
1198 of a patch by Jorgen.
1204 of a patch by Jorgen.
1199
1205
1200 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1206 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1201
1207
1202 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1208 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1203 embedded instances. I added a user_global_ns attribute to the
1209 embedded instances. I added a user_global_ns attribute to the
1204 InteractiveShell class to handle this.
1210 InteractiveShell class to handle this.
1205
1211
1206 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1212 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1207
1213
1208 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1214 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1209 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1215 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1210 (reported under win32, but may happen also in other platforms).
1216 (reported under win32, but may happen also in other platforms).
1211 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1217 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1212
1218
1213 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1219 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1214
1220
1215 * IPython/Magic.py (magic_psearch): new support for wildcard
1221 * IPython/Magic.py (magic_psearch): new support for wildcard
1216 patterns. Now, typing ?a*b will list all names which begin with a
1222 patterns. Now, typing ?a*b will list all names which begin with a
1217 and end in b, for example. The %psearch magic has full
1223 and end in b, for example. The %psearch magic has full
1218 docstrings. Many thanks to JΓΆrgen Stenarson
1224 docstrings. Many thanks to JΓΆrgen Stenarson
1219 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1225 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1220 implementing this functionality.
1226 implementing this functionality.
1221
1227
1222 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1228 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1223
1229
1224 * Manual: fixed long-standing annoyance of double-dashes (as in
1230 * Manual: fixed long-standing annoyance of double-dashes (as in
1225 --prefix=~, for example) being stripped in the HTML version. This
1231 --prefix=~, for example) being stripped in the HTML version. This
1226 is a latex2html bug, but a workaround was provided. Many thanks
1232 is a latex2html bug, but a workaround was provided. Many thanks
1227 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1233 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1228 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1234 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1229 rolling. This seemingly small issue had tripped a number of users
1235 rolling. This seemingly small issue had tripped a number of users
1230 when first installing, so I'm glad to see it gone.
1236 when first installing, so I'm glad to see it gone.
1231
1237
1232 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1238 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1233
1239
1234 * IPython/Extensions/numeric_formats.py: fix missing import,
1240 * IPython/Extensions/numeric_formats.py: fix missing import,
1235 reported by Stephen Walton.
1241 reported by Stephen Walton.
1236
1242
1237 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1243 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1238
1244
1239 * IPython/demo.py: finish demo module, fully documented now.
1245 * IPython/demo.py: finish demo module, fully documented now.
1240
1246
1241 * IPython/genutils.py (file_read): simple little utility to read a
1247 * IPython/genutils.py (file_read): simple little utility to read a
1242 file and ensure it's closed afterwards.
1248 file and ensure it's closed afterwards.
1243
1249
1244 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1250 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1245
1251
1246 * IPython/demo.py (Demo.__init__): added support for individually
1252 * IPython/demo.py (Demo.__init__): added support for individually
1247 tagging blocks for automatic execution.
1253 tagging blocks for automatic execution.
1248
1254
1249 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1255 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1250 syntax-highlighted python sources, requested by John.
1256 syntax-highlighted python sources, requested by John.
1251
1257
1252 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1258 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1253
1259
1254 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1260 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1255 finishing.
1261 finishing.
1256
1262
1257 * IPython/genutils.py (shlex_split): moved from Magic to here,
1263 * IPython/genutils.py (shlex_split): moved from Magic to here,
1258 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1264 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1259
1265
1260 * IPython/demo.py (Demo.__init__): added support for silent
1266 * IPython/demo.py (Demo.__init__): added support for silent
1261 blocks, improved marks as regexps, docstrings written.
1267 blocks, improved marks as regexps, docstrings written.
1262 (Demo.__init__): better docstring, added support for sys.argv.
1268 (Demo.__init__): better docstring, added support for sys.argv.
1263
1269
1264 * IPython/genutils.py (marquee): little utility used by the demo
1270 * IPython/genutils.py (marquee): little utility used by the demo
1265 code, handy in general.
1271 code, handy in general.
1266
1272
1267 * IPython/demo.py (Demo.__init__): new class for interactive
1273 * IPython/demo.py (Demo.__init__): new class for interactive
1268 demos. Not documented yet, I just wrote it in a hurry for
1274 demos. Not documented yet, I just wrote it in a hurry for
1269 scipy'05. Will docstring later.
1275 scipy'05. Will docstring later.
1270
1276
1271 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1277 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1272
1278
1273 * IPython/Shell.py (sigint_handler): Drastic simplification which
1279 * IPython/Shell.py (sigint_handler): Drastic simplification which
1274 also seems to make Ctrl-C work correctly across threads! This is
1280 also seems to make Ctrl-C work correctly across threads! This is
1275 so simple, that I can't beleive I'd missed it before. Needs more
1281 so simple, that I can't beleive I'd missed it before. Needs more
1276 testing, though.
1282 testing, though.
1277 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1283 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1278 like this before...
1284 like this before...
1279
1285
1280 * IPython/genutils.py (get_home_dir): add protection against
1286 * IPython/genutils.py (get_home_dir): add protection against
1281 non-dirs in win32 registry.
1287 non-dirs in win32 registry.
1282
1288
1283 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1289 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1284 bug where dict was mutated while iterating (pysh crash).
1290 bug where dict was mutated while iterating (pysh crash).
1285
1291
1286 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1292 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1287
1293
1288 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1294 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1289 spurious newlines added by this routine. After a report by
1295 spurious newlines added by this routine. After a report by
1290 F. Mantegazza.
1296 F. Mantegazza.
1291
1297
1292 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1298 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1293
1299
1294 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1300 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1295 calls. These were a leftover from the GTK 1.x days, and can cause
1301 calls. These were a leftover from the GTK 1.x days, and can cause
1296 problems in certain cases (after a report by John Hunter).
1302 problems in certain cases (after a report by John Hunter).
1297
1303
1298 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1304 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1299 os.getcwd() fails at init time. Thanks to patch from David Remahl
1305 os.getcwd() fails at init time. Thanks to patch from David Remahl
1300 <chmod007-AT-mac.com>.
1306 <chmod007-AT-mac.com>.
1301 (InteractiveShell.__init__): prevent certain special magics from
1307 (InteractiveShell.__init__): prevent certain special magics from
1302 being shadowed by aliases. Closes
1308 being shadowed by aliases. Closes
1303 http://www.scipy.net/roundup/ipython/issue41.
1309 http://www.scipy.net/roundup/ipython/issue41.
1304
1310
1305 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1311 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1306
1312
1307 * IPython/iplib.py (InteractiveShell.complete): Added new
1313 * IPython/iplib.py (InteractiveShell.complete): Added new
1308 top-level completion method to expose the completion mechanism
1314 top-level completion method to expose the completion mechanism
1309 beyond readline-based environments.
1315 beyond readline-based environments.
1310
1316
1311 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1317 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1312
1318
1313 * tools/ipsvnc (svnversion): fix svnversion capture.
1319 * tools/ipsvnc (svnversion): fix svnversion capture.
1314
1320
1315 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1321 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1316 attribute to self, which was missing. Before, it was set by a
1322 attribute to self, which was missing. Before, it was set by a
1317 routine which in certain cases wasn't being called, so the
1323 routine which in certain cases wasn't being called, so the
1318 instance could end up missing the attribute. This caused a crash.
1324 instance could end up missing the attribute. This caused a crash.
1319 Closes http://www.scipy.net/roundup/ipython/issue40.
1325 Closes http://www.scipy.net/roundup/ipython/issue40.
1320
1326
1321 2005-08-16 Fernando Perez <fperez@colorado.edu>
1327 2005-08-16 Fernando Perez <fperez@colorado.edu>
1322
1328
1323 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1329 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1324 contains non-string attribute. Closes
1330 contains non-string attribute. Closes
1325 http://www.scipy.net/roundup/ipython/issue38.
1331 http://www.scipy.net/roundup/ipython/issue38.
1326
1332
1327 2005-08-14 Fernando Perez <fperez@colorado.edu>
1333 2005-08-14 Fernando Perez <fperez@colorado.edu>
1328
1334
1329 * tools/ipsvnc: Minor improvements, to add changeset info.
1335 * tools/ipsvnc: Minor improvements, to add changeset info.
1330
1336
1331 2005-08-12 Fernando Perez <fperez@colorado.edu>
1337 2005-08-12 Fernando Perez <fperez@colorado.edu>
1332
1338
1333 * IPython/iplib.py (runsource): remove self.code_to_run_src
1339 * IPython/iplib.py (runsource): remove self.code_to_run_src
1334 attribute. I realized this is nothing more than
1340 attribute. I realized this is nothing more than
1335 '\n'.join(self.buffer), and having the same data in two different
1341 '\n'.join(self.buffer), and having the same data in two different
1336 places is just asking for synchronization bugs. This may impact
1342 places is just asking for synchronization bugs. This may impact
1337 people who have custom exception handlers, so I need to warn
1343 people who have custom exception handlers, so I need to warn
1338 ipython-dev about it (F. Mantegazza may use them).
1344 ipython-dev about it (F. Mantegazza may use them).
1339
1345
1340 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1346 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1341
1347
1342 * IPython/genutils.py: fix 2.2 compatibility (generators)
1348 * IPython/genutils.py: fix 2.2 compatibility (generators)
1343
1349
1344 2005-07-18 Fernando Perez <fperez@colorado.edu>
1350 2005-07-18 Fernando Perez <fperez@colorado.edu>
1345
1351
1346 * IPython/genutils.py (get_home_dir): fix to help users with
1352 * IPython/genutils.py (get_home_dir): fix to help users with
1347 invalid $HOME under win32.
1353 invalid $HOME under win32.
1348
1354
1349 2005-07-17 Fernando Perez <fperez@colorado.edu>
1355 2005-07-17 Fernando Perez <fperez@colorado.edu>
1350
1356
1351 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1357 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1352 some old hacks and clean up a bit other routines; code should be
1358 some old hacks and clean up a bit other routines; code should be
1353 simpler and a bit faster.
1359 simpler and a bit faster.
1354
1360
1355 * IPython/iplib.py (interact): removed some last-resort attempts
1361 * IPython/iplib.py (interact): removed some last-resort attempts
1356 to survive broken stdout/stderr. That code was only making it
1362 to survive broken stdout/stderr. That code was only making it
1357 harder to abstract out the i/o (necessary for gui integration),
1363 harder to abstract out the i/o (necessary for gui integration),
1358 and the crashes it could prevent were extremely rare in practice
1364 and the crashes it could prevent were extremely rare in practice
1359 (besides being fully user-induced in a pretty violent manner).
1365 (besides being fully user-induced in a pretty violent manner).
1360
1366
1361 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1367 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1362 Nothing major yet, but the code is simpler to read; this should
1368 Nothing major yet, but the code is simpler to read; this should
1363 make it easier to do more serious modifications in the future.
1369 make it easier to do more serious modifications in the future.
1364
1370
1365 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1371 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1366 which broke in .15 (thanks to a report by Ville).
1372 which broke in .15 (thanks to a report by Ville).
1367
1373
1368 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1374 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1369 be quite correct, I know next to nothing about unicode). This
1375 be quite correct, I know next to nothing about unicode). This
1370 will allow unicode strings to be used in prompts, amongst other
1376 will allow unicode strings to be used in prompts, amongst other
1371 cases. It also will prevent ipython from crashing when unicode
1377 cases. It also will prevent ipython from crashing when unicode
1372 shows up unexpectedly in many places. If ascii encoding fails, we
1378 shows up unexpectedly in many places. If ascii encoding fails, we
1373 assume utf_8. Currently the encoding is not a user-visible
1379 assume utf_8. Currently the encoding is not a user-visible
1374 setting, though it could be made so if there is demand for it.
1380 setting, though it could be made so if there is demand for it.
1375
1381
1376 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1382 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1377
1383
1378 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1384 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1379
1385
1380 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1386 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1381
1387
1382 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1388 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1383 code can work transparently for 2.2/2.3.
1389 code can work transparently for 2.2/2.3.
1384
1390
1385 2005-07-16 Fernando Perez <fperez@colorado.edu>
1391 2005-07-16 Fernando Perez <fperez@colorado.edu>
1386
1392
1387 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1393 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1388 out of the color scheme table used for coloring exception
1394 out of the color scheme table used for coloring exception
1389 tracebacks. This allows user code to add new schemes at runtime.
1395 tracebacks. This allows user code to add new schemes at runtime.
1390 This is a minimally modified version of the patch at
1396 This is a minimally modified version of the patch at
1391 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1397 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1392 for the contribution.
1398 for the contribution.
1393
1399
1394 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1400 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1395 slightly modified version of the patch in
1401 slightly modified version of the patch in
1396 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1402 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1397 to remove the previous try/except solution (which was costlier).
1403 to remove the previous try/except solution (which was costlier).
1398 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1404 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1399
1405
1400 2005-06-08 Fernando Perez <fperez@colorado.edu>
1406 2005-06-08 Fernando Perez <fperez@colorado.edu>
1401
1407
1402 * IPython/iplib.py (write/write_err): Add methods to abstract all
1408 * IPython/iplib.py (write/write_err): Add methods to abstract all
1403 I/O a bit more.
1409 I/O a bit more.
1404
1410
1405 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1411 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1406 warning, reported by Aric Hagberg, fix by JD Hunter.
1412 warning, reported by Aric Hagberg, fix by JD Hunter.
1407
1413
1408 2005-06-02 *** Released version 0.6.15
1414 2005-06-02 *** Released version 0.6.15
1409
1415
1410 2005-06-01 Fernando Perez <fperez@colorado.edu>
1416 2005-06-01 Fernando Perez <fperez@colorado.edu>
1411
1417
1412 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1418 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1413 tab-completion of filenames within open-quoted strings. Note that
1419 tab-completion of filenames within open-quoted strings. Note that
1414 this requires that in ~/.ipython/ipythonrc, users change the
1420 this requires that in ~/.ipython/ipythonrc, users change the
1415 readline delimiters configuration to read:
1421 readline delimiters configuration to read:
1416
1422
1417 readline_remove_delims -/~
1423 readline_remove_delims -/~
1418
1424
1419
1425
1420 2005-05-31 *** Released version 0.6.14
1426 2005-05-31 *** Released version 0.6.14
1421
1427
1422 2005-05-29 Fernando Perez <fperez@colorado.edu>
1428 2005-05-29 Fernando Perez <fperez@colorado.edu>
1423
1429
1424 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1430 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1425 with files not on the filesystem. Reported by Eliyahu Sandler
1431 with files not on the filesystem. Reported by Eliyahu Sandler
1426 <eli@gondolin.net>
1432 <eli@gondolin.net>
1427
1433
1428 2005-05-22 Fernando Perez <fperez@colorado.edu>
1434 2005-05-22 Fernando Perez <fperez@colorado.edu>
1429
1435
1430 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1436 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1431 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1437 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1432
1438
1433 2005-05-19 Fernando Perez <fperez@colorado.edu>
1439 2005-05-19 Fernando Perez <fperez@colorado.edu>
1434
1440
1435 * IPython/iplib.py (safe_execfile): close a file which could be
1441 * IPython/iplib.py (safe_execfile): close a file which could be
1436 left open (causing problems in win32, which locks open files).
1442 left open (causing problems in win32, which locks open files).
1437 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1443 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1438
1444
1439 2005-05-18 Fernando Perez <fperez@colorado.edu>
1445 2005-05-18 Fernando Perez <fperez@colorado.edu>
1440
1446
1441 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1447 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1442 keyword arguments correctly to safe_execfile().
1448 keyword arguments correctly to safe_execfile().
1443
1449
1444 2005-05-13 Fernando Perez <fperez@colorado.edu>
1450 2005-05-13 Fernando Perez <fperez@colorado.edu>
1445
1451
1446 * ipython.1: Added info about Qt to manpage, and threads warning
1452 * ipython.1: Added info about Qt to manpage, and threads warning
1447 to usage page (invoked with --help).
1453 to usage page (invoked with --help).
1448
1454
1449 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1455 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1450 new matcher (it goes at the end of the priority list) to do
1456 new matcher (it goes at the end of the priority list) to do
1451 tab-completion on named function arguments. Submitted by George
1457 tab-completion on named function arguments. Submitted by George
1452 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1458 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1453 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1459 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1454 for more details.
1460 for more details.
1455
1461
1456 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1462 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1457 SystemExit exceptions in the script being run. Thanks to a report
1463 SystemExit exceptions in the script being run. Thanks to a report
1458 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1464 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1459 producing very annoying behavior when running unit tests.
1465 producing very annoying behavior when running unit tests.
1460
1466
1461 2005-05-12 Fernando Perez <fperez@colorado.edu>
1467 2005-05-12 Fernando Perez <fperez@colorado.edu>
1462
1468
1463 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1469 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1464 which I'd broken (again) due to a changed regexp. In the process,
1470 which I'd broken (again) due to a changed regexp. In the process,
1465 added ';' as an escape to auto-quote the whole line without
1471 added ';' as an escape to auto-quote the whole line without
1466 splitting its arguments. Thanks to a report by Jerry McRae
1472 splitting its arguments. Thanks to a report by Jerry McRae
1467 <qrs0xyc02-AT-sneakemail.com>.
1473 <qrs0xyc02-AT-sneakemail.com>.
1468
1474
1469 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1475 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1470 possible crashes caused by a TokenError. Reported by Ed Schofield
1476 possible crashes caused by a TokenError. Reported by Ed Schofield
1471 <schofield-AT-ftw.at>.
1477 <schofield-AT-ftw.at>.
1472
1478
1473 2005-05-06 Fernando Perez <fperez@colorado.edu>
1479 2005-05-06 Fernando Perez <fperez@colorado.edu>
1474
1480
1475 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1481 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1476
1482
1477 2005-04-29 Fernando Perez <fperez@colorado.edu>
1483 2005-04-29 Fernando Perez <fperez@colorado.edu>
1478
1484
1479 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1485 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1480 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1486 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1481 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1487 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1482 which provides support for Qt interactive usage (similar to the
1488 which provides support for Qt interactive usage (similar to the
1483 existing one for WX and GTK). This had been often requested.
1489 existing one for WX and GTK). This had been often requested.
1484
1490
1485 2005-04-14 *** Released version 0.6.13
1491 2005-04-14 *** Released version 0.6.13
1486
1492
1487 2005-04-08 Fernando Perez <fperez@colorado.edu>
1493 2005-04-08 Fernando Perez <fperez@colorado.edu>
1488
1494
1489 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1495 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1490 from _ofind, which gets called on almost every input line. Now,
1496 from _ofind, which gets called on almost every input line. Now,
1491 we only try to get docstrings if they are actually going to be
1497 we only try to get docstrings if they are actually going to be
1492 used (the overhead of fetching unnecessary docstrings can be
1498 used (the overhead of fetching unnecessary docstrings can be
1493 noticeable for certain objects, such as Pyro proxies).
1499 noticeable for certain objects, such as Pyro proxies).
1494
1500
1495 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1501 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1496 for completers. For some reason I had been passing them the state
1502 for completers. For some reason I had been passing them the state
1497 variable, which completers never actually need, and was in
1503 variable, which completers never actually need, and was in
1498 conflict with the rlcompleter API. Custom completers ONLY need to
1504 conflict with the rlcompleter API. Custom completers ONLY need to
1499 take the text parameter.
1505 take the text parameter.
1500
1506
1501 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1507 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1502 work correctly in pysh. I've also moved all the logic which used
1508 work correctly in pysh. I've also moved all the logic which used
1503 to be in pysh.py here, which will prevent problems with future
1509 to be in pysh.py here, which will prevent problems with future
1504 upgrades. However, this time I must warn users to update their
1510 upgrades. However, this time I must warn users to update their
1505 pysh profile to include the line
1511 pysh profile to include the line
1506
1512
1507 import_all IPython.Extensions.InterpreterExec
1513 import_all IPython.Extensions.InterpreterExec
1508
1514
1509 because otherwise things won't work for them. They MUST also
1515 because otherwise things won't work for them. They MUST also
1510 delete pysh.py and the line
1516 delete pysh.py and the line
1511
1517
1512 execfile pysh.py
1518 execfile pysh.py
1513
1519
1514 from their ipythonrc-pysh.
1520 from their ipythonrc-pysh.
1515
1521
1516 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1522 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1517 robust in the face of objects whose dir() returns non-strings
1523 robust in the face of objects whose dir() returns non-strings
1518 (which it shouldn't, but some broken libs like ITK do). Thanks to
1524 (which it shouldn't, but some broken libs like ITK do). Thanks to
1519 a patch by John Hunter (implemented differently, though). Also
1525 a patch by John Hunter (implemented differently, though). Also
1520 minor improvements by using .extend instead of + on lists.
1526 minor improvements by using .extend instead of + on lists.
1521
1527
1522 * pysh.py:
1528 * pysh.py:
1523
1529
1524 2005-04-06 Fernando Perez <fperez@colorado.edu>
1530 2005-04-06 Fernando Perez <fperez@colorado.edu>
1525
1531
1526 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1532 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1527 by default, so that all users benefit from it. Those who don't
1533 by default, so that all users benefit from it. Those who don't
1528 want it can still turn it off.
1534 want it can still turn it off.
1529
1535
1530 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1536 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1531 config file, I'd forgotten about this, so users were getting it
1537 config file, I'd forgotten about this, so users were getting it
1532 off by default.
1538 off by default.
1533
1539
1534 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1540 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1535 consistency. Now magics can be called in multiline statements,
1541 consistency. Now magics can be called in multiline statements,
1536 and python variables can be expanded in magic calls via $var.
1542 and python variables can be expanded in magic calls via $var.
1537 This makes the magic system behave just like aliases or !system
1543 This makes the magic system behave just like aliases or !system
1538 calls.
1544 calls.
1539
1545
1540 2005-03-28 Fernando Perez <fperez@colorado.edu>
1546 2005-03-28 Fernando Perez <fperez@colorado.edu>
1541
1547
1542 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1548 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1543 expensive string additions for building command. Add support for
1549 expensive string additions for building command. Add support for
1544 trailing ';' when autocall is used.
1550 trailing ';' when autocall is used.
1545
1551
1546 2005-03-26 Fernando Perez <fperez@colorado.edu>
1552 2005-03-26 Fernando Perez <fperez@colorado.edu>
1547
1553
1548 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1554 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1549 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1555 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1550 ipython.el robust against prompts with any number of spaces
1556 ipython.el robust against prompts with any number of spaces
1551 (including 0) after the ':' character.
1557 (including 0) after the ':' character.
1552
1558
1553 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1559 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1554 continuation prompt, which misled users to think the line was
1560 continuation prompt, which misled users to think the line was
1555 already indented. Closes debian Bug#300847, reported to me by
1561 already indented. Closes debian Bug#300847, reported to me by
1556 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1562 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1557
1563
1558 2005-03-23 Fernando Perez <fperez@colorado.edu>
1564 2005-03-23 Fernando Perez <fperez@colorado.edu>
1559
1565
1560 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1566 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1561 properly aligned if they have embedded newlines.
1567 properly aligned if they have embedded newlines.
1562
1568
1563 * IPython/iplib.py (runlines): Add a public method to expose
1569 * IPython/iplib.py (runlines): Add a public method to expose
1564 IPython's code execution machinery, so that users can run strings
1570 IPython's code execution machinery, so that users can run strings
1565 as if they had been typed at the prompt interactively.
1571 as if they had been typed at the prompt interactively.
1566 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1572 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1567 methods which can call the system shell, but with python variable
1573 methods which can call the system shell, but with python variable
1568 expansion. The three such methods are: __IPYTHON__.system,
1574 expansion. The three such methods are: __IPYTHON__.system,
1569 .getoutput and .getoutputerror. These need to be documented in a
1575 .getoutput and .getoutputerror. These need to be documented in a
1570 'public API' section (to be written) of the manual.
1576 'public API' section (to be written) of the manual.
1571
1577
1572 2005-03-20 Fernando Perez <fperez@colorado.edu>
1578 2005-03-20 Fernando Perez <fperez@colorado.edu>
1573
1579
1574 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1580 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1575 for custom exception handling. This is quite powerful, and it
1581 for custom exception handling. This is quite powerful, and it
1576 allows for user-installable exception handlers which can trap
1582 allows for user-installable exception handlers which can trap
1577 custom exceptions at runtime and treat them separately from
1583 custom exceptions at runtime and treat them separately from
1578 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1584 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1579 Mantegazza <mantegazza-AT-ill.fr>.
1585 Mantegazza <mantegazza-AT-ill.fr>.
1580 (InteractiveShell.set_custom_completer): public API function to
1586 (InteractiveShell.set_custom_completer): public API function to
1581 add new completers at runtime.
1587 add new completers at runtime.
1582
1588
1583 2005-03-19 Fernando Perez <fperez@colorado.edu>
1589 2005-03-19 Fernando Perez <fperez@colorado.edu>
1584
1590
1585 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1591 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1586 allow objects which provide their docstrings via non-standard
1592 allow objects which provide their docstrings via non-standard
1587 mechanisms (like Pyro proxies) to still be inspected by ipython's
1593 mechanisms (like Pyro proxies) to still be inspected by ipython's
1588 ? system.
1594 ? system.
1589
1595
1590 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1596 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1591 automatic capture system. I tried quite hard to make it work
1597 automatic capture system. I tried quite hard to make it work
1592 reliably, and simply failed. I tried many combinations with the
1598 reliably, and simply failed. I tried many combinations with the
1593 subprocess module, but eventually nothing worked in all needed
1599 subprocess module, but eventually nothing worked in all needed
1594 cases (not blocking stdin for the child, duplicating stdout
1600 cases (not blocking stdin for the child, duplicating stdout
1595 without blocking, etc). The new %sc/%sx still do capture to these
1601 without blocking, etc). The new %sc/%sx still do capture to these
1596 magical list/string objects which make shell use much more
1602 magical list/string objects which make shell use much more
1597 conveninent, so not all is lost.
1603 conveninent, so not all is lost.
1598
1604
1599 XXX - FIX MANUAL for the change above!
1605 XXX - FIX MANUAL for the change above!
1600
1606
1601 (runsource): I copied code.py's runsource() into ipython to modify
1607 (runsource): I copied code.py's runsource() into ipython to modify
1602 it a bit. Now the code object and source to be executed are
1608 it a bit. Now the code object and source to be executed are
1603 stored in ipython. This makes this info accessible to third-party
1609 stored in ipython. This makes this info accessible to third-party
1604 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1610 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1605 Mantegazza <mantegazza-AT-ill.fr>.
1611 Mantegazza <mantegazza-AT-ill.fr>.
1606
1612
1607 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1613 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1608 history-search via readline (like C-p/C-n). I'd wanted this for a
1614 history-search via readline (like C-p/C-n). I'd wanted this for a
1609 long time, but only recently found out how to do it. For users
1615 long time, but only recently found out how to do it. For users
1610 who already have their ipythonrc files made and want this, just
1616 who already have their ipythonrc files made and want this, just
1611 add:
1617 add:
1612
1618
1613 readline_parse_and_bind "\e[A": history-search-backward
1619 readline_parse_and_bind "\e[A": history-search-backward
1614 readline_parse_and_bind "\e[B": history-search-forward
1620 readline_parse_and_bind "\e[B": history-search-forward
1615
1621
1616 2005-03-18 Fernando Perez <fperez@colorado.edu>
1622 2005-03-18 Fernando Perez <fperez@colorado.edu>
1617
1623
1618 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1624 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1619 LSString and SList classes which allow transparent conversions
1625 LSString and SList classes which allow transparent conversions
1620 between list mode and whitespace-separated string.
1626 between list mode and whitespace-separated string.
1621 (magic_r): Fix recursion problem in %r.
1627 (magic_r): Fix recursion problem in %r.
1622
1628
1623 * IPython/genutils.py (LSString): New class to be used for
1629 * IPython/genutils.py (LSString): New class to be used for
1624 automatic storage of the results of all alias/system calls in _o
1630 automatic storage of the results of all alias/system calls in _o
1625 and _e (stdout/err). These provide a .l/.list attribute which
1631 and _e (stdout/err). These provide a .l/.list attribute which
1626 does automatic splitting on newlines. This means that for most
1632 does automatic splitting on newlines. This means that for most
1627 uses, you'll never need to do capturing of output with %sc/%sx
1633 uses, you'll never need to do capturing of output with %sc/%sx
1628 anymore, since ipython keeps this always done for you. Note that
1634 anymore, since ipython keeps this always done for you. Note that
1629 only the LAST results are stored, the _o/e variables are
1635 only the LAST results are stored, the _o/e variables are
1630 overwritten on each call. If you need to save their contents
1636 overwritten on each call. If you need to save their contents
1631 further, simply bind them to any other name.
1637 further, simply bind them to any other name.
1632
1638
1633 2005-03-17 Fernando Perez <fperez@colorado.edu>
1639 2005-03-17 Fernando Perez <fperez@colorado.edu>
1634
1640
1635 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1641 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1636 prompt namespace handling.
1642 prompt namespace handling.
1637
1643
1638 2005-03-16 Fernando Perez <fperez@colorado.edu>
1644 2005-03-16 Fernando Perez <fperez@colorado.edu>
1639
1645
1640 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1646 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1641 classic prompts to be '>>> ' (final space was missing, and it
1647 classic prompts to be '>>> ' (final space was missing, and it
1642 trips the emacs python mode).
1648 trips the emacs python mode).
1643 (BasePrompt.__str__): Added safe support for dynamic prompt
1649 (BasePrompt.__str__): Added safe support for dynamic prompt
1644 strings. Now you can set your prompt string to be '$x', and the
1650 strings. Now you can set your prompt string to be '$x', and the
1645 value of x will be printed from your interactive namespace. The
1651 value of x will be printed from your interactive namespace. The
1646 interpolation syntax includes the full Itpl support, so
1652 interpolation syntax includes the full Itpl support, so
1647 ${foo()+x+bar()} is a valid prompt string now, and the function
1653 ${foo()+x+bar()} is a valid prompt string now, and the function
1648 calls will be made at runtime.
1654 calls will be made at runtime.
1649
1655
1650 2005-03-15 Fernando Perez <fperez@colorado.edu>
1656 2005-03-15 Fernando Perez <fperez@colorado.edu>
1651
1657
1652 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1658 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1653 avoid name clashes in pylab. %hist still works, it just forwards
1659 avoid name clashes in pylab. %hist still works, it just forwards
1654 the call to %history.
1660 the call to %history.
1655
1661
1656 2005-03-02 *** Released version 0.6.12
1662 2005-03-02 *** Released version 0.6.12
1657
1663
1658 2005-03-02 Fernando Perez <fperez@colorado.edu>
1664 2005-03-02 Fernando Perez <fperez@colorado.edu>
1659
1665
1660 * IPython/iplib.py (handle_magic): log magic calls properly as
1666 * IPython/iplib.py (handle_magic): log magic calls properly as
1661 ipmagic() function calls.
1667 ipmagic() function calls.
1662
1668
1663 * IPython/Magic.py (magic_time): Improved %time to support
1669 * IPython/Magic.py (magic_time): Improved %time to support
1664 statements and provide wall-clock as well as CPU time.
1670 statements and provide wall-clock as well as CPU time.
1665
1671
1666 2005-02-27 Fernando Perez <fperez@colorado.edu>
1672 2005-02-27 Fernando Perez <fperez@colorado.edu>
1667
1673
1668 * IPython/hooks.py: New hooks module, to expose user-modifiable
1674 * IPython/hooks.py: New hooks module, to expose user-modifiable
1669 IPython functionality in a clean manner. For now only the editor
1675 IPython functionality in a clean manner. For now only the editor
1670 hook is actually written, and other thigns which I intend to turn
1676 hook is actually written, and other thigns which I intend to turn
1671 into proper hooks aren't yet there. The display and prefilter
1677 into proper hooks aren't yet there. The display and prefilter
1672 stuff, for example, should be hooks. But at least now the
1678 stuff, for example, should be hooks. But at least now the
1673 framework is in place, and the rest can be moved here with more
1679 framework is in place, and the rest can be moved here with more
1674 time later. IPython had had a .hooks variable for a long time for
1680 time later. IPython had had a .hooks variable for a long time for
1675 this purpose, but I'd never actually used it for anything.
1681 this purpose, but I'd never actually used it for anything.
1676
1682
1677 2005-02-26 Fernando Perez <fperez@colorado.edu>
1683 2005-02-26 Fernando Perez <fperez@colorado.edu>
1678
1684
1679 * IPython/ipmaker.py (make_IPython): make the default ipython
1685 * IPython/ipmaker.py (make_IPython): make the default ipython
1680 directory be called _ipython under win32, to follow more the
1686 directory be called _ipython under win32, to follow more the
1681 naming peculiarities of that platform (where buggy software like
1687 naming peculiarities of that platform (where buggy software like
1682 Visual Sourcesafe breaks with .named directories). Reported by
1688 Visual Sourcesafe breaks with .named directories). Reported by
1683 Ville Vainio.
1689 Ville Vainio.
1684
1690
1685 2005-02-23 Fernando Perez <fperez@colorado.edu>
1691 2005-02-23 Fernando Perez <fperez@colorado.edu>
1686
1692
1687 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1693 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1688 auto_aliases for win32 which were causing problems. Users can
1694 auto_aliases for win32 which were causing problems. Users can
1689 define the ones they personally like.
1695 define the ones they personally like.
1690
1696
1691 2005-02-21 Fernando Perez <fperez@colorado.edu>
1697 2005-02-21 Fernando Perez <fperez@colorado.edu>
1692
1698
1693 * IPython/Magic.py (magic_time): new magic to time execution of
1699 * IPython/Magic.py (magic_time): new magic to time execution of
1694 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1700 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1695
1701
1696 2005-02-19 Fernando Perez <fperez@colorado.edu>
1702 2005-02-19 Fernando Perez <fperez@colorado.edu>
1697
1703
1698 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1704 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1699 into keys (for prompts, for example).
1705 into keys (for prompts, for example).
1700
1706
1701 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1707 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1702 prompts in case users want them. This introduces a small behavior
1708 prompts in case users want them. This introduces a small behavior
1703 change: ipython does not automatically add a space to all prompts
1709 change: ipython does not automatically add a space to all prompts
1704 anymore. To get the old prompts with a space, users should add it
1710 anymore. To get the old prompts with a space, users should add it
1705 manually to their ipythonrc file, so for example prompt_in1 should
1711 manually to their ipythonrc file, so for example prompt_in1 should
1706 now read 'In [\#]: ' instead of 'In [\#]:'.
1712 now read 'In [\#]: ' instead of 'In [\#]:'.
1707 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1713 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1708 file) to control left-padding of secondary prompts.
1714 file) to control left-padding of secondary prompts.
1709
1715
1710 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1716 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1711 the profiler can't be imported. Fix for Debian, which removed
1717 the profiler can't be imported. Fix for Debian, which removed
1712 profile.py because of License issues. I applied a slightly
1718 profile.py because of License issues. I applied a slightly
1713 modified version of the original Debian patch at
1719 modified version of the original Debian patch at
1714 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1720 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1715
1721
1716 2005-02-17 Fernando Perez <fperez@colorado.edu>
1722 2005-02-17 Fernando Perez <fperez@colorado.edu>
1717
1723
1718 * IPython/genutils.py (native_line_ends): Fix bug which would
1724 * IPython/genutils.py (native_line_ends): Fix bug which would
1719 cause improper line-ends under win32 b/c I was not opening files
1725 cause improper line-ends under win32 b/c I was not opening files
1720 in binary mode. Bug report and fix thanks to Ville.
1726 in binary mode. Bug report and fix thanks to Ville.
1721
1727
1722 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1728 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1723 trying to catch spurious foo[1] autocalls. My fix actually broke
1729 trying to catch spurious foo[1] autocalls. My fix actually broke
1724 ',/' autoquote/call with explicit escape (bad regexp).
1730 ',/' autoquote/call with explicit escape (bad regexp).
1725
1731
1726 2005-02-15 *** Released version 0.6.11
1732 2005-02-15 *** Released version 0.6.11
1727
1733
1728 2005-02-14 Fernando Perez <fperez@colorado.edu>
1734 2005-02-14 Fernando Perez <fperez@colorado.edu>
1729
1735
1730 * IPython/background_jobs.py: New background job management
1736 * IPython/background_jobs.py: New background job management
1731 subsystem. This is implemented via a new set of classes, and
1737 subsystem. This is implemented via a new set of classes, and
1732 IPython now provides a builtin 'jobs' object for background job
1738 IPython now provides a builtin 'jobs' object for background job
1733 execution. A convenience %bg magic serves as a lightweight
1739 execution. A convenience %bg magic serves as a lightweight
1734 frontend for starting the more common type of calls. This was
1740 frontend for starting the more common type of calls. This was
1735 inspired by discussions with B. Granger and the BackgroundCommand
1741 inspired by discussions with B. Granger and the BackgroundCommand
1736 class described in the book Python Scripting for Computational
1742 class described in the book Python Scripting for Computational
1737 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1743 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1738 (although ultimately no code from this text was used, as IPython's
1744 (although ultimately no code from this text was used, as IPython's
1739 system is a separate implementation).
1745 system is a separate implementation).
1740
1746
1741 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1747 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1742 to control the completion of single/double underscore names
1748 to control the completion of single/double underscore names
1743 separately. As documented in the example ipytonrc file, the
1749 separately. As documented in the example ipytonrc file, the
1744 readline_omit__names variable can now be set to 2, to omit even
1750 readline_omit__names variable can now be set to 2, to omit even
1745 single underscore names. Thanks to a patch by Brian Wong
1751 single underscore names. Thanks to a patch by Brian Wong
1746 <BrianWong-AT-AirgoNetworks.Com>.
1752 <BrianWong-AT-AirgoNetworks.Com>.
1747 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1753 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1748 be autocalled as foo([1]) if foo were callable. A problem for
1754 be autocalled as foo([1]) if foo were callable. A problem for
1749 things which are both callable and implement __getitem__.
1755 things which are both callable and implement __getitem__.
1750 (init_readline): Fix autoindentation for win32. Thanks to a patch
1756 (init_readline): Fix autoindentation for win32. Thanks to a patch
1751 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1757 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1752
1758
1753 2005-02-12 Fernando Perez <fperez@colorado.edu>
1759 2005-02-12 Fernando Perez <fperez@colorado.edu>
1754
1760
1755 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1761 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1756 which I had written long ago to sort out user error messages which
1762 which I had written long ago to sort out user error messages which
1757 may occur during startup. This seemed like a good idea initially,
1763 may occur during startup. This seemed like a good idea initially,
1758 but it has proven a disaster in retrospect. I don't want to
1764 but it has proven a disaster in retrospect. I don't want to
1759 change much code for now, so my fix is to set the internal 'debug'
1765 change much code for now, so my fix is to set the internal 'debug'
1760 flag to true everywhere, whose only job was precisely to control
1766 flag to true everywhere, whose only job was precisely to control
1761 this subsystem. This closes issue 28 (as well as avoiding all
1767 this subsystem. This closes issue 28 (as well as avoiding all
1762 sorts of strange hangups which occur from time to time).
1768 sorts of strange hangups which occur from time to time).
1763
1769
1764 2005-02-07 Fernando Perez <fperez@colorado.edu>
1770 2005-02-07 Fernando Perez <fperez@colorado.edu>
1765
1771
1766 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1772 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1767 previous call produced a syntax error.
1773 previous call produced a syntax error.
1768
1774
1769 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1775 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1770 classes without constructor.
1776 classes without constructor.
1771
1777
1772 2005-02-06 Fernando Perez <fperez@colorado.edu>
1778 2005-02-06 Fernando Perez <fperez@colorado.edu>
1773
1779
1774 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1780 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1775 completions with the results of each matcher, so we return results
1781 completions with the results of each matcher, so we return results
1776 to the user from all namespaces. This breaks with ipython
1782 to the user from all namespaces. This breaks with ipython
1777 tradition, but I think it's a nicer behavior. Now you get all
1783 tradition, but I think it's a nicer behavior. Now you get all
1778 possible completions listed, from all possible namespaces (python,
1784 possible completions listed, from all possible namespaces (python,
1779 filesystem, magics...) After a request by John Hunter
1785 filesystem, magics...) After a request by John Hunter
1780 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1786 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1781
1787
1782 2005-02-05 Fernando Perez <fperez@colorado.edu>
1788 2005-02-05 Fernando Perez <fperez@colorado.edu>
1783
1789
1784 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1790 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1785 the call had quote characters in it (the quotes were stripped).
1791 the call had quote characters in it (the quotes were stripped).
1786
1792
1787 2005-01-31 Fernando Perez <fperez@colorado.edu>
1793 2005-01-31 Fernando Perez <fperez@colorado.edu>
1788
1794
1789 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1795 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1790 Itpl.itpl() to make the code more robust against psyco
1796 Itpl.itpl() to make the code more robust against psyco
1791 optimizations.
1797 optimizations.
1792
1798
1793 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1799 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1794 of causing an exception. Quicker, cleaner.
1800 of causing an exception. Quicker, cleaner.
1795
1801
1796 2005-01-28 Fernando Perez <fperez@colorado.edu>
1802 2005-01-28 Fernando Perez <fperez@colorado.edu>
1797
1803
1798 * scripts/ipython_win_post_install.py (install): hardcode
1804 * scripts/ipython_win_post_install.py (install): hardcode
1799 sys.prefix+'python.exe' as the executable path. It turns out that
1805 sys.prefix+'python.exe' as the executable path. It turns out that
1800 during the post-installation run, sys.executable resolves to the
1806 during the post-installation run, sys.executable resolves to the
1801 name of the binary installer! I should report this as a distutils
1807 name of the binary installer! I should report this as a distutils
1802 bug, I think. I updated the .10 release with this tiny fix, to
1808 bug, I think. I updated the .10 release with this tiny fix, to
1803 avoid annoying the lists further.
1809 avoid annoying the lists further.
1804
1810
1805 2005-01-27 *** Released version 0.6.10
1811 2005-01-27 *** Released version 0.6.10
1806
1812
1807 2005-01-27 Fernando Perez <fperez@colorado.edu>
1813 2005-01-27 Fernando Perez <fperez@colorado.edu>
1808
1814
1809 * IPython/numutils.py (norm): Added 'inf' as optional name for
1815 * IPython/numutils.py (norm): Added 'inf' as optional name for
1810 L-infinity norm, included references to mathworld.com for vector
1816 L-infinity norm, included references to mathworld.com for vector
1811 norm definitions.
1817 norm definitions.
1812 (amin/amax): added amin/amax for array min/max. Similar to what
1818 (amin/amax): added amin/amax for array min/max. Similar to what
1813 pylab ships with after the recent reorganization of names.
1819 pylab ships with after the recent reorganization of names.
1814 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1820 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1815
1821
1816 * ipython.el: committed Alex's recent fixes and improvements.
1822 * ipython.el: committed Alex's recent fixes and improvements.
1817 Tested with python-mode from CVS, and it looks excellent. Since
1823 Tested with python-mode from CVS, and it looks excellent. Since
1818 python-mode hasn't released anything in a while, I'm temporarily
1824 python-mode hasn't released anything in a while, I'm temporarily
1819 putting a copy of today's CVS (v 4.70) of python-mode in:
1825 putting a copy of today's CVS (v 4.70) of python-mode in:
1820 http://ipython.scipy.org/tmp/python-mode.el
1826 http://ipython.scipy.org/tmp/python-mode.el
1821
1827
1822 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1828 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1823 sys.executable for the executable name, instead of assuming it's
1829 sys.executable for the executable name, instead of assuming it's
1824 called 'python.exe' (the post-installer would have produced broken
1830 called 'python.exe' (the post-installer would have produced broken
1825 setups on systems with a differently named python binary).
1831 setups on systems with a differently named python binary).
1826
1832
1827 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1833 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1828 references to os.linesep, to make the code more
1834 references to os.linesep, to make the code more
1829 platform-independent. This is also part of the win32 coloring
1835 platform-independent. This is also part of the win32 coloring
1830 fixes.
1836 fixes.
1831
1837
1832 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1838 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1833 lines, which actually cause coloring bugs because the length of
1839 lines, which actually cause coloring bugs because the length of
1834 the line is very difficult to correctly compute with embedded
1840 the line is very difficult to correctly compute with embedded
1835 escapes. This was the source of all the coloring problems under
1841 escapes. This was the source of all the coloring problems under
1836 Win32. I think that _finally_, Win32 users have a properly
1842 Win32. I think that _finally_, Win32 users have a properly
1837 working ipython in all respects. This would never have happened
1843 working ipython in all respects. This would never have happened
1838 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1844 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1839
1845
1840 2005-01-26 *** Released version 0.6.9
1846 2005-01-26 *** Released version 0.6.9
1841
1847
1842 2005-01-25 Fernando Perez <fperez@colorado.edu>
1848 2005-01-25 Fernando Perez <fperez@colorado.edu>
1843
1849
1844 * setup.py: finally, we have a true Windows installer, thanks to
1850 * setup.py: finally, we have a true Windows installer, thanks to
1845 the excellent work of Viktor Ransmayr
1851 the excellent work of Viktor Ransmayr
1846 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1852 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1847 Windows users. The setup routine is quite a bit cleaner thanks to
1853 Windows users. The setup routine is quite a bit cleaner thanks to
1848 this, and the post-install script uses the proper functions to
1854 this, and the post-install script uses the proper functions to
1849 allow a clean de-installation using the standard Windows Control
1855 allow a clean de-installation using the standard Windows Control
1850 Panel.
1856 Panel.
1851
1857
1852 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1858 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1853 environment variable under all OSes (including win32) if
1859 environment variable under all OSes (including win32) if
1854 available. This will give consistency to win32 users who have set
1860 available. This will give consistency to win32 users who have set
1855 this variable for any reason. If os.environ['HOME'] fails, the
1861 this variable for any reason. If os.environ['HOME'] fails, the
1856 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1862 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1857
1863
1858 2005-01-24 Fernando Perez <fperez@colorado.edu>
1864 2005-01-24 Fernando Perez <fperez@colorado.edu>
1859
1865
1860 * IPython/numutils.py (empty_like): add empty_like(), similar to
1866 * IPython/numutils.py (empty_like): add empty_like(), similar to
1861 zeros_like() but taking advantage of the new empty() Numeric routine.
1867 zeros_like() but taking advantage of the new empty() Numeric routine.
1862
1868
1863 2005-01-23 *** Released version 0.6.8
1869 2005-01-23 *** Released version 0.6.8
1864
1870
1865 2005-01-22 Fernando Perez <fperez@colorado.edu>
1871 2005-01-22 Fernando Perez <fperez@colorado.edu>
1866
1872
1867 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1873 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1868 automatic show() calls. After discussing things with JDH, it
1874 automatic show() calls. After discussing things with JDH, it
1869 turns out there are too many corner cases where this can go wrong.
1875 turns out there are too many corner cases where this can go wrong.
1870 It's best not to try to be 'too smart', and simply have ipython
1876 It's best not to try to be 'too smart', and simply have ipython
1871 reproduce as much as possible the default behavior of a normal
1877 reproduce as much as possible the default behavior of a normal
1872 python shell.
1878 python shell.
1873
1879
1874 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1880 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1875 line-splitting regexp and _prefilter() to avoid calling getattr()
1881 line-splitting regexp and _prefilter() to avoid calling getattr()
1876 on assignments. This closes
1882 on assignments. This closes
1877 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1883 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1878 readline uses getattr(), so a simple <TAB> keypress is still
1884 readline uses getattr(), so a simple <TAB> keypress is still
1879 enough to trigger getattr() calls on an object.
1885 enough to trigger getattr() calls on an object.
1880
1886
1881 2005-01-21 Fernando Perez <fperez@colorado.edu>
1887 2005-01-21 Fernando Perez <fperez@colorado.edu>
1882
1888
1883 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1889 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1884 docstring under pylab so it doesn't mask the original.
1890 docstring under pylab so it doesn't mask the original.
1885
1891
1886 2005-01-21 *** Released version 0.6.7
1892 2005-01-21 *** Released version 0.6.7
1887
1893
1888 2005-01-21 Fernando Perez <fperez@colorado.edu>
1894 2005-01-21 Fernando Perez <fperez@colorado.edu>
1889
1895
1890 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1896 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1891 signal handling for win32 users in multithreaded mode.
1897 signal handling for win32 users in multithreaded mode.
1892
1898
1893 2005-01-17 Fernando Perez <fperez@colorado.edu>
1899 2005-01-17 Fernando Perez <fperez@colorado.edu>
1894
1900
1895 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1901 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1896 instances with no __init__. After a crash report by Norbert Nemec
1902 instances with no __init__. After a crash report by Norbert Nemec
1897 <Norbert-AT-nemec-online.de>.
1903 <Norbert-AT-nemec-online.de>.
1898
1904
1899 2005-01-14 Fernando Perez <fperez@colorado.edu>
1905 2005-01-14 Fernando Perez <fperez@colorado.edu>
1900
1906
1901 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1907 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1902 names for verbose exceptions, when multiple dotted names and the
1908 names for verbose exceptions, when multiple dotted names and the
1903 'parent' object were present on the same line.
1909 'parent' object were present on the same line.
1904
1910
1905 2005-01-11 Fernando Perez <fperez@colorado.edu>
1911 2005-01-11 Fernando Perez <fperez@colorado.edu>
1906
1912
1907 * IPython/genutils.py (flag_calls): new utility to trap and flag
1913 * IPython/genutils.py (flag_calls): new utility to trap and flag
1908 calls in functions. I need it to clean up matplotlib support.
1914 calls in functions. I need it to clean up matplotlib support.
1909 Also removed some deprecated code in genutils.
1915 Also removed some deprecated code in genutils.
1910
1916
1911 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1917 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1912 that matplotlib scripts called with %run, which don't call show()
1918 that matplotlib scripts called with %run, which don't call show()
1913 themselves, still have their plotting windows open.
1919 themselves, still have their plotting windows open.
1914
1920
1915 2005-01-05 Fernando Perez <fperez@colorado.edu>
1921 2005-01-05 Fernando Perez <fperez@colorado.edu>
1916
1922
1917 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1923 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1918 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1924 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1919
1925
1920 2004-12-19 Fernando Perez <fperez@colorado.edu>
1926 2004-12-19 Fernando Perez <fperez@colorado.edu>
1921
1927
1922 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1928 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1923 parent_runcode, which was an eyesore. The same result can be
1929 parent_runcode, which was an eyesore. The same result can be
1924 obtained with Python's regular superclass mechanisms.
1930 obtained with Python's regular superclass mechanisms.
1925
1931
1926 2004-12-17 Fernando Perez <fperez@colorado.edu>
1932 2004-12-17 Fernando Perez <fperez@colorado.edu>
1927
1933
1928 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1934 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1929 reported by Prabhu.
1935 reported by Prabhu.
1930 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1936 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1931 sys.stderr) instead of explicitly calling sys.stderr. This helps
1937 sys.stderr) instead of explicitly calling sys.stderr. This helps
1932 maintain our I/O abstractions clean, for future GUI embeddings.
1938 maintain our I/O abstractions clean, for future GUI embeddings.
1933
1939
1934 * IPython/genutils.py (info): added new utility for sys.stderr
1940 * IPython/genutils.py (info): added new utility for sys.stderr
1935 unified info message handling (thin wrapper around warn()).
1941 unified info message handling (thin wrapper around warn()).
1936
1942
1937 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1943 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1938 composite (dotted) names on verbose exceptions.
1944 composite (dotted) names on verbose exceptions.
1939 (VerboseTB.nullrepr): harden against another kind of errors which
1945 (VerboseTB.nullrepr): harden against another kind of errors which
1940 Python's inspect module can trigger, and which were crashing
1946 Python's inspect module can trigger, and which were crashing
1941 IPython. Thanks to a report by Marco Lombardi
1947 IPython. Thanks to a report by Marco Lombardi
1942 <mlombard-AT-ma010192.hq.eso.org>.
1948 <mlombard-AT-ma010192.hq.eso.org>.
1943
1949
1944 2004-12-13 *** Released version 0.6.6
1950 2004-12-13 *** Released version 0.6.6
1945
1951
1946 2004-12-12 Fernando Perez <fperez@colorado.edu>
1952 2004-12-12 Fernando Perez <fperez@colorado.edu>
1947
1953
1948 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1954 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1949 generated by pygtk upon initialization if it was built without
1955 generated by pygtk upon initialization if it was built without
1950 threads (for matplotlib users). After a crash reported by
1956 threads (for matplotlib users). After a crash reported by
1951 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1957 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1952
1958
1953 * IPython/ipmaker.py (make_IPython): fix small bug in the
1959 * IPython/ipmaker.py (make_IPython): fix small bug in the
1954 import_some parameter for multiple imports.
1960 import_some parameter for multiple imports.
1955
1961
1956 * IPython/iplib.py (ipmagic): simplified the interface of
1962 * IPython/iplib.py (ipmagic): simplified the interface of
1957 ipmagic() to take a single string argument, just as it would be
1963 ipmagic() to take a single string argument, just as it would be
1958 typed at the IPython cmd line.
1964 typed at the IPython cmd line.
1959 (ipalias): Added new ipalias() with an interface identical to
1965 (ipalias): Added new ipalias() with an interface identical to
1960 ipmagic(). This completes exposing a pure python interface to the
1966 ipmagic(). This completes exposing a pure python interface to the
1961 alias and magic system, which can be used in loops or more complex
1967 alias and magic system, which can be used in loops or more complex
1962 code where IPython's automatic line mangling is not active.
1968 code where IPython's automatic line mangling is not active.
1963
1969
1964 * IPython/genutils.py (timing): changed interface of timing to
1970 * IPython/genutils.py (timing): changed interface of timing to
1965 simply run code once, which is the most common case. timings()
1971 simply run code once, which is the most common case. timings()
1966 remains unchanged, for the cases where you want multiple runs.
1972 remains unchanged, for the cases where you want multiple runs.
1967
1973
1968 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1974 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1969 bug where Python2.2 crashes with exec'ing code which does not end
1975 bug where Python2.2 crashes with exec'ing code which does not end
1970 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1976 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1971 before.
1977 before.
1972
1978
1973 2004-12-10 Fernando Perez <fperez@colorado.edu>
1979 2004-12-10 Fernando Perez <fperez@colorado.edu>
1974
1980
1975 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1981 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1976 -t to -T, to accomodate the new -t flag in %run (the %run and
1982 -t to -T, to accomodate the new -t flag in %run (the %run and
1977 %prun options are kind of intermixed, and it's not easy to change
1983 %prun options are kind of intermixed, and it's not easy to change
1978 this with the limitations of python's getopt).
1984 this with the limitations of python's getopt).
1979
1985
1980 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1986 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1981 the execution of scripts. It's not as fine-tuned as timeit.py,
1987 the execution of scripts. It's not as fine-tuned as timeit.py,
1982 but it works from inside ipython (and under 2.2, which lacks
1988 but it works from inside ipython (and under 2.2, which lacks
1983 timeit.py). Optionally a number of runs > 1 can be given for
1989 timeit.py). Optionally a number of runs > 1 can be given for
1984 timing very short-running code.
1990 timing very short-running code.
1985
1991
1986 * IPython/genutils.py (uniq_stable): new routine which returns a
1992 * IPython/genutils.py (uniq_stable): new routine which returns a
1987 list of unique elements in any iterable, but in stable order of
1993 list of unique elements in any iterable, but in stable order of
1988 appearance. I needed this for the ultraTB fixes, and it's a handy
1994 appearance. I needed this for the ultraTB fixes, and it's a handy
1989 utility.
1995 utility.
1990
1996
1991 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1997 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1992 dotted names in Verbose exceptions. This had been broken since
1998 dotted names in Verbose exceptions. This had been broken since
1993 the very start, now x.y will properly be printed in a Verbose
1999 the very start, now x.y will properly be printed in a Verbose
1994 traceback, instead of x being shown and y appearing always as an
2000 traceback, instead of x being shown and y appearing always as an
1995 'undefined global'. Getting this to work was a bit tricky,
2001 'undefined global'. Getting this to work was a bit tricky,
1996 because by default python tokenizers are stateless. Saved by
2002 because by default python tokenizers are stateless. Saved by
1997 python's ability to easily add a bit of state to an arbitrary
2003 python's ability to easily add a bit of state to an arbitrary
1998 function (without needing to build a full-blown callable object).
2004 function (without needing to build a full-blown callable object).
1999
2005
2000 Also big cleanup of this code, which had horrendous runtime
2006 Also big cleanup of this code, which had horrendous runtime
2001 lookups of zillions of attributes for colorization. Moved all
2007 lookups of zillions of attributes for colorization. Moved all
2002 this code into a few templates, which make it cleaner and quicker.
2008 this code into a few templates, which make it cleaner and quicker.
2003
2009
2004 Printout quality was also improved for Verbose exceptions: one
2010 Printout quality was also improved for Verbose exceptions: one
2005 variable per line, and memory addresses are printed (this can be
2011 variable per line, and memory addresses are printed (this can be
2006 quite handy in nasty debugging situations, which is what Verbose
2012 quite handy in nasty debugging situations, which is what Verbose
2007 is for).
2013 is for).
2008
2014
2009 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
2015 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
2010 the command line as scripts to be loaded by embedded instances.
2016 the command line as scripts to be loaded by embedded instances.
2011 Doing so has the potential for an infinite recursion if there are
2017 Doing so has the potential for an infinite recursion if there are
2012 exceptions thrown in the process. This fixes a strange crash
2018 exceptions thrown in the process. This fixes a strange crash
2013 reported by Philippe MULLER <muller-AT-irit.fr>.
2019 reported by Philippe MULLER <muller-AT-irit.fr>.
2014
2020
2015 2004-12-09 Fernando Perez <fperez@colorado.edu>
2021 2004-12-09 Fernando Perez <fperez@colorado.edu>
2016
2022
2017 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2023 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2018 to reflect new names in matplotlib, which now expose the
2024 to reflect new names in matplotlib, which now expose the
2019 matlab-compatible interface via a pylab module instead of the
2025 matlab-compatible interface via a pylab module instead of the
2020 'matlab' name. The new code is backwards compatible, so users of
2026 'matlab' name. The new code is backwards compatible, so users of
2021 all matplotlib versions are OK. Patch by J. Hunter.
2027 all matplotlib versions are OK. Patch by J. Hunter.
2022
2028
2023 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2029 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2024 of __init__ docstrings for instances (class docstrings are already
2030 of __init__ docstrings for instances (class docstrings are already
2025 automatically printed). Instances with customized docstrings
2031 automatically printed). Instances with customized docstrings
2026 (indep. of the class) are also recognized and all 3 separate
2032 (indep. of the class) are also recognized and all 3 separate
2027 docstrings are printed (instance, class, constructor). After some
2033 docstrings are printed (instance, class, constructor). After some
2028 comments/suggestions by J. Hunter.
2034 comments/suggestions by J. Hunter.
2029
2035
2030 2004-12-05 Fernando Perez <fperez@colorado.edu>
2036 2004-12-05 Fernando Perez <fperez@colorado.edu>
2031
2037
2032 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2038 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2033 warnings when tab-completion fails and triggers an exception.
2039 warnings when tab-completion fails and triggers an exception.
2034
2040
2035 2004-12-03 Fernando Perez <fperez@colorado.edu>
2041 2004-12-03 Fernando Perez <fperez@colorado.edu>
2036
2042
2037 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2043 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2038 be triggered when using 'run -p'. An incorrect option flag was
2044 be triggered when using 'run -p'. An incorrect option flag was
2039 being set ('d' instead of 'D').
2045 being set ('d' instead of 'D').
2040 (manpage): fix missing escaped \- sign.
2046 (manpage): fix missing escaped \- sign.
2041
2047
2042 2004-11-30 *** Released version 0.6.5
2048 2004-11-30 *** Released version 0.6.5
2043
2049
2044 2004-11-30 Fernando Perez <fperez@colorado.edu>
2050 2004-11-30 Fernando Perez <fperez@colorado.edu>
2045
2051
2046 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2052 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2047 setting with -d option.
2053 setting with -d option.
2048
2054
2049 * setup.py (docfiles): Fix problem where the doc glob I was using
2055 * setup.py (docfiles): Fix problem where the doc glob I was using
2050 was COMPLETELY BROKEN. It was giving the right files by pure
2056 was COMPLETELY BROKEN. It was giving the right files by pure
2051 accident, but failed once I tried to include ipython.el. Note:
2057 accident, but failed once I tried to include ipython.el. Note:
2052 glob() does NOT allow you to do exclusion on multiple endings!
2058 glob() does NOT allow you to do exclusion on multiple endings!
2053
2059
2054 2004-11-29 Fernando Perez <fperez@colorado.edu>
2060 2004-11-29 Fernando Perez <fperez@colorado.edu>
2055
2061
2056 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2062 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2057 the manpage as the source. Better formatting & consistency.
2063 the manpage as the source. Better formatting & consistency.
2058
2064
2059 * IPython/Magic.py (magic_run): Added new -d option, to run
2065 * IPython/Magic.py (magic_run): Added new -d option, to run
2060 scripts under the control of the python pdb debugger. Note that
2066 scripts under the control of the python pdb debugger. Note that
2061 this required changing the %prun option -d to -D, to avoid a clash
2067 this required changing the %prun option -d to -D, to avoid a clash
2062 (since %run must pass options to %prun, and getopt is too dumb to
2068 (since %run must pass options to %prun, and getopt is too dumb to
2063 handle options with string values with embedded spaces). Thanks
2069 handle options with string values with embedded spaces). Thanks
2064 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2070 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2065 (magic_who_ls): added type matching to %who and %whos, so that one
2071 (magic_who_ls): added type matching to %who and %whos, so that one
2066 can filter their output to only include variables of certain
2072 can filter their output to only include variables of certain
2067 types. Another suggestion by Matthew.
2073 types. Another suggestion by Matthew.
2068 (magic_whos): Added memory summaries in kb and Mb for arrays.
2074 (magic_whos): Added memory summaries in kb and Mb for arrays.
2069 (magic_who): Improve formatting (break lines every 9 vars).
2075 (magic_who): Improve formatting (break lines every 9 vars).
2070
2076
2071 2004-11-28 Fernando Perez <fperez@colorado.edu>
2077 2004-11-28 Fernando Perez <fperez@colorado.edu>
2072
2078
2073 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2079 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2074 cache when empty lines were present.
2080 cache when empty lines were present.
2075
2081
2076 2004-11-24 Fernando Perez <fperez@colorado.edu>
2082 2004-11-24 Fernando Perez <fperez@colorado.edu>
2077
2083
2078 * IPython/usage.py (__doc__): document the re-activated threading
2084 * IPython/usage.py (__doc__): document the re-activated threading
2079 options for WX and GTK.
2085 options for WX and GTK.
2080
2086
2081 2004-11-23 Fernando Perez <fperez@colorado.edu>
2087 2004-11-23 Fernando Perez <fperez@colorado.edu>
2082
2088
2083 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2089 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2084 the -wthread and -gthread options, along with a new -tk one to try
2090 the -wthread and -gthread options, along with a new -tk one to try
2085 and coordinate Tk threading with wx/gtk. The tk support is very
2091 and coordinate Tk threading with wx/gtk. The tk support is very
2086 platform dependent, since it seems to require Tcl and Tk to be
2092 platform dependent, since it seems to require Tcl and Tk to be
2087 built with threads (Fedora1/2 appears NOT to have it, but in
2093 built with threads (Fedora1/2 appears NOT to have it, but in
2088 Prabhu's Debian boxes it works OK). But even with some Tk
2094 Prabhu's Debian boxes it works OK). But even with some Tk
2089 limitations, this is a great improvement.
2095 limitations, this is a great improvement.
2090
2096
2091 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2097 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2092 info in user prompts. Patch by Prabhu.
2098 info in user prompts. Patch by Prabhu.
2093
2099
2094 2004-11-18 Fernando Perez <fperez@colorado.edu>
2100 2004-11-18 Fernando Perez <fperez@colorado.edu>
2095
2101
2096 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2102 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2097 EOFErrors and bail, to avoid infinite loops if a non-terminating
2103 EOFErrors and bail, to avoid infinite loops if a non-terminating
2098 file is fed into ipython. Patch submitted in issue 19 by user,
2104 file is fed into ipython. Patch submitted in issue 19 by user,
2099 many thanks.
2105 many thanks.
2100
2106
2101 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2107 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2102 autoquote/parens in continuation prompts, which can cause lots of
2108 autoquote/parens in continuation prompts, which can cause lots of
2103 problems. Closes roundup issue 20.
2109 problems. Closes roundup issue 20.
2104
2110
2105 2004-11-17 Fernando Perez <fperez@colorado.edu>
2111 2004-11-17 Fernando Perez <fperez@colorado.edu>
2106
2112
2107 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2113 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2108 reported as debian bug #280505. I'm not sure my local changelog
2114 reported as debian bug #280505. I'm not sure my local changelog
2109 entry has the proper debian format (Jack?).
2115 entry has the proper debian format (Jack?).
2110
2116
2111 2004-11-08 *** Released version 0.6.4
2117 2004-11-08 *** Released version 0.6.4
2112
2118
2113 2004-11-08 Fernando Perez <fperez@colorado.edu>
2119 2004-11-08 Fernando Perez <fperez@colorado.edu>
2114
2120
2115 * IPython/iplib.py (init_readline): Fix exit message for Windows
2121 * IPython/iplib.py (init_readline): Fix exit message for Windows
2116 when readline is active. Thanks to a report by Eric Jones
2122 when readline is active. Thanks to a report by Eric Jones
2117 <eric-AT-enthought.com>.
2123 <eric-AT-enthought.com>.
2118
2124
2119 2004-11-07 Fernando Perez <fperez@colorado.edu>
2125 2004-11-07 Fernando Perez <fperez@colorado.edu>
2120
2126
2121 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2127 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2122 sometimes seen by win2k/cygwin users.
2128 sometimes seen by win2k/cygwin users.
2123
2129
2124 2004-11-06 Fernando Perez <fperez@colorado.edu>
2130 2004-11-06 Fernando Perez <fperez@colorado.edu>
2125
2131
2126 * IPython/iplib.py (interact): Change the handling of %Exit from
2132 * IPython/iplib.py (interact): Change the handling of %Exit from
2127 trying to propagate a SystemExit to an internal ipython flag.
2133 trying to propagate a SystemExit to an internal ipython flag.
2128 This is less elegant than using Python's exception mechanism, but
2134 This is less elegant than using Python's exception mechanism, but
2129 I can't get that to work reliably with threads, so under -pylab
2135 I can't get that to work reliably with threads, so under -pylab
2130 %Exit was hanging IPython. Cross-thread exception handling is
2136 %Exit was hanging IPython. Cross-thread exception handling is
2131 really a bitch. Thaks to a bug report by Stephen Walton
2137 really a bitch. Thaks to a bug report by Stephen Walton
2132 <stephen.walton-AT-csun.edu>.
2138 <stephen.walton-AT-csun.edu>.
2133
2139
2134 2004-11-04 Fernando Perez <fperez@colorado.edu>
2140 2004-11-04 Fernando Perez <fperez@colorado.edu>
2135
2141
2136 * IPython/iplib.py (raw_input_original): store a pointer to the
2142 * IPython/iplib.py (raw_input_original): store a pointer to the
2137 true raw_input to harden against code which can modify it
2143 true raw_input to harden against code which can modify it
2138 (wx.py.PyShell does this and would otherwise crash ipython).
2144 (wx.py.PyShell does this and would otherwise crash ipython).
2139 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2145 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2140
2146
2141 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2147 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2142 Ctrl-C problem, which does not mess up the input line.
2148 Ctrl-C problem, which does not mess up the input line.
2143
2149
2144 2004-11-03 Fernando Perez <fperez@colorado.edu>
2150 2004-11-03 Fernando Perez <fperez@colorado.edu>
2145
2151
2146 * IPython/Release.py: Changed licensing to BSD, in all files.
2152 * IPython/Release.py: Changed licensing to BSD, in all files.
2147 (name): lowercase name for tarball/RPM release.
2153 (name): lowercase name for tarball/RPM release.
2148
2154
2149 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2155 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2150 use throughout ipython.
2156 use throughout ipython.
2151
2157
2152 * IPython/Magic.py (Magic._ofind): Switch to using the new
2158 * IPython/Magic.py (Magic._ofind): Switch to using the new
2153 OInspect.getdoc() function.
2159 OInspect.getdoc() function.
2154
2160
2155 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2161 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2156 of the line currently being canceled via Ctrl-C. It's extremely
2162 of the line currently being canceled via Ctrl-C. It's extremely
2157 ugly, but I don't know how to do it better (the problem is one of
2163 ugly, but I don't know how to do it better (the problem is one of
2158 handling cross-thread exceptions).
2164 handling cross-thread exceptions).
2159
2165
2160 2004-10-28 Fernando Perez <fperez@colorado.edu>
2166 2004-10-28 Fernando Perez <fperez@colorado.edu>
2161
2167
2162 * IPython/Shell.py (signal_handler): add signal handlers to trap
2168 * IPython/Shell.py (signal_handler): add signal handlers to trap
2163 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2169 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2164 report by Francesc Alted.
2170 report by Francesc Alted.
2165
2171
2166 2004-10-21 Fernando Perez <fperez@colorado.edu>
2172 2004-10-21 Fernando Perez <fperez@colorado.edu>
2167
2173
2168 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2174 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2169 to % for pysh syntax extensions.
2175 to % for pysh syntax extensions.
2170
2176
2171 2004-10-09 Fernando Perez <fperez@colorado.edu>
2177 2004-10-09 Fernando Perez <fperez@colorado.edu>
2172
2178
2173 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2179 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2174 arrays to print a more useful summary, without calling str(arr).
2180 arrays to print a more useful summary, without calling str(arr).
2175 This avoids the problem of extremely lengthy computations which
2181 This avoids the problem of extremely lengthy computations which
2176 occur if arr is large, and appear to the user as a system lockup
2182 occur if arr is large, and appear to the user as a system lockup
2177 with 100% cpu activity. After a suggestion by Kristian Sandberg
2183 with 100% cpu activity. After a suggestion by Kristian Sandberg
2178 <Kristian.Sandberg@colorado.edu>.
2184 <Kristian.Sandberg@colorado.edu>.
2179 (Magic.__init__): fix bug in global magic escapes not being
2185 (Magic.__init__): fix bug in global magic escapes not being
2180 correctly set.
2186 correctly set.
2181
2187
2182 2004-10-08 Fernando Perez <fperez@colorado.edu>
2188 2004-10-08 Fernando Perez <fperez@colorado.edu>
2183
2189
2184 * IPython/Magic.py (__license__): change to absolute imports of
2190 * IPython/Magic.py (__license__): change to absolute imports of
2185 ipython's own internal packages, to start adapting to the absolute
2191 ipython's own internal packages, to start adapting to the absolute
2186 import requirement of PEP-328.
2192 import requirement of PEP-328.
2187
2193
2188 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2194 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2189 files, and standardize author/license marks through the Release
2195 files, and standardize author/license marks through the Release
2190 module instead of having per/file stuff (except for files with
2196 module instead of having per/file stuff (except for files with
2191 particular licenses, like the MIT/PSF-licensed codes).
2197 particular licenses, like the MIT/PSF-licensed codes).
2192
2198
2193 * IPython/Debugger.py: remove dead code for python 2.1
2199 * IPython/Debugger.py: remove dead code for python 2.1
2194
2200
2195 2004-10-04 Fernando Perez <fperez@colorado.edu>
2201 2004-10-04 Fernando Perez <fperez@colorado.edu>
2196
2202
2197 * IPython/iplib.py (ipmagic): New function for accessing magics
2203 * IPython/iplib.py (ipmagic): New function for accessing magics
2198 via a normal python function call.
2204 via a normal python function call.
2199
2205
2200 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2206 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2201 from '@' to '%', to accomodate the new @decorator syntax of python
2207 from '@' to '%', to accomodate the new @decorator syntax of python
2202 2.4.
2208 2.4.
2203
2209
2204 2004-09-29 Fernando Perez <fperez@colorado.edu>
2210 2004-09-29 Fernando Perez <fperez@colorado.edu>
2205
2211
2206 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2212 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2207 matplotlib.use to prevent running scripts which try to switch
2213 matplotlib.use to prevent running scripts which try to switch
2208 interactive backends from within ipython. This will just crash
2214 interactive backends from within ipython. This will just crash
2209 the python interpreter, so we can't allow it (but a detailed error
2215 the python interpreter, so we can't allow it (but a detailed error
2210 is given to the user).
2216 is given to the user).
2211
2217
2212 2004-09-28 Fernando Perez <fperez@colorado.edu>
2218 2004-09-28 Fernando Perez <fperez@colorado.edu>
2213
2219
2214 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2220 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2215 matplotlib-related fixes so that using @run with non-matplotlib
2221 matplotlib-related fixes so that using @run with non-matplotlib
2216 scripts doesn't pop up spurious plot windows. This requires
2222 scripts doesn't pop up spurious plot windows. This requires
2217 matplotlib >= 0.63, where I had to make some changes as well.
2223 matplotlib >= 0.63, where I had to make some changes as well.
2218
2224
2219 * IPython/ipmaker.py (make_IPython): update version requirement to
2225 * IPython/ipmaker.py (make_IPython): update version requirement to
2220 python 2.2.
2226 python 2.2.
2221
2227
2222 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2228 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2223 banner arg for embedded customization.
2229 banner arg for embedded customization.
2224
2230
2225 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2231 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2226 explicit uses of __IP as the IPython's instance name. Now things
2232 explicit uses of __IP as the IPython's instance name. Now things
2227 are properly handled via the shell.name value. The actual code
2233 are properly handled via the shell.name value. The actual code
2228 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2234 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2229 is much better than before. I'll clean things completely when the
2235 is much better than before. I'll clean things completely when the
2230 magic stuff gets a real overhaul.
2236 magic stuff gets a real overhaul.
2231
2237
2232 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2238 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2233 minor changes to debian dir.
2239 minor changes to debian dir.
2234
2240
2235 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2241 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2236 pointer to the shell itself in the interactive namespace even when
2242 pointer to the shell itself in the interactive namespace even when
2237 a user-supplied dict is provided. This is needed for embedding
2243 a user-supplied dict is provided. This is needed for embedding
2238 purposes (found by tests with Michel Sanner).
2244 purposes (found by tests with Michel Sanner).
2239
2245
2240 2004-09-27 Fernando Perez <fperez@colorado.edu>
2246 2004-09-27 Fernando Perez <fperez@colorado.edu>
2241
2247
2242 * IPython/UserConfig/ipythonrc: remove []{} from
2248 * IPython/UserConfig/ipythonrc: remove []{} from
2243 readline_remove_delims, so that things like [modname.<TAB> do
2249 readline_remove_delims, so that things like [modname.<TAB> do
2244 proper completion. This disables [].TAB, but that's a less common
2250 proper completion. This disables [].TAB, but that's a less common
2245 case than module names in list comprehensions, for example.
2251 case than module names in list comprehensions, for example.
2246 Thanks to a report by Andrea Riciputi.
2252 Thanks to a report by Andrea Riciputi.
2247
2253
2248 2004-09-09 Fernando Perez <fperez@colorado.edu>
2254 2004-09-09 Fernando Perez <fperez@colorado.edu>
2249
2255
2250 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2256 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2251 blocking problems in win32 and osx. Fix by John.
2257 blocking problems in win32 and osx. Fix by John.
2252
2258
2253 2004-09-08 Fernando Perez <fperez@colorado.edu>
2259 2004-09-08 Fernando Perez <fperez@colorado.edu>
2254
2260
2255 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2261 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2256 for Win32 and OSX. Fix by John Hunter.
2262 for Win32 and OSX. Fix by John Hunter.
2257
2263
2258 2004-08-30 *** Released version 0.6.3
2264 2004-08-30 *** Released version 0.6.3
2259
2265
2260 2004-08-30 Fernando Perez <fperez@colorado.edu>
2266 2004-08-30 Fernando Perez <fperez@colorado.edu>
2261
2267
2262 * setup.py (isfile): Add manpages to list of dependent files to be
2268 * setup.py (isfile): Add manpages to list of dependent files to be
2263 updated.
2269 updated.
2264
2270
2265 2004-08-27 Fernando Perez <fperez@colorado.edu>
2271 2004-08-27 Fernando Perez <fperez@colorado.edu>
2266
2272
2267 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2273 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2268 for now. They don't really work with standalone WX/GTK code
2274 for now. They don't really work with standalone WX/GTK code
2269 (though matplotlib IS working fine with both of those backends).
2275 (though matplotlib IS working fine with both of those backends).
2270 This will neeed much more testing. I disabled most things with
2276 This will neeed much more testing. I disabled most things with
2271 comments, so turning it back on later should be pretty easy.
2277 comments, so turning it back on later should be pretty easy.
2272
2278
2273 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2279 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2274 autocalling of expressions like r'foo', by modifying the line
2280 autocalling of expressions like r'foo', by modifying the line
2275 split regexp. Closes
2281 split regexp. Closes
2276 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2282 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2277 Riley <ipythonbugs-AT-sabi.net>.
2283 Riley <ipythonbugs-AT-sabi.net>.
2278 (InteractiveShell.mainloop): honor --nobanner with banner
2284 (InteractiveShell.mainloop): honor --nobanner with banner
2279 extensions.
2285 extensions.
2280
2286
2281 * IPython/Shell.py: Significant refactoring of all classes, so
2287 * IPython/Shell.py: Significant refactoring of all classes, so
2282 that we can really support ALL matplotlib backends and threading
2288 that we can really support ALL matplotlib backends and threading
2283 models (John spotted a bug with Tk which required this). Now we
2289 models (John spotted a bug with Tk which required this). Now we
2284 should support single-threaded, WX-threads and GTK-threads, both
2290 should support single-threaded, WX-threads and GTK-threads, both
2285 for generic code and for matplotlib.
2291 for generic code and for matplotlib.
2286
2292
2287 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2293 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2288 -pylab, to simplify things for users. Will also remove the pylab
2294 -pylab, to simplify things for users. Will also remove the pylab
2289 profile, since now all of matplotlib configuration is directly
2295 profile, since now all of matplotlib configuration is directly
2290 handled here. This also reduces startup time.
2296 handled here. This also reduces startup time.
2291
2297
2292 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2298 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2293 shell wasn't being correctly called. Also in IPShellWX.
2299 shell wasn't being correctly called. Also in IPShellWX.
2294
2300
2295 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2301 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2296 fine-tune banner.
2302 fine-tune banner.
2297
2303
2298 * IPython/numutils.py (spike): Deprecate these spike functions,
2304 * IPython/numutils.py (spike): Deprecate these spike functions,
2299 delete (long deprecated) gnuplot_exec handler.
2305 delete (long deprecated) gnuplot_exec handler.
2300
2306
2301 2004-08-26 Fernando Perez <fperez@colorado.edu>
2307 2004-08-26 Fernando Perez <fperez@colorado.edu>
2302
2308
2303 * ipython.1: Update for threading options, plus some others which
2309 * ipython.1: Update for threading options, plus some others which
2304 were missing.
2310 were missing.
2305
2311
2306 * IPython/ipmaker.py (__call__): Added -wthread option for
2312 * IPython/ipmaker.py (__call__): Added -wthread option for
2307 wxpython thread handling. Make sure threading options are only
2313 wxpython thread handling. Make sure threading options are only
2308 valid at the command line.
2314 valid at the command line.
2309
2315
2310 * scripts/ipython: moved shell selection into a factory function
2316 * scripts/ipython: moved shell selection into a factory function
2311 in Shell.py, to keep the starter script to a minimum.
2317 in Shell.py, to keep the starter script to a minimum.
2312
2318
2313 2004-08-25 Fernando Perez <fperez@colorado.edu>
2319 2004-08-25 Fernando Perez <fperez@colorado.edu>
2314
2320
2315 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2321 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2316 John. Along with some recent changes he made to matplotlib, the
2322 John. Along with some recent changes he made to matplotlib, the
2317 next versions of both systems should work very well together.
2323 next versions of both systems should work very well together.
2318
2324
2319 2004-08-24 Fernando Perez <fperez@colorado.edu>
2325 2004-08-24 Fernando Perez <fperez@colorado.edu>
2320
2326
2321 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2327 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2322 tried to switch the profiling to using hotshot, but I'm getting
2328 tried to switch the profiling to using hotshot, but I'm getting
2323 strange errors from prof.runctx() there. I may be misreading the
2329 strange errors from prof.runctx() there. I may be misreading the
2324 docs, but it looks weird. For now the profiling code will
2330 docs, but it looks weird. For now the profiling code will
2325 continue to use the standard profiler.
2331 continue to use the standard profiler.
2326
2332
2327 2004-08-23 Fernando Perez <fperez@colorado.edu>
2333 2004-08-23 Fernando Perez <fperez@colorado.edu>
2328
2334
2329 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2335 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2330 threaded shell, by John Hunter. It's not quite ready yet, but
2336 threaded shell, by John Hunter. It's not quite ready yet, but
2331 close.
2337 close.
2332
2338
2333 2004-08-22 Fernando Perez <fperez@colorado.edu>
2339 2004-08-22 Fernando Perez <fperez@colorado.edu>
2334
2340
2335 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2341 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2336 in Magic and ultraTB.
2342 in Magic and ultraTB.
2337
2343
2338 * ipython.1: document threading options in manpage.
2344 * ipython.1: document threading options in manpage.
2339
2345
2340 * scripts/ipython: Changed name of -thread option to -gthread,
2346 * scripts/ipython: Changed name of -thread option to -gthread,
2341 since this is GTK specific. I want to leave the door open for a
2347 since this is GTK specific. I want to leave the door open for a
2342 -wthread option for WX, which will most likely be necessary. This
2348 -wthread option for WX, which will most likely be necessary. This
2343 change affects usage and ipmaker as well.
2349 change affects usage and ipmaker as well.
2344
2350
2345 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2351 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2346 handle the matplotlib shell issues. Code by John Hunter
2352 handle the matplotlib shell issues. Code by John Hunter
2347 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2353 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2348 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2354 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2349 broken (and disabled for end users) for now, but it puts the
2355 broken (and disabled for end users) for now, but it puts the
2350 infrastructure in place.
2356 infrastructure in place.
2351
2357
2352 2004-08-21 Fernando Perez <fperez@colorado.edu>
2358 2004-08-21 Fernando Perez <fperez@colorado.edu>
2353
2359
2354 * ipythonrc-pylab: Add matplotlib support.
2360 * ipythonrc-pylab: Add matplotlib support.
2355
2361
2356 * matplotlib_config.py: new files for matplotlib support, part of
2362 * matplotlib_config.py: new files for matplotlib support, part of
2357 the pylab profile.
2363 the pylab profile.
2358
2364
2359 * IPython/usage.py (__doc__): documented the threading options.
2365 * IPython/usage.py (__doc__): documented the threading options.
2360
2366
2361 2004-08-20 Fernando Perez <fperez@colorado.edu>
2367 2004-08-20 Fernando Perez <fperez@colorado.edu>
2362
2368
2363 * ipython: Modified the main calling routine to handle the -thread
2369 * ipython: Modified the main calling routine to handle the -thread
2364 and -mpthread options. This needs to be done as a top-level hack,
2370 and -mpthread options. This needs to be done as a top-level hack,
2365 because it determines which class to instantiate for IPython
2371 because it determines which class to instantiate for IPython
2366 itself.
2372 itself.
2367
2373
2368 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2374 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2369 classes to support multithreaded GTK operation without blocking,
2375 classes to support multithreaded GTK operation without blocking,
2370 and matplotlib with all backends. This is a lot of still very
2376 and matplotlib with all backends. This is a lot of still very
2371 experimental code, and threads are tricky. So it may still have a
2377 experimental code, and threads are tricky. So it may still have a
2372 few rough edges... This code owes a lot to
2378 few rough edges... This code owes a lot to
2373 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2379 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2374 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2380 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2375 to John Hunter for all the matplotlib work.
2381 to John Hunter for all the matplotlib work.
2376
2382
2377 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2383 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2378 options for gtk thread and matplotlib support.
2384 options for gtk thread and matplotlib support.
2379
2385
2380 2004-08-16 Fernando Perez <fperez@colorado.edu>
2386 2004-08-16 Fernando Perez <fperez@colorado.edu>
2381
2387
2382 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2388 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2383 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2389 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2384 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2390 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2385
2391
2386 2004-08-11 Fernando Perez <fperez@colorado.edu>
2392 2004-08-11 Fernando Perez <fperez@colorado.edu>
2387
2393
2388 * setup.py (isfile): Fix build so documentation gets updated for
2394 * setup.py (isfile): Fix build so documentation gets updated for
2389 rpms (it was only done for .tgz builds).
2395 rpms (it was only done for .tgz builds).
2390
2396
2391 2004-08-10 Fernando Perez <fperez@colorado.edu>
2397 2004-08-10 Fernando Perez <fperez@colorado.edu>
2392
2398
2393 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2399 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2394
2400
2395 * iplib.py : Silence syntax error exceptions in tab-completion.
2401 * iplib.py : Silence syntax error exceptions in tab-completion.
2396
2402
2397 2004-08-05 Fernando Perez <fperez@colorado.edu>
2403 2004-08-05 Fernando Perez <fperez@colorado.edu>
2398
2404
2399 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2405 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2400 'color off' mark for continuation prompts. This was causing long
2406 'color off' mark for continuation prompts. This was causing long
2401 continuation lines to mis-wrap.
2407 continuation lines to mis-wrap.
2402
2408
2403 2004-08-01 Fernando Perez <fperez@colorado.edu>
2409 2004-08-01 Fernando Perez <fperez@colorado.edu>
2404
2410
2405 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2411 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2406 for building ipython to be a parameter. All this is necessary
2412 for building ipython to be a parameter. All this is necessary
2407 right now to have a multithreaded version, but this insane
2413 right now to have a multithreaded version, but this insane
2408 non-design will be cleaned up soon. For now, it's a hack that
2414 non-design will be cleaned up soon. For now, it's a hack that
2409 works.
2415 works.
2410
2416
2411 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2417 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2412 args in various places. No bugs so far, but it's a dangerous
2418 args in various places. No bugs so far, but it's a dangerous
2413 practice.
2419 practice.
2414
2420
2415 2004-07-31 Fernando Perez <fperez@colorado.edu>
2421 2004-07-31 Fernando Perez <fperez@colorado.edu>
2416
2422
2417 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2423 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2418 fix completion of files with dots in their names under most
2424 fix completion of files with dots in their names under most
2419 profiles (pysh was OK because the completion order is different).
2425 profiles (pysh was OK because the completion order is different).
2420
2426
2421 2004-07-27 Fernando Perez <fperez@colorado.edu>
2427 2004-07-27 Fernando Perez <fperez@colorado.edu>
2422
2428
2423 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2429 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2424 keywords manually, b/c the one in keyword.py was removed in python
2430 keywords manually, b/c the one in keyword.py was removed in python
2425 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2431 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2426 This is NOT a bug under python 2.3 and earlier.
2432 This is NOT a bug under python 2.3 and earlier.
2427
2433
2428 2004-07-26 Fernando Perez <fperez@colorado.edu>
2434 2004-07-26 Fernando Perez <fperez@colorado.edu>
2429
2435
2430 * IPython/ultraTB.py (VerboseTB.text): Add another
2436 * IPython/ultraTB.py (VerboseTB.text): Add another
2431 linecache.checkcache() call to try to prevent inspect.py from
2437 linecache.checkcache() call to try to prevent inspect.py from
2432 crashing under python 2.3. I think this fixes
2438 crashing under python 2.3. I think this fixes
2433 http://www.scipy.net/roundup/ipython/issue17.
2439 http://www.scipy.net/roundup/ipython/issue17.
2434
2440
2435 2004-07-26 *** Released version 0.6.2
2441 2004-07-26 *** Released version 0.6.2
2436
2442
2437 2004-07-26 Fernando Perez <fperez@colorado.edu>
2443 2004-07-26 Fernando Perez <fperez@colorado.edu>
2438
2444
2439 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2445 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2440 fail for any number.
2446 fail for any number.
2441 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2447 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2442 empty bookmarks.
2448 empty bookmarks.
2443
2449
2444 2004-07-26 *** Released version 0.6.1
2450 2004-07-26 *** Released version 0.6.1
2445
2451
2446 2004-07-26 Fernando Perez <fperez@colorado.edu>
2452 2004-07-26 Fernando Perez <fperez@colorado.edu>
2447
2453
2448 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2454 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2449
2455
2450 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2456 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2451 escaping '()[]{}' in filenames.
2457 escaping '()[]{}' in filenames.
2452
2458
2453 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2459 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2454 Python 2.2 users who lack a proper shlex.split.
2460 Python 2.2 users who lack a proper shlex.split.
2455
2461
2456 2004-07-19 Fernando Perez <fperez@colorado.edu>
2462 2004-07-19 Fernando Perez <fperez@colorado.edu>
2457
2463
2458 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2464 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2459 for reading readline's init file. I follow the normal chain:
2465 for reading readline's init file. I follow the normal chain:
2460 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2466 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2461 report by Mike Heeter. This closes
2467 report by Mike Heeter. This closes
2462 http://www.scipy.net/roundup/ipython/issue16.
2468 http://www.scipy.net/roundup/ipython/issue16.
2463
2469
2464 2004-07-18 Fernando Perez <fperez@colorado.edu>
2470 2004-07-18 Fernando Perez <fperez@colorado.edu>
2465
2471
2466 * IPython/iplib.py (__init__): Add better handling of '\' under
2472 * IPython/iplib.py (__init__): Add better handling of '\' under
2467 Win32 for filenames. After a patch by Ville.
2473 Win32 for filenames. After a patch by Ville.
2468
2474
2469 2004-07-17 Fernando Perez <fperez@colorado.edu>
2475 2004-07-17 Fernando Perez <fperez@colorado.edu>
2470
2476
2471 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2477 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2472 autocalling would be triggered for 'foo is bar' if foo is
2478 autocalling would be triggered for 'foo is bar' if foo is
2473 callable. I also cleaned up the autocall detection code to use a
2479 callable. I also cleaned up the autocall detection code to use a
2474 regexp, which is faster. Bug reported by Alexander Schmolck.
2480 regexp, which is faster. Bug reported by Alexander Schmolck.
2475
2481
2476 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2482 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2477 '?' in them would confuse the help system. Reported by Alex
2483 '?' in them would confuse the help system. Reported by Alex
2478 Schmolck.
2484 Schmolck.
2479
2485
2480 2004-07-16 Fernando Perez <fperez@colorado.edu>
2486 2004-07-16 Fernando Perez <fperez@colorado.edu>
2481
2487
2482 * IPython/GnuplotInteractive.py (__all__): added plot2.
2488 * IPython/GnuplotInteractive.py (__all__): added plot2.
2483
2489
2484 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2490 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2485 plotting dictionaries, lists or tuples of 1d arrays.
2491 plotting dictionaries, lists or tuples of 1d arrays.
2486
2492
2487 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2493 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2488 optimizations.
2494 optimizations.
2489
2495
2490 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2496 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2491 the information which was there from Janko's original IPP code:
2497 the information which was there from Janko's original IPP code:
2492
2498
2493 03.05.99 20:53 porto.ifm.uni-kiel.de
2499 03.05.99 20:53 porto.ifm.uni-kiel.de
2494 --Started changelog.
2500 --Started changelog.
2495 --make clear do what it say it does
2501 --make clear do what it say it does
2496 --added pretty output of lines from inputcache
2502 --added pretty output of lines from inputcache
2497 --Made Logger a mixin class, simplifies handling of switches
2503 --Made Logger a mixin class, simplifies handling of switches
2498 --Added own completer class. .string<TAB> expands to last history
2504 --Added own completer class. .string<TAB> expands to last history
2499 line which starts with string. The new expansion is also present
2505 line which starts with string. The new expansion is also present
2500 with Ctrl-r from the readline library. But this shows, who this
2506 with Ctrl-r from the readline library. But this shows, who this
2501 can be done for other cases.
2507 can be done for other cases.
2502 --Added convention that all shell functions should accept a
2508 --Added convention that all shell functions should accept a
2503 parameter_string This opens the door for different behaviour for
2509 parameter_string This opens the door for different behaviour for
2504 each function. @cd is a good example of this.
2510 each function. @cd is a good example of this.
2505
2511
2506 04.05.99 12:12 porto.ifm.uni-kiel.de
2512 04.05.99 12:12 porto.ifm.uni-kiel.de
2507 --added logfile rotation
2513 --added logfile rotation
2508 --added new mainloop method which freezes first the namespace
2514 --added new mainloop method which freezes first the namespace
2509
2515
2510 07.05.99 21:24 porto.ifm.uni-kiel.de
2516 07.05.99 21:24 porto.ifm.uni-kiel.de
2511 --added the docreader classes. Now there is a help system.
2517 --added the docreader classes. Now there is a help system.
2512 -This is only a first try. Currently it's not easy to put new
2518 -This is only a first try. Currently it's not easy to put new
2513 stuff in the indices. But this is the way to go. Info would be
2519 stuff in the indices. But this is the way to go. Info would be
2514 better, but HTML is every where and not everybody has an info
2520 better, but HTML is every where and not everybody has an info
2515 system installed and it's not so easy to change html-docs to info.
2521 system installed and it's not so easy to change html-docs to info.
2516 --added global logfile option
2522 --added global logfile option
2517 --there is now a hook for object inspection method pinfo needs to
2523 --there is now a hook for object inspection method pinfo needs to
2518 be provided for this. Can be reached by two '??'.
2524 be provided for this. Can be reached by two '??'.
2519
2525
2520 08.05.99 20:51 porto.ifm.uni-kiel.de
2526 08.05.99 20:51 porto.ifm.uni-kiel.de
2521 --added a README
2527 --added a README
2522 --bug in rc file. Something has changed so functions in the rc
2528 --bug in rc file. Something has changed so functions in the rc
2523 file need to reference the shell and not self. Not clear if it's a
2529 file need to reference the shell and not self. Not clear if it's a
2524 bug or feature.
2530 bug or feature.
2525 --changed rc file for new behavior
2531 --changed rc file for new behavior
2526
2532
2527 2004-07-15 Fernando Perez <fperez@colorado.edu>
2533 2004-07-15 Fernando Perez <fperez@colorado.edu>
2528
2534
2529 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2535 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2530 cache was falling out of sync in bizarre manners when multi-line
2536 cache was falling out of sync in bizarre manners when multi-line
2531 input was present. Minor optimizations and cleanup.
2537 input was present. Minor optimizations and cleanup.
2532
2538
2533 (Logger): Remove old Changelog info for cleanup. This is the
2539 (Logger): Remove old Changelog info for cleanup. This is the
2534 information which was there from Janko's original code:
2540 information which was there from Janko's original code:
2535
2541
2536 Changes to Logger: - made the default log filename a parameter
2542 Changes to Logger: - made the default log filename a parameter
2537
2543
2538 - put a check for lines beginning with !@? in log(). Needed
2544 - put a check for lines beginning with !@? in log(). Needed
2539 (even if the handlers properly log their lines) for mid-session
2545 (even if the handlers properly log their lines) for mid-session
2540 logging activation to work properly. Without this, lines logged
2546 logging activation to work properly. Without this, lines logged
2541 in mid session, which get read from the cache, would end up
2547 in mid session, which get read from the cache, would end up
2542 'bare' (with !@? in the open) in the log. Now they are caught
2548 'bare' (with !@? in the open) in the log. Now they are caught
2543 and prepended with a #.
2549 and prepended with a #.
2544
2550
2545 * IPython/iplib.py (InteractiveShell.init_readline): added check
2551 * IPython/iplib.py (InteractiveShell.init_readline): added check
2546 in case MagicCompleter fails to be defined, so we don't crash.
2552 in case MagicCompleter fails to be defined, so we don't crash.
2547
2553
2548 2004-07-13 Fernando Perez <fperez@colorado.edu>
2554 2004-07-13 Fernando Perez <fperez@colorado.edu>
2549
2555
2550 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2556 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2551 of EPS if the requested filename ends in '.eps'.
2557 of EPS if the requested filename ends in '.eps'.
2552
2558
2553 2004-07-04 Fernando Perez <fperez@colorado.edu>
2559 2004-07-04 Fernando Perez <fperez@colorado.edu>
2554
2560
2555 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2561 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2556 escaping of quotes when calling the shell.
2562 escaping of quotes when calling the shell.
2557
2563
2558 2004-07-02 Fernando Perez <fperez@colorado.edu>
2564 2004-07-02 Fernando Perez <fperez@colorado.edu>
2559
2565
2560 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2566 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2561 gettext not working because we were clobbering '_'. Fixes
2567 gettext not working because we were clobbering '_'. Fixes
2562 http://www.scipy.net/roundup/ipython/issue6.
2568 http://www.scipy.net/roundup/ipython/issue6.
2563
2569
2564 2004-07-01 Fernando Perez <fperez@colorado.edu>
2570 2004-07-01 Fernando Perez <fperez@colorado.edu>
2565
2571
2566 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2572 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2567 into @cd. Patch by Ville.
2573 into @cd. Patch by Ville.
2568
2574
2569 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2575 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2570 new function to store things after ipmaker runs. Patch by Ville.
2576 new function to store things after ipmaker runs. Patch by Ville.
2571 Eventually this will go away once ipmaker is removed and the class
2577 Eventually this will go away once ipmaker is removed and the class
2572 gets cleaned up, but for now it's ok. Key functionality here is
2578 gets cleaned up, but for now it's ok. Key functionality here is
2573 the addition of the persistent storage mechanism, a dict for
2579 the addition of the persistent storage mechanism, a dict for
2574 keeping data across sessions (for now just bookmarks, but more can
2580 keeping data across sessions (for now just bookmarks, but more can
2575 be implemented later).
2581 be implemented later).
2576
2582
2577 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2583 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2578 persistent across sections. Patch by Ville, I modified it
2584 persistent across sections. Patch by Ville, I modified it
2579 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2585 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2580 added a '-l' option to list all bookmarks.
2586 added a '-l' option to list all bookmarks.
2581
2587
2582 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2588 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2583 center for cleanup. Registered with atexit.register(). I moved
2589 center for cleanup. Registered with atexit.register(). I moved
2584 here the old exit_cleanup(). After a patch by Ville.
2590 here the old exit_cleanup(). After a patch by Ville.
2585
2591
2586 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2592 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2587 characters in the hacked shlex_split for python 2.2.
2593 characters in the hacked shlex_split for python 2.2.
2588
2594
2589 * IPython/iplib.py (file_matches): more fixes to filenames with
2595 * IPython/iplib.py (file_matches): more fixes to filenames with
2590 whitespace in them. It's not perfect, but limitations in python's
2596 whitespace in them. It's not perfect, but limitations in python's
2591 readline make it impossible to go further.
2597 readline make it impossible to go further.
2592
2598
2593 2004-06-29 Fernando Perez <fperez@colorado.edu>
2599 2004-06-29 Fernando Perez <fperez@colorado.edu>
2594
2600
2595 * IPython/iplib.py (file_matches): escape whitespace correctly in
2601 * IPython/iplib.py (file_matches): escape whitespace correctly in
2596 filename completions. Bug reported by Ville.
2602 filename completions. Bug reported by Ville.
2597
2603
2598 2004-06-28 Fernando Perez <fperez@colorado.edu>
2604 2004-06-28 Fernando Perez <fperez@colorado.edu>
2599
2605
2600 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2606 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2601 the history file will be called 'history-PROFNAME' (or just
2607 the history file will be called 'history-PROFNAME' (or just
2602 'history' if no profile is loaded). I was getting annoyed at
2608 'history' if no profile is loaded). I was getting annoyed at
2603 getting my Numerical work history clobbered by pysh sessions.
2609 getting my Numerical work history clobbered by pysh sessions.
2604
2610
2605 * IPython/iplib.py (InteractiveShell.__init__): Internal
2611 * IPython/iplib.py (InteractiveShell.__init__): Internal
2606 getoutputerror() function so that we can honor the system_verbose
2612 getoutputerror() function so that we can honor the system_verbose
2607 flag for _all_ system calls. I also added escaping of #
2613 flag for _all_ system calls. I also added escaping of #
2608 characters here to avoid confusing Itpl.
2614 characters here to avoid confusing Itpl.
2609
2615
2610 * IPython/Magic.py (shlex_split): removed call to shell in
2616 * IPython/Magic.py (shlex_split): removed call to shell in
2611 parse_options and replaced it with shlex.split(). The annoying
2617 parse_options and replaced it with shlex.split(). The annoying
2612 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2618 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2613 to backport it from 2.3, with several frail hacks (the shlex
2619 to backport it from 2.3, with several frail hacks (the shlex
2614 module is rather limited in 2.2). Thanks to a suggestion by Ville
2620 module is rather limited in 2.2). Thanks to a suggestion by Ville
2615 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2621 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2616 problem.
2622 problem.
2617
2623
2618 (Magic.magic_system_verbose): new toggle to print the actual
2624 (Magic.magic_system_verbose): new toggle to print the actual
2619 system calls made by ipython. Mainly for debugging purposes.
2625 system calls made by ipython. Mainly for debugging purposes.
2620
2626
2621 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2627 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2622 doesn't support persistence. Reported (and fix suggested) by
2628 doesn't support persistence. Reported (and fix suggested) by
2623 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2629 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2624
2630
2625 2004-06-26 Fernando Perez <fperez@colorado.edu>
2631 2004-06-26 Fernando Perez <fperez@colorado.edu>
2626
2632
2627 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2633 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2628 continue prompts.
2634 continue prompts.
2629
2635
2630 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2636 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2631 function (basically a big docstring) and a few more things here to
2637 function (basically a big docstring) and a few more things here to
2632 speedup startup. pysh.py is now very lightweight. We want because
2638 speedup startup. pysh.py is now very lightweight. We want because
2633 it gets execfile'd, while InterpreterExec gets imported, so
2639 it gets execfile'd, while InterpreterExec gets imported, so
2634 byte-compilation saves time.
2640 byte-compilation saves time.
2635
2641
2636 2004-06-25 Fernando Perez <fperez@colorado.edu>
2642 2004-06-25 Fernando Perez <fperez@colorado.edu>
2637
2643
2638 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2644 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2639 -NUM', which was recently broken.
2645 -NUM', which was recently broken.
2640
2646
2641 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2647 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2642 in multi-line input (but not !!, which doesn't make sense there).
2648 in multi-line input (but not !!, which doesn't make sense there).
2643
2649
2644 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2650 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2645 It's just too useful, and people can turn it off in the less
2651 It's just too useful, and people can turn it off in the less
2646 common cases where it's a problem.
2652 common cases where it's a problem.
2647
2653
2648 2004-06-24 Fernando Perez <fperez@colorado.edu>
2654 2004-06-24 Fernando Perez <fperez@colorado.edu>
2649
2655
2650 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2656 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2651 special syntaxes (like alias calling) is now allied in multi-line
2657 special syntaxes (like alias calling) is now allied in multi-line
2652 input. This is still _very_ experimental, but it's necessary for
2658 input. This is still _very_ experimental, but it's necessary for
2653 efficient shell usage combining python looping syntax with system
2659 efficient shell usage combining python looping syntax with system
2654 calls. For now it's restricted to aliases, I don't think it
2660 calls. For now it's restricted to aliases, I don't think it
2655 really even makes sense to have this for magics.
2661 really even makes sense to have this for magics.
2656
2662
2657 2004-06-23 Fernando Perez <fperez@colorado.edu>
2663 2004-06-23 Fernando Perez <fperez@colorado.edu>
2658
2664
2659 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2665 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2660 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2666 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2661
2667
2662 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2668 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2663 extensions under Windows (after code sent by Gary Bishop). The
2669 extensions under Windows (after code sent by Gary Bishop). The
2664 extensions considered 'executable' are stored in IPython's rc
2670 extensions considered 'executable' are stored in IPython's rc
2665 structure as win_exec_ext.
2671 structure as win_exec_ext.
2666
2672
2667 * IPython/genutils.py (shell): new function, like system() but
2673 * IPython/genutils.py (shell): new function, like system() but
2668 without return value. Very useful for interactive shell work.
2674 without return value. Very useful for interactive shell work.
2669
2675
2670 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2676 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2671 delete aliases.
2677 delete aliases.
2672
2678
2673 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2679 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2674 sure that the alias table doesn't contain python keywords.
2680 sure that the alias table doesn't contain python keywords.
2675
2681
2676 2004-06-21 Fernando Perez <fperez@colorado.edu>
2682 2004-06-21 Fernando Perez <fperez@colorado.edu>
2677
2683
2678 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2684 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2679 non-existent items are found in $PATH. Reported by Thorsten.
2685 non-existent items are found in $PATH. Reported by Thorsten.
2680
2686
2681 2004-06-20 Fernando Perez <fperez@colorado.edu>
2687 2004-06-20 Fernando Perez <fperez@colorado.edu>
2682
2688
2683 * IPython/iplib.py (complete): modified the completer so that the
2689 * IPython/iplib.py (complete): modified the completer so that the
2684 order of priorities can be easily changed at runtime.
2690 order of priorities can be easily changed at runtime.
2685
2691
2686 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2692 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2687 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2693 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2688
2694
2689 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2695 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2690 expand Python variables prepended with $ in all system calls. The
2696 expand Python variables prepended with $ in all system calls. The
2691 same was done to InteractiveShell.handle_shell_escape. Now all
2697 same was done to InteractiveShell.handle_shell_escape. Now all
2692 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2698 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2693 expansion of python variables and expressions according to the
2699 expansion of python variables and expressions according to the
2694 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2700 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2695
2701
2696 Though PEP-215 has been rejected, a similar (but simpler) one
2702 Though PEP-215 has been rejected, a similar (but simpler) one
2697 seems like it will go into Python 2.4, PEP-292 -
2703 seems like it will go into Python 2.4, PEP-292 -
2698 http://www.python.org/peps/pep-0292.html.
2704 http://www.python.org/peps/pep-0292.html.
2699
2705
2700 I'll keep the full syntax of PEP-215, since IPython has since the
2706 I'll keep the full syntax of PEP-215, since IPython has since the
2701 start used Ka-Ping Yee's reference implementation discussed there
2707 start used Ka-Ping Yee's reference implementation discussed there
2702 (Itpl), and I actually like the powerful semantics it offers.
2708 (Itpl), and I actually like the powerful semantics it offers.
2703
2709
2704 In order to access normal shell variables, the $ has to be escaped
2710 In order to access normal shell variables, the $ has to be escaped
2705 via an extra $. For example:
2711 via an extra $. For example:
2706
2712
2707 In [7]: PATH='a python variable'
2713 In [7]: PATH='a python variable'
2708
2714
2709 In [8]: !echo $PATH
2715 In [8]: !echo $PATH
2710 a python variable
2716 a python variable
2711
2717
2712 In [9]: !echo $$PATH
2718 In [9]: !echo $$PATH
2713 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2719 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2714
2720
2715 (Magic.parse_options): escape $ so the shell doesn't evaluate
2721 (Magic.parse_options): escape $ so the shell doesn't evaluate
2716 things prematurely.
2722 things prematurely.
2717
2723
2718 * IPython/iplib.py (InteractiveShell.call_alias): added the
2724 * IPython/iplib.py (InteractiveShell.call_alias): added the
2719 ability for aliases to expand python variables via $.
2725 ability for aliases to expand python variables via $.
2720
2726
2721 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2727 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2722 system, now there's a @rehash/@rehashx pair of magics. These work
2728 system, now there's a @rehash/@rehashx pair of magics. These work
2723 like the csh rehash command, and can be invoked at any time. They
2729 like the csh rehash command, and can be invoked at any time. They
2724 build a table of aliases to everything in the user's $PATH
2730 build a table of aliases to everything in the user's $PATH
2725 (@rehash uses everything, @rehashx is slower but only adds
2731 (@rehash uses everything, @rehashx is slower but only adds
2726 executable files). With this, the pysh.py-based shell profile can
2732 executable files). With this, the pysh.py-based shell profile can
2727 now simply call rehash upon startup, and full access to all
2733 now simply call rehash upon startup, and full access to all
2728 programs in the user's path is obtained.
2734 programs in the user's path is obtained.
2729
2735
2730 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2736 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2731 functionality is now fully in place. I removed the old dynamic
2737 functionality is now fully in place. I removed the old dynamic
2732 code generation based approach, in favor of a much lighter one
2738 code generation based approach, in favor of a much lighter one
2733 based on a simple dict. The advantage is that this allows me to
2739 based on a simple dict. The advantage is that this allows me to
2734 now have thousands of aliases with negligible cost (unthinkable
2740 now have thousands of aliases with negligible cost (unthinkable
2735 with the old system).
2741 with the old system).
2736
2742
2737 2004-06-19 Fernando Perez <fperez@colorado.edu>
2743 2004-06-19 Fernando Perez <fperez@colorado.edu>
2738
2744
2739 * IPython/iplib.py (__init__): extended MagicCompleter class to
2745 * IPython/iplib.py (__init__): extended MagicCompleter class to
2740 also complete (last in priority) on user aliases.
2746 also complete (last in priority) on user aliases.
2741
2747
2742 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2748 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2743 call to eval.
2749 call to eval.
2744 (ItplNS.__init__): Added a new class which functions like Itpl,
2750 (ItplNS.__init__): Added a new class which functions like Itpl,
2745 but allows configuring the namespace for the evaluation to occur
2751 but allows configuring the namespace for the evaluation to occur
2746 in.
2752 in.
2747
2753
2748 2004-06-18 Fernando Perez <fperez@colorado.edu>
2754 2004-06-18 Fernando Perez <fperez@colorado.edu>
2749
2755
2750 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2756 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2751 better message when 'exit' or 'quit' are typed (a common newbie
2757 better message when 'exit' or 'quit' are typed (a common newbie
2752 confusion).
2758 confusion).
2753
2759
2754 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2760 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2755 check for Windows users.
2761 check for Windows users.
2756
2762
2757 * IPython/iplib.py (InteractiveShell.user_setup): removed
2763 * IPython/iplib.py (InteractiveShell.user_setup): removed
2758 disabling of colors for Windows. I'll test at runtime and issue a
2764 disabling of colors for Windows. I'll test at runtime and issue a
2759 warning if Gary's readline isn't found, as to nudge users to
2765 warning if Gary's readline isn't found, as to nudge users to
2760 download it.
2766 download it.
2761
2767
2762 2004-06-16 Fernando Perez <fperez@colorado.edu>
2768 2004-06-16 Fernando Perez <fperez@colorado.edu>
2763
2769
2764 * IPython/genutils.py (Stream.__init__): changed to print errors
2770 * IPython/genutils.py (Stream.__init__): changed to print errors
2765 to sys.stderr. I had a circular dependency here. Now it's
2771 to sys.stderr. I had a circular dependency here. Now it's
2766 possible to run ipython as IDLE's shell (consider this pre-alpha,
2772 possible to run ipython as IDLE's shell (consider this pre-alpha,
2767 since true stdout things end up in the starting terminal instead
2773 since true stdout things end up in the starting terminal instead
2768 of IDLE's out).
2774 of IDLE's out).
2769
2775
2770 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2776 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2771 users who haven't # updated their prompt_in2 definitions. Remove
2777 users who haven't # updated their prompt_in2 definitions. Remove
2772 eventually.
2778 eventually.
2773 (multiple_replace): added credit to original ASPN recipe.
2779 (multiple_replace): added credit to original ASPN recipe.
2774
2780
2775 2004-06-15 Fernando Perez <fperez@colorado.edu>
2781 2004-06-15 Fernando Perez <fperez@colorado.edu>
2776
2782
2777 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2783 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2778 list of auto-defined aliases.
2784 list of auto-defined aliases.
2779
2785
2780 2004-06-13 Fernando Perez <fperez@colorado.edu>
2786 2004-06-13 Fernando Perez <fperez@colorado.edu>
2781
2787
2782 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2788 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2783 install was really requested (so setup.py can be used for other
2789 install was really requested (so setup.py can be used for other
2784 things under Windows).
2790 things under Windows).
2785
2791
2786 2004-06-10 Fernando Perez <fperez@colorado.edu>
2792 2004-06-10 Fernando Perez <fperez@colorado.edu>
2787
2793
2788 * IPython/Logger.py (Logger.create_log): Manually remove any old
2794 * IPython/Logger.py (Logger.create_log): Manually remove any old
2789 backup, since os.remove may fail under Windows. Fixes bug
2795 backup, since os.remove may fail under Windows. Fixes bug
2790 reported by Thorsten.
2796 reported by Thorsten.
2791
2797
2792 2004-06-09 Fernando Perez <fperez@colorado.edu>
2798 2004-06-09 Fernando Perez <fperez@colorado.edu>
2793
2799
2794 * examples/example-embed.py: fixed all references to %n (replaced
2800 * examples/example-embed.py: fixed all references to %n (replaced
2795 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2801 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2796 for all examples and the manual as well.
2802 for all examples and the manual as well.
2797
2803
2798 2004-06-08 Fernando Perez <fperez@colorado.edu>
2804 2004-06-08 Fernando Perez <fperez@colorado.edu>
2799
2805
2800 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2806 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2801 alignment and color management. All 3 prompt subsystems now
2807 alignment and color management. All 3 prompt subsystems now
2802 inherit from BasePrompt.
2808 inherit from BasePrompt.
2803
2809
2804 * tools/release: updates for windows installer build and tag rpms
2810 * tools/release: updates for windows installer build and tag rpms
2805 with python version (since paths are fixed).
2811 with python version (since paths are fixed).
2806
2812
2807 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2813 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2808 which will become eventually obsolete. Also fixed the default
2814 which will become eventually obsolete. Also fixed the default
2809 prompt_in2 to use \D, so at least new users start with the correct
2815 prompt_in2 to use \D, so at least new users start with the correct
2810 defaults.
2816 defaults.
2811 WARNING: Users with existing ipythonrc files will need to apply
2817 WARNING: Users with existing ipythonrc files will need to apply
2812 this fix manually!
2818 this fix manually!
2813
2819
2814 * setup.py: make windows installer (.exe). This is finally the
2820 * setup.py: make windows installer (.exe). This is finally the
2815 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2821 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2816 which I hadn't included because it required Python 2.3 (or recent
2822 which I hadn't included because it required Python 2.3 (or recent
2817 distutils).
2823 distutils).
2818
2824
2819 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2825 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2820 usage of new '\D' escape.
2826 usage of new '\D' escape.
2821
2827
2822 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2828 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2823 lacks os.getuid())
2829 lacks os.getuid())
2824 (CachedOutput.set_colors): Added the ability to turn coloring
2830 (CachedOutput.set_colors): Added the ability to turn coloring
2825 on/off with @colors even for manually defined prompt colors. It
2831 on/off with @colors even for manually defined prompt colors. It
2826 uses a nasty global, but it works safely and via the generic color
2832 uses a nasty global, but it works safely and via the generic color
2827 handling mechanism.
2833 handling mechanism.
2828 (Prompt2.__init__): Introduced new escape '\D' for continuation
2834 (Prompt2.__init__): Introduced new escape '\D' for continuation
2829 prompts. It represents the counter ('\#') as dots.
2835 prompts. It represents the counter ('\#') as dots.
2830 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2836 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2831 need to update their ipythonrc files and replace '%n' with '\D' in
2837 need to update their ipythonrc files and replace '%n' with '\D' in
2832 their prompt_in2 settings everywhere. Sorry, but there's
2838 their prompt_in2 settings everywhere. Sorry, but there's
2833 otherwise no clean way to get all prompts to properly align. The
2839 otherwise no clean way to get all prompts to properly align. The
2834 ipythonrc shipped with IPython has been updated.
2840 ipythonrc shipped with IPython has been updated.
2835
2841
2836 2004-06-07 Fernando Perez <fperez@colorado.edu>
2842 2004-06-07 Fernando Perez <fperez@colorado.edu>
2837
2843
2838 * setup.py (isfile): Pass local_icons option to latex2html, so the
2844 * setup.py (isfile): Pass local_icons option to latex2html, so the
2839 resulting HTML file is self-contained. Thanks to
2845 resulting HTML file is self-contained. Thanks to
2840 dryice-AT-liu.com.cn for the tip.
2846 dryice-AT-liu.com.cn for the tip.
2841
2847
2842 * pysh.py: I created a new profile 'shell', which implements a
2848 * pysh.py: I created a new profile 'shell', which implements a
2843 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2849 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2844 system shell, nor will it become one anytime soon. It's mainly
2850 system shell, nor will it become one anytime soon. It's mainly
2845 meant to illustrate the use of the new flexible bash-like prompts.
2851 meant to illustrate the use of the new flexible bash-like prompts.
2846 I guess it could be used by hardy souls for true shell management,
2852 I guess it could be used by hardy souls for true shell management,
2847 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2853 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2848 profile. This uses the InterpreterExec extension provided by
2854 profile. This uses the InterpreterExec extension provided by
2849 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2855 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2850
2856
2851 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2857 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2852 auto-align itself with the length of the previous input prompt
2858 auto-align itself with the length of the previous input prompt
2853 (taking into account the invisible color escapes).
2859 (taking into account the invisible color escapes).
2854 (CachedOutput.__init__): Large restructuring of this class. Now
2860 (CachedOutput.__init__): Large restructuring of this class. Now
2855 all three prompts (primary1, primary2, output) are proper objects,
2861 all three prompts (primary1, primary2, output) are proper objects,
2856 managed by the 'parent' CachedOutput class. The code is still a
2862 managed by the 'parent' CachedOutput class. The code is still a
2857 bit hackish (all prompts share state via a pointer to the cache),
2863 bit hackish (all prompts share state via a pointer to the cache),
2858 but it's overall far cleaner than before.
2864 but it's overall far cleaner than before.
2859
2865
2860 * IPython/genutils.py (getoutputerror): modified to add verbose,
2866 * IPython/genutils.py (getoutputerror): modified to add verbose,
2861 debug and header options. This makes the interface of all getout*
2867 debug and header options. This makes the interface of all getout*
2862 functions uniform.
2868 functions uniform.
2863 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2869 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2864
2870
2865 * IPython/Magic.py (Magic.default_option): added a function to
2871 * IPython/Magic.py (Magic.default_option): added a function to
2866 allow registering default options for any magic command. This
2872 allow registering default options for any magic command. This
2867 makes it easy to have profiles which customize the magics globally
2873 makes it easy to have profiles which customize the magics globally
2868 for a certain use. The values set through this function are
2874 for a certain use. The values set through this function are
2869 picked up by the parse_options() method, which all magics should
2875 picked up by the parse_options() method, which all magics should
2870 use to parse their options.
2876 use to parse their options.
2871
2877
2872 * IPython/genutils.py (warn): modified the warnings framework to
2878 * IPython/genutils.py (warn): modified the warnings framework to
2873 use the Term I/O class. I'm trying to slowly unify all of
2879 use the Term I/O class. I'm trying to slowly unify all of
2874 IPython's I/O operations to pass through Term.
2880 IPython's I/O operations to pass through Term.
2875
2881
2876 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2882 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2877 the secondary prompt to correctly match the length of the primary
2883 the secondary prompt to correctly match the length of the primary
2878 one for any prompt. Now multi-line code will properly line up
2884 one for any prompt. Now multi-line code will properly line up
2879 even for path dependent prompts, such as the new ones available
2885 even for path dependent prompts, such as the new ones available
2880 via the prompt_specials.
2886 via the prompt_specials.
2881
2887
2882 2004-06-06 Fernando Perez <fperez@colorado.edu>
2888 2004-06-06 Fernando Perez <fperez@colorado.edu>
2883
2889
2884 * IPython/Prompts.py (prompt_specials): Added the ability to have
2890 * IPython/Prompts.py (prompt_specials): Added the ability to have
2885 bash-like special sequences in the prompts, which get
2891 bash-like special sequences in the prompts, which get
2886 automatically expanded. Things like hostname, current working
2892 automatically expanded. Things like hostname, current working
2887 directory and username are implemented already, but it's easy to
2893 directory and username are implemented already, but it's easy to
2888 add more in the future. Thanks to a patch by W.J. van der Laan
2894 add more in the future. Thanks to a patch by W.J. van der Laan
2889 <gnufnork-AT-hetdigitalegat.nl>
2895 <gnufnork-AT-hetdigitalegat.nl>
2890 (prompt_specials): Added color support for prompt strings, so
2896 (prompt_specials): Added color support for prompt strings, so
2891 users can define arbitrary color setups for their prompts.
2897 users can define arbitrary color setups for their prompts.
2892
2898
2893 2004-06-05 Fernando Perez <fperez@colorado.edu>
2899 2004-06-05 Fernando Perez <fperez@colorado.edu>
2894
2900
2895 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2901 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2896 code to load Gary Bishop's readline and configure it
2902 code to load Gary Bishop's readline and configure it
2897 automatically. Thanks to Gary for help on this.
2903 automatically. Thanks to Gary for help on this.
2898
2904
2899 2004-06-01 Fernando Perez <fperez@colorado.edu>
2905 2004-06-01 Fernando Perez <fperez@colorado.edu>
2900
2906
2901 * IPython/Logger.py (Logger.create_log): fix bug for logging
2907 * IPython/Logger.py (Logger.create_log): fix bug for logging
2902 with no filename (previous fix was incomplete).
2908 with no filename (previous fix was incomplete).
2903
2909
2904 2004-05-25 Fernando Perez <fperez@colorado.edu>
2910 2004-05-25 Fernando Perez <fperez@colorado.edu>
2905
2911
2906 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2912 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2907 parens would get passed to the shell.
2913 parens would get passed to the shell.
2908
2914
2909 2004-05-20 Fernando Perez <fperez@colorado.edu>
2915 2004-05-20 Fernando Perez <fperez@colorado.edu>
2910
2916
2911 * IPython/Magic.py (Magic.magic_prun): changed default profile
2917 * IPython/Magic.py (Magic.magic_prun): changed default profile
2912 sort order to 'time' (the more common profiling need).
2918 sort order to 'time' (the more common profiling need).
2913
2919
2914 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2920 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2915 so that source code shown is guaranteed in sync with the file on
2921 so that source code shown is guaranteed in sync with the file on
2916 disk (also changed in psource). Similar fix to the one for
2922 disk (also changed in psource). Similar fix to the one for
2917 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2923 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2918 <yann.ledu-AT-noos.fr>.
2924 <yann.ledu-AT-noos.fr>.
2919
2925
2920 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2926 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2921 with a single option would not be correctly parsed. Closes
2927 with a single option would not be correctly parsed. Closes
2922 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2928 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2923 introduced in 0.6.0 (on 2004-05-06).
2929 introduced in 0.6.0 (on 2004-05-06).
2924
2930
2925 2004-05-13 *** Released version 0.6.0
2931 2004-05-13 *** Released version 0.6.0
2926
2932
2927 2004-05-13 Fernando Perez <fperez@colorado.edu>
2933 2004-05-13 Fernando Perez <fperez@colorado.edu>
2928
2934
2929 * debian/: Added debian/ directory to CVS, so that debian support
2935 * debian/: Added debian/ directory to CVS, so that debian support
2930 is publicly accessible. The debian package is maintained by Jack
2936 is publicly accessible. The debian package is maintained by Jack
2931 Moffit <jack-AT-xiph.org>.
2937 Moffit <jack-AT-xiph.org>.
2932
2938
2933 * Documentation: included the notes about an ipython-based system
2939 * Documentation: included the notes about an ipython-based system
2934 shell (the hypothetical 'pysh') into the new_design.pdf document,
2940 shell (the hypothetical 'pysh') into the new_design.pdf document,
2935 so that these ideas get distributed to users along with the
2941 so that these ideas get distributed to users along with the
2936 official documentation.
2942 official documentation.
2937
2943
2938 2004-05-10 Fernando Perez <fperez@colorado.edu>
2944 2004-05-10 Fernando Perez <fperez@colorado.edu>
2939
2945
2940 * IPython/Logger.py (Logger.create_log): fix recently introduced
2946 * IPython/Logger.py (Logger.create_log): fix recently introduced
2941 bug (misindented line) where logstart would fail when not given an
2947 bug (misindented line) where logstart would fail when not given an
2942 explicit filename.
2948 explicit filename.
2943
2949
2944 2004-05-09 Fernando Perez <fperez@colorado.edu>
2950 2004-05-09 Fernando Perez <fperez@colorado.edu>
2945
2951
2946 * IPython/Magic.py (Magic.parse_options): skip system call when
2952 * IPython/Magic.py (Magic.parse_options): skip system call when
2947 there are no options to look for. Faster, cleaner for the common
2953 there are no options to look for. Faster, cleaner for the common
2948 case.
2954 case.
2949
2955
2950 * Documentation: many updates to the manual: describing Windows
2956 * Documentation: many updates to the manual: describing Windows
2951 support better, Gnuplot updates, credits, misc small stuff. Also
2957 support better, Gnuplot updates, credits, misc small stuff. Also
2952 updated the new_design doc a bit.
2958 updated the new_design doc a bit.
2953
2959
2954 2004-05-06 *** Released version 0.6.0.rc1
2960 2004-05-06 *** Released version 0.6.0.rc1
2955
2961
2956 2004-05-06 Fernando Perez <fperez@colorado.edu>
2962 2004-05-06 Fernando Perez <fperez@colorado.edu>
2957
2963
2958 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2964 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2959 operations to use the vastly more efficient list/''.join() method.
2965 operations to use the vastly more efficient list/''.join() method.
2960 (FormattedTB.text): Fix
2966 (FormattedTB.text): Fix
2961 http://www.scipy.net/roundup/ipython/issue12 - exception source
2967 http://www.scipy.net/roundup/ipython/issue12 - exception source
2962 extract not updated after reload. Thanks to Mike Salib
2968 extract not updated after reload. Thanks to Mike Salib
2963 <msalib-AT-mit.edu> for pinning the source of the problem.
2969 <msalib-AT-mit.edu> for pinning the source of the problem.
2964 Fortunately, the solution works inside ipython and doesn't require
2970 Fortunately, the solution works inside ipython and doesn't require
2965 any changes to python proper.
2971 any changes to python proper.
2966
2972
2967 * IPython/Magic.py (Magic.parse_options): Improved to process the
2973 * IPython/Magic.py (Magic.parse_options): Improved to process the
2968 argument list as a true shell would (by actually using the
2974 argument list as a true shell would (by actually using the
2969 underlying system shell). This way, all @magics automatically get
2975 underlying system shell). This way, all @magics automatically get
2970 shell expansion for variables. Thanks to a comment by Alex
2976 shell expansion for variables. Thanks to a comment by Alex
2971 Schmolck.
2977 Schmolck.
2972
2978
2973 2004-04-04 Fernando Perez <fperez@colorado.edu>
2979 2004-04-04 Fernando Perez <fperez@colorado.edu>
2974
2980
2975 * IPython/iplib.py (InteractiveShell.interact): Added a special
2981 * IPython/iplib.py (InteractiveShell.interact): Added a special
2976 trap for a debugger quit exception, which is basically impossible
2982 trap for a debugger quit exception, which is basically impossible
2977 to handle by normal mechanisms, given what pdb does to the stack.
2983 to handle by normal mechanisms, given what pdb does to the stack.
2978 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2984 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2979
2985
2980 2004-04-03 Fernando Perez <fperez@colorado.edu>
2986 2004-04-03 Fernando Perez <fperez@colorado.edu>
2981
2987
2982 * IPython/genutils.py (Term): Standardized the names of the Term
2988 * IPython/genutils.py (Term): Standardized the names of the Term
2983 class streams to cin/cout/cerr, following C++ naming conventions
2989 class streams to cin/cout/cerr, following C++ naming conventions
2984 (I can't use in/out/err because 'in' is not a valid attribute
2990 (I can't use in/out/err because 'in' is not a valid attribute
2985 name).
2991 name).
2986
2992
2987 * IPython/iplib.py (InteractiveShell.interact): don't increment
2993 * IPython/iplib.py (InteractiveShell.interact): don't increment
2988 the prompt if there's no user input. By Daniel 'Dang' Griffith
2994 the prompt if there's no user input. By Daniel 'Dang' Griffith
2989 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2995 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2990 Francois Pinard.
2996 Francois Pinard.
2991
2997
2992 2004-04-02 Fernando Perez <fperez@colorado.edu>
2998 2004-04-02 Fernando Perez <fperez@colorado.edu>
2993
2999
2994 * IPython/genutils.py (Stream.__init__): Modified to survive at
3000 * IPython/genutils.py (Stream.__init__): Modified to survive at
2995 least importing in contexts where stdin/out/err aren't true file
3001 least importing in contexts where stdin/out/err aren't true file
2996 objects, such as PyCrust (they lack fileno() and mode). However,
3002 objects, such as PyCrust (they lack fileno() and mode). However,
2997 the recovery facilities which rely on these things existing will
3003 the recovery facilities which rely on these things existing will
2998 not work.
3004 not work.
2999
3005
3000 2004-04-01 Fernando Perez <fperez@colorado.edu>
3006 2004-04-01 Fernando Perez <fperez@colorado.edu>
3001
3007
3002 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
3008 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
3003 use the new getoutputerror() function, so it properly
3009 use the new getoutputerror() function, so it properly
3004 distinguishes stdout/err.
3010 distinguishes stdout/err.
3005
3011
3006 * IPython/genutils.py (getoutputerror): added a function to
3012 * IPython/genutils.py (getoutputerror): added a function to
3007 capture separately the standard output and error of a command.
3013 capture separately the standard output and error of a command.
3008 After a comment from dang on the mailing lists. This code is
3014 After a comment from dang on the mailing lists. This code is
3009 basically a modified version of commands.getstatusoutput(), from
3015 basically a modified version of commands.getstatusoutput(), from
3010 the standard library.
3016 the standard library.
3011
3017
3012 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3018 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3013 '!!' as a special syntax (shorthand) to access @sx.
3019 '!!' as a special syntax (shorthand) to access @sx.
3014
3020
3015 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3021 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3016 command and return its output as a list split on '\n'.
3022 command and return its output as a list split on '\n'.
3017
3023
3018 2004-03-31 Fernando Perez <fperez@colorado.edu>
3024 2004-03-31 Fernando Perez <fperez@colorado.edu>
3019
3025
3020 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3026 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3021 method to dictionaries used as FakeModule instances if they lack
3027 method to dictionaries used as FakeModule instances if they lack
3022 it. At least pydoc in python2.3 breaks for runtime-defined
3028 it. At least pydoc in python2.3 breaks for runtime-defined
3023 functions without this hack. At some point I need to _really_
3029 functions without this hack. At some point I need to _really_
3024 understand what FakeModule is doing, because it's a gross hack.
3030 understand what FakeModule is doing, because it's a gross hack.
3025 But it solves Arnd's problem for now...
3031 But it solves Arnd's problem for now...
3026
3032
3027 2004-02-27 Fernando Perez <fperez@colorado.edu>
3033 2004-02-27 Fernando Perez <fperez@colorado.edu>
3028
3034
3029 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3035 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3030 mode would behave erratically. Also increased the number of
3036 mode would behave erratically. Also increased the number of
3031 possible logs in rotate mod to 999. Thanks to Rod Holland
3037 possible logs in rotate mod to 999. Thanks to Rod Holland
3032 <rhh@StructureLABS.com> for the report and fixes.
3038 <rhh@StructureLABS.com> for the report and fixes.
3033
3039
3034 2004-02-26 Fernando Perez <fperez@colorado.edu>
3040 2004-02-26 Fernando Perez <fperez@colorado.edu>
3035
3041
3036 * IPython/genutils.py (page): Check that the curses module really
3042 * IPython/genutils.py (page): Check that the curses module really
3037 has the initscr attribute before trying to use it. For some
3043 has the initscr attribute before trying to use it. For some
3038 reason, the Solaris curses module is missing this. I think this
3044 reason, the Solaris curses module is missing this. I think this
3039 should be considered a Solaris python bug, but I'm not sure.
3045 should be considered a Solaris python bug, but I'm not sure.
3040
3046
3041 2004-01-17 Fernando Perez <fperez@colorado.edu>
3047 2004-01-17 Fernando Perez <fperez@colorado.edu>
3042
3048
3043 * IPython/genutils.py (Stream.__init__): Changes to try to make
3049 * IPython/genutils.py (Stream.__init__): Changes to try to make
3044 ipython robust against stdin/out/err being closed by the user.
3050 ipython robust against stdin/out/err being closed by the user.
3045 This is 'user error' (and blocks a normal python session, at least
3051 This is 'user error' (and blocks a normal python session, at least
3046 the stdout case). However, Ipython should be able to survive such
3052 the stdout case). However, Ipython should be able to survive such
3047 instances of abuse as gracefully as possible. To simplify the
3053 instances of abuse as gracefully as possible. To simplify the
3048 coding and maintain compatibility with Gary Bishop's Term
3054 coding and maintain compatibility with Gary Bishop's Term
3049 contributions, I've made use of classmethods for this. I think
3055 contributions, I've made use of classmethods for this. I think
3050 this introduces a dependency on python 2.2.
3056 this introduces a dependency on python 2.2.
3051
3057
3052 2004-01-13 Fernando Perez <fperez@colorado.edu>
3058 2004-01-13 Fernando Perez <fperez@colorado.edu>
3053
3059
3054 * IPython/numutils.py (exp_safe): simplified the code a bit and
3060 * IPython/numutils.py (exp_safe): simplified the code a bit and
3055 removed the need for importing the kinds module altogether.
3061 removed the need for importing the kinds module altogether.
3056
3062
3057 2004-01-06 Fernando Perez <fperez@colorado.edu>
3063 2004-01-06 Fernando Perez <fperez@colorado.edu>
3058
3064
3059 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3065 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3060 a magic function instead, after some community feedback. No
3066 a magic function instead, after some community feedback. No
3061 special syntax will exist for it, but its name is deliberately
3067 special syntax will exist for it, but its name is deliberately
3062 very short.
3068 very short.
3063
3069
3064 2003-12-20 Fernando Perez <fperez@colorado.edu>
3070 2003-12-20 Fernando Perez <fperez@colorado.edu>
3065
3071
3066 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3072 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3067 new functionality, to automagically assign the result of a shell
3073 new functionality, to automagically assign the result of a shell
3068 command to a variable. I'll solicit some community feedback on
3074 command to a variable. I'll solicit some community feedback on
3069 this before making it permanent.
3075 this before making it permanent.
3070
3076
3071 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3077 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3072 requested about callables for which inspect couldn't obtain a
3078 requested about callables for which inspect couldn't obtain a
3073 proper argspec. Thanks to a crash report sent by Etienne
3079 proper argspec. Thanks to a crash report sent by Etienne
3074 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3080 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3075
3081
3076 2003-12-09 Fernando Perez <fperez@colorado.edu>
3082 2003-12-09 Fernando Perez <fperez@colorado.edu>
3077
3083
3078 * IPython/genutils.py (page): patch for the pager to work across
3084 * IPython/genutils.py (page): patch for the pager to work across
3079 various versions of Windows. By Gary Bishop.
3085 various versions of Windows. By Gary Bishop.
3080
3086
3081 2003-12-04 Fernando Perez <fperez@colorado.edu>
3087 2003-12-04 Fernando Perez <fperez@colorado.edu>
3082
3088
3083 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3089 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3084 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3090 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3085 While I tested this and it looks ok, there may still be corner
3091 While I tested this and it looks ok, there may still be corner
3086 cases I've missed.
3092 cases I've missed.
3087
3093
3088 2003-12-01 Fernando Perez <fperez@colorado.edu>
3094 2003-12-01 Fernando Perez <fperez@colorado.edu>
3089
3095
3090 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3096 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3091 where a line like 'p,q=1,2' would fail because the automagic
3097 where a line like 'p,q=1,2' would fail because the automagic
3092 system would be triggered for @p.
3098 system would be triggered for @p.
3093
3099
3094 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3100 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3095 cleanups, code unmodified.
3101 cleanups, code unmodified.
3096
3102
3097 * IPython/genutils.py (Term): added a class for IPython to handle
3103 * IPython/genutils.py (Term): added a class for IPython to handle
3098 output. In most cases it will just be a proxy for stdout/err, but
3104 output. In most cases it will just be a proxy for stdout/err, but
3099 having this allows modifications to be made for some platforms,
3105 having this allows modifications to be made for some platforms,
3100 such as handling color escapes under Windows. All of this code
3106 such as handling color escapes under Windows. All of this code
3101 was contributed by Gary Bishop, with minor modifications by me.
3107 was contributed by Gary Bishop, with minor modifications by me.
3102 The actual changes affect many files.
3108 The actual changes affect many files.
3103
3109
3104 2003-11-30 Fernando Perez <fperez@colorado.edu>
3110 2003-11-30 Fernando Perez <fperez@colorado.edu>
3105
3111
3106 * IPython/iplib.py (file_matches): new completion code, courtesy
3112 * IPython/iplib.py (file_matches): new completion code, courtesy
3107 of Jeff Collins. This enables filename completion again under
3113 of Jeff Collins. This enables filename completion again under
3108 python 2.3, which disabled it at the C level.
3114 python 2.3, which disabled it at the C level.
3109
3115
3110 2003-11-11 Fernando Perez <fperez@colorado.edu>
3116 2003-11-11 Fernando Perez <fperez@colorado.edu>
3111
3117
3112 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3118 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3113 for Numeric.array(map(...)), but often convenient.
3119 for Numeric.array(map(...)), but often convenient.
3114
3120
3115 2003-11-05 Fernando Perez <fperez@colorado.edu>
3121 2003-11-05 Fernando Perez <fperez@colorado.edu>
3116
3122
3117 * IPython/numutils.py (frange): Changed a call from int() to
3123 * IPython/numutils.py (frange): Changed a call from int() to
3118 int(round()) to prevent a problem reported with arange() in the
3124 int(round()) to prevent a problem reported with arange() in the
3119 numpy list.
3125 numpy list.
3120
3126
3121 2003-10-06 Fernando Perez <fperez@colorado.edu>
3127 2003-10-06 Fernando Perez <fperez@colorado.edu>
3122
3128
3123 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3129 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3124 prevent crashes if sys lacks an argv attribute (it happens with
3130 prevent crashes if sys lacks an argv attribute (it happens with
3125 embedded interpreters which build a bare-bones sys module).
3131 embedded interpreters which build a bare-bones sys module).
3126 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3132 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3127
3133
3128 2003-09-24 Fernando Perez <fperez@colorado.edu>
3134 2003-09-24 Fernando Perez <fperez@colorado.edu>
3129
3135
3130 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3136 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3131 to protect against poorly written user objects where __getattr__
3137 to protect against poorly written user objects where __getattr__
3132 raises exceptions other than AttributeError. Thanks to a bug
3138 raises exceptions other than AttributeError. Thanks to a bug
3133 report by Oliver Sander <osander-AT-gmx.de>.
3139 report by Oliver Sander <osander-AT-gmx.de>.
3134
3140
3135 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3141 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3136 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3142 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3137
3143
3138 2003-09-09 Fernando Perez <fperez@colorado.edu>
3144 2003-09-09 Fernando Perez <fperez@colorado.edu>
3139
3145
3140 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3146 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3141 unpacking a list whith a callable as first element would
3147 unpacking a list whith a callable as first element would
3142 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3148 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3143 Collins.
3149 Collins.
3144
3150
3145 2003-08-25 *** Released version 0.5.0
3151 2003-08-25 *** Released version 0.5.0
3146
3152
3147 2003-08-22 Fernando Perez <fperez@colorado.edu>
3153 2003-08-22 Fernando Perez <fperez@colorado.edu>
3148
3154
3149 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3155 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3150 improperly defined user exceptions. Thanks to feedback from Mark
3156 improperly defined user exceptions. Thanks to feedback from Mark
3151 Russell <mrussell-AT-verio.net>.
3157 Russell <mrussell-AT-verio.net>.
3152
3158
3153 2003-08-20 Fernando Perez <fperez@colorado.edu>
3159 2003-08-20 Fernando Perez <fperez@colorado.edu>
3154
3160
3155 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3161 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3156 printing so that it would print multi-line string forms starting
3162 printing so that it would print multi-line string forms starting
3157 with a new line. This way the formatting is better respected for
3163 with a new line. This way the formatting is better respected for
3158 objects which work hard to make nice string forms.
3164 objects which work hard to make nice string forms.
3159
3165
3160 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3166 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3161 autocall would overtake data access for objects with both
3167 autocall would overtake data access for objects with both
3162 __getitem__ and __call__.
3168 __getitem__ and __call__.
3163
3169
3164 2003-08-19 *** Released version 0.5.0-rc1
3170 2003-08-19 *** Released version 0.5.0-rc1
3165
3171
3166 2003-08-19 Fernando Perez <fperez@colorado.edu>
3172 2003-08-19 Fernando Perez <fperez@colorado.edu>
3167
3173
3168 * IPython/deep_reload.py (load_tail): single tiny change here
3174 * IPython/deep_reload.py (load_tail): single tiny change here
3169 seems to fix the long-standing bug of dreload() failing to work
3175 seems to fix the long-standing bug of dreload() failing to work
3170 for dotted names. But this module is pretty tricky, so I may have
3176 for dotted names. But this module is pretty tricky, so I may have
3171 missed some subtlety. Needs more testing!.
3177 missed some subtlety. Needs more testing!.
3172
3178
3173 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3179 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3174 exceptions which have badly implemented __str__ methods.
3180 exceptions which have badly implemented __str__ methods.
3175 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3181 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3176 which I've been getting reports about from Python 2.3 users. I
3182 which I've been getting reports about from Python 2.3 users. I
3177 wish I had a simple test case to reproduce the problem, so I could
3183 wish I had a simple test case to reproduce the problem, so I could
3178 either write a cleaner workaround or file a bug report if
3184 either write a cleaner workaround or file a bug report if
3179 necessary.
3185 necessary.
3180
3186
3181 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3187 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3182 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3188 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3183 a bug report by Tjabo Kloppenburg.
3189 a bug report by Tjabo Kloppenburg.
3184
3190
3185 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3191 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3186 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3192 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3187 seems rather unstable. Thanks to a bug report by Tjabo
3193 seems rather unstable. Thanks to a bug report by Tjabo
3188 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3194 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3189
3195
3190 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3196 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3191 this out soon because of the critical fixes in the inner loop for
3197 this out soon because of the critical fixes in the inner loop for
3192 generators.
3198 generators.
3193
3199
3194 * IPython/Magic.py (Magic.getargspec): removed. This (and
3200 * IPython/Magic.py (Magic.getargspec): removed. This (and
3195 _get_def) have been obsoleted by OInspect for a long time, I
3201 _get_def) have been obsoleted by OInspect for a long time, I
3196 hadn't noticed that they were dead code.
3202 hadn't noticed that they were dead code.
3197 (Magic._ofind): restored _ofind functionality for a few literals
3203 (Magic._ofind): restored _ofind functionality for a few literals
3198 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3204 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3199 for things like "hello".capitalize?, since that would require a
3205 for things like "hello".capitalize?, since that would require a
3200 potentially dangerous eval() again.
3206 potentially dangerous eval() again.
3201
3207
3202 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3208 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3203 logic a bit more to clean up the escapes handling and minimize the
3209 logic a bit more to clean up the escapes handling and minimize the
3204 use of _ofind to only necessary cases. The interactive 'feel' of
3210 use of _ofind to only necessary cases. The interactive 'feel' of
3205 IPython should have improved quite a bit with the changes in
3211 IPython should have improved quite a bit with the changes in
3206 _prefilter and _ofind (besides being far safer than before).
3212 _prefilter and _ofind (besides being far safer than before).
3207
3213
3208 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3214 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3209 obscure, never reported). Edit would fail to find the object to
3215 obscure, never reported). Edit would fail to find the object to
3210 edit under some circumstances.
3216 edit under some circumstances.
3211 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3217 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3212 which were causing double-calling of generators. Those eval calls
3218 which were causing double-calling of generators. Those eval calls
3213 were _very_ dangerous, since code with side effects could be
3219 were _very_ dangerous, since code with side effects could be
3214 triggered. As they say, 'eval is evil'... These were the
3220 triggered. As they say, 'eval is evil'... These were the
3215 nastiest evals in IPython. Besides, _ofind is now far simpler,
3221 nastiest evals in IPython. Besides, _ofind is now far simpler,
3216 and it should also be quite a bit faster. Its use of inspect is
3222 and it should also be quite a bit faster. Its use of inspect is
3217 also safer, so perhaps some of the inspect-related crashes I've
3223 also safer, so perhaps some of the inspect-related crashes I've
3218 seen lately with Python 2.3 might be taken care of. That will
3224 seen lately with Python 2.3 might be taken care of. That will
3219 need more testing.
3225 need more testing.
3220
3226
3221 2003-08-17 Fernando Perez <fperez@colorado.edu>
3227 2003-08-17 Fernando Perez <fperez@colorado.edu>
3222
3228
3223 * IPython/iplib.py (InteractiveShell._prefilter): significant
3229 * IPython/iplib.py (InteractiveShell._prefilter): significant
3224 simplifications to the logic for handling user escapes. Faster
3230 simplifications to the logic for handling user escapes. Faster
3225 and simpler code.
3231 and simpler code.
3226
3232
3227 2003-08-14 Fernando Perez <fperez@colorado.edu>
3233 2003-08-14 Fernando Perez <fperez@colorado.edu>
3228
3234
3229 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3235 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3230 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3236 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3231 but it should be quite a bit faster. And the recursive version
3237 but it should be quite a bit faster. And the recursive version
3232 generated O(log N) intermediate storage for all rank>1 arrays,
3238 generated O(log N) intermediate storage for all rank>1 arrays,
3233 even if they were contiguous.
3239 even if they were contiguous.
3234 (l1norm): Added this function.
3240 (l1norm): Added this function.
3235 (norm): Added this function for arbitrary norms (including
3241 (norm): Added this function for arbitrary norms (including
3236 l-infinity). l1 and l2 are still special cases for convenience
3242 l-infinity). l1 and l2 are still special cases for convenience
3237 and speed.
3243 and speed.
3238
3244
3239 2003-08-03 Fernando Perez <fperez@colorado.edu>
3245 2003-08-03 Fernando Perez <fperez@colorado.edu>
3240
3246
3241 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3247 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3242 exceptions, which now raise PendingDeprecationWarnings in Python
3248 exceptions, which now raise PendingDeprecationWarnings in Python
3243 2.3. There were some in Magic and some in Gnuplot2.
3249 2.3. There were some in Magic and some in Gnuplot2.
3244
3250
3245 2003-06-30 Fernando Perez <fperez@colorado.edu>
3251 2003-06-30 Fernando Perez <fperez@colorado.edu>
3246
3252
3247 * IPython/genutils.py (page): modified to call curses only for
3253 * IPython/genutils.py (page): modified to call curses only for
3248 terminals where TERM=='xterm'. After problems under many other
3254 terminals where TERM=='xterm'. After problems under many other
3249 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3255 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3250
3256
3251 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3257 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3252 would be triggered when readline was absent. This was just an old
3258 would be triggered when readline was absent. This was just an old
3253 debugging statement I'd forgotten to take out.
3259 debugging statement I'd forgotten to take out.
3254
3260
3255 2003-06-20 Fernando Perez <fperez@colorado.edu>
3261 2003-06-20 Fernando Perez <fperez@colorado.edu>
3256
3262
3257 * IPython/genutils.py (clock): modified to return only user time
3263 * IPython/genutils.py (clock): modified to return only user time
3258 (not counting system time), after a discussion on scipy. While
3264 (not counting system time), after a discussion on scipy. While
3259 system time may be a useful quantity occasionally, it may much
3265 system time may be a useful quantity occasionally, it may much
3260 more easily be skewed by occasional swapping or other similar
3266 more easily be skewed by occasional swapping or other similar
3261 activity.
3267 activity.
3262
3268
3263 2003-06-05 Fernando Perez <fperez@colorado.edu>
3269 2003-06-05 Fernando Perez <fperez@colorado.edu>
3264
3270
3265 * IPython/numutils.py (identity): new function, for building
3271 * IPython/numutils.py (identity): new function, for building
3266 arbitrary rank Kronecker deltas (mostly backwards compatible with
3272 arbitrary rank Kronecker deltas (mostly backwards compatible with
3267 Numeric.identity)
3273 Numeric.identity)
3268
3274
3269 2003-06-03 Fernando Perez <fperez@colorado.edu>
3275 2003-06-03 Fernando Perez <fperez@colorado.edu>
3270
3276
3271 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3277 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3272 arguments passed to magics with spaces, to allow trailing '\' to
3278 arguments passed to magics with spaces, to allow trailing '\' to
3273 work normally (mainly for Windows users).
3279 work normally (mainly for Windows users).
3274
3280
3275 2003-05-29 Fernando Perez <fperez@colorado.edu>
3281 2003-05-29 Fernando Perez <fperez@colorado.edu>
3276
3282
3277 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3283 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3278 instead of pydoc.help. This fixes a bizarre behavior where
3284 instead of pydoc.help. This fixes a bizarre behavior where
3279 printing '%s' % locals() would trigger the help system. Now
3285 printing '%s' % locals() would trigger the help system. Now
3280 ipython behaves like normal python does.
3286 ipython behaves like normal python does.
3281
3287
3282 Note that if one does 'from pydoc import help', the bizarre
3288 Note that if one does 'from pydoc import help', the bizarre
3283 behavior returns, but this will also happen in normal python, so
3289 behavior returns, but this will also happen in normal python, so
3284 it's not an ipython bug anymore (it has to do with how pydoc.help
3290 it's not an ipython bug anymore (it has to do with how pydoc.help
3285 is implemented).
3291 is implemented).
3286
3292
3287 2003-05-22 Fernando Perez <fperez@colorado.edu>
3293 2003-05-22 Fernando Perez <fperez@colorado.edu>
3288
3294
3289 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3295 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3290 return [] instead of None when nothing matches, also match to end
3296 return [] instead of None when nothing matches, also match to end
3291 of line. Patch by Gary Bishop.
3297 of line. Patch by Gary Bishop.
3292
3298
3293 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3299 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3294 protection as before, for files passed on the command line. This
3300 protection as before, for files passed on the command line. This
3295 prevents the CrashHandler from kicking in if user files call into
3301 prevents the CrashHandler from kicking in if user files call into
3296 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3302 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3297 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3303 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3298
3304
3299 2003-05-20 *** Released version 0.4.0
3305 2003-05-20 *** Released version 0.4.0
3300
3306
3301 2003-05-20 Fernando Perez <fperez@colorado.edu>
3307 2003-05-20 Fernando Perez <fperez@colorado.edu>
3302
3308
3303 * setup.py: added support for manpages. It's a bit hackish b/c of
3309 * setup.py: added support for manpages. It's a bit hackish b/c of
3304 a bug in the way the bdist_rpm distutils target handles gzipped
3310 a bug in the way the bdist_rpm distutils target handles gzipped
3305 manpages, but it works. After a patch by Jack.
3311 manpages, but it works. After a patch by Jack.
3306
3312
3307 2003-05-19 Fernando Perez <fperez@colorado.edu>
3313 2003-05-19 Fernando Perez <fperez@colorado.edu>
3308
3314
3309 * IPython/numutils.py: added a mockup of the kinds module, since
3315 * IPython/numutils.py: added a mockup of the kinds module, since
3310 it was recently removed from Numeric. This way, numutils will
3316 it was recently removed from Numeric. This way, numutils will
3311 work for all users even if they are missing kinds.
3317 work for all users even if they are missing kinds.
3312
3318
3313 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3319 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3314 failure, which can occur with SWIG-wrapped extensions. After a
3320 failure, which can occur with SWIG-wrapped extensions. After a
3315 crash report from Prabhu.
3321 crash report from Prabhu.
3316
3322
3317 2003-05-16 Fernando Perez <fperez@colorado.edu>
3323 2003-05-16 Fernando Perez <fperez@colorado.edu>
3318
3324
3319 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3325 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3320 protect ipython from user code which may call directly
3326 protect ipython from user code which may call directly
3321 sys.excepthook (this looks like an ipython crash to the user, even
3327 sys.excepthook (this looks like an ipython crash to the user, even
3322 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3328 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3323 This is especially important to help users of WxWindows, but may
3329 This is especially important to help users of WxWindows, but may
3324 also be useful in other cases.
3330 also be useful in other cases.
3325
3331
3326 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3332 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3327 an optional tb_offset to be specified, and to preserve exception
3333 an optional tb_offset to be specified, and to preserve exception
3328 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3334 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3329
3335
3330 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3336 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3331
3337
3332 2003-05-15 Fernando Perez <fperez@colorado.edu>
3338 2003-05-15 Fernando Perez <fperez@colorado.edu>
3333
3339
3334 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3340 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3335 installing for a new user under Windows.
3341 installing for a new user under Windows.
3336
3342
3337 2003-05-12 Fernando Perez <fperez@colorado.edu>
3343 2003-05-12 Fernando Perez <fperez@colorado.edu>
3338
3344
3339 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3345 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3340 handler for Emacs comint-based lines. Currently it doesn't do
3346 handler for Emacs comint-based lines. Currently it doesn't do
3341 much (but importantly, it doesn't update the history cache). In
3347 much (but importantly, it doesn't update the history cache). In
3342 the future it may be expanded if Alex needs more functionality
3348 the future it may be expanded if Alex needs more functionality
3343 there.
3349 there.
3344
3350
3345 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3351 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3346 info to crash reports.
3352 info to crash reports.
3347
3353
3348 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3354 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3349 just like Python's -c. Also fixed crash with invalid -color
3355 just like Python's -c. Also fixed crash with invalid -color
3350 option value at startup. Thanks to Will French
3356 option value at startup. Thanks to Will French
3351 <wfrench-AT-bestweb.net> for the bug report.
3357 <wfrench-AT-bestweb.net> for the bug report.
3352
3358
3353 2003-05-09 Fernando Perez <fperez@colorado.edu>
3359 2003-05-09 Fernando Perez <fperez@colorado.edu>
3354
3360
3355 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3361 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3356 to EvalDict (it's a mapping, after all) and simplified its code
3362 to EvalDict (it's a mapping, after all) and simplified its code
3357 quite a bit, after a nice discussion on c.l.py where Gustavo
3363 quite a bit, after a nice discussion on c.l.py where Gustavo
3358 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3364 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3359
3365
3360 2003-04-30 Fernando Perez <fperez@colorado.edu>
3366 2003-04-30 Fernando Perez <fperez@colorado.edu>
3361
3367
3362 * IPython/genutils.py (timings_out): modified it to reduce its
3368 * IPython/genutils.py (timings_out): modified it to reduce its
3363 overhead in the common reps==1 case.
3369 overhead in the common reps==1 case.
3364
3370
3365 2003-04-29 Fernando Perez <fperez@colorado.edu>
3371 2003-04-29 Fernando Perez <fperez@colorado.edu>
3366
3372
3367 * IPython/genutils.py (timings_out): Modified to use the resource
3373 * IPython/genutils.py (timings_out): Modified to use the resource
3368 module, which avoids the wraparound problems of time.clock().
3374 module, which avoids the wraparound problems of time.clock().
3369
3375
3370 2003-04-17 *** Released version 0.2.15pre4
3376 2003-04-17 *** Released version 0.2.15pre4
3371
3377
3372 2003-04-17 Fernando Perez <fperez@colorado.edu>
3378 2003-04-17 Fernando Perez <fperez@colorado.edu>
3373
3379
3374 * setup.py (scriptfiles): Split windows-specific stuff over to a
3380 * setup.py (scriptfiles): Split windows-specific stuff over to a
3375 separate file, in an attempt to have a Windows GUI installer.
3381 separate file, in an attempt to have a Windows GUI installer.
3376 That didn't work, but part of the groundwork is done.
3382 That didn't work, but part of the groundwork is done.
3377
3383
3378 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3384 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3379 indent/unindent with 4 spaces. Particularly useful in combination
3385 indent/unindent with 4 spaces. Particularly useful in combination
3380 with the new auto-indent option.
3386 with the new auto-indent option.
3381
3387
3382 2003-04-16 Fernando Perez <fperez@colorado.edu>
3388 2003-04-16 Fernando Perez <fperez@colorado.edu>
3383
3389
3384 * IPython/Magic.py: various replacements of self.rc for
3390 * IPython/Magic.py: various replacements of self.rc for
3385 self.shell.rc. A lot more remains to be done to fully disentangle
3391 self.shell.rc. A lot more remains to be done to fully disentangle
3386 this class from the main Shell class.
3392 this class from the main Shell class.
3387
3393
3388 * IPython/GnuplotRuntime.py: added checks for mouse support so
3394 * IPython/GnuplotRuntime.py: added checks for mouse support so
3389 that we don't try to enable it if the current gnuplot doesn't
3395 that we don't try to enable it if the current gnuplot doesn't
3390 really support it. Also added checks so that we don't try to
3396 really support it. Also added checks so that we don't try to
3391 enable persist under Windows (where Gnuplot doesn't recognize the
3397 enable persist under Windows (where Gnuplot doesn't recognize the
3392 option).
3398 option).
3393
3399
3394 * IPython/iplib.py (InteractiveShell.interact): Added optional
3400 * IPython/iplib.py (InteractiveShell.interact): Added optional
3395 auto-indenting code, after a patch by King C. Shu
3401 auto-indenting code, after a patch by King C. Shu
3396 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3402 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3397 get along well with pasting indented code. If I ever figure out
3403 get along well with pasting indented code. If I ever figure out
3398 how to make that part go well, it will become on by default.
3404 how to make that part go well, it will become on by default.
3399
3405
3400 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3406 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3401 crash ipython if there was an unmatched '%' in the user's prompt
3407 crash ipython if there was an unmatched '%' in the user's prompt
3402 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3408 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3403
3409
3404 * IPython/iplib.py (InteractiveShell.interact): removed the
3410 * IPython/iplib.py (InteractiveShell.interact): removed the
3405 ability to ask the user whether he wants to crash or not at the
3411 ability to ask the user whether he wants to crash or not at the
3406 'last line' exception handler. Calling functions at that point
3412 'last line' exception handler. Calling functions at that point
3407 changes the stack, and the error reports would have incorrect
3413 changes the stack, and the error reports would have incorrect
3408 tracebacks.
3414 tracebacks.
3409
3415
3410 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3416 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3411 pass through a peger a pretty-printed form of any object. After a
3417 pass through a peger a pretty-printed form of any object. After a
3412 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3418 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3413
3419
3414 2003-04-14 Fernando Perez <fperez@colorado.edu>
3420 2003-04-14 Fernando Perez <fperez@colorado.edu>
3415
3421
3416 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3422 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3417 all files in ~ would be modified at first install (instead of
3423 all files in ~ would be modified at first install (instead of
3418 ~/.ipython). This could be potentially disastrous, as the
3424 ~/.ipython). This could be potentially disastrous, as the
3419 modification (make line-endings native) could damage binary files.
3425 modification (make line-endings native) could damage binary files.
3420
3426
3421 2003-04-10 Fernando Perez <fperez@colorado.edu>
3427 2003-04-10 Fernando Perez <fperez@colorado.edu>
3422
3428
3423 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3429 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3424 handle only lines which are invalid python. This now means that
3430 handle only lines which are invalid python. This now means that
3425 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3431 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3426 for the bug report.
3432 for the bug report.
3427
3433
3428 2003-04-01 Fernando Perez <fperez@colorado.edu>
3434 2003-04-01 Fernando Perez <fperez@colorado.edu>
3429
3435
3430 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3436 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3431 where failing to set sys.last_traceback would crash pdb.pm().
3437 where failing to set sys.last_traceback would crash pdb.pm().
3432 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3438 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3433 report.
3439 report.
3434
3440
3435 2003-03-25 Fernando Perez <fperez@colorado.edu>
3441 2003-03-25 Fernando Perez <fperez@colorado.edu>
3436
3442
3437 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3443 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3438 before printing it (it had a lot of spurious blank lines at the
3444 before printing it (it had a lot of spurious blank lines at the
3439 end).
3445 end).
3440
3446
3441 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3447 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3442 output would be sent 21 times! Obviously people don't use this
3448 output would be sent 21 times! Obviously people don't use this
3443 too often, or I would have heard about it.
3449 too often, or I would have heard about it.
3444
3450
3445 2003-03-24 Fernando Perez <fperez@colorado.edu>
3451 2003-03-24 Fernando Perez <fperez@colorado.edu>
3446
3452
3447 * setup.py (scriptfiles): renamed the data_files parameter from
3453 * setup.py (scriptfiles): renamed the data_files parameter from
3448 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3454 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3449 for the patch.
3455 for the patch.
3450
3456
3451 2003-03-20 Fernando Perez <fperez@colorado.edu>
3457 2003-03-20 Fernando Perez <fperez@colorado.edu>
3452
3458
3453 * IPython/genutils.py (error): added error() and fatal()
3459 * IPython/genutils.py (error): added error() and fatal()
3454 functions.
3460 functions.
3455
3461
3456 2003-03-18 *** Released version 0.2.15pre3
3462 2003-03-18 *** Released version 0.2.15pre3
3457
3463
3458 2003-03-18 Fernando Perez <fperez@colorado.edu>
3464 2003-03-18 Fernando Perez <fperez@colorado.edu>
3459
3465
3460 * setupext/install_data_ext.py
3466 * setupext/install_data_ext.py
3461 (install_data_ext.initialize_options): Class contributed by Jack
3467 (install_data_ext.initialize_options): Class contributed by Jack
3462 Moffit for fixing the old distutils hack. He is sending this to
3468 Moffit for fixing the old distutils hack. He is sending this to
3463 the distutils folks so in the future we may not need it as a
3469 the distutils folks so in the future we may not need it as a
3464 private fix.
3470 private fix.
3465
3471
3466 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3472 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3467 changes for Debian packaging. See his patch for full details.
3473 changes for Debian packaging. See his patch for full details.
3468 The old distutils hack of making the ipythonrc* files carry a
3474 The old distutils hack of making the ipythonrc* files carry a
3469 bogus .py extension is gone, at last. Examples were moved to a
3475 bogus .py extension is gone, at last. Examples were moved to a
3470 separate subdir under doc/, and the separate executable scripts
3476 separate subdir under doc/, and the separate executable scripts
3471 now live in their own directory. Overall a great cleanup. The
3477 now live in their own directory. Overall a great cleanup. The
3472 manual was updated to use the new files, and setup.py has been
3478 manual was updated to use the new files, and setup.py has been
3473 fixed for this setup.
3479 fixed for this setup.
3474
3480
3475 * IPython/PyColorize.py (Parser.usage): made non-executable and
3481 * IPython/PyColorize.py (Parser.usage): made non-executable and
3476 created a pycolor wrapper around it to be included as a script.
3482 created a pycolor wrapper around it to be included as a script.
3477
3483
3478 2003-03-12 *** Released version 0.2.15pre2
3484 2003-03-12 *** Released version 0.2.15pre2
3479
3485
3480 2003-03-12 Fernando Perez <fperez@colorado.edu>
3486 2003-03-12 Fernando Perez <fperez@colorado.edu>
3481
3487
3482 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3488 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3483 long-standing problem with garbage characters in some terminals.
3489 long-standing problem with garbage characters in some terminals.
3484 The issue was really that the \001 and \002 escapes must _only_ be
3490 The issue was really that the \001 and \002 escapes must _only_ be
3485 passed to input prompts (which call readline), but _never_ to
3491 passed to input prompts (which call readline), but _never_ to
3486 normal text to be printed on screen. I changed ColorANSI to have
3492 normal text to be printed on screen. I changed ColorANSI to have
3487 two classes: TermColors and InputTermColors, each with the
3493 two classes: TermColors and InputTermColors, each with the
3488 appropriate escapes for input prompts or normal text. The code in
3494 appropriate escapes for input prompts or normal text. The code in
3489 Prompts.py got slightly more complicated, but this very old and
3495 Prompts.py got slightly more complicated, but this very old and
3490 annoying bug is finally fixed.
3496 annoying bug is finally fixed.
3491
3497
3492 All the credit for nailing down the real origin of this problem
3498 All the credit for nailing down the real origin of this problem
3493 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3499 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3494 *Many* thanks to him for spending quite a bit of effort on this.
3500 *Many* thanks to him for spending quite a bit of effort on this.
3495
3501
3496 2003-03-05 *** Released version 0.2.15pre1
3502 2003-03-05 *** Released version 0.2.15pre1
3497
3503
3498 2003-03-03 Fernando Perez <fperez@colorado.edu>
3504 2003-03-03 Fernando Perez <fperez@colorado.edu>
3499
3505
3500 * IPython/FakeModule.py: Moved the former _FakeModule to a
3506 * IPython/FakeModule.py: Moved the former _FakeModule to a
3501 separate file, because it's also needed by Magic (to fix a similar
3507 separate file, because it's also needed by Magic (to fix a similar
3502 pickle-related issue in @run).
3508 pickle-related issue in @run).
3503
3509
3504 2003-03-02 Fernando Perez <fperez@colorado.edu>
3510 2003-03-02 Fernando Perez <fperez@colorado.edu>
3505
3511
3506 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3512 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3507 the autocall option at runtime.
3513 the autocall option at runtime.
3508 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3514 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3509 across Magic.py to start separating Magic from InteractiveShell.
3515 across Magic.py to start separating Magic from InteractiveShell.
3510 (Magic._ofind): Fixed to return proper namespace for dotted
3516 (Magic._ofind): Fixed to return proper namespace for dotted
3511 names. Before, a dotted name would always return 'not currently
3517 names. Before, a dotted name would always return 'not currently
3512 defined', because it would find the 'parent'. s.x would be found,
3518 defined', because it would find the 'parent'. s.x would be found,
3513 but since 'x' isn't defined by itself, it would get confused.
3519 but since 'x' isn't defined by itself, it would get confused.
3514 (Magic.magic_run): Fixed pickling problems reported by Ralf
3520 (Magic.magic_run): Fixed pickling problems reported by Ralf
3515 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3521 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3516 that I'd used when Mike Heeter reported similar issues at the
3522 that I'd used when Mike Heeter reported similar issues at the
3517 top-level, but now for @run. It boils down to injecting the
3523 top-level, but now for @run. It boils down to injecting the
3518 namespace where code is being executed with something that looks
3524 namespace where code is being executed with something that looks
3519 enough like a module to fool pickle.dump(). Since a pickle stores
3525 enough like a module to fool pickle.dump(). Since a pickle stores
3520 a named reference to the importing module, we need this for
3526 a named reference to the importing module, we need this for
3521 pickles to save something sensible.
3527 pickles to save something sensible.
3522
3528
3523 * IPython/ipmaker.py (make_IPython): added an autocall option.
3529 * IPython/ipmaker.py (make_IPython): added an autocall option.
3524
3530
3525 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3531 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3526 the auto-eval code. Now autocalling is an option, and the code is
3532 the auto-eval code. Now autocalling is an option, and the code is
3527 also vastly safer. There is no more eval() involved at all.
3533 also vastly safer. There is no more eval() involved at all.
3528
3534
3529 2003-03-01 Fernando Perez <fperez@colorado.edu>
3535 2003-03-01 Fernando Perez <fperez@colorado.edu>
3530
3536
3531 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3537 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3532 dict with named keys instead of a tuple.
3538 dict with named keys instead of a tuple.
3533
3539
3534 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3540 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3535
3541
3536 * setup.py (make_shortcut): Fixed message about directories
3542 * setup.py (make_shortcut): Fixed message about directories
3537 created during Windows installation (the directories were ok, just
3543 created during Windows installation (the directories were ok, just
3538 the printed message was misleading). Thanks to Chris Liechti
3544 the printed message was misleading). Thanks to Chris Liechti
3539 <cliechti-AT-gmx.net> for the heads up.
3545 <cliechti-AT-gmx.net> for the heads up.
3540
3546
3541 2003-02-21 Fernando Perez <fperez@colorado.edu>
3547 2003-02-21 Fernando Perez <fperez@colorado.edu>
3542
3548
3543 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3549 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3544 of ValueError exception when checking for auto-execution. This
3550 of ValueError exception when checking for auto-execution. This
3545 one is raised by things like Numeric arrays arr.flat when the
3551 one is raised by things like Numeric arrays arr.flat when the
3546 array is non-contiguous.
3552 array is non-contiguous.
3547
3553
3548 2003-01-31 Fernando Perez <fperez@colorado.edu>
3554 2003-01-31 Fernando Perez <fperez@colorado.edu>
3549
3555
3550 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3556 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3551 not return any value at all (even though the command would get
3557 not return any value at all (even though the command would get
3552 executed).
3558 executed).
3553 (xsys): Flush stdout right after printing the command to ensure
3559 (xsys): Flush stdout right after printing the command to ensure
3554 proper ordering of commands and command output in the total
3560 proper ordering of commands and command output in the total
3555 output.
3561 output.
3556 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3562 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3557 system/getoutput as defaults. The old ones are kept for
3563 system/getoutput as defaults. The old ones are kept for
3558 compatibility reasons, so no code which uses this library needs
3564 compatibility reasons, so no code which uses this library needs
3559 changing.
3565 changing.
3560
3566
3561 2003-01-27 *** Released version 0.2.14
3567 2003-01-27 *** Released version 0.2.14
3562
3568
3563 2003-01-25 Fernando Perez <fperez@colorado.edu>
3569 2003-01-25 Fernando Perez <fperez@colorado.edu>
3564
3570
3565 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3571 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3566 functions defined in previous edit sessions could not be re-edited
3572 functions defined in previous edit sessions could not be re-edited
3567 (because the temp files were immediately removed). Now temp files
3573 (because the temp files were immediately removed). Now temp files
3568 are removed only at IPython's exit.
3574 are removed only at IPython's exit.
3569 (Magic.magic_run): Improved @run to perform shell-like expansions
3575 (Magic.magic_run): Improved @run to perform shell-like expansions
3570 on its arguments (~users and $VARS). With this, @run becomes more
3576 on its arguments (~users and $VARS). With this, @run becomes more
3571 like a normal command-line.
3577 like a normal command-line.
3572
3578
3573 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3579 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3574 bugs related to embedding and cleaned up that code. A fairly
3580 bugs related to embedding and cleaned up that code. A fairly
3575 important one was the impossibility to access the global namespace
3581 important one was the impossibility to access the global namespace
3576 through the embedded IPython (only local variables were visible).
3582 through the embedded IPython (only local variables were visible).
3577
3583
3578 2003-01-14 Fernando Perez <fperez@colorado.edu>
3584 2003-01-14 Fernando Perez <fperez@colorado.edu>
3579
3585
3580 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3586 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3581 auto-calling to be a bit more conservative. Now it doesn't get
3587 auto-calling to be a bit more conservative. Now it doesn't get
3582 triggered if any of '!=()<>' are in the rest of the input line, to
3588 triggered if any of '!=()<>' are in the rest of the input line, to
3583 allow comparing callables. Thanks to Alex for the heads up.
3589 allow comparing callables. Thanks to Alex for the heads up.
3584
3590
3585 2003-01-07 Fernando Perez <fperez@colorado.edu>
3591 2003-01-07 Fernando Perez <fperez@colorado.edu>
3586
3592
3587 * IPython/genutils.py (page): fixed estimation of the number of
3593 * IPython/genutils.py (page): fixed estimation of the number of
3588 lines in a string to be paged to simply count newlines. This
3594 lines in a string to be paged to simply count newlines. This
3589 prevents over-guessing due to embedded escape sequences. A better
3595 prevents over-guessing due to embedded escape sequences. A better
3590 long-term solution would involve stripping out the control chars
3596 long-term solution would involve stripping out the control chars
3591 for the count, but it's potentially so expensive I just don't
3597 for the count, but it's potentially so expensive I just don't
3592 think it's worth doing.
3598 think it's worth doing.
3593
3599
3594 2002-12-19 *** Released version 0.2.14pre50
3600 2002-12-19 *** Released version 0.2.14pre50
3595
3601
3596 2002-12-19 Fernando Perez <fperez@colorado.edu>
3602 2002-12-19 Fernando Perez <fperez@colorado.edu>
3597
3603
3598 * tools/release (version): Changed release scripts to inform
3604 * tools/release (version): Changed release scripts to inform
3599 Andrea and build a NEWS file with a list of recent changes.
3605 Andrea and build a NEWS file with a list of recent changes.
3600
3606
3601 * IPython/ColorANSI.py (__all__): changed terminal detection
3607 * IPython/ColorANSI.py (__all__): changed terminal detection
3602 code. Seems to work better for xterms without breaking
3608 code. Seems to work better for xterms without breaking
3603 konsole. Will need more testing to determine if WinXP and Mac OSX
3609 konsole. Will need more testing to determine if WinXP and Mac OSX
3604 also work ok.
3610 also work ok.
3605
3611
3606 2002-12-18 *** Released version 0.2.14pre49
3612 2002-12-18 *** Released version 0.2.14pre49
3607
3613
3608 2002-12-18 Fernando Perez <fperez@colorado.edu>
3614 2002-12-18 Fernando Perez <fperez@colorado.edu>
3609
3615
3610 * Docs: added new info about Mac OSX, from Andrea.
3616 * Docs: added new info about Mac OSX, from Andrea.
3611
3617
3612 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3618 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3613 allow direct plotting of python strings whose format is the same
3619 allow direct plotting of python strings whose format is the same
3614 of gnuplot data files.
3620 of gnuplot data files.
3615
3621
3616 2002-12-16 Fernando Perez <fperez@colorado.edu>
3622 2002-12-16 Fernando Perez <fperez@colorado.edu>
3617
3623
3618 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3624 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3619 value of exit question to be acknowledged.
3625 value of exit question to be acknowledged.
3620
3626
3621 2002-12-03 Fernando Perez <fperez@colorado.edu>
3627 2002-12-03 Fernando Perez <fperez@colorado.edu>
3622
3628
3623 * IPython/ipmaker.py: removed generators, which had been added
3629 * IPython/ipmaker.py: removed generators, which had been added
3624 by mistake in an earlier debugging run. This was causing trouble
3630 by mistake in an earlier debugging run. This was causing trouble
3625 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3631 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3626 for pointing this out.
3632 for pointing this out.
3627
3633
3628 2002-11-17 Fernando Perez <fperez@colorado.edu>
3634 2002-11-17 Fernando Perez <fperez@colorado.edu>
3629
3635
3630 * Manual: updated the Gnuplot section.
3636 * Manual: updated the Gnuplot section.
3631
3637
3632 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3638 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3633 a much better split of what goes in Runtime and what goes in
3639 a much better split of what goes in Runtime and what goes in
3634 Interactive.
3640 Interactive.
3635
3641
3636 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3642 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3637 being imported from iplib.
3643 being imported from iplib.
3638
3644
3639 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3645 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3640 for command-passing. Now the global Gnuplot instance is called
3646 for command-passing. Now the global Gnuplot instance is called
3641 'gp' instead of 'g', which was really a far too fragile and
3647 'gp' instead of 'g', which was really a far too fragile and
3642 common name.
3648 common name.
3643
3649
3644 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3650 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3645 bounding boxes generated by Gnuplot for square plots.
3651 bounding boxes generated by Gnuplot for square plots.
3646
3652
3647 * IPython/genutils.py (popkey): new function added. I should
3653 * IPython/genutils.py (popkey): new function added. I should
3648 suggest this on c.l.py as a dict method, it seems useful.
3654 suggest this on c.l.py as a dict method, it seems useful.
3649
3655
3650 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3656 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3651 to transparently handle PostScript generation. MUCH better than
3657 to transparently handle PostScript generation. MUCH better than
3652 the previous plot_eps/replot_eps (which I removed now). The code
3658 the previous plot_eps/replot_eps (which I removed now). The code
3653 is also fairly clean and well documented now (including
3659 is also fairly clean and well documented now (including
3654 docstrings).
3660 docstrings).
3655
3661
3656 2002-11-13 Fernando Perez <fperez@colorado.edu>
3662 2002-11-13 Fernando Perez <fperez@colorado.edu>
3657
3663
3658 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3664 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3659 (inconsistent with options).
3665 (inconsistent with options).
3660
3666
3661 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3667 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3662 manually disabled, I don't know why. Fixed it.
3668 manually disabled, I don't know why. Fixed it.
3663 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3669 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3664 eps output.
3670 eps output.
3665
3671
3666 2002-11-12 Fernando Perez <fperez@colorado.edu>
3672 2002-11-12 Fernando Perez <fperez@colorado.edu>
3667
3673
3668 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3674 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3669 don't propagate up to caller. Fixes crash reported by François
3675 don't propagate up to caller. Fixes crash reported by François
3670 Pinard.
3676 Pinard.
3671
3677
3672 2002-11-09 Fernando Perez <fperez@colorado.edu>
3678 2002-11-09 Fernando Perez <fperez@colorado.edu>
3673
3679
3674 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3680 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3675 history file for new users.
3681 history file for new users.
3676 (make_IPython): fixed bug where initial install would leave the
3682 (make_IPython): fixed bug where initial install would leave the
3677 user running in the .ipython dir.
3683 user running in the .ipython dir.
3678 (make_IPython): fixed bug where config dir .ipython would be
3684 (make_IPython): fixed bug where config dir .ipython would be
3679 created regardless of the given -ipythondir option. Thanks to Cory
3685 created regardless of the given -ipythondir option. Thanks to Cory
3680 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3686 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3681
3687
3682 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3688 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3683 type confirmations. Will need to use it in all of IPython's code
3689 type confirmations. Will need to use it in all of IPython's code
3684 consistently.
3690 consistently.
3685
3691
3686 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3692 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3687 context to print 31 lines instead of the default 5. This will make
3693 context to print 31 lines instead of the default 5. This will make
3688 the crash reports extremely detailed in case the problem is in
3694 the crash reports extremely detailed in case the problem is in
3689 libraries I don't have access to.
3695 libraries I don't have access to.
3690
3696
3691 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3697 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3692 line of defense' code to still crash, but giving users fair
3698 line of defense' code to still crash, but giving users fair
3693 warning. I don't want internal errors to go unreported: if there's
3699 warning. I don't want internal errors to go unreported: if there's
3694 an internal problem, IPython should crash and generate a full
3700 an internal problem, IPython should crash and generate a full
3695 report.
3701 report.
3696
3702
3697 2002-11-08 Fernando Perez <fperez@colorado.edu>
3703 2002-11-08 Fernando Perez <fperez@colorado.edu>
3698
3704
3699 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3705 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3700 otherwise uncaught exceptions which can appear if people set
3706 otherwise uncaught exceptions which can appear if people set
3701 sys.stdout to something badly broken. Thanks to a crash report
3707 sys.stdout to something badly broken. Thanks to a crash report
3702 from henni-AT-mail.brainbot.com.
3708 from henni-AT-mail.brainbot.com.
3703
3709
3704 2002-11-04 Fernando Perez <fperez@colorado.edu>
3710 2002-11-04 Fernando Perez <fperez@colorado.edu>
3705
3711
3706 * IPython/iplib.py (InteractiveShell.interact): added
3712 * IPython/iplib.py (InteractiveShell.interact): added
3707 __IPYTHON__active to the builtins. It's a flag which goes on when
3713 __IPYTHON__active to the builtins. It's a flag which goes on when
3708 the interaction starts and goes off again when it stops. This
3714 the interaction starts and goes off again when it stops. This
3709 allows embedding code to detect being inside IPython. Before this
3715 allows embedding code to detect being inside IPython. Before this
3710 was done via __IPYTHON__, but that only shows that an IPython
3716 was done via __IPYTHON__, but that only shows that an IPython
3711 instance has been created.
3717 instance has been created.
3712
3718
3713 * IPython/Magic.py (Magic.magic_env): I realized that in a
3719 * IPython/Magic.py (Magic.magic_env): I realized that in a
3714 UserDict, instance.data holds the data as a normal dict. So I
3720 UserDict, instance.data holds the data as a normal dict. So I
3715 modified @env to return os.environ.data instead of rebuilding a
3721 modified @env to return os.environ.data instead of rebuilding a
3716 dict by hand.
3722 dict by hand.
3717
3723
3718 2002-11-02 Fernando Perez <fperez@colorado.edu>
3724 2002-11-02 Fernando Perez <fperez@colorado.edu>
3719
3725
3720 * IPython/genutils.py (warn): changed so that level 1 prints no
3726 * IPython/genutils.py (warn): changed so that level 1 prints no
3721 header. Level 2 is now the default (with 'WARNING' header, as
3727 header. Level 2 is now the default (with 'WARNING' header, as
3722 before). I think I tracked all places where changes were needed in
3728 before). I think I tracked all places where changes were needed in
3723 IPython, but outside code using the old level numbering may have
3729 IPython, but outside code using the old level numbering may have
3724 broken.
3730 broken.
3725
3731
3726 * IPython/iplib.py (InteractiveShell.runcode): added this to
3732 * IPython/iplib.py (InteractiveShell.runcode): added this to
3727 handle the tracebacks in SystemExit traps correctly. The previous
3733 handle the tracebacks in SystemExit traps correctly. The previous
3728 code (through interact) was printing more of the stack than
3734 code (through interact) was printing more of the stack than
3729 necessary, showing IPython internal code to the user.
3735 necessary, showing IPython internal code to the user.
3730
3736
3731 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3737 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3732 default. Now that the default at the confirmation prompt is yes,
3738 default. Now that the default at the confirmation prompt is yes,
3733 it's not so intrusive. François' argument that ipython sessions
3739 it's not so intrusive. François' argument that ipython sessions
3734 tend to be complex enough not to lose them from an accidental C-d,
3740 tend to be complex enough not to lose them from an accidental C-d,
3735 is a valid one.
3741 is a valid one.
3736
3742
3737 * IPython/iplib.py (InteractiveShell.interact): added a
3743 * IPython/iplib.py (InteractiveShell.interact): added a
3738 showtraceback() call to the SystemExit trap, and modified the exit
3744 showtraceback() call to the SystemExit trap, and modified the exit
3739 confirmation to have yes as the default.
3745 confirmation to have yes as the default.
3740
3746
3741 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3747 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3742 this file. It's been gone from the code for a long time, this was
3748 this file. It's been gone from the code for a long time, this was
3743 simply leftover junk.
3749 simply leftover junk.
3744
3750
3745 2002-11-01 Fernando Perez <fperez@colorado.edu>
3751 2002-11-01 Fernando Perez <fperez@colorado.edu>
3746
3752
3747 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3753 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3748 added. If set, IPython now traps EOF and asks for
3754 added. If set, IPython now traps EOF and asks for
3749 confirmation. After a request by François Pinard.
3755 confirmation. After a request by François Pinard.
3750
3756
3751 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3757 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3752 of @abort, and with a new (better) mechanism for handling the
3758 of @abort, and with a new (better) mechanism for handling the
3753 exceptions.
3759 exceptions.
3754
3760
3755 2002-10-27 Fernando Perez <fperez@colorado.edu>
3761 2002-10-27 Fernando Perez <fperez@colorado.edu>
3756
3762
3757 * IPython/usage.py (__doc__): updated the --help information and
3763 * IPython/usage.py (__doc__): updated the --help information and
3758 the ipythonrc file to indicate that -log generates
3764 the ipythonrc file to indicate that -log generates
3759 ./ipython.log. Also fixed the corresponding info in @logstart.
3765 ./ipython.log. Also fixed the corresponding info in @logstart.
3760 This and several other fixes in the manuals thanks to reports by
3766 This and several other fixes in the manuals thanks to reports by
3761 François Pinard <pinard-AT-iro.umontreal.ca>.
3767 François Pinard <pinard-AT-iro.umontreal.ca>.
3762
3768
3763 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3769 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3764 refer to @logstart (instead of @log, which doesn't exist).
3770 refer to @logstart (instead of @log, which doesn't exist).
3765
3771
3766 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3772 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3767 AttributeError crash. Thanks to Christopher Armstrong
3773 AttributeError crash. Thanks to Christopher Armstrong
3768 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3774 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3769 introduced recently (in 0.2.14pre37) with the fix to the eval
3775 introduced recently (in 0.2.14pre37) with the fix to the eval
3770 problem mentioned below.
3776 problem mentioned below.
3771
3777
3772 2002-10-17 Fernando Perez <fperez@colorado.edu>
3778 2002-10-17 Fernando Perez <fperez@colorado.edu>
3773
3779
3774 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3780 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3775 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3781 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3776
3782
3777 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3783 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3778 this function to fix a problem reported by Alex Schmolck. He saw
3784 this function to fix a problem reported by Alex Schmolck. He saw
3779 it with list comprehensions and generators, which were getting
3785 it with list comprehensions and generators, which were getting
3780 called twice. The real problem was an 'eval' call in testing for
3786 called twice. The real problem was an 'eval' call in testing for
3781 automagic which was evaluating the input line silently.
3787 automagic which was evaluating the input line silently.
3782
3788
3783 This is a potentially very nasty bug, if the input has side
3789 This is a potentially very nasty bug, if the input has side
3784 effects which must not be repeated. The code is much cleaner now,
3790 effects which must not be repeated. The code is much cleaner now,
3785 without any blanket 'except' left and with a regexp test for
3791 without any blanket 'except' left and with a regexp test for
3786 actual function names.
3792 actual function names.
3787
3793
3788 But an eval remains, which I'm not fully comfortable with. I just
3794 But an eval remains, which I'm not fully comfortable with. I just
3789 don't know how to find out if an expression could be a callable in
3795 don't know how to find out if an expression could be a callable in
3790 the user's namespace without doing an eval on the string. However
3796 the user's namespace without doing an eval on the string. However
3791 that string is now much more strictly checked so that no code
3797 that string is now much more strictly checked so that no code
3792 slips by, so the eval should only happen for things that can
3798 slips by, so the eval should only happen for things that can
3793 really be only function/method names.
3799 really be only function/method names.
3794
3800
3795 2002-10-15 Fernando Perez <fperez@colorado.edu>
3801 2002-10-15 Fernando Perez <fperez@colorado.edu>
3796
3802
3797 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3803 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3798 OSX information to main manual, removed README_Mac_OSX file from
3804 OSX information to main manual, removed README_Mac_OSX file from
3799 distribution. Also updated credits for recent additions.
3805 distribution. Also updated credits for recent additions.
3800
3806
3801 2002-10-10 Fernando Perez <fperez@colorado.edu>
3807 2002-10-10 Fernando Perez <fperez@colorado.edu>
3802
3808
3803 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3809 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3804 terminal-related issues. Many thanks to Andrea Riciputi
3810 terminal-related issues. Many thanks to Andrea Riciputi
3805 <andrea.riciputi-AT-libero.it> for writing it.
3811 <andrea.riciputi-AT-libero.it> for writing it.
3806
3812
3807 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3813 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3808 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3814 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3809
3815
3810 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3816 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3811 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3817 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3812 <syver-en-AT-online.no> who both submitted patches for this problem.
3818 <syver-en-AT-online.no> who both submitted patches for this problem.
3813
3819
3814 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3820 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3815 global embedding to make sure that things don't overwrite user
3821 global embedding to make sure that things don't overwrite user
3816 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3822 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3817
3823
3818 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3824 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3819 compatibility. Thanks to Hayden Callow
3825 compatibility. Thanks to Hayden Callow
3820 <h.callow-AT-elec.canterbury.ac.nz>
3826 <h.callow-AT-elec.canterbury.ac.nz>
3821
3827
3822 2002-10-04 Fernando Perez <fperez@colorado.edu>
3828 2002-10-04 Fernando Perez <fperez@colorado.edu>
3823
3829
3824 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3830 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3825 Gnuplot.File objects.
3831 Gnuplot.File objects.
3826
3832
3827 2002-07-23 Fernando Perez <fperez@colorado.edu>
3833 2002-07-23 Fernando Perez <fperez@colorado.edu>
3828
3834
3829 * IPython/genutils.py (timing): Added timings() and timing() for
3835 * IPython/genutils.py (timing): Added timings() and timing() for
3830 quick access to the most commonly needed data, the execution
3836 quick access to the most commonly needed data, the execution
3831 times. Old timing() renamed to timings_out().
3837 times. Old timing() renamed to timings_out().
3832
3838
3833 2002-07-18 Fernando Perez <fperez@colorado.edu>
3839 2002-07-18 Fernando Perez <fperez@colorado.edu>
3834
3840
3835 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3841 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3836 bug with nested instances disrupting the parent's tab completion.
3842 bug with nested instances disrupting the parent's tab completion.
3837
3843
3838 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3844 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3839 all_completions code to begin the emacs integration.
3845 all_completions code to begin the emacs integration.
3840
3846
3841 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3847 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3842 argument to allow titling individual arrays when plotting.
3848 argument to allow titling individual arrays when plotting.
3843
3849
3844 2002-07-15 Fernando Perez <fperez@colorado.edu>
3850 2002-07-15 Fernando Perez <fperez@colorado.edu>
3845
3851
3846 * setup.py (make_shortcut): changed to retrieve the value of
3852 * setup.py (make_shortcut): changed to retrieve the value of
3847 'Program Files' directory from the registry (this value changes in
3853 'Program Files' directory from the registry (this value changes in
3848 non-english versions of Windows). Thanks to Thomas Fanslau
3854 non-english versions of Windows). Thanks to Thomas Fanslau
3849 <tfanslau-AT-gmx.de> for the report.
3855 <tfanslau-AT-gmx.de> for the report.
3850
3856
3851 2002-07-10 Fernando Perez <fperez@colorado.edu>
3857 2002-07-10 Fernando Perez <fperez@colorado.edu>
3852
3858
3853 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3859 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3854 a bug in pdb, which crashes if a line with only whitespace is
3860 a bug in pdb, which crashes if a line with only whitespace is
3855 entered. Bug report submitted to sourceforge.
3861 entered. Bug report submitted to sourceforge.
3856
3862
3857 2002-07-09 Fernando Perez <fperez@colorado.edu>
3863 2002-07-09 Fernando Perez <fperez@colorado.edu>
3858
3864
3859 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3865 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3860 reporting exceptions (it's a bug in inspect.py, I just set a
3866 reporting exceptions (it's a bug in inspect.py, I just set a
3861 workaround).
3867 workaround).
3862
3868
3863 2002-07-08 Fernando Perez <fperez@colorado.edu>
3869 2002-07-08 Fernando Perez <fperez@colorado.edu>
3864
3870
3865 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3871 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3866 __IPYTHON__ in __builtins__ to show up in user_ns.
3872 __IPYTHON__ in __builtins__ to show up in user_ns.
3867
3873
3868 2002-07-03 Fernando Perez <fperez@colorado.edu>
3874 2002-07-03 Fernando Perez <fperez@colorado.edu>
3869
3875
3870 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3876 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3871 name from @gp_set_instance to @gp_set_default.
3877 name from @gp_set_instance to @gp_set_default.
3872
3878
3873 * IPython/ipmaker.py (make_IPython): default editor value set to
3879 * IPython/ipmaker.py (make_IPython): default editor value set to
3874 '0' (a string), to match the rc file. Otherwise will crash when
3880 '0' (a string), to match the rc file. Otherwise will crash when
3875 .strip() is called on it.
3881 .strip() is called on it.
3876
3882
3877
3883
3878 2002-06-28 Fernando Perez <fperez@colorado.edu>
3884 2002-06-28 Fernando Perez <fperez@colorado.edu>
3879
3885
3880 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3886 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3881 of files in current directory when a file is executed via
3887 of files in current directory when a file is executed via
3882 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3888 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3883
3889
3884 * setup.py (manfiles): fix for rpm builds, submitted by RA
3890 * setup.py (manfiles): fix for rpm builds, submitted by RA
3885 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3891 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3886
3892
3887 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3893 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3888 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3894 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3889 string!). A. Schmolck caught this one.
3895 string!). A. Schmolck caught this one.
3890
3896
3891 2002-06-27 Fernando Perez <fperez@colorado.edu>
3897 2002-06-27 Fernando Perez <fperez@colorado.edu>
3892
3898
3893 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3899 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3894 defined files at the cmd line. __name__ wasn't being set to
3900 defined files at the cmd line. __name__ wasn't being set to
3895 __main__.
3901 __main__.
3896
3902
3897 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3903 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3898 regular lists and tuples besides Numeric arrays.
3904 regular lists and tuples besides Numeric arrays.
3899
3905
3900 * IPython/Prompts.py (CachedOutput.__call__): Added output
3906 * IPython/Prompts.py (CachedOutput.__call__): Added output
3901 supression for input ending with ';'. Similar to Mathematica and
3907 supression for input ending with ';'. Similar to Mathematica and
3902 Matlab. The _* vars and Out[] list are still updated, just like
3908 Matlab. The _* vars and Out[] list are still updated, just like
3903 Mathematica behaves.
3909 Mathematica behaves.
3904
3910
3905 2002-06-25 Fernando Perez <fperez@colorado.edu>
3911 2002-06-25 Fernando Perez <fperez@colorado.edu>
3906
3912
3907 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3913 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3908 .ini extensions for profiels under Windows.
3914 .ini extensions for profiels under Windows.
3909
3915
3910 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3916 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3911 string form. Fix contributed by Alexander Schmolck
3917 string form. Fix contributed by Alexander Schmolck
3912 <a.schmolck-AT-gmx.net>
3918 <a.schmolck-AT-gmx.net>
3913
3919
3914 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3920 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3915 pre-configured Gnuplot instance.
3921 pre-configured Gnuplot instance.
3916
3922
3917 2002-06-21 Fernando Perez <fperez@colorado.edu>
3923 2002-06-21 Fernando Perez <fperez@colorado.edu>
3918
3924
3919 * IPython/numutils.py (exp_safe): new function, works around the
3925 * IPython/numutils.py (exp_safe): new function, works around the
3920 underflow problems in Numeric.
3926 underflow problems in Numeric.
3921 (log2): New fn. Safe log in base 2: returns exact integer answer
3927 (log2): New fn. Safe log in base 2: returns exact integer answer
3922 for exact integer powers of 2.
3928 for exact integer powers of 2.
3923
3929
3924 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3930 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3925 properly.
3931 properly.
3926
3932
3927 2002-06-20 Fernando Perez <fperez@colorado.edu>
3933 2002-06-20 Fernando Perez <fperez@colorado.edu>
3928
3934
3929 * IPython/genutils.py (timing): new function like
3935 * IPython/genutils.py (timing): new function like
3930 Mathematica's. Similar to time_test, but returns more info.
3936 Mathematica's. Similar to time_test, but returns more info.
3931
3937
3932 2002-06-18 Fernando Perez <fperez@colorado.edu>
3938 2002-06-18 Fernando Perez <fperez@colorado.edu>
3933
3939
3934 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3940 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3935 according to Mike Heeter's suggestions.
3941 according to Mike Heeter's suggestions.
3936
3942
3937 2002-06-16 Fernando Perez <fperez@colorado.edu>
3943 2002-06-16 Fernando Perez <fperez@colorado.edu>
3938
3944
3939 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3945 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3940 system. GnuplotMagic is gone as a user-directory option. New files
3946 system. GnuplotMagic is gone as a user-directory option. New files
3941 make it easier to use all the gnuplot stuff both from external
3947 make it easier to use all the gnuplot stuff both from external
3942 programs as well as from IPython. Had to rewrite part of
3948 programs as well as from IPython. Had to rewrite part of
3943 hardcopy() b/c of a strange bug: often the ps files simply don't
3949 hardcopy() b/c of a strange bug: often the ps files simply don't
3944 get created, and require a repeat of the command (often several
3950 get created, and require a repeat of the command (often several
3945 times).
3951 times).
3946
3952
3947 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3953 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3948 resolve output channel at call time, so that if sys.stderr has
3954 resolve output channel at call time, so that if sys.stderr has
3949 been redirected by user this gets honored.
3955 been redirected by user this gets honored.
3950
3956
3951 2002-06-13 Fernando Perez <fperez@colorado.edu>
3957 2002-06-13 Fernando Perez <fperez@colorado.edu>
3952
3958
3953 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3959 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3954 IPShell. Kept a copy with the old names to avoid breaking people's
3960 IPShell. Kept a copy with the old names to avoid breaking people's
3955 embedded code.
3961 embedded code.
3956
3962
3957 * IPython/ipython: simplified it to the bare minimum after
3963 * IPython/ipython: simplified it to the bare minimum after
3958 Holger's suggestions. Added info about how to use it in
3964 Holger's suggestions. Added info about how to use it in
3959 PYTHONSTARTUP.
3965 PYTHONSTARTUP.
3960
3966
3961 * IPython/Shell.py (IPythonShell): changed the options passing
3967 * IPython/Shell.py (IPythonShell): changed the options passing
3962 from a string with funky %s replacements to a straight list. Maybe
3968 from a string with funky %s replacements to a straight list. Maybe
3963 a bit more typing, but it follows sys.argv conventions, so there's
3969 a bit more typing, but it follows sys.argv conventions, so there's
3964 less special-casing to remember.
3970 less special-casing to remember.
3965
3971
3966 2002-06-12 Fernando Perez <fperez@colorado.edu>
3972 2002-06-12 Fernando Perez <fperez@colorado.edu>
3967
3973
3968 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3974 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3969 command. Thanks to a suggestion by Mike Heeter.
3975 command. Thanks to a suggestion by Mike Heeter.
3970 (Magic.magic_pfile): added behavior to look at filenames if given
3976 (Magic.magic_pfile): added behavior to look at filenames if given
3971 arg is not a defined object.
3977 arg is not a defined object.
3972 (Magic.magic_save): New @save function to save code snippets. Also
3978 (Magic.magic_save): New @save function to save code snippets. Also
3973 a Mike Heeter idea.
3979 a Mike Heeter idea.
3974
3980
3975 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3981 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3976 plot() and replot(). Much more convenient now, especially for
3982 plot() and replot(). Much more convenient now, especially for
3977 interactive use.
3983 interactive use.
3978
3984
3979 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3985 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3980 filenames.
3986 filenames.
3981
3987
3982 2002-06-02 Fernando Perez <fperez@colorado.edu>
3988 2002-06-02 Fernando Perez <fperez@colorado.edu>
3983
3989
3984 * IPython/Struct.py (Struct.__init__): modified to admit
3990 * IPython/Struct.py (Struct.__init__): modified to admit
3985 initialization via another struct.
3991 initialization via another struct.
3986
3992
3987 * IPython/genutils.py (SystemExec.__init__): New stateful
3993 * IPython/genutils.py (SystemExec.__init__): New stateful
3988 interface to xsys and bq. Useful for writing system scripts.
3994 interface to xsys and bq. Useful for writing system scripts.
3989
3995
3990 2002-05-30 Fernando Perez <fperez@colorado.edu>
3996 2002-05-30 Fernando Perez <fperez@colorado.edu>
3991
3997
3992 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3998 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3993 documents. This will make the user download smaller (it's getting
3999 documents. This will make the user download smaller (it's getting
3994 too big).
4000 too big).
3995
4001
3996 2002-05-29 Fernando Perez <fperez@colorado.edu>
4002 2002-05-29 Fernando Perez <fperez@colorado.edu>
3997
4003
3998 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
4004 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3999 fix problems with shelve and pickle. Seems to work, but I don't
4005 fix problems with shelve and pickle. Seems to work, but I don't
4000 know if corner cases break it. Thanks to Mike Heeter
4006 know if corner cases break it. Thanks to Mike Heeter
4001 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
4007 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
4002
4008
4003 2002-05-24 Fernando Perez <fperez@colorado.edu>
4009 2002-05-24 Fernando Perez <fperez@colorado.edu>
4004
4010
4005 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
4011 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
4006 macros having broken.
4012 macros having broken.
4007
4013
4008 2002-05-21 Fernando Perez <fperez@colorado.edu>
4014 2002-05-21 Fernando Perez <fperez@colorado.edu>
4009
4015
4010 * IPython/Magic.py (Magic.magic_logstart): fixed recently
4016 * IPython/Magic.py (Magic.magic_logstart): fixed recently
4011 introduced logging bug: all history before logging started was
4017 introduced logging bug: all history before logging started was
4012 being written one character per line! This came from the redesign
4018 being written one character per line! This came from the redesign
4013 of the input history as a special list which slices to strings,
4019 of the input history as a special list which slices to strings,
4014 not to lists.
4020 not to lists.
4015
4021
4016 2002-05-20 Fernando Perez <fperez@colorado.edu>
4022 2002-05-20 Fernando Perez <fperez@colorado.edu>
4017
4023
4018 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4024 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4019 be an attribute of all classes in this module. The design of these
4025 be an attribute of all classes in this module. The design of these
4020 classes needs some serious overhauling.
4026 classes needs some serious overhauling.
4021
4027
4022 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4028 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4023 which was ignoring '_' in option names.
4029 which was ignoring '_' in option names.
4024
4030
4025 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4031 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4026 'Verbose_novars' to 'Context' and made it the new default. It's a
4032 'Verbose_novars' to 'Context' and made it the new default. It's a
4027 bit more readable and also safer than verbose.
4033 bit more readable and also safer than verbose.
4028
4034
4029 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4035 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4030 triple-quoted strings.
4036 triple-quoted strings.
4031
4037
4032 * IPython/OInspect.py (__all__): new module exposing the object
4038 * IPython/OInspect.py (__all__): new module exposing the object
4033 introspection facilities. Now the corresponding magics are dummy
4039 introspection facilities. Now the corresponding magics are dummy
4034 wrappers around this. Having this module will make it much easier
4040 wrappers around this. Having this module will make it much easier
4035 to put these functions into our modified pdb.
4041 to put these functions into our modified pdb.
4036 This new object inspector system uses the new colorizing module,
4042 This new object inspector system uses the new colorizing module,
4037 so source code and other things are nicely syntax highlighted.
4043 so source code and other things are nicely syntax highlighted.
4038
4044
4039 2002-05-18 Fernando Perez <fperez@colorado.edu>
4045 2002-05-18 Fernando Perez <fperez@colorado.edu>
4040
4046
4041 * IPython/ColorANSI.py: Split the coloring tools into a separate
4047 * IPython/ColorANSI.py: Split the coloring tools into a separate
4042 module so I can use them in other code easier (they were part of
4048 module so I can use them in other code easier (they were part of
4043 ultraTB).
4049 ultraTB).
4044
4050
4045 2002-05-17 Fernando Perez <fperez@colorado.edu>
4051 2002-05-17 Fernando Perez <fperez@colorado.edu>
4046
4052
4047 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4053 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4048 fixed it to set the global 'g' also to the called instance, as
4054 fixed it to set the global 'g' also to the called instance, as
4049 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4055 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4050 user's 'g' variables).
4056 user's 'g' variables).
4051
4057
4052 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4058 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4053 global variables (aliases to _ih,_oh) so that users which expect
4059 global variables (aliases to _ih,_oh) so that users which expect
4054 In[5] or Out[7] to work aren't unpleasantly surprised.
4060 In[5] or Out[7] to work aren't unpleasantly surprised.
4055 (InputList.__getslice__): new class to allow executing slices of
4061 (InputList.__getslice__): new class to allow executing slices of
4056 input history directly. Very simple class, complements the use of
4062 input history directly. Very simple class, complements the use of
4057 macros.
4063 macros.
4058
4064
4059 2002-05-16 Fernando Perez <fperez@colorado.edu>
4065 2002-05-16 Fernando Perez <fperez@colorado.edu>
4060
4066
4061 * setup.py (docdirbase): make doc directory be just doc/IPython
4067 * setup.py (docdirbase): make doc directory be just doc/IPython
4062 without version numbers, it will reduce clutter for users.
4068 without version numbers, it will reduce clutter for users.
4063
4069
4064 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4070 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4065 execfile call to prevent possible memory leak. See for details:
4071 execfile call to prevent possible memory leak. See for details:
4066 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4072 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4067
4073
4068 2002-05-15 Fernando Perez <fperez@colorado.edu>
4074 2002-05-15 Fernando Perez <fperez@colorado.edu>
4069
4075
4070 * IPython/Magic.py (Magic.magic_psource): made the object
4076 * IPython/Magic.py (Magic.magic_psource): made the object
4071 introspection names be more standard: pdoc, pdef, pfile and
4077 introspection names be more standard: pdoc, pdef, pfile and
4072 psource. They all print/page their output, and it makes
4078 psource. They all print/page their output, and it makes
4073 remembering them easier. Kept old names for compatibility as
4079 remembering them easier. Kept old names for compatibility as
4074 aliases.
4080 aliases.
4075
4081
4076 2002-05-14 Fernando Perez <fperez@colorado.edu>
4082 2002-05-14 Fernando Perez <fperez@colorado.edu>
4077
4083
4078 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4084 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4079 what the mouse problem was. The trick is to use gnuplot with temp
4085 what the mouse problem was. The trick is to use gnuplot with temp
4080 files and NOT with pipes (for data communication), because having
4086 files and NOT with pipes (for data communication), because having
4081 both pipes and the mouse on is bad news.
4087 both pipes and the mouse on is bad news.
4082
4088
4083 2002-05-13 Fernando Perez <fperez@colorado.edu>
4089 2002-05-13 Fernando Perez <fperez@colorado.edu>
4084
4090
4085 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4091 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4086 bug. Information would be reported about builtins even when
4092 bug. Information would be reported about builtins even when
4087 user-defined functions overrode them.
4093 user-defined functions overrode them.
4088
4094
4089 2002-05-11 Fernando Perez <fperez@colorado.edu>
4095 2002-05-11 Fernando Perez <fperez@colorado.edu>
4090
4096
4091 * IPython/__init__.py (__all__): removed FlexCompleter from
4097 * IPython/__init__.py (__all__): removed FlexCompleter from
4092 __all__ so that things don't fail in platforms without readline.
4098 __all__ so that things don't fail in platforms without readline.
4093
4099
4094 2002-05-10 Fernando Perez <fperez@colorado.edu>
4100 2002-05-10 Fernando Perez <fperez@colorado.edu>
4095
4101
4096 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4102 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4097 it requires Numeric, effectively making Numeric a dependency for
4103 it requires Numeric, effectively making Numeric a dependency for
4098 IPython.
4104 IPython.
4099
4105
4100 * Released 0.2.13
4106 * Released 0.2.13
4101
4107
4102 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4108 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4103 profiler interface. Now all the major options from the profiler
4109 profiler interface. Now all the major options from the profiler
4104 module are directly supported in IPython, both for single
4110 module are directly supported in IPython, both for single
4105 expressions (@prun) and for full programs (@run -p).
4111 expressions (@prun) and for full programs (@run -p).
4106
4112
4107 2002-05-09 Fernando Perez <fperez@colorado.edu>
4113 2002-05-09 Fernando Perez <fperez@colorado.edu>
4108
4114
4109 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4115 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4110 magic properly formatted for screen.
4116 magic properly formatted for screen.
4111
4117
4112 * setup.py (make_shortcut): Changed things to put pdf version in
4118 * setup.py (make_shortcut): Changed things to put pdf version in
4113 doc/ instead of doc/manual (had to change lyxport a bit).
4119 doc/ instead of doc/manual (had to change lyxport a bit).
4114
4120
4115 * IPython/Magic.py (Profile.string_stats): made profile runs go
4121 * IPython/Magic.py (Profile.string_stats): made profile runs go
4116 through pager (they are long and a pager allows searching, saving,
4122 through pager (they are long and a pager allows searching, saving,
4117 etc.)
4123 etc.)
4118
4124
4119 2002-05-08 Fernando Perez <fperez@colorado.edu>
4125 2002-05-08 Fernando Perez <fperez@colorado.edu>
4120
4126
4121 * Released 0.2.12
4127 * Released 0.2.12
4122
4128
4123 2002-05-06 Fernando Perez <fperez@colorado.edu>
4129 2002-05-06 Fernando Perez <fperez@colorado.edu>
4124
4130
4125 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4131 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4126 introduced); 'hist n1 n2' was broken.
4132 introduced); 'hist n1 n2' was broken.
4127 (Magic.magic_pdb): added optional on/off arguments to @pdb
4133 (Magic.magic_pdb): added optional on/off arguments to @pdb
4128 (Magic.magic_run): added option -i to @run, which executes code in
4134 (Magic.magic_run): added option -i to @run, which executes code in
4129 the IPython namespace instead of a clean one. Also added @irun as
4135 the IPython namespace instead of a clean one. Also added @irun as
4130 an alias to @run -i.
4136 an alias to @run -i.
4131
4137
4132 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4138 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4133 fixed (it didn't really do anything, the namespaces were wrong).
4139 fixed (it didn't really do anything, the namespaces were wrong).
4134
4140
4135 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4141 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4136
4142
4137 * IPython/__init__.py (__all__): Fixed package namespace, now
4143 * IPython/__init__.py (__all__): Fixed package namespace, now
4138 'import IPython' does give access to IPython.<all> as
4144 'import IPython' does give access to IPython.<all> as
4139 expected. Also renamed __release__ to Release.
4145 expected. Also renamed __release__ to Release.
4140
4146
4141 * IPython/Debugger.py (__license__): created new Pdb class which
4147 * IPython/Debugger.py (__license__): created new Pdb class which
4142 functions like a drop-in for the normal pdb.Pdb but does NOT
4148 functions like a drop-in for the normal pdb.Pdb but does NOT
4143 import readline by default. This way it doesn't muck up IPython's
4149 import readline by default. This way it doesn't muck up IPython's
4144 readline handling, and now tab-completion finally works in the
4150 readline handling, and now tab-completion finally works in the
4145 debugger -- sort of. It completes things globally visible, but the
4151 debugger -- sort of. It completes things globally visible, but the
4146 completer doesn't track the stack as pdb walks it. That's a bit
4152 completer doesn't track the stack as pdb walks it. That's a bit
4147 tricky, and I'll have to implement it later.
4153 tricky, and I'll have to implement it later.
4148
4154
4149 2002-05-05 Fernando Perez <fperez@colorado.edu>
4155 2002-05-05 Fernando Perez <fperez@colorado.edu>
4150
4156
4151 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4157 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4152 magic docstrings when printed via ? (explicit \'s were being
4158 magic docstrings when printed via ? (explicit \'s were being
4153 printed).
4159 printed).
4154
4160
4155 * IPython/ipmaker.py (make_IPython): fixed namespace
4161 * IPython/ipmaker.py (make_IPython): fixed namespace
4156 identification bug. Now variables loaded via logs or command-line
4162 identification bug. Now variables loaded via logs or command-line
4157 files are recognized in the interactive namespace by @who.
4163 files are recognized in the interactive namespace by @who.
4158
4164
4159 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4165 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4160 log replay system stemming from the string form of Structs.
4166 log replay system stemming from the string form of Structs.
4161
4167
4162 * IPython/Magic.py (Macro.__init__): improved macros to properly
4168 * IPython/Magic.py (Macro.__init__): improved macros to properly
4163 handle magic commands in them.
4169 handle magic commands in them.
4164 (Magic.magic_logstart): usernames are now expanded so 'logstart
4170 (Magic.magic_logstart): usernames are now expanded so 'logstart
4165 ~/mylog' now works.
4171 ~/mylog' now works.
4166
4172
4167 * IPython/iplib.py (complete): fixed bug where paths starting with
4173 * IPython/iplib.py (complete): fixed bug where paths starting with
4168 '/' would be completed as magic names.
4174 '/' would be completed as magic names.
4169
4175
4170 2002-05-04 Fernando Perez <fperez@colorado.edu>
4176 2002-05-04 Fernando Perez <fperez@colorado.edu>
4171
4177
4172 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4178 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4173 allow running full programs under the profiler's control.
4179 allow running full programs under the profiler's control.
4174
4180
4175 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4181 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4176 mode to report exceptions verbosely but without formatting
4182 mode to report exceptions verbosely but without formatting
4177 variables. This addresses the issue of ipython 'freezing' (it's
4183 variables. This addresses the issue of ipython 'freezing' (it's
4178 not frozen, but caught in an expensive formatting loop) when huge
4184 not frozen, but caught in an expensive formatting loop) when huge
4179 variables are in the context of an exception.
4185 variables are in the context of an exception.
4180 (VerboseTB.text): Added '--->' markers at line where exception was
4186 (VerboseTB.text): Added '--->' markers at line where exception was
4181 triggered. Much clearer to read, especially in NoColor modes.
4187 triggered. Much clearer to read, especially in NoColor modes.
4182
4188
4183 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4189 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4184 implemented in reverse when changing to the new parse_options().
4190 implemented in reverse when changing to the new parse_options().
4185
4191
4186 2002-05-03 Fernando Perez <fperez@colorado.edu>
4192 2002-05-03 Fernando Perez <fperez@colorado.edu>
4187
4193
4188 * IPython/Magic.py (Magic.parse_options): new function so that
4194 * IPython/Magic.py (Magic.parse_options): new function so that
4189 magics can parse options easier.
4195 magics can parse options easier.
4190 (Magic.magic_prun): new function similar to profile.run(),
4196 (Magic.magic_prun): new function similar to profile.run(),
4191 suggested by Chris Hart.
4197 suggested by Chris Hart.
4192 (Magic.magic_cd): fixed behavior so that it only changes if
4198 (Magic.magic_cd): fixed behavior so that it only changes if
4193 directory actually is in history.
4199 directory actually is in history.
4194
4200
4195 * IPython/usage.py (__doc__): added information about potential
4201 * IPython/usage.py (__doc__): added information about potential
4196 slowness of Verbose exception mode when there are huge data
4202 slowness of Verbose exception mode when there are huge data
4197 structures to be formatted (thanks to Archie Paulson).
4203 structures to be formatted (thanks to Archie Paulson).
4198
4204
4199 * IPython/ipmaker.py (make_IPython): Changed default logging
4205 * IPython/ipmaker.py (make_IPython): Changed default logging
4200 (when simply called with -log) to use curr_dir/ipython.log in
4206 (when simply called with -log) to use curr_dir/ipython.log in
4201 rotate mode. Fixed crash which was occuring with -log before
4207 rotate mode. Fixed crash which was occuring with -log before
4202 (thanks to Jim Boyle).
4208 (thanks to Jim Boyle).
4203
4209
4204 2002-05-01 Fernando Perez <fperez@colorado.edu>
4210 2002-05-01 Fernando Perez <fperez@colorado.edu>
4205
4211
4206 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4212 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4207 was nasty -- though somewhat of a corner case).
4213 was nasty -- though somewhat of a corner case).
4208
4214
4209 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4215 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4210 text (was a bug).
4216 text (was a bug).
4211
4217
4212 2002-04-30 Fernando Perez <fperez@colorado.edu>
4218 2002-04-30 Fernando Perez <fperez@colorado.edu>
4213
4219
4214 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4220 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4215 a print after ^D or ^C from the user so that the In[] prompt
4221 a print after ^D or ^C from the user so that the In[] prompt
4216 doesn't over-run the gnuplot one.
4222 doesn't over-run the gnuplot one.
4217
4223
4218 2002-04-29 Fernando Perez <fperez@colorado.edu>
4224 2002-04-29 Fernando Perez <fperez@colorado.edu>
4219
4225
4220 * Released 0.2.10
4226 * Released 0.2.10
4221
4227
4222 * IPython/__release__.py (version): get date dynamically.
4228 * IPython/__release__.py (version): get date dynamically.
4223
4229
4224 * Misc. documentation updates thanks to Arnd's comments. Also ran
4230 * Misc. documentation updates thanks to Arnd's comments. Also ran
4225 a full spellcheck on the manual (hadn't been done in a while).
4231 a full spellcheck on the manual (hadn't been done in a while).
4226
4232
4227 2002-04-27 Fernando Perez <fperez@colorado.edu>
4233 2002-04-27 Fernando Perez <fperez@colorado.edu>
4228
4234
4229 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4235 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4230 starting a log in mid-session would reset the input history list.
4236 starting a log in mid-session would reset the input history list.
4231
4237
4232 2002-04-26 Fernando Perez <fperez@colorado.edu>
4238 2002-04-26 Fernando Perez <fperez@colorado.edu>
4233
4239
4234 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4240 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4235 all files were being included in an update. Now anything in
4241 all files were being included in an update. Now anything in
4236 UserConfig that matches [A-Za-z]*.py will go (this excludes
4242 UserConfig that matches [A-Za-z]*.py will go (this excludes
4237 __init__.py)
4243 __init__.py)
4238
4244
4239 2002-04-25 Fernando Perez <fperez@colorado.edu>
4245 2002-04-25 Fernando Perez <fperez@colorado.edu>
4240
4246
4241 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4247 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4242 to __builtins__ so that any form of embedded or imported code can
4248 to __builtins__ so that any form of embedded or imported code can
4243 test for being inside IPython.
4249 test for being inside IPython.
4244
4250
4245 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4251 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4246 changed to GnuplotMagic because it's now an importable module,
4252 changed to GnuplotMagic because it's now an importable module,
4247 this makes the name follow that of the standard Gnuplot module.
4253 this makes the name follow that of the standard Gnuplot module.
4248 GnuplotMagic can now be loaded at any time in mid-session.
4254 GnuplotMagic can now be loaded at any time in mid-session.
4249
4255
4250 2002-04-24 Fernando Perez <fperez@colorado.edu>
4256 2002-04-24 Fernando Perez <fperez@colorado.edu>
4251
4257
4252 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4258 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4253 the globals (IPython has its own namespace) and the
4259 the globals (IPython has its own namespace) and the
4254 PhysicalQuantity stuff is much better anyway.
4260 PhysicalQuantity stuff is much better anyway.
4255
4261
4256 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4262 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4257 embedding example to standard user directory for
4263 embedding example to standard user directory for
4258 distribution. Also put it in the manual.
4264 distribution. Also put it in the manual.
4259
4265
4260 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4266 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4261 instance as first argument (so it doesn't rely on some obscure
4267 instance as first argument (so it doesn't rely on some obscure
4262 hidden global).
4268 hidden global).
4263
4269
4264 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4270 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4265 delimiters. While it prevents ().TAB from working, it allows
4271 delimiters. While it prevents ().TAB from working, it allows
4266 completions in open (... expressions. This is by far a more common
4272 completions in open (... expressions. This is by far a more common
4267 case.
4273 case.
4268
4274
4269 2002-04-23 Fernando Perez <fperez@colorado.edu>
4275 2002-04-23 Fernando Perez <fperez@colorado.edu>
4270
4276
4271 * IPython/Extensions/InterpreterPasteInput.py: new
4277 * IPython/Extensions/InterpreterPasteInput.py: new
4272 syntax-processing module for pasting lines with >>> or ... at the
4278 syntax-processing module for pasting lines with >>> or ... at the
4273 start.
4279 start.
4274
4280
4275 * IPython/Extensions/PhysicalQ_Interactive.py
4281 * IPython/Extensions/PhysicalQ_Interactive.py
4276 (PhysicalQuantityInteractive.__int__): fixed to work with either
4282 (PhysicalQuantityInteractive.__int__): fixed to work with either
4277 Numeric or math.
4283 Numeric or math.
4278
4284
4279 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4285 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4280 provided profiles. Now we have:
4286 provided profiles. Now we have:
4281 -math -> math module as * and cmath with its own namespace.
4287 -math -> math module as * and cmath with its own namespace.
4282 -numeric -> Numeric as *, plus gnuplot & grace
4288 -numeric -> Numeric as *, plus gnuplot & grace
4283 -physics -> same as before
4289 -physics -> same as before
4284
4290
4285 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4291 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4286 user-defined magics wouldn't be found by @magic if they were
4292 user-defined magics wouldn't be found by @magic if they were
4287 defined as class methods. Also cleaned up the namespace search
4293 defined as class methods. Also cleaned up the namespace search
4288 logic and the string building (to use %s instead of many repeated
4294 logic and the string building (to use %s instead of many repeated
4289 string adds).
4295 string adds).
4290
4296
4291 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4297 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4292 of user-defined magics to operate with class methods (cleaner, in
4298 of user-defined magics to operate with class methods (cleaner, in
4293 line with the gnuplot code).
4299 line with the gnuplot code).
4294
4300
4295 2002-04-22 Fernando Perez <fperez@colorado.edu>
4301 2002-04-22 Fernando Perez <fperez@colorado.edu>
4296
4302
4297 * setup.py: updated dependency list so that manual is updated when
4303 * setup.py: updated dependency list so that manual is updated when
4298 all included files change.
4304 all included files change.
4299
4305
4300 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4306 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4301 the delimiter removal option (the fix is ugly right now).
4307 the delimiter removal option (the fix is ugly right now).
4302
4308
4303 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4309 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4304 all of the math profile (quicker loading, no conflict between
4310 all of the math profile (quicker loading, no conflict between
4305 g-9.8 and g-gnuplot).
4311 g-9.8 and g-gnuplot).
4306
4312
4307 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4313 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4308 name of post-mortem files to IPython_crash_report.txt.
4314 name of post-mortem files to IPython_crash_report.txt.
4309
4315
4310 * Cleanup/update of the docs. Added all the new readline info and
4316 * Cleanup/update of the docs. Added all the new readline info and
4311 formatted all lists as 'real lists'.
4317 formatted all lists as 'real lists'.
4312
4318
4313 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4319 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4314 tab-completion options, since the full readline parse_and_bind is
4320 tab-completion options, since the full readline parse_and_bind is
4315 now accessible.
4321 now accessible.
4316
4322
4317 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4323 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4318 handling of readline options. Now users can specify any string to
4324 handling of readline options. Now users can specify any string to
4319 be passed to parse_and_bind(), as well as the delimiters to be
4325 be passed to parse_and_bind(), as well as the delimiters to be
4320 removed.
4326 removed.
4321 (InteractiveShell.__init__): Added __name__ to the global
4327 (InteractiveShell.__init__): Added __name__ to the global
4322 namespace so that things like Itpl which rely on its existence
4328 namespace so that things like Itpl which rely on its existence
4323 don't crash.
4329 don't crash.
4324 (InteractiveShell._prefilter): Defined the default with a _ so
4330 (InteractiveShell._prefilter): Defined the default with a _ so
4325 that prefilter() is easier to override, while the default one
4331 that prefilter() is easier to override, while the default one
4326 remains available.
4332 remains available.
4327
4333
4328 2002-04-18 Fernando Perez <fperez@colorado.edu>
4334 2002-04-18 Fernando Perez <fperez@colorado.edu>
4329
4335
4330 * Added information about pdb in the docs.
4336 * Added information about pdb in the docs.
4331
4337
4332 2002-04-17 Fernando Perez <fperez@colorado.edu>
4338 2002-04-17 Fernando Perez <fperez@colorado.edu>
4333
4339
4334 * IPython/ipmaker.py (make_IPython): added rc_override option to
4340 * IPython/ipmaker.py (make_IPython): added rc_override option to
4335 allow passing config options at creation time which may override
4341 allow passing config options at creation time which may override
4336 anything set in the config files or command line. This is
4342 anything set in the config files or command line. This is
4337 particularly useful for configuring embedded instances.
4343 particularly useful for configuring embedded instances.
4338
4344
4339 2002-04-15 Fernando Perez <fperez@colorado.edu>
4345 2002-04-15 Fernando Perez <fperez@colorado.edu>
4340
4346
4341 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4347 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4342 crash embedded instances because of the input cache falling out of
4348 crash embedded instances because of the input cache falling out of
4343 sync with the output counter.
4349 sync with the output counter.
4344
4350
4345 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4351 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4346 mode which calls pdb after an uncaught exception in IPython itself.
4352 mode which calls pdb after an uncaught exception in IPython itself.
4347
4353
4348 2002-04-14 Fernando Perez <fperez@colorado.edu>
4354 2002-04-14 Fernando Perez <fperez@colorado.edu>
4349
4355
4350 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4356 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4351 readline, fix it back after each call.
4357 readline, fix it back after each call.
4352
4358
4353 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4359 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4354 method to force all access via __call__(), which guarantees that
4360 method to force all access via __call__(), which guarantees that
4355 traceback references are properly deleted.
4361 traceback references are properly deleted.
4356
4362
4357 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4363 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4358 improve printing when pprint is in use.
4364 improve printing when pprint is in use.
4359
4365
4360 2002-04-13 Fernando Perez <fperez@colorado.edu>
4366 2002-04-13 Fernando Perez <fperez@colorado.edu>
4361
4367
4362 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4368 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4363 exceptions aren't caught anymore. If the user triggers one, he
4369 exceptions aren't caught anymore. If the user triggers one, he
4364 should know why he's doing it and it should go all the way up,
4370 should know why he's doing it and it should go all the way up,
4365 just like any other exception. So now @abort will fully kill the
4371 just like any other exception. So now @abort will fully kill the
4366 embedded interpreter and the embedding code (unless that happens
4372 embedded interpreter and the embedding code (unless that happens
4367 to catch SystemExit).
4373 to catch SystemExit).
4368
4374
4369 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4375 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4370 and a debugger() method to invoke the interactive pdb debugger
4376 and a debugger() method to invoke the interactive pdb debugger
4371 after printing exception information. Also added the corresponding
4377 after printing exception information. Also added the corresponding
4372 -pdb option and @pdb magic to control this feature, and updated
4378 -pdb option and @pdb magic to control this feature, and updated
4373 the docs. After a suggestion from Christopher Hart
4379 the docs. After a suggestion from Christopher Hart
4374 (hart-AT-caltech.edu).
4380 (hart-AT-caltech.edu).
4375
4381
4376 2002-04-12 Fernando Perez <fperez@colorado.edu>
4382 2002-04-12 Fernando Perez <fperez@colorado.edu>
4377
4383
4378 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4384 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4379 the exception handlers defined by the user (not the CrashHandler)
4385 the exception handlers defined by the user (not the CrashHandler)
4380 so that user exceptions don't trigger an ipython bug report.
4386 so that user exceptions don't trigger an ipython bug report.
4381
4387
4382 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4388 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4383 configurable (it should have always been so).
4389 configurable (it should have always been so).
4384
4390
4385 2002-03-26 Fernando Perez <fperez@colorado.edu>
4391 2002-03-26 Fernando Perez <fperez@colorado.edu>
4386
4392
4387 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4393 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4388 and there to fix embedding namespace issues. This should all be
4394 and there to fix embedding namespace issues. This should all be
4389 done in a more elegant way.
4395 done in a more elegant way.
4390
4396
4391 2002-03-25 Fernando Perez <fperez@colorado.edu>
4397 2002-03-25 Fernando Perez <fperez@colorado.edu>
4392
4398
4393 * IPython/genutils.py (get_home_dir): Try to make it work under
4399 * IPython/genutils.py (get_home_dir): Try to make it work under
4394 win9x also.
4400 win9x also.
4395
4401
4396 2002-03-20 Fernando Perez <fperez@colorado.edu>
4402 2002-03-20 Fernando Perez <fperez@colorado.edu>
4397
4403
4398 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4404 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4399 sys.displayhook untouched upon __init__.
4405 sys.displayhook untouched upon __init__.
4400
4406
4401 2002-03-19 Fernando Perez <fperez@colorado.edu>
4407 2002-03-19 Fernando Perez <fperez@colorado.edu>
4402
4408
4403 * Released 0.2.9 (for embedding bug, basically).
4409 * Released 0.2.9 (for embedding bug, basically).
4404
4410
4405 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4411 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4406 exceptions so that enclosing shell's state can be restored.
4412 exceptions so that enclosing shell's state can be restored.
4407
4413
4408 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4414 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4409 naming conventions in the .ipython/ dir.
4415 naming conventions in the .ipython/ dir.
4410
4416
4411 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4417 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4412 from delimiters list so filenames with - in them get expanded.
4418 from delimiters list so filenames with - in them get expanded.
4413
4419
4414 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4420 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4415 sys.displayhook not being properly restored after an embedded call.
4421 sys.displayhook not being properly restored after an embedded call.
4416
4422
4417 2002-03-18 Fernando Perez <fperez@colorado.edu>
4423 2002-03-18 Fernando Perez <fperez@colorado.edu>
4418
4424
4419 * Released 0.2.8
4425 * Released 0.2.8
4420
4426
4421 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4427 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4422 some files weren't being included in a -upgrade.
4428 some files weren't being included in a -upgrade.
4423 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4429 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4424 on' so that the first tab completes.
4430 on' so that the first tab completes.
4425 (InteractiveShell.handle_magic): fixed bug with spaces around
4431 (InteractiveShell.handle_magic): fixed bug with spaces around
4426 quotes breaking many magic commands.
4432 quotes breaking many magic commands.
4427
4433
4428 * setup.py: added note about ignoring the syntax error messages at
4434 * setup.py: added note about ignoring the syntax error messages at
4429 installation.
4435 installation.
4430
4436
4431 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4437 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4432 streamlining the gnuplot interface, now there's only one magic @gp.
4438 streamlining the gnuplot interface, now there's only one magic @gp.
4433
4439
4434 2002-03-17 Fernando Perez <fperez@colorado.edu>
4440 2002-03-17 Fernando Perez <fperez@colorado.edu>
4435
4441
4436 * IPython/UserConfig/magic_gnuplot.py: new name for the
4442 * IPython/UserConfig/magic_gnuplot.py: new name for the
4437 example-magic_pm.py file. Much enhanced system, now with a shell
4443 example-magic_pm.py file. Much enhanced system, now with a shell
4438 for communicating directly with gnuplot, one command at a time.
4444 for communicating directly with gnuplot, one command at a time.
4439
4445
4440 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4446 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4441 setting __name__=='__main__'.
4447 setting __name__=='__main__'.
4442
4448
4443 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4449 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4444 mini-shell for accessing gnuplot from inside ipython. Should
4450 mini-shell for accessing gnuplot from inside ipython. Should
4445 extend it later for grace access too. Inspired by Arnd's
4451 extend it later for grace access too. Inspired by Arnd's
4446 suggestion.
4452 suggestion.
4447
4453
4448 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4454 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4449 calling magic functions with () in their arguments. Thanks to Arnd
4455 calling magic functions with () in their arguments. Thanks to Arnd
4450 Baecker for pointing this to me.
4456 Baecker for pointing this to me.
4451
4457
4452 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4458 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4453 infinitely for integer or complex arrays (only worked with floats).
4459 infinitely for integer or complex arrays (only worked with floats).
4454
4460
4455 2002-03-16 Fernando Perez <fperez@colorado.edu>
4461 2002-03-16 Fernando Perez <fperez@colorado.edu>
4456
4462
4457 * setup.py: Merged setup and setup_windows into a single script
4463 * setup.py: Merged setup and setup_windows into a single script
4458 which properly handles things for windows users.
4464 which properly handles things for windows users.
4459
4465
4460 2002-03-15 Fernando Perez <fperez@colorado.edu>
4466 2002-03-15 Fernando Perez <fperez@colorado.edu>
4461
4467
4462 * Big change to the manual: now the magics are all automatically
4468 * Big change to the manual: now the magics are all automatically
4463 documented. This information is generated from their docstrings
4469 documented. This information is generated from their docstrings
4464 and put in a latex file included by the manual lyx file. This way
4470 and put in a latex file included by the manual lyx file. This way
4465 we get always up to date information for the magics. The manual
4471 we get always up to date information for the magics. The manual
4466 now also has proper version information, also auto-synced.
4472 now also has proper version information, also auto-synced.
4467
4473
4468 For this to work, an undocumented --magic_docstrings option was added.
4474 For this to work, an undocumented --magic_docstrings option was added.
4469
4475
4470 2002-03-13 Fernando Perez <fperez@colorado.edu>
4476 2002-03-13 Fernando Perez <fperez@colorado.edu>
4471
4477
4472 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4478 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4473 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4479 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4474
4480
4475 2002-03-12 Fernando Perez <fperez@colorado.edu>
4481 2002-03-12 Fernando Perez <fperez@colorado.edu>
4476
4482
4477 * IPython/ultraTB.py (TermColors): changed color escapes again to
4483 * IPython/ultraTB.py (TermColors): changed color escapes again to
4478 fix the (old, reintroduced) line-wrapping bug. Basically, if
4484 fix the (old, reintroduced) line-wrapping bug. Basically, if
4479 \001..\002 aren't given in the color escapes, lines get wrapped
4485 \001..\002 aren't given in the color escapes, lines get wrapped
4480 weirdly. But giving those screws up old xterms and emacs terms. So
4486 weirdly. But giving those screws up old xterms and emacs terms. So
4481 I added some logic for emacs terms to be ok, but I can't identify old
4487 I added some logic for emacs terms to be ok, but I can't identify old
4482 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4488 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4483
4489
4484 2002-03-10 Fernando Perez <fperez@colorado.edu>
4490 2002-03-10 Fernando Perez <fperez@colorado.edu>
4485
4491
4486 * IPython/usage.py (__doc__): Various documentation cleanups and
4492 * IPython/usage.py (__doc__): Various documentation cleanups and
4487 updates, both in usage docstrings and in the manual.
4493 updates, both in usage docstrings and in the manual.
4488
4494
4489 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4495 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4490 handling of caching. Set minimum acceptabe value for having a
4496 handling of caching. Set minimum acceptabe value for having a
4491 cache at 20 values.
4497 cache at 20 values.
4492
4498
4493 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4499 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4494 install_first_time function to a method, renamed it and added an
4500 install_first_time function to a method, renamed it and added an
4495 'upgrade' mode. Now people can update their config directory with
4501 'upgrade' mode. Now people can update their config directory with
4496 a simple command line switch (-upgrade, also new).
4502 a simple command line switch (-upgrade, also new).
4497
4503
4498 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4504 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4499 @file (convenient for automagic users under Python >= 2.2).
4505 @file (convenient for automagic users under Python >= 2.2).
4500 Removed @files (it seemed more like a plural than an abbrev. of
4506 Removed @files (it seemed more like a plural than an abbrev. of
4501 'file show').
4507 'file show').
4502
4508
4503 * IPython/iplib.py (install_first_time): Fixed crash if there were
4509 * IPython/iplib.py (install_first_time): Fixed crash if there were
4504 backup files ('~') in .ipython/ install directory.
4510 backup files ('~') in .ipython/ install directory.
4505
4511
4506 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4512 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4507 system. Things look fine, but these changes are fairly
4513 system. Things look fine, but these changes are fairly
4508 intrusive. Test them for a few days.
4514 intrusive. Test them for a few days.
4509
4515
4510 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4516 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4511 the prompts system. Now all in/out prompt strings are user
4517 the prompts system. Now all in/out prompt strings are user
4512 controllable. This is particularly useful for embedding, as one
4518 controllable. This is particularly useful for embedding, as one
4513 can tag embedded instances with particular prompts.
4519 can tag embedded instances with particular prompts.
4514
4520
4515 Also removed global use of sys.ps1/2, which now allows nested
4521 Also removed global use of sys.ps1/2, which now allows nested
4516 embeddings without any problems. Added command-line options for
4522 embeddings without any problems. Added command-line options for
4517 the prompt strings.
4523 the prompt strings.
4518
4524
4519 2002-03-08 Fernando Perez <fperez@colorado.edu>
4525 2002-03-08 Fernando Perez <fperez@colorado.edu>
4520
4526
4521 * IPython/UserConfig/example-embed-short.py (ipshell): added
4527 * IPython/UserConfig/example-embed-short.py (ipshell): added
4522 example file with the bare minimum code for embedding.
4528 example file with the bare minimum code for embedding.
4523
4529
4524 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4530 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4525 functionality for the embeddable shell to be activated/deactivated
4531 functionality for the embeddable shell to be activated/deactivated
4526 either globally or at each call.
4532 either globally or at each call.
4527
4533
4528 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4534 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4529 rewriting the prompt with '--->' for auto-inputs with proper
4535 rewriting the prompt with '--->' for auto-inputs with proper
4530 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4536 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4531 this is handled by the prompts class itself, as it should.
4537 this is handled by the prompts class itself, as it should.
4532
4538
4533 2002-03-05 Fernando Perez <fperez@colorado.edu>
4539 2002-03-05 Fernando Perez <fperez@colorado.edu>
4534
4540
4535 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4541 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4536 @logstart to avoid name clashes with the math log function.
4542 @logstart to avoid name clashes with the math log function.
4537
4543
4538 * Big updates to X/Emacs section of the manual.
4544 * Big updates to X/Emacs section of the manual.
4539
4545
4540 * Removed ipython_emacs. Milan explained to me how to pass
4546 * Removed ipython_emacs. Milan explained to me how to pass
4541 arguments to ipython through Emacs. Some day I'm going to end up
4547 arguments to ipython through Emacs. Some day I'm going to end up
4542 learning some lisp...
4548 learning some lisp...
4543
4549
4544 2002-03-04 Fernando Perez <fperez@colorado.edu>
4550 2002-03-04 Fernando Perez <fperez@colorado.edu>
4545
4551
4546 * IPython/ipython_emacs: Created script to be used as the
4552 * IPython/ipython_emacs: Created script to be used as the
4547 py-python-command Emacs variable so we can pass IPython
4553 py-python-command Emacs variable so we can pass IPython
4548 parameters. I can't figure out how to tell Emacs directly to pass
4554 parameters. I can't figure out how to tell Emacs directly to pass
4549 parameters to IPython, so a dummy shell script will do it.
4555 parameters to IPython, so a dummy shell script will do it.
4550
4556
4551 Other enhancements made for things to work better under Emacs'
4557 Other enhancements made for things to work better under Emacs'
4552 various types of terminals. Many thanks to Milan Zamazal
4558 various types of terminals. Many thanks to Milan Zamazal
4553 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4559 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4554
4560
4555 2002-03-01 Fernando Perez <fperez@colorado.edu>
4561 2002-03-01 Fernando Perez <fperez@colorado.edu>
4556
4562
4557 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4563 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4558 that loading of readline is now optional. This gives better
4564 that loading of readline is now optional. This gives better
4559 control to emacs users.
4565 control to emacs users.
4560
4566
4561 * IPython/ultraTB.py (__date__): Modified color escape sequences
4567 * IPython/ultraTB.py (__date__): Modified color escape sequences
4562 and now things work fine under xterm and in Emacs' term buffers
4568 and now things work fine under xterm and in Emacs' term buffers
4563 (though not shell ones). Well, in emacs you get colors, but all
4569 (though not shell ones). Well, in emacs you get colors, but all
4564 seem to be 'light' colors (no difference between dark and light
4570 seem to be 'light' colors (no difference between dark and light
4565 ones). But the garbage chars are gone, and also in xterms. It
4571 ones). But the garbage chars are gone, and also in xterms. It
4566 seems that now I'm using 'cleaner' ansi sequences.
4572 seems that now I'm using 'cleaner' ansi sequences.
4567
4573
4568 2002-02-21 Fernando Perez <fperez@colorado.edu>
4574 2002-02-21 Fernando Perez <fperez@colorado.edu>
4569
4575
4570 * Released 0.2.7 (mainly to publish the scoping fix).
4576 * Released 0.2.7 (mainly to publish the scoping fix).
4571
4577
4572 * IPython/Logger.py (Logger.logstate): added. A corresponding
4578 * IPython/Logger.py (Logger.logstate): added. A corresponding
4573 @logstate magic was created.
4579 @logstate magic was created.
4574
4580
4575 * IPython/Magic.py: fixed nested scoping problem under Python
4581 * IPython/Magic.py: fixed nested scoping problem under Python
4576 2.1.x (automagic wasn't working).
4582 2.1.x (automagic wasn't working).
4577
4583
4578 2002-02-20 Fernando Perez <fperez@colorado.edu>
4584 2002-02-20 Fernando Perez <fperez@colorado.edu>
4579
4585
4580 * Released 0.2.6.
4586 * Released 0.2.6.
4581
4587
4582 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4588 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4583 option so that logs can come out without any headers at all.
4589 option so that logs can come out without any headers at all.
4584
4590
4585 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4591 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4586 SciPy.
4592 SciPy.
4587
4593
4588 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4594 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4589 that embedded IPython calls don't require vars() to be explicitly
4595 that embedded IPython calls don't require vars() to be explicitly
4590 passed. Now they are extracted from the caller's frame (code
4596 passed. Now they are extracted from the caller's frame (code
4591 snatched from Eric Jones' weave). Added better documentation to
4597 snatched from Eric Jones' weave). Added better documentation to
4592 the section on embedding and the example file.
4598 the section on embedding and the example file.
4593
4599
4594 * IPython/genutils.py (page): Changed so that under emacs, it just
4600 * IPython/genutils.py (page): Changed so that under emacs, it just
4595 prints the string. You can then page up and down in the emacs
4601 prints the string. You can then page up and down in the emacs
4596 buffer itself. This is how the builtin help() works.
4602 buffer itself. This is how the builtin help() works.
4597
4603
4598 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4604 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4599 macro scoping: macros need to be executed in the user's namespace
4605 macro scoping: macros need to be executed in the user's namespace
4600 to work as if they had been typed by the user.
4606 to work as if they had been typed by the user.
4601
4607
4602 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4608 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4603 execute automatically (no need to type 'exec...'). They then
4609 execute automatically (no need to type 'exec...'). They then
4604 behave like 'true macros'. The printing system was also modified
4610 behave like 'true macros'. The printing system was also modified
4605 for this to work.
4611 for this to work.
4606
4612
4607 2002-02-19 Fernando Perez <fperez@colorado.edu>
4613 2002-02-19 Fernando Perez <fperez@colorado.edu>
4608
4614
4609 * IPython/genutils.py (page_file): new function for paging files
4615 * IPython/genutils.py (page_file): new function for paging files
4610 in an OS-independent way. Also necessary for file viewing to work
4616 in an OS-independent way. Also necessary for file viewing to work
4611 well inside Emacs buffers.
4617 well inside Emacs buffers.
4612 (page): Added checks for being in an emacs buffer.
4618 (page): Added checks for being in an emacs buffer.
4613 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4619 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4614 same bug in iplib.
4620 same bug in iplib.
4615
4621
4616 2002-02-18 Fernando Perez <fperez@colorado.edu>
4622 2002-02-18 Fernando Perez <fperez@colorado.edu>
4617
4623
4618 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4624 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4619 of readline so that IPython can work inside an Emacs buffer.
4625 of readline so that IPython can work inside an Emacs buffer.
4620
4626
4621 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4627 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4622 method signatures (they weren't really bugs, but it looks cleaner
4628 method signatures (they weren't really bugs, but it looks cleaner
4623 and keeps PyChecker happy).
4629 and keeps PyChecker happy).
4624
4630
4625 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4631 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4626 for implementing various user-defined hooks. Currently only
4632 for implementing various user-defined hooks. Currently only
4627 display is done.
4633 display is done.
4628
4634
4629 * IPython/Prompts.py (CachedOutput._display): changed display
4635 * IPython/Prompts.py (CachedOutput._display): changed display
4630 functions so that they can be dynamically changed by users easily.
4636 functions so that they can be dynamically changed by users easily.
4631
4637
4632 * IPython/Extensions/numeric_formats.py (num_display): added an
4638 * IPython/Extensions/numeric_formats.py (num_display): added an
4633 extension for printing NumPy arrays in flexible manners. It
4639 extension for printing NumPy arrays in flexible manners. It
4634 doesn't do anything yet, but all the structure is in
4640 doesn't do anything yet, but all the structure is in
4635 place. Ultimately the plan is to implement output format control
4641 place. Ultimately the plan is to implement output format control
4636 like in Octave.
4642 like in Octave.
4637
4643
4638 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4644 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4639 methods are found at run-time by all the automatic machinery.
4645 methods are found at run-time by all the automatic machinery.
4640
4646
4641 2002-02-17 Fernando Perez <fperez@colorado.edu>
4647 2002-02-17 Fernando Perez <fperez@colorado.edu>
4642
4648
4643 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4649 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4644 whole file a little.
4650 whole file a little.
4645
4651
4646 * ToDo: closed this document. Now there's a new_design.lyx
4652 * ToDo: closed this document. Now there's a new_design.lyx
4647 document for all new ideas. Added making a pdf of it for the
4653 document for all new ideas. Added making a pdf of it for the
4648 end-user distro.
4654 end-user distro.
4649
4655
4650 * IPython/Logger.py (Logger.switch_log): Created this to replace
4656 * IPython/Logger.py (Logger.switch_log): Created this to replace
4651 logon() and logoff(). It also fixes a nasty crash reported by
4657 logon() and logoff(). It also fixes a nasty crash reported by
4652 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4658 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4653
4659
4654 * IPython/iplib.py (complete): got auto-completion to work with
4660 * IPython/iplib.py (complete): got auto-completion to work with
4655 automagic (I had wanted this for a long time).
4661 automagic (I had wanted this for a long time).
4656
4662
4657 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4663 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4658 to @file, since file() is now a builtin and clashes with automagic
4664 to @file, since file() is now a builtin and clashes with automagic
4659 for @file.
4665 for @file.
4660
4666
4661 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4667 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4662 of this was previously in iplib, which had grown to more than 2000
4668 of this was previously in iplib, which had grown to more than 2000
4663 lines, way too long. No new functionality, but it makes managing
4669 lines, way too long. No new functionality, but it makes managing
4664 the code a bit easier.
4670 the code a bit easier.
4665
4671
4666 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4672 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4667 information to crash reports.
4673 information to crash reports.
4668
4674
4669 2002-02-12 Fernando Perez <fperez@colorado.edu>
4675 2002-02-12 Fernando Perez <fperez@colorado.edu>
4670
4676
4671 * Released 0.2.5.
4677 * Released 0.2.5.
4672
4678
4673 2002-02-11 Fernando Perez <fperez@colorado.edu>
4679 2002-02-11 Fernando Perez <fperez@colorado.edu>
4674
4680
4675 * Wrote a relatively complete Windows installer. It puts
4681 * Wrote a relatively complete Windows installer. It puts
4676 everything in place, creates Start Menu entries and fixes the
4682 everything in place, creates Start Menu entries and fixes the
4677 color issues. Nothing fancy, but it works.
4683 color issues. Nothing fancy, but it works.
4678
4684
4679 2002-02-10 Fernando Perez <fperez@colorado.edu>
4685 2002-02-10 Fernando Perez <fperez@colorado.edu>
4680
4686
4681 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4687 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4682 os.path.expanduser() call so that we can type @run ~/myfile.py and
4688 os.path.expanduser() call so that we can type @run ~/myfile.py and
4683 have thigs work as expected.
4689 have thigs work as expected.
4684
4690
4685 * IPython/genutils.py (page): fixed exception handling so things
4691 * IPython/genutils.py (page): fixed exception handling so things
4686 work both in Unix and Windows correctly. Quitting a pager triggers
4692 work both in Unix and Windows correctly. Quitting a pager triggers
4687 an IOError/broken pipe in Unix, and in windows not finding a pager
4693 an IOError/broken pipe in Unix, and in windows not finding a pager
4688 is also an IOError, so I had to actually look at the return value
4694 is also an IOError, so I had to actually look at the return value
4689 of the exception, not just the exception itself. Should be ok now.
4695 of the exception, not just the exception itself. Should be ok now.
4690
4696
4691 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4697 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4692 modified to allow case-insensitive color scheme changes.
4698 modified to allow case-insensitive color scheme changes.
4693
4699
4694 2002-02-09 Fernando Perez <fperez@colorado.edu>
4700 2002-02-09 Fernando Perez <fperez@colorado.edu>
4695
4701
4696 * IPython/genutils.py (native_line_ends): new function to leave
4702 * IPython/genutils.py (native_line_ends): new function to leave
4697 user config files with os-native line-endings.
4703 user config files with os-native line-endings.
4698
4704
4699 * README and manual updates.
4705 * README and manual updates.
4700
4706
4701 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4707 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4702 instead of StringType to catch Unicode strings.
4708 instead of StringType to catch Unicode strings.
4703
4709
4704 * IPython/genutils.py (filefind): fixed bug for paths with
4710 * IPython/genutils.py (filefind): fixed bug for paths with
4705 embedded spaces (very common in Windows).
4711 embedded spaces (very common in Windows).
4706
4712
4707 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4713 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4708 files under Windows, so that they get automatically associated
4714 files under Windows, so that they get automatically associated
4709 with a text editor. Windows makes it a pain to handle
4715 with a text editor. Windows makes it a pain to handle
4710 extension-less files.
4716 extension-less files.
4711
4717
4712 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4718 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4713 warning about readline only occur for Posix. In Windows there's no
4719 warning about readline only occur for Posix. In Windows there's no
4714 way to get readline, so why bother with the warning.
4720 way to get readline, so why bother with the warning.
4715
4721
4716 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4722 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4717 for __str__ instead of dir(self), since dir() changed in 2.2.
4723 for __str__ instead of dir(self), since dir() changed in 2.2.
4718
4724
4719 * Ported to Windows! Tested on XP, I suspect it should work fine
4725 * Ported to Windows! Tested on XP, I suspect it should work fine
4720 on NT/2000, but I don't think it will work on 98 et al. That
4726 on NT/2000, but I don't think it will work on 98 et al. That
4721 series of Windows is such a piece of junk anyway that I won't try
4727 series of Windows is such a piece of junk anyway that I won't try
4722 porting it there. The XP port was straightforward, showed a few
4728 porting it there. The XP port was straightforward, showed a few
4723 bugs here and there (fixed all), in particular some string
4729 bugs here and there (fixed all), in particular some string
4724 handling stuff which required considering Unicode strings (which
4730 handling stuff which required considering Unicode strings (which
4725 Windows uses). This is good, but hasn't been too tested :) No
4731 Windows uses). This is good, but hasn't been too tested :) No
4726 fancy installer yet, I'll put a note in the manual so people at
4732 fancy installer yet, I'll put a note in the manual so people at
4727 least make manually a shortcut.
4733 least make manually a shortcut.
4728
4734
4729 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4735 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4730 into a single one, "colors". This now controls both prompt and
4736 into a single one, "colors". This now controls both prompt and
4731 exception color schemes, and can be changed both at startup
4737 exception color schemes, and can be changed both at startup
4732 (either via command-line switches or via ipythonrc files) and at
4738 (either via command-line switches or via ipythonrc files) and at
4733 runtime, with @colors.
4739 runtime, with @colors.
4734 (Magic.magic_run): renamed @prun to @run and removed the old
4740 (Magic.magic_run): renamed @prun to @run and removed the old
4735 @run. The two were too similar to warrant keeping both.
4741 @run. The two were too similar to warrant keeping both.
4736
4742
4737 2002-02-03 Fernando Perez <fperez@colorado.edu>
4743 2002-02-03 Fernando Perez <fperez@colorado.edu>
4738
4744
4739 * IPython/iplib.py (install_first_time): Added comment on how to
4745 * IPython/iplib.py (install_first_time): Added comment on how to
4740 configure the color options for first-time users. Put a <return>
4746 configure the color options for first-time users. Put a <return>
4741 request at the end so that small-terminal users get a chance to
4747 request at the end so that small-terminal users get a chance to
4742 read the startup info.
4748 read the startup info.
4743
4749
4744 2002-01-23 Fernando Perez <fperez@colorado.edu>
4750 2002-01-23 Fernando Perez <fperez@colorado.edu>
4745
4751
4746 * IPython/iplib.py (CachedOutput.update): Changed output memory
4752 * IPython/iplib.py (CachedOutput.update): Changed output memory
4747 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4753 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4748 input history we still use _i. Did this b/c these variable are
4754 input history we still use _i. Did this b/c these variable are
4749 very commonly used in interactive work, so the less we need to
4755 very commonly used in interactive work, so the less we need to
4750 type the better off we are.
4756 type the better off we are.
4751 (Magic.magic_prun): updated @prun to better handle the namespaces
4757 (Magic.magic_prun): updated @prun to better handle the namespaces
4752 the file will run in, including a fix for __name__ not being set
4758 the file will run in, including a fix for __name__ not being set
4753 before.
4759 before.
4754
4760
4755 2002-01-20 Fernando Perez <fperez@colorado.edu>
4761 2002-01-20 Fernando Perez <fperez@colorado.edu>
4756
4762
4757 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4763 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4758 extra garbage for Python 2.2. Need to look more carefully into
4764 extra garbage for Python 2.2. Need to look more carefully into
4759 this later.
4765 this later.
4760
4766
4761 2002-01-19 Fernando Perez <fperez@colorado.edu>
4767 2002-01-19 Fernando Perez <fperez@colorado.edu>
4762
4768
4763 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4769 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4764 display SyntaxError exceptions properly formatted when they occur
4770 display SyntaxError exceptions properly formatted when they occur
4765 (they can be triggered by imported code).
4771 (they can be triggered by imported code).
4766
4772
4767 2002-01-18 Fernando Perez <fperez@colorado.edu>
4773 2002-01-18 Fernando Perez <fperez@colorado.edu>
4768
4774
4769 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4775 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4770 SyntaxError exceptions are reported nicely formatted, instead of
4776 SyntaxError exceptions are reported nicely formatted, instead of
4771 spitting out only offset information as before.
4777 spitting out only offset information as before.
4772 (Magic.magic_prun): Added the @prun function for executing
4778 (Magic.magic_prun): Added the @prun function for executing
4773 programs with command line args inside IPython.
4779 programs with command line args inside IPython.
4774
4780
4775 2002-01-16 Fernando Perez <fperez@colorado.edu>
4781 2002-01-16 Fernando Perez <fperez@colorado.edu>
4776
4782
4777 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4783 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4778 to *not* include the last item given in a range. This brings their
4784 to *not* include the last item given in a range. This brings their
4779 behavior in line with Python's slicing:
4785 behavior in line with Python's slicing:
4780 a[n1:n2] -> a[n1]...a[n2-1]
4786 a[n1:n2] -> a[n1]...a[n2-1]
4781 It may be a bit less convenient, but I prefer to stick to Python's
4787 It may be a bit less convenient, but I prefer to stick to Python's
4782 conventions *everywhere*, so users never have to wonder.
4788 conventions *everywhere*, so users never have to wonder.
4783 (Magic.magic_macro): Added @macro function to ease the creation of
4789 (Magic.magic_macro): Added @macro function to ease the creation of
4784 macros.
4790 macros.
4785
4791
4786 2002-01-05 Fernando Perez <fperez@colorado.edu>
4792 2002-01-05 Fernando Perez <fperez@colorado.edu>
4787
4793
4788 * Released 0.2.4.
4794 * Released 0.2.4.
4789
4795
4790 * IPython/iplib.py (Magic.magic_pdef):
4796 * IPython/iplib.py (Magic.magic_pdef):
4791 (InteractiveShell.safe_execfile): report magic lines and error
4797 (InteractiveShell.safe_execfile): report magic lines and error
4792 lines without line numbers so one can easily copy/paste them for
4798 lines without line numbers so one can easily copy/paste them for
4793 re-execution.
4799 re-execution.
4794
4800
4795 * Updated manual with recent changes.
4801 * Updated manual with recent changes.
4796
4802
4797 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4803 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4798 docstring printing when class? is called. Very handy for knowing
4804 docstring printing when class? is called. Very handy for knowing
4799 how to create class instances (as long as __init__ is well
4805 how to create class instances (as long as __init__ is well
4800 documented, of course :)
4806 documented, of course :)
4801 (Magic.magic_doc): print both class and constructor docstrings.
4807 (Magic.magic_doc): print both class and constructor docstrings.
4802 (Magic.magic_pdef): give constructor info if passed a class and
4808 (Magic.magic_pdef): give constructor info if passed a class and
4803 __call__ info for callable object instances.
4809 __call__ info for callable object instances.
4804
4810
4805 2002-01-04 Fernando Perez <fperez@colorado.edu>
4811 2002-01-04 Fernando Perez <fperez@colorado.edu>
4806
4812
4807 * Made deep_reload() off by default. It doesn't always work
4813 * Made deep_reload() off by default. It doesn't always work
4808 exactly as intended, so it's probably safer to have it off. It's
4814 exactly as intended, so it's probably safer to have it off. It's
4809 still available as dreload() anyway, so nothing is lost.
4815 still available as dreload() anyway, so nothing is lost.
4810
4816
4811 2002-01-02 Fernando Perez <fperez@colorado.edu>
4817 2002-01-02 Fernando Perez <fperez@colorado.edu>
4812
4818
4813 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4819 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4814 so I wanted an updated release).
4820 so I wanted an updated release).
4815
4821
4816 2001-12-27 Fernando Perez <fperez@colorado.edu>
4822 2001-12-27 Fernando Perez <fperez@colorado.edu>
4817
4823
4818 * IPython/iplib.py (InteractiveShell.interact): Added the original
4824 * IPython/iplib.py (InteractiveShell.interact): Added the original
4819 code from 'code.py' for this module in order to change the
4825 code from 'code.py' for this module in order to change the
4820 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4826 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4821 the history cache would break when the user hit Ctrl-C, and
4827 the history cache would break when the user hit Ctrl-C, and
4822 interact() offers no way to add any hooks to it.
4828 interact() offers no way to add any hooks to it.
4823
4829
4824 2001-12-23 Fernando Perez <fperez@colorado.edu>
4830 2001-12-23 Fernando Perez <fperez@colorado.edu>
4825
4831
4826 * setup.py: added check for 'MANIFEST' before trying to remove
4832 * setup.py: added check for 'MANIFEST' before trying to remove
4827 it. Thanks to Sean Reifschneider.
4833 it. Thanks to Sean Reifschneider.
4828
4834
4829 2001-12-22 Fernando Perez <fperez@colorado.edu>
4835 2001-12-22 Fernando Perez <fperez@colorado.edu>
4830
4836
4831 * Released 0.2.2.
4837 * Released 0.2.2.
4832
4838
4833 * Finished (reasonably) writing the manual. Later will add the
4839 * Finished (reasonably) writing the manual. Later will add the
4834 python-standard navigation stylesheets, but for the time being
4840 python-standard navigation stylesheets, but for the time being
4835 it's fairly complete. Distribution will include html and pdf
4841 it's fairly complete. Distribution will include html and pdf
4836 versions.
4842 versions.
4837
4843
4838 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4844 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4839 (MayaVi author).
4845 (MayaVi author).
4840
4846
4841 2001-12-21 Fernando Perez <fperez@colorado.edu>
4847 2001-12-21 Fernando Perez <fperez@colorado.edu>
4842
4848
4843 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4849 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4844 good public release, I think (with the manual and the distutils
4850 good public release, I think (with the manual and the distutils
4845 installer). The manual can use some work, but that can go
4851 installer). The manual can use some work, but that can go
4846 slowly. Otherwise I think it's quite nice for end users. Next
4852 slowly. Otherwise I think it's quite nice for end users. Next
4847 summer, rewrite the guts of it...
4853 summer, rewrite the guts of it...
4848
4854
4849 * Changed format of ipythonrc files to use whitespace as the
4855 * Changed format of ipythonrc files to use whitespace as the
4850 separator instead of an explicit '='. Cleaner.
4856 separator instead of an explicit '='. Cleaner.
4851
4857
4852 2001-12-20 Fernando Perez <fperez@colorado.edu>
4858 2001-12-20 Fernando Perez <fperez@colorado.edu>
4853
4859
4854 * Started a manual in LyX. For now it's just a quick merge of the
4860 * Started a manual in LyX. For now it's just a quick merge of the
4855 various internal docstrings and READMEs. Later it may grow into a
4861 various internal docstrings and READMEs. Later it may grow into a
4856 nice, full-blown manual.
4862 nice, full-blown manual.
4857
4863
4858 * Set up a distutils based installer. Installation should now be
4864 * Set up a distutils based installer. Installation should now be
4859 trivially simple for end-users.
4865 trivially simple for end-users.
4860
4866
4861 2001-12-11 Fernando Perez <fperez@colorado.edu>
4867 2001-12-11 Fernando Perez <fperez@colorado.edu>
4862
4868
4863 * Released 0.2.0. First public release, announced it at
4869 * Released 0.2.0. First public release, announced it at
4864 comp.lang.python. From now on, just bugfixes...
4870 comp.lang.python. From now on, just bugfixes...
4865
4871
4866 * Went through all the files, set copyright/license notices and
4872 * Went through all the files, set copyright/license notices and
4867 cleaned up things. Ready for release.
4873 cleaned up things. Ready for release.
4868
4874
4869 2001-12-10 Fernando Perez <fperez@colorado.edu>
4875 2001-12-10 Fernando Perez <fperez@colorado.edu>
4870
4876
4871 * Changed the first-time installer not to use tarfiles. It's more
4877 * Changed the first-time installer not to use tarfiles. It's more
4872 robust now and less unix-dependent. Also makes it easier for
4878 robust now and less unix-dependent. Also makes it easier for
4873 people to later upgrade versions.
4879 people to later upgrade versions.
4874
4880
4875 * Changed @exit to @abort to reflect the fact that it's pretty
4881 * Changed @exit to @abort to reflect the fact that it's pretty
4876 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4882 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4877 becomes significant only when IPyhton is embedded: in that case,
4883 becomes significant only when IPyhton is embedded: in that case,
4878 C-D closes IPython only, but @abort kills the enclosing program
4884 C-D closes IPython only, but @abort kills the enclosing program
4879 too (unless it had called IPython inside a try catching
4885 too (unless it had called IPython inside a try catching
4880 SystemExit).
4886 SystemExit).
4881
4887
4882 * Created Shell module which exposes the actuall IPython Shell
4888 * Created Shell module which exposes the actuall IPython Shell
4883 classes, currently the normal and the embeddable one. This at
4889 classes, currently the normal and the embeddable one. This at
4884 least offers a stable interface we won't need to change when
4890 least offers a stable interface we won't need to change when
4885 (later) the internals are rewritten. That rewrite will be confined
4891 (later) the internals are rewritten. That rewrite will be confined
4886 to iplib and ipmaker, but the Shell interface should remain as is.
4892 to iplib and ipmaker, but the Shell interface should remain as is.
4887
4893
4888 * Added embed module which offers an embeddable IPShell object,
4894 * Added embed module which offers an embeddable IPShell object,
4889 useful to fire up IPython *inside* a running program. Great for
4895 useful to fire up IPython *inside* a running program. Great for
4890 debugging or dynamical data analysis.
4896 debugging or dynamical data analysis.
4891
4897
4892 2001-12-08 Fernando Perez <fperez@colorado.edu>
4898 2001-12-08 Fernando Perez <fperez@colorado.edu>
4893
4899
4894 * Fixed small bug preventing seeing info from methods of defined
4900 * Fixed small bug preventing seeing info from methods of defined
4895 objects (incorrect namespace in _ofind()).
4901 objects (incorrect namespace in _ofind()).
4896
4902
4897 * Documentation cleanup. Moved the main usage docstrings to a
4903 * Documentation cleanup. Moved the main usage docstrings to a
4898 separate file, usage.py (cleaner to maintain, and hopefully in the
4904 separate file, usage.py (cleaner to maintain, and hopefully in the
4899 future some perlpod-like way of producing interactive, man and
4905 future some perlpod-like way of producing interactive, man and
4900 html docs out of it will be found).
4906 html docs out of it will be found).
4901
4907
4902 * Added @profile to see your profile at any time.
4908 * Added @profile to see your profile at any time.
4903
4909
4904 * Added @p as an alias for 'print'. It's especially convenient if
4910 * Added @p as an alias for 'print'. It's especially convenient if
4905 using automagic ('p x' prints x).
4911 using automagic ('p x' prints x).
4906
4912
4907 * Small cleanups and fixes after a pychecker run.
4913 * Small cleanups and fixes after a pychecker run.
4908
4914
4909 * Changed the @cd command to handle @cd - and @cd -<n> for
4915 * Changed the @cd command to handle @cd - and @cd -<n> for
4910 visiting any directory in _dh.
4916 visiting any directory in _dh.
4911
4917
4912 * Introduced _dh, a history of visited directories. @dhist prints
4918 * Introduced _dh, a history of visited directories. @dhist prints
4913 it out with numbers.
4919 it out with numbers.
4914
4920
4915 2001-12-07 Fernando Perez <fperez@colorado.edu>
4921 2001-12-07 Fernando Perez <fperez@colorado.edu>
4916
4922
4917 * Released 0.1.22
4923 * Released 0.1.22
4918
4924
4919 * Made initialization a bit more robust against invalid color
4925 * Made initialization a bit more robust against invalid color
4920 options in user input (exit, not traceback-crash).
4926 options in user input (exit, not traceback-crash).
4921
4927
4922 * Changed the bug crash reporter to write the report only in the
4928 * Changed the bug crash reporter to write the report only in the
4923 user's .ipython directory. That way IPython won't litter people's
4929 user's .ipython directory. That way IPython won't litter people's
4924 hard disks with crash files all over the place. Also print on
4930 hard disks with crash files all over the place. Also print on
4925 screen the necessary mail command.
4931 screen the necessary mail command.
4926
4932
4927 * With the new ultraTB, implemented LightBG color scheme for light
4933 * With the new ultraTB, implemented LightBG color scheme for light
4928 background terminals. A lot of people like white backgrounds, so I
4934 background terminals. A lot of people like white backgrounds, so I
4929 guess we should at least give them something readable.
4935 guess we should at least give them something readable.
4930
4936
4931 2001-12-06 Fernando Perez <fperez@colorado.edu>
4937 2001-12-06 Fernando Perez <fperez@colorado.edu>
4932
4938
4933 * Modified the structure of ultraTB. Now there's a proper class
4939 * Modified the structure of ultraTB. Now there's a proper class
4934 for tables of color schemes which allow adding schemes easily and
4940 for tables of color schemes which allow adding schemes easily and
4935 switching the active scheme without creating a new instance every
4941 switching the active scheme without creating a new instance every
4936 time (which was ridiculous). The syntax for creating new schemes
4942 time (which was ridiculous). The syntax for creating new schemes
4937 is also cleaner. I think ultraTB is finally done, with a clean
4943 is also cleaner. I think ultraTB is finally done, with a clean
4938 class structure. Names are also much cleaner (now there's proper
4944 class structure. Names are also much cleaner (now there's proper
4939 color tables, no need for every variable to also have 'color' in
4945 color tables, no need for every variable to also have 'color' in
4940 its name).
4946 its name).
4941
4947
4942 * Broke down genutils into separate files. Now genutils only
4948 * Broke down genutils into separate files. Now genutils only
4943 contains utility functions, and classes have been moved to their
4949 contains utility functions, and classes have been moved to their
4944 own files (they had enough independent functionality to warrant
4950 own files (they had enough independent functionality to warrant
4945 it): ConfigLoader, OutputTrap, Struct.
4951 it): ConfigLoader, OutputTrap, Struct.
4946
4952
4947 2001-12-05 Fernando Perez <fperez@colorado.edu>
4953 2001-12-05 Fernando Perez <fperez@colorado.edu>
4948
4954
4949 * IPython turns 21! Released version 0.1.21, as a candidate for
4955 * IPython turns 21! Released version 0.1.21, as a candidate for
4950 public consumption. If all goes well, release in a few days.
4956 public consumption. If all goes well, release in a few days.
4951
4957
4952 * Fixed path bug (files in Extensions/ directory wouldn't be found
4958 * Fixed path bug (files in Extensions/ directory wouldn't be found
4953 unless IPython/ was explicitly in sys.path).
4959 unless IPython/ was explicitly in sys.path).
4954
4960
4955 * Extended the FlexCompleter class as MagicCompleter to allow
4961 * Extended the FlexCompleter class as MagicCompleter to allow
4956 completion of @-starting lines.
4962 completion of @-starting lines.
4957
4963
4958 * Created __release__.py file as a central repository for release
4964 * Created __release__.py file as a central repository for release
4959 info that other files can read from.
4965 info that other files can read from.
4960
4966
4961 * Fixed small bug in logging: when logging was turned on in
4967 * Fixed small bug in logging: when logging was turned on in
4962 mid-session, old lines with special meanings (!@?) were being
4968 mid-session, old lines with special meanings (!@?) were being
4963 logged without the prepended comment, which is necessary since
4969 logged without the prepended comment, which is necessary since
4964 they are not truly valid python syntax. This should make session
4970 they are not truly valid python syntax. This should make session
4965 restores produce less errors.
4971 restores produce less errors.
4966
4972
4967 * The namespace cleanup forced me to make a FlexCompleter class
4973 * The namespace cleanup forced me to make a FlexCompleter class
4968 which is nothing but a ripoff of rlcompleter, but with selectable
4974 which is nothing but a ripoff of rlcompleter, but with selectable
4969 namespace (rlcompleter only works in __main__.__dict__). I'll try
4975 namespace (rlcompleter only works in __main__.__dict__). I'll try
4970 to submit a note to the authors to see if this change can be
4976 to submit a note to the authors to see if this change can be
4971 incorporated in future rlcompleter releases (Dec.6: done)
4977 incorporated in future rlcompleter releases (Dec.6: done)
4972
4978
4973 * More fixes to namespace handling. It was a mess! Now all
4979 * More fixes to namespace handling. It was a mess! Now all
4974 explicit references to __main__.__dict__ are gone (except when
4980 explicit references to __main__.__dict__ are gone (except when
4975 really needed) and everything is handled through the namespace
4981 really needed) and everything is handled through the namespace
4976 dicts in the IPython instance. We seem to be getting somewhere
4982 dicts in the IPython instance. We seem to be getting somewhere
4977 with this, finally...
4983 with this, finally...
4978
4984
4979 * Small documentation updates.
4985 * Small documentation updates.
4980
4986
4981 * Created the Extensions directory under IPython (with an
4987 * Created the Extensions directory under IPython (with an
4982 __init__.py). Put the PhysicalQ stuff there. This directory should
4988 __init__.py). Put the PhysicalQ stuff there. This directory should
4983 be used for all special-purpose extensions.
4989 be used for all special-purpose extensions.
4984
4990
4985 * File renaming:
4991 * File renaming:
4986 ipythonlib --> ipmaker
4992 ipythonlib --> ipmaker
4987 ipplib --> iplib
4993 ipplib --> iplib
4988 This makes a bit more sense in terms of what these files actually do.
4994 This makes a bit more sense in terms of what these files actually do.
4989
4995
4990 * Moved all the classes and functions in ipythonlib to ipplib, so
4996 * Moved all the classes and functions in ipythonlib to ipplib, so
4991 now ipythonlib only has make_IPython(). This will ease up its
4997 now ipythonlib only has make_IPython(). This will ease up its
4992 splitting in smaller functional chunks later.
4998 splitting in smaller functional chunks later.
4993
4999
4994 * Cleaned up (done, I think) output of @whos. Better column
5000 * Cleaned up (done, I think) output of @whos. Better column
4995 formatting, and now shows str(var) for as much as it can, which is
5001 formatting, and now shows str(var) for as much as it can, which is
4996 typically what one gets with a 'print var'.
5002 typically what one gets with a 'print var'.
4997
5003
4998 2001-12-04 Fernando Perez <fperez@colorado.edu>
5004 2001-12-04 Fernando Perez <fperez@colorado.edu>
4999
5005
5000 * Fixed namespace problems. Now builtin/IPyhton/user names get
5006 * Fixed namespace problems. Now builtin/IPyhton/user names get
5001 properly reported in their namespace. Internal namespace handling
5007 properly reported in their namespace. Internal namespace handling
5002 is finally getting decent (not perfect yet, but much better than
5008 is finally getting decent (not perfect yet, but much better than
5003 the ad-hoc mess we had).
5009 the ad-hoc mess we had).
5004
5010
5005 * Removed -exit option. If people just want to run a python
5011 * Removed -exit option. If people just want to run a python
5006 script, that's what the normal interpreter is for. Less
5012 script, that's what the normal interpreter is for. Less
5007 unnecessary options, less chances for bugs.
5013 unnecessary options, less chances for bugs.
5008
5014
5009 * Added a crash handler which generates a complete post-mortem if
5015 * Added a crash handler which generates a complete post-mortem if
5010 IPython crashes. This will help a lot in tracking bugs down the
5016 IPython crashes. This will help a lot in tracking bugs down the
5011 road.
5017 road.
5012
5018
5013 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5019 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5014 which were boud to functions being reassigned would bypass the
5020 which were boud to functions being reassigned would bypass the
5015 logger, breaking the sync of _il with the prompt counter. This
5021 logger, breaking the sync of _il with the prompt counter. This
5016 would then crash IPython later when a new line was logged.
5022 would then crash IPython later when a new line was logged.
5017
5023
5018 2001-12-02 Fernando Perez <fperez@colorado.edu>
5024 2001-12-02 Fernando Perez <fperez@colorado.edu>
5019
5025
5020 * Made IPython a package. This means people don't have to clutter
5026 * Made IPython a package. This means people don't have to clutter
5021 their sys.path with yet another directory. Changed the INSTALL
5027 their sys.path with yet another directory. Changed the INSTALL
5022 file accordingly.
5028 file accordingly.
5023
5029
5024 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5030 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5025 sorts its output (so @who shows it sorted) and @whos formats the
5031 sorts its output (so @who shows it sorted) and @whos formats the
5026 table according to the width of the first column. Nicer, easier to
5032 table according to the width of the first column. Nicer, easier to
5027 read. Todo: write a generic table_format() which takes a list of
5033 read. Todo: write a generic table_format() which takes a list of
5028 lists and prints it nicely formatted, with optional row/column
5034 lists and prints it nicely formatted, with optional row/column
5029 separators and proper padding and justification.
5035 separators and proper padding and justification.
5030
5036
5031 * Released 0.1.20
5037 * Released 0.1.20
5032
5038
5033 * Fixed bug in @log which would reverse the inputcache list (a
5039 * Fixed bug in @log which would reverse the inputcache list (a
5034 copy operation was missing).
5040 copy operation was missing).
5035
5041
5036 * Code cleanup. @config was changed to use page(). Better, since
5042 * Code cleanup. @config was changed to use page(). Better, since
5037 its output is always quite long.
5043 its output is always quite long.
5038
5044
5039 * Itpl is back as a dependency. I was having too many problems
5045 * Itpl is back as a dependency. I was having too many problems
5040 getting the parametric aliases to work reliably, and it's just
5046 getting the parametric aliases to work reliably, and it's just
5041 easier to code weird string operations with it than playing %()s
5047 easier to code weird string operations with it than playing %()s
5042 games. It's only ~6k, so I don't think it's too big a deal.
5048 games. It's only ~6k, so I don't think it's too big a deal.
5043
5049
5044 * Found (and fixed) a very nasty bug with history. !lines weren't
5050 * Found (and fixed) a very nasty bug with history. !lines weren't
5045 getting cached, and the out of sync caches would crash
5051 getting cached, and the out of sync caches would crash
5046 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5052 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5047 division of labor a bit better. Bug fixed, cleaner structure.
5053 division of labor a bit better. Bug fixed, cleaner structure.
5048
5054
5049 2001-12-01 Fernando Perez <fperez@colorado.edu>
5055 2001-12-01 Fernando Perez <fperez@colorado.edu>
5050
5056
5051 * Released 0.1.19
5057 * Released 0.1.19
5052
5058
5053 * Added option -n to @hist to prevent line number printing. Much
5059 * Added option -n to @hist to prevent line number printing. Much
5054 easier to copy/paste code this way.
5060 easier to copy/paste code this way.
5055
5061
5056 * Created global _il to hold the input list. Allows easy
5062 * Created global _il to hold the input list. Allows easy
5057 re-execution of blocks of code by slicing it (inspired by Janko's
5063 re-execution of blocks of code by slicing it (inspired by Janko's
5058 comment on 'macros').
5064 comment on 'macros').
5059
5065
5060 * Small fixes and doc updates.
5066 * Small fixes and doc updates.
5061
5067
5062 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5068 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5063 much too fragile with automagic. Handles properly multi-line
5069 much too fragile with automagic. Handles properly multi-line
5064 statements and takes parameters.
5070 statements and takes parameters.
5065
5071
5066 2001-11-30 Fernando Perez <fperez@colorado.edu>
5072 2001-11-30 Fernando Perez <fperez@colorado.edu>
5067
5073
5068 * Version 0.1.18 released.
5074 * Version 0.1.18 released.
5069
5075
5070 * Fixed nasty namespace bug in initial module imports.
5076 * Fixed nasty namespace bug in initial module imports.
5071
5077
5072 * Added copyright/license notes to all code files (except
5078 * Added copyright/license notes to all code files (except
5073 DPyGetOpt). For the time being, LGPL. That could change.
5079 DPyGetOpt). For the time being, LGPL. That could change.
5074
5080
5075 * Rewrote a much nicer README, updated INSTALL, cleaned up
5081 * Rewrote a much nicer README, updated INSTALL, cleaned up
5076 ipythonrc-* samples.
5082 ipythonrc-* samples.
5077
5083
5078 * Overall code/documentation cleanup. Basically ready for
5084 * Overall code/documentation cleanup. Basically ready for
5079 release. Only remaining thing: licence decision (LGPL?).
5085 release. Only remaining thing: licence decision (LGPL?).
5080
5086
5081 * Converted load_config to a class, ConfigLoader. Now recursion
5087 * Converted load_config to a class, ConfigLoader. Now recursion
5082 control is better organized. Doesn't include the same file twice.
5088 control is better organized. Doesn't include the same file twice.
5083
5089
5084 2001-11-29 Fernando Perez <fperez@colorado.edu>
5090 2001-11-29 Fernando Perez <fperez@colorado.edu>
5085
5091
5086 * Got input history working. Changed output history variables from
5092 * Got input history working. Changed output history variables from
5087 _p to _o so that _i is for input and _o for output. Just cleaner
5093 _p to _o so that _i is for input and _o for output. Just cleaner
5088 convention.
5094 convention.
5089
5095
5090 * Implemented parametric aliases. This pretty much allows the
5096 * Implemented parametric aliases. This pretty much allows the
5091 alias system to offer full-blown shell convenience, I think.
5097 alias system to offer full-blown shell convenience, I think.
5092
5098
5093 * Version 0.1.17 released, 0.1.18 opened.
5099 * Version 0.1.17 released, 0.1.18 opened.
5094
5100
5095 * dot_ipython/ipythonrc (alias): added documentation.
5101 * dot_ipython/ipythonrc (alias): added documentation.
5096 (xcolor): Fixed small bug (xcolors -> xcolor)
5102 (xcolor): Fixed small bug (xcolors -> xcolor)
5097
5103
5098 * Changed the alias system. Now alias is a magic command to define
5104 * Changed the alias system. Now alias is a magic command to define
5099 aliases just like the shell. Rationale: the builtin magics should
5105 aliases just like the shell. Rationale: the builtin magics should
5100 be there for things deeply connected to IPython's
5106 be there for things deeply connected to IPython's
5101 architecture. And this is a much lighter system for what I think
5107 architecture. And this is a much lighter system for what I think
5102 is the really important feature: allowing users to define quickly
5108 is the really important feature: allowing users to define quickly
5103 magics that will do shell things for them, so they can customize
5109 magics that will do shell things for them, so they can customize
5104 IPython easily to match their work habits. If someone is really
5110 IPython easily to match their work habits. If someone is really
5105 desperate to have another name for a builtin alias, they can
5111 desperate to have another name for a builtin alias, they can
5106 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5112 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5107 works.
5113 works.
5108
5114
5109 2001-11-28 Fernando Perez <fperez@colorado.edu>
5115 2001-11-28 Fernando Perez <fperez@colorado.edu>
5110
5116
5111 * Changed @file so that it opens the source file at the proper
5117 * Changed @file so that it opens the source file at the proper
5112 line. Since it uses less, if your EDITOR environment is
5118 line. Since it uses less, if your EDITOR environment is
5113 configured, typing v will immediately open your editor of choice
5119 configured, typing v will immediately open your editor of choice
5114 right at the line where the object is defined. Not as quick as
5120 right at the line where the object is defined. Not as quick as
5115 having a direct @edit command, but for all intents and purposes it
5121 having a direct @edit command, but for all intents and purposes it
5116 works. And I don't have to worry about writing @edit to deal with
5122 works. And I don't have to worry about writing @edit to deal with
5117 all the editors, less does that.
5123 all the editors, less does that.
5118
5124
5119 * Version 0.1.16 released, 0.1.17 opened.
5125 * Version 0.1.16 released, 0.1.17 opened.
5120
5126
5121 * Fixed some nasty bugs in the page/page_dumb combo that could
5127 * Fixed some nasty bugs in the page/page_dumb combo that could
5122 crash IPython.
5128 crash IPython.
5123
5129
5124 2001-11-27 Fernando Perez <fperez@colorado.edu>
5130 2001-11-27 Fernando Perez <fperez@colorado.edu>
5125
5131
5126 * Version 0.1.15 released, 0.1.16 opened.
5132 * Version 0.1.15 released, 0.1.16 opened.
5127
5133
5128 * Finally got ? and ?? to work for undefined things: now it's
5134 * Finally got ? and ?? to work for undefined things: now it's
5129 possible to type {}.get? and get information about the get method
5135 possible to type {}.get? and get information about the get method
5130 of dicts, or os.path? even if only os is defined (so technically
5136 of dicts, or os.path? even if only os is defined (so technically
5131 os.path isn't). Works at any level. For example, after import os,
5137 os.path isn't). Works at any level. For example, after import os,
5132 os?, os.path?, os.path.abspath? all work. This is great, took some
5138 os?, os.path?, os.path.abspath? all work. This is great, took some
5133 work in _ofind.
5139 work in _ofind.
5134
5140
5135 * Fixed more bugs with logging. The sanest way to do it was to add
5141 * Fixed more bugs with logging. The sanest way to do it was to add
5136 to @log a 'mode' parameter. Killed two in one shot (this mode
5142 to @log a 'mode' parameter. Killed two in one shot (this mode
5137 option was a request of Janko's). I think it's finally clean
5143 option was a request of Janko's). I think it's finally clean
5138 (famous last words).
5144 (famous last words).
5139
5145
5140 * Added a page_dumb() pager which does a decent job of paging on
5146 * Added a page_dumb() pager which does a decent job of paging on
5141 screen, if better things (like less) aren't available. One less
5147 screen, if better things (like less) aren't available. One less
5142 unix dependency (someday maybe somebody will port this to
5148 unix dependency (someday maybe somebody will port this to
5143 windows).
5149 windows).
5144
5150
5145 * Fixed problem in magic_log: would lock of logging out if log
5151 * Fixed problem in magic_log: would lock of logging out if log
5146 creation failed (because it would still think it had succeeded).
5152 creation failed (because it would still think it had succeeded).
5147
5153
5148 * Improved the page() function using curses to auto-detect screen
5154 * Improved the page() function using curses to auto-detect screen
5149 size. Now it can make a much better decision on whether to print
5155 size. Now it can make a much better decision on whether to print
5150 or page a string. Option screen_length was modified: a value 0
5156 or page a string. Option screen_length was modified: a value 0
5151 means auto-detect, and that's the default now.
5157 means auto-detect, and that's the default now.
5152
5158
5153 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5159 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5154 go out. I'll test it for a few days, then talk to Janko about
5160 go out. I'll test it for a few days, then talk to Janko about
5155 licences and announce it.
5161 licences and announce it.
5156
5162
5157 * Fixed the length of the auto-generated ---> prompt which appears
5163 * Fixed the length of the auto-generated ---> prompt which appears
5158 for auto-parens and auto-quotes. Getting this right isn't trivial,
5164 for auto-parens and auto-quotes. Getting this right isn't trivial,
5159 with all the color escapes, different prompt types and optional
5165 with all the color escapes, different prompt types and optional
5160 separators. But it seems to be working in all the combinations.
5166 separators. But it seems to be working in all the combinations.
5161
5167
5162 2001-11-26 Fernando Perez <fperez@colorado.edu>
5168 2001-11-26 Fernando Perez <fperez@colorado.edu>
5163
5169
5164 * Wrote a regexp filter to get option types from the option names
5170 * Wrote a regexp filter to get option types from the option names
5165 string. This eliminates the need to manually keep two duplicate
5171 string. This eliminates the need to manually keep two duplicate
5166 lists.
5172 lists.
5167
5173
5168 * Removed the unneeded check_option_names. Now options are handled
5174 * Removed the unneeded check_option_names. Now options are handled
5169 in a much saner manner and it's easy to visually check that things
5175 in a much saner manner and it's easy to visually check that things
5170 are ok.
5176 are ok.
5171
5177
5172 * Updated version numbers on all files I modified to carry a
5178 * Updated version numbers on all files I modified to carry a
5173 notice so Janko and Nathan have clear version markers.
5179 notice so Janko and Nathan have clear version markers.
5174
5180
5175 * Updated docstring for ultraTB with my changes. I should send
5181 * Updated docstring for ultraTB with my changes. I should send
5176 this to Nathan.
5182 this to Nathan.
5177
5183
5178 * Lots of small fixes. Ran everything through pychecker again.
5184 * Lots of small fixes. Ran everything through pychecker again.
5179
5185
5180 * Made loading of deep_reload an cmd line option. If it's not too
5186 * Made loading of deep_reload an cmd line option. If it's not too
5181 kosher, now people can just disable it. With -nodeep_reload it's
5187 kosher, now people can just disable it. With -nodeep_reload it's
5182 still available as dreload(), it just won't overwrite reload().
5188 still available as dreload(), it just won't overwrite reload().
5183
5189
5184 * Moved many options to the no| form (-opt and -noopt
5190 * Moved many options to the no| form (-opt and -noopt
5185 accepted). Cleaner.
5191 accepted). Cleaner.
5186
5192
5187 * Changed magic_log so that if called with no parameters, it uses
5193 * Changed magic_log so that if called with no parameters, it uses
5188 'rotate' mode. That way auto-generated logs aren't automatically
5194 'rotate' mode. That way auto-generated logs aren't automatically
5189 over-written. For normal logs, now a backup is made if it exists
5195 over-written. For normal logs, now a backup is made if it exists
5190 (only 1 level of backups). A new 'backup' mode was added to the
5196 (only 1 level of backups). A new 'backup' mode was added to the
5191 Logger class to support this. This was a request by Janko.
5197 Logger class to support this. This was a request by Janko.
5192
5198
5193 * Added @logoff/@logon to stop/restart an active log.
5199 * Added @logoff/@logon to stop/restart an active log.
5194
5200
5195 * Fixed a lot of bugs in log saving/replay. It was pretty
5201 * Fixed a lot of bugs in log saving/replay. It was pretty
5196 broken. Now special lines (!@,/) appear properly in the command
5202 broken. Now special lines (!@,/) appear properly in the command
5197 history after a log replay.
5203 history after a log replay.
5198
5204
5199 * Tried and failed to implement full session saving via pickle. My
5205 * Tried and failed to implement full session saving via pickle. My
5200 idea was to pickle __main__.__dict__, but modules can't be
5206 idea was to pickle __main__.__dict__, but modules can't be
5201 pickled. This would be a better alternative to replaying logs, but
5207 pickled. This would be a better alternative to replaying logs, but
5202 seems quite tricky to get to work. Changed -session to be called
5208 seems quite tricky to get to work. Changed -session to be called
5203 -logplay, which more accurately reflects what it does. And if we
5209 -logplay, which more accurately reflects what it does. And if we
5204 ever get real session saving working, -session is now available.
5210 ever get real session saving working, -session is now available.
5205
5211
5206 * Implemented color schemes for prompts also. As for tracebacks,
5212 * Implemented color schemes for prompts also. As for tracebacks,
5207 currently only NoColor and Linux are supported. But now the
5213 currently only NoColor and Linux are supported. But now the
5208 infrastructure is in place, based on a generic ColorScheme
5214 infrastructure is in place, based on a generic ColorScheme
5209 class. So writing and activating new schemes both for the prompts
5215 class. So writing and activating new schemes both for the prompts
5210 and the tracebacks should be straightforward.
5216 and the tracebacks should be straightforward.
5211
5217
5212 * Version 0.1.13 released, 0.1.14 opened.
5218 * Version 0.1.13 released, 0.1.14 opened.
5213
5219
5214 * Changed handling of options for output cache. Now counter is
5220 * Changed handling of options for output cache. Now counter is
5215 hardwired starting at 1 and one specifies the maximum number of
5221 hardwired starting at 1 and one specifies the maximum number of
5216 entries *in the outcache* (not the max prompt counter). This is
5222 entries *in the outcache* (not the max prompt counter). This is
5217 much better, since many statements won't increase the cache
5223 much better, since many statements won't increase the cache
5218 count. It also eliminated some confusing options, now there's only
5224 count. It also eliminated some confusing options, now there's only
5219 one: cache_size.
5225 one: cache_size.
5220
5226
5221 * Added 'alias' magic function and magic_alias option in the
5227 * Added 'alias' magic function and magic_alias option in the
5222 ipythonrc file. Now the user can easily define whatever names he
5228 ipythonrc file. Now the user can easily define whatever names he
5223 wants for the magic functions without having to play weird
5229 wants for the magic functions without having to play weird
5224 namespace games. This gives IPython a real shell-like feel.
5230 namespace games. This gives IPython a real shell-like feel.
5225
5231
5226 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5232 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5227 @ or not).
5233 @ or not).
5228
5234
5229 This was one of the last remaining 'visible' bugs (that I know
5235 This was one of the last remaining 'visible' bugs (that I know
5230 of). I think if I can clean up the session loading so it works
5236 of). I think if I can clean up the session loading so it works
5231 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5237 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5232 about licensing).
5238 about licensing).
5233
5239
5234 2001-11-25 Fernando Perez <fperez@colorado.edu>
5240 2001-11-25 Fernando Perez <fperez@colorado.edu>
5235
5241
5236 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5242 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5237 there's a cleaner distinction between what ? and ?? show.
5243 there's a cleaner distinction between what ? and ?? show.
5238
5244
5239 * Added screen_length option. Now the user can define his own
5245 * Added screen_length option. Now the user can define his own
5240 screen size for page() operations.
5246 screen size for page() operations.
5241
5247
5242 * Implemented magic shell-like functions with automatic code
5248 * Implemented magic shell-like functions with automatic code
5243 generation. Now adding another function is just a matter of adding
5249 generation. Now adding another function is just a matter of adding
5244 an entry to a dict, and the function is dynamically generated at
5250 an entry to a dict, and the function is dynamically generated at
5245 run-time. Python has some really cool features!
5251 run-time. Python has some really cool features!
5246
5252
5247 * Renamed many options to cleanup conventions a little. Now all
5253 * Renamed many options to cleanup conventions a little. Now all
5248 are lowercase, and only underscores where needed. Also in the code
5254 are lowercase, and only underscores where needed. Also in the code
5249 option name tables are clearer.
5255 option name tables are clearer.
5250
5256
5251 * Changed prompts a little. Now input is 'In [n]:' instead of
5257 * Changed prompts a little. Now input is 'In [n]:' instead of
5252 'In[n]:='. This allows it the numbers to be aligned with the
5258 'In[n]:='. This allows it the numbers to be aligned with the
5253 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5259 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5254 Python (it was a Mathematica thing). The '...' continuation prompt
5260 Python (it was a Mathematica thing). The '...' continuation prompt
5255 was also changed a little to align better.
5261 was also changed a little to align better.
5256
5262
5257 * Fixed bug when flushing output cache. Not all _p<n> variables
5263 * Fixed bug when flushing output cache. Not all _p<n> variables
5258 exist, so their deletion needs to be wrapped in a try:
5264 exist, so their deletion needs to be wrapped in a try:
5259
5265
5260 * Figured out how to properly use inspect.formatargspec() (it
5266 * Figured out how to properly use inspect.formatargspec() (it
5261 requires the args preceded by *). So I removed all the code from
5267 requires the args preceded by *). So I removed all the code from
5262 _get_pdef in Magic, which was just replicating that.
5268 _get_pdef in Magic, which was just replicating that.
5263
5269
5264 * Added test to prefilter to allow redefining magic function names
5270 * Added test to prefilter to allow redefining magic function names
5265 as variables. This is ok, since the @ form is always available,
5271 as variables. This is ok, since the @ form is always available,
5266 but whe should allow the user to define a variable called 'ls' if
5272 but whe should allow the user to define a variable called 'ls' if
5267 he needs it.
5273 he needs it.
5268
5274
5269 * Moved the ToDo information from README into a separate ToDo.
5275 * Moved the ToDo information from README into a separate ToDo.
5270
5276
5271 * General code cleanup and small bugfixes. I think it's close to a
5277 * General code cleanup and small bugfixes. I think it's close to a
5272 state where it can be released, obviously with a big 'beta'
5278 state where it can be released, obviously with a big 'beta'
5273 warning on it.
5279 warning on it.
5274
5280
5275 * Got the magic function split to work. Now all magics are defined
5281 * Got the magic function split to work. Now all magics are defined
5276 in a separate class. It just organizes things a bit, and now
5282 in a separate class. It just organizes things a bit, and now
5277 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5283 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5278 was too long).
5284 was too long).
5279
5285
5280 * Changed @clear to @reset to avoid potential confusions with
5286 * Changed @clear to @reset to avoid potential confusions with
5281 the shell command clear. Also renamed @cl to @clear, which does
5287 the shell command clear. Also renamed @cl to @clear, which does
5282 exactly what people expect it to from their shell experience.
5288 exactly what people expect it to from their shell experience.
5283
5289
5284 Added a check to the @reset command (since it's so
5290 Added a check to the @reset command (since it's so
5285 destructive, it's probably a good idea to ask for confirmation).
5291 destructive, it's probably a good idea to ask for confirmation).
5286 But now reset only works for full namespace resetting. Since the
5292 But now reset only works for full namespace resetting. Since the
5287 del keyword is already there for deleting a few specific
5293 del keyword is already there for deleting a few specific
5288 variables, I don't see the point of having a redundant magic
5294 variables, I don't see the point of having a redundant magic
5289 function for the same task.
5295 function for the same task.
5290
5296
5291 2001-11-24 Fernando Perez <fperez@colorado.edu>
5297 2001-11-24 Fernando Perez <fperez@colorado.edu>
5292
5298
5293 * Updated the builtin docs (esp. the ? ones).
5299 * Updated the builtin docs (esp. the ? ones).
5294
5300
5295 * Ran all the code through pychecker. Not terribly impressed with
5301 * Ran all the code through pychecker. Not terribly impressed with
5296 it: lots of spurious warnings and didn't really find anything of
5302 it: lots of spurious warnings and didn't really find anything of
5297 substance (just a few modules being imported and not used).
5303 substance (just a few modules being imported and not used).
5298
5304
5299 * Implemented the new ultraTB functionality into IPython. New
5305 * Implemented the new ultraTB functionality into IPython. New
5300 option: xcolors. This chooses color scheme. xmode now only selects
5306 option: xcolors. This chooses color scheme. xmode now only selects
5301 between Plain and Verbose. Better orthogonality.
5307 between Plain and Verbose. Better orthogonality.
5302
5308
5303 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5309 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5304 mode and color scheme for the exception handlers. Now it's
5310 mode and color scheme for the exception handlers. Now it's
5305 possible to have the verbose traceback with no coloring.
5311 possible to have the verbose traceback with no coloring.
5306
5312
5307 2001-11-23 Fernando Perez <fperez@colorado.edu>
5313 2001-11-23 Fernando Perez <fperez@colorado.edu>
5308
5314
5309 * Version 0.1.12 released, 0.1.13 opened.
5315 * Version 0.1.12 released, 0.1.13 opened.
5310
5316
5311 * Removed option to set auto-quote and auto-paren escapes by
5317 * Removed option to set auto-quote and auto-paren escapes by
5312 user. The chances of breaking valid syntax are just too high. If
5318 user. The chances of breaking valid syntax are just too high. If
5313 someone *really* wants, they can always dig into the code.
5319 someone *really* wants, they can always dig into the code.
5314
5320
5315 * Made prompt separators configurable.
5321 * Made prompt separators configurable.
5316
5322
5317 2001-11-22 Fernando Perez <fperez@colorado.edu>
5323 2001-11-22 Fernando Perez <fperez@colorado.edu>
5318
5324
5319 * Small bugfixes in many places.
5325 * Small bugfixes in many places.
5320
5326
5321 * Removed the MyCompleter class from ipplib. It seemed redundant
5327 * Removed the MyCompleter class from ipplib. It seemed redundant
5322 with the C-p,C-n history search functionality. Less code to
5328 with the C-p,C-n history search functionality. Less code to
5323 maintain.
5329 maintain.
5324
5330
5325 * Moved all the original ipython.py code into ipythonlib.py. Right
5331 * Moved all the original ipython.py code into ipythonlib.py. Right
5326 now it's just one big dump into a function called make_IPython, so
5332 now it's just one big dump into a function called make_IPython, so
5327 no real modularity has been gained. But at least it makes the
5333 no real modularity has been gained. But at least it makes the
5328 wrapper script tiny, and since ipythonlib is a module, it gets
5334 wrapper script tiny, and since ipythonlib is a module, it gets
5329 compiled and startup is much faster.
5335 compiled and startup is much faster.
5330
5336
5331 This is a reasobably 'deep' change, so we should test it for a
5337 This is a reasobably 'deep' change, so we should test it for a
5332 while without messing too much more with the code.
5338 while without messing too much more with the code.
5333
5339
5334 2001-11-21 Fernando Perez <fperez@colorado.edu>
5340 2001-11-21 Fernando Perez <fperez@colorado.edu>
5335
5341
5336 * Version 0.1.11 released, 0.1.12 opened for further work.
5342 * Version 0.1.11 released, 0.1.12 opened for further work.
5337
5343
5338 * Removed dependency on Itpl. It was only needed in one place. It
5344 * Removed dependency on Itpl. It was only needed in one place. It
5339 would be nice if this became part of python, though. It makes life
5345 would be nice if this became part of python, though. It makes life
5340 *a lot* easier in some cases.
5346 *a lot* easier in some cases.
5341
5347
5342 * Simplified the prefilter code a bit. Now all handlers are
5348 * Simplified the prefilter code a bit. Now all handlers are
5343 expected to explicitly return a value (at least a blank string).
5349 expected to explicitly return a value (at least a blank string).
5344
5350
5345 * Heavy edits in ipplib. Removed the help system altogether. Now
5351 * Heavy edits in ipplib. Removed the help system altogether. Now
5346 obj?/?? is used for inspecting objects, a magic @doc prints
5352 obj?/?? is used for inspecting objects, a magic @doc prints
5347 docstrings, and full-blown Python help is accessed via the 'help'
5353 docstrings, and full-blown Python help is accessed via the 'help'
5348 keyword. This cleans up a lot of code (less to maintain) and does
5354 keyword. This cleans up a lot of code (less to maintain) and does
5349 the job. Since 'help' is now a standard Python component, might as
5355 the job. Since 'help' is now a standard Python component, might as
5350 well use it and remove duplicate functionality.
5356 well use it and remove duplicate functionality.
5351
5357
5352 Also removed the option to use ipplib as a standalone program. By
5358 Also removed the option to use ipplib as a standalone program. By
5353 now it's too dependent on other parts of IPython to function alone.
5359 now it's too dependent on other parts of IPython to function alone.
5354
5360
5355 * Fixed bug in genutils.pager. It would crash if the pager was
5361 * Fixed bug in genutils.pager. It would crash if the pager was
5356 exited immediately after opening (broken pipe).
5362 exited immediately after opening (broken pipe).
5357
5363
5358 * Trimmed down the VerboseTB reporting a little. The header is
5364 * Trimmed down the VerboseTB reporting a little. The header is
5359 much shorter now and the repeated exception arguments at the end
5365 much shorter now and the repeated exception arguments at the end
5360 have been removed. For interactive use the old header seemed a bit
5366 have been removed. For interactive use the old header seemed a bit
5361 excessive.
5367 excessive.
5362
5368
5363 * Fixed small bug in output of @whos for variables with multi-word
5369 * Fixed small bug in output of @whos for variables with multi-word
5364 types (only first word was displayed).
5370 types (only first word was displayed).
5365
5371
5366 2001-11-17 Fernando Perez <fperez@colorado.edu>
5372 2001-11-17 Fernando Perez <fperez@colorado.edu>
5367
5373
5368 * Version 0.1.10 released, 0.1.11 opened for further work.
5374 * Version 0.1.10 released, 0.1.11 opened for further work.
5369
5375
5370 * Modified dirs and friends. dirs now *returns* the stack (not
5376 * Modified dirs and friends. dirs now *returns* the stack (not
5371 prints), so one can manipulate it as a variable. Convenient to
5377 prints), so one can manipulate it as a variable. Convenient to
5372 travel along many directories.
5378 travel along many directories.
5373
5379
5374 * Fixed bug in magic_pdef: would only work with functions with
5380 * Fixed bug in magic_pdef: would only work with functions with
5375 arguments with default values.
5381 arguments with default values.
5376
5382
5377 2001-11-14 Fernando Perez <fperez@colorado.edu>
5383 2001-11-14 Fernando Perez <fperez@colorado.edu>
5378
5384
5379 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5385 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5380 example with IPython. Various other minor fixes and cleanups.
5386 example with IPython. Various other minor fixes and cleanups.
5381
5387
5382 * Version 0.1.9 released, 0.1.10 opened for further work.
5388 * Version 0.1.9 released, 0.1.10 opened for further work.
5383
5389
5384 * Added sys.path to the list of directories searched in the
5390 * Added sys.path to the list of directories searched in the
5385 execfile= option. It used to be the current directory and the
5391 execfile= option. It used to be the current directory and the
5386 user's IPYTHONDIR only.
5392 user's IPYTHONDIR only.
5387
5393
5388 2001-11-13 Fernando Perez <fperez@colorado.edu>
5394 2001-11-13 Fernando Perez <fperez@colorado.edu>
5389
5395
5390 * Reinstated the raw_input/prefilter separation that Janko had
5396 * Reinstated the raw_input/prefilter separation that Janko had
5391 initially. This gives a more convenient setup for extending the
5397 initially. This gives a more convenient setup for extending the
5392 pre-processor from the outside: raw_input always gets a string,
5398 pre-processor from the outside: raw_input always gets a string,
5393 and prefilter has to process it. We can then redefine prefilter
5399 and prefilter has to process it. We can then redefine prefilter
5394 from the outside and implement extensions for special
5400 from the outside and implement extensions for special
5395 purposes.
5401 purposes.
5396
5402
5397 Today I got one for inputting PhysicalQuantity objects
5403 Today I got one for inputting PhysicalQuantity objects
5398 (from Scientific) without needing any function calls at
5404 (from Scientific) without needing any function calls at
5399 all. Extremely convenient, and it's all done as a user-level
5405 all. Extremely convenient, and it's all done as a user-level
5400 extension (no IPython code was touched). Now instead of:
5406 extension (no IPython code was touched). Now instead of:
5401 a = PhysicalQuantity(4.2,'m/s**2')
5407 a = PhysicalQuantity(4.2,'m/s**2')
5402 one can simply say
5408 one can simply say
5403 a = 4.2 m/s**2
5409 a = 4.2 m/s**2
5404 or even
5410 or even
5405 a = 4.2 m/s^2
5411 a = 4.2 m/s^2
5406
5412
5407 I use this, but it's also a proof of concept: IPython really is
5413 I use this, but it's also a proof of concept: IPython really is
5408 fully user-extensible, even at the level of the parsing of the
5414 fully user-extensible, even at the level of the parsing of the
5409 command line. It's not trivial, but it's perfectly doable.
5415 command line. It's not trivial, but it's perfectly doable.
5410
5416
5411 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5417 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5412 the problem of modules being loaded in the inverse order in which
5418 the problem of modules being loaded in the inverse order in which
5413 they were defined in
5419 they were defined in
5414
5420
5415 * Version 0.1.8 released, 0.1.9 opened for further work.
5421 * Version 0.1.8 released, 0.1.9 opened for further work.
5416
5422
5417 * Added magics pdef, source and file. They respectively show the
5423 * Added magics pdef, source and file. They respectively show the
5418 definition line ('prototype' in C), source code and full python
5424 definition line ('prototype' in C), source code and full python
5419 file for any callable object. The object inspector oinfo uses
5425 file for any callable object. The object inspector oinfo uses
5420 these to show the same information.
5426 these to show the same information.
5421
5427
5422 * Version 0.1.7 released, 0.1.8 opened for further work.
5428 * Version 0.1.7 released, 0.1.8 opened for further work.
5423
5429
5424 * Separated all the magic functions into a class called Magic. The
5430 * Separated all the magic functions into a class called Magic. The
5425 InteractiveShell class was becoming too big for Xemacs to handle
5431 InteractiveShell class was becoming too big for Xemacs to handle
5426 (de-indenting a line would lock it up for 10 seconds while it
5432 (de-indenting a line would lock it up for 10 seconds while it
5427 backtracked on the whole class!)
5433 backtracked on the whole class!)
5428
5434
5429 FIXME: didn't work. It can be done, but right now namespaces are
5435 FIXME: didn't work. It can be done, but right now namespaces are
5430 all messed up. Do it later (reverted it for now, so at least
5436 all messed up. Do it later (reverted it for now, so at least
5431 everything works as before).
5437 everything works as before).
5432
5438
5433 * Got the object introspection system (magic_oinfo) working! I
5439 * Got the object introspection system (magic_oinfo) working! I
5434 think this is pretty much ready for release to Janko, so he can
5440 think this is pretty much ready for release to Janko, so he can
5435 test it for a while and then announce it. Pretty much 100% of what
5441 test it for a while and then announce it. Pretty much 100% of what
5436 I wanted for the 'phase 1' release is ready. Happy, tired.
5442 I wanted for the 'phase 1' release is ready. Happy, tired.
5437
5443
5438 2001-11-12 Fernando Perez <fperez@colorado.edu>
5444 2001-11-12 Fernando Perez <fperez@colorado.edu>
5439
5445
5440 * Version 0.1.6 released, 0.1.7 opened for further work.
5446 * Version 0.1.6 released, 0.1.7 opened for further work.
5441
5447
5442 * Fixed bug in printing: it used to test for truth before
5448 * Fixed bug in printing: it used to test for truth before
5443 printing, so 0 wouldn't print. Now checks for None.
5449 printing, so 0 wouldn't print. Now checks for None.
5444
5450
5445 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5451 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5446 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5452 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5447 reaches by hand into the outputcache. Think of a better way to do
5453 reaches by hand into the outputcache. Think of a better way to do
5448 this later.
5454 this later.
5449
5455
5450 * Various small fixes thanks to Nathan's comments.
5456 * Various small fixes thanks to Nathan's comments.
5451
5457
5452 * Changed magic_pprint to magic_Pprint. This way it doesn't
5458 * Changed magic_pprint to magic_Pprint. This way it doesn't
5453 collide with pprint() and the name is consistent with the command
5459 collide with pprint() and the name is consistent with the command
5454 line option.
5460 line option.
5455
5461
5456 * Changed prompt counter behavior to be fully like
5462 * Changed prompt counter behavior to be fully like
5457 Mathematica's. That is, even input that doesn't return a result
5463 Mathematica's. That is, even input that doesn't return a result
5458 raises the prompt counter. The old behavior was kind of confusing
5464 raises the prompt counter. The old behavior was kind of confusing
5459 (getting the same prompt number several times if the operation
5465 (getting the same prompt number several times if the operation
5460 didn't return a result).
5466 didn't return a result).
5461
5467
5462 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5468 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5463
5469
5464 * Fixed -Classic mode (wasn't working anymore).
5470 * Fixed -Classic mode (wasn't working anymore).
5465
5471
5466 * Added colored prompts using Nathan's new code. Colors are
5472 * Added colored prompts using Nathan's new code. Colors are
5467 currently hardwired, they can be user-configurable. For
5473 currently hardwired, they can be user-configurable. For
5468 developers, they can be chosen in file ipythonlib.py, at the
5474 developers, they can be chosen in file ipythonlib.py, at the
5469 beginning of the CachedOutput class def.
5475 beginning of the CachedOutput class def.
5470
5476
5471 2001-11-11 Fernando Perez <fperez@colorado.edu>
5477 2001-11-11 Fernando Perez <fperez@colorado.edu>
5472
5478
5473 * Version 0.1.5 released, 0.1.6 opened for further work.
5479 * Version 0.1.5 released, 0.1.6 opened for further work.
5474
5480
5475 * Changed magic_env to *return* the environment as a dict (not to
5481 * Changed magic_env to *return* the environment as a dict (not to
5476 print it). This way it prints, but it can also be processed.
5482 print it). This way it prints, but it can also be processed.
5477
5483
5478 * Added Verbose exception reporting to interactive
5484 * Added Verbose exception reporting to interactive
5479 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5485 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5480 traceback. Had to make some changes to the ultraTB file. This is
5486 traceback. Had to make some changes to the ultraTB file. This is
5481 probably the last 'big' thing in my mental todo list. This ties
5487 probably the last 'big' thing in my mental todo list. This ties
5482 in with the next entry:
5488 in with the next entry:
5483
5489
5484 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5490 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5485 has to specify is Plain, Color or Verbose for all exception
5491 has to specify is Plain, Color or Verbose for all exception
5486 handling.
5492 handling.
5487
5493
5488 * Removed ShellServices option. All this can really be done via
5494 * Removed ShellServices option. All this can really be done via
5489 the magic system. It's easier to extend, cleaner and has automatic
5495 the magic system. It's easier to extend, cleaner and has automatic
5490 namespace protection and documentation.
5496 namespace protection and documentation.
5491
5497
5492 2001-11-09 Fernando Perez <fperez@colorado.edu>
5498 2001-11-09 Fernando Perez <fperez@colorado.edu>
5493
5499
5494 * Fixed bug in output cache flushing (missing parameter to
5500 * Fixed bug in output cache flushing (missing parameter to
5495 __init__). Other small bugs fixed (found using pychecker).
5501 __init__). Other small bugs fixed (found using pychecker).
5496
5502
5497 * Version 0.1.4 opened for bugfixing.
5503 * Version 0.1.4 opened for bugfixing.
5498
5504
5499 2001-11-07 Fernando Perez <fperez@colorado.edu>
5505 2001-11-07 Fernando Perez <fperez@colorado.edu>
5500
5506
5501 * Version 0.1.3 released, mainly because of the raw_input bug.
5507 * Version 0.1.3 released, mainly because of the raw_input bug.
5502
5508
5503 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5509 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5504 and when testing for whether things were callable, a call could
5510 and when testing for whether things were callable, a call could
5505 actually be made to certain functions. They would get called again
5511 actually be made to certain functions. They would get called again
5506 once 'really' executed, with a resulting double call. A disaster
5512 once 'really' executed, with a resulting double call. A disaster
5507 in many cases (list.reverse() would never work!).
5513 in many cases (list.reverse() would never work!).
5508
5514
5509 * Removed prefilter() function, moved its code to raw_input (which
5515 * Removed prefilter() function, moved its code to raw_input (which
5510 after all was just a near-empty caller for prefilter). This saves
5516 after all was just a near-empty caller for prefilter). This saves
5511 a function call on every prompt, and simplifies the class a tiny bit.
5517 a function call on every prompt, and simplifies the class a tiny bit.
5512
5518
5513 * Fix _ip to __ip name in magic example file.
5519 * Fix _ip to __ip name in magic example file.
5514
5520
5515 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5521 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5516 work with non-gnu versions of tar.
5522 work with non-gnu versions of tar.
5517
5523
5518 2001-11-06 Fernando Perez <fperez@colorado.edu>
5524 2001-11-06 Fernando Perez <fperez@colorado.edu>
5519
5525
5520 * Version 0.1.2. Just to keep track of the recent changes.
5526 * Version 0.1.2. Just to keep track of the recent changes.
5521
5527
5522 * Fixed nasty bug in output prompt routine. It used to check 'if
5528 * Fixed nasty bug in output prompt routine. It used to check 'if
5523 arg != None...'. Problem is, this fails if arg implements a
5529 arg != None...'. Problem is, this fails if arg implements a
5524 special comparison (__cmp__) which disallows comparing to
5530 special comparison (__cmp__) which disallows comparing to
5525 None. Found it when trying to use the PhysicalQuantity module from
5531 None. Found it when trying to use the PhysicalQuantity module from
5526 ScientificPython.
5532 ScientificPython.
5527
5533
5528 2001-11-05 Fernando Perez <fperez@colorado.edu>
5534 2001-11-05 Fernando Perez <fperez@colorado.edu>
5529
5535
5530 * Also added dirs. Now the pushd/popd/dirs family functions
5536 * Also added dirs. Now the pushd/popd/dirs family functions
5531 basically like the shell, with the added convenience of going home
5537 basically like the shell, with the added convenience of going home
5532 when called with no args.
5538 when called with no args.
5533
5539
5534 * pushd/popd slightly modified to mimic shell behavior more
5540 * pushd/popd slightly modified to mimic shell behavior more
5535 closely.
5541 closely.
5536
5542
5537 * Added env,pushd,popd from ShellServices as magic functions. I
5543 * Added env,pushd,popd from ShellServices as magic functions. I
5538 think the cleanest will be to port all desired functions from
5544 think the cleanest will be to port all desired functions from
5539 ShellServices as magics and remove ShellServices altogether. This
5545 ShellServices as magics and remove ShellServices altogether. This
5540 will provide a single, clean way of adding functionality
5546 will provide a single, clean way of adding functionality
5541 (shell-type or otherwise) to IP.
5547 (shell-type or otherwise) to IP.
5542
5548
5543 2001-11-04 Fernando Perez <fperez@colorado.edu>
5549 2001-11-04 Fernando Perez <fperez@colorado.edu>
5544
5550
5545 * Added .ipython/ directory to sys.path. This way users can keep
5551 * Added .ipython/ directory to sys.path. This way users can keep
5546 customizations there and access them via import.
5552 customizations there and access them via import.
5547
5553
5548 2001-11-03 Fernando Perez <fperez@colorado.edu>
5554 2001-11-03 Fernando Perez <fperez@colorado.edu>
5549
5555
5550 * Opened version 0.1.1 for new changes.
5556 * Opened version 0.1.1 for new changes.
5551
5557
5552 * Changed version number to 0.1.0: first 'public' release, sent to
5558 * Changed version number to 0.1.0: first 'public' release, sent to
5553 Nathan and Janko.
5559 Nathan and Janko.
5554
5560
5555 * Lots of small fixes and tweaks.
5561 * Lots of small fixes and tweaks.
5556
5562
5557 * Minor changes to whos format. Now strings are shown, snipped if
5563 * Minor changes to whos format. Now strings are shown, snipped if
5558 too long.
5564 too long.
5559
5565
5560 * Changed ShellServices to work on __main__ so they show up in @who
5566 * Changed ShellServices to work on __main__ so they show up in @who
5561
5567
5562 * Help also works with ? at the end of a line:
5568 * Help also works with ? at the end of a line:
5563 ?sin and sin?
5569 ?sin and sin?
5564 both produce the same effect. This is nice, as often I use the
5570 both produce the same effect. This is nice, as often I use the
5565 tab-complete to find the name of a method, but I used to then have
5571 tab-complete to find the name of a method, but I used to then have
5566 to go to the beginning of the line to put a ? if I wanted more
5572 to go to the beginning of the line to put a ? if I wanted more
5567 info. Now I can just add the ? and hit return. Convenient.
5573 info. Now I can just add the ? and hit return. Convenient.
5568
5574
5569 2001-11-02 Fernando Perez <fperez@colorado.edu>
5575 2001-11-02 Fernando Perez <fperez@colorado.edu>
5570
5576
5571 * Python version check (>=2.1) added.
5577 * Python version check (>=2.1) added.
5572
5578
5573 * Added LazyPython documentation. At this point the docs are quite
5579 * Added LazyPython documentation. At this point the docs are quite
5574 a mess. A cleanup is in order.
5580 a mess. A cleanup is in order.
5575
5581
5576 * Auto-installer created. For some bizarre reason, the zipfiles
5582 * Auto-installer created. For some bizarre reason, the zipfiles
5577 module isn't working on my system. So I made a tar version
5583 module isn't working on my system. So I made a tar version
5578 (hopefully the command line options in various systems won't kill
5584 (hopefully the command line options in various systems won't kill
5579 me).
5585 me).
5580
5586
5581 * Fixes to Struct in genutils. Now all dictionary-like methods are
5587 * Fixes to Struct in genutils. Now all dictionary-like methods are
5582 protected (reasonably).
5588 protected (reasonably).
5583
5589
5584 * Added pager function to genutils and changed ? to print usage
5590 * Added pager function to genutils and changed ? to print usage
5585 note through it (it was too long).
5591 note through it (it was too long).
5586
5592
5587 * Added the LazyPython functionality. Works great! I changed the
5593 * Added the LazyPython functionality. Works great! I changed the
5588 auto-quote escape to ';', it's on home row and next to '. But
5594 auto-quote escape to ';', it's on home row and next to '. But
5589 both auto-quote and auto-paren (still /) escapes are command-line
5595 both auto-quote and auto-paren (still /) escapes are command-line
5590 parameters.
5596 parameters.
5591
5597
5592
5598
5593 2001-11-01 Fernando Perez <fperez@colorado.edu>
5599 2001-11-01 Fernando Perez <fperez@colorado.edu>
5594
5600
5595 * Version changed to 0.0.7. Fairly large change: configuration now
5601 * Version changed to 0.0.7. Fairly large change: configuration now
5596 is all stored in a directory, by default .ipython. There, all
5602 is all stored in a directory, by default .ipython. There, all
5597 config files have normal looking names (not .names)
5603 config files have normal looking names (not .names)
5598
5604
5599 * Version 0.0.6 Released first to Lucas and Archie as a test
5605 * Version 0.0.6 Released first to Lucas and Archie as a test
5600 run. Since it's the first 'semi-public' release, change version to
5606 run. Since it's the first 'semi-public' release, change version to
5601 > 0.0.6 for any changes now.
5607 > 0.0.6 for any changes now.
5602
5608
5603 * Stuff I had put in the ipplib.py changelog:
5609 * Stuff I had put in the ipplib.py changelog:
5604
5610
5605 Changes to InteractiveShell:
5611 Changes to InteractiveShell:
5606
5612
5607 - Made the usage message a parameter.
5613 - Made the usage message a parameter.
5608
5614
5609 - Require the name of the shell variable to be given. It's a bit
5615 - Require the name of the shell variable to be given. It's a bit
5610 of a hack, but allows the name 'shell' not to be hardwired in the
5616 of a hack, but allows the name 'shell' not to be hardwired in the
5611 magic (@) handler, which is problematic b/c it requires
5617 magic (@) handler, which is problematic b/c it requires
5612 polluting the global namespace with 'shell'. This in turn is
5618 polluting the global namespace with 'shell'. This in turn is
5613 fragile: if a user redefines a variable called shell, things
5619 fragile: if a user redefines a variable called shell, things
5614 break.
5620 break.
5615
5621
5616 - magic @: all functions available through @ need to be defined
5622 - magic @: all functions available through @ need to be defined
5617 as magic_<name>, even though they can be called simply as
5623 as magic_<name>, even though they can be called simply as
5618 @<name>. This allows the special command @magic to gather
5624 @<name>. This allows the special command @magic to gather
5619 information automatically about all existing magic functions,
5625 information automatically about all existing magic functions,
5620 even if they are run-time user extensions, by parsing the shell
5626 even if they are run-time user extensions, by parsing the shell
5621 instance __dict__ looking for special magic_ names.
5627 instance __dict__ looking for special magic_ names.
5622
5628
5623 - mainloop: added *two* local namespace parameters. This allows
5629 - mainloop: added *two* local namespace parameters. This allows
5624 the class to differentiate between parameters which were there
5630 the class to differentiate between parameters which were there
5625 before and after command line initialization was processed. This
5631 before and after command line initialization was processed. This
5626 way, later @who can show things loaded at startup by the
5632 way, later @who can show things loaded at startup by the
5627 user. This trick was necessary to make session saving/reloading
5633 user. This trick was necessary to make session saving/reloading
5628 really work: ideally after saving/exiting/reloading a session,
5634 really work: ideally after saving/exiting/reloading a session,
5629 *everything* should look the same, including the output of @who. I
5635 *everything* should look the same, including the output of @who. I
5630 was only able to make this work with this double namespace
5636 was only able to make this work with this double namespace
5631 trick.
5637 trick.
5632
5638
5633 - added a header to the logfile which allows (almost) full
5639 - added a header to the logfile which allows (almost) full
5634 session restoring.
5640 session restoring.
5635
5641
5636 - prepend lines beginning with @ or !, with a and log
5642 - prepend lines beginning with @ or !, with a and log
5637 them. Why? !lines: may be useful to know what you did @lines:
5643 them. Why? !lines: may be useful to know what you did @lines:
5638 they may affect session state. So when restoring a session, at
5644 they may affect session state. So when restoring a session, at
5639 least inform the user of their presence. I couldn't quite get
5645 least inform the user of their presence. I couldn't quite get
5640 them to properly re-execute, but at least the user is warned.
5646 them to properly re-execute, but at least the user is warned.
5641
5647
5642 * Started ChangeLog.
5648 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now