##// END OF EJS Templates
Fix getglobals() if we're not running under IPython.
walter.doerwald -
Show More
@@ -1,1852 +1,1853 b''
1 # -*- coding: iso-8859-1 -*-
1 # -*- coding: iso-8859-1 -*-
2
2
3 """
3 """
4 ``ipipe`` provides classes to be used in an interactive Python session. Doing a
4 ``ipipe`` provides classes to be used in an interactive Python session. Doing a
5 ``from ipipe import *`` is the preferred way to do this. The name of all
5 ``from ipipe import *`` is the preferred way to do this. The name of all
6 objects imported this way starts with ``i`` to minimize collisions.
6 objects imported this way starts with ``i`` to minimize collisions.
7
7
8 ``ipipe`` supports "pipeline expressions", which is something resembling Unix
8 ``ipipe`` supports "pipeline expressions", which is something resembling Unix
9 pipes. An example is:
9 pipes. An example is:
10
10
11 >>> ienv | isort("key.lower()")
11 >>> ienv | isort("key.lower()")
12
12
13 This gives a listing of all environment variables sorted by name.
13 This gives a listing of all environment variables sorted by name.
14
14
15
15
16 There are three types of objects in a pipeline expression:
16 There are three types of objects in a pipeline expression:
17
17
18 * ``Table``s: These objects produce items. Examples are ``ls`` (listing the
18 * ``Table``s: These objects produce items. Examples are ``ls`` (listing the
19 current directory, ``ienv`` (listing environment variables), ``ipwd`` (listing
19 current directory, ``ienv`` (listing environment variables), ``ipwd`` (listing
20 user account) and ``igrp`` (listing user groups). A ``Table`` must be the
20 user account) and ``igrp`` (listing user groups). A ``Table`` must be the
21 first object in a pipe expression.
21 first object in a pipe expression.
22
22
23 * ``Pipe``s: These objects sit in the middle of a pipe expression. They
23 * ``Pipe``s: These objects sit in the middle of a pipe expression. They
24 transform the input in some way (e.g. filtering or sorting it). Examples are:
24 transform the input in some way (e.g. filtering or sorting it). Examples are:
25 ``ifilter`` (which filters the input pipe), ``isort`` (which sorts the input
25 ``ifilter`` (which filters the input pipe), ``isort`` (which sorts the input
26 pipe) and ``ieval`` (which evaluates a function or expression for each object
26 pipe) and ``ieval`` (which evaluates a function or expression for each object
27 in the input pipe).
27 in the input pipe).
28
28
29 * ``Display``s: These objects can be put as the last object in a pipeline
29 * ``Display``s: These objects can be put as the last object in a pipeline
30 expression. There are responsible for displaying the result of the pipeline
30 expression. There are responsible for displaying the result of the pipeline
31 expression. If a pipeline expression doesn't end in a display object a default
31 expression. If a pipeline expression doesn't end in a display object a default
32 display objects will be used. One example is ``browse`` which is a ``curses``
32 display objects will be used. One example is ``browse`` which is a ``curses``
33 based browser.
33 based browser.
34
34
35
35
36 Adding support for pipeline expressions to your own objects can be done through
36 Adding support for pipeline expressions to your own objects can be done through
37 three extensions points (all of them optional):
37 three extensions points (all of them optional):
38
38
39 * An object that will be displayed as a row by a ``Display`` object should
39 * An object that will be displayed as a row by a ``Display`` object should
40 implement the method ``__xattrs__(self, mode)``. This method must return a
40 implement the method ``__xattrs__(self, mode)``. This method must return a
41 sequence of attribute names. This sequence may also contain integers, which
41 sequence of attribute names. This sequence may also contain integers, which
42 will be treated as sequence indizes. Also supported is ``None``, which uses
42 will be treated as sequence indizes. Also supported is ``None``, which uses
43 the object itself and callables which will be called with the object as the
43 the object itself and callables which will be called with the object as the
44 an argument. If ``__xattrs__()`` isn't implemented ``(None,)`` will be used as
44 an argument. If ``__xattrs__()`` isn't implemented ``(None,)`` will be used as
45 the attribute sequence (i.e. the object itself (it's ``repr()`` format) will
45 the attribute sequence (i.e. the object itself (it's ``repr()`` format) will
46 be being displayed. The global function ``xattrs()`` implements this
46 be being displayed. The global function ``xattrs()`` implements this
47 functionality.
47 functionality.
48
48
49 * When an object ``foo`` is displayed in the header, footer or table cell of the
49 * When an object ``foo`` is displayed in the header, footer or table cell of the
50 browser ``foo.__xrepr__(mode)`` is called. Mode can be ``"header"`` or
50 browser ``foo.__xrepr__(mode)`` is called. Mode can be ``"header"`` or
51 ``"footer"`` for the header or footer line and ``"cell"`` for a table cell.
51 ``"footer"`` for the header or footer line and ``"cell"`` for a table cell.
52 ``__xrepr__()```must return an iterable (e.g. by being a generator) which
52 ``__xrepr__()```must return an iterable (e.g. by being a generator) which
53 produces the following items: The first item should be a tuple containing
53 produces the following items: The first item should be a tuple containing
54 the alignment (-1 left aligned, 0 centered and 1 right aligned) and whether
54 the alignment (-1 left aligned, 0 centered and 1 right aligned) and whether
55 the complete output must be displayed or if the browser is allowed to stop
55 the complete output must be displayed or if the browser is allowed to stop
56 output after enough text has been produced (e.g. a syntax highlighted text
56 output after enough text has been produced (e.g. a syntax highlighted text
57 line would use ``True``, but for a large data structure (i.e. a nested list,
57 line would use ``True``, but for a large data structure (i.e. a nested list,
58 tuple or dictionary) ``False`` would be used). The other output ``__xrepr__()``
58 tuple or dictionary) ``False`` would be used). The other output ``__xrepr__()``
59 may produce is tuples of ``Style```objects and text (which contain the text
59 may produce is tuples of ``Style```objects and text (which contain the text
60 representation of the object; see the ``astyle`` module). If ``__xrepr__()``
60 representation of the object; see the ``astyle`` module). If ``__xrepr__()``
61 recursively outputs a data structure the function ``xrepr(object, mode)`` can
61 recursively outputs a data structure the function ``xrepr(object, mode)`` can
62 be used and ``"default"`` must be passed as the mode in these calls. This in
62 be used and ``"default"`` must be passed as the mode in these calls. This in
63 turn calls the ``__xrepr__()`` method on ``object`` (or uses ``repr(object)``
63 turn calls the ``__xrepr__()`` method on ``object`` (or uses ``repr(object)``
64 as the string representation if ``__xrepr__()`` doesn't exist).
64 as the string representation if ``__xrepr__()`` doesn't exist).
65
65
66 * Objects that can be iterated by ``Pipe``s must implement the method
66 * Objects that can be iterated by ``Pipe``s must implement the method
67 ``__xiter__(self, mode)``. ``mode`` can take the following values:
67 ``__xiter__(self, mode)``. ``mode`` can take the following values:
68
68
69 - ``"default"``: This is the default value and ist always used by pipeline
69 - ``"default"``: This is the default value and ist always used by pipeline
70 expressions. Other values are only used in the browser.
70 expressions. Other values are only used in the browser.
71 - ``None``: This value is passed by the browser. The object must return an
71 - ``None``: This value is passed by the browser. The object must return an
72 iterable of ``XMode`` objects describing all modes supported by the object.
72 iterable of ``XMode`` objects describing all modes supported by the object.
73 (This should never include ``"default"`` or ``None``).
73 (This should never include ``"default"`` or ``None``).
74 - Any other value that the object supports.
74 - Any other value that the object supports.
75
75
76 The global function ``xiter()`` can be called to get such an iterator. If
76 The global function ``xiter()`` can be called to get such an iterator. If
77 the method ``_xiter__`` isn't implemented, ``xiter()`` falls back to
77 the method ``_xiter__`` isn't implemented, ``xiter()`` falls back to
78 ``__iter__``. In addition to that, dictionaries and modules receive special
78 ``__iter__``. In addition to that, dictionaries and modules receive special
79 treatment (returning an iterator over ``(key, value)`` pairs). This makes it
79 treatment (returning an iterator over ``(key, value)`` pairs). This makes it
80 possible to use dictionaries and modules in pipeline expressions, for example:
80 possible to use dictionaries and modules in pipeline expressions, for example:
81
81
82 >>> import sys
82 >>> import sys
83 >>> sys | ifilter("isinstance(value, int)") | idump
83 >>> sys | ifilter("isinstance(value, int)") | idump
84 key |value
84 key |value
85 api_version| 1012
85 api_version| 1012
86 dllhandle | 503316480
86 dllhandle | 503316480
87 hexversion | 33817328
87 hexversion | 33817328
88 maxint |2147483647
88 maxint |2147483647
89 maxunicode | 65535
89 maxunicode | 65535
90 >>> sys.modules | ifilter("_.value is not None") | isort("_.key.lower()")
90 >>> sys.modules | ifilter("_.value is not None") | isort("_.key.lower()")
91 ...
91 ...
92
92
93 Note: The expression strings passed to ``ifilter()`` and ``isort()`` can
93 Note: The expression strings passed to ``ifilter()`` and ``isort()`` can
94 refer to the object to be filtered or sorted via the variable ``_`` and to any
94 refer to the object to be filtered or sorted via the variable ``_`` and to any
95 of the attributes of the object, i.e.:
95 of the attributes of the object, i.e.:
96
96
97 >>> sys.modules | ifilter("_.value is not None") | isort("_.key.lower()")
97 >>> sys.modules | ifilter("_.value is not None") | isort("_.key.lower()")
98
98
99 does the same as
99 does the same as
100
100
101 >>> sys.modules | ifilter("value is not None") | isort("key.lower()")
101 >>> sys.modules | ifilter("value is not None") | isort("key.lower()")
102
102
103 In addition to expression strings, it's possible to pass callables (taking
103 In addition to expression strings, it's possible to pass callables (taking
104 the object as an argument) to ``ifilter()``, ``isort()`` and ``ieval()``:
104 the object as an argument) to ``ifilter()``, ``isort()`` and ``ieval()``:
105
105
106 >>> sys | ifilter(lambda _:isinstance(_.value, int)) \
106 >>> sys | ifilter(lambda _:isinstance(_.value, int)) \
107 ... | ieval(lambda _: (_.key, hex(_.value))) | idump
107 ... | ieval(lambda _: (_.key, hex(_.value))) | idump
108 0 |1
108 0 |1
109 api_version|0x3f4
109 api_version|0x3f4
110 dllhandle |0x1e000000
110 dllhandle |0x1e000000
111 hexversion |0x20402f0
111 hexversion |0x20402f0
112 maxint |0x7fffffff
112 maxint |0x7fffffff
113 maxunicode |0xffff
113 maxunicode |0xffff
114 """
114 """
115
115
116 import sys, os, os.path, stat, glob, new, csv, datetime, types
116 import sys, os, os.path, stat, glob, new, csv, datetime, types
117 import itertools, mimetypes
117 import itertools, mimetypes
118
118
119 try: # Python 2.3 compatibility
119 try: # Python 2.3 compatibility
120 import collections
120 import collections
121 except ImportError:
121 except ImportError:
122 deque = list
122 deque = list
123 else:
123 else:
124 deque = collections.deque
124 deque = collections.deque
125
125
126 try: # Python 2.3 compatibility
126 try: # Python 2.3 compatibility
127 set
127 set
128 except NameError:
128 except NameError:
129 import sets
129 import sets
130 set = sets.Set
130 set = sets.Set
131
131
132 try: # Python 2.3 compatibility
132 try: # Python 2.3 compatibility
133 sorted
133 sorted
134 except NameError:
134 except NameError:
135 def sorted(iterator, key=None, reverse=False):
135 def sorted(iterator, key=None, reverse=False):
136 items = list(iterator)
136 items = list(iterator)
137 if key is not None:
137 if key is not None:
138 items.sort(lambda i1, i2: cmp(key(i1), key(i2)))
138 items.sort(lambda i1, i2: cmp(key(i1), key(i2)))
139 else:
139 else:
140 items.sort()
140 items.sort()
141 if reverse:
141 if reverse:
142 items.reverse()
142 items.reverse()
143 return items
143 return items
144
144
145 try:
145 try:
146 import pwd
146 import pwd
147 except ImportError:
147 except ImportError:
148 pwd = None
148 pwd = None
149
149
150 try:
150 try:
151 import grp
151 import grp
152 except ImportError:
152 except ImportError:
153 grp = None
153 grp = None
154
154
155 import path
155 import path
156 try:
156 try:
157 from IPython import genutils, ipapi
157 from IPython import genutils, ipapi
158 except ImportError:
158 except ImportError:
159 genutils = None
159 genutils = None
160 ipapi = None
160 ipapi = None
161
161
162 import astyle
162 import astyle
163
163
164
164
165 __all__ = [
165 __all__ = [
166 "ifile", "ils", "iglob", "iwalk", "ipwdentry", "ipwd", "igrpentry", "igrp",
166 "ifile", "ils", "iglob", "iwalk", "ipwdentry", "ipwd", "igrpentry", "igrp",
167 "icsv", "ix", "ichain", "isort", "ifilter", "ieval", "ienum", "ienv",
167 "icsv", "ix", "ichain", "isort", "ifilter", "ieval", "ienum", "ienv",
168 "idump", "iless"
168 "idump", "iless"
169 ]
169 ]
170
170
171
171
172 os.stat_float_times(True) # enable microseconds
172 os.stat_float_times(True) # enable microseconds
173
173
174
174
175 class AttrNamespace(object):
175 class AttrNamespace(object):
176 """
176 """
177 Helper class that is used for providing a namespace for evaluating
177 Helper class that is used for providing a namespace for evaluating
178 expressions containing attribute names of an object.
178 expressions containing attribute names of an object.
179 """
179 """
180 def __init__(self, wrapped):
180 def __init__(self, wrapped):
181 self.wrapped = wrapped
181 self.wrapped = wrapped
182
182
183 def __getitem__(self, name):
183 def __getitem__(self, name):
184 if name == "_":
184 if name == "_":
185 return self.wrapped
185 return self.wrapped
186 try:
186 try:
187 return getattr(self.wrapped, name)
187 return getattr(self.wrapped, name)
188 except AttributeError:
188 except AttributeError:
189 raise KeyError(name)
189 raise KeyError(name)
190
190
191 # Python 2.3 compatibility
191 # Python 2.3 compatibility
192 # use eval workaround to find out which names are used in the
192 # use eval workaround to find out which names are used in the
193 # eval string and put them into the locals. This works for most
193 # eval string and put them into the locals. This works for most
194 # normal uses case, bizarre ones like accessing the locals()
194 # normal uses case, bizarre ones like accessing the locals()
195 # will fail
195 # will fail
196 try:
196 try:
197 eval("_", None, AttrNamespace(None))
197 eval("_", None, AttrNamespace(None))
198 except TypeError:
198 except TypeError:
199 real_eval = eval
199 real_eval = eval
200 def eval(codestring, _globals, _locals):
200 def eval(codestring, _globals, _locals):
201 """
201 """
202 eval(source[, globals[, locals]]) -> value
202 eval(source[, globals[, locals]]) -> value
203
203
204 Evaluate the source in the context of globals and locals.
204 Evaluate the source in the context of globals and locals.
205 The source may be a string representing a Python expression
205 The source may be a string representing a Python expression
206 or a code object as returned by compile().
206 or a code object as returned by compile().
207 The globals must be a dictionary and locals can be any mappping.
207 The globals must be a dictionary and locals can be any mappping.
208
208
209 This function is a workaround for the shortcomings of
209 This function is a workaround for the shortcomings of
210 Python 2.3's eval.
210 Python 2.3's eval.
211 """
211 """
212
212
213 if isinstance(codestring, basestring):
213 if isinstance(codestring, basestring):
214 code = compile(codestring, "_eval", "eval")
214 code = compile(codestring, "_eval", "eval")
215 else:
215 else:
216 code = codestring
216 code = codestring
217 newlocals = {}
217 newlocals = {}
218 for name in code.co_names:
218 for name in code.co_names:
219 try:
219 try:
220 newlocals[name] = _locals[name]
220 newlocals[name] = _locals[name]
221 except KeyError:
221 except KeyError:
222 pass
222 pass
223 return real_eval(code, _globals, newlocals)
223 return real_eval(code, _globals, newlocals)
224
224
225
225
226 noitem = object()
226 noitem = object()
227
227
228 def item(iterator, index, default=noitem):
228 def item(iterator, index, default=noitem):
229 """
229 """
230 Return the ``index``th item from the iterator ``iterator``.
230 Return the ``index``th item from the iterator ``iterator``.
231 ``index`` must be an integer (negative integers are relative to the
231 ``index`` must be an integer (negative integers are relative to the
232 end (i.e. the last item produced by the iterator)).
232 end (i.e. the last item produced by the iterator)).
233
233
234 If ``default`` is given, this will be the default value when
234 If ``default`` is given, this will be the default value when
235 the iterator doesn't contain an item at this position. Otherwise an
235 the iterator doesn't contain an item at this position. Otherwise an
236 ``IndexError`` will be raised.
236 ``IndexError`` will be raised.
237
237
238 Note that using this function will partially or totally exhaust the
238 Note that using this function will partially or totally exhaust the
239 iterator.
239 iterator.
240 """
240 """
241 i = index
241 i = index
242 if i>=0:
242 if i>=0:
243 for item in iterator:
243 for item in iterator:
244 if not i:
244 if not i:
245 return item
245 return item
246 i -= 1
246 i -= 1
247 else:
247 else:
248 i = -index
248 i = -index
249 cache = deque()
249 cache = deque()
250 for item in iterator:
250 for item in iterator:
251 cache.append(item)
251 cache.append(item)
252 if len(cache)>i:
252 if len(cache)>i:
253 cache.popleft()
253 cache.popleft()
254 if len(cache)==i:
254 if len(cache)==i:
255 return cache.popleft()
255 return cache.popleft()
256 if default is noitem:
256 if default is noitem:
257 raise IndexError(index)
257 raise IndexError(index)
258 else:
258 else:
259 return default
259 return default
260
260
261
261
262 def getglobals(g):
262 def getglobals(g):
263 if g is None:
263 if g is None:
264 if ipapi is not None:
264 if ipapi is not None:
265 return ipapi.get().user_ns
265 api = ipapi.get()
266 else:
266 if api is not None:
267 return globals()
267 return api.user_ns
268 return globals()
268 return g
269 return g
269
270
270
271
271 class Table(object):
272 class Table(object):
272 """
273 """
273 A ``Table`` is an object that produces items (just like a normal Python
274 A ``Table`` is an object that produces items (just like a normal Python
274 iterator/generator does) and can be used as the first object in a pipeline
275 iterator/generator does) and can be used as the first object in a pipeline
275 expression. The displayhook will open the default browser for such an object
276 expression. The displayhook will open the default browser for such an object
276 (instead of simply printing the ``repr()`` result).
277 (instead of simply printing the ``repr()`` result).
277 """
278 """
278
279
279 # We want to support ``foo`` and ``foo()`` in pipeline expression:
280 # We want to support ``foo`` and ``foo()`` in pipeline expression:
280 # So we implement the required operators (``|`` and ``+``) in the metaclass,
281 # So we implement the required operators (``|`` and ``+``) in the metaclass,
281 # instantiate the class and forward the operator to the instance
282 # instantiate the class and forward the operator to the instance
282 class __metaclass__(type):
283 class __metaclass__(type):
283 def __iter__(self):
284 def __iter__(self):
284 return iter(self())
285 return iter(self())
285
286
286 def __or__(self, other):
287 def __or__(self, other):
287 return self() | other
288 return self() | other
288
289
289 def __add__(self, other):
290 def __add__(self, other):
290 return self() + other
291 return self() + other
291
292
292 def __radd__(self, other):
293 def __radd__(self, other):
293 return other + self()
294 return other + self()
294
295
295 def __getitem__(self, index):
296 def __getitem__(self, index):
296 return self()[index]
297 return self()[index]
297
298
298 def __getitem__(self, index):
299 def __getitem__(self, index):
299 return item(self, index)
300 return item(self, index)
300
301
301 def __contains__(self, item):
302 def __contains__(self, item):
302 for haveitem in self:
303 for haveitem in self:
303 if item == haveitem:
304 if item == haveitem:
304 return True
305 return True
305 return False
306 return False
306
307
307 def __or__(self, other):
308 def __or__(self, other):
308 # autoinstantiate right hand side
309 # autoinstantiate right hand side
309 if isinstance(other, type) and issubclass(other, (Table, Display)):
310 if isinstance(other, type) and issubclass(other, (Table, Display)):
310 other = other()
311 other = other()
311 # treat simple strings and functions as ``ieval`` instances
312 # treat simple strings and functions as ``ieval`` instances
312 elif not isinstance(other, Display) and not isinstance(other, Table):
313 elif not isinstance(other, Display) and not isinstance(other, Table):
313 other = ieval(other)
314 other = ieval(other)
314 # forward operations to the right hand side
315 # forward operations to the right hand side
315 return other.__ror__(self)
316 return other.__ror__(self)
316
317
317 def __add__(self, other):
318 def __add__(self, other):
318 # autoinstantiate right hand side
319 # autoinstantiate right hand side
319 if isinstance(other, type) and issubclass(other, Table):
320 if isinstance(other, type) and issubclass(other, Table):
320 other = other()
321 other = other()
321 return ichain(self, other)
322 return ichain(self, other)
322
323
323 def __radd__(self, other):
324 def __radd__(self, other):
324 # autoinstantiate left hand side
325 # autoinstantiate left hand side
325 if isinstance(other, type) and issubclass(other, Table):
326 if isinstance(other, type) and issubclass(other, Table):
326 other = other()
327 other = other()
327 return ichain(other, self)
328 return ichain(other, self)
328
329
329 def __iter__(self):
330 def __iter__(self):
330 return xiter(self, "default")
331 return xiter(self, "default")
331
332
332
333
333 class Pipe(Table):
334 class Pipe(Table):
334 """
335 """
335 A ``Pipe`` is an object that can be used in a pipeline expression. It
336 A ``Pipe`` is an object that can be used in a pipeline expression. It
336 processes the objects it gets from its input ``Table``/``Pipe``. Note that
337 processes the objects it gets from its input ``Table``/``Pipe``. Note that
337 a ``Pipe`` object can't be used as the first object in a pipeline
338 a ``Pipe`` object can't be used as the first object in a pipeline
338 expression, as it doesn't produces items itself.
339 expression, as it doesn't produces items itself.
339 """
340 """
340 class __metaclass__(Table.__metaclass__):
341 class __metaclass__(Table.__metaclass__):
341 def __ror__(self, input):
342 def __ror__(self, input):
342 return input | self()
343 return input | self()
343
344
344 def __ror__(self, input):
345 def __ror__(self, input):
345 # autoinstantiate left hand side
346 # autoinstantiate left hand side
346 if isinstance(input, type) and issubclass(input, Table):
347 if isinstance(input, type) and issubclass(input, Table):
347 input = input()
348 input = input()
348 self.input = input
349 self.input = input
349 return self
350 return self
350
351
351
352
352 def _getattr(obj, name, default=noitem):
353 def _getattr(obj, name, default=noitem):
353 """
354 """
354 Internal helper for getting an attribute of an item. If ``name`` is ``None``
355 Internal helper for getting an attribute of an item. If ``name`` is ``None``
355 return the object itself. If ``name`` is an integer, use ``__getitem__``
356 return the object itself. If ``name`` is an integer, use ``__getitem__``
356 instead. If the attribute or item does not exist, return ``default``.
357 instead. If the attribute or item does not exist, return ``default``.
357 """
358 """
358 if name is None:
359 if name is None:
359 return obj
360 return obj
360 elif isinstance(name, basestring):
361 elif isinstance(name, basestring):
361 if name.endswith("()"):
362 if name.endswith("()"):
362 return getattr(obj, name[:-2], default)()
363 return getattr(obj, name[:-2], default)()
363 else:
364 else:
364 return getattr(obj, name, default)
365 return getattr(obj, name, default)
365 elif callable(name):
366 elif callable(name):
366 try:
367 try:
367 return name(obj)
368 return name(obj)
368 except AttributeError:
369 except AttributeError:
369 return default
370 return default
370 else:
371 else:
371 try:
372 try:
372 return obj[name]
373 return obj[name]
373 except IndexError:
374 except IndexError:
374 return default
375 return default
375
376
376
377
377 def _attrname(name):
378 def _attrname(name):
378 """
379 """
379 Internal helper that gives a proper name for the attribute ``name``
380 Internal helper that gives a proper name for the attribute ``name``
380 (which might be ``None`` or an ``int``).
381 (which might be ``None`` or an ``int``).
381 """
382 """
382 if name is None:
383 if name is None:
383 return "_"
384 return "_"
384 elif isinstance(name, basestring):
385 elif isinstance(name, basestring):
385 return name
386 return name
386 elif callable(name):
387 elif callable(name):
387 return getattr(name, "__xname__", name.__name__)
388 return getattr(name, "__xname__", name.__name__)
388 else:
389 else:
389 return str(name)
390 return str(name)
390
391
391
392
392 def xrepr(item, mode):
393 def xrepr(item, mode):
393 try:
394 try:
394 func = item.__xrepr__
395 func = item.__xrepr__
395 except AttributeError:
396 except AttributeError:
396 pass
397 pass
397 else:
398 else:
398 try:
399 try:
399 for x in func(mode):
400 for x in func(mode):
400 yield x
401 yield x
401 except (KeyboardInterrupt, SystemExit):
402 except (KeyboardInterrupt, SystemExit):
402 raise
403 raise
403 except Exception:
404 except Exception:
404 yield (astyle.style_default, repr(item))
405 yield (astyle.style_default, repr(item))
405 return
406 return
406 if item is None:
407 if item is None:
407 yield (astyle.style_type_none, repr(item))
408 yield (astyle.style_type_none, repr(item))
408 elif isinstance(item, bool):
409 elif isinstance(item, bool):
409 yield (astyle.style_type_bool, repr(item))
410 yield (astyle.style_type_bool, repr(item))
410 elif isinstance(item, str):
411 elif isinstance(item, str):
411 if mode == "cell":
412 if mode == "cell":
412 yield (astyle.style_default, repr(item.expandtabs(tab))[1:-1])
413 yield (astyle.style_default, repr(item.expandtabs(tab))[1:-1])
413 else:
414 else:
414 yield (astyle.style_default, repr(item))
415 yield (astyle.style_default, repr(item))
415 elif isinstance(item, unicode):
416 elif isinstance(item, unicode):
416 if mode == "cell":
417 if mode == "cell":
417 yield (astyle.style_default, repr(item.expandtabs(tab))[2:-1])
418 yield (astyle.style_default, repr(item.expandtabs(tab))[2:-1])
418 else:
419 else:
419 yield (astyle.style_default, repr(item))
420 yield (astyle.style_default, repr(item))
420 elif isinstance(item, (int, long, float)):
421 elif isinstance(item, (int, long, float)):
421 yield (1, True)
422 yield (1, True)
422 yield (astyle.style_type_number, repr(item))
423 yield (astyle.style_type_number, repr(item))
423 elif isinstance(item, complex):
424 elif isinstance(item, complex):
424 yield (astyle.style_type_number, repr(item))
425 yield (astyle.style_type_number, repr(item))
425 elif isinstance(item, datetime.datetime):
426 elif isinstance(item, datetime.datetime):
426 if mode == "cell":
427 if mode == "cell":
427 # Don't use strftime() here, as this requires year >= 1900
428 # Don't use strftime() here, as this requires year >= 1900
428 yield (astyle.style_type_datetime,
429 yield (astyle.style_type_datetime,
429 "%04d-%02d-%02d %02d:%02d:%02d.%06d" % \
430 "%04d-%02d-%02d %02d:%02d:%02d.%06d" % \
430 (item.year, item.month, item.day,
431 (item.year, item.month, item.day,
431 item.hour, item.minute, item.second,
432 item.hour, item.minute, item.second,
432 item.microsecond),
433 item.microsecond),
433 )
434 )
434 else:
435 else:
435 yield (astyle.style_type_datetime, repr(item))
436 yield (astyle.style_type_datetime, repr(item))
436 elif isinstance(item, datetime.date):
437 elif isinstance(item, datetime.date):
437 if mode == "cell":
438 if mode == "cell":
438 yield (astyle.style_type_datetime,
439 yield (astyle.style_type_datetime,
439 "%04d-%02d-%02d" % (item.year, item.month, item.day))
440 "%04d-%02d-%02d" % (item.year, item.month, item.day))
440 else:
441 else:
441 yield (astyle.style_type_datetime, repr(item))
442 yield (astyle.style_type_datetime, repr(item))
442 elif isinstance(item, datetime.time):
443 elif isinstance(item, datetime.time):
443 if mode == "cell":
444 if mode == "cell":
444 yield (astyle.style_type_datetime,
445 yield (astyle.style_type_datetime,
445 "%02d:%02d:%02d.%06d" % \
446 "%02d:%02d:%02d.%06d" % \
446 (item.hour, item.minute, item.second, item.microsecond))
447 (item.hour, item.minute, item.second, item.microsecond))
447 else:
448 else:
448 yield (astyle.style_type_datetime, repr(item))
449 yield (astyle.style_type_datetime, repr(item))
449 elif isinstance(item, datetime.timedelta):
450 elif isinstance(item, datetime.timedelta):
450 yield (astyle.style_type_datetime, repr(item))
451 yield (astyle.style_type_datetime, repr(item))
451 elif isinstance(item, Exception):
452 elif isinstance(item, Exception):
452 if item.__class__.__module__ == "exceptions":
453 if item.__class__.__module__ == "exceptions":
453 classname = item.__class__.__name__
454 classname = item.__class__.__name__
454 else:
455 else:
455 classname = "%s.%s" % \
456 classname = "%s.%s" % \
456 (item.__class__.__module__, item.__class__.__name__)
457 (item.__class__.__module__, item.__class__.__name__)
457 if mode == "header" or mode == "footer":
458 if mode == "header" or mode == "footer":
458 yield (astyle.style_error, "%s: %s" % (classname, item))
459 yield (astyle.style_error, "%s: %s" % (classname, item))
459 else:
460 else:
460 yield (astyle.style_error, classname)
461 yield (astyle.style_error, classname)
461 elif isinstance(item, (list, tuple)):
462 elif isinstance(item, (list, tuple)):
462 if mode == "header" or mode == "footer":
463 if mode == "header" or mode == "footer":
463 if item.__class__.__module__ == "__builtin__":
464 if item.__class__.__module__ == "__builtin__":
464 classname = item.__class__.__name__
465 classname = item.__class__.__name__
465 else:
466 else:
466 classname = "%s.%s" % \
467 classname = "%s.%s" % \
467 (item.__class__.__module__,item.__class__.__name__)
468 (item.__class__.__module__,item.__class__.__name__)
468 yield (astyle.style_default,
469 yield (astyle.style_default,
469 "<%s object with %d items at 0x%x>" % \
470 "<%s object with %d items at 0x%x>" % \
470 (classname, len(item), id(item)))
471 (classname, len(item), id(item)))
471 else:
472 else:
472 yield (-1, False)
473 yield (-1, False)
473 if isinstance(item, list):
474 if isinstance(item, list):
474 yield (astyle.style_default, "[")
475 yield (astyle.style_default, "[")
475 end = "]"
476 end = "]"
476 else:
477 else:
477 yield (astyle.style_default, "(")
478 yield (astyle.style_default, "(")
478 end = ")"
479 end = ")"
479 for (i, subitem) in enumerate(item):
480 for (i, subitem) in enumerate(item):
480 if i:
481 if i:
481 yield (astyle.style_default, ", ")
482 yield (astyle.style_default, ", ")
482 for part in xrepr(subitem, "default"):
483 for part in xrepr(subitem, "default"):
483 yield part
484 yield part
484 yield (astyle.style_default, end)
485 yield (astyle.style_default, end)
485 elif isinstance(item, (dict, types.DictProxyType)):
486 elif isinstance(item, (dict, types.DictProxyType)):
486 if mode == "header" or mode == "footer":
487 if mode == "header" or mode == "footer":
487 if item.__class__.__module__ == "__builtin__":
488 if item.__class__.__module__ == "__builtin__":
488 classname = item.__class__.__name__
489 classname = item.__class__.__name__
489 else:
490 else:
490 classname = "%s.%s" % \
491 classname = "%s.%s" % \
491 (item.__class__.__module__,item.__class__.__name__)
492 (item.__class__.__module__,item.__class__.__name__)
492 yield (astyle.style_default,
493 yield (astyle.style_default,
493 "<%s object with %d items at 0x%x>" % \
494 "<%s object with %d items at 0x%x>" % \
494 (classname, len(item), id(item)))
495 (classname, len(item), id(item)))
495 else:
496 else:
496 yield (-1, False)
497 yield (-1, False)
497 if isinstance(item, dict):
498 if isinstance(item, dict):
498 yield (astyle.style_default, "{")
499 yield (astyle.style_default, "{")
499 end = "}"
500 end = "}"
500 else:
501 else:
501 yield (astyle.style_default, "dictproxy((")
502 yield (astyle.style_default, "dictproxy((")
502 end = "})"
503 end = "})"
503 for (i, (key, value)) in enumerate(item.iteritems()):
504 for (i, (key, value)) in enumerate(item.iteritems()):
504 if i:
505 if i:
505 yield (astyle.style_default, ", ")
506 yield (astyle.style_default, ", ")
506 for part in xrepr(key, "default"):
507 for part in xrepr(key, "default"):
507 yield part
508 yield part
508 yield (astyle.style_default, ": ")
509 yield (astyle.style_default, ": ")
509 for part in xrepr(value, "default"):
510 for part in xrepr(value, "default"):
510 yield part
511 yield part
511 yield (astyle.style_default, end)
512 yield (astyle.style_default, end)
512 else:
513 else:
513 yield (astyle.style_default, repr(item))
514 yield (astyle.style_default, repr(item))
514
515
515
516
516 def xattrs(item, mode):
517 def xattrs(item, mode):
517 try:
518 try:
518 func = item.__xattrs__
519 func = item.__xattrs__
519 except AttributeError:
520 except AttributeError:
520 if mode == "detail":
521 if mode == "detail":
521 return dir(item)
522 return dir(item)
522 else:
523 else:
523 return (None,)
524 return (None,)
524 else:
525 else:
525 try:
526 try:
526 return func(mode)
527 return func(mode)
527 except (KeyboardInterrupt, SystemExit):
528 except (KeyboardInterrupt, SystemExit):
528 raise
529 raise
529 except Exception:
530 except Exception:
530 return (None,)
531 return (None,)
531
532
532
533
533 def xiter(item, mode):
534 def xiter(item, mode):
534 if mode == "detail":
535 if mode == "detail":
535 def items():
536 def items():
536 for name in xattrs(item, mode):
537 for name in xattrs(item, mode):
537 yield XAttr(item, name)
538 yield XAttr(item, name)
538 return items()
539 return items()
539 try:
540 try:
540 func = item.__xiter__
541 func = item.__xiter__
541 except AttributeError:
542 except AttributeError:
542 if isinstance(item, (dict, types.DictProxyType)):
543 if isinstance(item, (dict, types.DictProxyType)):
543 def items(item):
544 def items(item):
544 fields = ("key", "value")
545 fields = ("key", "value")
545 for (key, value) in item.iteritems():
546 for (key, value) in item.iteritems():
546 yield Fields(fields, key=key, value=value)
547 yield Fields(fields, key=key, value=value)
547 return items(item)
548 return items(item)
548 elif isinstance(item, new.module):
549 elif isinstance(item, new.module):
549 def items(item):
550 def items(item):
550 fields = ("key", "value")
551 fields = ("key", "value")
551 for key in sorted(item.__dict__):
552 for key in sorted(item.__dict__):
552 yield Fields(fields, key=key, value=getattr(item, key))
553 yield Fields(fields, key=key, value=getattr(item, key))
553 return items(item)
554 return items(item)
554 elif isinstance(item, basestring):
555 elif isinstance(item, basestring):
555 if not len(item):
556 if not len(item):
556 raise ValueError("can't enter empty string")
557 raise ValueError("can't enter empty string")
557 lines = item.splitlines()
558 lines = item.splitlines()
558 if len(lines) <= 1:
559 if len(lines) <= 1:
559 raise ValueError("can't enter one line string")
560 raise ValueError("can't enter one line string")
560 return iter(lines)
561 return iter(lines)
561 return iter(item)
562 return iter(item)
562 else:
563 else:
563 return iter(func(mode)) # iter() just to be safe
564 return iter(func(mode)) # iter() just to be safe
564
565
565
566
566 class ichain(Pipe):
567 class ichain(Pipe):
567 """
568 """
568 Chains multiple ``Table``s into one.
569 Chains multiple ``Table``s into one.
569 """
570 """
570
571
571 def __init__(self, *iters):
572 def __init__(self, *iters):
572 self.iters = iters
573 self.iters = iters
573
574
574 def __xiter__(self, mode):
575 def __xiter__(self, mode):
575 return itertools.chain(*self.iters)
576 return itertools.chain(*self.iters)
576
577
577 def __xrepr__(self, mode):
578 def __xrepr__(self, mode):
578 if mode == "header" or mode == "footer":
579 if mode == "header" or mode == "footer":
579 for (i, item) in enumerate(self.iters):
580 for (i, item) in enumerate(self.iters):
580 if i:
581 if i:
581 yield (astyle.style_default, "+")
582 yield (astyle.style_default, "+")
582 if isinstance(item, Pipe):
583 if isinstance(item, Pipe):
583 yield (astyle.style_default, "(")
584 yield (astyle.style_default, "(")
584 for part in xrepr(item, mode):
585 for part in xrepr(item, mode):
585 yield part
586 yield part
586 if isinstance(item, Pipe):
587 if isinstance(item, Pipe):
587 yield (astyle.style_default, ")")
588 yield (astyle.style_default, ")")
588 else:
589 else:
589 yield (astyle.style_default, repr(self))
590 yield (astyle.style_default, repr(self))
590
591
591 def __repr__(self):
592 def __repr__(self):
592 args = ", ".join([repr(it) for it in self.iters])
593 args = ", ".join([repr(it) for it in self.iters])
593 return "%s.%s(%s)" % \
594 return "%s.%s(%s)" % \
594 (self.__class__.__module__, self.__class__.__name__, args)
595 (self.__class__.__module__, self.__class__.__name__, args)
595
596
596
597
597 class ifile(path.path):
598 class ifile(path.path):
598 """
599 """
599 file (or directory) object.
600 file (or directory) object.
600 """
601 """
601
602
602 def __add_(self, other):
603 def __add_(self, other):
603 return ifile(path._base(self) + other)
604 return ifile(path._base(self) + other)
604
605
605 def __radd_(self, other):
606 def __radd_(self, other):
606 return ifile(other + path._base(self))
607 return ifile(other + path._base(self))
607
608
608 def __div_(self, other):
609 def __div_(self, other):
609 return ifile(path.__div__(self, other))
610 return ifile(path.__div__(self, other))
610
611
611 def getcwd():
612 def getcwd():
612 return ifile(path.path.getcwd())
613 return ifile(path.path.getcwd())
613 getcwd.__doc__ = path.path.getcwd.__doc__
614 getcwd.__doc__ = path.path.getcwd.__doc__
614 getcwd = staticmethod(getcwd)
615 getcwd = staticmethod(getcwd)
615
616
616 def abspath(self):
617 def abspath(self):
617 return ifile(path.path.abspath(self))
618 return ifile(path.path.abspath(self))
618 abspath.__doc__ = path.path.abspath.__doc__
619 abspath.__doc__ = path.path.abspath.__doc__
619
620
620 def normcase(self):
621 def normcase(self):
621 return ifile(path.path.normcase(self))
622 return ifile(path.path.normcase(self))
622 normcase.__doc__ = path.path.normcase.__doc__
623 normcase.__doc__ = path.path.normcase.__doc__
623
624
624 def normpath(self):
625 def normpath(self):
625 return ifile(path.path.normpath(self))
626 return ifile(path.path.normpath(self))
626 normpath.__doc__ = path.path.normpath.__doc__
627 normpath.__doc__ = path.path.normpath.__doc__
627
628
628 def realpath(self):
629 def realpath(self):
629 return ifile(path.path.realpath(self))
630 return ifile(path.path.realpath(self))
630 realpath.__doc__ = path.path.realpath.__doc__
631 realpath.__doc__ = path.path.realpath.__doc__
631
632
632 def expanduser(self):
633 def expanduser(self):
633 return ifile(path.path.expanduser(self))
634 return ifile(path.path.expanduser(self))
634 expanduser.__doc__ = path.path.expanduser.__doc__
635 expanduser.__doc__ = path.path.expanduser.__doc__
635
636
636 def expandvars(self):
637 def expandvars(self):
637 return ifile(path.path.expandvars(self))
638 return ifile(path.path.expandvars(self))
638 expandvars.__doc__ = path.path.expandvars.__doc__
639 expandvars.__doc__ = path.path.expandvars.__doc__
639
640
640 def dirname(self):
641 def dirname(self):
641 return ifile(path.path.dirname(self))
642 return ifile(path.path.dirname(self))
642 dirname.__doc__ = path.path.dirname.__doc__
643 dirname.__doc__ = path.path.dirname.__doc__
643
644
644 parent = property(dirname, None, None, path.path.parent.__doc__)
645 parent = property(dirname, None, None, path.path.parent.__doc__)
645
646
646 def splitpath(self):
647 def splitpath(self):
647 (parent, child) = path.path.splitpath(self)
648 (parent, child) = path.path.splitpath(self)
648 return (ifile(parent), child)
649 return (ifile(parent), child)
649 splitpath.__doc__ = path.path.splitpath.__doc__
650 splitpath.__doc__ = path.path.splitpath.__doc__
650
651
651 def splitdrive(self):
652 def splitdrive(self):
652 (drive, rel) = path.path.splitdrive(self)
653 (drive, rel) = path.path.splitdrive(self)
653 return (ifile(drive), rel)
654 return (ifile(drive), rel)
654 splitdrive.__doc__ = path.path.splitdrive.__doc__
655 splitdrive.__doc__ = path.path.splitdrive.__doc__
655
656
656 def splitext(self):
657 def splitext(self):
657 (filename, ext) = path.path.splitext(self)
658 (filename, ext) = path.path.splitext(self)
658 return (ifile(filename), ext)
659 return (ifile(filename), ext)
659 splitext.__doc__ = path.path.splitext.__doc__
660 splitext.__doc__ = path.path.splitext.__doc__
660
661
661 if hasattr(path.path, "splitunc"):
662 if hasattr(path.path, "splitunc"):
662 def splitunc(self):
663 def splitunc(self):
663 (unc, rest) = path.path.splitunc(self)
664 (unc, rest) = path.path.splitunc(self)
664 return (ifile(unc), rest)
665 return (ifile(unc), rest)
665 splitunc.__doc__ = path.path.splitunc.__doc__
666 splitunc.__doc__ = path.path.splitunc.__doc__
666
667
667 def _get_uncshare(self):
668 def _get_uncshare(self):
668 unc, r = os.path.splitunc(self)
669 unc, r = os.path.splitunc(self)
669 return ifile(unc)
670 return ifile(unc)
670
671
671 uncshare = property(
672 uncshare = property(
672 _get_uncshare, None, None,
673 _get_uncshare, None, None,
673 """ The UNC mount point for this path.
674 """ The UNC mount point for this path.
674 This is empty for paths on local drives. """)
675 This is empty for paths on local drives. """)
675
676
676 def joinpath(self, *args):
677 def joinpath(self, *args):
677 return ifile(path.path.joinpath(self, *args))
678 return ifile(path.path.joinpath(self, *args))
678 joinpath.__doc__ = path.path.joinpath.__doc__
679 joinpath.__doc__ = path.path.joinpath.__doc__
679
680
680 def splitall(self):
681 def splitall(self):
681 return map(ifile, path.path.splitall(self))
682 return map(ifile, path.path.splitall(self))
682 splitall.__doc__ = path.path.splitall.__doc__
683 splitall.__doc__ = path.path.splitall.__doc__
683
684
684 def relpath(self):
685 def relpath(self):
685 return ifile(path.path.relpath(self))
686 return ifile(path.path.relpath(self))
686 relpath.__doc__ = path.path.relpath.__doc__
687 relpath.__doc__ = path.path.relpath.__doc__
687
688
688 def relpathto(self, dest):
689 def relpathto(self, dest):
689 return ifile(path.path.relpathto(self, dest))
690 return ifile(path.path.relpathto(self, dest))
690 relpathto.__doc__ = path.path.relpathto.__doc__
691 relpathto.__doc__ = path.path.relpathto.__doc__
691
692
692 def listdir(self, pattern=None):
693 def listdir(self, pattern=None):
693 return [ifile(child) for child in path.path.listdir(self, pattern)]
694 return [ifile(child) for child in path.path.listdir(self, pattern)]
694 listdir.__doc__ = path.path.listdir.__doc__
695 listdir.__doc__ = path.path.listdir.__doc__
695
696
696 def dirs(self, pattern=None):
697 def dirs(self, pattern=None):
697 return [ifile(child) for child in path.path.dirs(self, pattern)]
698 return [ifile(child) for child in path.path.dirs(self, pattern)]
698 dirs.__doc__ = path.path.dirs.__doc__
699 dirs.__doc__ = path.path.dirs.__doc__
699
700
700 def files(self, pattern=None):
701 def files(self, pattern=None):
701 return [ifile(child) for child in path.path.files(self, pattern)]
702 return [ifile(child) for child in path.path.files(self, pattern)]
702 files.__doc__ = path.path.files.__doc__
703 files.__doc__ = path.path.files.__doc__
703
704
704 def walk(self, pattern=None):
705 def walk(self, pattern=None):
705 for child in path.path.walk(self, pattern):
706 for child in path.path.walk(self, pattern):
706 yield ifile(child)
707 yield ifile(child)
707 walk.__doc__ = path.path.walk.__doc__
708 walk.__doc__ = path.path.walk.__doc__
708
709
709 def walkdirs(self, pattern=None):
710 def walkdirs(self, pattern=None):
710 for child in path.path.walkdirs(self, pattern):
711 for child in path.path.walkdirs(self, pattern):
711 yield ifile(child)
712 yield ifile(child)
712 walkdirs.__doc__ = path.path.walkdirs.__doc__
713 walkdirs.__doc__ = path.path.walkdirs.__doc__
713
714
714 def walkfiles(self, pattern=None):
715 def walkfiles(self, pattern=None):
715 for child in path.path.walkfiles(self, pattern):
716 for child in path.path.walkfiles(self, pattern):
716 yield ifile(child)
717 yield ifile(child)
717 walkfiles.__doc__ = path.path.walkfiles.__doc__
718 walkfiles.__doc__ = path.path.walkfiles.__doc__
718
719
719 def glob(self, pattern):
720 def glob(self, pattern):
720 return map(ifile, path.path.glob(self, pattern))
721 return map(ifile, path.path.glob(self, pattern))
721 glob.__doc__ = path.path.glob.__doc__
722 glob.__doc__ = path.path.glob.__doc__
722
723
723 if hasattr(os, 'readlink'):
724 if hasattr(os, 'readlink'):
724 def readlink(self):
725 def readlink(self):
725 return ifile(path.path.readlink(self))
726 return ifile(path.path.readlink(self))
726 readlink.__doc__ = path.path.readlink.__doc__
727 readlink.__doc__ = path.path.readlink.__doc__
727
728
728 def readlinkabs(self):
729 def readlinkabs(self):
729 return ifile(path.path.readlinkabs(self))
730 return ifile(path.path.readlinkabs(self))
730 readlinkabs.__doc__ = path.path.readlinkabs.__doc__
731 readlinkabs.__doc__ = path.path.readlinkabs.__doc__
731
732
732 def getmode(self):
733 def getmode(self):
733 return self.stat().st_mode
734 return self.stat().st_mode
734 mode = property(getmode, None, None, "Access mode")
735 mode = property(getmode, None, None, "Access mode")
735
736
736 def gettype(self):
737 def gettype(self):
737 data = [
738 data = [
738 (stat.S_ISREG, "file"),
739 (stat.S_ISREG, "file"),
739 (stat.S_ISDIR, "dir"),
740 (stat.S_ISDIR, "dir"),
740 (stat.S_ISCHR, "chardev"),
741 (stat.S_ISCHR, "chardev"),
741 (stat.S_ISBLK, "blockdev"),
742 (stat.S_ISBLK, "blockdev"),
742 (stat.S_ISFIFO, "fifo"),
743 (stat.S_ISFIFO, "fifo"),
743 (stat.S_ISLNK, "symlink"),
744 (stat.S_ISLNK, "symlink"),
744 (stat.S_ISSOCK,"socket"),
745 (stat.S_ISSOCK,"socket"),
745 ]
746 ]
746 lstat = self.lstat()
747 lstat = self.lstat()
747 if lstat is not None:
748 if lstat is not None:
748 types = set([text for (func, text) in data if func(lstat.st_mode)])
749 types = set([text for (func, text) in data if func(lstat.st_mode)])
749 else:
750 else:
750 types = set()
751 types = set()
751 m = self.mode
752 m = self.mode
752 types.update([text for (func, text) in data if func(m)])
753 types.update([text for (func, text) in data if func(m)])
753 return ", ".join(types)
754 return ", ".join(types)
754 type = property(gettype, None, None, "file type (file, directory, link, etc.)")
755 type = property(gettype, None, None, "file type (file, directory, link, etc.)")
755
756
756 def getmodestr(self):
757 def getmodestr(self):
757 m = self.mode
758 m = self.mode
758 data = [
759 data = [
759 (stat.S_IRUSR, "-r"),
760 (stat.S_IRUSR, "-r"),
760 (stat.S_IWUSR, "-w"),
761 (stat.S_IWUSR, "-w"),
761 (stat.S_IXUSR, "-x"),
762 (stat.S_IXUSR, "-x"),
762 (stat.S_IRGRP, "-r"),
763 (stat.S_IRGRP, "-r"),
763 (stat.S_IWGRP, "-w"),
764 (stat.S_IWGRP, "-w"),
764 (stat.S_IXGRP, "-x"),
765 (stat.S_IXGRP, "-x"),
765 (stat.S_IROTH, "-r"),
766 (stat.S_IROTH, "-r"),
766 (stat.S_IWOTH, "-w"),
767 (stat.S_IWOTH, "-w"),
767 (stat.S_IXOTH, "-x"),
768 (stat.S_IXOTH, "-x"),
768 ]
769 ]
769 return "".join([text[bool(m&bit)] for (bit, text) in data])
770 return "".join([text[bool(m&bit)] for (bit, text) in data])
770
771
771 modestr = property(getmodestr, None, None, "Access mode as string")
772 modestr = property(getmodestr, None, None, "Access mode as string")
772
773
773 def getblocks(self):
774 def getblocks(self):
774 return self.stat().st_blocks
775 return self.stat().st_blocks
775 blocks = property(getblocks, None, None, "File size in blocks")
776 blocks = property(getblocks, None, None, "File size in blocks")
776
777
777 def getblksize(self):
778 def getblksize(self):
778 return self.stat().st_blksize
779 return self.stat().st_blksize
779 blksize = property(getblksize, None, None, "Filesystem block size")
780 blksize = property(getblksize, None, None, "Filesystem block size")
780
781
781 def getdev(self):
782 def getdev(self):
782 return self.stat().st_dev
783 return self.stat().st_dev
783 dev = property(getdev)
784 dev = property(getdev)
784
785
785 def getnlink(self):
786 def getnlink(self):
786 return self.stat().st_nlink
787 return self.stat().st_nlink
787 nlink = property(getnlink, None, None, "Number of links")
788 nlink = property(getnlink, None, None, "Number of links")
788
789
789 def getuid(self):
790 def getuid(self):
790 return self.stat().st_uid
791 return self.stat().st_uid
791 uid = property(getuid, None, None, "User id of file owner")
792 uid = property(getuid, None, None, "User id of file owner")
792
793
793 def getgid(self):
794 def getgid(self):
794 return self.stat().st_gid
795 return self.stat().st_gid
795 gid = property(getgid, None, None, "Group id of file owner")
796 gid = property(getgid, None, None, "Group id of file owner")
796
797
797 def getowner(self):
798 def getowner(self):
798 stat = self.stat()
799 stat = self.stat()
799 try:
800 try:
800 return pwd.getpwuid(stat.st_uid).pw_name
801 return pwd.getpwuid(stat.st_uid).pw_name
801 except KeyError:
802 except KeyError:
802 return stat.st_uid
803 return stat.st_uid
803 owner = property(getowner, None, None, "Owner name (or id)")
804 owner = property(getowner, None, None, "Owner name (or id)")
804
805
805 def getgroup(self):
806 def getgroup(self):
806 stat = self.stat()
807 stat = self.stat()
807 try:
808 try:
808 return grp.getgrgid(stat.st_gid).gr_name
809 return grp.getgrgid(stat.st_gid).gr_name
809 except KeyError:
810 except KeyError:
810 return stat.st_gid
811 return stat.st_gid
811 group = property(getgroup, None, None, "Group name (or id)")
812 group = property(getgroup, None, None, "Group name (or id)")
812
813
813 def getadate(self):
814 def getadate(self):
814 return datetime.datetime.utcfromtimestamp(self.atime)
815 return datetime.datetime.utcfromtimestamp(self.atime)
815 adate = property(getadate, None, None, "Access date")
816 adate = property(getadate, None, None, "Access date")
816
817
817 def getcdate(self):
818 def getcdate(self):
818 return datetime.datetime.utcfromtimestamp(self.ctime)
819 return datetime.datetime.utcfromtimestamp(self.ctime)
819 cdate = property(getcdate, None, None, "Creation date")
820 cdate = property(getcdate, None, None, "Creation date")
820
821
821 def getmdate(self):
822 def getmdate(self):
822 return datetime.datetime.utcfromtimestamp(self.mtime)
823 return datetime.datetime.utcfromtimestamp(self.mtime)
823 mdate = property(getmdate, None, None, "Modification date")
824 mdate = property(getmdate, None, None, "Modification date")
824
825
825 def getmimetype(self):
826 def getmimetype(self):
826 return mimetypes.guess_type(self.basename())[0]
827 return mimetypes.guess_type(self.basename())[0]
827 mimetype = property(getmimetype, None, None, "MIME type")
828 mimetype = property(getmimetype, None, None, "MIME type")
828
829
829 def getencoding(self):
830 def getencoding(self):
830 return mimetypes.guess_type(self.basename())[1]
831 return mimetypes.guess_type(self.basename())[1]
831 encoding = property(getencoding, None, None, "Compression")
832 encoding = property(getencoding, None, None, "Compression")
832
833
833 def __repr__(self):
834 def __repr__(self):
834 return "ifile(%s)" % path._base.__repr__(self)
835 return "ifile(%s)" % path._base.__repr__(self)
835
836
836 defaultattrs = (None, "type", "size", "modestr", "owner", "group", "mdate")
837 defaultattrs = (None, "type", "size", "modestr", "owner", "group", "mdate")
837
838
838 def __xattrs__(self, mode):
839 def __xattrs__(self, mode):
839 if mode == "detail":
840 if mode == "detail":
840 return (
841 return (
841 "name", "basename()", "abspath()", "realpath()",
842 "name", "basename()", "abspath()", "realpath()",
842 "type", "mode", "modestr", "stat()", "lstat()",
843 "type", "mode", "modestr", "stat()", "lstat()",
843 "uid", "gid", "owner", "group", "dev", "nlink",
844 "uid", "gid", "owner", "group", "dev", "nlink",
844 "ctime", "mtime", "atime", "cdate", "mdate", "adate",
845 "ctime", "mtime", "atime", "cdate", "mdate", "adate",
845 "size", "blocks", "blksize", "isdir()", "islink()",
846 "size", "blocks", "blksize", "isdir()", "islink()",
846 "mimetype", "encoding"
847 "mimetype", "encoding"
847 )
848 )
848 return self.defaultattrs
849 return self.defaultattrs
849
850
850 def __xrepr__(self, mode):
851 def __xrepr__(self, mode):
851 try:
852 try:
852 if self.isdir():
853 if self.isdir():
853 name = "idir"
854 name = "idir"
854 style = astyle.style_dir
855 style = astyle.style_dir
855 else:
856 else:
856 name = "ifile"
857 name = "ifile"
857 style = astyle.style_file
858 style = astyle.style_file
858 except IOError:
859 except IOError:
859 name = "ifile"
860 name = "ifile"
860 style = astyle.style_default
861 style = astyle.style_default
861 if mode == "cell" or mode in "header" or mode == "footer":
862 if mode == "cell" or mode in "header" or mode == "footer":
862 abspath = repr(path._base(self.normpath()))
863 abspath = repr(path._base(self.normpath()))
863 if abspath.startswith("u"):
864 if abspath.startswith("u"):
864 abspath = abspath[2:-1]
865 abspath = abspath[2:-1]
865 else:
866 else:
866 abspath = abspath[1:-1]
867 abspath = abspath[1:-1]
867 if mode == "cell":
868 if mode == "cell":
868 yield (style, abspath)
869 yield (style, abspath)
869 else:
870 else:
870 yield (style, "%s(%s)" % (name, abspath))
871 yield (style, "%s(%s)" % (name, abspath))
871 else:
872 else:
872 yield (style, repr(self))
873 yield (style, repr(self))
873
874
874 def __xiter__(self, mode):
875 def __xiter__(self, mode):
875 if self.isdir():
876 if self.isdir():
876 yield iparentdir(self / os.pardir)
877 yield iparentdir(self / os.pardir)
877 for child in sorted(self.listdir()):
878 for child in sorted(self.listdir()):
878 yield child
879 yield child
879 else:
880 else:
880 f = self.open("rb")
881 f = self.open("rb")
881 for line in f:
882 for line in f:
882 yield line
883 yield line
883 f.close()
884 f.close()
884
885
885
886
886 class iparentdir(ifile):
887 class iparentdir(ifile):
887 def __xrepr__(self, mode):
888 def __xrepr__(self, mode):
888 if mode == "cell":
889 if mode == "cell":
889 yield (astyle.style_dir, os.pardir)
890 yield (astyle.style_dir, os.pardir)
890 else:
891 else:
891 for part in ifile.__xrepr__(self, mode):
892 for part in ifile.__xrepr__(self, mode):
892 yield part
893 yield part
893
894
894
895
895 class ils(Table):
896 class ils(Table):
896 """
897 """
897 List the current (or a specific) directory.
898 List the current (or a specific) directory.
898
899
899 Examples:
900 Examples:
900
901
901 >>> ils
902 >>> ils
902 >>> ils("/usr/local/lib/python2.4")
903 >>> ils("/usr/local/lib/python2.4")
903 >>> ils("~")
904 >>> ils("~")
904 """
905 """
905 def __init__(self, base=os.curdir):
906 def __init__(self, base=os.curdir):
906 self.base = os.path.expanduser(base)
907 self.base = os.path.expanduser(base)
907
908
908 def __xiter__(self, mode):
909 def __xiter__(self, mode):
909 return xiter(ifile(self.base), mode)
910 return xiter(ifile(self.base), mode)
910
911
911 def __xrepr__(self, mode):
912 def __xrepr__(self, mode):
912 return ifile(self.base).__xrepr__(mode)
913 return ifile(self.base).__xrepr__(mode)
913
914
914 def __repr__(self):
915 def __repr__(self):
915 return "%s.%s(%r)" % \
916 return "%s.%s(%r)" % \
916 (self.__class__.__module__, self.__class__.__name__, self.base)
917 (self.__class__.__module__, self.__class__.__name__, self.base)
917
918
918
919
919 class iglob(Table):
920 class iglob(Table):
920 """
921 """
921 List all files and directories matching a specified pattern.
922 List all files and directories matching a specified pattern.
922 (See ``glob.glob()`` for more info.).
923 (See ``glob.glob()`` for more info.).
923
924
924 Examples:
925 Examples:
925
926
926 >>> iglob("*.py")
927 >>> iglob("*.py")
927 """
928 """
928 def __init__(self, glob):
929 def __init__(self, glob):
929 self.glob = glob
930 self.glob = glob
930
931
931 def __xiter__(self, mode):
932 def __xiter__(self, mode):
932 for name in glob.glob(self.glob):
933 for name in glob.glob(self.glob):
933 yield ifile(name)
934 yield ifile(name)
934
935
935 def __xrepr__(self, mode):
936 def __xrepr__(self, mode):
936 if mode == "header" or mode == "footer" or mode == "cell":
937 if mode == "header" or mode == "footer" or mode == "cell":
937 yield (astyle.style_default,
938 yield (astyle.style_default,
938 "%s(%r)" % (self.__class__.__name__, self.glob))
939 "%s(%r)" % (self.__class__.__name__, self.glob))
939 else:
940 else:
940 yield (astyle.style_default, repr(self))
941 yield (astyle.style_default, repr(self))
941
942
942 def __repr__(self):
943 def __repr__(self):
943 return "%s.%s(%r)" % \
944 return "%s.%s(%r)" % \
944 (self.__class__.__module__, self.__class__.__name__, self.glob)
945 (self.__class__.__module__, self.__class__.__name__, self.glob)
945
946
946
947
947 class iwalk(Table):
948 class iwalk(Table):
948 """
949 """
949 List all files and directories in a directory and it's subdirectory.
950 List all files and directories in a directory and it's subdirectory.
950
951
951 >>> iwalk
952 >>> iwalk
952 >>> iwalk("/usr/local/lib/python2.4")
953 >>> iwalk("/usr/local/lib/python2.4")
953 >>> iwalk("~")
954 >>> iwalk("~")
954 """
955 """
955 def __init__(self, base=os.curdir, dirs=True, files=True):
956 def __init__(self, base=os.curdir, dirs=True, files=True):
956 self.base = os.path.expanduser(base)
957 self.base = os.path.expanduser(base)
957 self.dirs = dirs
958 self.dirs = dirs
958 self.files = files
959 self.files = files
959
960
960 def __xiter__(self, mode):
961 def __xiter__(self, mode):
961 for (dirpath, dirnames, filenames) in os.walk(self.base):
962 for (dirpath, dirnames, filenames) in os.walk(self.base):
962 if self.dirs:
963 if self.dirs:
963 for name in sorted(dirnames):
964 for name in sorted(dirnames):
964 yield ifile(os.path.join(dirpath, name))
965 yield ifile(os.path.join(dirpath, name))
965 if self.files:
966 if self.files:
966 for name in sorted(filenames):
967 for name in sorted(filenames):
967 yield ifile(os.path.join(dirpath, name))
968 yield ifile(os.path.join(dirpath, name))
968
969
969 def __xrepr__(self, mode):
970 def __xrepr__(self, mode):
970 if mode == "header" or mode == "footer" or mode == "cell":
971 if mode == "header" or mode == "footer" or mode == "cell":
971 yield (astyle.style_default,
972 yield (astyle.style_default,
972 "%s(%r)" % (self.__class__.__name__, self.base))
973 "%s(%r)" % (self.__class__.__name__, self.base))
973 else:
974 else:
974 yield (astyle.style_default, repr(self))
975 yield (astyle.style_default, repr(self))
975
976
976 def __repr__(self):
977 def __repr__(self):
977 return "%s.%s(%r)" % \
978 return "%s.%s(%r)" % \
978 (self.__class__.__module__, self.__class__.__name__, self.base)
979 (self.__class__.__module__, self.__class__.__name__, self.base)
979
980
980
981
981 class ipwdentry(object):
982 class ipwdentry(object):
982 """
983 """
983 ``ipwdentry`` objects encapsulate entries in the Unix user account and
984 ``ipwdentry`` objects encapsulate entries in the Unix user account and
984 password database.
985 password database.
985 """
986 """
986 def __init__(self, id):
987 def __init__(self, id):
987 self._id = id
988 self._id = id
988 self._entry = None
989 self._entry = None
989
990
990 def _getentry(self):
991 def _getentry(self):
991 if self._entry is None:
992 if self._entry is None:
992 if isinstance(self._id, basestring):
993 if isinstance(self._id, basestring):
993 self._entry = pwd.getpwnam(self._id)
994 self._entry = pwd.getpwnam(self._id)
994 else:
995 else:
995 self._entry = pwd.getpwuid(self._id)
996 self._entry = pwd.getpwuid(self._id)
996 return self._entry
997 return self._entry
997
998
998 def getname(self):
999 def getname(self):
999 if isinstance(self._id, basestring):
1000 if isinstance(self._id, basestring):
1000 return self._id
1001 return self._id
1001 else:
1002 else:
1002 return self._getentry().pw_name
1003 return self._getentry().pw_name
1003 name = property(getname, None, None, "User name")
1004 name = property(getname, None, None, "User name")
1004
1005
1005 def getpasswd(self):
1006 def getpasswd(self):
1006 return self._getentry().pw_passwd
1007 return self._getentry().pw_passwd
1007 passwd = property(getpasswd, None, None, "Password")
1008 passwd = property(getpasswd, None, None, "Password")
1008
1009
1009 def getuid(self):
1010 def getuid(self):
1010 if isinstance(self._id, basestring):
1011 if isinstance(self._id, basestring):
1011 return self._getentry().pw_uid
1012 return self._getentry().pw_uid
1012 else:
1013 else:
1013 return self._id
1014 return self._id
1014 uid = property(getuid, None, None, "User id")
1015 uid = property(getuid, None, None, "User id")
1015
1016
1016 def getgid(self):
1017 def getgid(self):
1017 return self._getentry().pw_gid
1018 return self._getentry().pw_gid
1018 gid = property(getgid, None, None, "Primary group id")
1019 gid = property(getgid, None, None, "Primary group id")
1019
1020
1020 def getgroup(self):
1021 def getgroup(self):
1021 return igrpentry(self.gid)
1022 return igrpentry(self.gid)
1022 group = property(getgroup, None, None, "Group")
1023 group = property(getgroup, None, None, "Group")
1023
1024
1024 def getgecos(self):
1025 def getgecos(self):
1025 return self._getentry().pw_gecos
1026 return self._getentry().pw_gecos
1026 gecos = property(getgecos, None, None, "Information (e.g. full user name)")
1027 gecos = property(getgecos, None, None, "Information (e.g. full user name)")
1027
1028
1028 def getdir(self):
1029 def getdir(self):
1029 return self._getentry().pw_dir
1030 return self._getentry().pw_dir
1030 dir = property(getdir, None, None, "$HOME directory")
1031 dir = property(getdir, None, None, "$HOME directory")
1031
1032
1032 def getshell(self):
1033 def getshell(self):
1033 return self._getentry().pw_shell
1034 return self._getentry().pw_shell
1034 shell = property(getshell, None, None, "Login shell")
1035 shell = property(getshell, None, None, "Login shell")
1035
1036
1036 def __xattrs__(self, mode):
1037 def __xattrs__(self, mode):
1037 return ("name", "passwd", "uid", "gid", "gecos", "dir", "shell")
1038 return ("name", "passwd", "uid", "gid", "gecos", "dir", "shell")
1038
1039
1039 def __repr__(self):
1040 def __repr__(self):
1040 return "%s.%s(%r)" % \
1041 return "%s.%s(%r)" % \
1041 (self.__class__.__module__, self.__class__.__name__, self._id)
1042 (self.__class__.__module__, self.__class__.__name__, self._id)
1042
1043
1043
1044
1044 class ipwd(Table):
1045 class ipwd(Table):
1045 """
1046 """
1046 List all entries in the Unix user account and password database.
1047 List all entries in the Unix user account and password database.
1047
1048
1048 Example:
1049 Example:
1049
1050
1050 >>> ipwd | isort("uid")
1051 >>> ipwd | isort("uid")
1051 """
1052 """
1052 def __iter__(self):
1053 def __iter__(self):
1053 for entry in pwd.getpwall():
1054 for entry in pwd.getpwall():
1054 yield ipwdentry(entry.pw_name)
1055 yield ipwdentry(entry.pw_name)
1055
1056
1056 def __xrepr__(self, mode):
1057 def __xrepr__(self, mode):
1057 if mode == "header" or mode == "footer" or mode == "cell":
1058 if mode == "header" or mode == "footer" or mode == "cell":
1058 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1059 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1059 else:
1060 else:
1060 yield (astyle.style_default, repr(self))
1061 yield (astyle.style_default, repr(self))
1061
1062
1062
1063
1063 class igrpentry(object):
1064 class igrpentry(object):
1064 """
1065 """
1065 ``igrpentry`` objects encapsulate entries in the Unix group database.
1066 ``igrpentry`` objects encapsulate entries in the Unix group database.
1066 """
1067 """
1067 def __init__(self, id):
1068 def __init__(self, id):
1068 self._id = id
1069 self._id = id
1069 self._entry = None
1070 self._entry = None
1070
1071
1071 def _getentry(self):
1072 def _getentry(self):
1072 if self._entry is None:
1073 if self._entry is None:
1073 if isinstance(self._id, basestring):
1074 if isinstance(self._id, basestring):
1074 self._entry = grp.getgrnam(self._id)
1075 self._entry = grp.getgrnam(self._id)
1075 else:
1076 else:
1076 self._entry = grp.getgrgid(self._id)
1077 self._entry = grp.getgrgid(self._id)
1077 return self._entry
1078 return self._entry
1078
1079
1079 def getname(self):
1080 def getname(self):
1080 if isinstance(self._id, basestring):
1081 if isinstance(self._id, basestring):
1081 return self._id
1082 return self._id
1082 else:
1083 else:
1083 return self._getentry().gr_name
1084 return self._getentry().gr_name
1084 name = property(getname, None, None, "Group name")
1085 name = property(getname, None, None, "Group name")
1085
1086
1086 def getpasswd(self):
1087 def getpasswd(self):
1087 return self._getentry().gr_passwd
1088 return self._getentry().gr_passwd
1088 passwd = property(getpasswd, None, None, "Password")
1089 passwd = property(getpasswd, None, None, "Password")
1089
1090
1090 def getgid(self):
1091 def getgid(self):
1091 if isinstance(self._id, basestring):
1092 if isinstance(self._id, basestring):
1092 return self._getentry().gr_gid
1093 return self._getentry().gr_gid
1093 else:
1094 else:
1094 return self._id
1095 return self._id
1095 gid = property(getgid, None, None, "Group id")
1096 gid = property(getgid, None, None, "Group id")
1096
1097
1097 def getmem(self):
1098 def getmem(self):
1098 return self._getentry().gr_mem
1099 return self._getentry().gr_mem
1099 mem = property(getmem, None, None, "Members")
1100 mem = property(getmem, None, None, "Members")
1100
1101
1101 def __xattrs__(self, mode):
1102 def __xattrs__(self, mode):
1102 return ("name", "passwd", "gid", "mem")
1103 return ("name", "passwd", "gid", "mem")
1103
1104
1104 def __xrepr__(self, mode):
1105 def __xrepr__(self, mode):
1105 if mode == "header" or mode == "footer" or mode == "cell":
1106 if mode == "header" or mode == "footer" or mode == "cell":
1106 yield (astyle.style_default, "group ")
1107 yield (astyle.style_default, "group ")
1107 try:
1108 try:
1108 yield (astyle.style_default, self.name)
1109 yield (astyle.style_default, self.name)
1109 except KeyError:
1110 except KeyError:
1110 if isinstance(self._id, basestring):
1111 if isinstance(self._id, basestring):
1111 yield (astyle.style_default, self.name_id)
1112 yield (astyle.style_default, self.name_id)
1112 else:
1113 else:
1113 yield (astyle.style_type_number, str(self._id))
1114 yield (astyle.style_type_number, str(self._id))
1114 else:
1115 else:
1115 yield (astyle.style_default, repr(self))
1116 yield (astyle.style_default, repr(self))
1116
1117
1117 def __xiter__(self, mode):
1118 def __xiter__(self, mode):
1118 for member in self.mem:
1119 for member in self.mem:
1119 yield ipwdentry(member)
1120 yield ipwdentry(member)
1120
1121
1121 def __repr__(self):
1122 def __repr__(self):
1122 return "%s.%s(%r)" % \
1123 return "%s.%s(%r)" % \
1123 (self.__class__.__module__, self.__class__.__name__, self._id)
1124 (self.__class__.__module__, self.__class__.__name__, self._id)
1124
1125
1125
1126
1126 class igrp(Table):
1127 class igrp(Table):
1127 """
1128 """
1128 This ``Table`` lists all entries in the Unix group database.
1129 This ``Table`` lists all entries in the Unix group database.
1129 """
1130 """
1130 def __xiter__(self, mode):
1131 def __xiter__(self, mode):
1131 for entry in grp.getgrall():
1132 for entry in grp.getgrall():
1132 yield igrpentry(entry.gr_name)
1133 yield igrpentry(entry.gr_name)
1133
1134
1134 def __xrepr__(self, mode):
1135 def __xrepr__(self, mode):
1135 if mode == "header" or mode == "footer":
1136 if mode == "header" or mode == "footer":
1136 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1137 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1137 else:
1138 else:
1138 yield (astyle.style_default, repr(self))
1139 yield (astyle.style_default, repr(self))
1139
1140
1140
1141
1141 class Fields(object):
1142 class Fields(object):
1142 def __init__(self, fieldnames, **fields):
1143 def __init__(self, fieldnames, **fields):
1143 self.__fieldnames = fieldnames
1144 self.__fieldnames = fieldnames
1144 for (key, value) in fields.iteritems():
1145 for (key, value) in fields.iteritems():
1145 setattr(self, key, value)
1146 setattr(self, key, value)
1146
1147
1147 def __xattrs__(self, mode):
1148 def __xattrs__(self, mode):
1148 return self.__fieldnames
1149 return self.__fieldnames
1149
1150
1150 def __xrepr__(self, mode):
1151 def __xrepr__(self, mode):
1151 yield (-1, False)
1152 yield (-1, False)
1152 if mode == "header" or mode == "cell":
1153 if mode == "header" or mode == "cell":
1153 yield (astyle.style_default, self.__class__.__name__)
1154 yield (astyle.style_default, self.__class__.__name__)
1154 yield (astyle.style_default, "(")
1155 yield (astyle.style_default, "(")
1155 for (i, f) in enumerate(self.__fieldnames):
1156 for (i, f) in enumerate(self.__fieldnames):
1156 if i:
1157 if i:
1157 yield (astyle.style_default, ", ")
1158 yield (astyle.style_default, ", ")
1158 yield (astyle.style_default, f)
1159 yield (astyle.style_default, f)
1159 yield (astyle.style_default, "=")
1160 yield (astyle.style_default, "=")
1160 for part in xrepr(getattr(self, f), "default"):
1161 for part in xrepr(getattr(self, f), "default"):
1161 yield part
1162 yield part
1162 yield (astyle.style_default, ")")
1163 yield (astyle.style_default, ")")
1163 elif mode == "footer":
1164 elif mode == "footer":
1164 yield (astyle.style_default, self.__class__.__name__)
1165 yield (astyle.style_default, self.__class__.__name__)
1165 yield (astyle.style_default, "(")
1166 yield (astyle.style_default, "(")
1166 for (i, f) in enumerate(self.__fieldnames):
1167 for (i, f) in enumerate(self.__fieldnames):
1167 if i:
1168 if i:
1168 yield (astyle.style_default, ", ")
1169 yield (astyle.style_default, ", ")
1169 yield (astyle.style_default, f)
1170 yield (astyle.style_default, f)
1170 yield (astyle.style_default, ")")
1171 yield (astyle.style_default, ")")
1171 else:
1172 else:
1172 yield (astyle.style_default, repr(self))
1173 yield (astyle.style_default, repr(self))
1173
1174
1174
1175
1175 class FieldTable(Table, list):
1176 class FieldTable(Table, list):
1176 def __init__(self, *fields):
1177 def __init__(self, *fields):
1177 Table.__init__(self)
1178 Table.__init__(self)
1178 list.__init__(self)
1179 list.__init__(self)
1179 self.fields = fields
1180 self.fields = fields
1180
1181
1181 def add(self, **fields):
1182 def add(self, **fields):
1182 self.append(Fields(self.fields, **fields))
1183 self.append(Fields(self.fields, **fields))
1183
1184
1184 def __xiter__(self, mode):
1185 def __xiter__(self, mode):
1185 return list.__iter__(self)
1186 return list.__iter__(self)
1186
1187
1187 def __xrepr__(self, mode):
1188 def __xrepr__(self, mode):
1188 yield (-1, False)
1189 yield (-1, False)
1189 if mode == "header" or mode == "footer":
1190 if mode == "header" or mode == "footer":
1190 yield (astyle.style_default, self.__class__.__name__)
1191 yield (astyle.style_default, self.__class__.__name__)
1191 yield (astyle.style_default, "(")
1192 yield (astyle.style_default, "(")
1192 for (i, f) in enumerate(self.__fieldnames):
1193 for (i, f) in enumerate(self.__fieldnames):
1193 if i:
1194 if i:
1194 yield (astyle.style_default, ", ")
1195 yield (astyle.style_default, ", ")
1195 yield (astyle.style_default, f)
1196 yield (astyle.style_default, f)
1196 yield (astyle.style_default, ")")
1197 yield (astyle.style_default, ")")
1197 else:
1198 else:
1198 yield (astyle.style_default, repr(self))
1199 yield (astyle.style_default, repr(self))
1199
1200
1200 def __repr__(self):
1201 def __repr__(self):
1201 return "<%s.%s object with fields=%r at 0x%x>" % \
1202 return "<%s.%s object with fields=%r at 0x%x>" % \
1202 (self.__class__.__module__, self.__class__.__name__,
1203 (self.__class__.__module__, self.__class__.__name__,
1203 ", ".join(map(repr, self.fields)), id(self))
1204 ", ".join(map(repr, self.fields)), id(self))
1204
1205
1205
1206
1206 class List(list):
1207 class List(list):
1207 def __xattrs__(self, mode):
1208 def __xattrs__(self, mode):
1208 return xrange(len(self))
1209 return xrange(len(self))
1209
1210
1210 def __xrepr__(self, mode):
1211 def __xrepr__(self, mode):
1211 yield (-1, False)
1212 yield (-1, False)
1212 if mode == "header" or mode == "cell" or mode == "footer" or mode == "default":
1213 if mode == "header" or mode == "cell" or mode == "footer" or mode == "default":
1213 yield (astyle.style_default, self.__class__.__name__)
1214 yield (astyle.style_default, self.__class__.__name__)
1214 yield (astyle.style_default, "(")
1215 yield (astyle.style_default, "(")
1215 for (i, item) in enumerate(self):
1216 for (i, item) in enumerate(self):
1216 if i:
1217 if i:
1217 yield (astyle.style_default, ", ")
1218 yield (astyle.style_default, ", ")
1218 for part in xrepr(item, "default"):
1219 for part in xrepr(item, "default"):
1219 yield part
1220 yield part
1220 yield (astyle.style_default, ")")
1221 yield (astyle.style_default, ")")
1221 else:
1222 else:
1222 yield (astyle.style_default, repr(self))
1223 yield (astyle.style_default, repr(self))
1223
1224
1224
1225
1225 class ienv(Table):
1226 class ienv(Table):
1226 """
1227 """
1227 List environment variables.
1228 List environment variables.
1228
1229
1229 Example:
1230 Example:
1230
1231
1231 >>> ienv
1232 >>> ienv
1232 """
1233 """
1233
1234
1234 def __xiter__(self, mode):
1235 def __xiter__(self, mode):
1235 fields = ("key", "value")
1236 fields = ("key", "value")
1236 for (key, value) in os.environ.iteritems():
1237 for (key, value) in os.environ.iteritems():
1237 yield Fields(fields, key=key, value=value)
1238 yield Fields(fields, key=key, value=value)
1238
1239
1239 def __xrepr__(self, mode):
1240 def __xrepr__(self, mode):
1240 if mode == "header" or mode == "cell":
1241 if mode == "header" or mode == "cell":
1241 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1242 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1242 else:
1243 else:
1243 yield (astyle.style_default, repr(self))
1244 yield (astyle.style_default, repr(self))
1244
1245
1245
1246
1246 class icsv(Pipe):
1247 class icsv(Pipe):
1247 """
1248 """
1248 This ``Pipe`` lists turn the input (with must be a pipe outputting lines
1249 This ``Pipe`` lists turn the input (with must be a pipe outputting lines
1249 or an ``ifile``) into lines of CVS columns.
1250 or an ``ifile``) into lines of CVS columns.
1250 """
1251 """
1251 def __init__(self, **csvargs):
1252 def __init__(self, **csvargs):
1252 """
1253 """
1253 Create an ``icsv`` object. ``cvsargs`` will be passed through as
1254 Create an ``icsv`` object. ``cvsargs`` will be passed through as
1254 keyword arguments to ``cvs.reader()``.
1255 keyword arguments to ``cvs.reader()``.
1255 """
1256 """
1256 self.csvargs = csvargs
1257 self.csvargs = csvargs
1257
1258
1258 def __xiter__(self, mode):
1259 def __xiter__(self, mode):
1259 input = self.input
1260 input = self.input
1260 if isinstance(input, ifile):
1261 if isinstance(input, ifile):
1261 input = input.open("rb")
1262 input = input.open("rb")
1262 reader = csv.reader(input, **self.csvargs)
1263 reader = csv.reader(input, **self.csvargs)
1263 for line in reader:
1264 for line in reader:
1264 yield List(line)
1265 yield List(line)
1265
1266
1266 def __xrepr__(self, mode):
1267 def __xrepr__(self, mode):
1267 yield (-1, False)
1268 yield (-1, False)
1268 if mode == "header" or mode == "footer":
1269 if mode == "header" or mode == "footer":
1269 input = getattr(self, "input", None)
1270 input = getattr(self, "input", None)
1270 if input is not None:
1271 if input is not None:
1271 for part in xrepr(input, mode):
1272 for part in xrepr(input, mode):
1272 yield part
1273 yield part
1273 yield (astyle.style_default, " | ")
1274 yield (astyle.style_default, " | ")
1274 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1275 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1275 for (i, (name, value)) in enumerate(self.csvargs.iteritems()):
1276 for (i, (name, value)) in enumerate(self.csvargs.iteritems()):
1276 if i:
1277 if i:
1277 yield (astyle.style_default, ", ")
1278 yield (astyle.style_default, ", ")
1278 yield (astyle.style_default, name)
1279 yield (astyle.style_default, name)
1279 yield (astyle.style_default, "=")
1280 yield (astyle.style_default, "=")
1280 for part in xrepr(value, "default"):
1281 for part in xrepr(value, "default"):
1281 yield part
1282 yield part
1282 yield (astyle.style_default, ")")
1283 yield (astyle.style_default, ")")
1283 else:
1284 else:
1284 yield (astyle.style_default, repr(self))
1285 yield (astyle.style_default, repr(self))
1285
1286
1286 def __repr__(self):
1287 def __repr__(self):
1287 args = ", ".join(["%s=%r" % item for item in self.csvargs.iteritems()])
1288 args = ", ".join(["%s=%r" % item for item in self.csvargs.iteritems()])
1288 return "<%s.%s %s at 0x%x>" % \
1289 return "<%s.%s %s at 0x%x>" % \
1289 (self.__class__.__module__, self.__class__.__name__, args, id(self))
1290 (self.__class__.__module__, self.__class__.__name__, args, id(self))
1290
1291
1291
1292
1292 class ix(Table):
1293 class ix(Table):
1293 """
1294 """
1294 Execute a system command and list its output as lines
1295 Execute a system command and list its output as lines
1295 (similar to ``os.popen()``).
1296 (similar to ``os.popen()``).
1296
1297
1297 Examples:
1298 Examples:
1298
1299
1299 >>> ix("ps x")
1300 >>> ix("ps x")
1300 >>> ix("find .") | ifile
1301 >>> ix("find .") | ifile
1301 """
1302 """
1302 def __init__(self, cmd):
1303 def __init__(self, cmd):
1303 self.cmd = cmd
1304 self.cmd = cmd
1304 self._pipeout = None
1305 self._pipeout = None
1305
1306
1306 def __xiter__(self, mode="default"):
1307 def __xiter__(self, mode="default"):
1307 (_pipein, self._pipeout) = os.popen4(self.cmd)
1308 (_pipein, self._pipeout) = os.popen4(self.cmd)
1308 _pipein.close()
1309 _pipein.close()
1309 for l in self._pipeout:
1310 for l in self._pipeout:
1310 yield l.rstrip("\r\n")
1311 yield l.rstrip("\r\n")
1311 self._pipeout.close()
1312 self._pipeout.close()
1312 self._pipeout = None
1313 self._pipeout = None
1313
1314
1314 def __del__(self):
1315 def __del__(self):
1315 if self._pipeout is not None and not self._pipeout.closed:
1316 if self._pipeout is not None and not self._pipeout.closed:
1316 self._pipeout.close()
1317 self._pipeout.close()
1317 self._pipeout = None
1318 self._pipeout = None
1318
1319
1319 def __xrepr__(self, mode):
1320 def __xrepr__(self, mode):
1320 if mode == "header" or mode == "footer":
1321 if mode == "header" or mode == "footer":
1321 yield (astyle.style_default,
1322 yield (astyle.style_default,
1322 "%s(%r)" % (self.__class__.__name__, self.cmd))
1323 "%s(%r)" % (self.__class__.__name__, self.cmd))
1323 else:
1324 else:
1324 yield (astyle.style_default, repr(self))
1325 yield (astyle.style_default, repr(self))
1325
1326
1326 def __repr__(self):
1327 def __repr__(self):
1327 return "%s.%s(%r)" % \
1328 return "%s.%s(%r)" % \
1328 (self.__class__.__module__, self.__class__.__name__, self.cmd)
1329 (self.__class__.__module__, self.__class__.__name__, self.cmd)
1329
1330
1330
1331
1331 class ifilter(Pipe):
1332 class ifilter(Pipe):
1332 """
1333 """
1333 Filter an input pipe. Only objects where an expression evaluates to true
1334 Filter an input pipe. Only objects where an expression evaluates to true
1334 (and doesn't raise an exception) are listed.
1335 (and doesn't raise an exception) are listed.
1335
1336
1336 Examples:
1337 Examples:
1337
1338
1338 >>> ils | ifilter("_.isfile() and size>1000")
1339 >>> ils | ifilter("_.isfile() and size>1000")
1339 >>> igrp | ifilter("len(mem)")
1340 >>> igrp | ifilter("len(mem)")
1340 >>> sys.modules | ifilter(lambda _:_.value is not None)
1341 >>> sys.modules | ifilter(lambda _:_.value is not None)
1341 """
1342 """
1342
1343
1343 def __init__(self, expr, globals=None, errors="raiseifallfail"):
1344 def __init__(self, expr, globals=None, errors="raiseifallfail"):
1344 """
1345 """
1345 Create an ``ifilter`` object. ``expr`` can be a callable or a string
1346 Create an ``ifilter`` object. ``expr`` can be a callable or a string
1346 containing an expression. ``globals`` will be used as the global
1347 containing an expression. ``globals`` will be used as the global
1347 namespace for calling string expressions (defaulting to IPython's
1348 namespace for calling string expressions (defaulting to IPython's
1348 user namespace). ``errors`` specifies how exception during evaluation
1349 user namespace). ``errors`` specifies how exception during evaluation
1349 of ``expr`` are handled:
1350 of ``expr`` are handled:
1350
1351
1351 * ``drop``: drop all items that have errors;
1352 * ``drop``: drop all items that have errors;
1352
1353
1353 * ``keep``: keep all items that have errors;
1354 * ``keep``: keep all items that have errors;
1354
1355
1355 * ``keeperror``: keep the exception of all items that have errors;
1356 * ``keeperror``: keep the exception of all items that have errors;
1356
1357
1357 * ``raise``: raise the exception;
1358 * ``raise``: raise the exception;
1358
1359
1359 * ``raiseifallfail``: raise the first exception if all items have errors;
1360 * ``raiseifallfail``: raise the first exception if all items have errors;
1360 otherwise drop those with errors (this is the default).
1361 otherwise drop those with errors (this is the default).
1361 """
1362 """
1362 self.expr = expr
1363 self.expr = expr
1363 self.globals = globals
1364 self.globals = globals
1364 self.errors = errors
1365 self.errors = errors
1365
1366
1366 def __xiter__(self, mode):
1367 def __xiter__(self, mode):
1367 if callable(self.expr):
1368 if callable(self.expr):
1368 test = self.expr
1369 test = self.expr
1369 else:
1370 else:
1370 g = getglobals(self.globals)
1371 g = getglobals(self.globals)
1371 expr = compile(self.expr, "ipipe-expression", "eval")
1372 expr = compile(self.expr, "ipipe-expression", "eval")
1372 def test(item):
1373 def test(item):
1373 return eval(expr, g, AttrNamespace(item))
1374 return eval(expr, g, AttrNamespace(item))
1374
1375
1375 ok = 0
1376 ok = 0
1376 exc_info = None
1377 exc_info = None
1377 for item in xiter(self.input, mode):
1378 for item in xiter(self.input, mode):
1378 try:
1379 try:
1379 if test(item):
1380 if test(item):
1380 yield item
1381 yield item
1381 ok += 1
1382 ok += 1
1382 except (KeyboardInterrupt, SystemExit):
1383 except (KeyboardInterrupt, SystemExit):
1383 raise
1384 raise
1384 except Exception, exc:
1385 except Exception, exc:
1385 if self.errors == "drop":
1386 if self.errors == "drop":
1386 pass # Ignore errors
1387 pass # Ignore errors
1387 elif self.errors == "keep":
1388 elif self.errors == "keep":
1388 yield item
1389 yield item
1389 elif self.errors == "keeperror":
1390 elif self.errors == "keeperror":
1390 yield exc
1391 yield exc
1391 elif self.errors == "raise":
1392 elif self.errors == "raise":
1392 raise
1393 raise
1393 elif self.errors == "raiseifallfail":
1394 elif self.errors == "raiseifallfail":
1394 if exc_info is None:
1395 if exc_info is None:
1395 exc_info = sys.exc_info()
1396 exc_info = sys.exc_info()
1396 if not ok and exc_info is not None:
1397 if not ok and exc_info is not None:
1397 raise exc_info[0], exc_info[1], exc_info[2]
1398 raise exc_info[0], exc_info[1], exc_info[2]
1398
1399
1399 def __xrepr__(self, mode):
1400 def __xrepr__(self, mode):
1400 if mode == "header" or mode == "footer":
1401 if mode == "header" or mode == "footer":
1401 input = getattr(self, "input", None)
1402 input = getattr(self, "input", None)
1402 if input is not None:
1403 if input is not None:
1403 for part in xrepr(input, mode):
1404 for part in xrepr(input, mode):
1404 yield part
1405 yield part
1405 yield (astyle.style_default, " | ")
1406 yield (astyle.style_default, " | ")
1406 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1407 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1407 for part in xrepr(self.expr, "default"):
1408 for part in xrepr(self.expr, "default"):
1408 yield part
1409 yield part
1409 yield (astyle.style_default, ")")
1410 yield (astyle.style_default, ")")
1410 else:
1411 else:
1411 yield (astyle.style_default, repr(self))
1412 yield (astyle.style_default, repr(self))
1412
1413
1413 def __repr__(self):
1414 def __repr__(self):
1414 return "<%s.%s expr=%r at 0x%x>" % \
1415 return "<%s.%s expr=%r at 0x%x>" % \
1415 (self.__class__.__module__, self.__class__.__name__,
1416 (self.__class__.__module__, self.__class__.__name__,
1416 self.expr, id(self))
1417 self.expr, id(self))
1417
1418
1418
1419
1419 class ieval(Pipe):
1420 class ieval(Pipe):
1420 """
1421 """
1421 Evaluate an expression for each object in the input pipe.
1422 Evaluate an expression for each object in the input pipe.
1422
1423
1423 Examples:
1424 Examples:
1424
1425
1425 >>> ils | ieval("_.abspath()")
1426 >>> ils | ieval("_.abspath()")
1426 >>> sys.path | ieval(ifile)
1427 >>> sys.path | ieval(ifile)
1427 """
1428 """
1428
1429
1429 def __init__(self, expr, globals=None, errors="raiseifallfail"):
1430 def __init__(self, expr, globals=None, errors="raiseifallfail"):
1430 """
1431 """
1431 Create an ``ieval`` object. ``expr`` can be a callable or a string
1432 Create an ``ieval`` object. ``expr`` can be a callable or a string
1432 containing an expression. For the meaning of ``globals`` and
1433 containing an expression. For the meaning of ``globals`` and
1433 ``errors`` see ``ifilter``.
1434 ``errors`` see ``ifilter``.
1434 """
1435 """
1435 self.expr = expr
1436 self.expr = expr
1436 self.globals = globals
1437 self.globals = globals
1437 self.errors = errors
1438 self.errors = errors
1438
1439
1439 def __xiter__(self, mode):
1440 def __xiter__(self, mode):
1440 if callable(self.expr):
1441 if callable(self.expr):
1441 do = self.expr
1442 do = self.expr
1442 else:
1443 else:
1443 g = getglobals(self.globals)
1444 g = getglobals(self.globals)
1444 expr = compile(self.expr, "ipipe-expression", "eval")
1445 expr = compile(self.expr, "ipipe-expression", "eval")
1445 def do(item):
1446 def do(item):
1446 return eval(expr, g, AttrNamespace(item))
1447 return eval(expr, g, AttrNamespace(item))
1447
1448
1448 ok = 0
1449 ok = 0
1449 exc_info = None
1450 exc_info = None
1450 for item in xiter(self.input, mode):
1451 for item in xiter(self.input, mode):
1451 try:
1452 try:
1452 yield do(item)
1453 yield do(item)
1453 except (KeyboardInterrupt, SystemExit):
1454 except (KeyboardInterrupt, SystemExit):
1454 raise
1455 raise
1455 except Exception, exc:
1456 except Exception, exc:
1456 if self.errors == "drop":
1457 if self.errors == "drop":
1457 pass # Ignore errors
1458 pass # Ignore errors
1458 elif self.errors == "keep":
1459 elif self.errors == "keep":
1459 yield item
1460 yield item
1460 elif self.errors == "keeperror":
1461 elif self.errors == "keeperror":
1461 yield exc
1462 yield exc
1462 elif self.errors == "raise":
1463 elif self.errors == "raise":
1463 raise
1464 raise
1464 elif self.errors == "raiseifallfail":
1465 elif self.errors == "raiseifallfail":
1465 if exc_info is None:
1466 if exc_info is None:
1466 exc_info = sys.exc_info()
1467 exc_info = sys.exc_info()
1467 if not ok and exc_info is not None:
1468 if not ok and exc_info is not None:
1468 raise exc_info[0], exc_info[1], exc_info[2]
1469 raise exc_info[0], exc_info[1], exc_info[2]
1469
1470
1470 def __xrepr__(self, mode):
1471 def __xrepr__(self, mode):
1471 if mode == "header" or mode == "footer":
1472 if mode == "header" or mode == "footer":
1472 input = getattr(self, "input", None)
1473 input = getattr(self, "input", None)
1473 if input is not None:
1474 if input is not None:
1474 for part in xrepr(input, mode):
1475 for part in xrepr(input, mode):
1475 yield part
1476 yield part
1476 yield (astyle.style_default, " | ")
1477 yield (astyle.style_default, " | ")
1477 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1478 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1478 for part in xrepr(self.expr, "default"):
1479 for part in xrepr(self.expr, "default"):
1479 yield part
1480 yield part
1480 yield (astyle.style_default, ")")
1481 yield (astyle.style_default, ")")
1481 else:
1482 else:
1482 yield (astyle.style_default, repr(self))
1483 yield (astyle.style_default, repr(self))
1483
1484
1484 def __repr__(self):
1485 def __repr__(self):
1485 return "<%s.%s expr=%r at 0x%x>" % \
1486 return "<%s.%s expr=%r at 0x%x>" % \
1486 (self.__class__.__module__, self.__class__.__name__,
1487 (self.__class__.__module__, self.__class__.__name__,
1487 self.expr, id(self))
1488 self.expr, id(self))
1488
1489
1489
1490
1490 class ienum(Pipe):
1491 class ienum(Pipe):
1491 """
1492 """
1492 Enumerate the input pipe (i.e. wrap each input object in an object
1493 Enumerate the input pipe (i.e. wrap each input object in an object
1493 with ``index`` and ``object`` attributes).
1494 with ``index`` and ``object`` attributes).
1494
1495
1495 Examples:
1496 Examples:
1496
1497
1497 >>> xrange(20) | ieval("_,_*_") | ienum | ifilter("index % 2 == 0") | ieval("object")
1498 >>> xrange(20) | ieval("_,_*_") | ienum | ifilter("index % 2 == 0") | ieval("object")
1498 """
1499 """
1499 def __xiter__(self, mode):
1500 def __xiter__(self, mode):
1500 fields = ("index", "object")
1501 fields = ("index", "object")
1501 for (index, object) in enumerate(xiter(self.input, mode)):
1502 for (index, object) in enumerate(xiter(self.input, mode)):
1502 yield Fields(fields, index=index, object=object)
1503 yield Fields(fields, index=index, object=object)
1503
1504
1504
1505
1505 class isort(Pipe):
1506 class isort(Pipe):
1506 """
1507 """
1507 Sorts the input pipe.
1508 Sorts the input pipe.
1508
1509
1509 Examples:
1510 Examples:
1510
1511
1511 >>> ils | isort("size")
1512 >>> ils | isort("size")
1512 >>> ils | isort("_.isdir(), _.lower()", reverse=True)
1513 >>> ils | isort("_.isdir(), _.lower()", reverse=True)
1513 """
1514 """
1514
1515
1515 def __init__(self, key=None, globals=None, reverse=False):
1516 def __init__(self, key=None, globals=None, reverse=False):
1516 """
1517 """
1517 Create an ``isort`` object. ``key`` can be a callable or a string
1518 Create an ``isort`` object. ``key`` can be a callable or a string
1518 containing an expression (or ``None`` in which case the items
1519 containing an expression (or ``None`` in which case the items
1519 themselves will be sorted). If ``reverse`` is true the sort order
1520 themselves will be sorted). If ``reverse`` is true the sort order
1520 will be reversed. For the meaning of ``globals`` see ``ifilter``.
1521 will be reversed. For the meaning of ``globals`` see ``ifilter``.
1521 """
1522 """
1522 self.key = key
1523 self.key = key
1523 self.globals = globals
1524 self.globals = globals
1524 self.reverse = reverse
1525 self.reverse = reverse
1525
1526
1526 def __xiter__(self, mode):
1527 def __xiter__(self, mode):
1527 if self.key is None:
1528 if self.key is None:
1528 items = sorted(
1529 items = sorted(
1529 xiter(self.input, mode),
1530 xiter(self.input, mode),
1530 reverse=self.reverse
1531 reverse=self.reverse
1531 )
1532 )
1532 elif callable(self.key):
1533 elif callable(self.key):
1533 items = sorted(
1534 items = sorted(
1534 xiter(self.input, mode),
1535 xiter(self.input, mode),
1535 key=self.key,
1536 key=self.key,
1536 reverse=self.reverse
1537 reverse=self.reverse
1537 )
1538 )
1538 else:
1539 else:
1539 g = getglobals(self.globals)
1540 g = getglobals(self.globals)
1540 key = compile(self.key, "ipipe-expression", "eval")
1541 key = compile(self.key, "ipipe-expression", "eval")
1541 def realkey(item):
1542 def realkey(item):
1542 return eval(key, g, AttrNamespace(item))
1543 return eval(key, g, AttrNamespace(item))
1543 items = sorted(
1544 items = sorted(
1544 xiter(self.input, mode),
1545 xiter(self.input, mode),
1545 key=realkey,
1546 key=realkey,
1546 reverse=self.reverse
1547 reverse=self.reverse
1547 )
1548 )
1548 for item in items:
1549 for item in items:
1549 yield item
1550 yield item
1550
1551
1551 def __xrepr__(self, mode):
1552 def __xrepr__(self, mode):
1552 if mode == "header" or mode == "footer":
1553 if mode == "header" or mode == "footer":
1553 input = getattr(self, "input", None)
1554 input = getattr(self, "input", None)
1554 if input is not None:
1555 if input is not None:
1555 for part in xrepr(input, mode):
1556 for part in xrepr(input, mode):
1556 yield part
1557 yield part
1557 yield (astyle.style_default, " | ")
1558 yield (astyle.style_default, " | ")
1558 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1559 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1559 for part in xrepr(self.key, "default"):
1560 for part in xrepr(self.key, "default"):
1560 yield part
1561 yield part
1561 if self.reverse:
1562 if self.reverse:
1562 yield (astyle.style_default, ", ")
1563 yield (astyle.style_default, ", ")
1563 for part in xrepr(True, "default"):
1564 for part in xrepr(True, "default"):
1564 yield part
1565 yield part
1565 yield (astyle.style_default, ")")
1566 yield (astyle.style_default, ")")
1566 else:
1567 else:
1567 yield (astyle.style_default, repr(self))
1568 yield (astyle.style_default, repr(self))
1568
1569
1569 def __repr__(self):
1570 def __repr__(self):
1570 return "<%s.%s key=%r reverse=%r at 0x%x>" % \
1571 return "<%s.%s key=%r reverse=%r at 0x%x>" % \
1571 (self.__class__.__module__, self.__class__.__name__,
1572 (self.__class__.__module__, self.__class__.__name__,
1572 self.key, self.reverse, id(self))
1573 self.key, self.reverse, id(self))
1573
1574
1574
1575
1575 tab = 3 # for expandtabs()
1576 tab = 3 # for expandtabs()
1576
1577
1577 def _format(field):
1578 def _format(field):
1578 if isinstance(field, str):
1579 if isinstance(field, str):
1579 text = repr(field.expandtabs(tab))[1:-1]
1580 text = repr(field.expandtabs(tab))[1:-1]
1580 elif isinstance(field, unicode):
1581 elif isinstance(field, unicode):
1581 text = repr(field.expandtabs(tab))[2:-1]
1582 text = repr(field.expandtabs(tab))[2:-1]
1582 elif isinstance(field, datetime.datetime):
1583 elif isinstance(field, datetime.datetime):
1583 # Don't use strftime() here, as this requires year >= 1900
1584 # Don't use strftime() here, as this requires year >= 1900
1584 text = "%04d-%02d-%02d %02d:%02d:%02d.%06d" % \
1585 text = "%04d-%02d-%02d %02d:%02d:%02d.%06d" % \
1585 (field.year, field.month, field.day,
1586 (field.year, field.month, field.day,
1586 field.hour, field.minute, field.second, field.microsecond)
1587 field.hour, field.minute, field.second, field.microsecond)
1587 elif isinstance(field, datetime.date):
1588 elif isinstance(field, datetime.date):
1588 text = "%04d-%02d-%02d" % (field.year, field.month, field.day)
1589 text = "%04d-%02d-%02d" % (field.year, field.month, field.day)
1589 else:
1590 else:
1590 text = repr(field)
1591 text = repr(field)
1591 return text
1592 return text
1592
1593
1593
1594
1594 class Display(object):
1595 class Display(object):
1595 class __metaclass__(type):
1596 class __metaclass__(type):
1596 def __ror__(self, input):
1597 def __ror__(self, input):
1597 return input | self()
1598 return input | self()
1598
1599
1599 def __ror__(self, input):
1600 def __ror__(self, input):
1600 self.input = input
1601 self.input = input
1601 return self
1602 return self
1602
1603
1603 def display(self):
1604 def display(self):
1604 pass
1605 pass
1605
1606
1606
1607
1607 class iless(Display):
1608 class iless(Display):
1608 cmd = "less --quit-if-one-screen --LONG-PROMPT --LINE-NUMBERS --chop-long-lines --shift=8 --RAW-CONTROL-CHARS"
1609 cmd = "less --quit-if-one-screen --LONG-PROMPT --LINE-NUMBERS --chop-long-lines --shift=8 --RAW-CONTROL-CHARS"
1609
1610
1610 def display(self):
1611 def display(self):
1611 try:
1612 try:
1612 pager = os.popen(self.cmd, "w")
1613 pager = os.popen(self.cmd, "w")
1613 try:
1614 try:
1614 for item in xiter(self.input, "default"):
1615 for item in xiter(self.input, "default"):
1615 attrs = xattrs(item, "default")
1616 attrs = xattrs(item, "default")
1616 attrs = ["%s=%s" % (a, _format(_getattr(item, a))) for a in attrs]
1617 attrs = ["%s=%s" % (a, _format(_getattr(item, a))) for a in attrs]
1617 pager.write(" ".join(attrs))
1618 pager.write(" ".join(attrs))
1618 pager.write("\n")
1619 pager.write("\n")
1619 finally:
1620 finally:
1620 pager.close()
1621 pager.close()
1621 except Exception, exc:
1622 except Exception, exc:
1622 print "%s: %s" % (exc.__class__.__name__, str(exc))
1623 print "%s: %s" % (exc.__class__.__name__, str(exc))
1623
1624
1624
1625
1625 def xformat(value, mode, maxlength):
1626 def xformat(value, mode, maxlength):
1626 align = None
1627 align = None
1627 full = True
1628 full = True
1628 width = 0
1629 width = 0
1629 text = astyle.Text()
1630 text = astyle.Text()
1630 for (style, part) in xrepr(value, mode):
1631 for (style, part) in xrepr(value, mode):
1631 # only consider the first result
1632 # only consider the first result
1632 if align is None:
1633 if align is None:
1633 if isinstance(style, int):
1634 if isinstance(style, int):
1634 # (style, text) really is (alignment, stop)
1635 # (style, text) really is (alignment, stop)
1635 align = style
1636 align = style
1636 full = part
1637 full = part
1637 continue
1638 continue
1638 else:
1639 else:
1639 align = -1
1640 align = -1
1640 full = True
1641 full = True
1641 if not isinstance(style, int):
1642 if not isinstance(style, int):
1642 text.append((style, part))
1643 text.append((style, part))
1643 width += len(part)
1644 width += len(part)
1644 if width >= maxlength and not full:
1645 if width >= maxlength and not full:
1645 text.append((astyle.style_ellisis, "..."))
1646 text.append((astyle.style_ellisis, "..."))
1646 width += 3
1647 width += 3
1647 break
1648 break
1648 if align is None: # default to left alignment
1649 if align is None: # default to left alignment
1649 align = -1
1650 align = -1
1650 return (align, width, text)
1651 return (align, width, text)
1651
1652
1652
1653
1653 class idump(Display):
1654 class idump(Display):
1654 # The approximate maximum length of a column entry
1655 # The approximate maximum length of a column entry
1655 maxattrlength = 200
1656 maxattrlength = 200
1656
1657
1657 # Style for column names
1658 # Style for column names
1658 style_header = astyle.Style.fromstr("white:black:bold")
1659 style_header = astyle.Style.fromstr("white:black:bold")
1659
1660
1660 def __init__(self, *attrs):
1661 def __init__(self, *attrs):
1661 self.attrs = attrs
1662 self.attrs = attrs
1662 self.headerpadchar = " "
1663 self.headerpadchar = " "
1663 self.headersepchar = "|"
1664 self.headersepchar = "|"
1664 self.datapadchar = " "
1665 self.datapadchar = " "
1665 self.datasepchar = "|"
1666 self.datasepchar = "|"
1666
1667
1667 def display(self):
1668 def display(self):
1668 stream = genutils.Term.cout
1669 stream = genutils.Term.cout
1669 allattrs = []
1670 allattrs = []
1670 allattrset = set()
1671 allattrset = set()
1671 colwidths = {}
1672 colwidths = {}
1672 rows = []
1673 rows = []
1673 for item in xiter(self.input, "default"):
1674 for item in xiter(self.input, "default"):
1674 row = {}
1675 row = {}
1675 attrs = self.attrs
1676 attrs = self.attrs
1676 if not attrs:
1677 if not attrs:
1677 attrs = xattrs(item, "default")
1678 attrs = xattrs(item, "default")
1678 for attrname in attrs:
1679 for attrname in attrs:
1679 if attrname not in allattrset:
1680 if attrname not in allattrset:
1680 allattrs.append(attrname)
1681 allattrs.append(attrname)
1681 allattrset.add(attrname)
1682 allattrset.add(attrname)
1682 colwidths[attrname] = len(_attrname(attrname))
1683 colwidths[attrname] = len(_attrname(attrname))
1683 try:
1684 try:
1684 value = _getattr(item, attrname, None)
1685 value = _getattr(item, attrname, None)
1685 except (KeyboardInterrupt, SystemExit):
1686 except (KeyboardInterrupt, SystemExit):
1686 raise
1687 raise
1687 except Exception, exc:
1688 except Exception, exc:
1688 value = exc
1689 value = exc
1689 (align, width, text) = xformat(value, "cell", self.maxattrlength)
1690 (align, width, text) = xformat(value, "cell", self.maxattrlength)
1690 colwidths[attrname] = max(colwidths[attrname], width)
1691 colwidths[attrname] = max(colwidths[attrname], width)
1691 # remember alignment, length and colored parts
1692 # remember alignment, length and colored parts
1692 row[attrname] = (align, width, text)
1693 row[attrname] = (align, width, text)
1693 rows.append(row)
1694 rows.append(row)
1694
1695
1695 stream.write("\n")
1696 stream.write("\n")
1696 for (i, attrname) in enumerate(allattrs):
1697 for (i, attrname) in enumerate(allattrs):
1697 self.style_header(_attrname(attrname)).write(stream)
1698 self.style_header(_attrname(attrname)).write(stream)
1698 spc = colwidths[attrname] - len(_attrname(attrname))
1699 spc = colwidths[attrname] - len(_attrname(attrname))
1699 if i < len(colwidths)-1:
1700 if i < len(colwidths)-1:
1700 stream.write(self.headerpadchar*spc)
1701 stream.write(self.headerpadchar*spc)
1701 stream.write(self.headersepchar)
1702 stream.write(self.headersepchar)
1702 stream.write("\n")
1703 stream.write("\n")
1703
1704
1704 for row in rows:
1705 for row in rows:
1705 for (i, attrname) in enumerate(allattrs):
1706 for (i, attrname) in enumerate(allattrs):
1706 (align, width, text) = row[attrname]
1707 (align, width, text) = row[attrname]
1707 spc = colwidths[attrname] - width
1708 spc = colwidths[attrname] - width
1708 if align == -1:
1709 if align == -1:
1709 text.write(stream)
1710 text.write(stream)
1710 if i < len(colwidths)-1:
1711 if i < len(colwidths)-1:
1711 stream.write(self.datapadchar*spc)
1712 stream.write(self.datapadchar*spc)
1712 elif align == 0:
1713 elif align == 0:
1713 spc = colwidths[attrname] - width
1714 spc = colwidths[attrname] - width
1714 spc1 = spc//2
1715 spc1 = spc//2
1715 spc2 = spc-spc1
1716 spc2 = spc-spc1
1716 stream.write(self.datapadchar*spc1)
1717 stream.write(self.datapadchar*spc1)
1717 text.write(stream)
1718 text.write(stream)
1718 if i < len(colwidths)-1:
1719 if i < len(colwidths)-1:
1719 stream.write(self.datapadchar*spc2)
1720 stream.write(self.datapadchar*spc2)
1720 else:
1721 else:
1721 stream.write(self.datapadchar*spc)
1722 stream.write(self.datapadchar*spc)
1722 text.write(stream)
1723 text.write(stream)
1723 if i < len(colwidths)-1:
1724 if i < len(colwidths)-1:
1724 stream.write(self.datasepchar)
1725 stream.write(self.datasepchar)
1725 stream.write("\n")
1726 stream.write("\n")
1726
1727
1727
1728
1728 class XMode(object):
1729 class XMode(object):
1729 """
1730 """
1730 An ``XMode`` object describes one enter mode available for an object
1731 An ``XMode`` object describes one enter mode available for an object
1731 """
1732 """
1732 def __init__(self, object, mode, title=None, description=None):
1733 def __init__(self, object, mode, title=None, description=None):
1733 """
1734 """
1734 Create a new ``XMode`` object for the object ``object``. This object
1735 Create a new ``XMode`` object for the object ``object``. This object
1735 must support the enter mode ``mode`` (i.e. ``object.__xiter__(mode)``
1736 must support the enter mode ``mode`` (i.e. ``object.__xiter__(mode)``
1736 must return an iterable). ``title`` and ``description`` will be
1737 must return an iterable). ``title`` and ``description`` will be
1737 displayed in the browser when selecting among the available modes.
1738 displayed in the browser when selecting among the available modes.
1738 """
1739 """
1739 self.object = object
1740 self.object = object
1740 self.mode = mode
1741 self.mode = mode
1741 self.title = title
1742 self.title = title
1742 self.description = description
1743 self.description = description
1743
1744
1744 def __repr__(self):
1745 def __repr__(self):
1745 return "<%s.%s object mode=%r at 0x%x>" % \
1746 return "<%s.%s object mode=%r at 0x%x>" % \
1746 (self.__class__.__module__, self.__class__.__name__,
1747 (self.__class__.__module__, self.__class__.__name__,
1747 self.mode, id(self))
1748 self.mode, id(self))
1748
1749
1749 def __xrepr__(self, mode):
1750 def __xrepr__(self, mode):
1750 if mode == "header" or mode == "footer":
1751 if mode == "header" or mode == "footer":
1751 yield (astyle.style_default, self.title)
1752 yield (astyle.style_default, self.title)
1752 else:
1753 else:
1753 yield (astyle.style_default, repr(self))
1754 yield (astyle.style_default, repr(self))
1754
1755
1755 def __xattrs__(self, mode):
1756 def __xattrs__(self, mode):
1756 if mode == "detail":
1757 if mode == "detail":
1757 return ("object", "mode", "title", "description")
1758 return ("object", "mode", "title", "description")
1758 return ("title", "description")
1759 return ("title", "description")
1759
1760
1760 def __xiter__(self, mode):
1761 def __xiter__(self, mode):
1761 return xiter(self.object, self.mode)
1762 return xiter(self.object, self.mode)
1762
1763
1763
1764
1764 class XAttr(object):
1765 class XAttr(object):
1765 def __init__(self, object, name):
1766 def __init__(self, object, name):
1766 self.name = _attrname(name)
1767 self.name = _attrname(name)
1767
1768
1768 try:
1769 try:
1769 self.value = _getattr(object, name)
1770 self.value = _getattr(object, name)
1770 except (KeyboardInterrupt, SystemExit):
1771 except (KeyboardInterrupt, SystemExit):
1771 raise
1772 raise
1772 except Exception, exc:
1773 except Exception, exc:
1773 if exc.__class__.__module__ == "exceptions":
1774 if exc.__class__.__module__ == "exceptions":
1774 self.value = exc.__class__.__name__
1775 self.value = exc.__class__.__name__
1775 else:
1776 else:
1776 self.value = "%s.%s" % \
1777 self.value = "%s.%s" % \
1777 (exc.__class__.__module__, exc.__class__.__name__)
1778 (exc.__class__.__module__, exc.__class__.__name__)
1778 self.type = self.value
1779 self.type = self.value
1779 else:
1780 else:
1780 t = type(self.value)
1781 t = type(self.value)
1781 if t.__module__ == "__builtin__":
1782 if t.__module__ == "__builtin__":
1782 self.type = t.__name__
1783 self.type = t.__name__
1783 else:
1784 else:
1784 self.type = "%s.%s" % (t.__module__, t.__name__)
1785 self.type = "%s.%s" % (t.__module__, t.__name__)
1785
1786
1786 doc = None
1787 doc = None
1787 if isinstance(name, basestring):
1788 if isinstance(name, basestring):
1788 if name.endswith("()"):
1789 if name.endswith("()"):
1789 doc = getattr(getattr(object, name[:-2]), "__doc__", None)
1790 doc = getattr(getattr(object, name[:-2]), "__doc__", None)
1790 else:
1791 else:
1791 try:
1792 try:
1792 meta = getattr(type(object), name)
1793 meta = getattr(type(object), name)
1793 except AttributeError:
1794 except AttributeError:
1794 pass
1795 pass
1795 else:
1796 else:
1796 if isinstance(meta, property):
1797 if isinstance(meta, property):
1797 doc = getattr(meta, "__doc__", None)
1798 doc = getattr(meta, "__doc__", None)
1798 elif callable(name):
1799 elif callable(name):
1799 doc = getattr(name, "__doc__", None)
1800 doc = getattr(name, "__doc__", None)
1800 if isinstance(doc, basestring):
1801 if isinstance(doc, basestring):
1801 doc = doc.strip()
1802 doc = doc.strip()
1802 self.doc = doc
1803 self.doc = doc
1803
1804
1804 def __xattrs__(self, mode):
1805 def __xattrs__(self, mode):
1805 return ("name", "type", "doc", "value")
1806 return ("name", "type", "doc", "value")
1806
1807
1807
1808
1808 try:
1809 try:
1809 from ibrowse import ibrowse
1810 from ibrowse import ibrowse
1810 except ImportError:
1811 except ImportError:
1811 # No curses (probably Windows) => use ``idump`` as the default display.
1812 # No curses (probably Windows) => use ``idump`` as the default display.
1812 defaultdisplay = idump
1813 defaultdisplay = idump
1813 else:
1814 else:
1814 defaultdisplay = ibrowse
1815 defaultdisplay = ibrowse
1815 __all__.append("ibrowse")
1816 __all__.append("ibrowse")
1816
1817
1817
1818
1818 # If we're running under IPython, install an IPython displayhook that
1819 # If we're running under IPython, install an IPython displayhook that
1819 # returns the object from Display.display(), else install a displayhook
1820 # returns the object from Display.display(), else install a displayhook
1820 # directly as sys.displayhook
1821 # directly as sys.displayhook
1821 api = None
1822 api = None
1822 if ipapi is not None:
1823 if ipapi is not None:
1823 try:
1824 try:
1824 api = ipapi.get()
1825 api = ipapi.get()
1825 except AttributeError:
1826 except AttributeError:
1826 pass
1827 pass
1827
1828
1828 if api is not None:
1829 if api is not None:
1829 def displayhook(self, obj):
1830 def displayhook(self, obj):
1830 if isinstance(obj, type) and issubclass(obj, Table):
1831 if isinstance(obj, type) and issubclass(obj, Table):
1831 obj = obj()
1832 obj = obj()
1832 if isinstance(obj, Table):
1833 if isinstance(obj, Table):
1833 obj = obj | defaultdisplay
1834 obj = obj | defaultdisplay
1834 if isinstance(obj, Display):
1835 if isinstance(obj, Display):
1835 return obj.display()
1836 return obj.display()
1836 else:
1837 else:
1837 raise ipapi.TryNext
1838 raise ipapi.TryNext
1838 api.set_hook("result_display", displayhook)
1839 api.set_hook("result_display", displayhook)
1839 else:
1840 else:
1840 def installdisplayhook():
1841 def installdisplayhook():
1841 _originalhook = sys.displayhook
1842 _originalhook = sys.displayhook
1842 def displayhook(obj):
1843 def displayhook(obj):
1843 if isinstance(obj, type) and issubclass(obj, Table):
1844 if isinstance(obj, type) and issubclass(obj, Table):
1844 obj = obj()
1845 obj = obj()
1845 if isinstance(obj, Table):
1846 if isinstance(obj, Table):
1846 obj = obj | defaultdisplay
1847 obj = obj | defaultdisplay
1847 if isinstance(obj, Display):
1848 if isinstance(obj, Display):
1848 return obj.display()
1849 return obj.display()
1849 else:
1850 else:
1850 _originalhook(obj)
1851 _originalhook(obj)
1851 sys.displayhook = displayhook
1852 sys.displayhook = displayhook
1852 installdisplayhook()
1853 installdisplayhook()
@@ -1,5668 +1,5673 b''
1 2006-07-27 Walter Doerwald <walter@livinglogic.de>
2
3 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
4 not running under IPython.
5
1 2006-07-26 Ville Vainio <vivainio@gmail.com>
6 2006-07-26 Ville Vainio <vivainio@gmail.com>
2
7
3 * iplib.py: history now stores multiline input as single
8 * iplib.py: history now stores multiline input as single
4 history entries. Patch by Jorgen Cederlof.
9 history entries. Patch by Jorgen Cederlof.
5
10
6 2006-07-18 Walter Doerwald <walter@livinglogic.de>
11 2006-07-18 Walter Doerwald <walter@livinglogic.de>
7
12
8 * IPython/Extensions/ibrowse.py (ix): Make cursor visible over
13 * IPython/Extensions/ibrowse.py: Make cursor visible over
9 non existing attributes.
14 non existing attributes.
10
15
11 2006-07-14 Walter Doerwald <walter@livinglogic.de>
16 2006-07-14 Walter Doerwald <walter@livinglogic.de>
12
17
13 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
18 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
14 error output of the running command doesn't mess up the screen.
19 error output of the running command doesn't mess up the screen.
15
20
16 2006-07-13 Walter Doerwald <walter@livinglogic.de>
21 2006-07-13 Walter Doerwald <walter@livinglogic.de>
17
22
18 * IPython/Extensions/ipipe.py (isort): Make isort usable without
23 * IPython/Extensions/ipipe.py (isort): Make isort usable without
19 argument. This sorts the items themselves.
24 argument. This sorts the items themselves.
20
25
21 2006-07-12 Walter Doerwald <walter@livinglogic.de>
26 2006-07-12 Walter Doerwald <walter@livinglogic.de>
22
27
23 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
28 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
24 Compile expression strings into code objects. This should speed
29 Compile expression strings into code objects. This should speed
25 up ifilter and friends somewhat.
30 up ifilter and friends somewhat.
26
31
27 2006-07-08 Ville Vainio <vivainio@gmail.com>
32 2006-07-08 Ville Vainio <vivainio@gmail.com>
28
33
29 * Magic.py: %cpaste now strips > from the beginning of lines
34 * Magic.py: %cpaste now strips > from the beginning of lines
30 to ease pasting quoted code from emails. Contributed by
35 to ease pasting quoted code from emails. Contributed by
31 Stefan van der Walt.
36 Stefan van der Walt.
32
37
33 2006-06-29 Ville Vainio <vivainio@gmail.com>
38 2006-06-29 Ville Vainio <vivainio@gmail.com>
34
39
35 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
40 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
36 mode, patch contributed by Darren Dale. NEEDS TESTING!
41 mode, patch contributed by Darren Dale. NEEDS TESTING!
37
42
38 2006-06-28 Walter Doerwald <walter@livinglogic.de>
43 2006-06-28 Walter Doerwald <walter@livinglogic.de>
39
44
40 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
45 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
41 a blue background. Fix fetching new display rows when the browser
46 a blue background. Fix fetching new display rows when the browser
42 scrolls more than a screenful (e.g. by using the goto command).
47 scrolls more than a screenful (e.g. by using the goto command).
43
48
44 2006-06-27 Ville Vainio <vivainio@gmail.com>
49 2006-06-27 Ville Vainio <vivainio@gmail.com>
45
50
46 * Magic.py (_inspect, _ofind) Apply David Huard's
51 * Magic.py (_inspect, _ofind) Apply David Huard's
47 patch for displaying the correct docstring for 'property'
52 patch for displaying the correct docstring for 'property'
48 attributes.
53 attributes.
49
54
50 2006-06-23 Walter Doerwald <walter@livinglogic.de>
55 2006-06-23 Walter Doerwald <walter@livinglogic.de>
51
56
52 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
57 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
53 commands into the methods implementing them.
58 commands into the methods implementing them.
54
59
55 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
60 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
56
61
57 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
62 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
58 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
63 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
59 autoindent support was authored by Jin Liu.
64 autoindent support was authored by Jin Liu.
60
65
61 2006-06-22 Walter Doerwald <walter@livinglogic.de>
66 2006-06-22 Walter Doerwald <walter@livinglogic.de>
62
67
63 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
68 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
64 for keymaps with a custom class that simplifies handling.
69 for keymaps with a custom class that simplifies handling.
65
70
66 2006-06-19 Walter Doerwald <walter@livinglogic.de>
71 2006-06-19 Walter Doerwald <walter@livinglogic.de>
67
72
68 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
73 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
69 resizing. This requires Python 2.5 to work.
74 resizing. This requires Python 2.5 to work.
70
75
71 2006-06-16 Walter Doerwald <walter@livinglogic.de>
76 2006-06-16 Walter Doerwald <walter@livinglogic.de>
72
77
73 * IPython/Extensions/ibrowse.py: Add two new commands to
78 * IPython/Extensions/ibrowse.py: Add two new commands to
74 ibrowse: "hideattr" (mapped to "h") hides the attribute under
79 ibrowse: "hideattr" (mapped to "h") hides the attribute under
75 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
80 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
76 attributes again. Remapped the help command to "?". Display
81 attributes again. Remapped the help command to "?". Display
77 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
82 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
78 as keys for the "home" and "end" commands. Add three new commands
83 as keys for the "home" and "end" commands. Add three new commands
79 to the input mode for "find" and friends: "delend" (CTRL-K)
84 to the input mode for "find" and friends: "delend" (CTRL-K)
80 deletes to the end of line. "incsearchup" searches upwards in the
85 deletes to the end of line. "incsearchup" searches upwards in the
81 command history for an input that starts with the text before the cursor.
86 command history for an input that starts with the text before the cursor.
82 "incsearchdown" does the same downwards. Removed a bogus mapping of
87 "incsearchdown" does the same downwards. Removed a bogus mapping of
83 the x key to "delete".
88 the x key to "delete".
84
89
85 2006-06-15 Ville Vainio <vivainio@gmail.com>
90 2006-06-15 Ville Vainio <vivainio@gmail.com>
86
91
87 * iplib.py, hooks.py: Added new generate_prompt hook that can be
92 * iplib.py, hooks.py: Added new generate_prompt hook that can be
88 used to create prompts dynamically, instead of the "old" way of
93 used to create prompts dynamically, instead of the "old" way of
89 assigning "magic" strings to prompt_in1 and prompt_in2. The old
94 assigning "magic" strings to prompt_in1 and prompt_in2. The old
90 way still works (it's invoked by the default hook), of course.
95 way still works (it's invoked by the default hook), of course.
91
96
92 * Prompts.py: added generate_output_prompt hook for altering output
97 * Prompts.py: added generate_output_prompt hook for altering output
93 prompt
98 prompt
94
99
95 * Release.py: Changed version string to 0.7.3.svn.
100 * Release.py: Changed version string to 0.7.3.svn.
96
101
97 2006-06-15 Walter Doerwald <walter@livinglogic.de>
102 2006-06-15 Walter Doerwald <walter@livinglogic.de>
98
103
99 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
104 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
100 the call to fetch() always tries to fetch enough data for at least one
105 the call to fetch() always tries to fetch enough data for at least one
101 full screen. This makes it possible to simply call moveto(0,0,True) in
106 full screen. This makes it possible to simply call moveto(0,0,True) in
102 the constructor. Fix typos and removed the obsolete goto attribute.
107 the constructor. Fix typos and removed the obsolete goto attribute.
103
108
104 2006-06-12 Ville Vainio <vivainio@gmail.com>
109 2006-06-12 Ville Vainio <vivainio@gmail.com>
105
110
106 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
111 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
107 allowing $variable interpolation within multiline statements,
112 allowing $variable interpolation within multiline statements,
108 though so far only with "sh" profile for a testing period.
113 though so far only with "sh" profile for a testing period.
109 The patch also enables splitting long commands with \ but it
114 The patch also enables splitting long commands with \ but it
110 doesn't work properly yet.
115 doesn't work properly yet.
111
116
112 2006-06-12 Walter Doerwald <walter@livinglogic.de>
117 2006-06-12 Walter Doerwald <walter@livinglogic.de>
113
118
114 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
119 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
115 input history and the position of the cursor in the input history for
120 input history and the position of the cursor in the input history for
116 the find, findbackwards and goto command.
121 the find, findbackwards and goto command.
117
122
118 2006-06-10 Walter Doerwald <walter@livinglogic.de>
123 2006-06-10 Walter Doerwald <walter@livinglogic.de>
119
124
120 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
125 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
121 implements the basic functionality of browser commands that require
126 implements the basic functionality of browser commands that require
122 input. Reimplement the goto, find and findbackwards commands as
127 input. Reimplement the goto, find and findbackwards commands as
123 subclasses of _CommandInput. Add an input history and keymaps to those
128 subclasses of _CommandInput. Add an input history and keymaps to those
124 commands. Add "\r" as a keyboard shortcut for the enterdefault and
129 commands. Add "\r" as a keyboard shortcut for the enterdefault and
125 execute commands.
130 execute commands.
126
131
127 2006-06-07 Ville Vainio <vivainio@gmail.com>
132 2006-06-07 Ville Vainio <vivainio@gmail.com>
128
133
129 * iplib.py: ipython mybatch.ipy exits ipython immediately after
134 * iplib.py: ipython mybatch.ipy exits ipython immediately after
130 running the batch files instead of leaving the session open.
135 running the batch files instead of leaving the session open.
131
136
132 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
137 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
133
138
134 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
139 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
135 the original fix was incomplete. Patch submitted by W. Maier.
140 the original fix was incomplete. Patch submitted by W. Maier.
136
141
137 2006-06-07 Ville Vainio <vivainio@gmail.com>
142 2006-06-07 Ville Vainio <vivainio@gmail.com>
138
143
139 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
144 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
140 Confirmation prompts can be supressed by 'quiet' option.
145 Confirmation prompts can be supressed by 'quiet' option.
141 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
146 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
142
147
143 2006-06-06 *** Released version 0.7.2
148 2006-06-06 *** Released version 0.7.2
144
149
145 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
150 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
146
151
147 * IPython/Release.py (version): Made 0.7.2 final for release.
152 * IPython/Release.py (version): Made 0.7.2 final for release.
148 Repo tagged and release cut.
153 Repo tagged and release cut.
149
154
150 2006-06-05 Ville Vainio <vivainio@gmail.com>
155 2006-06-05 Ville Vainio <vivainio@gmail.com>
151
156
152 * Magic.py (magic_rehashx): Honor no_alias list earlier in
157 * Magic.py (magic_rehashx): Honor no_alias list earlier in
153 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
158 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
154
159
155 * upgrade_dir.py: try import 'path' module a bit harder
160 * upgrade_dir.py: try import 'path' module a bit harder
156 (for %upgrade)
161 (for %upgrade)
157
162
158 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
163 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
159
164
160 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
165 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
161 instead of looping 20 times.
166 instead of looping 20 times.
162
167
163 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
168 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
164 correctly at initialization time. Bug reported by Krishna Mohan
169 correctly at initialization time. Bug reported by Krishna Mohan
165 Gundu <gkmohan-AT-gmail.com> on the user list.
170 Gundu <gkmohan-AT-gmail.com> on the user list.
166
171
167 * IPython/Release.py (version): Mark 0.7.2 version to start
172 * IPython/Release.py (version): Mark 0.7.2 version to start
168 testing for release on 06/06.
173 testing for release on 06/06.
169
174
170 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
175 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
171
176
172 * scripts/irunner: thin script interface so users don't have to
177 * scripts/irunner: thin script interface so users don't have to
173 find the module and call it as an executable, since modules rarely
178 find the module and call it as an executable, since modules rarely
174 live in people's PATH.
179 live in people's PATH.
175
180
176 * IPython/irunner.py (InteractiveRunner.__init__): added
181 * IPython/irunner.py (InteractiveRunner.__init__): added
177 delaybeforesend attribute to control delays with newer versions of
182 delaybeforesend attribute to control delays with newer versions of
178 pexpect. Thanks to detailed help from pexpect's author, Noah
183 pexpect. Thanks to detailed help from pexpect's author, Noah
179 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
184 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
180 correctly (it works in NoColor mode).
185 correctly (it works in NoColor mode).
181
186
182 * IPython/iplib.py (handle_normal): fix nasty crash reported on
187 * IPython/iplib.py (handle_normal): fix nasty crash reported on
183 SAGE list, from improper log() calls.
188 SAGE list, from improper log() calls.
184
189
185 2006-05-31 Ville Vainio <vivainio@gmail.com>
190 2006-05-31 Ville Vainio <vivainio@gmail.com>
186
191
187 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
192 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
188 with args in parens to work correctly with dirs that have spaces.
193 with args in parens to work correctly with dirs that have spaces.
189
194
190 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
195 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
191
196
192 * IPython/Logger.py (Logger.logstart): add option to log raw input
197 * IPython/Logger.py (Logger.logstart): add option to log raw input
193 instead of the processed one. A -r flag was added to the
198 instead of the processed one. A -r flag was added to the
194 %logstart magic used for controlling logging.
199 %logstart magic used for controlling logging.
195
200
196 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
201 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
197
202
198 * IPython/iplib.py (InteractiveShell.__init__): add check for the
203 * IPython/iplib.py (InteractiveShell.__init__): add check for the
199 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
204 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
200 recognize the option. After a bug report by Will Maier. This
205 recognize the option. After a bug report by Will Maier. This
201 closes #64 (will do it after confirmation from W. Maier).
206 closes #64 (will do it after confirmation from W. Maier).
202
207
203 * IPython/irunner.py: New module to run scripts as if manually
208 * IPython/irunner.py: New module to run scripts as if manually
204 typed into an interactive environment, based on pexpect. After a
209 typed into an interactive environment, based on pexpect. After a
205 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
210 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
206 ipython-user list. Simple unittests in the tests/ directory.
211 ipython-user list. Simple unittests in the tests/ directory.
207
212
208 * tools/release: add Will Maier, OpenBSD port maintainer, to
213 * tools/release: add Will Maier, OpenBSD port maintainer, to
209 recepients list. We are now officially part of the OpenBSD ports:
214 recepients list. We are now officially part of the OpenBSD ports:
210 http://www.openbsd.org/ports.html ! Many thanks to Will for the
215 http://www.openbsd.org/ports.html ! Many thanks to Will for the
211 work.
216 work.
212
217
213 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
218 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
214
219
215 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
220 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
216 so that it doesn't break tkinter apps.
221 so that it doesn't break tkinter apps.
217
222
218 * IPython/iplib.py (_prefilter): fix bug where aliases would
223 * IPython/iplib.py (_prefilter): fix bug where aliases would
219 shadow variables when autocall was fully off. Reported by SAGE
224 shadow variables when autocall was fully off. Reported by SAGE
220 author William Stein.
225 author William Stein.
221
226
222 * IPython/OInspect.py (Inspector.__init__): add a flag to control
227 * IPython/OInspect.py (Inspector.__init__): add a flag to control
223 at what detail level strings are computed when foo? is requested.
228 at what detail level strings are computed when foo? is requested.
224 This allows users to ask for example that the string form of an
229 This allows users to ask for example that the string form of an
225 object is only computed when foo?? is called, or even never, by
230 object is only computed when foo?? is called, or even never, by
226 setting the object_info_string_level >= 2 in the configuration
231 setting the object_info_string_level >= 2 in the configuration
227 file. This new option has been added and documented. After a
232 file. This new option has been added and documented. After a
228 request by SAGE to be able to control the printing of very large
233 request by SAGE to be able to control the printing of very large
229 objects more easily.
234 objects more easily.
230
235
231 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
236 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
232
237
233 * IPython/ipmaker.py (make_IPython): remove the ipython call path
238 * IPython/ipmaker.py (make_IPython): remove the ipython call path
234 from sys.argv, to be 100% consistent with how Python itself works
239 from sys.argv, to be 100% consistent with how Python itself works
235 (as seen for example with python -i file.py). After a bug report
240 (as seen for example with python -i file.py). After a bug report
236 by Jeffrey Collins.
241 by Jeffrey Collins.
237
242
238 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
243 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
239 nasty bug which was preventing custom namespaces with -pylab,
244 nasty bug which was preventing custom namespaces with -pylab,
240 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
245 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
241 compatibility (long gone from mpl).
246 compatibility (long gone from mpl).
242
247
243 * IPython/ipapi.py (make_session): name change: create->make. We
248 * IPython/ipapi.py (make_session): name change: create->make. We
244 use make in other places (ipmaker,...), it's shorter and easier to
249 use make in other places (ipmaker,...), it's shorter and easier to
245 type and say, etc. I'm trying to clean things before 0.7.2 so
250 type and say, etc. I'm trying to clean things before 0.7.2 so
246 that I can keep things stable wrt to ipapi in the chainsaw branch.
251 that I can keep things stable wrt to ipapi in the chainsaw branch.
247
252
248 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
253 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
249 python-mode recognizes our debugger mode. Add support for
254 python-mode recognizes our debugger mode. Add support for
250 autoindent inside (X)emacs. After a patch sent in by Jin Liu
255 autoindent inside (X)emacs. After a patch sent in by Jin Liu
251 <m.liu.jin-AT-gmail.com> originally written by
256 <m.liu.jin-AT-gmail.com> originally written by
252 doxgen-AT-newsmth.net (with minor modifications for xemacs
257 doxgen-AT-newsmth.net (with minor modifications for xemacs
253 compatibility)
258 compatibility)
254
259
255 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
260 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
256 tracebacks when walking the stack so that the stack tracking system
261 tracebacks when walking the stack so that the stack tracking system
257 in emacs' python-mode can identify the frames correctly.
262 in emacs' python-mode can identify the frames correctly.
258
263
259 * IPython/ipmaker.py (make_IPython): make the internal (and
264 * IPython/ipmaker.py (make_IPython): make the internal (and
260 default config) autoedit_syntax value false by default. Too many
265 default config) autoedit_syntax value false by default. Too many
261 users have complained to me (both on and off-list) about problems
266 users have complained to me (both on and off-list) about problems
262 with this option being on by default, so I'm making it default to
267 with this option being on by default, so I'm making it default to
263 off. It can still be enabled by anyone via the usual mechanisms.
268 off. It can still be enabled by anyone via the usual mechanisms.
264
269
265 * IPython/completer.py (Completer.attr_matches): add support for
270 * IPython/completer.py (Completer.attr_matches): add support for
266 PyCrust-style _getAttributeNames magic method. Patch contributed
271 PyCrust-style _getAttributeNames magic method. Patch contributed
267 by <mscott-AT-goldenspud.com>. Closes #50.
272 by <mscott-AT-goldenspud.com>. Closes #50.
268
273
269 * IPython/iplib.py (InteractiveShell.__init__): remove the
274 * IPython/iplib.py (InteractiveShell.__init__): remove the
270 deletion of exit/quit from __builtin__, which can break
275 deletion of exit/quit from __builtin__, which can break
271 third-party tools like the Zope debugging console. The
276 third-party tools like the Zope debugging console. The
272 %exit/%quit magics remain. In general, it's probably a good idea
277 %exit/%quit magics remain. In general, it's probably a good idea
273 not to delete anything from __builtin__, since we never know what
278 not to delete anything from __builtin__, since we never know what
274 that will break. In any case, python now (for 2.5) will support
279 that will break. In any case, python now (for 2.5) will support
275 'real' exit/quit, so this issue is moot. Closes #55.
280 'real' exit/quit, so this issue is moot. Closes #55.
276
281
277 * IPython/genutils.py (with_obj): rename the 'with' function to
282 * IPython/genutils.py (with_obj): rename the 'with' function to
278 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
283 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
279 becomes a language keyword. Closes #53.
284 becomes a language keyword. Closes #53.
280
285
281 * IPython/FakeModule.py (FakeModule.__init__): add a proper
286 * IPython/FakeModule.py (FakeModule.__init__): add a proper
282 __file__ attribute to this so it fools more things into thinking
287 __file__ attribute to this so it fools more things into thinking
283 it is a real module. Closes #59.
288 it is a real module. Closes #59.
284
289
285 * IPython/Magic.py (magic_edit): add -n option to open the editor
290 * IPython/Magic.py (magic_edit): add -n option to open the editor
286 at a specific line number. After a patch by Stefan van der Walt.
291 at a specific line number. After a patch by Stefan van der Walt.
287
292
288 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
293 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
289
294
290 * IPython/iplib.py (edit_syntax_error): fix crash when for some
295 * IPython/iplib.py (edit_syntax_error): fix crash when for some
291 reason the file could not be opened. After automatic crash
296 reason the file could not be opened. After automatic crash
292 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
297 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
293 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
298 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
294 (_should_recompile): Don't fire editor if using %bg, since there
299 (_should_recompile): Don't fire editor if using %bg, since there
295 is no file in the first place. From the same report as above.
300 is no file in the first place. From the same report as above.
296 (raw_input): protect against faulty third-party prefilters. After
301 (raw_input): protect against faulty third-party prefilters. After
297 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
302 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
298 while running under SAGE.
303 while running under SAGE.
299
304
300 2006-05-23 Ville Vainio <vivainio@gmail.com>
305 2006-05-23 Ville Vainio <vivainio@gmail.com>
301
306
302 * ipapi.py: Stripped down ip.to_user_ns() to work only as
307 * ipapi.py: Stripped down ip.to_user_ns() to work only as
303 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
308 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
304 now returns None (again), unless dummy is specifically allowed by
309 now returns None (again), unless dummy is specifically allowed by
305 ipapi.get(allow_dummy=True).
310 ipapi.get(allow_dummy=True).
306
311
307 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
312 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
308
313
309 * IPython: remove all 2.2-compatibility objects and hacks from
314 * IPython: remove all 2.2-compatibility objects and hacks from
310 everywhere, since we only support 2.3 at this point. Docs
315 everywhere, since we only support 2.3 at this point. Docs
311 updated.
316 updated.
312
317
313 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
318 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
314 Anything requiring extra validation can be turned into a Python
319 Anything requiring extra validation can be turned into a Python
315 property in the future. I used a property for the db one b/c
320 property in the future. I used a property for the db one b/c
316 there was a nasty circularity problem with the initialization
321 there was a nasty circularity problem with the initialization
317 order, which right now I don't have time to clean up.
322 order, which right now I don't have time to clean up.
318
323
319 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
324 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
320 another locking bug reported by Jorgen. I'm not 100% sure though,
325 another locking bug reported by Jorgen. I'm not 100% sure though,
321 so more testing is needed...
326 so more testing is needed...
322
327
323 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
328 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
324
329
325 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
330 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
326 local variables from any routine in user code (typically executed
331 local variables from any routine in user code (typically executed
327 with %run) directly into the interactive namespace. Very useful
332 with %run) directly into the interactive namespace. Very useful
328 when doing complex debugging.
333 when doing complex debugging.
329 (IPythonNotRunning): Changed the default None object to a dummy
334 (IPythonNotRunning): Changed the default None object to a dummy
330 whose attributes can be queried as well as called without
335 whose attributes can be queried as well as called without
331 exploding, to ease writing code which works transparently both in
336 exploding, to ease writing code which works transparently both in
332 and out of ipython and uses some of this API.
337 and out of ipython and uses some of this API.
333
338
334 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
339 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
335
340
336 * IPython/hooks.py (result_display): Fix the fact that our display
341 * IPython/hooks.py (result_display): Fix the fact that our display
337 hook was using str() instead of repr(), as the default python
342 hook was using str() instead of repr(), as the default python
338 console does. This had gone unnoticed b/c it only happened if
343 console does. This had gone unnoticed b/c it only happened if
339 %Pprint was off, but the inconsistency was there.
344 %Pprint was off, but the inconsistency was there.
340
345
341 2006-05-15 Ville Vainio <vivainio@gmail.com>
346 2006-05-15 Ville Vainio <vivainio@gmail.com>
342
347
343 * Oinspect.py: Only show docstring for nonexisting/binary files
348 * Oinspect.py: Only show docstring for nonexisting/binary files
344 when doing object??, closing ticket #62
349 when doing object??, closing ticket #62
345
350
346 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
351 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
347
352
348 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
353 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
349 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
354 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
350 was being released in a routine which hadn't checked if it had
355 was being released in a routine which hadn't checked if it had
351 been the one to acquire it.
356 been the one to acquire it.
352
357
353 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
358 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
354
359
355 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
360 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
356
361
357 2006-04-11 Ville Vainio <vivainio@gmail.com>
362 2006-04-11 Ville Vainio <vivainio@gmail.com>
358
363
359 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
364 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
360 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
365 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
361 prefilters, allowing stuff like magics and aliases in the file.
366 prefilters, allowing stuff like magics and aliases in the file.
362
367
363 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
368 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
364 added. Supported now are "%clear in" and "%clear out" (clear input and
369 added. Supported now are "%clear in" and "%clear out" (clear input and
365 output history, respectively). Also fixed CachedOutput.flush to
370 output history, respectively). Also fixed CachedOutput.flush to
366 properly flush the output cache.
371 properly flush the output cache.
367
372
368 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
373 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
369 half-success (and fail explicitly).
374 half-success (and fail explicitly).
370
375
371 2006-03-28 Ville Vainio <vivainio@gmail.com>
376 2006-03-28 Ville Vainio <vivainio@gmail.com>
372
377
373 * iplib.py: Fix quoting of aliases so that only argless ones
378 * iplib.py: Fix quoting of aliases so that only argless ones
374 are quoted
379 are quoted
375
380
376 2006-03-28 Ville Vainio <vivainio@gmail.com>
381 2006-03-28 Ville Vainio <vivainio@gmail.com>
377
382
378 * iplib.py: Quote aliases with spaces in the name.
383 * iplib.py: Quote aliases with spaces in the name.
379 "c:\program files\blah\bin" is now legal alias target.
384 "c:\program files\blah\bin" is now legal alias target.
380
385
381 * ext_rehashdir.py: Space no longer allowed as arg
386 * ext_rehashdir.py: Space no longer allowed as arg
382 separator, since space is legal in path names.
387 separator, since space is legal in path names.
383
388
384 2006-03-16 Ville Vainio <vivainio@gmail.com>
389 2006-03-16 Ville Vainio <vivainio@gmail.com>
385
390
386 * upgrade_dir.py: Take path.py from Extensions, correcting
391 * upgrade_dir.py: Take path.py from Extensions, correcting
387 %upgrade magic
392 %upgrade magic
388
393
389 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
394 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
390
395
391 * hooks.py: Only enclose editor binary in quotes if legal and
396 * hooks.py: Only enclose editor binary in quotes if legal and
392 necessary (space in the name, and is an existing file). Fixes a bug
397 necessary (space in the name, and is an existing file). Fixes a bug
393 reported by Zachary Pincus.
398 reported by Zachary Pincus.
394
399
395 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
400 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
396
401
397 * Manual: thanks to a tip on proper color handling for Emacs, by
402 * Manual: thanks to a tip on proper color handling for Emacs, by
398 Eric J Haywiser <ejh1-AT-MIT.EDU>.
403 Eric J Haywiser <ejh1-AT-MIT.EDU>.
399
404
400 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
405 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
401 by applying the provided patch. Thanks to Liu Jin
406 by applying the provided patch. Thanks to Liu Jin
402 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
407 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
403 XEmacs/Linux, I'm trusting the submitter that it actually helps
408 XEmacs/Linux, I'm trusting the submitter that it actually helps
404 under win32/GNU Emacs. Will revisit if any problems are reported.
409 under win32/GNU Emacs. Will revisit if any problems are reported.
405
410
406 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
411 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
407
412
408 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
413 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
409 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
414 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
410
415
411 2006-03-12 Ville Vainio <vivainio@gmail.com>
416 2006-03-12 Ville Vainio <vivainio@gmail.com>
412
417
413 * Magic.py (magic_timeit): Added %timeit magic, contributed by
418 * Magic.py (magic_timeit): Added %timeit magic, contributed by
414 Torsten Marek.
419 Torsten Marek.
415
420
416 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
421 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
417
422
418 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
423 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
419 line ranges works again.
424 line ranges works again.
420
425
421 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
426 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
422
427
423 * IPython/iplib.py (showtraceback): add back sys.last_traceback
428 * IPython/iplib.py (showtraceback): add back sys.last_traceback
424 and friends, after a discussion with Zach Pincus on ipython-user.
429 and friends, after a discussion with Zach Pincus on ipython-user.
425 I'm not 100% sure, but after thinking about it quite a bit, it may
430 I'm not 100% sure, but after thinking about it quite a bit, it may
426 be OK. Testing with the multithreaded shells didn't reveal any
431 be OK. Testing with the multithreaded shells didn't reveal any
427 problems, but let's keep an eye out.
432 problems, but let's keep an eye out.
428
433
429 In the process, I fixed a few things which were calling
434 In the process, I fixed a few things which were calling
430 self.InteractiveTB() directly (like safe_execfile), which is a
435 self.InteractiveTB() directly (like safe_execfile), which is a
431 mistake: ALL exception reporting should be done by calling
436 mistake: ALL exception reporting should be done by calling
432 self.showtraceback(), which handles state and tab-completion and
437 self.showtraceback(), which handles state and tab-completion and
433 more.
438 more.
434
439
435 2006-03-01 Ville Vainio <vivainio@gmail.com>
440 2006-03-01 Ville Vainio <vivainio@gmail.com>
436
441
437 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
442 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
438 To use, do "from ipipe import *".
443 To use, do "from ipipe import *".
439
444
440 2006-02-24 Ville Vainio <vivainio@gmail.com>
445 2006-02-24 Ville Vainio <vivainio@gmail.com>
441
446
442 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
447 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
443 "cleanly" and safely than the older upgrade mechanism.
448 "cleanly" and safely than the older upgrade mechanism.
444
449
445 2006-02-21 Ville Vainio <vivainio@gmail.com>
450 2006-02-21 Ville Vainio <vivainio@gmail.com>
446
451
447 * Magic.py: %save works again.
452 * Magic.py: %save works again.
448
453
449 2006-02-15 Ville Vainio <vivainio@gmail.com>
454 2006-02-15 Ville Vainio <vivainio@gmail.com>
450
455
451 * Magic.py: %Pprint works again
456 * Magic.py: %Pprint works again
452
457
453 * Extensions/ipy_sane_defaults.py: Provide everything provided
458 * Extensions/ipy_sane_defaults.py: Provide everything provided
454 in default ipythonrc, to make it possible to have a completely empty
459 in default ipythonrc, to make it possible to have a completely empty
455 ipythonrc (and thus completely rc-file free configuration)
460 ipythonrc (and thus completely rc-file free configuration)
456
461
457 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
462 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
458
463
459 * IPython/hooks.py (editor): quote the call to the editor command,
464 * IPython/hooks.py (editor): quote the call to the editor command,
460 to allow commands with spaces in them. Problem noted by watching
465 to allow commands with spaces in them. Problem noted by watching
461 Ian Oswald's video about textpad under win32 at
466 Ian Oswald's video about textpad under win32 at
462 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
467 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
463
468
464 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
469 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
465 describing magics (we haven't used @ for a loong time).
470 describing magics (we haven't used @ for a loong time).
466
471
467 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
472 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
468 contributed by marienz to close
473 contributed by marienz to close
469 http://www.scipy.net/roundup/ipython/issue53.
474 http://www.scipy.net/roundup/ipython/issue53.
470
475
471 2006-02-10 Ville Vainio <vivainio@gmail.com>
476 2006-02-10 Ville Vainio <vivainio@gmail.com>
472
477
473 * genutils.py: getoutput now works in win32 too
478 * genutils.py: getoutput now works in win32 too
474
479
475 * completer.py: alias and magic completion only invoked
480 * completer.py: alias and magic completion only invoked
476 at the first "item" in the line, to avoid "cd %store"
481 at the first "item" in the line, to avoid "cd %store"
477 nonsense.
482 nonsense.
478
483
479 2006-02-09 Ville Vainio <vivainio@gmail.com>
484 2006-02-09 Ville Vainio <vivainio@gmail.com>
480
485
481 * test/*: Added a unit testing framework (finally).
486 * test/*: Added a unit testing framework (finally).
482 '%run runtests.py' to run test_*.
487 '%run runtests.py' to run test_*.
483
488
484 * ipapi.py: Exposed runlines and set_custom_exc
489 * ipapi.py: Exposed runlines and set_custom_exc
485
490
486 2006-02-07 Ville Vainio <vivainio@gmail.com>
491 2006-02-07 Ville Vainio <vivainio@gmail.com>
487
492
488 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
493 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
489 instead use "f(1 2)" as before.
494 instead use "f(1 2)" as before.
490
495
491 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
496 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
492
497
493 * IPython/demo.py (IPythonDemo): Add new classes to the demo
498 * IPython/demo.py (IPythonDemo): Add new classes to the demo
494 facilities, for demos processed by the IPython input filter
499 facilities, for demos processed by the IPython input filter
495 (IPythonDemo), and for running a script one-line-at-a-time as a
500 (IPythonDemo), and for running a script one-line-at-a-time as a
496 demo, both for pure Python (LineDemo) and for IPython-processed
501 demo, both for pure Python (LineDemo) and for IPython-processed
497 input (IPythonLineDemo). After a request by Dave Kohel, from the
502 input (IPythonLineDemo). After a request by Dave Kohel, from the
498 SAGE team.
503 SAGE team.
499 (Demo.edit): added an edit() method to the demo objects, to edit
504 (Demo.edit): added an edit() method to the demo objects, to edit
500 the in-memory copy of the last executed block.
505 the in-memory copy of the last executed block.
501
506
502 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
507 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
503 processing to %edit, %macro and %save. These commands can now be
508 processing to %edit, %macro and %save. These commands can now be
504 invoked on the unprocessed input as it was typed by the user
509 invoked on the unprocessed input as it was typed by the user
505 (without any prefilters applied). After requests by the SAGE team
510 (without any prefilters applied). After requests by the SAGE team
506 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
511 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
507
512
508 2006-02-01 Ville Vainio <vivainio@gmail.com>
513 2006-02-01 Ville Vainio <vivainio@gmail.com>
509
514
510 * setup.py, eggsetup.py: easy_install ipython==dev works
515 * setup.py, eggsetup.py: easy_install ipython==dev works
511 correctly now (on Linux)
516 correctly now (on Linux)
512
517
513 * ipy_user_conf,ipmaker: user config changes, removed spurious
518 * ipy_user_conf,ipmaker: user config changes, removed spurious
514 warnings
519 warnings
515
520
516 * iplib: if rc.banner is string, use it as is.
521 * iplib: if rc.banner is string, use it as is.
517
522
518 * Magic: %pycat accepts a string argument and pages it's contents.
523 * Magic: %pycat accepts a string argument and pages it's contents.
519
524
520
525
521 2006-01-30 Ville Vainio <vivainio@gmail.com>
526 2006-01-30 Ville Vainio <vivainio@gmail.com>
522
527
523 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
528 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
524 Now %store and bookmarks work through PickleShare, meaning that
529 Now %store and bookmarks work through PickleShare, meaning that
525 concurrent access is possible and all ipython sessions see the
530 concurrent access is possible and all ipython sessions see the
526 same database situation all the time, instead of snapshot of
531 same database situation all the time, instead of snapshot of
527 the situation when the session was started. Hence, %bookmark
532 the situation when the session was started. Hence, %bookmark
528 results are immediately accessible from othes sessions. The database
533 results are immediately accessible from othes sessions. The database
529 is also available for use by user extensions. See:
534 is also available for use by user extensions. See:
530 http://www.python.org/pypi/pickleshare
535 http://www.python.org/pypi/pickleshare
531
536
532 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
537 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
533
538
534 * aliases can now be %store'd
539 * aliases can now be %store'd
535
540
536 * path.py moved to Extensions so that pickleshare does not need
541 * path.py moved to Extensions so that pickleshare does not need
537 IPython-specific import. Extensions added to pythonpath right
542 IPython-specific import. Extensions added to pythonpath right
538 at __init__.
543 at __init__.
539
544
540 * iplib.py: ipalias deprecated/redundant; aliases are converted and
545 * iplib.py: ipalias deprecated/redundant; aliases are converted and
541 called with _ip.system and the pre-transformed command string.
546 called with _ip.system and the pre-transformed command string.
542
547
543 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
548 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
544
549
545 * IPython/iplib.py (interact): Fix that we were not catching
550 * IPython/iplib.py (interact): Fix that we were not catching
546 KeyboardInterrupt exceptions properly. I'm not quite sure why the
551 KeyboardInterrupt exceptions properly. I'm not quite sure why the
547 logic here had to change, but it's fixed now.
552 logic here had to change, but it's fixed now.
548
553
549 2006-01-29 Ville Vainio <vivainio@gmail.com>
554 2006-01-29 Ville Vainio <vivainio@gmail.com>
550
555
551 * iplib.py: Try to import pyreadline on Windows.
556 * iplib.py: Try to import pyreadline on Windows.
552
557
553 2006-01-27 Ville Vainio <vivainio@gmail.com>
558 2006-01-27 Ville Vainio <vivainio@gmail.com>
554
559
555 * iplib.py: Expose ipapi as _ip in builtin namespace.
560 * iplib.py: Expose ipapi as _ip in builtin namespace.
556 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
561 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
557 and ip_set_hook (-> _ip.set_hook) redundant. % and !
562 and ip_set_hook (-> _ip.set_hook) redundant. % and !
558 syntax now produce _ip.* variant of the commands.
563 syntax now produce _ip.* variant of the commands.
559
564
560 * "_ip.options().autoedit_syntax = 2" automatically throws
565 * "_ip.options().autoedit_syntax = 2" automatically throws
561 user to editor for syntax error correction without prompting.
566 user to editor for syntax error correction without prompting.
562
567
563 2006-01-27 Ville Vainio <vivainio@gmail.com>
568 2006-01-27 Ville Vainio <vivainio@gmail.com>
564
569
565 * ipmaker.py: Give "realistic" sys.argv for scripts (without
570 * ipmaker.py: Give "realistic" sys.argv for scripts (without
566 'ipython' at argv[0]) executed through command line.
571 'ipython' at argv[0]) executed through command line.
567 NOTE: this DEPRECATES calling ipython with multiple scripts
572 NOTE: this DEPRECATES calling ipython with multiple scripts
568 ("ipython a.py b.py c.py")
573 ("ipython a.py b.py c.py")
569
574
570 * iplib.py, hooks.py: Added configurable input prefilter,
575 * iplib.py, hooks.py: Added configurable input prefilter,
571 named 'input_prefilter'. See ext_rescapture.py for example
576 named 'input_prefilter'. See ext_rescapture.py for example
572 usage.
577 usage.
573
578
574 * ext_rescapture.py, Magic.py: Better system command output capture
579 * ext_rescapture.py, Magic.py: Better system command output capture
575 through 'var = !ls' (deprecates user-visible %sc). Same notation
580 through 'var = !ls' (deprecates user-visible %sc). Same notation
576 applies for magics, 'var = %alias' assigns alias list to var.
581 applies for magics, 'var = %alias' assigns alias list to var.
577
582
578 * ipapi.py: added meta() for accessing extension-usable data store.
583 * ipapi.py: added meta() for accessing extension-usable data store.
579
584
580 * iplib.py: added InteractiveShell.getapi(). New magics should be
585 * iplib.py: added InteractiveShell.getapi(). New magics should be
581 written doing self.getapi() instead of using the shell directly.
586 written doing self.getapi() instead of using the shell directly.
582
587
583 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
588 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
584 %store foo >> ~/myfoo.txt to store variables to files (in clean
589 %store foo >> ~/myfoo.txt to store variables to files (in clean
585 textual form, not a restorable pickle).
590 textual form, not a restorable pickle).
586
591
587 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
592 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
588
593
589 * usage.py, Magic.py: added %quickref
594 * usage.py, Magic.py: added %quickref
590
595
591 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
596 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
592
597
593 * GetoptErrors when invoking magics etc. with wrong args
598 * GetoptErrors when invoking magics etc. with wrong args
594 are now more helpful:
599 are now more helpful:
595 GetoptError: option -l not recognized (allowed: "qb" )
600 GetoptError: option -l not recognized (allowed: "qb" )
596
601
597 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
602 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
598
603
599 * IPython/demo.py (Demo.show): Flush stdout after each block, so
604 * IPython/demo.py (Demo.show): Flush stdout after each block, so
600 computationally intensive blocks don't appear to stall the demo.
605 computationally intensive blocks don't appear to stall the demo.
601
606
602 2006-01-24 Ville Vainio <vivainio@gmail.com>
607 2006-01-24 Ville Vainio <vivainio@gmail.com>
603
608
604 * iplib.py, hooks.py: 'result_display' hook can return a non-None
609 * iplib.py, hooks.py: 'result_display' hook can return a non-None
605 value to manipulate resulting history entry.
610 value to manipulate resulting history entry.
606
611
607 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
612 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
608 to instance methods of IPApi class, to make extending an embedded
613 to instance methods of IPApi class, to make extending an embedded
609 IPython feasible. See ext_rehashdir.py for example usage.
614 IPython feasible. See ext_rehashdir.py for example usage.
610
615
611 * Merged 1071-1076 from branches/0.7.1
616 * Merged 1071-1076 from branches/0.7.1
612
617
613
618
614 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
619 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
615
620
616 * tools/release (daystamp): Fix build tools to use the new
621 * tools/release (daystamp): Fix build tools to use the new
617 eggsetup.py script to build lightweight eggs.
622 eggsetup.py script to build lightweight eggs.
618
623
619 * Applied changesets 1062 and 1064 before 0.7.1 release.
624 * Applied changesets 1062 and 1064 before 0.7.1 release.
620
625
621 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
626 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
622 see the raw input history (without conversions like %ls ->
627 see the raw input history (without conversions like %ls ->
623 ipmagic("ls")). After a request from W. Stein, SAGE
628 ipmagic("ls")). After a request from W. Stein, SAGE
624 (http://modular.ucsd.edu/sage) developer. This information is
629 (http://modular.ucsd.edu/sage) developer. This information is
625 stored in the input_hist_raw attribute of the IPython instance, so
630 stored in the input_hist_raw attribute of the IPython instance, so
626 developers can access it if needed (it's an InputList instance).
631 developers can access it if needed (it's an InputList instance).
627
632
628 * Versionstring = 0.7.2.svn
633 * Versionstring = 0.7.2.svn
629
634
630 * eggsetup.py: A separate script for constructing eggs, creates
635 * eggsetup.py: A separate script for constructing eggs, creates
631 proper launch scripts even on Windows (an .exe file in
636 proper launch scripts even on Windows (an .exe file in
632 \python24\scripts).
637 \python24\scripts).
633
638
634 * ipapi.py: launch_new_instance, launch entry point needed for the
639 * ipapi.py: launch_new_instance, launch entry point needed for the
635 egg.
640 egg.
636
641
637 2006-01-23 Ville Vainio <vivainio@gmail.com>
642 2006-01-23 Ville Vainio <vivainio@gmail.com>
638
643
639 * Added %cpaste magic for pasting python code
644 * Added %cpaste magic for pasting python code
640
645
641 2006-01-22 Ville Vainio <vivainio@gmail.com>
646 2006-01-22 Ville Vainio <vivainio@gmail.com>
642
647
643 * Merge from branches/0.7.1 into trunk, revs 1052-1057
648 * Merge from branches/0.7.1 into trunk, revs 1052-1057
644
649
645 * Versionstring = 0.7.2.svn
650 * Versionstring = 0.7.2.svn
646
651
647 * eggsetup.py: A separate script for constructing eggs, creates
652 * eggsetup.py: A separate script for constructing eggs, creates
648 proper launch scripts even on Windows (an .exe file in
653 proper launch scripts even on Windows (an .exe file in
649 \python24\scripts).
654 \python24\scripts).
650
655
651 * ipapi.py: launch_new_instance, launch entry point needed for the
656 * ipapi.py: launch_new_instance, launch entry point needed for the
652 egg.
657 egg.
653
658
654 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
659 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
655
660
656 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
661 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
657 %pfile foo would print the file for foo even if it was a binary.
662 %pfile foo would print the file for foo even if it was a binary.
658 Now, extensions '.so' and '.dll' are skipped.
663 Now, extensions '.so' and '.dll' are skipped.
659
664
660 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
665 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
661 bug, where macros would fail in all threaded modes. I'm not 100%
666 bug, where macros would fail in all threaded modes. I'm not 100%
662 sure, so I'm going to put out an rc instead of making a release
667 sure, so I'm going to put out an rc instead of making a release
663 today, and wait for feedback for at least a few days.
668 today, and wait for feedback for at least a few days.
664
669
665 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
670 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
666 it...) the handling of pasting external code with autoindent on.
671 it...) the handling of pasting external code with autoindent on.
667 To get out of a multiline input, the rule will appear for most
672 To get out of a multiline input, the rule will appear for most
668 users unchanged: two blank lines or change the indent level
673 users unchanged: two blank lines or change the indent level
669 proposed by IPython. But there is a twist now: you can
674 proposed by IPython. But there is a twist now: you can
670 add/subtract only *one or two spaces*. If you add/subtract three
675 add/subtract only *one or two spaces*. If you add/subtract three
671 or more (unless you completely delete the line), IPython will
676 or more (unless you completely delete the line), IPython will
672 accept that line, and you'll need to enter a second one of pure
677 accept that line, and you'll need to enter a second one of pure
673 whitespace. I know it sounds complicated, but I can't find a
678 whitespace. I know it sounds complicated, but I can't find a
674 different solution that covers all the cases, with the right
679 different solution that covers all the cases, with the right
675 heuristics. Hopefully in actual use, nobody will really notice
680 heuristics. Hopefully in actual use, nobody will really notice
676 all these strange rules and things will 'just work'.
681 all these strange rules and things will 'just work'.
677
682
678 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
683 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
679
684
680 * IPython/iplib.py (interact): catch exceptions which can be
685 * IPython/iplib.py (interact): catch exceptions which can be
681 triggered asynchronously by signal handlers. Thanks to an
686 triggered asynchronously by signal handlers. Thanks to an
682 automatic crash report, submitted by Colin Kingsley
687 automatic crash report, submitted by Colin Kingsley
683 <tercel-AT-gentoo.org>.
688 <tercel-AT-gentoo.org>.
684
689
685 2006-01-20 Ville Vainio <vivainio@gmail.com>
690 2006-01-20 Ville Vainio <vivainio@gmail.com>
686
691
687 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
692 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
688 (%rehashdir, very useful, try it out) of how to extend ipython
693 (%rehashdir, very useful, try it out) of how to extend ipython
689 with new magics. Also added Extensions dir to pythonpath to make
694 with new magics. Also added Extensions dir to pythonpath to make
690 importing extensions easy.
695 importing extensions easy.
691
696
692 * %store now complains when trying to store interactively declared
697 * %store now complains when trying to store interactively declared
693 classes / instances of those classes.
698 classes / instances of those classes.
694
699
695 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
700 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
696 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
701 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
697 if they exist, and ipy_user_conf.py with some defaults is created for
702 if they exist, and ipy_user_conf.py with some defaults is created for
698 the user.
703 the user.
699
704
700 * Startup rehashing done by the config file, not InterpreterExec.
705 * Startup rehashing done by the config file, not InterpreterExec.
701 This means system commands are available even without selecting the
706 This means system commands are available even without selecting the
702 pysh profile. It's the sensible default after all.
707 pysh profile. It's the sensible default after all.
703
708
704 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
709 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
705
710
706 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
711 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
707 multiline code with autoindent on working. But I am really not
712 multiline code with autoindent on working. But I am really not
708 sure, so this needs more testing. Will commit a debug-enabled
713 sure, so this needs more testing. Will commit a debug-enabled
709 version for now, while I test it some more, so that Ville and
714 version for now, while I test it some more, so that Ville and
710 others may also catch any problems. Also made
715 others may also catch any problems. Also made
711 self.indent_current_str() a method, to ensure that there's no
716 self.indent_current_str() a method, to ensure that there's no
712 chance of the indent space count and the corresponding string
717 chance of the indent space count and the corresponding string
713 falling out of sync. All code needing the string should just call
718 falling out of sync. All code needing the string should just call
714 the method.
719 the method.
715
720
716 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
721 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
717
722
718 * IPython/Magic.py (magic_edit): fix check for when users don't
723 * IPython/Magic.py (magic_edit): fix check for when users don't
719 save their output files, the try/except was in the wrong section.
724 save their output files, the try/except was in the wrong section.
720
725
721 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
726 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
722
727
723 * IPython/Magic.py (magic_run): fix __file__ global missing from
728 * IPython/Magic.py (magic_run): fix __file__ global missing from
724 script's namespace when executed via %run. After a report by
729 script's namespace when executed via %run. After a report by
725 Vivian.
730 Vivian.
726
731
727 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
732 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
728 when using python 2.4. The parent constructor changed in 2.4, and
733 when using python 2.4. The parent constructor changed in 2.4, and
729 we need to track it directly (we can't call it, as it messes up
734 we need to track it directly (we can't call it, as it messes up
730 readline and tab-completion inside our pdb would stop working).
735 readline and tab-completion inside our pdb would stop working).
731 After a bug report by R. Bernstein <rocky-AT-panix.com>.
736 After a bug report by R. Bernstein <rocky-AT-panix.com>.
732
737
733 2006-01-16 Ville Vainio <vivainio@gmail.com>
738 2006-01-16 Ville Vainio <vivainio@gmail.com>
734
739
735 * Ipython/magic.py: Reverted back to old %edit functionality
740 * Ipython/magic.py: Reverted back to old %edit functionality
736 that returns file contents on exit.
741 that returns file contents on exit.
737
742
738 * IPython/path.py: Added Jason Orendorff's "path" module to
743 * IPython/path.py: Added Jason Orendorff's "path" module to
739 IPython tree, http://www.jorendorff.com/articles/python/path/.
744 IPython tree, http://www.jorendorff.com/articles/python/path/.
740 You can get path objects conveniently through %sc, and !!, e.g.:
745 You can get path objects conveniently through %sc, and !!, e.g.:
741 sc files=ls
746 sc files=ls
742 for p in files.paths: # or files.p
747 for p in files.paths: # or files.p
743 print p,p.mtime
748 print p,p.mtime
744
749
745 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
750 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
746 now work again without considering the exclusion regexp -
751 now work again without considering the exclusion regexp -
747 hence, things like ',foo my/path' turn to 'foo("my/path")'
752 hence, things like ',foo my/path' turn to 'foo("my/path")'
748 instead of syntax error.
753 instead of syntax error.
749
754
750
755
751 2006-01-14 Ville Vainio <vivainio@gmail.com>
756 2006-01-14 Ville Vainio <vivainio@gmail.com>
752
757
753 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
758 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
754 ipapi decorators for python 2.4 users, options() provides access to rc
759 ipapi decorators for python 2.4 users, options() provides access to rc
755 data.
760 data.
756
761
757 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
762 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
758 as path separators (even on Linux ;-). Space character after
763 as path separators (even on Linux ;-). Space character after
759 backslash (as yielded by tab completer) is still space;
764 backslash (as yielded by tab completer) is still space;
760 "%cd long\ name" works as expected.
765 "%cd long\ name" works as expected.
761
766
762 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
767 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
763 as "chain of command", with priority. API stays the same,
768 as "chain of command", with priority. API stays the same,
764 TryNext exception raised by a hook function signals that
769 TryNext exception raised by a hook function signals that
765 current hook failed and next hook should try handling it, as
770 current hook failed and next hook should try handling it, as
766 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
771 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
767 requested configurable display hook, which is now implemented.
772 requested configurable display hook, which is now implemented.
768
773
769 2006-01-13 Ville Vainio <vivainio@gmail.com>
774 2006-01-13 Ville Vainio <vivainio@gmail.com>
770
775
771 * IPython/platutils*.py: platform specific utility functions,
776 * IPython/platutils*.py: platform specific utility functions,
772 so far only set_term_title is implemented (change terminal
777 so far only set_term_title is implemented (change terminal
773 label in windowing systems). %cd now changes the title to
778 label in windowing systems). %cd now changes the title to
774 current dir.
779 current dir.
775
780
776 * IPython/Release.py: Added myself to "authors" list,
781 * IPython/Release.py: Added myself to "authors" list,
777 had to create new files.
782 had to create new files.
778
783
779 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
784 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
780 shell escape; not a known bug but had potential to be one in the
785 shell escape; not a known bug but had potential to be one in the
781 future.
786 future.
782
787
783 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
788 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
784 extension API for IPython! See the module for usage example. Fix
789 extension API for IPython! See the module for usage example. Fix
785 OInspect for docstring-less magic functions.
790 OInspect for docstring-less magic functions.
786
791
787
792
788 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
793 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
789
794
790 * IPython/iplib.py (raw_input): temporarily deactivate all
795 * IPython/iplib.py (raw_input): temporarily deactivate all
791 attempts at allowing pasting of code with autoindent on. It
796 attempts at allowing pasting of code with autoindent on. It
792 introduced bugs (reported by Prabhu) and I can't seem to find a
797 introduced bugs (reported by Prabhu) and I can't seem to find a
793 robust combination which works in all cases. Will have to revisit
798 robust combination which works in all cases. Will have to revisit
794 later.
799 later.
795
800
796 * IPython/genutils.py: remove isspace() function. We've dropped
801 * IPython/genutils.py: remove isspace() function. We've dropped
797 2.2 compatibility, so it's OK to use the string method.
802 2.2 compatibility, so it's OK to use the string method.
798
803
799 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
804 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
800
805
801 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
806 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
802 matching what NOT to autocall on, to include all python binary
807 matching what NOT to autocall on, to include all python binary
803 operators (including things like 'and', 'or', 'is' and 'in').
808 operators (including things like 'and', 'or', 'is' and 'in').
804 Prompted by a bug report on 'foo & bar', but I realized we had
809 Prompted by a bug report on 'foo & bar', but I realized we had
805 many more potential bug cases with other operators. The regexp is
810 many more potential bug cases with other operators. The regexp is
806 self.re_exclude_auto, it's fairly commented.
811 self.re_exclude_auto, it's fairly commented.
807
812
808 2006-01-12 Ville Vainio <vivainio@gmail.com>
813 2006-01-12 Ville Vainio <vivainio@gmail.com>
809
814
810 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
815 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
811 Prettified and hardened string/backslash quoting with ipsystem(),
816 Prettified and hardened string/backslash quoting with ipsystem(),
812 ipalias() and ipmagic(). Now even \ characters are passed to
817 ipalias() and ipmagic(). Now even \ characters are passed to
813 %magics, !shell escapes and aliases exactly as they are in the
818 %magics, !shell escapes and aliases exactly as they are in the
814 ipython command line. Should improve backslash experience,
819 ipython command line. Should improve backslash experience,
815 particularly in Windows (path delimiter for some commands that
820 particularly in Windows (path delimiter for some commands that
816 won't understand '/'), but Unix benefits as well (regexps). %cd
821 won't understand '/'), but Unix benefits as well (regexps). %cd
817 magic still doesn't support backslash path delimiters, though. Also
822 magic still doesn't support backslash path delimiters, though. Also
818 deleted all pretense of supporting multiline command strings in
823 deleted all pretense of supporting multiline command strings in
819 !system or %magic commands. Thanks to Jerry McRae for suggestions.
824 !system or %magic commands. Thanks to Jerry McRae for suggestions.
820
825
821 * doc/build_doc_instructions.txt added. Documentation on how to
826 * doc/build_doc_instructions.txt added. Documentation on how to
822 use doc/update_manual.py, added yesterday. Both files contributed
827 use doc/update_manual.py, added yesterday. Both files contributed
823 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
828 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
824 doc/*.sh for deprecation at a later date.
829 doc/*.sh for deprecation at a later date.
825
830
826 * /ipython.py Added ipython.py to root directory for
831 * /ipython.py Added ipython.py to root directory for
827 zero-installation (tar xzvf ipython.tgz; cd ipython; python
832 zero-installation (tar xzvf ipython.tgz; cd ipython; python
828 ipython.py) and development convenience (no need to keep doing
833 ipython.py) and development convenience (no need to keep doing
829 "setup.py install" between changes).
834 "setup.py install" between changes).
830
835
831 * Made ! and !! shell escapes work (again) in multiline expressions:
836 * Made ! and !! shell escapes work (again) in multiline expressions:
832 if 1:
837 if 1:
833 !ls
838 !ls
834 !!ls
839 !!ls
835
840
836 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
841 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
837
842
838 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
843 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
839 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
844 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
840 module in case-insensitive installation. Was causing crashes
845 module in case-insensitive installation. Was causing crashes
841 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
846 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
842
847
843 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
848 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
844 <marienz-AT-gentoo.org>, closes
849 <marienz-AT-gentoo.org>, closes
845 http://www.scipy.net/roundup/ipython/issue51.
850 http://www.scipy.net/roundup/ipython/issue51.
846
851
847 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
852 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
848
853
849 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
854 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
850 problem of excessive CPU usage under *nix and keyboard lag under
855 problem of excessive CPU usage under *nix and keyboard lag under
851 win32.
856 win32.
852
857
853 2006-01-10 *** Released version 0.7.0
858 2006-01-10 *** Released version 0.7.0
854
859
855 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
860 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
856
861
857 * IPython/Release.py (revision): tag version number to 0.7.0,
862 * IPython/Release.py (revision): tag version number to 0.7.0,
858 ready for release.
863 ready for release.
859
864
860 * IPython/Magic.py (magic_edit): Add print statement to %edit so
865 * IPython/Magic.py (magic_edit): Add print statement to %edit so
861 it informs the user of the name of the temp. file used. This can
866 it informs the user of the name of the temp. file used. This can
862 help if you decide later to reuse that same file, so you know
867 help if you decide later to reuse that same file, so you know
863 where to copy the info from.
868 where to copy the info from.
864
869
865 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
870 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
866
871
867 * setup_bdist_egg.py: little script to build an egg. Added
872 * setup_bdist_egg.py: little script to build an egg. Added
868 support in the release tools as well.
873 support in the release tools as well.
869
874
870 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
875 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
871
876
872 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
877 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
873 version selection (new -wxversion command line and ipythonrc
878 version selection (new -wxversion command line and ipythonrc
874 parameter). Patch contributed by Arnd Baecker
879 parameter). Patch contributed by Arnd Baecker
875 <arnd.baecker-AT-web.de>.
880 <arnd.baecker-AT-web.de>.
876
881
877 * IPython/iplib.py (embed_mainloop): fix tab-completion in
882 * IPython/iplib.py (embed_mainloop): fix tab-completion in
878 embedded instances, for variables defined at the interactive
883 embedded instances, for variables defined at the interactive
879 prompt of the embedded ipython. Reported by Arnd.
884 prompt of the embedded ipython. Reported by Arnd.
880
885
881 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
886 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
882 it can be used as a (stateful) toggle, or with a direct parameter.
887 it can be used as a (stateful) toggle, or with a direct parameter.
883
888
884 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
889 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
885 could be triggered in certain cases and cause the traceback
890 could be triggered in certain cases and cause the traceback
886 printer not to work.
891 printer not to work.
887
892
888 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
893 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
889
894
890 * IPython/iplib.py (_should_recompile): Small fix, closes
895 * IPython/iplib.py (_should_recompile): Small fix, closes
891 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
896 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
892
897
893 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
898 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
894
899
895 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
900 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
896 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
901 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
897 Moad for help with tracking it down.
902 Moad for help with tracking it down.
898
903
899 * IPython/iplib.py (handle_auto): fix autocall handling for
904 * IPython/iplib.py (handle_auto): fix autocall handling for
900 objects which support BOTH __getitem__ and __call__ (so that f [x]
905 objects which support BOTH __getitem__ and __call__ (so that f [x]
901 is left alone, instead of becoming f([x]) automatically).
906 is left alone, instead of becoming f([x]) automatically).
902
907
903 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
908 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
904 Ville's patch.
909 Ville's patch.
905
910
906 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
911 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
907
912
908 * IPython/iplib.py (handle_auto): changed autocall semantics to
913 * IPython/iplib.py (handle_auto): changed autocall semantics to
909 include 'smart' mode, where the autocall transformation is NOT
914 include 'smart' mode, where the autocall transformation is NOT
910 applied if there are no arguments on the line. This allows you to
915 applied if there are no arguments on the line. This allows you to
911 just type 'foo' if foo is a callable to see its internal form,
916 just type 'foo' if foo is a callable to see its internal form,
912 instead of having it called with no arguments (typically a
917 instead of having it called with no arguments (typically a
913 mistake). The old 'full' autocall still exists: for that, you
918 mistake). The old 'full' autocall still exists: for that, you
914 need to set the 'autocall' parameter to 2 in your ipythonrc file.
919 need to set the 'autocall' parameter to 2 in your ipythonrc file.
915
920
916 * IPython/completer.py (Completer.attr_matches): add
921 * IPython/completer.py (Completer.attr_matches): add
917 tab-completion support for Enthoughts' traits. After a report by
922 tab-completion support for Enthoughts' traits. After a report by
918 Arnd and a patch by Prabhu.
923 Arnd and a patch by Prabhu.
919
924
920 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
925 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
921
926
922 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
927 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
923 Schmolck's patch to fix inspect.getinnerframes().
928 Schmolck's patch to fix inspect.getinnerframes().
924
929
925 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
930 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
926 for embedded instances, regarding handling of namespaces and items
931 for embedded instances, regarding handling of namespaces and items
927 added to the __builtin__ one. Multiple embedded instances and
932 added to the __builtin__ one. Multiple embedded instances and
928 recursive embeddings should work better now (though I'm not sure
933 recursive embeddings should work better now (though I'm not sure
929 I've got all the corner cases fixed, that code is a bit of a brain
934 I've got all the corner cases fixed, that code is a bit of a brain
930 twister).
935 twister).
931
936
932 * IPython/Magic.py (magic_edit): added support to edit in-memory
937 * IPython/Magic.py (magic_edit): added support to edit in-memory
933 macros (automatically creates the necessary temp files). %edit
938 macros (automatically creates the necessary temp files). %edit
934 also doesn't return the file contents anymore, it's just noise.
939 also doesn't return the file contents anymore, it's just noise.
935
940
936 * IPython/completer.py (Completer.attr_matches): revert change to
941 * IPython/completer.py (Completer.attr_matches): revert change to
937 complete only on attributes listed in __all__. I realized it
942 complete only on attributes listed in __all__. I realized it
938 cripples the tab-completion system as a tool for exploring the
943 cripples the tab-completion system as a tool for exploring the
939 internals of unknown libraries (it renders any non-__all__
944 internals of unknown libraries (it renders any non-__all__
940 attribute off-limits). I got bit by this when trying to see
945 attribute off-limits). I got bit by this when trying to see
941 something inside the dis module.
946 something inside the dis module.
942
947
943 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
948 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
944
949
945 * IPython/iplib.py (InteractiveShell.__init__): add .meta
950 * IPython/iplib.py (InteractiveShell.__init__): add .meta
946 namespace for users and extension writers to hold data in. This
951 namespace for users and extension writers to hold data in. This
947 follows the discussion in
952 follows the discussion in
948 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
953 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
949
954
950 * IPython/completer.py (IPCompleter.complete): small patch to help
955 * IPython/completer.py (IPCompleter.complete): small patch to help
951 tab-completion under Emacs, after a suggestion by John Barnard
956 tab-completion under Emacs, after a suggestion by John Barnard
952 <barnarj-AT-ccf.org>.
957 <barnarj-AT-ccf.org>.
953
958
954 * IPython/Magic.py (Magic.extract_input_slices): added support for
959 * IPython/Magic.py (Magic.extract_input_slices): added support for
955 the slice notation in magics to use N-M to represent numbers N...M
960 the slice notation in magics to use N-M to represent numbers N...M
956 (closed endpoints). This is used by %macro and %save.
961 (closed endpoints). This is used by %macro and %save.
957
962
958 * IPython/completer.py (Completer.attr_matches): for modules which
963 * IPython/completer.py (Completer.attr_matches): for modules which
959 define __all__, complete only on those. After a patch by Jeffrey
964 define __all__, complete only on those. After a patch by Jeffrey
960 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
965 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
961 speed up this routine.
966 speed up this routine.
962
967
963 * IPython/Logger.py (Logger.log): fix a history handling bug. I
968 * IPython/Logger.py (Logger.log): fix a history handling bug. I
964 don't know if this is the end of it, but the behavior now is
969 don't know if this is the end of it, but the behavior now is
965 certainly much more correct. Note that coupled with macros,
970 certainly much more correct. Note that coupled with macros,
966 slightly surprising (at first) behavior may occur: a macro will in
971 slightly surprising (at first) behavior may occur: a macro will in
967 general expand to multiple lines of input, so upon exiting, the
972 general expand to multiple lines of input, so upon exiting, the
968 in/out counters will both be bumped by the corresponding amount
973 in/out counters will both be bumped by the corresponding amount
969 (as if the macro's contents had been typed interactively). Typing
974 (as if the macro's contents had been typed interactively). Typing
970 %hist will reveal the intermediate (silently processed) lines.
975 %hist will reveal the intermediate (silently processed) lines.
971
976
972 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
977 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
973 pickle to fail (%run was overwriting __main__ and not restoring
978 pickle to fail (%run was overwriting __main__ and not restoring
974 it, but pickle relies on __main__ to operate).
979 it, but pickle relies on __main__ to operate).
975
980
976 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
981 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
977 using properties, but forgot to make the main InteractiveShell
982 using properties, but forgot to make the main InteractiveShell
978 class a new-style class. Properties fail silently, and
983 class a new-style class. Properties fail silently, and
979 mysteriously, with old-style class (getters work, but
984 mysteriously, with old-style class (getters work, but
980 setters don't do anything).
985 setters don't do anything).
981
986
982 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
987 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
983
988
984 * IPython/Magic.py (magic_history): fix history reporting bug (I
989 * IPython/Magic.py (magic_history): fix history reporting bug (I
985 know some nasties are still there, I just can't seem to find a
990 know some nasties are still there, I just can't seem to find a
986 reproducible test case to track them down; the input history is
991 reproducible test case to track them down; the input history is
987 falling out of sync...)
992 falling out of sync...)
988
993
989 * IPython/iplib.py (handle_shell_escape): fix bug where both
994 * IPython/iplib.py (handle_shell_escape): fix bug where both
990 aliases and system accesses where broken for indented code (such
995 aliases and system accesses where broken for indented code (such
991 as loops).
996 as loops).
992
997
993 * IPython/genutils.py (shell): fix small but critical bug for
998 * IPython/genutils.py (shell): fix small but critical bug for
994 win32 system access.
999 win32 system access.
995
1000
996 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
1001 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
997
1002
998 * IPython/iplib.py (showtraceback): remove use of the
1003 * IPython/iplib.py (showtraceback): remove use of the
999 sys.last_{type/value/traceback} structures, which are non
1004 sys.last_{type/value/traceback} structures, which are non
1000 thread-safe.
1005 thread-safe.
1001 (_prefilter): change control flow to ensure that we NEVER
1006 (_prefilter): change control flow to ensure that we NEVER
1002 introspect objects when autocall is off. This will guarantee that
1007 introspect objects when autocall is off. This will guarantee that
1003 having an input line of the form 'x.y', where access to attribute
1008 having an input line of the form 'x.y', where access to attribute
1004 'y' has side effects, doesn't trigger the side effect TWICE. It
1009 'y' has side effects, doesn't trigger the side effect TWICE. It
1005 is important to note that, with autocall on, these side effects
1010 is important to note that, with autocall on, these side effects
1006 can still happen.
1011 can still happen.
1007 (ipsystem): new builtin, to complete the ip{magic/alias/system}
1012 (ipsystem): new builtin, to complete the ip{magic/alias/system}
1008 trio. IPython offers these three kinds of special calls which are
1013 trio. IPython offers these three kinds of special calls which are
1009 not python code, and it's a good thing to have their call method
1014 not python code, and it's a good thing to have their call method
1010 be accessible as pure python functions (not just special syntax at
1015 be accessible as pure python functions (not just special syntax at
1011 the command line). It gives us a better internal implementation
1016 the command line). It gives us a better internal implementation
1012 structure, as well as exposing these for user scripting more
1017 structure, as well as exposing these for user scripting more
1013 cleanly.
1018 cleanly.
1014
1019
1015 * IPython/macro.py (Macro.__init__): moved macros to a standalone
1020 * IPython/macro.py (Macro.__init__): moved macros to a standalone
1016 file. Now that they'll be more likely to be used with the
1021 file. Now that they'll be more likely to be used with the
1017 persistance system (%store), I want to make sure their module path
1022 persistance system (%store), I want to make sure their module path
1018 doesn't change in the future, so that we don't break things for
1023 doesn't change in the future, so that we don't break things for
1019 users' persisted data.
1024 users' persisted data.
1020
1025
1021 * IPython/iplib.py (autoindent_update): move indentation
1026 * IPython/iplib.py (autoindent_update): move indentation
1022 management into the _text_ processing loop, not the keyboard
1027 management into the _text_ processing loop, not the keyboard
1023 interactive one. This is necessary to correctly process non-typed
1028 interactive one. This is necessary to correctly process non-typed
1024 multiline input (such as macros).
1029 multiline input (such as macros).
1025
1030
1026 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
1031 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
1027 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
1032 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
1028 which was producing problems in the resulting manual.
1033 which was producing problems in the resulting manual.
1029 (magic_whos): improve reporting of instances (show their class,
1034 (magic_whos): improve reporting of instances (show their class,
1030 instead of simply printing 'instance' which isn't terribly
1035 instead of simply printing 'instance' which isn't terribly
1031 informative).
1036 informative).
1032
1037
1033 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
1038 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
1034 (minor mods) to support network shares under win32.
1039 (minor mods) to support network shares under win32.
1035
1040
1036 * IPython/winconsole.py (get_console_size): add new winconsole
1041 * IPython/winconsole.py (get_console_size): add new winconsole
1037 module and fixes to page_dumb() to improve its behavior under
1042 module and fixes to page_dumb() to improve its behavior under
1038 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1043 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1039
1044
1040 * IPython/Magic.py (Macro): simplified Macro class to just
1045 * IPython/Magic.py (Macro): simplified Macro class to just
1041 subclass list. We've had only 2.2 compatibility for a very long
1046 subclass list. We've had only 2.2 compatibility for a very long
1042 time, yet I was still avoiding subclassing the builtin types. No
1047 time, yet I was still avoiding subclassing the builtin types. No
1043 more (I'm also starting to use properties, though I won't shift to
1048 more (I'm also starting to use properties, though I won't shift to
1044 2.3-specific features quite yet).
1049 2.3-specific features quite yet).
1045 (magic_store): added Ville's patch for lightweight variable
1050 (magic_store): added Ville's patch for lightweight variable
1046 persistence, after a request on the user list by Matt Wilkie
1051 persistence, after a request on the user list by Matt Wilkie
1047 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1052 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1048 details.
1053 details.
1049
1054
1050 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1055 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1051 changed the default logfile name from 'ipython.log' to
1056 changed the default logfile name from 'ipython.log' to
1052 'ipython_log.py'. These logs are real python files, and now that
1057 'ipython_log.py'. These logs are real python files, and now that
1053 we have much better multiline support, people are more likely to
1058 we have much better multiline support, people are more likely to
1054 want to use them as such. Might as well name them correctly.
1059 want to use them as such. Might as well name them correctly.
1055
1060
1056 * IPython/Magic.py: substantial cleanup. While we can't stop
1061 * IPython/Magic.py: substantial cleanup. While we can't stop
1057 using magics as mixins, due to the existing customizations 'out
1062 using magics as mixins, due to the existing customizations 'out
1058 there' which rely on the mixin naming conventions, at least I
1063 there' which rely on the mixin naming conventions, at least I
1059 cleaned out all cross-class name usage. So once we are OK with
1064 cleaned out all cross-class name usage. So once we are OK with
1060 breaking compatibility, the two systems can be separated.
1065 breaking compatibility, the two systems can be separated.
1061
1066
1062 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1067 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1063 anymore, and the class is a fair bit less hideous as well. New
1068 anymore, and the class is a fair bit less hideous as well. New
1064 features were also introduced: timestamping of input, and logging
1069 features were also introduced: timestamping of input, and logging
1065 of output results. These are user-visible with the -t and -o
1070 of output results. These are user-visible with the -t and -o
1066 options to %logstart. Closes
1071 options to %logstart. Closes
1067 http://www.scipy.net/roundup/ipython/issue11 and a request by
1072 http://www.scipy.net/roundup/ipython/issue11 and a request by
1068 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1073 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1069
1074
1070 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1075 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1071
1076
1072 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1077 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1073 better handle backslashes in paths. See the thread 'More Windows
1078 better handle backslashes in paths. See the thread 'More Windows
1074 questions part 2 - \/ characters revisited' on the iypthon user
1079 questions part 2 - \/ characters revisited' on the iypthon user
1075 list:
1080 list:
1076 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1081 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1077
1082
1078 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1083 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1079
1084
1080 (InteractiveShell.__init__): change threaded shells to not use the
1085 (InteractiveShell.__init__): change threaded shells to not use the
1081 ipython crash handler. This was causing more problems than not,
1086 ipython crash handler. This was causing more problems than not,
1082 as exceptions in the main thread (GUI code, typically) would
1087 as exceptions in the main thread (GUI code, typically) would
1083 always show up as a 'crash', when they really weren't.
1088 always show up as a 'crash', when they really weren't.
1084
1089
1085 The colors and exception mode commands (%colors/%xmode) have been
1090 The colors and exception mode commands (%colors/%xmode) have been
1086 synchronized to also take this into account, so users can get
1091 synchronized to also take this into account, so users can get
1087 verbose exceptions for their threaded code as well. I also added
1092 verbose exceptions for their threaded code as well. I also added
1088 support for activating pdb inside this exception handler as well,
1093 support for activating pdb inside this exception handler as well,
1089 so now GUI authors can use IPython's enhanced pdb at runtime.
1094 so now GUI authors can use IPython's enhanced pdb at runtime.
1090
1095
1091 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1096 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1092 true by default, and add it to the shipped ipythonrc file. Since
1097 true by default, and add it to the shipped ipythonrc file. Since
1093 this asks the user before proceeding, I think it's OK to make it
1098 this asks the user before proceeding, I think it's OK to make it
1094 true by default.
1099 true by default.
1095
1100
1096 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1101 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1097 of the previous special-casing of input in the eval loop. I think
1102 of the previous special-casing of input in the eval loop. I think
1098 this is cleaner, as they really are commands and shouldn't have
1103 this is cleaner, as they really are commands and shouldn't have
1099 a special role in the middle of the core code.
1104 a special role in the middle of the core code.
1100
1105
1101 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1106 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1102
1107
1103 * IPython/iplib.py (edit_syntax_error): added support for
1108 * IPython/iplib.py (edit_syntax_error): added support for
1104 automatically reopening the editor if the file had a syntax error
1109 automatically reopening the editor if the file had a syntax error
1105 in it. Thanks to scottt who provided the patch at:
1110 in it. Thanks to scottt who provided the patch at:
1106 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1111 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1107 version committed).
1112 version committed).
1108
1113
1109 * IPython/iplib.py (handle_normal): add suport for multi-line
1114 * IPython/iplib.py (handle_normal): add suport for multi-line
1110 input with emtpy lines. This fixes
1115 input with emtpy lines. This fixes
1111 http://www.scipy.net/roundup/ipython/issue43 and a similar
1116 http://www.scipy.net/roundup/ipython/issue43 and a similar
1112 discussion on the user list.
1117 discussion on the user list.
1113
1118
1114 WARNING: a behavior change is necessarily introduced to support
1119 WARNING: a behavior change is necessarily introduced to support
1115 blank lines: now a single blank line with whitespace does NOT
1120 blank lines: now a single blank line with whitespace does NOT
1116 break the input loop, which means that when autoindent is on, by
1121 break the input loop, which means that when autoindent is on, by
1117 default hitting return on the next (indented) line does NOT exit.
1122 default hitting return on the next (indented) line does NOT exit.
1118
1123
1119 Instead, to exit a multiline input you can either have:
1124 Instead, to exit a multiline input you can either have:
1120
1125
1121 - TWO whitespace lines (just hit return again), or
1126 - TWO whitespace lines (just hit return again), or
1122 - a single whitespace line of a different length than provided
1127 - a single whitespace line of a different length than provided
1123 by the autoindent (add or remove a space).
1128 by the autoindent (add or remove a space).
1124
1129
1125 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1130 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1126 module to better organize all readline-related functionality.
1131 module to better organize all readline-related functionality.
1127 I've deleted FlexCompleter and put all completion clases here.
1132 I've deleted FlexCompleter and put all completion clases here.
1128
1133
1129 * IPython/iplib.py (raw_input): improve indentation management.
1134 * IPython/iplib.py (raw_input): improve indentation management.
1130 It is now possible to paste indented code with autoindent on, and
1135 It is now possible to paste indented code with autoindent on, and
1131 the code is interpreted correctly (though it still looks bad on
1136 the code is interpreted correctly (though it still looks bad on
1132 screen, due to the line-oriented nature of ipython).
1137 screen, due to the line-oriented nature of ipython).
1133 (MagicCompleter.complete): change behavior so that a TAB key on an
1138 (MagicCompleter.complete): change behavior so that a TAB key on an
1134 otherwise empty line actually inserts a tab, instead of completing
1139 otherwise empty line actually inserts a tab, instead of completing
1135 on the entire global namespace. This makes it easier to use the
1140 on the entire global namespace. This makes it easier to use the
1136 TAB key for indentation. After a request by Hans Meine
1141 TAB key for indentation. After a request by Hans Meine
1137 <hans_meine-AT-gmx.net>
1142 <hans_meine-AT-gmx.net>
1138 (_prefilter): add support so that typing plain 'exit' or 'quit'
1143 (_prefilter): add support so that typing plain 'exit' or 'quit'
1139 does a sensible thing. Originally I tried to deviate as little as
1144 does a sensible thing. Originally I tried to deviate as little as
1140 possible from the default python behavior, but even that one may
1145 possible from the default python behavior, but even that one may
1141 change in this direction (thread on python-dev to that effect).
1146 change in this direction (thread on python-dev to that effect).
1142 Regardless, ipython should do the right thing even if CPython's
1147 Regardless, ipython should do the right thing even if CPython's
1143 '>>>' prompt doesn't.
1148 '>>>' prompt doesn't.
1144 (InteractiveShell): removed subclassing code.InteractiveConsole
1149 (InteractiveShell): removed subclassing code.InteractiveConsole
1145 class. By now we'd overridden just about all of its methods: I've
1150 class. By now we'd overridden just about all of its methods: I've
1146 copied the remaining two over, and now ipython is a standalone
1151 copied the remaining two over, and now ipython is a standalone
1147 class. This will provide a clearer picture for the chainsaw
1152 class. This will provide a clearer picture for the chainsaw
1148 branch refactoring.
1153 branch refactoring.
1149
1154
1150 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1155 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1151
1156
1152 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1157 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1153 failures for objects which break when dir() is called on them.
1158 failures for objects which break when dir() is called on them.
1154
1159
1155 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1160 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1156 distinct local and global namespaces in the completer API. This
1161 distinct local and global namespaces in the completer API. This
1157 change allows us to properly handle completion with distinct
1162 change allows us to properly handle completion with distinct
1158 scopes, including in embedded instances (this had never really
1163 scopes, including in embedded instances (this had never really
1159 worked correctly).
1164 worked correctly).
1160
1165
1161 Note: this introduces a change in the constructor for
1166 Note: this introduces a change in the constructor for
1162 MagicCompleter, as a new global_namespace parameter is now the
1167 MagicCompleter, as a new global_namespace parameter is now the
1163 second argument (the others were bumped one position).
1168 second argument (the others were bumped one position).
1164
1169
1165 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1170 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1166
1171
1167 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1172 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1168 embedded instances (which can be done now thanks to Vivian's
1173 embedded instances (which can be done now thanks to Vivian's
1169 frame-handling fixes for pdb).
1174 frame-handling fixes for pdb).
1170 (InteractiveShell.__init__): Fix namespace handling problem in
1175 (InteractiveShell.__init__): Fix namespace handling problem in
1171 embedded instances. We were overwriting __main__ unconditionally,
1176 embedded instances. We were overwriting __main__ unconditionally,
1172 and this should only be done for 'full' (non-embedded) IPython;
1177 and this should only be done for 'full' (non-embedded) IPython;
1173 embedded instances must respect the caller's __main__. Thanks to
1178 embedded instances must respect the caller's __main__. Thanks to
1174 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1179 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1175
1180
1176 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1181 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1177
1182
1178 * setup.py: added download_url to setup(). This registers the
1183 * setup.py: added download_url to setup(). This registers the
1179 download address at PyPI, which is not only useful to humans
1184 download address at PyPI, which is not only useful to humans
1180 browsing the site, but is also picked up by setuptools (the Eggs
1185 browsing the site, but is also picked up by setuptools (the Eggs
1181 machinery). Thanks to Ville and R. Kern for the info/discussion
1186 machinery). Thanks to Ville and R. Kern for the info/discussion
1182 on this.
1187 on this.
1183
1188
1184 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1189 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1185
1190
1186 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1191 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1187 This brings a lot of nice functionality to the pdb mode, which now
1192 This brings a lot of nice functionality to the pdb mode, which now
1188 has tab-completion, syntax highlighting, and better stack handling
1193 has tab-completion, syntax highlighting, and better stack handling
1189 than before. Many thanks to Vivian De Smedt
1194 than before. Many thanks to Vivian De Smedt
1190 <vivian-AT-vdesmedt.com> for the original patches.
1195 <vivian-AT-vdesmedt.com> for the original patches.
1191
1196
1192 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1197 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1193
1198
1194 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1199 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1195 sequence to consistently accept the banner argument. The
1200 sequence to consistently accept the banner argument. The
1196 inconsistency was tripping SAGE, thanks to Gary Zablackis
1201 inconsistency was tripping SAGE, thanks to Gary Zablackis
1197 <gzabl-AT-yahoo.com> for the report.
1202 <gzabl-AT-yahoo.com> for the report.
1198
1203
1199 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1204 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1200
1205
1201 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1206 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1202 Fix bug where a naked 'alias' call in the ipythonrc file would
1207 Fix bug where a naked 'alias' call in the ipythonrc file would
1203 cause a crash. Bug reported by Jorgen Stenarson.
1208 cause a crash. Bug reported by Jorgen Stenarson.
1204
1209
1205 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1210 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1206
1211
1207 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1212 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1208 startup time.
1213 startup time.
1209
1214
1210 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1215 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1211 instances had introduced a bug with globals in normal code. Now
1216 instances had introduced a bug with globals in normal code. Now
1212 it's working in all cases.
1217 it's working in all cases.
1213
1218
1214 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1219 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1215 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1220 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1216 has been introduced to set the default case sensitivity of the
1221 has been introduced to set the default case sensitivity of the
1217 searches. Users can still select either mode at runtime on a
1222 searches. Users can still select either mode at runtime on a
1218 per-search basis.
1223 per-search basis.
1219
1224
1220 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1225 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1221
1226
1222 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1227 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1223 attributes in wildcard searches for subclasses. Modified version
1228 attributes in wildcard searches for subclasses. Modified version
1224 of a patch by Jorgen.
1229 of a patch by Jorgen.
1225
1230
1226 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1231 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1227
1232
1228 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1233 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1229 embedded instances. I added a user_global_ns attribute to the
1234 embedded instances. I added a user_global_ns attribute to the
1230 InteractiveShell class to handle this.
1235 InteractiveShell class to handle this.
1231
1236
1232 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1237 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1233
1238
1234 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1239 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1235 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1240 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1236 (reported under win32, but may happen also in other platforms).
1241 (reported under win32, but may happen also in other platforms).
1237 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1242 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1238
1243
1239 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1244 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1240
1245
1241 * IPython/Magic.py (magic_psearch): new support for wildcard
1246 * IPython/Magic.py (magic_psearch): new support for wildcard
1242 patterns. Now, typing ?a*b will list all names which begin with a
1247 patterns. Now, typing ?a*b will list all names which begin with a
1243 and end in b, for example. The %psearch magic has full
1248 and end in b, for example. The %psearch magic has full
1244 docstrings. Many thanks to JΓΆrgen Stenarson
1249 docstrings. Many thanks to JΓΆrgen Stenarson
1245 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1250 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1246 implementing this functionality.
1251 implementing this functionality.
1247
1252
1248 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1253 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1249
1254
1250 * Manual: fixed long-standing annoyance of double-dashes (as in
1255 * Manual: fixed long-standing annoyance of double-dashes (as in
1251 --prefix=~, for example) being stripped in the HTML version. This
1256 --prefix=~, for example) being stripped in the HTML version. This
1252 is a latex2html bug, but a workaround was provided. Many thanks
1257 is a latex2html bug, but a workaround was provided. Many thanks
1253 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1258 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1254 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1259 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1255 rolling. This seemingly small issue had tripped a number of users
1260 rolling. This seemingly small issue had tripped a number of users
1256 when first installing, so I'm glad to see it gone.
1261 when first installing, so I'm glad to see it gone.
1257
1262
1258 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1263 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1259
1264
1260 * IPython/Extensions/numeric_formats.py: fix missing import,
1265 * IPython/Extensions/numeric_formats.py: fix missing import,
1261 reported by Stephen Walton.
1266 reported by Stephen Walton.
1262
1267
1263 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1268 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1264
1269
1265 * IPython/demo.py: finish demo module, fully documented now.
1270 * IPython/demo.py: finish demo module, fully documented now.
1266
1271
1267 * IPython/genutils.py (file_read): simple little utility to read a
1272 * IPython/genutils.py (file_read): simple little utility to read a
1268 file and ensure it's closed afterwards.
1273 file and ensure it's closed afterwards.
1269
1274
1270 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1275 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1271
1276
1272 * IPython/demo.py (Demo.__init__): added support for individually
1277 * IPython/demo.py (Demo.__init__): added support for individually
1273 tagging blocks for automatic execution.
1278 tagging blocks for automatic execution.
1274
1279
1275 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1280 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1276 syntax-highlighted python sources, requested by John.
1281 syntax-highlighted python sources, requested by John.
1277
1282
1278 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1283 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1279
1284
1280 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1285 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1281 finishing.
1286 finishing.
1282
1287
1283 * IPython/genutils.py (shlex_split): moved from Magic to here,
1288 * IPython/genutils.py (shlex_split): moved from Magic to here,
1284 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1289 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1285
1290
1286 * IPython/demo.py (Demo.__init__): added support for silent
1291 * IPython/demo.py (Demo.__init__): added support for silent
1287 blocks, improved marks as regexps, docstrings written.
1292 blocks, improved marks as regexps, docstrings written.
1288 (Demo.__init__): better docstring, added support for sys.argv.
1293 (Demo.__init__): better docstring, added support for sys.argv.
1289
1294
1290 * IPython/genutils.py (marquee): little utility used by the demo
1295 * IPython/genutils.py (marquee): little utility used by the demo
1291 code, handy in general.
1296 code, handy in general.
1292
1297
1293 * IPython/demo.py (Demo.__init__): new class for interactive
1298 * IPython/demo.py (Demo.__init__): new class for interactive
1294 demos. Not documented yet, I just wrote it in a hurry for
1299 demos. Not documented yet, I just wrote it in a hurry for
1295 scipy'05. Will docstring later.
1300 scipy'05. Will docstring later.
1296
1301
1297 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1302 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1298
1303
1299 * IPython/Shell.py (sigint_handler): Drastic simplification which
1304 * IPython/Shell.py (sigint_handler): Drastic simplification which
1300 also seems to make Ctrl-C work correctly across threads! This is
1305 also seems to make Ctrl-C work correctly across threads! This is
1301 so simple, that I can't beleive I'd missed it before. Needs more
1306 so simple, that I can't beleive I'd missed it before. Needs more
1302 testing, though.
1307 testing, though.
1303 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1308 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1304 like this before...
1309 like this before...
1305
1310
1306 * IPython/genutils.py (get_home_dir): add protection against
1311 * IPython/genutils.py (get_home_dir): add protection against
1307 non-dirs in win32 registry.
1312 non-dirs in win32 registry.
1308
1313
1309 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1314 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1310 bug where dict was mutated while iterating (pysh crash).
1315 bug where dict was mutated while iterating (pysh crash).
1311
1316
1312 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1317 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1313
1318
1314 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1319 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1315 spurious newlines added by this routine. After a report by
1320 spurious newlines added by this routine. After a report by
1316 F. Mantegazza.
1321 F. Mantegazza.
1317
1322
1318 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1323 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1319
1324
1320 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1325 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1321 calls. These were a leftover from the GTK 1.x days, and can cause
1326 calls. These were a leftover from the GTK 1.x days, and can cause
1322 problems in certain cases (after a report by John Hunter).
1327 problems in certain cases (after a report by John Hunter).
1323
1328
1324 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1329 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1325 os.getcwd() fails at init time. Thanks to patch from David Remahl
1330 os.getcwd() fails at init time. Thanks to patch from David Remahl
1326 <chmod007-AT-mac.com>.
1331 <chmod007-AT-mac.com>.
1327 (InteractiveShell.__init__): prevent certain special magics from
1332 (InteractiveShell.__init__): prevent certain special magics from
1328 being shadowed by aliases. Closes
1333 being shadowed by aliases. Closes
1329 http://www.scipy.net/roundup/ipython/issue41.
1334 http://www.scipy.net/roundup/ipython/issue41.
1330
1335
1331 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1336 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1332
1337
1333 * IPython/iplib.py (InteractiveShell.complete): Added new
1338 * IPython/iplib.py (InteractiveShell.complete): Added new
1334 top-level completion method to expose the completion mechanism
1339 top-level completion method to expose the completion mechanism
1335 beyond readline-based environments.
1340 beyond readline-based environments.
1336
1341
1337 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1342 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1338
1343
1339 * tools/ipsvnc (svnversion): fix svnversion capture.
1344 * tools/ipsvnc (svnversion): fix svnversion capture.
1340
1345
1341 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1346 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1342 attribute to self, which was missing. Before, it was set by a
1347 attribute to self, which was missing. Before, it was set by a
1343 routine which in certain cases wasn't being called, so the
1348 routine which in certain cases wasn't being called, so the
1344 instance could end up missing the attribute. This caused a crash.
1349 instance could end up missing the attribute. This caused a crash.
1345 Closes http://www.scipy.net/roundup/ipython/issue40.
1350 Closes http://www.scipy.net/roundup/ipython/issue40.
1346
1351
1347 2005-08-16 Fernando Perez <fperez@colorado.edu>
1352 2005-08-16 Fernando Perez <fperez@colorado.edu>
1348
1353
1349 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1354 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1350 contains non-string attribute. Closes
1355 contains non-string attribute. Closes
1351 http://www.scipy.net/roundup/ipython/issue38.
1356 http://www.scipy.net/roundup/ipython/issue38.
1352
1357
1353 2005-08-14 Fernando Perez <fperez@colorado.edu>
1358 2005-08-14 Fernando Perez <fperez@colorado.edu>
1354
1359
1355 * tools/ipsvnc: Minor improvements, to add changeset info.
1360 * tools/ipsvnc: Minor improvements, to add changeset info.
1356
1361
1357 2005-08-12 Fernando Perez <fperez@colorado.edu>
1362 2005-08-12 Fernando Perez <fperez@colorado.edu>
1358
1363
1359 * IPython/iplib.py (runsource): remove self.code_to_run_src
1364 * IPython/iplib.py (runsource): remove self.code_to_run_src
1360 attribute. I realized this is nothing more than
1365 attribute. I realized this is nothing more than
1361 '\n'.join(self.buffer), and having the same data in two different
1366 '\n'.join(self.buffer), and having the same data in two different
1362 places is just asking for synchronization bugs. This may impact
1367 places is just asking for synchronization bugs. This may impact
1363 people who have custom exception handlers, so I need to warn
1368 people who have custom exception handlers, so I need to warn
1364 ipython-dev about it (F. Mantegazza may use them).
1369 ipython-dev about it (F. Mantegazza may use them).
1365
1370
1366 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1371 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1367
1372
1368 * IPython/genutils.py: fix 2.2 compatibility (generators)
1373 * IPython/genutils.py: fix 2.2 compatibility (generators)
1369
1374
1370 2005-07-18 Fernando Perez <fperez@colorado.edu>
1375 2005-07-18 Fernando Perez <fperez@colorado.edu>
1371
1376
1372 * IPython/genutils.py (get_home_dir): fix to help users with
1377 * IPython/genutils.py (get_home_dir): fix to help users with
1373 invalid $HOME under win32.
1378 invalid $HOME under win32.
1374
1379
1375 2005-07-17 Fernando Perez <fperez@colorado.edu>
1380 2005-07-17 Fernando Perez <fperez@colorado.edu>
1376
1381
1377 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1382 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1378 some old hacks and clean up a bit other routines; code should be
1383 some old hacks and clean up a bit other routines; code should be
1379 simpler and a bit faster.
1384 simpler and a bit faster.
1380
1385
1381 * IPython/iplib.py (interact): removed some last-resort attempts
1386 * IPython/iplib.py (interact): removed some last-resort attempts
1382 to survive broken stdout/stderr. That code was only making it
1387 to survive broken stdout/stderr. That code was only making it
1383 harder to abstract out the i/o (necessary for gui integration),
1388 harder to abstract out the i/o (necessary for gui integration),
1384 and the crashes it could prevent were extremely rare in practice
1389 and the crashes it could prevent were extremely rare in practice
1385 (besides being fully user-induced in a pretty violent manner).
1390 (besides being fully user-induced in a pretty violent manner).
1386
1391
1387 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1392 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1388 Nothing major yet, but the code is simpler to read; this should
1393 Nothing major yet, but the code is simpler to read; this should
1389 make it easier to do more serious modifications in the future.
1394 make it easier to do more serious modifications in the future.
1390
1395
1391 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1396 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1392 which broke in .15 (thanks to a report by Ville).
1397 which broke in .15 (thanks to a report by Ville).
1393
1398
1394 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1399 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1395 be quite correct, I know next to nothing about unicode). This
1400 be quite correct, I know next to nothing about unicode). This
1396 will allow unicode strings to be used in prompts, amongst other
1401 will allow unicode strings to be used in prompts, amongst other
1397 cases. It also will prevent ipython from crashing when unicode
1402 cases. It also will prevent ipython from crashing when unicode
1398 shows up unexpectedly in many places. If ascii encoding fails, we
1403 shows up unexpectedly in many places. If ascii encoding fails, we
1399 assume utf_8. Currently the encoding is not a user-visible
1404 assume utf_8. Currently the encoding is not a user-visible
1400 setting, though it could be made so if there is demand for it.
1405 setting, though it could be made so if there is demand for it.
1401
1406
1402 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1407 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1403
1408
1404 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1409 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1405
1410
1406 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1411 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1407
1412
1408 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1413 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1409 code can work transparently for 2.2/2.3.
1414 code can work transparently for 2.2/2.3.
1410
1415
1411 2005-07-16 Fernando Perez <fperez@colorado.edu>
1416 2005-07-16 Fernando Perez <fperez@colorado.edu>
1412
1417
1413 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1418 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1414 out of the color scheme table used for coloring exception
1419 out of the color scheme table used for coloring exception
1415 tracebacks. This allows user code to add new schemes at runtime.
1420 tracebacks. This allows user code to add new schemes at runtime.
1416 This is a minimally modified version of the patch at
1421 This is a minimally modified version of the patch at
1417 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1422 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1418 for the contribution.
1423 for the contribution.
1419
1424
1420 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1425 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1421 slightly modified version of the patch in
1426 slightly modified version of the patch in
1422 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1427 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1423 to remove the previous try/except solution (which was costlier).
1428 to remove the previous try/except solution (which was costlier).
1424 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1429 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1425
1430
1426 2005-06-08 Fernando Perez <fperez@colorado.edu>
1431 2005-06-08 Fernando Perez <fperez@colorado.edu>
1427
1432
1428 * IPython/iplib.py (write/write_err): Add methods to abstract all
1433 * IPython/iplib.py (write/write_err): Add methods to abstract all
1429 I/O a bit more.
1434 I/O a bit more.
1430
1435
1431 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1436 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1432 warning, reported by Aric Hagberg, fix by JD Hunter.
1437 warning, reported by Aric Hagberg, fix by JD Hunter.
1433
1438
1434 2005-06-02 *** Released version 0.6.15
1439 2005-06-02 *** Released version 0.6.15
1435
1440
1436 2005-06-01 Fernando Perez <fperez@colorado.edu>
1441 2005-06-01 Fernando Perez <fperez@colorado.edu>
1437
1442
1438 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1443 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1439 tab-completion of filenames within open-quoted strings. Note that
1444 tab-completion of filenames within open-quoted strings. Note that
1440 this requires that in ~/.ipython/ipythonrc, users change the
1445 this requires that in ~/.ipython/ipythonrc, users change the
1441 readline delimiters configuration to read:
1446 readline delimiters configuration to read:
1442
1447
1443 readline_remove_delims -/~
1448 readline_remove_delims -/~
1444
1449
1445
1450
1446 2005-05-31 *** Released version 0.6.14
1451 2005-05-31 *** Released version 0.6.14
1447
1452
1448 2005-05-29 Fernando Perez <fperez@colorado.edu>
1453 2005-05-29 Fernando Perez <fperez@colorado.edu>
1449
1454
1450 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1455 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1451 with files not on the filesystem. Reported by Eliyahu Sandler
1456 with files not on the filesystem. Reported by Eliyahu Sandler
1452 <eli@gondolin.net>
1457 <eli@gondolin.net>
1453
1458
1454 2005-05-22 Fernando Perez <fperez@colorado.edu>
1459 2005-05-22 Fernando Perez <fperez@colorado.edu>
1455
1460
1456 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1461 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1457 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1462 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1458
1463
1459 2005-05-19 Fernando Perez <fperez@colorado.edu>
1464 2005-05-19 Fernando Perez <fperez@colorado.edu>
1460
1465
1461 * IPython/iplib.py (safe_execfile): close a file which could be
1466 * IPython/iplib.py (safe_execfile): close a file which could be
1462 left open (causing problems in win32, which locks open files).
1467 left open (causing problems in win32, which locks open files).
1463 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1468 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1464
1469
1465 2005-05-18 Fernando Perez <fperez@colorado.edu>
1470 2005-05-18 Fernando Perez <fperez@colorado.edu>
1466
1471
1467 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1472 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1468 keyword arguments correctly to safe_execfile().
1473 keyword arguments correctly to safe_execfile().
1469
1474
1470 2005-05-13 Fernando Perez <fperez@colorado.edu>
1475 2005-05-13 Fernando Perez <fperez@colorado.edu>
1471
1476
1472 * ipython.1: Added info about Qt to manpage, and threads warning
1477 * ipython.1: Added info about Qt to manpage, and threads warning
1473 to usage page (invoked with --help).
1478 to usage page (invoked with --help).
1474
1479
1475 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1480 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1476 new matcher (it goes at the end of the priority list) to do
1481 new matcher (it goes at the end of the priority list) to do
1477 tab-completion on named function arguments. Submitted by George
1482 tab-completion on named function arguments. Submitted by George
1478 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1483 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1479 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1484 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1480 for more details.
1485 for more details.
1481
1486
1482 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1487 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1483 SystemExit exceptions in the script being run. Thanks to a report
1488 SystemExit exceptions in the script being run. Thanks to a report
1484 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1489 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1485 producing very annoying behavior when running unit tests.
1490 producing very annoying behavior when running unit tests.
1486
1491
1487 2005-05-12 Fernando Perez <fperez@colorado.edu>
1492 2005-05-12 Fernando Perez <fperez@colorado.edu>
1488
1493
1489 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1494 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1490 which I'd broken (again) due to a changed regexp. In the process,
1495 which I'd broken (again) due to a changed regexp. In the process,
1491 added ';' as an escape to auto-quote the whole line without
1496 added ';' as an escape to auto-quote the whole line without
1492 splitting its arguments. Thanks to a report by Jerry McRae
1497 splitting its arguments. Thanks to a report by Jerry McRae
1493 <qrs0xyc02-AT-sneakemail.com>.
1498 <qrs0xyc02-AT-sneakemail.com>.
1494
1499
1495 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1500 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1496 possible crashes caused by a TokenError. Reported by Ed Schofield
1501 possible crashes caused by a TokenError. Reported by Ed Schofield
1497 <schofield-AT-ftw.at>.
1502 <schofield-AT-ftw.at>.
1498
1503
1499 2005-05-06 Fernando Perez <fperez@colorado.edu>
1504 2005-05-06 Fernando Perez <fperez@colorado.edu>
1500
1505
1501 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1506 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1502
1507
1503 2005-04-29 Fernando Perez <fperez@colorado.edu>
1508 2005-04-29 Fernando Perez <fperez@colorado.edu>
1504
1509
1505 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1510 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1506 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1511 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1507 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1512 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1508 which provides support for Qt interactive usage (similar to the
1513 which provides support for Qt interactive usage (similar to the
1509 existing one for WX and GTK). This had been often requested.
1514 existing one for WX and GTK). This had been often requested.
1510
1515
1511 2005-04-14 *** Released version 0.6.13
1516 2005-04-14 *** Released version 0.6.13
1512
1517
1513 2005-04-08 Fernando Perez <fperez@colorado.edu>
1518 2005-04-08 Fernando Perez <fperez@colorado.edu>
1514
1519
1515 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1520 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1516 from _ofind, which gets called on almost every input line. Now,
1521 from _ofind, which gets called on almost every input line. Now,
1517 we only try to get docstrings if they are actually going to be
1522 we only try to get docstrings if they are actually going to be
1518 used (the overhead of fetching unnecessary docstrings can be
1523 used (the overhead of fetching unnecessary docstrings can be
1519 noticeable for certain objects, such as Pyro proxies).
1524 noticeable for certain objects, such as Pyro proxies).
1520
1525
1521 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1526 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1522 for completers. For some reason I had been passing them the state
1527 for completers. For some reason I had been passing them the state
1523 variable, which completers never actually need, and was in
1528 variable, which completers never actually need, and was in
1524 conflict with the rlcompleter API. Custom completers ONLY need to
1529 conflict with the rlcompleter API. Custom completers ONLY need to
1525 take the text parameter.
1530 take the text parameter.
1526
1531
1527 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1532 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1528 work correctly in pysh. I've also moved all the logic which used
1533 work correctly in pysh. I've also moved all the logic which used
1529 to be in pysh.py here, which will prevent problems with future
1534 to be in pysh.py here, which will prevent problems with future
1530 upgrades. However, this time I must warn users to update their
1535 upgrades. However, this time I must warn users to update their
1531 pysh profile to include the line
1536 pysh profile to include the line
1532
1537
1533 import_all IPython.Extensions.InterpreterExec
1538 import_all IPython.Extensions.InterpreterExec
1534
1539
1535 because otherwise things won't work for them. They MUST also
1540 because otherwise things won't work for them. They MUST also
1536 delete pysh.py and the line
1541 delete pysh.py and the line
1537
1542
1538 execfile pysh.py
1543 execfile pysh.py
1539
1544
1540 from their ipythonrc-pysh.
1545 from their ipythonrc-pysh.
1541
1546
1542 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1547 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1543 robust in the face of objects whose dir() returns non-strings
1548 robust in the face of objects whose dir() returns non-strings
1544 (which it shouldn't, but some broken libs like ITK do). Thanks to
1549 (which it shouldn't, but some broken libs like ITK do). Thanks to
1545 a patch by John Hunter (implemented differently, though). Also
1550 a patch by John Hunter (implemented differently, though). Also
1546 minor improvements by using .extend instead of + on lists.
1551 minor improvements by using .extend instead of + on lists.
1547
1552
1548 * pysh.py:
1553 * pysh.py:
1549
1554
1550 2005-04-06 Fernando Perez <fperez@colorado.edu>
1555 2005-04-06 Fernando Perez <fperez@colorado.edu>
1551
1556
1552 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1557 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1553 by default, so that all users benefit from it. Those who don't
1558 by default, so that all users benefit from it. Those who don't
1554 want it can still turn it off.
1559 want it can still turn it off.
1555
1560
1556 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1561 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1557 config file, I'd forgotten about this, so users were getting it
1562 config file, I'd forgotten about this, so users were getting it
1558 off by default.
1563 off by default.
1559
1564
1560 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1565 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1561 consistency. Now magics can be called in multiline statements,
1566 consistency. Now magics can be called in multiline statements,
1562 and python variables can be expanded in magic calls via $var.
1567 and python variables can be expanded in magic calls via $var.
1563 This makes the magic system behave just like aliases or !system
1568 This makes the magic system behave just like aliases or !system
1564 calls.
1569 calls.
1565
1570
1566 2005-03-28 Fernando Perez <fperez@colorado.edu>
1571 2005-03-28 Fernando Perez <fperez@colorado.edu>
1567
1572
1568 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1573 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1569 expensive string additions for building command. Add support for
1574 expensive string additions for building command. Add support for
1570 trailing ';' when autocall is used.
1575 trailing ';' when autocall is used.
1571
1576
1572 2005-03-26 Fernando Perez <fperez@colorado.edu>
1577 2005-03-26 Fernando Perez <fperez@colorado.edu>
1573
1578
1574 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1579 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1575 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1580 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1576 ipython.el robust against prompts with any number of spaces
1581 ipython.el robust against prompts with any number of spaces
1577 (including 0) after the ':' character.
1582 (including 0) after the ':' character.
1578
1583
1579 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1584 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1580 continuation prompt, which misled users to think the line was
1585 continuation prompt, which misled users to think the line was
1581 already indented. Closes debian Bug#300847, reported to me by
1586 already indented. Closes debian Bug#300847, reported to me by
1582 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1587 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1583
1588
1584 2005-03-23 Fernando Perez <fperez@colorado.edu>
1589 2005-03-23 Fernando Perez <fperez@colorado.edu>
1585
1590
1586 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1591 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1587 properly aligned if they have embedded newlines.
1592 properly aligned if they have embedded newlines.
1588
1593
1589 * IPython/iplib.py (runlines): Add a public method to expose
1594 * IPython/iplib.py (runlines): Add a public method to expose
1590 IPython's code execution machinery, so that users can run strings
1595 IPython's code execution machinery, so that users can run strings
1591 as if they had been typed at the prompt interactively.
1596 as if they had been typed at the prompt interactively.
1592 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1597 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1593 methods which can call the system shell, but with python variable
1598 methods which can call the system shell, but with python variable
1594 expansion. The three such methods are: __IPYTHON__.system,
1599 expansion. The three such methods are: __IPYTHON__.system,
1595 .getoutput and .getoutputerror. These need to be documented in a
1600 .getoutput and .getoutputerror. These need to be documented in a
1596 'public API' section (to be written) of the manual.
1601 'public API' section (to be written) of the manual.
1597
1602
1598 2005-03-20 Fernando Perez <fperez@colorado.edu>
1603 2005-03-20 Fernando Perez <fperez@colorado.edu>
1599
1604
1600 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1605 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1601 for custom exception handling. This is quite powerful, and it
1606 for custom exception handling. This is quite powerful, and it
1602 allows for user-installable exception handlers which can trap
1607 allows for user-installable exception handlers which can trap
1603 custom exceptions at runtime and treat them separately from
1608 custom exceptions at runtime and treat them separately from
1604 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1609 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1605 Mantegazza <mantegazza-AT-ill.fr>.
1610 Mantegazza <mantegazza-AT-ill.fr>.
1606 (InteractiveShell.set_custom_completer): public API function to
1611 (InteractiveShell.set_custom_completer): public API function to
1607 add new completers at runtime.
1612 add new completers at runtime.
1608
1613
1609 2005-03-19 Fernando Perez <fperez@colorado.edu>
1614 2005-03-19 Fernando Perez <fperez@colorado.edu>
1610
1615
1611 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1616 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1612 allow objects which provide their docstrings via non-standard
1617 allow objects which provide their docstrings via non-standard
1613 mechanisms (like Pyro proxies) to still be inspected by ipython's
1618 mechanisms (like Pyro proxies) to still be inspected by ipython's
1614 ? system.
1619 ? system.
1615
1620
1616 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1621 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1617 automatic capture system. I tried quite hard to make it work
1622 automatic capture system. I tried quite hard to make it work
1618 reliably, and simply failed. I tried many combinations with the
1623 reliably, and simply failed. I tried many combinations with the
1619 subprocess module, but eventually nothing worked in all needed
1624 subprocess module, but eventually nothing worked in all needed
1620 cases (not blocking stdin for the child, duplicating stdout
1625 cases (not blocking stdin for the child, duplicating stdout
1621 without blocking, etc). The new %sc/%sx still do capture to these
1626 without blocking, etc). The new %sc/%sx still do capture to these
1622 magical list/string objects which make shell use much more
1627 magical list/string objects which make shell use much more
1623 conveninent, so not all is lost.
1628 conveninent, so not all is lost.
1624
1629
1625 XXX - FIX MANUAL for the change above!
1630 XXX - FIX MANUAL for the change above!
1626
1631
1627 (runsource): I copied code.py's runsource() into ipython to modify
1632 (runsource): I copied code.py's runsource() into ipython to modify
1628 it a bit. Now the code object and source to be executed are
1633 it a bit. Now the code object and source to be executed are
1629 stored in ipython. This makes this info accessible to third-party
1634 stored in ipython. This makes this info accessible to third-party
1630 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1635 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1631 Mantegazza <mantegazza-AT-ill.fr>.
1636 Mantegazza <mantegazza-AT-ill.fr>.
1632
1637
1633 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1638 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1634 history-search via readline (like C-p/C-n). I'd wanted this for a
1639 history-search via readline (like C-p/C-n). I'd wanted this for a
1635 long time, but only recently found out how to do it. For users
1640 long time, but only recently found out how to do it. For users
1636 who already have their ipythonrc files made and want this, just
1641 who already have their ipythonrc files made and want this, just
1637 add:
1642 add:
1638
1643
1639 readline_parse_and_bind "\e[A": history-search-backward
1644 readline_parse_and_bind "\e[A": history-search-backward
1640 readline_parse_and_bind "\e[B": history-search-forward
1645 readline_parse_and_bind "\e[B": history-search-forward
1641
1646
1642 2005-03-18 Fernando Perez <fperez@colorado.edu>
1647 2005-03-18 Fernando Perez <fperez@colorado.edu>
1643
1648
1644 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1649 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1645 LSString and SList classes which allow transparent conversions
1650 LSString and SList classes which allow transparent conversions
1646 between list mode and whitespace-separated string.
1651 between list mode and whitespace-separated string.
1647 (magic_r): Fix recursion problem in %r.
1652 (magic_r): Fix recursion problem in %r.
1648
1653
1649 * IPython/genutils.py (LSString): New class to be used for
1654 * IPython/genutils.py (LSString): New class to be used for
1650 automatic storage of the results of all alias/system calls in _o
1655 automatic storage of the results of all alias/system calls in _o
1651 and _e (stdout/err). These provide a .l/.list attribute which
1656 and _e (stdout/err). These provide a .l/.list attribute which
1652 does automatic splitting on newlines. This means that for most
1657 does automatic splitting on newlines. This means that for most
1653 uses, you'll never need to do capturing of output with %sc/%sx
1658 uses, you'll never need to do capturing of output with %sc/%sx
1654 anymore, since ipython keeps this always done for you. Note that
1659 anymore, since ipython keeps this always done for you. Note that
1655 only the LAST results are stored, the _o/e variables are
1660 only the LAST results are stored, the _o/e variables are
1656 overwritten on each call. If you need to save their contents
1661 overwritten on each call. If you need to save their contents
1657 further, simply bind them to any other name.
1662 further, simply bind them to any other name.
1658
1663
1659 2005-03-17 Fernando Perez <fperez@colorado.edu>
1664 2005-03-17 Fernando Perez <fperez@colorado.edu>
1660
1665
1661 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1666 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1662 prompt namespace handling.
1667 prompt namespace handling.
1663
1668
1664 2005-03-16 Fernando Perez <fperez@colorado.edu>
1669 2005-03-16 Fernando Perez <fperez@colorado.edu>
1665
1670
1666 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1671 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1667 classic prompts to be '>>> ' (final space was missing, and it
1672 classic prompts to be '>>> ' (final space was missing, and it
1668 trips the emacs python mode).
1673 trips the emacs python mode).
1669 (BasePrompt.__str__): Added safe support for dynamic prompt
1674 (BasePrompt.__str__): Added safe support for dynamic prompt
1670 strings. Now you can set your prompt string to be '$x', and the
1675 strings. Now you can set your prompt string to be '$x', and the
1671 value of x will be printed from your interactive namespace. The
1676 value of x will be printed from your interactive namespace. The
1672 interpolation syntax includes the full Itpl support, so
1677 interpolation syntax includes the full Itpl support, so
1673 ${foo()+x+bar()} is a valid prompt string now, and the function
1678 ${foo()+x+bar()} is a valid prompt string now, and the function
1674 calls will be made at runtime.
1679 calls will be made at runtime.
1675
1680
1676 2005-03-15 Fernando Perez <fperez@colorado.edu>
1681 2005-03-15 Fernando Perez <fperez@colorado.edu>
1677
1682
1678 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1683 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1679 avoid name clashes in pylab. %hist still works, it just forwards
1684 avoid name clashes in pylab. %hist still works, it just forwards
1680 the call to %history.
1685 the call to %history.
1681
1686
1682 2005-03-02 *** Released version 0.6.12
1687 2005-03-02 *** Released version 0.6.12
1683
1688
1684 2005-03-02 Fernando Perez <fperez@colorado.edu>
1689 2005-03-02 Fernando Perez <fperez@colorado.edu>
1685
1690
1686 * IPython/iplib.py (handle_magic): log magic calls properly as
1691 * IPython/iplib.py (handle_magic): log magic calls properly as
1687 ipmagic() function calls.
1692 ipmagic() function calls.
1688
1693
1689 * IPython/Magic.py (magic_time): Improved %time to support
1694 * IPython/Magic.py (magic_time): Improved %time to support
1690 statements and provide wall-clock as well as CPU time.
1695 statements and provide wall-clock as well as CPU time.
1691
1696
1692 2005-02-27 Fernando Perez <fperez@colorado.edu>
1697 2005-02-27 Fernando Perez <fperez@colorado.edu>
1693
1698
1694 * IPython/hooks.py: New hooks module, to expose user-modifiable
1699 * IPython/hooks.py: New hooks module, to expose user-modifiable
1695 IPython functionality in a clean manner. For now only the editor
1700 IPython functionality in a clean manner. For now only the editor
1696 hook is actually written, and other thigns which I intend to turn
1701 hook is actually written, and other thigns which I intend to turn
1697 into proper hooks aren't yet there. The display and prefilter
1702 into proper hooks aren't yet there. The display and prefilter
1698 stuff, for example, should be hooks. But at least now the
1703 stuff, for example, should be hooks. But at least now the
1699 framework is in place, and the rest can be moved here with more
1704 framework is in place, and the rest can be moved here with more
1700 time later. IPython had had a .hooks variable for a long time for
1705 time later. IPython had had a .hooks variable for a long time for
1701 this purpose, but I'd never actually used it for anything.
1706 this purpose, but I'd never actually used it for anything.
1702
1707
1703 2005-02-26 Fernando Perez <fperez@colorado.edu>
1708 2005-02-26 Fernando Perez <fperez@colorado.edu>
1704
1709
1705 * IPython/ipmaker.py (make_IPython): make the default ipython
1710 * IPython/ipmaker.py (make_IPython): make the default ipython
1706 directory be called _ipython under win32, to follow more the
1711 directory be called _ipython under win32, to follow more the
1707 naming peculiarities of that platform (where buggy software like
1712 naming peculiarities of that platform (where buggy software like
1708 Visual Sourcesafe breaks with .named directories). Reported by
1713 Visual Sourcesafe breaks with .named directories). Reported by
1709 Ville Vainio.
1714 Ville Vainio.
1710
1715
1711 2005-02-23 Fernando Perez <fperez@colorado.edu>
1716 2005-02-23 Fernando Perez <fperez@colorado.edu>
1712
1717
1713 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1718 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1714 auto_aliases for win32 which were causing problems. Users can
1719 auto_aliases for win32 which were causing problems. Users can
1715 define the ones they personally like.
1720 define the ones they personally like.
1716
1721
1717 2005-02-21 Fernando Perez <fperez@colorado.edu>
1722 2005-02-21 Fernando Perez <fperez@colorado.edu>
1718
1723
1719 * IPython/Magic.py (magic_time): new magic to time execution of
1724 * IPython/Magic.py (magic_time): new magic to time execution of
1720 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1725 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1721
1726
1722 2005-02-19 Fernando Perez <fperez@colorado.edu>
1727 2005-02-19 Fernando Perez <fperez@colorado.edu>
1723
1728
1724 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1729 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1725 into keys (for prompts, for example).
1730 into keys (for prompts, for example).
1726
1731
1727 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1732 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1728 prompts in case users want them. This introduces a small behavior
1733 prompts in case users want them. This introduces a small behavior
1729 change: ipython does not automatically add a space to all prompts
1734 change: ipython does not automatically add a space to all prompts
1730 anymore. To get the old prompts with a space, users should add it
1735 anymore. To get the old prompts with a space, users should add it
1731 manually to their ipythonrc file, so for example prompt_in1 should
1736 manually to their ipythonrc file, so for example prompt_in1 should
1732 now read 'In [\#]: ' instead of 'In [\#]:'.
1737 now read 'In [\#]: ' instead of 'In [\#]:'.
1733 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1738 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1734 file) to control left-padding of secondary prompts.
1739 file) to control left-padding of secondary prompts.
1735
1740
1736 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1741 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1737 the profiler can't be imported. Fix for Debian, which removed
1742 the profiler can't be imported. Fix for Debian, which removed
1738 profile.py because of License issues. I applied a slightly
1743 profile.py because of License issues. I applied a slightly
1739 modified version of the original Debian patch at
1744 modified version of the original Debian patch at
1740 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1745 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1741
1746
1742 2005-02-17 Fernando Perez <fperez@colorado.edu>
1747 2005-02-17 Fernando Perez <fperez@colorado.edu>
1743
1748
1744 * IPython/genutils.py (native_line_ends): Fix bug which would
1749 * IPython/genutils.py (native_line_ends): Fix bug which would
1745 cause improper line-ends under win32 b/c I was not opening files
1750 cause improper line-ends under win32 b/c I was not opening files
1746 in binary mode. Bug report and fix thanks to Ville.
1751 in binary mode. Bug report and fix thanks to Ville.
1747
1752
1748 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1753 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1749 trying to catch spurious foo[1] autocalls. My fix actually broke
1754 trying to catch spurious foo[1] autocalls. My fix actually broke
1750 ',/' autoquote/call with explicit escape (bad regexp).
1755 ',/' autoquote/call with explicit escape (bad regexp).
1751
1756
1752 2005-02-15 *** Released version 0.6.11
1757 2005-02-15 *** Released version 0.6.11
1753
1758
1754 2005-02-14 Fernando Perez <fperez@colorado.edu>
1759 2005-02-14 Fernando Perez <fperez@colorado.edu>
1755
1760
1756 * IPython/background_jobs.py: New background job management
1761 * IPython/background_jobs.py: New background job management
1757 subsystem. This is implemented via a new set of classes, and
1762 subsystem. This is implemented via a new set of classes, and
1758 IPython now provides a builtin 'jobs' object for background job
1763 IPython now provides a builtin 'jobs' object for background job
1759 execution. A convenience %bg magic serves as a lightweight
1764 execution. A convenience %bg magic serves as a lightweight
1760 frontend for starting the more common type of calls. This was
1765 frontend for starting the more common type of calls. This was
1761 inspired by discussions with B. Granger and the BackgroundCommand
1766 inspired by discussions with B. Granger and the BackgroundCommand
1762 class described in the book Python Scripting for Computational
1767 class described in the book Python Scripting for Computational
1763 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1768 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1764 (although ultimately no code from this text was used, as IPython's
1769 (although ultimately no code from this text was used, as IPython's
1765 system is a separate implementation).
1770 system is a separate implementation).
1766
1771
1767 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1772 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1768 to control the completion of single/double underscore names
1773 to control the completion of single/double underscore names
1769 separately. As documented in the example ipytonrc file, the
1774 separately. As documented in the example ipytonrc file, the
1770 readline_omit__names variable can now be set to 2, to omit even
1775 readline_omit__names variable can now be set to 2, to omit even
1771 single underscore names. Thanks to a patch by Brian Wong
1776 single underscore names. Thanks to a patch by Brian Wong
1772 <BrianWong-AT-AirgoNetworks.Com>.
1777 <BrianWong-AT-AirgoNetworks.Com>.
1773 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1778 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1774 be autocalled as foo([1]) if foo were callable. A problem for
1779 be autocalled as foo([1]) if foo were callable. A problem for
1775 things which are both callable and implement __getitem__.
1780 things which are both callable and implement __getitem__.
1776 (init_readline): Fix autoindentation for win32. Thanks to a patch
1781 (init_readline): Fix autoindentation for win32. Thanks to a patch
1777 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1782 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1778
1783
1779 2005-02-12 Fernando Perez <fperez@colorado.edu>
1784 2005-02-12 Fernando Perez <fperez@colorado.edu>
1780
1785
1781 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1786 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1782 which I had written long ago to sort out user error messages which
1787 which I had written long ago to sort out user error messages which
1783 may occur during startup. This seemed like a good idea initially,
1788 may occur during startup. This seemed like a good idea initially,
1784 but it has proven a disaster in retrospect. I don't want to
1789 but it has proven a disaster in retrospect. I don't want to
1785 change much code for now, so my fix is to set the internal 'debug'
1790 change much code for now, so my fix is to set the internal 'debug'
1786 flag to true everywhere, whose only job was precisely to control
1791 flag to true everywhere, whose only job was precisely to control
1787 this subsystem. This closes issue 28 (as well as avoiding all
1792 this subsystem. This closes issue 28 (as well as avoiding all
1788 sorts of strange hangups which occur from time to time).
1793 sorts of strange hangups which occur from time to time).
1789
1794
1790 2005-02-07 Fernando Perez <fperez@colorado.edu>
1795 2005-02-07 Fernando Perez <fperez@colorado.edu>
1791
1796
1792 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1797 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1793 previous call produced a syntax error.
1798 previous call produced a syntax error.
1794
1799
1795 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1800 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1796 classes without constructor.
1801 classes without constructor.
1797
1802
1798 2005-02-06 Fernando Perez <fperez@colorado.edu>
1803 2005-02-06 Fernando Perez <fperez@colorado.edu>
1799
1804
1800 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1805 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1801 completions with the results of each matcher, so we return results
1806 completions with the results of each matcher, so we return results
1802 to the user from all namespaces. This breaks with ipython
1807 to the user from all namespaces. This breaks with ipython
1803 tradition, but I think it's a nicer behavior. Now you get all
1808 tradition, but I think it's a nicer behavior. Now you get all
1804 possible completions listed, from all possible namespaces (python,
1809 possible completions listed, from all possible namespaces (python,
1805 filesystem, magics...) After a request by John Hunter
1810 filesystem, magics...) After a request by John Hunter
1806 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1811 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1807
1812
1808 2005-02-05 Fernando Perez <fperez@colorado.edu>
1813 2005-02-05 Fernando Perez <fperez@colorado.edu>
1809
1814
1810 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1815 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1811 the call had quote characters in it (the quotes were stripped).
1816 the call had quote characters in it (the quotes were stripped).
1812
1817
1813 2005-01-31 Fernando Perez <fperez@colorado.edu>
1818 2005-01-31 Fernando Perez <fperez@colorado.edu>
1814
1819
1815 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1820 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1816 Itpl.itpl() to make the code more robust against psyco
1821 Itpl.itpl() to make the code more robust against psyco
1817 optimizations.
1822 optimizations.
1818
1823
1819 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1824 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1820 of causing an exception. Quicker, cleaner.
1825 of causing an exception. Quicker, cleaner.
1821
1826
1822 2005-01-28 Fernando Perez <fperez@colorado.edu>
1827 2005-01-28 Fernando Perez <fperez@colorado.edu>
1823
1828
1824 * scripts/ipython_win_post_install.py (install): hardcode
1829 * scripts/ipython_win_post_install.py (install): hardcode
1825 sys.prefix+'python.exe' as the executable path. It turns out that
1830 sys.prefix+'python.exe' as the executable path. It turns out that
1826 during the post-installation run, sys.executable resolves to the
1831 during the post-installation run, sys.executable resolves to the
1827 name of the binary installer! I should report this as a distutils
1832 name of the binary installer! I should report this as a distutils
1828 bug, I think. I updated the .10 release with this tiny fix, to
1833 bug, I think. I updated the .10 release with this tiny fix, to
1829 avoid annoying the lists further.
1834 avoid annoying the lists further.
1830
1835
1831 2005-01-27 *** Released version 0.6.10
1836 2005-01-27 *** Released version 0.6.10
1832
1837
1833 2005-01-27 Fernando Perez <fperez@colorado.edu>
1838 2005-01-27 Fernando Perez <fperez@colorado.edu>
1834
1839
1835 * IPython/numutils.py (norm): Added 'inf' as optional name for
1840 * IPython/numutils.py (norm): Added 'inf' as optional name for
1836 L-infinity norm, included references to mathworld.com for vector
1841 L-infinity norm, included references to mathworld.com for vector
1837 norm definitions.
1842 norm definitions.
1838 (amin/amax): added amin/amax for array min/max. Similar to what
1843 (amin/amax): added amin/amax for array min/max. Similar to what
1839 pylab ships with after the recent reorganization of names.
1844 pylab ships with after the recent reorganization of names.
1840 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1845 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1841
1846
1842 * ipython.el: committed Alex's recent fixes and improvements.
1847 * ipython.el: committed Alex's recent fixes and improvements.
1843 Tested with python-mode from CVS, and it looks excellent. Since
1848 Tested with python-mode from CVS, and it looks excellent. Since
1844 python-mode hasn't released anything in a while, I'm temporarily
1849 python-mode hasn't released anything in a while, I'm temporarily
1845 putting a copy of today's CVS (v 4.70) of python-mode in:
1850 putting a copy of today's CVS (v 4.70) of python-mode in:
1846 http://ipython.scipy.org/tmp/python-mode.el
1851 http://ipython.scipy.org/tmp/python-mode.el
1847
1852
1848 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1853 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1849 sys.executable for the executable name, instead of assuming it's
1854 sys.executable for the executable name, instead of assuming it's
1850 called 'python.exe' (the post-installer would have produced broken
1855 called 'python.exe' (the post-installer would have produced broken
1851 setups on systems with a differently named python binary).
1856 setups on systems with a differently named python binary).
1852
1857
1853 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1858 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1854 references to os.linesep, to make the code more
1859 references to os.linesep, to make the code more
1855 platform-independent. This is also part of the win32 coloring
1860 platform-independent. This is also part of the win32 coloring
1856 fixes.
1861 fixes.
1857
1862
1858 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1863 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1859 lines, which actually cause coloring bugs because the length of
1864 lines, which actually cause coloring bugs because the length of
1860 the line is very difficult to correctly compute with embedded
1865 the line is very difficult to correctly compute with embedded
1861 escapes. This was the source of all the coloring problems under
1866 escapes. This was the source of all the coloring problems under
1862 Win32. I think that _finally_, Win32 users have a properly
1867 Win32. I think that _finally_, Win32 users have a properly
1863 working ipython in all respects. This would never have happened
1868 working ipython in all respects. This would never have happened
1864 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1869 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1865
1870
1866 2005-01-26 *** Released version 0.6.9
1871 2005-01-26 *** Released version 0.6.9
1867
1872
1868 2005-01-25 Fernando Perez <fperez@colorado.edu>
1873 2005-01-25 Fernando Perez <fperez@colorado.edu>
1869
1874
1870 * setup.py: finally, we have a true Windows installer, thanks to
1875 * setup.py: finally, we have a true Windows installer, thanks to
1871 the excellent work of Viktor Ransmayr
1876 the excellent work of Viktor Ransmayr
1872 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1877 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1873 Windows users. The setup routine is quite a bit cleaner thanks to
1878 Windows users. The setup routine is quite a bit cleaner thanks to
1874 this, and the post-install script uses the proper functions to
1879 this, and the post-install script uses the proper functions to
1875 allow a clean de-installation using the standard Windows Control
1880 allow a clean de-installation using the standard Windows Control
1876 Panel.
1881 Panel.
1877
1882
1878 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1883 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1879 environment variable under all OSes (including win32) if
1884 environment variable under all OSes (including win32) if
1880 available. This will give consistency to win32 users who have set
1885 available. This will give consistency to win32 users who have set
1881 this variable for any reason. If os.environ['HOME'] fails, the
1886 this variable for any reason. If os.environ['HOME'] fails, the
1882 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1887 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1883
1888
1884 2005-01-24 Fernando Perez <fperez@colorado.edu>
1889 2005-01-24 Fernando Perez <fperez@colorado.edu>
1885
1890
1886 * IPython/numutils.py (empty_like): add empty_like(), similar to
1891 * IPython/numutils.py (empty_like): add empty_like(), similar to
1887 zeros_like() but taking advantage of the new empty() Numeric routine.
1892 zeros_like() but taking advantage of the new empty() Numeric routine.
1888
1893
1889 2005-01-23 *** Released version 0.6.8
1894 2005-01-23 *** Released version 0.6.8
1890
1895
1891 2005-01-22 Fernando Perez <fperez@colorado.edu>
1896 2005-01-22 Fernando Perez <fperez@colorado.edu>
1892
1897
1893 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1898 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1894 automatic show() calls. After discussing things with JDH, it
1899 automatic show() calls. After discussing things with JDH, it
1895 turns out there are too many corner cases where this can go wrong.
1900 turns out there are too many corner cases where this can go wrong.
1896 It's best not to try to be 'too smart', and simply have ipython
1901 It's best not to try to be 'too smart', and simply have ipython
1897 reproduce as much as possible the default behavior of a normal
1902 reproduce as much as possible the default behavior of a normal
1898 python shell.
1903 python shell.
1899
1904
1900 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1905 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1901 line-splitting regexp and _prefilter() to avoid calling getattr()
1906 line-splitting regexp and _prefilter() to avoid calling getattr()
1902 on assignments. This closes
1907 on assignments. This closes
1903 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1908 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1904 readline uses getattr(), so a simple <TAB> keypress is still
1909 readline uses getattr(), so a simple <TAB> keypress is still
1905 enough to trigger getattr() calls on an object.
1910 enough to trigger getattr() calls on an object.
1906
1911
1907 2005-01-21 Fernando Perez <fperez@colorado.edu>
1912 2005-01-21 Fernando Perez <fperez@colorado.edu>
1908
1913
1909 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1914 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1910 docstring under pylab so it doesn't mask the original.
1915 docstring under pylab so it doesn't mask the original.
1911
1916
1912 2005-01-21 *** Released version 0.6.7
1917 2005-01-21 *** Released version 0.6.7
1913
1918
1914 2005-01-21 Fernando Perez <fperez@colorado.edu>
1919 2005-01-21 Fernando Perez <fperez@colorado.edu>
1915
1920
1916 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1921 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1917 signal handling for win32 users in multithreaded mode.
1922 signal handling for win32 users in multithreaded mode.
1918
1923
1919 2005-01-17 Fernando Perez <fperez@colorado.edu>
1924 2005-01-17 Fernando Perez <fperez@colorado.edu>
1920
1925
1921 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1926 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1922 instances with no __init__. After a crash report by Norbert Nemec
1927 instances with no __init__. After a crash report by Norbert Nemec
1923 <Norbert-AT-nemec-online.de>.
1928 <Norbert-AT-nemec-online.de>.
1924
1929
1925 2005-01-14 Fernando Perez <fperez@colorado.edu>
1930 2005-01-14 Fernando Perez <fperez@colorado.edu>
1926
1931
1927 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1932 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1928 names for verbose exceptions, when multiple dotted names and the
1933 names for verbose exceptions, when multiple dotted names and the
1929 'parent' object were present on the same line.
1934 'parent' object were present on the same line.
1930
1935
1931 2005-01-11 Fernando Perez <fperez@colorado.edu>
1936 2005-01-11 Fernando Perez <fperez@colorado.edu>
1932
1937
1933 * IPython/genutils.py (flag_calls): new utility to trap and flag
1938 * IPython/genutils.py (flag_calls): new utility to trap and flag
1934 calls in functions. I need it to clean up matplotlib support.
1939 calls in functions. I need it to clean up matplotlib support.
1935 Also removed some deprecated code in genutils.
1940 Also removed some deprecated code in genutils.
1936
1941
1937 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1942 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1938 that matplotlib scripts called with %run, which don't call show()
1943 that matplotlib scripts called with %run, which don't call show()
1939 themselves, still have their plotting windows open.
1944 themselves, still have their plotting windows open.
1940
1945
1941 2005-01-05 Fernando Perez <fperez@colorado.edu>
1946 2005-01-05 Fernando Perez <fperez@colorado.edu>
1942
1947
1943 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1948 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1944 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1949 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1945
1950
1946 2004-12-19 Fernando Perez <fperez@colorado.edu>
1951 2004-12-19 Fernando Perez <fperez@colorado.edu>
1947
1952
1948 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1953 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1949 parent_runcode, which was an eyesore. The same result can be
1954 parent_runcode, which was an eyesore. The same result can be
1950 obtained with Python's regular superclass mechanisms.
1955 obtained with Python's regular superclass mechanisms.
1951
1956
1952 2004-12-17 Fernando Perez <fperez@colorado.edu>
1957 2004-12-17 Fernando Perez <fperez@colorado.edu>
1953
1958
1954 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1959 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1955 reported by Prabhu.
1960 reported by Prabhu.
1956 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1961 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1957 sys.stderr) instead of explicitly calling sys.stderr. This helps
1962 sys.stderr) instead of explicitly calling sys.stderr. This helps
1958 maintain our I/O abstractions clean, for future GUI embeddings.
1963 maintain our I/O abstractions clean, for future GUI embeddings.
1959
1964
1960 * IPython/genutils.py (info): added new utility for sys.stderr
1965 * IPython/genutils.py (info): added new utility for sys.stderr
1961 unified info message handling (thin wrapper around warn()).
1966 unified info message handling (thin wrapper around warn()).
1962
1967
1963 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1968 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1964 composite (dotted) names on verbose exceptions.
1969 composite (dotted) names on verbose exceptions.
1965 (VerboseTB.nullrepr): harden against another kind of errors which
1970 (VerboseTB.nullrepr): harden against another kind of errors which
1966 Python's inspect module can trigger, and which were crashing
1971 Python's inspect module can trigger, and which were crashing
1967 IPython. Thanks to a report by Marco Lombardi
1972 IPython. Thanks to a report by Marco Lombardi
1968 <mlombard-AT-ma010192.hq.eso.org>.
1973 <mlombard-AT-ma010192.hq.eso.org>.
1969
1974
1970 2004-12-13 *** Released version 0.6.6
1975 2004-12-13 *** Released version 0.6.6
1971
1976
1972 2004-12-12 Fernando Perez <fperez@colorado.edu>
1977 2004-12-12 Fernando Perez <fperez@colorado.edu>
1973
1978
1974 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1979 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1975 generated by pygtk upon initialization if it was built without
1980 generated by pygtk upon initialization if it was built without
1976 threads (for matplotlib users). After a crash reported by
1981 threads (for matplotlib users). After a crash reported by
1977 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1982 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1978
1983
1979 * IPython/ipmaker.py (make_IPython): fix small bug in the
1984 * IPython/ipmaker.py (make_IPython): fix small bug in the
1980 import_some parameter for multiple imports.
1985 import_some parameter for multiple imports.
1981
1986
1982 * IPython/iplib.py (ipmagic): simplified the interface of
1987 * IPython/iplib.py (ipmagic): simplified the interface of
1983 ipmagic() to take a single string argument, just as it would be
1988 ipmagic() to take a single string argument, just as it would be
1984 typed at the IPython cmd line.
1989 typed at the IPython cmd line.
1985 (ipalias): Added new ipalias() with an interface identical to
1990 (ipalias): Added new ipalias() with an interface identical to
1986 ipmagic(). This completes exposing a pure python interface to the
1991 ipmagic(). This completes exposing a pure python interface to the
1987 alias and magic system, which can be used in loops or more complex
1992 alias and magic system, which can be used in loops or more complex
1988 code where IPython's automatic line mangling is not active.
1993 code where IPython's automatic line mangling is not active.
1989
1994
1990 * IPython/genutils.py (timing): changed interface of timing to
1995 * IPython/genutils.py (timing): changed interface of timing to
1991 simply run code once, which is the most common case. timings()
1996 simply run code once, which is the most common case. timings()
1992 remains unchanged, for the cases where you want multiple runs.
1997 remains unchanged, for the cases where you want multiple runs.
1993
1998
1994 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1999 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1995 bug where Python2.2 crashes with exec'ing code which does not end
2000 bug where Python2.2 crashes with exec'ing code which does not end
1996 in a single newline. Python 2.3 is OK, so I hadn't noticed this
2001 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1997 before.
2002 before.
1998
2003
1999 2004-12-10 Fernando Perez <fperez@colorado.edu>
2004 2004-12-10 Fernando Perez <fperez@colorado.edu>
2000
2005
2001 * IPython/Magic.py (Magic.magic_prun): changed name of option from
2006 * IPython/Magic.py (Magic.magic_prun): changed name of option from
2002 -t to -T, to accomodate the new -t flag in %run (the %run and
2007 -t to -T, to accomodate the new -t flag in %run (the %run and
2003 %prun options are kind of intermixed, and it's not easy to change
2008 %prun options are kind of intermixed, and it's not easy to change
2004 this with the limitations of python's getopt).
2009 this with the limitations of python's getopt).
2005
2010
2006 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
2011 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
2007 the execution of scripts. It's not as fine-tuned as timeit.py,
2012 the execution of scripts. It's not as fine-tuned as timeit.py,
2008 but it works from inside ipython (and under 2.2, which lacks
2013 but it works from inside ipython (and under 2.2, which lacks
2009 timeit.py). Optionally a number of runs > 1 can be given for
2014 timeit.py). Optionally a number of runs > 1 can be given for
2010 timing very short-running code.
2015 timing very short-running code.
2011
2016
2012 * IPython/genutils.py (uniq_stable): new routine which returns a
2017 * IPython/genutils.py (uniq_stable): new routine which returns a
2013 list of unique elements in any iterable, but in stable order of
2018 list of unique elements in any iterable, but in stable order of
2014 appearance. I needed this for the ultraTB fixes, and it's a handy
2019 appearance. I needed this for the ultraTB fixes, and it's a handy
2015 utility.
2020 utility.
2016
2021
2017 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
2022 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
2018 dotted names in Verbose exceptions. This had been broken since
2023 dotted names in Verbose exceptions. This had been broken since
2019 the very start, now x.y will properly be printed in a Verbose
2024 the very start, now x.y will properly be printed in a Verbose
2020 traceback, instead of x being shown and y appearing always as an
2025 traceback, instead of x being shown and y appearing always as an
2021 'undefined global'. Getting this to work was a bit tricky,
2026 'undefined global'. Getting this to work was a bit tricky,
2022 because by default python tokenizers are stateless. Saved by
2027 because by default python tokenizers are stateless. Saved by
2023 python's ability to easily add a bit of state to an arbitrary
2028 python's ability to easily add a bit of state to an arbitrary
2024 function (without needing to build a full-blown callable object).
2029 function (without needing to build a full-blown callable object).
2025
2030
2026 Also big cleanup of this code, which had horrendous runtime
2031 Also big cleanup of this code, which had horrendous runtime
2027 lookups of zillions of attributes for colorization. Moved all
2032 lookups of zillions of attributes for colorization. Moved all
2028 this code into a few templates, which make it cleaner and quicker.
2033 this code into a few templates, which make it cleaner and quicker.
2029
2034
2030 Printout quality was also improved for Verbose exceptions: one
2035 Printout quality was also improved for Verbose exceptions: one
2031 variable per line, and memory addresses are printed (this can be
2036 variable per line, and memory addresses are printed (this can be
2032 quite handy in nasty debugging situations, which is what Verbose
2037 quite handy in nasty debugging situations, which is what Verbose
2033 is for).
2038 is for).
2034
2039
2035 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
2040 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
2036 the command line as scripts to be loaded by embedded instances.
2041 the command line as scripts to be loaded by embedded instances.
2037 Doing so has the potential for an infinite recursion if there are
2042 Doing so has the potential for an infinite recursion if there are
2038 exceptions thrown in the process. This fixes a strange crash
2043 exceptions thrown in the process. This fixes a strange crash
2039 reported by Philippe MULLER <muller-AT-irit.fr>.
2044 reported by Philippe MULLER <muller-AT-irit.fr>.
2040
2045
2041 2004-12-09 Fernando Perez <fperez@colorado.edu>
2046 2004-12-09 Fernando Perez <fperez@colorado.edu>
2042
2047
2043 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2048 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2044 to reflect new names in matplotlib, which now expose the
2049 to reflect new names in matplotlib, which now expose the
2045 matlab-compatible interface via a pylab module instead of the
2050 matlab-compatible interface via a pylab module instead of the
2046 'matlab' name. The new code is backwards compatible, so users of
2051 'matlab' name. The new code is backwards compatible, so users of
2047 all matplotlib versions are OK. Patch by J. Hunter.
2052 all matplotlib versions are OK. Patch by J. Hunter.
2048
2053
2049 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2054 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2050 of __init__ docstrings for instances (class docstrings are already
2055 of __init__ docstrings for instances (class docstrings are already
2051 automatically printed). Instances with customized docstrings
2056 automatically printed). Instances with customized docstrings
2052 (indep. of the class) are also recognized and all 3 separate
2057 (indep. of the class) are also recognized and all 3 separate
2053 docstrings are printed (instance, class, constructor). After some
2058 docstrings are printed (instance, class, constructor). After some
2054 comments/suggestions by J. Hunter.
2059 comments/suggestions by J. Hunter.
2055
2060
2056 2004-12-05 Fernando Perez <fperez@colorado.edu>
2061 2004-12-05 Fernando Perez <fperez@colorado.edu>
2057
2062
2058 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2063 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2059 warnings when tab-completion fails and triggers an exception.
2064 warnings when tab-completion fails and triggers an exception.
2060
2065
2061 2004-12-03 Fernando Perez <fperez@colorado.edu>
2066 2004-12-03 Fernando Perez <fperez@colorado.edu>
2062
2067
2063 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2068 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2064 be triggered when using 'run -p'. An incorrect option flag was
2069 be triggered when using 'run -p'. An incorrect option flag was
2065 being set ('d' instead of 'D').
2070 being set ('d' instead of 'D').
2066 (manpage): fix missing escaped \- sign.
2071 (manpage): fix missing escaped \- sign.
2067
2072
2068 2004-11-30 *** Released version 0.6.5
2073 2004-11-30 *** Released version 0.6.5
2069
2074
2070 2004-11-30 Fernando Perez <fperez@colorado.edu>
2075 2004-11-30 Fernando Perez <fperez@colorado.edu>
2071
2076
2072 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2077 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2073 setting with -d option.
2078 setting with -d option.
2074
2079
2075 * setup.py (docfiles): Fix problem where the doc glob I was using
2080 * setup.py (docfiles): Fix problem where the doc glob I was using
2076 was COMPLETELY BROKEN. It was giving the right files by pure
2081 was COMPLETELY BROKEN. It was giving the right files by pure
2077 accident, but failed once I tried to include ipython.el. Note:
2082 accident, but failed once I tried to include ipython.el. Note:
2078 glob() does NOT allow you to do exclusion on multiple endings!
2083 glob() does NOT allow you to do exclusion on multiple endings!
2079
2084
2080 2004-11-29 Fernando Perez <fperez@colorado.edu>
2085 2004-11-29 Fernando Perez <fperez@colorado.edu>
2081
2086
2082 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2087 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2083 the manpage as the source. Better formatting & consistency.
2088 the manpage as the source. Better formatting & consistency.
2084
2089
2085 * IPython/Magic.py (magic_run): Added new -d option, to run
2090 * IPython/Magic.py (magic_run): Added new -d option, to run
2086 scripts under the control of the python pdb debugger. Note that
2091 scripts under the control of the python pdb debugger. Note that
2087 this required changing the %prun option -d to -D, to avoid a clash
2092 this required changing the %prun option -d to -D, to avoid a clash
2088 (since %run must pass options to %prun, and getopt is too dumb to
2093 (since %run must pass options to %prun, and getopt is too dumb to
2089 handle options with string values with embedded spaces). Thanks
2094 handle options with string values with embedded spaces). Thanks
2090 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2095 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2091 (magic_who_ls): added type matching to %who and %whos, so that one
2096 (magic_who_ls): added type matching to %who and %whos, so that one
2092 can filter their output to only include variables of certain
2097 can filter their output to only include variables of certain
2093 types. Another suggestion by Matthew.
2098 types. Another suggestion by Matthew.
2094 (magic_whos): Added memory summaries in kb and Mb for arrays.
2099 (magic_whos): Added memory summaries in kb and Mb for arrays.
2095 (magic_who): Improve formatting (break lines every 9 vars).
2100 (magic_who): Improve formatting (break lines every 9 vars).
2096
2101
2097 2004-11-28 Fernando Perez <fperez@colorado.edu>
2102 2004-11-28 Fernando Perez <fperez@colorado.edu>
2098
2103
2099 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2104 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2100 cache when empty lines were present.
2105 cache when empty lines were present.
2101
2106
2102 2004-11-24 Fernando Perez <fperez@colorado.edu>
2107 2004-11-24 Fernando Perez <fperez@colorado.edu>
2103
2108
2104 * IPython/usage.py (__doc__): document the re-activated threading
2109 * IPython/usage.py (__doc__): document the re-activated threading
2105 options for WX and GTK.
2110 options for WX and GTK.
2106
2111
2107 2004-11-23 Fernando Perez <fperez@colorado.edu>
2112 2004-11-23 Fernando Perez <fperez@colorado.edu>
2108
2113
2109 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2114 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2110 the -wthread and -gthread options, along with a new -tk one to try
2115 the -wthread and -gthread options, along with a new -tk one to try
2111 and coordinate Tk threading with wx/gtk. The tk support is very
2116 and coordinate Tk threading with wx/gtk. The tk support is very
2112 platform dependent, since it seems to require Tcl and Tk to be
2117 platform dependent, since it seems to require Tcl and Tk to be
2113 built with threads (Fedora1/2 appears NOT to have it, but in
2118 built with threads (Fedora1/2 appears NOT to have it, but in
2114 Prabhu's Debian boxes it works OK). But even with some Tk
2119 Prabhu's Debian boxes it works OK). But even with some Tk
2115 limitations, this is a great improvement.
2120 limitations, this is a great improvement.
2116
2121
2117 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2122 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2118 info in user prompts. Patch by Prabhu.
2123 info in user prompts. Patch by Prabhu.
2119
2124
2120 2004-11-18 Fernando Perez <fperez@colorado.edu>
2125 2004-11-18 Fernando Perez <fperez@colorado.edu>
2121
2126
2122 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2127 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2123 EOFErrors and bail, to avoid infinite loops if a non-terminating
2128 EOFErrors and bail, to avoid infinite loops if a non-terminating
2124 file is fed into ipython. Patch submitted in issue 19 by user,
2129 file is fed into ipython. Patch submitted in issue 19 by user,
2125 many thanks.
2130 many thanks.
2126
2131
2127 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2132 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2128 autoquote/parens in continuation prompts, which can cause lots of
2133 autoquote/parens in continuation prompts, which can cause lots of
2129 problems. Closes roundup issue 20.
2134 problems. Closes roundup issue 20.
2130
2135
2131 2004-11-17 Fernando Perez <fperez@colorado.edu>
2136 2004-11-17 Fernando Perez <fperez@colorado.edu>
2132
2137
2133 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2138 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2134 reported as debian bug #280505. I'm not sure my local changelog
2139 reported as debian bug #280505. I'm not sure my local changelog
2135 entry has the proper debian format (Jack?).
2140 entry has the proper debian format (Jack?).
2136
2141
2137 2004-11-08 *** Released version 0.6.4
2142 2004-11-08 *** Released version 0.6.4
2138
2143
2139 2004-11-08 Fernando Perez <fperez@colorado.edu>
2144 2004-11-08 Fernando Perez <fperez@colorado.edu>
2140
2145
2141 * IPython/iplib.py (init_readline): Fix exit message for Windows
2146 * IPython/iplib.py (init_readline): Fix exit message for Windows
2142 when readline is active. Thanks to a report by Eric Jones
2147 when readline is active. Thanks to a report by Eric Jones
2143 <eric-AT-enthought.com>.
2148 <eric-AT-enthought.com>.
2144
2149
2145 2004-11-07 Fernando Perez <fperez@colorado.edu>
2150 2004-11-07 Fernando Perez <fperez@colorado.edu>
2146
2151
2147 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2152 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2148 sometimes seen by win2k/cygwin users.
2153 sometimes seen by win2k/cygwin users.
2149
2154
2150 2004-11-06 Fernando Perez <fperez@colorado.edu>
2155 2004-11-06 Fernando Perez <fperez@colorado.edu>
2151
2156
2152 * IPython/iplib.py (interact): Change the handling of %Exit from
2157 * IPython/iplib.py (interact): Change the handling of %Exit from
2153 trying to propagate a SystemExit to an internal ipython flag.
2158 trying to propagate a SystemExit to an internal ipython flag.
2154 This is less elegant than using Python's exception mechanism, but
2159 This is less elegant than using Python's exception mechanism, but
2155 I can't get that to work reliably with threads, so under -pylab
2160 I can't get that to work reliably with threads, so under -pylab
2156 %Exit was hanging IPython. Cross-thread exception handling is
2161 %Exit was hanging IPython. Cross-thread exception handling is
2157 really a bitch. Thaks to a bug report by Stephen Walton
2162 really a bitch. Thaks to a bug report by Stephen Walton
2158 <stephen.walton-AT-csun.edu>.
2163 <stephen.walton-AT-csun.edu>.
2159
2164
2160 2004-11-04 Fernando Perez <fperez@colorado.edu>
2165 2004-11-04 Fernando Perez <fperez@colorado.edu>
2161
2166
2162 * IPython/iplib.py (raw_input_original): store a pointer to the
2167 * IPython/iplib.py (raw_input_original): store a pointer to the
2163 true raw_input to harden against code which can modify it
2168 true raw_input to harden against code which can modify it
2164 (wx.py.PyShell does this and would otherwise crash ipython).
2169 (wx.py.PyShell does this and would otherwise crash ipython).
2165 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2170 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2166
2171
2167 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2172 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2168 Ctrl-C problem, which does not mess up the input line.
2173 Ctrl-C problem, which does not mess up the input line.
2169
2174
2170 2004-11-03 Fernando Perez <fperez@colorado.edu>
2175 2004-11-03 Fernando Perez <fperez@colorado.edu>
2171
2176
2172 * IPython/Release.py: Changed licensing to BSD, in all files.
2177 * IPython/Release.py: Changed licensing to BSD, in all files.
2173 (name): lowercase name for tarball/RPM release.
2178 (name): lowercase name for tarball/RPM release.
2174
2179
2175 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2180 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2176 use throughout ipython.
2181 use throughout ipython.
2177
2182
2178 * IPython/Magic.py (Magic._ofind): Switch to using the new
2183 * IPython/Magic.py (Magic._ofind): Switch to using the new
2179 OInspect.getdoc() function.
2184 OInspect.getdoc() function.
2180
2185
2181 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2186 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2182 of the line currently being canceled via Ctrl-C. It's extremely
2187 of the line currently being canceled via Ctrl-C. It's extremely
2183 ugly, but I don't know how to do it better (the problem is one of
2188 ugly, but I don't know how to do it better (the problem is one of
2184 handling cross-thread exceptions).
2189 handling cross-thread exceptions).
2185
2190
2186 2004-10-28 Fernando Perez <fperez@colorado.edu>
2191 2004-10-28 Fernando Perez <fperez@colorado.edu>
2187
2192
2188 * IPython/Shell.py (signal_handler): add signal handlers to trap
2193 * IPython/Shell.py (signal_handler): add signal handlers to trap
2189 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2194 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2190 report by Francesc Alted.
2195 report by Francesc Alted.
2191
2196
2192 2004-10-21 Fernando Perez <fperez@colorado.edu>
2197 2004-10-21 Fernando Perez <fperez@colorado.edu>
2193
2198
2194 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2199 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2195 to % for pysh syntax extensions.
2200 to % for pysh syntax extensions.
2196
2201
2197 2004-10-09 Fernando Perez <fperez@colorado.edu>
2202 2004-10-09 Fernando Perez <fperez@colorado.edu>
2198
2203
2199 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2204 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2200 arrays to print a more useful summary, without calling str(arr).
2205 arrays to print a more useful summary, without calling str(arr).
2201 This avoids the problem of extremely lengthy computations which
2206 This avoids the problem of extremely lengthy computations which
2202 occur if arr is large, and appear to the user as a system lockup
2207 occur if arr is large, and appear to the user as a system lockup
2203 with 100% cpu activity. After a suggestion by Kristian Sandberg
2208 with 100% cpu activity. After a suggestion by Kristian Sandberg
2204 <Kristian.Sandberg@colorado.edu>.
2209 <Kristian.Sandberg@colorado.edu>.
2205 (Magic.__init__): fix bug in global magic escapes not being
2210 (Magic.__init__): fix bug in global magic escapes not being
2206 correctly set.
2211 correctly set.
2207
2212
2208 2004-10-08 Fernando Perez <fperez@colorado.edu>
2213 2004-10-08 Fernando Perez <fperez@colorado.edu>
2209
2214
2210 * IPython/Magic.py (__license__): change to absolute imports of
2215 * IPython/Magic.py (__license__): change to absolute imports of
2211 ipython's own internal packages, to start adapting to the absolute
2216 ipython's own internal packages, to start adapting to the absolute
2212 import requirement of PEP-328.
2217 import requirement of PEP-328.
2213
2218
2214 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2219 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2215 files, and standardize author/license marks through the Release
2220 files, and standardize author/license marks through the Release
2216 module instead of having per/file stuff (except for files with
2221 module instead of having per/file stuff (except for files with
2217 particular licenses, like the MIT/PSF-licensed codes).
2222 particular licenses, like the MIT/PSF-licensed codes).
2218
2223
2219 * IPython/Debugger.py: remove dead code for python 2.1
2224 * IPython/Debugger.py: remove dead code for python 2.1
2220
2225
2221 2004-10-04 Fernando Perez <fperez@colorado.edu>
2226 2004-10-04 Fernando Perez <fperez@colorado.edu>
2222
2227
2223 * IPython/iplib.py (ipmagic): New function for accessing magics
2228 * IPython/iplib.py (ipmagic): New function for accessing magics
2224 via a normal python function call.
2229 via a normal python function call.
2225
2230
2226 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2231 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2227 from '@' to '%', to accomodate the new @decorator syntax of python
2232 from '@' to '%', to accomodate the new @decorator syntax of python
2228 2.4.
2233 2.4.
2229
2234
2230 2004-09-29 Fernando Perez <fperez@colorado.edu>
2235 2004-09-29 Fernando Perez <fperez@colorado.edu>
2231
2236
2232 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2237 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2233 matplotlib.use to prevent running scripts which try to switch
2238 matplotlib.use to prevent running scripts which try to switch
2234 interactive backends from within ipython. This will just crash
2239 interactive backends from within ipython. This will just crash
2235 the python interpreter, so we can't allow it (but a detailed error
2240 the python interpreter, so we can't allow it (but a detailed error
2236 is given to the user).
2241 is given to the user).
2237
2242
2238 2004-09-28 Fernando Perez <fperez@colorado.edu>
2243 2004-09-28 Fernando Perez <fperez@colorado.edu>
2239
2244
2240 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2245 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2241 matplotlib-related fixes so that using @run with non-matplotlib
2246 matplotlib-related fixes so that using @run with non-matplotlib
2242 scripts doesn't pop up spurious plot windows. This requires
2247 scripts doesn't pop up spurious plot windows. This requires
2243 matplotlib >= 0.63, where I had to make some changes as well.
2248 matplotlib >= 0.63, where I had to make some changes as well.
2244
2249
2245 * IPython/ipmaker.py (make_IPython): update version requirement to
2250 * IPython/ipmaker.py (make_IPython): update version requirement to
2246 python 2.2.
2251 python 2.2.
2247
2252
2248 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2253 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2249 banner arg for embedded customization.
2254 banner arg for embedded customization.
2250
2255
2251 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2256 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2252 explicit uses of __IP as the IPython's instance name. Now things
2257 explicit uses of __IP as the IPython's instance name. Now things
2253 are properly handled via the shell.name value. The actual code
2258 are properly handled via the shell.name value. The actual code
2254 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2259 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2255 is much better than before. I'll clean things completely when the
2260 is much better than before. I'll clean things completely when the
2256 magic stuff gets a real overhaul.
2261 magic stuff gets a real overhaul.
2257
2262
2258 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2263 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2259 minor changes to debian dir.
2264 minor changes to debian dir.
2260
2265
2261 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2266 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2262 pointer to the shell itself in the interactive namespace even when
2267 pointer to the shell itself in the interactive namespace even when
2263 a user-supplied dict is provided. This is needed for embedding
2268 a user-supplied dict is provided. This is needed for embedding
2264 purposes (found by tests with Michel Sanner).
2269 purposes (found by tests with Michel Sanner).
2265
2270
2266 2004-09-27 Fernando Perez <fperez@colorado.edu>
2271 2004-09-27 Fernando Perez <fperez@colorado.edu>
2267
2272
2268 * IPython/UserConfig/ipythonrc: remove []{} from
2273 * IPython/UserConfig/ipythonrc: remove []{} from
2269 readline_remove_delims, so that things like [modname.<TAB> do
2274 readline_remove_delims, so that things like [modname.<TAB> do
2270 proper completion. This disables [].TAB, but that's a less common
2275 proper completion. This disables [].TAB, but that's a less common
2271 case than module names in list comprehensions, for example.
2276 case than module names in list comprehensions, for example.
2272 Thanks to a report by Andrea Riciputi.
2277 Thanks to a report by Andrea Riciputi.
2273
2278
2274 2004-09-09 Fernando Perez <fperez@colorado.edu>
2279 2004-09-09 Fernando Perez <fperez@colorado.edu>
2275
2280
2276 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2281 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2277 blocking problems in win32 and osx. Fix by John.
2282 blocking problems in win32 and osx. Fix by John.
2278
2283
2279 2004-09-08 Fernando Perez <fperez@colorado.edu>
2284 2004-09-08 Fernando Perez <fperez@colorado.edu>
2280
2285
2281 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2286 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2282 for Win32 and OSX. Fix by John Hunter.
2287 for Win32 and OSX. Fix by John Hunter.
2283
2288
2284 2004-08-30 *** Released version 0.6.3
2289 2004-08-30 *** Released version 0.6.3
2285
2290
2286 2004-08-30 Fernando Perez <fperez@colorado.edu>
2291 2004-08-30 Fernando Perez <fperez@colorado.edu>
2287
2292
2288 * setup.py (isfile): Add manpages to list of dependent files to be
2293 * setup.py (isfile): Add manpages to list of dependent files to be
2289 updated.
2294 updated.
2290
2295
2291 2004-08-27 Fernando Perez <fperez@colorado.edu>
2296 2004-08-27 Fernando Perez <fperez@colorado.edu>
2292
2297
2293 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2298 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2294 for now. They don't really work with standalone WX/GTK code
2299 for now. They don't really work with standalone WX/GTK code
2295 (though matplotlib IS working fine with both of those backends).
2300 (though matplotlib IS working fine with both of those backends).
2296 This will neeed much more testing. I disabled most things with
2301 This will neeed much more testing. I disabled most things with
2297 comments, so turning it back on later should be pretty easy.
2302 comments, so turning it back on later should be pretty easy.
2298
2303
2299 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2304 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2300 autocalling of expressions like r'foo', by modifying the line
2305 autocalling of expressions like r'foo', by modifying the line
2301 split regexp. Closes
2306 split regexp. Closes
2302 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2307 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2303 Riley <ipythonbugs-AT-sabi.net>.
2308 Riley <ipythonbugs-AT-sabi.net>.
2304 (InteractiveShell.mainloop): honor --nobanner with banner
2309 (InteractiveShell.mainloop): honor --nobanner with banner
2305 extensions.
2310 extensions.
2306
2311
2307 * IPython/Shell.py: Significant refactoring of all classes, so
2312 * IPython/Shell.py: Significant refactoring of all classes, so
2308 that we can really support ALL matplotlib backends and threading
2313 that we can really support ALL matplotlib backends and threading
2309 models (John spotted a bug with Tk which required this). Now we
2314 models (John spotted a bug with Tk which required this). Now we
2310 should support single-threaded, WX-threads and GTK-threads, both
2315 should support single-threaded, WX-threads and GTK-threads, both
2311 for generic code and for matplotlib.
2316 for generic code and for matplotlib.
2312
2317
2313 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2318 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2314 -pylab, to simplify things for users. Will also remove the pylab
2319 -pylab, to simplify things for users. Will also remove the pylab
2315 profile, since now all of matplotlib configuration is directly
2320 profile, since now all of matplotlib configuration is directly
2316 handled here. This also reduces startup time.
2321 handled here. This also reduces startup time.
2317
2322
2318 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2323 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2319 shell wasn't being correctly called. Also in IPShellWX.
2324 shell wasn't being correctly called. Also in IPShellWX.
2320
2325
2321 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2326 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2322 fine-tune banner.
2327 fine-tune banner.
2323
2328
2324 * IPython/numutils.py (spike): Deprecate these spike functions,
2329 * IPython/numutils.py (spike): Deprecate these spike functions,
2325 delete (long deprecated) gnuplot_exec handler.
2330 delete (long deprecated) gnuplot_exec handler.
2326
2331
2327 2004-08-26 Fernando Perez <fperez@colorado.edu>
2332 2004-08-26 Fernando Perez <fperez@colorado.edu>
2328
2333
2329 * ipython.1: Update for threading options, plus some others which
2334 * ipython.1: Update for threading options, plus some others which
2330 were missing.
2335 were missing.
2331
2336
2332 * IPython/ipmaker.py (__call__): Added -wthread option for
2337 * IPython/ipmaker.py (__call__): Added -wthread option for
2333 wxpython thread handling. Make sure threading options are only
2338 wxpython thread handling. Make sure threading options are only
2334 valid at the command line.
2339 valid at the command line.
2335
2340
2336 * scripts/ipython: moved shell selection into a factory function
2341 * scripts/ipython: moved shell selection into a factory function
2337 in Shell.py, to keep the starter script to a minimum.
2342 in Shell.py, to keep the starter script to a minimum.
2338
2343
2339 2004-08-25 Fernando Perez <fperez@colorado.edu>
2344 2004-08-25 Fernando Perez <fperez@colorado.edu>
2340
2345
2341 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2346 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2342 John. Along with some recent changes he made to matplotlib, the
2347 John. Along with some recent changes he made to matplotlib, the
2343 next versions of both systems should work very well together.
2348 next versions of both systems should work very well together.
2344
2349
2345 2004-08-24 Fernando Perez <fperez@colorado.edu>
2350 2004-08-24 Fernando Perez <fperez@colorado.edu>
2346
2351
2347 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2352 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2348 tried to switch the profiling to using hotshot, but I'm getting
2353 tried to switch the profiling to using hotshot, but I'm getting
2349 strange errors from prof.runctx() there. I may be misreading the
2354 strange errors from prof.runctx() there. I may be misreading the
2350 docs, but it looks weird. For now the profiling code will
2355 docs, but it looks weird. For now the profiling code will
2351 continue to use the standard profiler.
2356 continue to use the standard profiler.
2352
2357
2353 2004-08-23 Fernando Perez <fperez@colorado.edu>
2358 2004-08-23 Fernando Perez <fperez@colorado.edu>
2354
2359
2355 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2360 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2356 threaded shell, by John Hunter. It's not quite ready yet, but
2361 threaded shell, by John Hunter. It's not quite ready yet, but
2357 close.
2362 close.
2358
2363
2359 2004-08-22 Fernando Perez <fperez@colorado.edu>
2364 2004-08-22 Fernando Perez <fperez@colorado.edu>
2360
2365
2361 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2366 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2362 in Magic and ultraTB.
2367 in Magic and ultraTB.
2363
2368
2364 * ipython.1: document threading options in manpage.
2369 * ipython.1: document threading options in manpage.
2365
2370
2366 * scripts/ipython: Changed name of -thread option to -gthread,
2371 * scripts/ipython: Changed name of -thread option to -gthread,
2367 since this is GTK specific. I want to leave the door open for a
2372 since this is GTK specific. I want to leave the door open for a
2368 -wthread option for WX, which will most likely be necessary. This
2373 -wthread option for WX, which will most likely be necessary. This
2369 change affects usage and ipmaker as well.
2374 change affects usage and ipmaker as well.
2370
2375
2371 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2376 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2372 handle the matplotlib shell issues. Code by John Hunter
2377 handle the matplotlib shell issues. Code by John Hunter
2373 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2378 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2374 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2379 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2375 broken (and disabled for end users) for now, but it puts the
2380 broken (and disabled for end users) for now, but it puts the
2376 infrastructure in place.
2381 infrastructure in place.
2377
2382
2378 2004-08-21 Fernando Perez <fperez@colorado.edu>
2383 2004-08-21 Fernando Perez <fperez@colorado.edu>
2379
2384
2380 * ipythonrc-pylab: Add matplotlib support.
2385 * ipythonrc-pylab: Add matplotlib support.
2381
2386
2382 * matplotlib_config.py: new files for matplotlib support, part of
2387 * matplotlib_config.py: new files for matplotlib support, part of
2383 the pylab profile.
2388 the pylab profile.
2384
2389
2385 * IPython/usage.py (__doc__): documented the threading options.
2390 * IPython/usage.py (__doc__): documented the threading options.
2386
2391
2387 2004-08-20 Fernando Perez <fperez@colorado.edu>
2392 2004-08-20 Fernando Perez <fperez@colorado.edu>
2388
2393
2389 * ipython: Modified the main calling routine to handle the -thread
2394 * ipython: Modified the main calling routine to handle the -thread
2390 and -mpthread options. This needs to be done as a top-level hack,
2395 and -mpthread options. This needs to be done as a top-level hack,
2391 because it determines which class to instantiate for IPython
2396 because it determines which class to instantiate for IPython
2392 itself.
2397 itself.
2393
2398
2394 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2399 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2395 classes to support multithreaded GTK operation without blocking,
2400 classes to support multithreaded GTK operation without blocking,
2396 and matplotlib with all backends. This is a lot of still very
2401 and matplotlib with all backends. This is a lot of still very
2397 experimental code, and threads are tricky. So it may still have a
2402 experimental code, and threads are tricky. So it may still have a
2398 few rough edges... This code owes a lot to
2403 few rough edges... This code owes a lot to
2399 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2404 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2400 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2405 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2401 to John Hunter for all the matplotlib work.
2406 to John Hunter for all the matplotlib work.
2402
2407
2403 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2408 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2404 options for gtk thread and matplotlib support.
2409 options for gtk thread and matplotlib support.
2405
2410
2406 2004-08-16 Fernando Perez <fperez@colorado.edu>
2411 2004-08-16 Fernando Perez <fperez@colorado.edu>
2407
2412
2408 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2413 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2409 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2414 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2410 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2415 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2411
2416
2412 2004-08-11 Fernando Perez <fperez@colorado.edu>
2417 2004-08-11 Fernando Perez <fperez@colorado.edu>
2413
2418
2414 * setup.py (isfile): Fix build so documentation gets updated for
2419 * setup.py (isfile): Fix build so documentation gets updated for
2415 rpms (it was only done for .tgz builds).
2420 rpms (it was only done for .tgz builds).
2416
2421
2417 2004-08-10 Fernando Perez <fperez@colorado.edu>
2422 2004-08-10 Fernando Perez <fperez@colorado.edu>
2418
2423
2419 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2424 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2420
2425
2421 * iplib.py : Silence syntax error exceptions in tab-completion.
2426 * iplib.py : Silence syntax error exceptions in tab-completion.
2422
2427
2423 2004-08-05 Fernando Perez <fperez@colorado.edu>
2428 2004-08-05 Fernando Perez <fperez@colorado.edu>
2424
2429
2425 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2430 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2426 'color off' mark for continuation prompts. This was causing long
2431 'color off' mark for continuation prompts. This was causing long
2427 continuation lines to mis-wrap.
2432 continuation lines to mis-wrap.
2428
2433
2429 2004-08-01 Fernando Perez <fperez@colorado.edu>
2434 2004-08-01 Fernando Perez <fperez@colorado.edu>
2430
2435
2431 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2436 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2432 for building ipython to be a parameter. All this is necessary
2437 for building ipython to be a parameter. All this is necessary
2433 right now to have a multithreaded version, but this insane
2438 right now to have a multithreaded version, but this insane
2434 non-design will be cleaned up soon. For now, it's a hack that
2439 non-design will be cleaned up soon. For now, it's a hack that
2435 works.
2440 works.
2436
2441
2437 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2442 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2438 args in various places. No bugs so far, but it's a dangerous
2443 args in various places. No bugs so far, but it's a dangerous
2439 practice.
2444 practice.
2440
2445
2441 2004-07-31 Fernando Perez <fperez@colorado.edu>
2446 2004-07-31 Fernando Perez <fperez@colorado.edu>
2442
2447
2443 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2448 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2444 fix completion of files with dots in their names under most
2449 fix completion of files with dots in their names under most
2445 profiles (pysh was OK because the completion order is different).
2450 profiles (pysh was OK because the completion order is different).
2446
2451
2447 2004-07-27 Fernando Perez <fperez@colorado.edu>
2452 2004-07-27 Fernando Perez <fperez@colorado.edu>
2448
2453
2449 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2454 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2450 keywords manually, b/c the one in keyword.py was removed in python
2455 keywords manually, b/c the one in keyword.py was removed in python
2451 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2456 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2452 This is NOT a bug under python 2.3 and earlier.
2457 This is NOT a bug under python 2.3 and earlier.
2453
2458
2454 2004-07-26 Fernando Perez <fperez@colorado.edu>
2459 2004-07-26 Fernando Perez <fperez@colorado.edu>
2455
2460
2456 * IPython/ultraTB.py (VerboseTB.text): Add another
2461 * IPython/ultraTB.py (VerboseTB.text): Add another
2457 linecache.checkcache() call to try to prevent inspect.py from
2462 linecache.checkcache() call to try to prevent inspect.py from
2458 crashing under python 2.3. I think this fixes
2463 crashing under python 2.3. I think this fixes
2459 http://www.scipy.net/roundup/ipython/issue17.
2464 http://www.scipy.net/roundup/ipython/issue17.
2460
2465
2461 2004-07-26 *** Released version 0.6.2
2466 2004-07-26 *** Released version 0.6.2
2462
2467
2463 2004-07-26 Fernando Perez <fperez@colorado.edu>
2468 2004-07-26 Fernando Perez <fperez@colorado.edu>
2464
2469
2465 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2470 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2466 fail for any number.
2471 fail for any number.
2467 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2472 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2468 empty bookmarks.
2473 empty bookmarks.
2469
2474
2470 2004-07-26 *** Released version 0.6.1
2475 2004-07-26 *** Released version 0.6.1
2471
2476
2472 2004-07-26 Fernando Perez <fperez@colorado.edu>
2477 2004-07-26 Fernando Perez <fperez@colorado.edu>
2473
2478
2474 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2479 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2475
2480
2476 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2481 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2477 escaping '()[]{}' in filenames.
2482 escaping '()[]{}' in filenames.
2478
2483
2479 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2484 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2480 Python 2.2 users who lack a proper shlex.split.
2485 Python 2.2 users who lack a proper shlex.split.
2481
2486
2482 2004-07-19 Fernando Perez <fperez@colorado.edu>
2487 2004-07-19 Fernando Perez <fperez@colorado.edu>
2483
2488
2484 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2489 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2485 for reading readline's init file. I follow the normal chain:
2490 for reading readline's init file. I follow the normal chain:
2486 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2491 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2487 report by Mike Heeter. This closes
2492 report by Mike Heeter. This closes
2488 http://www.scipy.net/roundup/ipython/issue16.
2493 http://www.scipy.net/roundup/ipython/issue16.
2489
2494
2490 2004-07-18 Fernando Perez <fperez@colorado.edu>
2495 2004-07-18 Fernando Perez <fperez@colorado.edu>
2491
2496
2492 * IPython/iplib.py (__init__): Add better handling of '\' under
2497 * IPython/iplib.py (__init__): Add better handling of '\' under
2493 Win32 for filenames. After a patch by Ville.
2498 Win32 for filenames. After a patch by Ville.
2494
2499
2495 2004-07-17 Fernando Perez <fperez@colorado.edu>
2500 2004-07-17 Fernando Perez <fperez@colorado.edu>
2496
2501
2497 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2502 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2498 autocalling would be triggered for 'foo is bar' if foo is
2503 autocalling would be triggered for 'foo is bar' if foo is
2499 callable. I also cleaned up the autocall detection code to use a
2504 callable. I also cleaned up the autocall detection code to use a
2500 regexp, which is faster. Bug reported by Alexander Schmolck.
2505 regexp, which is faster. Bug reported by Alexander Schmolck.
2501
2506
2502 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2507 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2503 '?' in them would confuse the help system. Reported by Alex
2508 '?' in them would confuse the help system. Reported by Alex
2504 Schmolck.
2509 Schmolck.
2505
2510
2506 2004-07-16 Fernando Perez <fperez@colorado.edu>
2511 2004-07-16 Fernando Perez <fperez@colorado.edu>
2507
2512
2508 * IPython/GnuplotInteractive.py (__all__): added plot2.
2513 * IPython/GnuplotInteractive.py (__all__): added plot2.
2509
2514
2510 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2515 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2511 plotting dictionaries, lists or tuples of 1d arrays.
2516 plotting dictionaries, lists or tuples of 1d arrays.
2512
2517
2513 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2518 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2514 optimizations.
2519 optimizations.
2515
2520
2516 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2521 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2517 the information which was there from Janko's original IPP code:
2522 the information which was there from Janko's original IPP code:
2518
2523
2519 03.05.99 20:53 porto.ifm.uni-kiel.de
2524 03.05.99 20:53 porto.ifm.uni-kiel.de
2520 --Started changelog.
2525 --Started changelog.
2521 --make clear do what it say it does
2526 --make clear do what it say it does
2522 --added pretty output of lines from inputcache
2527 --added pretty output of lines from inputcache
2523 --Made Logger a mixin class, simplifies handling of switches
2528 --Made Logger a mixin class, simplifies handling of switches
2524 --Added own completer class. .string<TAB> expands to last history
2529 --Added own completer class. .string<TAB> expands to last history
2525 line which starts with string. The new expansion is also present
2530 line which starts with string. The new expansion is also present
2526 with Ctrl-r from the readline library. But this shows, who this
2531 with Ctrl-r from the readline library. But this shows, who this
2527 can be done for other cases.
2532 can be done for other cases.
2528 --Added convention that all shell functions should accept a
2533 --Added convention that all shell functions should accept a
2529 parameter_string This opens the door for different behaviour for
2534 parameter_string This opens the door for different behaviour for
2530 each function. @cd is a good example of this.
2535 each function. @cd is a good example of this.
2531
2536
2532 04.05.99 12:12 porto.ifm.uni-kiel.de
2537 04.05.99 12:12 porto.ifm.uni-kiel.de
2533 --added logfile rotation
2538 --added logfile rotation
2534 --added new mainloop method which freezes first the namespace
2539 --added new mainloop method which freezes first the namespace
2535
2540
2536 07.05.99 21:24 porto.ifm.uni-kiel.de
2541 07.05.99 21:24 porto.ifm.uni-kiel.de
2537 --added the docreader classes. Now there is a help system.
2542 --added the docreader classes. Now there is a help system.
2538 -This is only a first try. Currently it's not easy to put new
2543 -This is only a first try. Currently it's not easy to put new
2539 stuff in the indices. But this is the way to go. Info would be
2544 stuff in the indices. But this is the way to go. Info would be
2540 better, but HTML is every where and not everybody has an info
2545 better, but HTML is every where and not everybody has an info
2541 system installed and it's not so easy to change html-docs to info.
2546 system installed and it's not so easy to change html-docs to info.
2542 --added global logfile option
2547 --added global logfile option
2543 --there is now a hook for object inspection method pinfo needs to
2548 --there is now a hook for object inspection method pinfo needs to
2544 be provided for this. Can be reached by two '??'.
2549 be provided for this. Can be reached by two '??'.
2545
2550
2546 08.05.99 20:51 porto.ifm.uni-kiel.de
2551 08.05.99 20:51 porto.ifm.uni-kiel.de
2547 --added a README
2552 --added a README
2548 --bug in rc file. Something has changed so functions in the rc
2553 --bug in rc file. Something has changed so functions in the rc
2549 file need to reference the shell and not self. Not clear if it's a
2554 file need to reference the shell and not self. Not clear if it's a
2550 bug or feature.
2555 bug or feature.
2551 --changed rc file for new behavior
2556 --changed rc file for new behavior
2552
2557
2553 2004-07-15 Fernando Perez <fperez@colorado.edu>
2558 2004-07-15 Fernando Perez <fperez@colorado.edu>
2554
2559
2555 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2560 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2556 cache was falling out of sync in bizarre manners when multi-line
2561 cache was falling out of sync in bizarre manners when multi-line
2557 input was present. Minor optimizations and cleanup.
2562 input was present. Minor optimizations and cleanup.
2558
2563
2559 (Logger): Remove old Changelog info for cleanup. This is the
2564 (Logger): Remove old Changelog info for cleanup. This is the
2560 information which was there from Janko's original code:
2565 information which was there from Janko's original code:
2561
2566
2562 Changes to Logger: - made the default log filename a parameter
2567 Changes to Logger: - made the default log filename a parameter
2563
2568
2564 - put a check for lines beginning with !@? in log(). Needed
2569 - put a check for lines beginning with !@? in log(). Needed
2565 (even if the handlers properly log their lines) for mid-session
2570 (even if the handlers properly log their lines) for mid-session
2566 logging activation to work properly. Without this, lines logged
2571 logging activation to work properly. Without this, lines logged
2567 in mid session, which get read from the cache, would end up
2572 in mid session, which get read from the cache, would end up
2568 'bare' (with !@? in the open) in the log. Now they are caught
2573 'bare' (with !@? in the open) in the log. Now they are caught
2569 and prepended with a #.
2574 and prepended with a #.
2570
2575
2571 * IPython/iplib.py (InteractiveShell.init_readline): added check
2576 * IPython/iplib.py (InteractiveShell.init_readline): added check
2572 in case MagicCompleter fails to be defined, so we don't crash.
2577 in case MagicCompleter fails to be defined, so we don't crash.
2573
2578
2574 2004-07-13 Fernando Perez <fperez@colorado.edu>
2579 2004-07-13 Fernando Perez <fperez@colorado.edu>
2575
2580
2576 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2581 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2577 of EPS if the requested filename ends in '.eps'.
2582 of EPS if the requested filename ends in '.eps'.
2578
2583
2579 2004-07-04 Fernando Perez <fperez@colorado.edu>
2584 2004-07-04 Fernando Perez <fperez@colorado.edu>
2580
2585
2581 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2586 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2582 escaping of quotes when calling the shell.
2587 escaping of quotes when calling the shell.
2583
2588
2584 2004-07-02 Fernando Perez <fperez@colorado.edu>
2589 2004-07-02 Fernando Perez <fperez@colorado.edu>
2585
2590
2586 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2591 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2587 gettext not working because we were clobbering '_'. Fixes
2592 gettext not working because we were clobbering '_'. Fixes
2588 http://www.scipy.net/roundup/ipython/issue6.
2593 http://www.scipy.net/roundup/ipython/issue6.
2589
2594
2590 2004-07-01 Fernando Perez <fperez@colorado.edu>
2595 2004-07-01 Fernando Perez <fperez@colorado.edu>
2591
2596
2592 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2597 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2593 into @cd. Patch by Ville.
2598 into @cd. Patch by Ville.
2594
2599
2595 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2600 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2596 new function to store things after ipmaker runs. Patch by Ville.
2601 new function to store things after ipmaker runs. Patch by Ville.
2597 Eventually this will go away once ipmaker is removed and the class
2602 Eventually this will go away once ipmaker is removed and the class
2598 gets cleaned up, but for now it's ok. Key functionality here is
2603 gets cleaned up, but for now it's ok. Key functionality here is
2599 the addition of the persistent storage mechanism, a dict for
2604 the addition of the persistent storage mechanism, a dict for
2600 keeping data across sessions (for now just bookmarks, but more can
2605 keeping data across sessions (for now just bookmarks, but more can
2601 be implemented later).
2606 be implemented later).
2602
2607
2603 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2608 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2604 persistent across sections. Patch by Ville, I modified it
2609 persistent across sections. Patch by Ville, I modified it
2605 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2610 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2606 added a '-l' option to list all bookmarks.
2611 added a '-l' option to list all bookmarks.
2607
2612
2608 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2613 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2609 center for cleanup. Registered with atexit.register(). I moved
2614 center for cleanup. Registered with atexit.register(). I moved
2610 here the old exit_cleanup(). After a patch by Ville.
2615 here the old exit_cleanup(). After a patch by Ville.
2611
2616
2612 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2617 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2613 characters in the hacked shlex_split for python 2.2.
2618 characters in the hacked shlex_split for python 2.2.
2614
2619
2615 * IPython/iplib.py (file_matches): more fixes to filenames with
2620 * IPython/iplib.py (file_matches): more fixes to filenames with
2616 whitespace in them. It's not perfect, but limitations in python's
2621 whitespace in them. It's not perfect, but limitations in python's
2617 readline make it impossible to go further.
2622 readline make it impossible to go further.
2618
2623
2619 2004-06-29 Fernando Perez <fperez@colorado.edu>
2624 2004-06-29 Fernando Perez <fperez@colorado.edu>
2620
2625
2621 * IPython/iplib.py (file_matches): escape whitespace correctly in
2626 * IPython/iplib.py (file_matches): escape whitespace correctly in
2622 filename completions. Bug reported by Ville.
2627 filename completions. Bug reported by Ville.
2623
2628
2624 2004-06-28 Fernando Perez <fperez@colorado.edu>
2629 2004-06-28 Fernando Perez <fperez@colorado.edu>
2625
2630
2626 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2631 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2627 the history file will be called 'history-PROFNAME' (or just
2632 the history file will be called 'history-PROFNAME' (or just
2628 'history' if no profile is loaded). I was getting annoyed at
2633 'history' if no profile is loaded). I was getting annoyed at
2629 getting my Numerical work history clobbered by pysh sessions.
2634 getting my Numerical work history clobbered by pysh sessions.
2630
2635
2631 * IPython/iplib.py (InteractiveShell.__init__): Internal
2636 * IPython/iplib.py (InteractiveShell.__init__): Internal
2632 getoutputerror() function so that we can honor the system_verbose
2637 getoutputerror() function so that we can honor the system_verbose
2633 flag for _all_ system calls. I also added escaping of #
2638 flag for _all_ system calls. I also added escaping of #
2634 characters here to avoid confusing Itpl.
2639 characters here to avoid confusing Itpl.
2635
2640
2636 * IPython/Magic.py (shlex_split): removed call to shell in
2641 * IPython/Magic.py (shlex_split): removed call to shell in
2637 parse_options and replaced it with shlex.split(). The annoying
2642 parse_options and replaced it with shlex.split(). The annoying
2638 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2643 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2639 to backport it from 2.3, with several frail hacks (the shlex
2644 to backport it from 2.3, with several frail hacks (the shlex
2640 module is rather limited in 2.2). Thanks to a suggestion by Ville
2645 module is rather limited in 2.2). Thanks to a suggestion by Ville
2641 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2646 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2642 problem.
2647 problem.
2643
2648
2644 (Magic.magic_system_verbose): new toggle to print the actual
2649 (Magic.magic_system_verbose): new toggle to print the actual
2645 system calls made by ipython. Mainly for debugging purposes.
2650 system calls made by ipython. Mainly for debugging purposes.
2646
2651
2647 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2652 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2648 doesn't support persistence. Reported (and fix suggested) by
2653 doesn't support persistence. Reported (and fix suggested) by
2649 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2654 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2650
2655
2651 2004-06-26 Fernando Perez <fperez@colorado.edu>
2656 2004-06-26 Fernando Perez <fperez@colorado.edu>
2652
2657
2653 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2658 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2654 continue prompts.
2659 continue prompts.
2655
2660
2656 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2661 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2657 function (basically a big docstring) and a few more things here to
2662 function (basically a big docstring) and a few more things here to
2658 speedup startup. pysh.py is now very lightweight. We want because
2663 speedup startup. pysh.py is now very lightweight. We want because
2659 it gets execfile'd, while InterpreterExec gets imported, so
2664 it gets execfile'd, while InterpreterExec gets imported, so
2660 byte-compilation saves time.
2665 byte-compilation saves time.
2661
2666
2662 2004-06-25 Fernando Perez <fperez@colorado.edu>
2667 2004-06-25 Fernando Perez <fperez@colorado.edu>
2663
2668
2664 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2669 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2665 -NUM', which was recently broken.
2670 -NUM', which was recently broken.
2666
2671
2667 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2672 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2668 in multi-line input (but not !!, which doesn't make sense there).
2673 in multi-line input (but not !!, which doesn't make sense there).
2669
2674
2670 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2675 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2671 It's just too useful, and people can turn it off in the less
2676 It's just too useful, and people can turn it off in the less
2672 common cases where it's a problem.
2677 common cases where it's a problem.
2673
2678
2674 2004-06-24 Fernando Perez <fperez@colorado.edu>
2679 2004-06-24 Fernando Perez <fperez@colorado.edu>
2675
2680
2676 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2681 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2677 special syntaxes (like alias calling) is now allied in multi-line
2682 special syntaxes (like alias calling) is now allied in multi-line
2678 input. This is still _very_ experimental, but it's necessary for
2683 input. This is still _very_ experimental, but it's necessary for
2679 efficient shell usage combining python looping syntax with system
2684 efficient shell usage combining python looping syntax with system
2680 calls. For now it's restricted to aliases, I don't think it
2685 calls. For now it's restricted to aliases, I don't think it
2681 really even makes sense to have this for magics.
2686 really even makes sense to have this for magics.
2682
2687
2683 2004-06-23 Fernando Perez <fperez@colorado.edu>
2688 2004-06-23 Fernando Perez <fperez@colorado.edu>
2684
2689
2685 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2690 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2686 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2691 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2687
2692
2688 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2693 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2689 extensions under Windows (after code sent by Gary Bishop). The
2694 extensions under Windows (after code sent by Gary Bishop). The
2690 extensions considered 'executable' are stored in IPython's rc
2695 extensions considered 'executable' are stored in IPython's rc
2691 structure as win_exec_ext.
2696 structure as win_exec_ext.
2692
2697
2693 * IPython/genutils.py (shell): new function, like system() but
2698 * IPython/genutils.py (shell): new function, like system() but
2694 without return value. Very useful for interactive shell work.
2699 without return value. Very useful for interactive shell work.
2695
2700
2696 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2701 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2697 delete aliases.
2702 delete aliases.
2698
2703
2699 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2704 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2700 sure that the alias table doesn't contain python keywords.
2705 sure that the alias table doesn't contain python keywords.
2701
2706
2702 2004-06-21 Fernando Perez <fperez@colorado.edu>
2707 2004-06-21 Fernando Perez <fperez@colorado.edu>
2703
2708
2704 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2709 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2705 non-existent items are found in $PATH. Reported by Thorsten.
2710 non-existent items are found in $PATH. Reported by Thorsten.
2706
2711
2707 2004-06-20 Fernando Perez <fperez@colorado.edu>
2712 2004-06-20 Fernando Perez <fperez@colorado.edu>
2708
2713
2709 * IPython/iplib.py (complete): modified the completer so that the
2714 * IPython/iplib.py (complete): modified the completer so that the
2710 order of priorities can be easily changed at runtime.
2715 order of priorities can be easily changed at runtime.
2711
2716
2712 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2717 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2713 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2718 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2714
2719
2715 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2720 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2716 expand Python variables prepended with $ in all system calls. The
2721 expand Python variables prepended with $ in all system calls. The
2717 same was done to InteractiveShell.handle_shell_escape. Now all
2722 same was done to InteractiveShell.handle_shell_escape. Now all
2718 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2723 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2719 expansion of python variables and expressions according to the
2724 expansion of python variables and expressions according to the
2720 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2725 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2721
2726
2722 Though PEP-215 has been rejected, a similar (but simpler) one
2727 Though PEP-215 has been rejected, a similar (but simpler) one
2723 seems like it will go into Python 2.4, PEP-292 -
2728 seems like it will go into Python 2.4, PEP-292 -
2724 http://www.python.org/peps/pep-0292.html.
2729 http://www.python.org/peps/pep-0292.html.
2725
2730
2726 I'll keep the full syntax of PEP-215, since IPython has since the
2731 I'll keep the full syntax of PEP-215, since IPython has since the
2727 start used Ka-Ping Yee's reference implementation discussed there
2732 start used Ka-Ping Yee's reference implementation discussed there
2728 (Itpl), and I actually like the powerful semantics it offers.
2733 (Itpl), and I actually like the powerful semantics it offers.
2729
2734
2730 In order to access normal shell variables, the $ has to be escaped
2735 In order to access normal shell variables, the $ has to be escaped
2731 via an extra $. For example:
2736 via an extra $. For example:
2732
2737
2733 In [7]: PATH='a python variable'
2738 In [7]: PATH='a python variable'
2734
2739
2735 In [8]: !echo $PATH
2740 In [8]: !echo $PATH
2736 a python variable
2741 a python variable
2737
2742
2738 In [9]: !echo $$PATH
2743 In [9]: !echo $$PATH
2739 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2744 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2740
2745
2741 (Magic.parse_options): escape $ so the shell doesn't evaluate
2746 (Magic.parse_options): escape $ so the shell doesn't evaluate
2742 things prematurely.
2747 things prematurely.
2743
2748
2744 * IPython/iplib.py (InteractiveShell.call_alias): added the
2749 * IPython/iplib.py (InteractiveShell.call_alias): added the
2745 ability for aliases to expand python variables via $.
2750 ability for aliases to expand python variables via $.
2746
2751
2747 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2752 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2748 system, now there's a @rehash/@rehashx pair of magics. These work
2753 system, now there's a @rehash/@rehashx pair of magics. These work
2749 like the csh rehash command, and can be invoked at any time. They
2754 like the csh rehash command, and can be invoked at any time. They
2750 build a table of aliases to everything in the user's $PATH
2755 build a table of aliases to everything in the user's $PATH
2751 (@rehash uses everything, @rehashx is slower but only adds
2756 (@rehash uses everything, @rehashx is slower but only adds
2752 executable files). With this, the pysh.py-based shell profile can
2757 executable files). With this, the pysh.py-based shell profile can
2753 now simply call rehash upon startup, and full access to all
2758 now simply call rehash upon startup, and full access to all
2754 programs in the user's path is obtained.
2759 programs in the user's path is obtained.
2755
2760
2756 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2761 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2757 functionality is now fully in place. I removed the old dynamic
2762 functionality is now fully in place. I removed the old dynamic
2758 code generation based approach, in favor of a much lighter one
2763 code generation based approach, in favor of a much lighter one
2759 based on a simple dict. The advantage is that this allows me to
2764 based on a simple dict. The advantage is that this allows me to
2760 now have thousands of aliases with negligible cost (unthinkable
2765 now have thousands of aliases with negligible cost (unthinkable
2761 with the old system).
2766 with the old system).
2762
2767
2763 2004-06-19 Fernando Perez <fperez@colorado.edu>
2768 2004-06-19 Fernando Perez <fperez@colorado.edu>
2764
2769
2765 * IPython/iplib.py (__init__): extended MagicCompleter class to
2770 * IPython/iplib.py (__init__): extended MagicCompleter class to
2766 also complete (last in priority) on user aliases.
2771 also complete (last in priority) on user aliases.
2767
2772
2768 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2773 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2769 call to eval.
2774 call to eval.
2770 (ItplNS.__init__): Added a new class which functions like Itpl,
2775 (ItplNS.__init__): Added a new class which functions like Itpl,
2771 but allows configuring the namespace for the evaluation to occur
2776 but allows configuring the namespace for the evaluation to occur
2772 in.
2777 in.
2773
2778
2774 2004-06-18 Fernando Perez <fperez@colorado.edu>
2779 2004-06-18 Fernando Perez <fperez@colorado.edu>
2775
2780
2776 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2781 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2777 better message when 'exit' or 'quit' are typed (a common newbie
2782 better message when 'exit' or 'quit' are typed (a common newbie
2778 confusion).
2783 confusion).
2779
2784
2780 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2785 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2781 check for Windows users.
2786 check for Windows users.
2782
2787
2783 * IPython/iplib.py (InteractiveShell.user_setup): removed
2788 * IPython/iplib.py (InteractiveShell.user_setup): removed
2784 disabling of colors for Windows. I'll test at runtime and issue a
2789 disabling of colors for Windows. I'll test at runtime and issue a
2785 warning if Gary's readline isn't found, as to nudge users to
2790 warning if Gary's readline isn't found, as to nudge users to
2786 download it.
2791 download it.
2787
2792
2788 2004-06-16 Fernando Perez <fperez@colorado.edu>
2793 2004-06-16 Fernando Perez <fperez@colorado.edu>
2789
2794
2790 * IPython/genutils.py (Stream.__init__): changed to print errors
2795 * IPython/genutils.py (Stream.__init__): changed to print errors
2791 to sys.stderr. I had a circular dependency here. Now it's
2796 to sys.stderr. I had a circular dependency here. Now it's
2792 possible to run ipython as IDLE's shell (consider this pre-alpha,
2797 possible to run ipython as IDLE's shell (consider this pre-alpha,
2793 since true stdout things end up in the starting terminal instead
2798 since true stdout things end up in the starting terminal instead
2794 of IDLE's out).
2799 of IDLE's out).
2795
2800
2796 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2801 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2797 users who haven't # updated their prompt_in2 definitions. Remove
2802 users who haven't # updated their prompt_in2 definitions. Remove
2798 eventually.
2803 eventually.
2799 (multiple_replace): added credit to original ASPN recipe.
2804 (multiple_replace): added credit to original ASPN recipe.
2800
2805
2801 2004-06-15 Fernando Perez <fperez@colorado.edu>
2806 2004-06-15 Fernando Perez <fperez@colorado.edu>
2802
2807
2803 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2808 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2804 list of auto-defined aliases.
2809 list of auto-defined aliases.
2805
2810
2806 2004-06-13 Fernando Perez <fperez@colorado.edu>
2811 2004-06-13 Fernando Perez <fperez@colorado.edu>
2807
2812
2808 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2813 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2809 install was really requested (so setup.py can be used for other
2814 install was really requested (so setup.py can be used for other
2810 things under Windows).
2815 things under Windows).
2811
2816
2812 2004-06-10 Fernando Perez <fperez@colorado.edu>
2817 2004-06-10 Fernando Perez <fperez@colorado.edu>
2813
2818
2814 * IPython/Logger.py (Logger.create_log): Manually remove any old
2819 * IPython/Logger.py (Logger.create_log): Manually remove any old
2815 backup, since os.remove may fail under Windows. Fixes bug
2820 backup, since os.remove may fail under Windows. Fixes bug
2816 reported by Thorsten.
2821 reported by Thorsten.
2817
2822
2818 2004-06-09 Fernando Perez <fperez@colorado.edu>
2823 2004-06-09 Fernando Perez <fperez@colorado.edu>
2819
2824
2820 * examples/example-embed.py: fixed all references to %n (replaced
2825 * examples/example-embed.py: fixed all references to %n (replaced
2821 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2826 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2822 for all examples and the manual as well.
2827 for all examples and the manual as well.
2823
2828
2824 2004-06-08 Fernando Perez <fperez@colorado.edu>
2829 2004-06-08 Fernando Perez <fperez@colorado.edu>
2825
2830
2826 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2831 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2827 alignment and color management. All 3 prompt subsystems now
2832 alignment and color management. All 3 prompt subsystems now
2828 inherit from BasePrompt.
2833 inherit from BasePrompt.
2829
2834
2830 * tools/release: updates for windows installer build and tag rpms
2835 * tools/release: updates for windows installer build and tag rpms
2831 with python version (since paths are fixed).
2836 with python version (since paths are fixed).
2832
2837
2833 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2838 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2834 which will become eventually obsolete. Also fixed the default
2839 which will become eventually obsolete. Also fixed the default
2835 prompt_in2 to use \D, so at least new users start with the correct
2840 prompt_in2 to use \D, so at least new users start with the correct
2836 defaults.
2841 defaults.
2837 WARNING: Users with existing ipythonrc files will need to apply
2842 WARNING: Users with existing ipythonrc files will need to apply
2838 this fix manually!
2843 this fix manually!
2839
2844
2840 * setup.py: make windows installer (.exe). This is finally the
2845 * setup.py: make windows installer (.exe). This is finally the
2841 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2846 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2842 which I hadn't included because it required Python 2.3 (or recent
2847 which I hadn't included because it required Python 2.3 (or recent
2843 distutils).
2848 distutils).
2844
2849
2845 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2850 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2846 usage of new '\D' escape.
2851 usage of new '\D' escape.
2847
2852
2848 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2853 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2849 lacks os.getuid())
2854 lacks os.getuid())
2850 (CachedOutput.set_colors): Added the ability to turn coloring
2855 (CachedOutput.set_colors): Added the ability to turn coloring
2851 on/off with @colors even for manually defined prompt colors. It
2856 on/off with @colors even for manually defined prompt colors. It
2852 uses a nasty global, but it works safely and via the generic color
2857 uses a nasty global, but it works safely and via the generic color
2853 handling mechanism.
2858 handling mechanism.
2854 (Prompt2.__init__): Introduced new escape '\D' for continuation
2859 (Prompt2.__init__): Introduced new escape '\D' for continuation
2855 prompts. It represents the counter ('\#') as dots.
2860 prompts. It represents the counter ('\#') as dots.
2856 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2861 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2857 need to update their ipythonrc files and replace '%n' with '\D' in
2862 need to update their ipythonrc files and replace '%n' with '\D' in
2858 their prompt_in2 settings everywhere. Sorry, but there's
2863 their prompt_in2 settings everywhere. Sorry, but there's
2859 otherwise no clean way to get all prompts to properly align. The
2864 otherwise no clean way to get all prompts to properly align. The
2860 ipythonrc shipped with IPython has been updated.
2865 ipythonrc shipped with IPython has been updated.
2861
2866
2862 2004-06-07 Fernando Perez <fperez@colorado.edu>
2867 2004-06-07 Fernando Perez <fperez@colorado.edu>
2863
2868
2864 * setup.py (isfile): Pass local_icons option to latex2html, so the
2869 * setup.py (isfile): Pass local_icons option to latex2html, so the
2865 resulting HTML file is self-contained. Thanks to
2870 resulting HTML file is self-contained. Thanks to
2866 dryice-AT-liu.com.cn for the tip.
2871 dryice-AT-liu.com.cn for the tip.
2867
2872
2868 * pysh.py: I created a new profile 'shell', which implements a
2873 * pysh.py: I created a new profile 'shell', which implements a
2869 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2874 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2870 system shell, nor will it become one anytime soon. It's mainly
2875 system shell, nor will it become one anytime soon. It's mainly
2871 meant to illustrate the use of the new flexible bash-like prompts.
2876 meant to illustrate the use of the new flexible bash-like prompts.
2872 I guess it could be used by hardy souls for true shell management,
2877 I guess it could be used by hardy souls for true shell management,
2873 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2878 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2874 profile. This uses the InterpreterExec extension provided by
2879 profile. This uses the InterpreterExec extension provided by
2875 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2880 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2876
2881
2877 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2882 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2878 auto-align itself with the length of the previous input prompt
2883 auto-align itself with the length of the previous input prompt
2879 (taking into account the invisible color escapes).
2884 (taking into account the invisible color escapes).
2880 (CachedOutput.__init__): Large restructuring of this class. Now
2885 (CachedOutput.__init__): Large restructuring of this class. Now
2881 all three prompts (primary1, primary2, output) are proper objects,
2886 all three prompts (primary1, primary2, output) are proper objects,
2882 managed by the 'parent' CachedOutput class. The code is still a
2887 managed by the 'parent' CachedOutput class. The code is still a
2883 bit hackish (all prompts share state via a pointer to the cache),
2888 bit hackish (all prompts share state via a pointer to the cache),
2884 but it's overall far cleaner than before.
2889 but it's overall far cleaner than before.
2885
2890
2886 * IPython/genutils.py (getoutputerror): modified to add verbose,
2891 * IPython/genutils.py (getoutputerror): modified to add verbose,
2887 debug and header options. This makes the interface of all getout*
2892 debug and header options. This makes the interface of all getout*
2888 functions uniform.
2893 functions uniform.
2889 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2894 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2890
2895
2891 * IPython/Magic.py (Magic.default_option): added a function to
2896 * IPython/Magic.py (Magic.default_option): added a function to
2892 allow registering default options for any magic command. This
2897 allow registering default options for any magic command. This
2893 makes it easy to have profiles which customize the magics globally
2898 makes it easy to have profiles which customize the magics globally
2894 for a certain use. The values set through this function are
2899 for a certain use. The values set through this function are
2895 picked up by the parse_options() method, which all magics should
2900 picked up by the parse_options() method, which all magics should
2896 use to parse their options.
2901 use to parse their options.
2897
2902
2898 * IPython/genutils.py (warn): modified the warnings framework to
2903 * IPython/genutils.py (warn): modified the warnings framework to
2899 use the Term I/O class. I'm trying to slowly unify all of
2904 use the Term I/O class. I'm trying to slowly unify all of
2900 IPython's I/O operations to pass through Term.
2905 IPython's I/O operations to pass through Term.
2901
2906
2902 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2907 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2903 the secondary prompt to correctly match the length of the primary
2908 the secondary prompt to correctly match the length of the primary
2904 one for any prompt. Now multi-line code will properly line up
2909 one for any prompt. Now multi-line code will properly line up
2905 even for path dependent prompts, such as the new ones available
2910 even for path dependent prompts, such as the new ones available
2906 via the prompt_specials.
2911 via the prompt_specials.
2907
2912
2908 2004-06-06 Fernando Perez <fperez@colorado.edu>
2913 2004-06-06 Fernando Perez <fperez@colorado.edu>
2909
2914
2910 * IPython/Prompts.py (prompt_specials): Added the ability to have
2915 * IPython/Prompts.py (prompt_specials): Added the ability to have
2911 bash-like special sequences in the prompts, which get
2916 bash-like special sequences in the prompts, which get
2912 automatically expanded. Things like hostname, current working
2917 automatically expanded. Things like hostname, current working
2913 directory and username are implemented already, but it's easy to
2918 directory and username are implemented already, but it's easy to
2914 add more in the future. Thanks to a patch by W.J. van der Laan
2919 add more in the future. Thanks to a patch by W.J. van der Laan
2915 <gnufnork-AT-hetdigitalegat.nl>
2920 <gnufnork-AT-hetdigitalegat.nl>
2916 (prompt_specials): Added color support for prompt strings, so
2921 (prompt_specials): Added color support for prompt strings, so
2917 users can define arbitrary color setups for their prompts.
2922 users can define arbitrary color setups for their prompts.
2918
2923
2919 2004-06-05 Fernando Perez <fperez@colorado.edu>
2924 2004-06-05 Fernando Perez <fperez@colorado.edu>
2920
2925
2921 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2926 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2922 code to load Gary Bishop's readline and configure it
2927 code to load Gary Bishop's readline and configure it
2923 automatically. Thanks to Gary for help on this.
2928 automatically. Thanks to Gary for help on this.
2924
2929
2925 2004-06-01 Fernando Perez <fperez@colorado.edu>
2930 2004-06-01 Fernando Perez <fperez@colorado.edu>
2926
2931
2927 * IPython/Logger.py (Logger.create_log): fix bug for logging
2932 * IPython/Logger.py (Logger.create_log): fix bug for logging
2928 with no filename (previous fix was incomplete).
2933 with no filename (previous fix was incomplete).
2929
2934
2930 2004-05-25 Fernando Perez <fperez@colorado.edu>
2935 2004-05-25 Fernando Perez <fperez@colorado.edu>
2931
2936
2932 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2937 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2933 parens would get passed to the shell.
2938 parens would get passed to the shell.
2934
2939
2935 2004-05-20 Fernando Perez <fperez@colorado.edu>
2940 2004-05-20 Fernando Perez <fperez@colorado.edu>
2936
2941
2937 * IPython/Magic.py (Magic.magic_prun): changed default profile
2942 * IPython/Magic.py (Magic.magic_prun): changed default profile
2938 sort order to 'time' (the more common profiling need).
2943 sort order to 'time' (the more common profiling need).
2939
2944
2940 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2945 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2941 so that source code shown is guaranteed in sync with the file on
2946 so that source code shown is guaranteed in sync with the file on
2942 disk (also changed in psource). Similar fix to the one for
2947 disk (also changed in psource). Similar fix to the one for
2943 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2948 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2944 <yann.ledu-AT-noos.fr>.
2949 <yann.ledu-AT-noos.fr>.
2945
2950
2946 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2951 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2947 with a single option would not be correctly parsed. Closes
2952 with a single option would not be correctly parsed. Closes
2948 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2953 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2949 introduced in 0.6.0 (on 2004-05-06).
2954 introduced in 0.6.0 (on 2004-05-06).
2950
2955
2951 2004-05-13 *** Released version 0.6.0
2956 2004-05-13 *** Released version 0.6.0
2952
2957
2953 2004-05-13 Fernando Perez <fperez@colorado.edu>
2958 2004-05-13 Fernando Perez <fperez@colorado.edu>
2954
2959
2955 * debian/: Added debian/ directory to CVS, so that debian support
2960 * debian/: Added debian/ directory to CVS, so that debian support
2956 is publicly accessible. The debian package is maintained by Jack
2961 is publicly accessible. The debian package is maintained by Jack
2957 Moffit <jack-AT-xiph.org>.
2962 Moffit <jack-AT-xiph.org>.
2958
2963
2959 * Documentation: included the notes about an ipython-based system
2964 * Documentation: included the notes about an ipython-based system
2960 shell (the hypothetical 'pysh') into the new_design.pdf document,
2965 shell (the hypothetical 'pysh') into the new_design.pdf document,
2961 so that these ideas get distributed to users along with the
2966 so that these ideas get distributed to users along with the
2962 official documentation.
2967 official documentation.
2963
2968
2964 2004-05-10 Fernando Perez <fperez@colorado.edu>
2969 2004-05-10 Fernando Perez <fperez@colorado.edu>
2965
2970
2966 * IPython/Logger.py (Logger.create_log): fix recently introduced
2971 * IPython/Logger.py (Logger.create_log): fix recently introduced
2967 bug (misindented line) where logstart would fail when not given an
2972 bug (misindented line) where logstart would fail when not given an
2968 explicit filename.
2973 explicit filename.
2969
2974
2970 2004-05-09 Fernando Perez <fperez@colorado.edu>
2975 2004-05-09 Fernando Perez <fperez@colorado.edu>
2971
2976
2972 * IPython/Magic.py (Magic.parse_options): skip system call when
2977 * IPython/Magic.py (Magic.parse_options): skip system call when
2973 there are no options to look for. Faster, cleaner for the common
2978 there are no options to look for. Faster, cleaner for the common
2974 case.
2979 case.
2975
2980
2976 * Documentation: many updates to the manual: describing Windows
2981 * Documentation: many updates to the manual: describing Windows
2977 support better, Gnuplot updates, credits, misc small stuff. Also
2982 support better, Gnuplot updates, credits, misc small stuff. Also
2978 updated the new_design doc a bit.
2983 updated the new_design doc a bit.
2979
2984
2980 2004-05-06 *** Released version 0.6.0.rc1
2985 2004-05-06 *** Released version 0.6.0.rc1
2981
2986
2982 2004-05-06 Fernando Perez <fperez@colorado.edu>
2987 2004-05-06 Fernando Perez <fperez@colorado.edu>
2983
2988
2984 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2989 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2985 operations to use the vastly more efficient list/''.join() method.
2990 operations to use the vastly more efficient list/''.join() method.
2986 (FormattedTB.text): Fix
2991 (FormattedTB.text): Fix
2987 http://www.scipy.net/roundup/ipython/issue12 - exception source
2992 http://www.scipy.net/roundup/ipython/issue12 - exception source
2988 extract not updated after reload. Thanks to Mike Salib
2993 extract not updated after reload. Thanks to Mike Salib
2989 <msalib-AT-mit.edu> for pinning the source of the problem.
2994 <msalib-AT-mit.edu> for pinning the source of the problem.
2990 Fortunately, the solution works inside ipython and doesn't require
2995 Fortunately, the solution works inside ipython and doesn't require
2991 any changes to python proper.
2996 any changes to python proper.
2992
2997
2993 * IPython/Magic.py (Magic.parse_options): Improved to process the
2998 * IPython/Magic.py (Magic.parse_options): Improved to process the
2994 argument list as a true shell would (by actually using the
2999 argument list as a true shell would (by actually using the
2995 underlying system shell). This way, all @magics automatically get
3000 underlying system shell). This way, all @magics automatically get
2996 shell expansion for variables. Thanks to a comment by Alex
3001 shell expansion for variables. Thanks to a comment by Alex
2997 Schmolck.
3002 Schmolck.
2998
3003
2999 2004-04-04 Fernando Perez <fperez@colorado.edu>
3004 2004-04-04 Fernando Perez <fperez@colorado.edu>
3000
3005
3001 * IPython/iplib.py (InteractiveShell.interact): Added a special
3006 * IPython/iplib.py (InteractiveShell.interact): Added a special
3002 trap for a debugger quit exception, which is basically impossible
3007 trap for a debugger quit exception, which is basically impossible
3003 to handle by normal mechanisms, given what pdb does to the stack.
3008 to handle by normal mechanisms, given what pdb does to the stack.
3004 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
3009 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
3005
3010
3006 2004-04-03 Fernando Perez <fperez@colorado.edu>
3011 2004-04-03 Fernando Perez <fperez@colorado.edu>
3007
3012
3008 * IPython/genutils.py (Term): Standardized the names of the Term
3013 * IPython/genutils.py (Term): Standardized the names of the Term
3009 class streams to cin/cout/cerr, following C++ naming conventions
3014 class streams to cin/cout/cerr, following C++ naming conventions
3010 (I can't use in/out/err because 'in' is not a valid attribute
3015 (I can't use in/out/err because 'in' is not a valid attribute
3011 name).
3016 name).
3012
3017
3013 * IPython/iplib.py (InteractiveShell.interact): don't increment
3018 * IPython/iplib.py (InteractiveShell.interact): don't increment
3014 the prompt if there's no user input. By Daniel 'Dang' Griffith
3019 the prompt if there's no user input. By Daniel 'Dang' Griffith
3015 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
3020 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
3016 Francois Pinard.
3021 Francois Pinard.
3017
3022
3018 2004-04-02 Fernando Perez <fperez@colorado.edu>
3023 2004-04-02 Fernando Perez <fperez@colorado.edu>
3019
3024
3020 * IPython/genutils.py (Stream.__init__): Modified to survive at
3025 * IPython/genutils.py (Stream.__init__): Modified to survive at
3021 least importing in contexts where stdin/out/err aren't true file
3026 least importing in contexts where stdin/out/err aren't true file
3022 objects, such as PyCrust (they lack fileno() and mode). However,
3027 objects, such as PyCrust (they lack fileno() and mode). However,
3023 the recovery facilities which rely on these things existing will
3028 the recovery facilities which rely on these things existing will
3024 not work.
3029 not work.
3025
3030
3026 2004-04-01 Fernando Perez <fperez@colorado.edu>
3031 2004-04-01 Fernando Perez <fperez@colorado.edu>
3027
3032
3028 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
3033 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
3029 use the new getoutputerror() function, so it properly
3034 use the new getoutputerror() function, so it properly
3030 distinguishes stdout/err.
3035 distinguishes stdout/err.
3031
3036
3032 * IPython/genutils.py (getoutputerror): added a function to
3037 * IPython/genutils.py (getoutputerror): added a function to
3033 capture separately the standard output and error of a command.
3038 capture separately the standard output and error of a command.
3034 After a comment from dang on the mailing lists. This code is
3039 After a comment from dang on the mailing lists. This code is
3035 basically a modified version of commands.getstatusoutput(), from
3040 basically a modified version of commands.getstatusoutput(), from
3036 the standard library.
3041 the standard library.
3037
3042
3038 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3043 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3039 '!!' as a special syntax (shorthand) to access @sx.
3044 '!!' as a special syntax (shorthand) to access @sx.
3040
3045
3041 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3046 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3042 command and return its output as a list split on '\n'.
3047 command and return its output as a list split on '\n'.
3043
3048
3044 2004-03-31 Fernando Perez <fperez@colorado.edu>
3049 2004-03-31 Fernando Perez <fperez@colorado.edu>
3045
3050
3046 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3051 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3047 method to dictionaries used as FakeModule instances if they lack
3052 method to dictionaries used as FakeModule instances if they lack
3048 it. At least pydoc in python2.3 breaks for runtime-defined
3053 it. At least pydoc in python2.3 breaks for runtime-defined
3049 functions without this hack. At some point I need to _really_
3054 functions without this hack. At some point I need to _really_
3050 understand what FakeModule is doing, because it's a gross hack.
3055 understand what FakeModule is doing, because it's a gross hack.
3051 But it solves Arnd's problem for now...
3056 But it solves Arnd's problem for now...
3052
3057
3053 2004-02-27 Fernando Perez <fperez@colorado.edu>
3058 2004-02-27 Fernando Perez <fperez@colorado.edu>
3054
3059
3055 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3060 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3056 mode would behave erratically. Also increased the number of
3061 mode would behave erratically. Also increased the number of
3057 possible logs in rotate mod to 999. Thanks to Rod Holland
3062 possible logs in rotate mod to 999. Thanks to Rod Holland
3058 <rhh@StructureLABS.com> for the report and fixes.
3063 <rhh@StructureLABS.com> for the report and fixes.
3059
3064
3060 2004-02-26 Fernando Perez <fperez@colorado.edu>
3065 2004-02-26 Fernando Perez <fperez@colorado.edu>
3061
3066
3062 * IPython/genutils.py (page): Check that the curses module really
3067 * IPython/genutils.py (page): Check that the curses module really
3063 has the initscr attribute before trying to use it. For some
3068 has the initscr attribute before trying to use it. For some
3064 reason, the Solaris curses module is missing this. I think this
3069 reason, the Solaris curses module is missing this. I think this
3065 should be considered a Solaris python bug, but I'm not sure.
3070 should be considered a Solaris python bug, but I'm not sure.
3066
3071
3067 2004-01-17 Fernando Perez <fperez@colorado.edu>
3072 2004-01-17 Fernando Perez <fperez@colorado.edu>
3068
3073
3069 * IPython/genutils.py (Stream.__init__): Changes to try to make
3074 * IPython/genutils.py (Stream.__init__): Changes to try to make
3070 ipython robust against stdin/out/err being closed by the user.
3075 ipython robust against stdin/out/err being closed by the user.
3071 This is 'user error' (and blocks a normal python session, at least
3076 This is 'user error' (and blocks a normal python session, at least
3072 the stdout case). However, Ipython should be able to survive such
3077 the stdout case). However, Ipython should be able to survive such
3073 instances of abuse as gracefully as possible. To simplify the
3078 instances of abuse as gracefully as possible. To simplify the
3074 coding and maintain compatibility with Gary Bishop's Term
3079 coding and maintain compatibility with Gary Bishop's Term
3075 contributions, I've made use of classmethods for this. I think
3080 contributions, I've made use of classmethods for this. I think
3076 this introduces a dependency on python 2.2.
3081 this introduces a dependency on python 2.2.
3077
3082
3078 2004-01-13 Fernando Perez <fperez@colorado.edu>
3083 2004-01-13 Fernando Perez <fperez@colorado.edu>
3079
3084
3080 * IPython/numutils.py (exp_safe): simplified the code a bit and
3085 * IPython/numutils.py (exp_safe): simplified the code a bit and
3081 removed the need for importing the kinds module altogether.
3086 removed the need for importing the kinds module altogether.
3082
3087
3083 2004-01-06 Fernando Perez <fperez@colorado.edu>
3088 2004-01-06 Fernando Perez <fperez@colorado.edu>
3084
3089
3085 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3090 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3086 a magic function instead, after some community feedback. No
3091 a magic function instead, after some community feedback. No
3087 special syntax will exist for it, but its name is deliberately
3092 special syntax will exist for it, but its name is deliberately
3088 very short.
3093 very short.
3089
3094
3090 2003-12-20 Fernando Perez <fperez@colorado.edu>
3095 2003-12-20 Fernando Perez <fperez@colorado.edu>
3091
3096
3092 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3097 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3093 new functionality, to automagically assign the result of a shell
3098 new functionality, to automagically assign the result of a shell
3094 command to a variable. I'll solicit some community feedback on
3099 command to a variable. I'll solicit some community feedback on
3095 this before making it permanent.
3100 this before making it permanent.
3096
3101
3097 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3102 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3098 requested about callables for which inspect couldn't obtain a
3103 requested about callables for which inspect couldn't obtain a
3099 proper argspec. Thanks to a crash report sent by Etienne
3104 proper argspec. Thanks to a crash report sent by Etienne
3100 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3105 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3101
3106
3102 2003-12-09 Fernando Perez <fperez@colorado.edu>
3107 2003-12-09 Fernando Perez <fperez@colorado.edu>
3103
3108
3104 * IPython/genutils.py (page): patch for the pager to work across
3109 * IPython/genutils.py (page): patch for the pager to work across
3105 various versions of Windows. By Gary Bishop.
3110 various versions of Windows. By Gary Bishop.
3106
3111
3107 2003-12-04 Fernando Perez <fperez@colorado.edu>
3112 2003-12-04 Fernando Perez <fperez@colorado.edu>
3108
3113
3109 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3114 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3110 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3115 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3111 While I tested this and it looks ok, there may still be corner
3116 While I tested this and it looks ok, there may still be corner
3112 cases I've missed.
3117 cases I've missed.
3113
3118
3114 2003-12-01 Fernando Perez <fperez@colorado.edu>
3119 2003-12-01 Fernando Perez <fperez@colorado.edu>
3115
3120
3116 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3121 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3117 where a line like 'p,q=1,2' would fail because the automagic
3122 where a line like 'p,q=1,2' would fail because the automagic
3118 system would be triggered for @p.
3123 system would be triggered for @p.
3119
3124
3120 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3125 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3121 cleanups, code unmodified.
3126 cleanups, code unmodified.
3122
3127
3123 * IPython/genutils.py (Term): added a class for IPython to handle
3128 * IPython/genutils.py (Term): added a class for IPython to handle
3124 output. In most cases it will just be a proxy for stdout/err, but
3129 output. In most cases it will just be a proxy for stdout/err, but
3125 having this allows modifications to be made for some platforms,
3130 having this allows modifications to be made for some platforms,
3126 such as handling color escapes under Windows. All of this code
3131 such as handling color escapes under Windows. All of this code
3127 was contributed by Gary Bishop, with minor modifications by me.
3132 was contributed by Gary Bishop, with minor modifications by me.
3128 The actual changes affect many files.
3133 The actual changes affect many files.
3129
3134
3130 2003-11-30 Fernando Perez <fperez@colorado.edu>
3135 2003-11-30 Fernando Perez <fperez@colorado.edu>
3131
3136
3132 * IPython/iplib.py (file_matches): new completion code, courtesy
3137 * IPython/iplib.py (file_matches): new completion code, courtesy
3133 of Jeff Collins. This enables filename completion again under
3138 of Jeff Collins. This enables filename completion again under
3134 python 2.3, which disabled it at the C level.
3139 python 2.3, which disabled it at the C level.
3135
3140
3136 2003-11-11 Fernando Perez <fperez@colorado.edu>
3141 2003-11-11 Fernando Perez <fperez@colorado.edu>
3137
3142
3138 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3143 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3139 for Numeric.array(map(...)), but often convenient.
3144 for Numeric.array(map(...)), but often convenient.
3140
3145
3141 2003-11-05 Fernando Perez <fperez@colorado.edu>
3146 2003-11-05 Fernando Perez <fperez@colorado.edu>
3142
3147
3143 * IPython/numutils.py (frange): Changed a call from int() to
3148 * IPython/numutils.py (frange): Changed a call from int() to
3144 int(round()) to prevent a problem reported with arange() in the
3149 int(round()) to prevent a problem reported with arange() in the
3145 numpy list.
3150 numpy list.
3146
3151
3147 2003-10-06 Fernando Perez <fperez@colorado.edu>
3152 2003-10-06 Fernando Perez <fperez@colorado.edu>
3148
3153
3149 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3154 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3150 prevent crashes if sys lacks an argv attribute (it happens with
3155 prevent crashes if sys lacks an argv attribute (it happens with
3151 embedded interpreters which build a bare-bones sys module).
3156 embedded interpreters which build a bare-bones sys module).
3152 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3157 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3153
3158
3154 2003-09-24 Fernando Perez <fperez@colorado.edu>
3159 2003-09-24 Fernando Perez <fperez@colorado.edu>
3155
3160
3156 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3161 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3157 to protect against poorly written user objects where __getattr__
3162 to protect against poorly written user objects where __getattr__
3158 raises exceptions other than AttributeError. Thanks to a bug
3163 raises exceptions other than AttributeError. Thanks to a bug
3159 report by Oliver Sander <osander-AT-gmx.de>.
3164 report by Oliver Sander <osander-AT-gmx.de>.
3160
3165
3161 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3166 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3162 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3167 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3163
3168
3164 2003-09-09 Fernando Perez <fperez@colorado.edu>
3169 2003-09-09 Fernando Perez <fperez@colorado.edu>
3165
3170
3166 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3171 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3167 unpacking a list whith a callable as first element would
3172 unpacking a list whith a callable as first element would
3168 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3173 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3169 Collins.
3174 Collins.
3170
3175
3171 2003-08-25 *** Released version 0.5.0
3176 2003-08-25 *** Released version 0.5.0
3172
3177
3173 2003-08-22 Fernando Perez <fperez@colorado.edu>
3178 2003-08-22 Fernando Perez <fperez@colorado.edu>
3174
3179
3175 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3180 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3176 improperly defined user exceptions. Thanks to feedback from Mark
3181 improperly defined user exceptions. Thanks to feedback from Mark
3177 Russell <mrussell-AT-verio.net>.
3182 Russell <mrussell-AT-verio.net>.
3178
3183
3179 2003-08-20 Fernando Perez <fperez@colorado.edu>
3184 2003-08-20 Fernando Perez <fperez@colorado.edu>
3180
3185
3181 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3186 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3182 printing so that it would print multi-line string forms starting
3187 printing so that it would print multi-line string forms starting
3183 with a new line. This way the formatting is better respected for
3188 with a new line. This way the formatting is better respected for
3184 objects which work hard to make nice string forms.
3189 objects which work hard to make nice string forms.
3185
3190
3186 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3191 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3187 autocall would overtake data access for objects with both
3192 autocall would overtake data access for objects with both
3188 __getitem__ and __call__.
3193 __getitem__ and __call__.
3189
3194
3190 2003-08-19 *** Released version 0.5.0-rc1
3195 2003-08-19 *** Released version 0.5.0-rc1
3191
3196
3192 2003-08-19 Fernando Perez <fperez@colorado.edu>
3197 2003-08-19 Fernando Perez <fperez@colorado.edu>
3193
3198
3194 * IPython/deep_reload.py (load_tail): single tiny change here
3199 * IPython/deep_reload.py (load_tail): single tiny change here
3195 seems to fix the long-standing bug of dreload() failing to work
3200 seems to fix the long-standing bug of dreload() failing to work
3196 for dotted names. But this module is pretty tricky, so I may have
3201 for dotted names. But this module is pretty tricky, so I may have
3197 missed some subtlety. Needs more testing!.
3202 missed some subtlety. Needs more testing!.
3198
3203
3199 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3204 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3200 exceptions which have badly implemented __str__ methods.
3205 exceptions which have badly implemented __str__ methods.
3201 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3206 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3202 which I've been getting reports about from Python 2.3 users. I
3207 which I've been getting reports about from Python 2.3 users. I
3203 wish I had a simple test case to reproduce the problem, so I could
3208 wish I had a simple test case to reproduce the problem, so I could
3204 either write a cleaner workaround or file a bug report if
3209 either write a cleaner workaround or file a bug report if
3205 necessary.
3210 necessary.
3206
3211
3207 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3212 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3208 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3213 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3209 a bug report by Tjabo Kloppenburg.
3214 a bug report by Tjabo Kloppenburg.
3210
3215
3211 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3216 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3212 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3217 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3213 seems rather unstable. Thanks to a bug report by Tjabo
3218 seems rather unstable. Thanks to a bug report by Tjabo
3214 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3219 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3215
3220
3216 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3221 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3217 this out soon because of the critical fixes in the inner loop for
3222 this out soon because of the critical fixes in the inner loop for
3218 generators.
3223 generators.
3219
3224
3220 * IPython/Magic.py (Magic.getargspec): removed. This (and
3225 * IPython/Magic.py (Magic.getargspec): removed. This (and
3221 _get_def) have been obsoleted by OInspect for a long time, I
3226 _get_def) have been obsoleted by OInspect for a long time, I
3222 hadn't noticed that they were dead code.
3227 hadn't noticed that they were dead code.
3223 (Magic._ofind): restored _ofind functionality for a few literals
3228 (Magic._ofind): restored _ofind functionality for a few literals
3224 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3229 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3225 for things like "hello".capitalize?, since that would require a
3230 for things like "hello".capitalize?, since that would require a
3226 potentially dangerous eval() again.
3231 potentially dangerous eval() again.
3227
3232
3228 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3233 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3229 logic a bit more to clean up the escapes handling and minimize the
3234 logic a bit more to clean up the escapes handling and minimize the
3230 use of _ofind to only necessary cases. The interactive 'feel' of
3235 use of _ofind to only necessary cases. The interactive 'feel' of
3231 IPython should have improved quite a bit with the changes in
3236 IPython should have improved quite a bit with the changes in
3232 _prefilter and _ofind (besides being far safer than before).
3237 _prefilter and _ofind (besides being far safer than before).
3233
3238
3234 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3239 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3235 obscure, never reported). Edit would fail to find the object to
3240 obscure, never reported). Edit would fail to find the object to
3236 edit under some circumstances.
3241 edit under some circumstances.
3237 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3242 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3238 which were causing double-calling of generators. Those eval calls
3243 which were causing double-calling of generators. Those eval calls
3239 were _very_ dangerous, since code with side effects could be
3244 were _very_ dangerous, since code with side effects could be
3240 triggered. As they say, 'eval is evil'... These were the
3245 triggered. As they say, 'eval is evil'... These were the
3241 nastiest evals in IPython. Besides, _ofind is now far simpler,
3246 nastiest evals in IPython. Besides, _ofind is now far simpler,
3242 and it should also be quite a bit faster. Its use of inspect is
3247 and it should also be quite a bit faster. Its use of inspect is
3243 also safer, so perhaps some of the inspect-related crashes I've
3248 also safer, so perhaps some of the inspect-related crashes I've
3244 seen lately with Python 2.3 might be taken care of. That will
3249 seen lately with Python 2.3 might be taken care of. That will
3245 need more testing.
3250 need more testing.
3246
3251
3247 2003-08-17 Fernando Perez <fperez@colorado.edu>
3252 2003-08-17 Fernando Perez <fperez@colorado.edu>
3248
3253
3249 * IPython/iplib.py (InteractiveShell._prefilter): significant
3254 * IPython/iplib.py (InteractiveShell._prefilter): significant
3250 simplifications to the logic for handling user escapes. Faster
3255 simplifications to the logic for handling user escapes. Faster
3251 and simpler code.
3256 and simpler code.
3252
3257
3253 2003-08-14 Fernando Perez <fperez@colorado.edu>
3258 2003-08-14 Fernando Perez <fperez@colorado.edu>
3254
3259
3255 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3260 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3256 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3261 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3257 but it should be quite a bit faster. And the recursive version
3262 but it should be quite a bit faster. And the recursive version
3258 generated O(log N) intermediate storage for all rank>1 arrays,
3263 generated O(log N) intermediate storage for all rank>1 arrays,
3259 even if they were contiguous.
3264 even if they were contiguous.
3260 (l1norm): Added this function.
3265 (l1norm): Added this function.
3261 (norm): Added this function for arbitrary norms (including
3266 (norm): Added this function for arbitrary norms (including
3262 l-infinity). l1 and l2 are still special cases for convenience
3267 l-infinity). l1 and l2 are still special cases for convenience
3263 and speed.
3268 and speed.
3264
3269
3265 2003-08-03 Fernando Perez <fperez@colorado.edu>
3270 2003-08-03 Fernando Perez <fperez@colorado.edu>
3266
3271
3267 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3272 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3268 exceptions, which now raise PendingDeprecationWarnings in Python
3273 exceptions, which now raise PendingDeprecationWarnings in Python
3269 2.3. There were some in Magic and some in Gnuplot2.
3274 2.3. There were some in Magic and some in Gnuplot2.
3270
3275
3271 2003-06-30 Fernando Perez <fperez@colorado.edu>
3276 2003-06-30 Fernando Perez <fperez@colorado.edu>
3272
3277
3273 * IPython/genutils.py (page): modified to call curses only for
3278 * IPython/genutils.py (page): modified to call curses only for
3274 terminals where TERM=='xterm'. After problems under many other
3279 terminals where TERM=='xterm'. After problems under many other
3275 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3280 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3276
3281
3277 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3282 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3278 would be triggered when readline was absent. This was just an old
3283 would be triggered when readline was absent. This was just an old
3279 debugging statement I'd forgotten to take out.
3284 debugging statement I'd forgotten to take out.
3280
3285
3281 2003-06-20 Fernando Perez <fperez@colorado.edu>
3286 2003-06-20 Fernando Perez <fperez@colorado.edu>
3282
3287
3283 * IPython/genutils.py (clock): modified to return only user time
3288 * IPython/genutils.py (clock): modified to return only user time
3284 (not counting system time), after a discussion on scipy. While
3289 (not counting system time), after a discussion on scipy. While
3285 system time may be a useful quantity occasionally, it may much
3290 system time may be a useful quantity occasionally, it may much
3286 more easily be skewed by occasional swapping or other similar
3291 more easily be skewed by occasional swapping or other similar
3287 activity.
3292 activity.
3288
3293
3289 2003-06-05 Fernando Perez <fperez@colorado.edu>
3294 2003-06-05 Fernando Perez <fperez@colorado.edu>
3290
3295
3291 * IPython/numutils.py (identity): new function, for building
3296 * IPython/numutils.py (identity): new function, for building
3292 arbitrary rank Kronecker deltas (mostly backwards compatible with
3297 arbitrary rank Kronecker deltas (mostly backwards compatible with
3293 Numeric.identity)
3298 Numeric.identity)
3294
3299
3295 2003-06-03 Fernando Perez <fperez@colorado.edu>
3300 2003-06-03 Fernando Perez <fperez@colorado.edu>
3296
3301
3297 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3302 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3298 arguments passed to magics with spaces, to allow trailing '\' to
3303 arguments passed to magics with spaces, to allow trailing '\' to
3299 work normally (mainly for Windows users).
3304 work normally (mainly for Windows users).
3300
3305
3301 2003-05-29 Fernando Perez <fperez@colorado.edu>
3306 2003-05-29 Fernando Perez <fperez@colorado.edu>
3302
3307
3303 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3308 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3304 instead of pydoc.help. This fixes a bizarre behavior where
3309 instead of pydoc.help. This fixes a bizarre behavior where
3305 printing '%s' % locals() would trigger the help system. Now
3310 printing '%s' % locals() would trigger the help system. Now
3306 ipython behaves like normal python does.
3311 ipython behaves like normal python does.
3307
3312
3308 Note that if one does 'from pydoc import help', the bizarre
3313 Note that if one does 'from pydoc import help', the bizarre
3309 behavior returns, but this will also happen in normal python, so
3314 behavior returns, but this will also happen in normal python, so
3310 it's not an ipython bug anymore (it has to do with how pydoc.help
3315 it's not an ipython bug anymore (it has to do with how pydoc.help
3311 is implemented).
3316 is implemented).
3312
3317
3313 2003-05-22 Fernando Perez <fperez@colorado.edu>
3318 2003-05-22 Fernando Perez <fperez@colorado.edu>
3314
3319
3315 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3320 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3316 return [] instead of None when nothing matches, also match to end
3321 return [] instead of None when nothing matches, also match to end
3317 of line. Patch by Gary Bishop.
3322 of line. Patch by Gary Bishop.
3318
3323
3319 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3324 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3320 protection as before, for files passed on the command line. This
3325 protection as before, for files passed on the command line. This
3321 prevents the CrashHandler from kicking in if user files call into
3326 prevents the CrashHandler from kicking in if user files call into
3322 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3327 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3323 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3328 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3324
3329
3325 2003-05-20 *** Released version 0.4.0
3330 2003-05-20 *** Released version 0.4.0
3326
3331
3327 2003-05-20 Fernando Perez <fperez@colorado.edu>
3332 2003-05-20 Fernando Perez <fperez@colorado.edu>
3328
3333
3329 * setup.py: added support for manpages. It's a bit hackish b/c of
3334 * setup.py: added support for manpages. It's a bit hackish b/c of
3330 a bug in the way the bdist_rpm distutils target handles gzipped
3335 a bug in the way the bdist_rpm distutils target handles gzipped
3331 manpages, but it works. After a patch by Jack.
3336 manpages, but it works. After a patch by Jack.
3332
3337
3333 2003-05-19 Fernando Perez <fperez@colorado.edu>
3338 2003-05-19 Fernando Perez <fperez@colorado.edu>
3334
3339
3335 * IPython/numutils.py: added a mockup of the kinds module, since
3340 * IPython/numutils.py: added a mockup of the kinds module, since
3336 it was recently removed from Numeric. This way, numutils will
3341 it was recently removed from Numeric. This way, numutils will
3337 work for all users even if they are missing kinds.
3342 work for all users even if they are missing kinds.
3338
3343
3339 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3344 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3340 failure, which can occur with SWIG-wrapped extensions. After a
3345 failure, which can occur with SWIG-wrapped extensions. After a
3341 crash report from Prabhu.
3346 crash report from Prabhu.
3342
3347
3343 2003-05-16 Fernando Perez <fperez@colorado.edu>
3348 2003-05-16 Fernando Perez <fperez@colorado.edu>
3344
3349
3345 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3350 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3346 protect ipython from user code which may call directly
3351 protect ipython from user code which may call directly
3347 sys.excepthook (this looks like an ipython crash to the user, even
3352 sys.excepthook (this looks like an ipython crash to the user, even
3348 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3353 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3349 This is especially important to help users of WxWindows, but may
3354 This is especially important to help users of WxWindows, but may
3350 also be useful in other cases.
3355 also be useful in other cases.
3351
3356
3352 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3357 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3353 an optional tb_offset to be specified, and to preserve exception
3358 an optional tb_offset to be specified, and to preserve exception
3354 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3359 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3355
3360
3356 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3361 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3357
3362
3358 2003-05-15 Fernando Perez <fperez@colorado.edu>
3363 2003-05-15 Fernando Perez <fperez@colorado.edu>
3359
3364
3360 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3365 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3361 installing for a new user under Windows.
3366 installing for a new user under Windows.
3362
3367
3363 2003-05-12 Fernando Perez <fperez@colorado.edu>
3368 2003-05-12 Fernando Perez <fperez@colorado.edu>
3364
3369
3365 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3370 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3366 handler for Emacs comint-based lines. Currently it doesn't do
3371 handler for Emacs comint-based lines. Currently it doesn't do
3367 much (but importantly, it doesn't update the history cache). In
3372 much (but importantly, it doesn't update the history cache). In
3368 the future it may be expanded if Alex needs more functionality
3373 the future it may be expanded if Alex needs more functionality
3369 there.
3374 there.
3370
3375
3371 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3376 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3372 info to crash reports.
3377 info to crash reports.
3373
3378
3374 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3379 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3375 just like Python's -c. Also fixed crash with invalid -color
3380 just like Python's -c. Also fixed crash with invalid -color
3376 option value at startup. Thanks to Will French
3381 option value at startup. Thanks to Will French
3377 <wfrench-AT-bestweb.net> for the bug report.
3382 <wfrench-AT-bestweb.net> for the bug report.
3378
3383
3379 2003-05-09 Fernando Perez <fperez@colorado.edu>
3384 2003-05-09 Fernando Perez <fperez@colorado.edu>
3380
3385
3381 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3386 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3382 to EvalDict (it's a mapping, after all) and simplified its code
3387 to EvalDict (it's a mapping, after all) and simplified its code
3383 quite a bit, after a nice discussion on c.l.py where Gustavo
3388 quite a bit, after a nice discussion on c.l.py where Gustavo
3384 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3389 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3385
3390
3386 2003-04-30 Fernando Perez <fperez@colorado.edu>
3391 2003-04-30 Fernando Perez <fperez@colorado.edu>
3387
3392
3388 * IPython/genutils.py (timings_out): modified it to reduce its
3393 * IPython/genutils.py (timings_out): modified it to reduce its
3389 overhead in the common reps==1 case.
3394 overhead in the common reps==1 case.
3390
3395
3391 2003-04-29 Fernando Perez <fperez@colorado.edu>
3396 2003-04-29 Fernando Perez <fperez@colorado.edu>
3392
3397
3393 * IPython/genutils.py (timings_out): Modified to use the resource
3398 * IPython/genutils.py (timings_out): Modified to use the resource
3394 module, which avoids the wraparound problems of time.clock().
3399 module, which avoids the wraparound problems of time.clock().
3395
3400
3396 2003-04-17 *** Released version 0.2.15pre4
3401 2003-04-17 *** Released version 0.2.15pre4
3397
3402
3398 2003-04-17 Fernando Perez <fperez@colorado.edu>
3403 2003-04-17 Fernando Perez <fperez@colorado.edu>
3399
3404
3400 * setup.py (scriptfiles): Split windows-specific stuff over to a
3405 * setup.py (scriptfiles): Split windows-specific stuff over to a
3401 separate file, in an attempt to have a Windows GUI installer.
3406 separate file, in an attempt to have a Windows GUI installer.
3402 That didn't work, but part of the groundwork is done.
3407 That didn't work, but part of the groundwork is done.
3403
3408
3404 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3409 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3405 indent/unindent with 4 spaces. Particularly useful in combination
3410 indent/unindent with 4 spaces. Particularly useful in combination
3406 with the new auto-indent option.
3411 with the new auto-indent option.
3407
3412
3408 2003-04-16 Fernando Perez <fperez@colorado.edu>
3413 2003-04-16 Fernando Perez <fperez@colorado.edu>
3409
3414
3410 * IPython/Magic.py: various replacements of self.rc for
3415 * IPython/Magic.py: various replacements of self.rc for
3411 self.shell.rc. A lot more remains to be done to fully disentangle
3416 self.shell.rc. A lot more remains to be done to fully disentangle
3412 this class from the main Shell class.
3417 this class from the main Shell class.
3413
3418
3414 * IPython/GnuplotRuntime.py: added checks for mouse support so
3419 * IPython/GnuplotRuntime.py: added checks for mouse support so
3415 that we don't try to enable it if the current gnuplot doesn't
3420 that we don't try to enable it if the current gnuplot doesn't
3416 really support it. Also added checks so that we don't try to
3421 really support it. Also added checks so that we don't try to
3417 enable persist under Windows (where Gnuplot doesn't recognize the
3422 enable persist under Windows (where Gnuplot doesn't recognize the
3418 option).
3423 option).
3419
3424
3420 * IPython/iplib.py (InteractiveShell.interact): Added optional
3425 * IPython/iplib.py (InteractiveShell.interact): Added optional
3421 auto-indenting code, after a patch by King C. Shu
3426 auto-indenting code, after a patch by King C. Shu
3422 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3427 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3423 get along well with pasting indented code. If I ever figure out
3428 get along well with pasting indented code. If I ever figure out
3424 how to make that part go well, it will become on by default.
3429 how to make that part go well, it will become on by default.
3425
3430
3426 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3431 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3427 crash ipython if there was an unmatched '%' in the user's prompt
3432 crash ipython if there was an unmatched '%' in the user's prompt
3428 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3433 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3429
3434
3430 * IPython/iplib.py (InteractiveShell.interact): removed the
3435 * IPython/iplib.py (InteractiveShell.interact): removed the
3431 ability to ask the user whether he wants to crash or not at the
3436 ability to ask the user whether he wants to crash or not at the
3432 'last line' exception handler. Calling functions at that point
3437 'last line' exception handler. Calling functions at that point
3433 changes the stack, and the error reports would have incorrect
3438 changes the stack, and the error reports would have incorrect
3434 tracebacks.
3439 tracebacks.
3435
3440
3436 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3441 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3437 pass through a peger a pretty-printed form of any object. After a
3442 pass through a peger a pretty-printed form of any object. After a
3438 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3443 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3439
3444
3440 2003-04-14 Fernando Perez <fperez@colorado.edu>
3445 2003-04-14 Fernando Perez <fperez@colorado.edu>
3441
3446
3442 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3447 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3443 all files in ~ would be modified at first install (instead of
3448 all files in ~ would be modified at first install (instead of
3444 ~/.ipython). This could be potentially disastrous, as the
3449 ~/.ipython). This could be potentially disastrous, as the
3445 modification (make line-endings native) could damage binary files.
3450 modification (make line-endings native) could damage binary files.
3446
3451
3447 2003-04-10 Fernando Perez <fperez@colorado.edu>
3452 2003-04-10 Fernando Perez <fperez@colorado.edu>
3448
3453
3449 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3454 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3450 handle only lines which are invalid python. This now means that
3455 handle only lines which are invalid python. This now means that
3451 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3456 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3452 for the bug report.
3457 for the bug report.
3453
3458
3454 2003-04-01 Fernando Perez <fperez@colorado.edu>
3459 2003-04-01 Fernando Perez <fperez@colorado.edu>
3455
3460
3456 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3461 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3457 where failing to set sys.last_traceback would crash pdb.pm().
3462 where failing to set sys.last_traceback would crash pdb.pm().
3458 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3463 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3459 report.
3464 report.
3460
3465
3461 2003-03-25 Fernando Perez <fperez@colorado.edu>
3466 2003-03-25 Fernando Perez <fperez@colorado.edu>
3462
3467
3463 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3468 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3464 before printing it (it had a lot of spurious blank lines at the
3469 before printing it (it had a lot of spurious blank lines at the
3465 end).
3470 end).
3466
3471
3467 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3472 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3468 output would be sent 21 times! Obviously people don't use this
3473 output would be sent 21 times! Obviously people don't use this
3469 too often, or I would have heard about it.
3474 too often, or I would have heard about it.
3470
3475
3471 2003-03-24 Fernando Perez <fperez@colorado.edu>
3476 2003-03-24 Fernando Perez <fperez@colorado.edu>
3472
3477
3473 * setup.py (scriptfiles): renamed the data_files parameter from
3478 * setup.py (scriptfiles): renamed the data_files parameter from
3474 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3479 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3475 for the patch.
3480 for the patch.
3476
3481
3477 2003-03-20 Fernando Perez <fperez@colorado.edu>
3482 2003-03-20 Fernando Perez <fperez@colorado.edu>
3478
3483
3479 * IPython/genutils.py (error): added error() and fatal()
3484 * IPython/genutils.py (error): added error() and fatal()
3480 functions.
3485 functions.
3481
3486
3482 2003-03-18 *** Released version 0.2.15pre3
3487 2003-03-18 *** Released version 0.2.15pre3
3483
3488
3484 2003-03-18 Fernando Perez <fperez@colorado.edu>
3489 2003-03-18 Fernando Perez <fperez@colorado.edu>
3485
3490
3486 * setupext/install_data_ext.py
3491 * setupext/install_data_ext.py
3487 (install_data_ext.initialize_options): Class contributed by Jack
3492 (install_data_ext.initialize_options): Class contributed by Jack
3488 Moffit for fixing the old distutils hack. He is sending this to
3493 Moffit for fixing the old distutils hack. He is sending this to
3489 the distutils folks so in the future we may not need it as a
3494 the distutils folks so in the future we may not need it as a
3490 private fix.
3495 private fix.
3491
3496
3492 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3497 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3493 changes for Debian packaging. See his patch for full details.
3498 changes for Debian packaging. See his patch for full details.
3494 The old distutils hack of making the ipythonrc* files carry a
3499 The old distutils hack of making the ipythonrc* files carry a
3495 bogus .py extension is gone, at last. Examples were moved to a
3500 bogus .py extension is gone, at last. Examples were moved to a
3496 separate subdir under doc/, and the separate executable scripts
3501 separate subdir under doc/, and the separate executable scripts
3497 now live in their own directory. Overall a great cleanup. The
3502 now live in their own directory. Overall a great cleanup. The
3498 manual was updated to use the new files, and setup.py has been
3503 manual was updated to use the new files, and setup.py has been
3499 fixed for this setup.
3504 fixed for this setup.
3500
3505
3501 * IPython/PyColorize.py (Parser.usage): made non-executable and
3506 * IPython/PyColorize.py (Parser.usage): made non-executable and
3502 created a pycolor wrapper around it to be included as a script.
3507 created a pycolor wrapper around it to be included as a script.
3503
3508
3504 2003-03-12 *** Released version 0.2.15pre2
3509 2003-03-12 *** Released version 0.2.15pre2
3505
3510
3506 2003-03-12 Fernando Perez <fperez@colorado.edu>
3511 2003-03-12 Fernando Perez <fperez@colorado.edu>
3507
3512
3508 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3513 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3509 long-standing problem with garbage characters in some terminals.
3514 long-standing problem with garbage characters in some terminals.
3510 The issue was really that the \001 and \002 escapes must _only_ be
3515 The issue was really that the \001 and \002 escapes must _only_ be
3511 passed to input prompts (which call readline), but _never_ to
3516 passed to input prompts (which call readline), but _never_ to
3512 normal text to be printed on screen. I changed ColorANSI to have
3517 normal text to be printed on screen. I changed ColorANSI to have
3513 two classes: TermColors and InputTermColors, each with the
3518 two classes: TermColors and InputTermColors, each with the
3514 appropriate escapes for input prompts or normal text. The code in
3519 appropriate escapes for input prompts or normal text. The code in
3515 Prompts.py got slightly more complicated, but this very old and
3520 Prompts.py got slightly more complicated, but this very old and
3516 annoying bug is finally fixed.
3521 annoying bug is finally fixed.
3517
3522
3518 All the credit for nailing down the real origin of this problem
3523 All the credit for nailing down the real origin of this problem
3519 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3524 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3520 *Many* thanks to him for spending quite a bit of effort on this.
3525 *Many* thanks to him for spending quite a bit of effort on this.
3521
3526
3522 2003-03-05 *** Released version 0.2.15pre1
3527 2003-03-05 *** Released version 0.2.15pre1
3523
3528
3524 2003-03-03 Fernando Perez <fperez@colorado.edu>
3529 2003-03-03 Fernando Perez <fperez@colorado.edu>
3525
3530
3526 * IPython/FakeModule.py: Moved the former _FakeModule to a
3531 * IPython/FakeModule.py: Moved the former _FakeModule to a
3527 separate file, because it's also needed by Magic (to fix a similar
3532 separate file, because it's also needed by Magic (to fix a similar
3528 pickle-related issue in @run).
3533 pickle-related issue in @run).
3529
3534
3530 2003-03-02 Fernando Perez <fperez@colorado.edu>
3535 2003-03-02 Fernando Perez <fperez@colorado.edu>
3531
3536
3532 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3537 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3533 the autocall option at runtime.
3538 the autocall option at runtime.
3534 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3539 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3535 across Magic.py to start separating Magic from InteractiveShell.
3540 across Magic.py to start separating Magic from InteractiveShell.
3536 (Magic._ofind): Fixed to return proper namespace for dotted
3541 (Magic._ofind): Fixed to return proper namespace for dotted
3537 names. Before, a dotted name would always return 'not currently
3542 names. Before, a dotted name would always return 'not currently
3538 defined', because it would find the 'parent'. s.x would be found,
3543 defined', because it would find the 'parent'. s.x would be found,
3539 but since 'x' isn't defined by itself, it would get confused.
3544 but since 'x' isn't defined by itself, it would get confused.
3540 (Magic.magic_run): Fixed pickling problems reported by Ralf
3545 (Magic.magic_run): Fixed pickling problems reported by Ralf
3541 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3546 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3542 that I'd used when Mike Heeter reported similar issues at the
3547 that I'd used when Mike Heeter reported similar issues at the
3543 top-level, but now for @run. It boils down to injecting the
3548 top-level, but now for @run. It boils down to injecting the
3544 namespace where code is being executed with something that looks
3549 namespace where code is being executed with something that looks
3545 enough like a module to fool pickle.dump(). Since a pickle stores
3550 enough like a module to fool pickle.dump(). Since a pickle stores
3546 a named reference to the importing module, we need this for
3551 a named reference to the importing module, we need this for
3547 pickles to save something sensible.
3552 pickles to save something sensible.
3548
3553
3549 * IPython/ipmaker.py (make_IPython): added an autocall option.
3554 * IPython/ipmaker.py (make_IPython): added an autocall option.
3550
3555
3551 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3556 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3552 the auto-eval code. Now autocalling is an option, and the code is
3557 the auto-eval code. Now autocalling is an option, and the code is
3553 also vastly safer. There is no more eval() involved at all.
3558 also vastly safer. There is no more eval() involved at all.
3554
3559
3555 2003-03-01 Fernando Perez <fperez@colorado.edu>
3560 2003-03-01 Fernando Perez <fperez@colorado.edu>
3556
3561
3557 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3562 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3558 dict with named keys instead of a tuple.
3563 dict with named keys instead of a tuple.
3559
3564
3560 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3565 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3561
3566
3562 * setup.py (make_shortcut): Fixed message about directories
3567 * setup.py (make_shortcut): Fixed message about directories
3563 created during Windows installation (the directories were ok, just
3568 created during Windows installation (the directories were ok, just
3564 the printed message was misleading). Thanks to Chris Liechti
3569 the printed message was misleading). Thanks to Chris Liechti
3565 <cliechti-AT-gmx.net> for the heads up.
3570 <cliechti-AT-gmx.net> for the heads up.
3566
3571
3567 2003-02-21 Fernando Perez <fperez@colorado.edu>
3572 2003-02-21 Fernando Perez <fperez@colorado.edu>
3568
3573
3569 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3574 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3570 of ValueError exception when checking for auto-execution. This
3575 of ValueError exception when checking for auto-execution. This
3571 one is raised by things like Numeric arrays arr.flat when the
3576 one is raised by things like Numeric arrays arr.flat when the
3572 array is non-contiguous.
3577 array is non-contiguous.
3573
3578
3574 2003-01-31 Fernando Perez <fperez@colorado.edu>
3579 2003-01-31 Fernando Perez <fperez@colorado.edu>
3575
3580
3576 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3581 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3577 not return any value at all (even though the command would get
3582 not return any value at all (even though the command would get
3578 executed).
3583 executed).
3579 (xsys): Flush stdout right after printing the command to ensure
3584 (xsys): Flush stdout right after printing the command to ensure
3580 proper ordering of commands and command output in the total
3585 proper ordering of commands and command output in the total
3581 output.
3586 output.
3582 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3587 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3583 system/getoutput as defaults. The old ones are kept for
3588 system/getoutput as defaults. The old ones are kept for
3584 compatibility reasons, so no code which uses this library needs
3589 compatibility reasons, so no code which uses this library needs
3585 changing.
3590 changing.
3586
3591
3587 2003-01-27 *** Released version 0.2.14
3592 2003-01-27 *** Released version 0.2.14
3588
3593
3589 2003-01-25 Fernando Perez <fperez@colorado.edu>
3594 2003-01-25 Fernando Perez <fperez@colorado.edu>
3590
3595
3591 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3596 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3592 functions defined in previous edit sessions could not be re-edited
3597 functions defined in previous edit sessions could not be re-edited
3593 (because the temp files were immediately removed). Now temp files
3598 (because the temp files were immediately removed). Now temp files
3594 are removed only at IPython's exit.
3599 are removed only at IPython's exit.
3595 (Magic.magic_run): Improved @run to perform shell-like expansions
3600 (Magic.magic_run): Improved @run to perform shell-like expansions
3596 on its arguments (~users and $VARS). With this, @run becomes more
3601 on its arguments (~users and $VARS). With this, @run becomes more
3597 like a normal command-line.
3602 like a normal command-line.
3598
3603
3599 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3604 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3600 bugs related to embedding and cleaned up that code. A fairly
3605 bugs related to embedding and cleaned up that code. A fairly
3601 important one was the impossibility to access the global namespace
3606 important one was the impossibility to access the global namespace
3602 through the embedded IPython (only local variables were visible).
3607 through the embedded IPython (only local variables were visible).
3603
3608
3604 2003-01-14 Fernando Perez <fperez@colorado.edu>
3609 2003-01-14 Fernando Perez <fperez@colorado.edu>
3605
3610
3606 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3611 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3607 auto-calling to be a bit more conservative. Now it doesn't get
3612 auto-calling to be a bit more conservative. Now it doesn't get
3608 triggered if any of '!=()<>' are in the rest of the input line, to
3613 triggered if any of '!=()<>' are in the rest of the input line, to
3609 allow comparing callables. Thanks to Alex for the heads up.
3614 allow comparing callables. Thanks to Alex for the heads up.
3610
3615
3611 2003-01-07 Fernando Perez <fperez@colorado.edu>
3616 2003-01-07 Fernando Perez <fperez@colorado.edu>
3612
3617
3613 * IPython/genutils.py (page): fixed estimation of the number of
3618 * IPython/genutils.py (page): fixed estimation of the number of
3614 lines in a string to be paged to simply count newlines. This
3619 lines in a string to be paged to simply count newlines. This
3615 prevents over-guessing due to embedded escape sequences. A better
3620 prevents over-guessing due to embedded escape sequences. A better
3616 long-term solution would involve stripping out the control chars
3621 long-term solution would involve stripping out the control chars
3617 for the count, but it's potentially so expensive I just don't
3622 for the count, but it's potentially so expensive I just don't
3618 think it's worth doing.
3623 think it's worth doing.
3619
3624
3620 2002-12-19 *** Released version 0.2.14pre50
3625 2002-12-19 *** Released version 0.2.14pre50
3621
3626
3622 2002-12-19 Fernando Perez <fperez@colorado.edu>
3627 2002-12-19 Fernando Perez <fperez@colorado.edu>
3623
3628
3624 * tools/release (version): Changed release scripts to inform
3629 * tools/release (version): Changed release scripts to inform
3625 Andrea and build a NEWS file with a list of recent changes.
3630 Andrea and build a NEWS file with a list of recent changes.
3626
3631
3627 * IPython/ColorANSI.py (__all__): changed terminal detection
3632 * IPython/ColorANSI.py (__all__): changed terminal detection
3628 code. Seems to work better for xterms without breaking
3633 code. Seems to work better for xterms without breaking
3629 konsole. Will need more testing to determine if WinXP and Mac OSX
3634 konsole. Will need more testing to determine if WinXP and Mac OSX
3630 also work ok.
3635 also work ok.
3631
3636
3632 2002-12-18 *** Released version 0.2.14pre49
3637 2002-12-18 *** Released version 0.2.14pre49
3633
3638
3634 2002-12-18 Fernando Perez <fperez@colorado.edu>
3639 2002-12-18 Fernando Perez <fperez@colorado.edu>
3635
3640
3636 * Docs: added new info about Mac OSX, from Andrea.
3641 * Docs: added new info about Mac OSX, from Andrea.
3637
3642
3638 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3643 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3639 allow direct plotting of python strings whose format is the same
3644 allow direct plotting of python strings whose format is the same
3640 of gnuplot data files.
3645 of gnuplot data files.
3641
3646
3642 2002-12-16 Fernando Perez <fperez@colorado.edu>
3647 2002-12-16 Fernando Perez <fperez@colorado.edu>
3643
3648
3644 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3649 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3645 value of exit question to be acknowledged.
3650 value of exit question to be acknowledged.
3646
3651
3647 2002-12-03 Fernando Perez <fperez@colorado.edu>
3652 2002-12-03 Fernando Perez <fperez@colorado.edu>
3648
3653
3649 * IPython/ipmaker.py: removed generators, which had been added
3654 * IPython/ipmaker.py: removed generators, which had been added
3650 by mistake in an earlier debugging run. This was causing trouble
3655 by mistake in an earlier debugging run. This was causing trouble
3651 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3656 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3652 for pointing this out.
3657 for pointing this out.
3653
3658
3654 2002-11-17 Fernando Perez <fperez@colorado.edu>
3659 2002-11-17 Fernando Perez <fperez@colorado.edu>
3655
3660
3656 * Manual: updated the Gnuplot section.
3661 * Manual: updated the Gnuplot section.
3657
3662
3658 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3663 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3659 a much better split of what goes in Runtime and what goes in
3664 a much better split of what goes in Runtime and what goes in
3660 Interactive.
3665 Interactive.
3661
3666
3662 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3667 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3663 being imported from iplib.
3668 being imported from iplib.
3664
3669
3665 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3670 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3666 for command-passing. Now the global Gnuplot instance is called
3671 for command-passing. Now the global Gnuplot instance is called
3667 'gp' instead of 'g', which was really a far too fragile and
3672 'gp' instead of 'g', which was really a far too fragile and
3668 common name.
3673 common name.
3669
3674
3670 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3675 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3671 bounding boxes generated by Gnuplot for square plots.
3676 bounding boxes generated by Gnuplot for square plots.
3672
3677
3673 * IPython/genutils.py (popkey): new function added. I should
3678 * IPython/genutils.py (popkey): new function added. I should
3674 suggest this on c.l.py as a dict method, it seems useful.
3679 suggest this on c.l.py as a dict method, it seems useful.
3675
3680
3676 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3681 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3677 to transparently handle PostScript generation. MUCH better than
3682 to transparently handle PostScript generation. MUCH better than
3678 the previous plot_eps/replot_eps (which I removed now). The code
3683 the previous plot_eps/replot_eps (which I removed now). The code
3679 is also fairly clean and well documented now (including
3684 is also fairly clean and well documented now (including
3680 docstrings).
3685 docstrings).
3681
3686
3682 2002-11-13 Fernando Perez <fperez@colorado.edu>
3687 2002-11-13 Fernando Perez <fperez@colorado.edu>
3683
3688
3684 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3689 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3685 (inconsistent with options).
3690 (inconsistent with options).
3686
3691
3687 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3692 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3688 manually disabled, I don't know why. Fixed it.
3693 manually disabled, I don't know why. Fixed it.
3689 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3694 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3690 eps output.
3695 eps output.
3691
3696
3692 2002-11-12 Fernando Perez <fperez@colorado.edu>
3697 2002-11-12 Fernando Perez <fperez@colorado.edu>
3693
3698
3694 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3699 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3695 don't propagate up to caller. Fixes crash reported by François
3700 don't propagate up to caller. Fixes crash reported by François
3696 Pinard.
3701 Pinard.
3697
3702
3698 2002-11-09 Fernando Perez <fperez@colorado.edu>
3703 2002-11-09 Fernando Perez <fperez@colorado.edu>
3699
3704
3700 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3705 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3701 history file for new users.
3706 history file for new users.
3702 (make_IPython): fixed bug where initial install would leave the
3707 (make_IPython): fixed bug where initial install would leave the
3703 user running in the .ipython dir.
3708 user running in the .ipython dir.
3704 (make_IPython): fixed bug where config dir .ipython would be
3709 (make_IPython): fixed bug where config dir .ipython would be
3705 created regardless of the given -ipythondir option. Thanks to Cory
3710 created regardless of the given -ipythondir option. Thanks to Cory
3706 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3711 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3707
3712
3708 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3713 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3709 type confirmations. Will need to use it in all of IPython's code
3714 type confirmations. Will need to use it in all of IPython's code
3710 consistently.
3715 consistently.
3711
3716
3712 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3717 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3713 context to print 31 lines instead of the default 5. This will make
3718 context to print 31 lines instead of the default 5. This will make
3714 the crash reports extremely detailed in case the problem is in
3719 the crash reports extremely detailed in case the problem is in
3715 libraries I don't have access to.
3720 libraries I don't have access to.
3716
3721
3717 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3722 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3718 line of defense' code to still crash, but giving users fair
3723 line of defense' code to still crash, but giving users fair
3719 warning. I don't want internal errors to go unreported: if there's
3724 warning. I don't want internal errors to go unreported: if there's
3720 an internal problem, IPython should crash and generate a full
3725 an internal problem, IPython should crash and generate a full
3721 report.
3726 report.
3722
3727
3723 2002-11-08 Fernando Perez <fperez@colorado.edu>
3728 2002-11-08 Fernando Perez <fperez@colorado.edu>
3724
3729
3725 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3730 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3726 otherwise uncaught exceptions which can appear if people set
3731 otherwise uncaught exceptions which can appear if people set
3727 sys.stdout to something badly broken. Thanks to a crash report
3732 sys.stdout to something badly broken. Thanks to a crash report
3728 from henni-AT-mail.brainbot.com.
3733 from henni-AT-mail.brainbot.com.
3729
3734
3730 2002-11-04 Fernando Perez <fperez@colorado.edu>
3735 2002-11-04 Fernando Perez <fperez@colorado.edu>
3731
3736
3732 * IPython/iplib.py (InteractiveShell.interact): added
3737 * IPython/iplib.py (InteractiveShell.interact): added
3733 __IPYTHON__active to the builtins. It's a flag which goes on when
3738 __IPYTHON__active to the builtins. It's a flag which goes on when
3734 the interaction starts and goes off again when it stops. This
3739 the interaction starts and goes off again when it stops. This
3735 allows embedding code to detect being inside IPython. Before this
3740 allows embedding code to detect being inside IPython. Before this
3736 was done via __IPYTHON__, but that only shows that an IPython
3741 was done via __IPYTHON__, but that only shows that an IPython
3737 instance has been created.
3742 instance has been created.
3738
3743
3739 * IPython/Magic.py (Magic.magic_env): I realized that in a
3744 * IPython/Magic.py (Magic.magic_env): I realized that in a
3740 UserDict, instance.data holds the data as a normal dict. So I
3745 UserDict, instance.data holds the data as a normal dict. So I
3741 modified @env to return os.environ.data instead of rebuilding a
3746 modified @env to return os.environ.data instead of rebuilding a
3742 dict by hand.
3747 dict by hand.
3743
3748
3744 2002-11-02 Fernando Perez <fperez@colorado.edu>
3749 2002-11-02 Fernando Perez <fperez@colorado.edu>
3745
3750
3746 * IPython/genutils.py (warn): changed so that level 1 prints no
3751 * IPython/genutils.py (warn): changed so that level 1 prints no
3747 header. Level 2 is now the default (with 'WARNING' header, as
3752 header. Level 2 is now the default (with 'WARNING' header, as
3748 before). I think I tracked all places where changes were needed in
3753 before). I think I tracked all places where changes were needed in
3749 IPython, but outside code using the old level numbering may have
3754 IPython, but outside code using the old level numbering may have
3750 broken.
3755 broken.
3751
3756
3752 * IPython/iplib.py (InteractiveShell.runcode): added this to
3757 * IPython/iplib.py (InteractiveShell.runcode): added this to
3753 handle the tracebacks in SystemExit traps correctly. The previous
3758 handle the tracebacks in SystemExit traps correctly. The previous
3754 code (through interact) was printing more of the stack than
3759 code (through interact) was printing more of the stack than
3755 necessary, showing IPython internal code to the user.
3760 necessary, showing IPython internal code to the user.
3756
3761
3757 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3762 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3758 default. Now that the default at the confirmation prompt is yes,
3763 default. Now that the default at the confirmation prompt is yes,
3759 it's not so intrusive. François' argument that ipython sessions
3764 it's not so intrusive. François' argument that ipython sessions
3760 tend to be complex enough not to lose them from an accidental C-d,
3765 tend to be complex enough not to lose them from an accidental C-d,
3761 is a valid one.
3766 is a valid one.
3762
3767
3763 * IPython/iplib.py (InteractiveShell.interact): added a
3768 * IPython/iplib.py (InteractiveShell.interact): added a
3764 showtraceback() call to the SystemExit trap, and modified the exit
3769 showtraceback() call to the SystemExit trap, and modified the exit
3765 confirmation to have yes as the default.
3770 confirmation to have yes as the default.
3766
3771
3767 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3772 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3768 this file. It's been gone from the code for a long time, this was
3773 this file. It's been gone from the code for a long time, this was
3769 simply leftover junk.
3774 simply leftover junk.
3770
3775
3771 2002-11-01 Fernando Perez <fperez@colorado.edu>
3776 2002-11-01 Fernando Perez <fperez@colorado.edu>
3772
3777
3773 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3778 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3774 added. If set, IPython now traps EOF and asks for
3779 added. If set, IPython now traps EOF and asks for
3775 confirmation. After a request by François Pinard.
3780 confirmation. After a request by François Pinard.
3776
3781
3777 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3782 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3778 of @abort, and with a new (better) mechanism for handling the
3783 of @abort, and with a new (better) mechanism for handling the
3779 exceptions.
3784 exceptions.
3780
3785
3781 2002-10-27 Fernando Perez <fperez@colorado.edu>
3786 2002-10-27 Fernando Perez <fperez@colorado.edu>
3782
3787
3783 * IPython/usage.py (__doc__): updated the --help information and
3788 * IPython/usage.py (__doc__): updated the --help information and
3784 the ipythonrc file to indicate that -log generates
3789 the ipythonrc file to indicate that -log generates
3785 ./ipython.log. Also fixed the corresponding info in @logstart.
3790 ./ipython.log. Also fixed the corresponding info in @logstart.
3786 This and several other fixes in the manuals thanks to reports by
3791 This and several other fixes in the manuals thanks to reports by
3787 François Pinard <pinard-AT-iro.umontreal.ca>.
3792 François Pinard <pinard-AT-iro.umontreal.ca>.
3788
3793
3789 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3794 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3790 refer to @logstart (instead of @log, which doesn't exist).
3795 refer to @logstart (instead of @log, which doesn't exist).
3791
3796
3792 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3797 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3793 AttributeError crash. Thanks to Christopher Armstrong
3798 AttributeError crash. Thanks to Christopher Armstrong
3794 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3799 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3795 introduced recently (in 0.2.14pre37) with the fix to the eval
3800 introduced recently (in 0.2.14pre37) with the fix to the eval
3796 problem mentioned below.
3801 problem mentioned below.
3797
3802
3798 2002-10-17 Fernando Perez <fperez@colorado.edu>
3803 2002-10-17 Fernando Perez <fperez@colorado.edu>
3799
3804
3800 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3805 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3801 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3806 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3802
3807
3803 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3808 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3804 this function to fix a problem reported by Alex Schmolck. He saw
3809 this function to fix a problem reported by Alex Schmolck. He saw
3805 it with list comprehensions and generators, which were getting
3810 it with list comprehensions and generators, which were getting
3806 called twice. The real problem was an 'eval' call in testing for
3811 called twice. The real problem was an 'eval' call in testing for
3807 automagic which was evaluating the input line silently.
3812 automagic which was evaluating the input line silently.
3808
3813
3809 This is a potentially very nasty bug, if the input has side
3814 This is a potentially very nasty bug, if the input has side
3810 effects which must not be repeated. The code is much cleaner now,
3815 effects which must not be repeated. The code is much cleaner now,
3811 without any blanket 'except' left and with a regexp test for
3816 without any blanket 'except' left and with a regexp test for
3812 actual function names.
3817 actual function names.
3813
3818
3814 But an eval remains, which I'm not fully comfortable with. I just
3819 But an eval remains, which I'm not fully comfortable with. I just
3815 don't know how to find out if an expression could be a callable in
3820 don't know how to find out if an expression could be a callable in
3816 the user's namespace without doing an eval on the string. However
3821 the user's namespace without doing an eval on the string. However
3817 that string is now much more strictly checked so that no code
3822 that string is now much more strictly checked so that no code
3818 slips by, so the eval should only happen for things that can
3823 slips by, so the eval should only happen for things that can
3819 really be only function/method names.
3824 really be only function/method names.
3820
3825
3821 2002-10-15 Fernando Perez <fperez@colorado.edu>
3826 2002-10-15 Fernando Perez <fperez@colorado.edu>
3822
3827
3823 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3828 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3824 OSX information to main manual, removed README_Mac_OSX file from
3829 OSX information to main manual, removed README_Mac_OSX file from
3825 distribution. Also updated credits for recent additions.
3830 distribution. Also updated credits for recent additions.
3826
3831
3827 2002-10-10 Fernando Perez <fperez@colorado.edu>
3832 2002-10-10 Fernando Perez <fperez@colorado.edu>
3828
3833
3829 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3834 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3830 terminal-related issues. Many thanks to Andrea Riciputi
3835 terminal-related issues. Many thanks to Andrea Riciputi
3831 <andrea.riciputi-AT-libero.it> for writing it.
3836 <andrea.riciputi-AT-libero.it> for writing it.
3832
3837
3833 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3838 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3834 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3839 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3835
3840
3836 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3841 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3837 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3842 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3838 <syver-en-AT-online.no> who both submitted patches for this problem.
3843 <syver-en-AT-online.no> who both submitted patches for this problem.
3839
3844
3840 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3845 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3841 global embedding to make sure that things don't overwrite user
3846 global embedding to make sure that things don't overwrite user
3842 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3847 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3843
3848
3844 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3849 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3845 compatibility. Thanks to Hayden Callow
3850 compatibility. Thanks to Hayden Callow
3846 <h.callow-AT-elec.canterbury.ac.nz>
3851 <h.callow-AT-elec.canterbury.ac.nz>
3847
3852
3848 2002-10-04 Fernando Perez <fperez@colorado.edu>
3853 2002-10-04 Fernando Perez <fperez@colorado.edu>
3849
3854
3850 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3855 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3851 Gnuplot.File objects.
3856 Gnuplot.File objects.
3852
3857
3853 2002-07-23 Fernando Perez <fperez@colorado.edu>
3858 2002-07-23 Fernando Perez <fperez@colorado.edu>
3854
3859
3855 * IPython/genutils.py (timing): Added timings() and timing() for
3860 * IPython/genutils.py (timing): Added timings() and timing() for
3856 quick access to the most commonly needed data, the execution
3861 quick access to the most commonly needed data, the execution
3857 times. Old timing() renamed to timings_out().
3862 times. Old timing() renamed to timings_out().
3858
3863
3859 2002-07-18 Fernando Perez <fperez@colorado.edu>
3864 2002-07-18 Fernando Perez <fperez@colorado.edu>
3860
3865
3861 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3866 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3862 bug with nested instances disrupting the parent's tab completion.
3867 bug with nested instances disrupting the parent's tab completion.
3863
3868
3864 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3869 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3865 all_completions code to begin the emacs integration.
3870 all_completions code to begin the emacs integration.
3866
3871
3867 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3872 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3868 argument to allow titling individual arrays when plotting.
3873 argument to allow titling individual arrays when plotting.
3869
3874
3870 2002-07-15 Fernando Perez <fperez@colorado.edu>
3875 2002-07-15 Fernando Perez <fperez@colorado.edu>
3871
3876
3872 * setup.py (make_shortcut): changed to retrieve the value of
3877 * setup.py (make_shortcut): changed to retrieve the value of
3873 'Program Files' directory from the registry (this value changes in
3878 'Program Files' directory from the registry (this value changes in
3874 non-english versions of Windows). Thanks to Thomas Fanslau
3879 non-english versions of Windows). Thanks to Thomas Fanslau
3875 <tfanslau-AT-gmx.de> for the report.
3880 <tfanslau-AT-gmx.de> for the report.
3876
3881
3877 2002-07-10 Fernando Perez <fperez@colorado.edu>
3882 2002-07-10 Fernando Perez <fperez@colorado.edu>
3878
3883
3879 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3884 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3880 a bug in pdb, which crashes if a line with only whitespace is
3885 a bug in pdb, which crashes if a line with only whitespace is
3881 entered. Bug report submitted to sourceforge.
3886 entered. Bug report submitted to sourceforge.
3882
3887
3883 2002-07-09 Fernando Perez <fperez@colorado.edu>
3888 2002-07-09 Fernando Perez <fperez@colorado.edu>
3884
3889
3885 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3890 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3886 reporting exceptions (it's a bug in inspect.py, I just set a
3891 reporting exceptions (it's a bug in inspect.py, I just set a
3887 workaround).
3892 workaround).
3888
3893
3889 2002-07-08 Fernando Perez <fperez@colorado.edu>
3894 2002-07-08 Fernando Perez <fperez@colorado.edu>
3890
3895
3891 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3896 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3892 __IPYTHON__ in __builtins__ to show up in user_ns.
3897 __IPYTHON__ in __builtins__ to show up in user_ns.
3893
3898
3894 2002-07-03 Fernando Perez <fperez@colorado.edu>
3899 2002-07-03 Fernando Perez <fperez@colorado.edu>
3895
3900
3896 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3901 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3897 name from @gp_set_instance to @gp_set_default.
3902 name from @gp_set_instance to @gp_set_default.
3898
3903
3899 * IPython/ipmaker.py (make_IPython): default editor value set to
3904 * IPython/ipmaker.py (make_IPython): default editor value set to
3900 '0' (a string), to match the rc file. Otherwise will crash when
3905 '0' (a string), to match the rc file. Otherwise will crash when
3901 .strip() is called on it.
3906 .strip() is called on it.
3902
3907
3903
3908
3904 2002-06-28 Fernando Perez <fperez@colorado.edu>
3909 2002-06-28 Fernando Perez <fperez@colorado.edu>
3905
3910
3906 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3911 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3907 of files in current directory when a file is executed via
3912 of files in current directory when a file is executed via
3908 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3913 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3909
3914
3910 * setup.py (manfiles): fix for rpm builds, submitted by RA
3915 * setup.py (manfiles): fix for rpm builds, submitted by RA
3911 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3916 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3912
3917
3913 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3918 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3914 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3919 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3915 string!). A. Schmolck caught this one.
3920 string!). A. Schmolck caught this one.
3916
3921
3917 2002-06-27 Fernando Perez <fperez@colorado.edu>
3922 2002-06-27 Fernando Perez <fperez@colorado.edu>
3918
3923
3919 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3924 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3920 defined files at the cmd line. __name__ wasn't being set to
3925 defined files at the cmd line. __name__ wasn't being set to
3921 __main__.
3926 __main__.
3922
3927
3923 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3928 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3924 regular lists and tuples besides Numeric arrays.
3929 regular lists and tuples besides Numeric arrays.
3925
3930
3926 * IPython/Prompts.py (CachedOutput.__call__): Added output
3931 * IPython/Prompts.py (CachedOutput.__call__): Added output
3927 supression for input ending with ';'. Similar to Mathematica and
3932 supression for input ending with ';'. Similar to Mathematica and
3928 Matlab. The _* vars and Out[] list are still updated, just like
3933 Matlab. The _* vars and Out[] list are still updated, just like
3929 Mathematica behaves.
3934 Mathematica behaves.
3930
3935
3931 2002-06-25 Fernando Perez <fperez@colorado.edu>
3936 2002-06-25 Fernando Perez <fperez@colorado.edu>
3932
3937
3933 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3938 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3934 .ini extensions for profiels under Windows.
3939 .ini extensions for profiels under Windows.
3935
3940
3936 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3941 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3937 string form. Fix contributed by Alexander Schmolck
3942 string form. Fix contributed by Alexander Schmolck
3938 <a.schmolck-AT-gmx.net>
3943 <a.schmolck-AT-gmx.net>
3939
3944
3940 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3945 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3941 pre-configured Gnuplot instance.
3946 pre-configured Gnuplot instance.
3942
3947
3943 2002-06-21 Fernando Perez <fperez@colorado.edu>
3948 2002-06-21 Fernando Perez <fperez@colorado.edu>
3944
3949
3945 * IPython/numutils.py (exp_safe): new function, works around the
3950 * IPython/numutils.py (exp_safe): new function, works around the
3946 underflow problems in Numeric.
3951 underflow problems in Numeric.
3947 (log2): New fn. Safe log in base 2: returns exact integer answer
3952 (log2): New fn. Safe log in base 2: returns exact integer answer
3948 for exact integer powers of 2.
3953 for exact integer powers of 2.
3949
3954
3950 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3955 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3951 properly.
3956 properly.
3952
3957
3953 2002-06-20 Fernando Perez <fperez@colorado.edu>
3958 2002-06-20 Fernando Perez <fperez@colorado.edu>
3954
3959
3955 * IPython/genutils.py (timing): new function like
3960 * IPython/genutils.py (timing): new function like
3956 Mathematica's. Similar to time_test, but returns more info.
3961 Mathematica's. Similar to time_test, but returns more info.
3957
3962
3958 2002-06-18 Fernando Perez <fperez@colorado.edu>
3963 2002-06-18 Fernando Perez <fperez@colorado.edu>
3959
3964
3960 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3965 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3961 according to Mike Heeter's suggestions.
3966 according to Mike Heeter's suggestions.
3962
3967
3963 2002-06-16 Fernando Perez <fperez@colorado.edu>
3968 2002-06-16 Fernando Perez <fperez@colorado.edu>
3964
3969
3965 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3970 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3966 system. GnuplotMagic is gone as a user-directory option. New files
3971 system. GnuplotMagic is gone as a user-directory option. New files
3967 make it easier to use all the gnuplot stuff both from external
3972 make it easier to use all the gnuplot stuff both from external
3968 programs as well as from IPython. Had to rewrite part of
3973 programs as well as from IPython. Had to rewrite part of
3969 hardcopy() b/c of a strange bug: often the ps files simply don't
3974 hardcopy() b/c of a strange bug: often the ps files simply don't
3970 get created, and require a repeat of the command (often several
3975 get created, and require a repeat of the command (often several
3971 times).
3976 times).
3972
3977
3973 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3978 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3974 resolve output channel at call time, so that if sys.stderr has
3979 resolve output channel at call time, so that if sys.stderr has
3975 been redirected by user this gets honored.
3980 been redirected by user this gets honored.
3976
3981
3977 2002-06-13 Fernando Perez <fperez@colorado.edu>
3982 2002-06-13 Fernando Perez <fperez@colorado.edu>
3978
3983
3979 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3984 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3980 IPShell. Kept a copy with the old names to avoid breaking people's
3985 IPShell. Kept a copy with the old names to avoid breaking people's
3981 embedded code.
3986 embedded code.
3982
3987
3983 * IPython/ipython: simplified it to the bare minimum after
3988 * IPython/ipython: simplified it to the bare minimum after
3984 Holger's suggestions. Added info about how to use it in
3989 Holger's suggestions. Added info about how to use it in
3985 PYTHONSTARTUP.
3990 PYTHONSTARTUP.
3986
3991
3987 * IPython/Shell.py (IPythonShell): changed the options passing
3992 * IPython/Shell.py (IPythonShell): changed the options passing
3988 from a string with funky %s replacements to a straight list. Maybe
3993 from a string with funky %s replacements to a straight list. Maybe
3989 a bit more typing, but it follows sys.argv conventions, so there's
3994 a bit more typing, but it follows sys.argv conventions, so there's
3990 less special-casing to remember.
3995 less special-casing to remember.
3991
3996
3992 2002-06-12 Fernando Perez <fperez@colorado.edu>
3997 2002-06-12 Fernando Perez <fperez@colorado.edu>
3993
3998
3994 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3999 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3995 command. Thanks to a suggestion by Mike Heeter.
4000 command. Thanks to a suggestion by Mike Heeter.
3996 (Magic.magic_pfile): added behavior to look at filenames if given
4001 (Magic.magic_pfile): added behavior to look at filenames if given
3997 arg is not a defined object.
4002 arg is not a defined object.
3998 (Magic.magic_save): New @save function to save code snippets. Also
4003 (Magic.magic_save): New @save function to save code snippets. Also
3999 a Mike Heeter idea.
4004 a Mike Heeter idea.
4000
4005
4001 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
4006 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
4002 plot() and replot(). Much more convenient now, especially for
4007 plot() and replot(). Much more convenient now, especially for
4003 interactive use.
4008 interactive use.
4004
4009
4005 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
4010 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
4006 filenames.
4011 filenames.
4007
4012
4008 2002-06-02 Fernando Perez <fperez@colorado.edu>
4013 2002-06-02 Fernando Perez <fperez@colorado.edu>
4009
4014
4010 * IPython/Struct.py (Struct.__init__): modified to admit
4015 * IPython/Struct.py (Struct.__init__): modified to admit
4011 initialization via another struct.
4016 initialization via another struct.
4012
4017
4013 * IPython/genutils.py (SystemExec.__init__): New stateful
4018 * IPython/genutils.py (SystemExec.__init__): New stateful
4014 interface to xsys and bq. Useful for writing system scripts.
4019 interface to xsys and bq. Useful for writing system scripts.
4015
4020
4016 2002-05-30 Fernando Perez <fperez@colorado.edu>
4021 2002-05-30 Fernando Perez <fperez@colorado.edu>
4017
4022
4018 * MANIFEST.in: Changed docfile selection to exclude all the lyx
4023 * MANIFEST.in: Changed docfile selection to exclude all the lyx
4019 documents. This will make the user download smaller (it's getting
4024 documents. This will make the user download smaller (it's getting
4020 too big).
4025 too big).
4021
4026
4022 2002-05-29 Fernando Perez <fperez@colorado.edu>
4027 2002-05-29 Fernando Perez <fperez@colorado.edu>
4023
4028
4024 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
4029 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
4025 fix problems with shelve and pickle. Seems to work, but I don't
4030 fix problems with shelve and pickle. Seems to work, but I don't
4026 know if corner cases break it. Thanks to Mike Heeter
4031 know if corner cases break it. Thanks to Mike Heeter
4027 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
4032 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
4028
4033
4029 2002-05-24 Fernando Perez <fperez@colorado.edu>
4034 2002-05-24 Fernando Perez <fperez@colorado.edu>
4030
4035
4031 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
4036 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
4032 macros having broken.
4037 macros having broken.
4033
4038
4034 2002-05-21 Fernando Perez <fperez@colorado.edu>
4039 2002-05-21 Fernando Perez <fperez@colorado.edu>
4035
4040
4036 * IPython/Magic.py (Magic.magic_logstart): fixed recently
4041 * IPython/Magic.py (Magic.magic_logstart): fixed recently
4037 introduced logging bug: all history before logging started was
4042 introduced logging bug: all history before logging started was
4038 being written one character per line! This came from the redesign
4043 being written one character per line! This came from the redesign
4039 of the input history as a special list which slices to strings,
4044 of the input history as a special list which slices to strings,
4040 not to lists.
4045 not to lists.
4041
4046
4042 2002-05-20 Fernando Perez <fperez@colorado.edu>
4047 2002-05-20 Fernando Perez <fperez@colorado.edu>
4043
4048
4044 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4049 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4045 be an attribute of all classes in this module. The design of these
4050 be an attribute of all classes in this module. The design of these
4046 classes needs some serious overhauling.
4051 classes needs some serious overhauling.
4047
4052
4048 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4053 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4049 which was ignoring '_' in option names.
4054 which was ignoring '_' in option names.
4050
4055
4051 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4056 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4052 'Verbose_novars' to 'Context' and made it the new default. It's a
4057 'Verbose_novars' to 'Context' and made it the new default. It's a
4053 bit more readable and also safer than verbose.
4058 bit more readable and also safer than verbose.
4054
4059
4055 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4060 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4056 triple-quoted strings.
4061 triple-quoted strings.
4057
4062
4058 * IPython/OInspect.py (__all__): new module exposing the object
4063 * IPython/OInspect.py (__all__): new module exposing the object
4059 introspection facilities. Now the corresponding magics are dummy
4064 introspection facilities. Now the corresponding magics are dummy
4060 wrappers around this. Having this module will make it much easier
4065 wrappers around this. Having this module will make it much easier
4061 to put these functions into our modified pdb.
4066 to put these functions into our modified pdb.
4062 This new object inspector system uses the new colorizing module,
4067 This new object inspector system uses the new colorizing module,
4063 so source code and other things are nicely syntax highlighted.
4068 so source code and other things are nicely syntax highlighted.
4064
4069
4065 2002-05-18 Fernando Perez <fperez@colorado.edu>
4070 2002-05-18 Fernando Perez <fperez@colorado.edu>
4066
4071
4067 * IPython/ColorANSI.py: Split the coloring tools into a separate
4072 * IPython/ColorANSI.py: Split the coloring tools into a separate
4068 module so I can use them in other code easier (they were part of
4073 module so I can use them in other code easier (they were part of
4069 ultraTB).
4074 ultraTB).
4070
4075
4071 2002-05-17 Fernando Perez <fperez@colorado.edu>
4076 2002-05-17 Fernando Perez <fperez@colorado.edu>
4072
4077
4073 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4078 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4074 fixed it to set the global 'g' also to the called instance, as
4079 fixed it to set the global 'g' also to the called instance, as
4075 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4080 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4076 user's 'g' variables).
4081 user's 'g' variables).
4077
4082
4078 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4083 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4079 global variables (aliases to _ih,_oh) so that users which expect
4084 global variables (aliases to _ih,_oh) so that users which expect
4080 In[5] or Out[7] to work aren't unpleasantly surprised.
4085 In[5] or Out[7] to work aren't unpleasantly surprised.
4081 (InputList.__getslice__): new class to allow executing slices of
4086 (InputList.__getslice__): new class to allow executing slices of
4082 input history directly. Very simple class, complements the use of
4087 input history directly. Very simple class, complements the use of
4083 macros.
4088 macros.
4084
4089
4085 2002-05-16 Fernando Perez <fperez@colorado.edu>
4090 2002-05-16 Fernando Perez <fperez@colorado.edu>
4086
4091
4087 * setup.py (docdirbase): make doc directory be just doc/IPython
4092 * setup.py (docdirbase): make doc directory be just doc/IPython
4088 without version numbers, it will reduce clutter for users.
4093 without version numbers, it will reduce clutter for users.
4089
4094
4090 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4095 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4091 execfile call to prevent possible memory leak. See for details:
4096 execfile call to prevent possible memory leak. See for details:
4092 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4097 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4093
4098
4094 2002-05-15 Fernando Perez <fperez@colorado.edu>
4099 2002-05-15 Fernando Perez <fperez@colorado.edu>
4095
4100
4096 * IPython/Magic.py (Magic.magic_psource): made the object
4101 * IPython/Magic.py (Magic.magic_psource): made the object
4097 introspection names be more standard: pdoc, pdef, pfile and
4102 introspection names be more standard: pdoc, pdef, pfile and
4098 psource. They all print/page their output, and it makes
4103 psource. They all print/page their output, and it makes
4099 remembering them easier. Kept old names for compatibility as
4104 remembering them easier. Kept old names for compatibility as
4100 aliases.
4105 aliases.
4101
4106
4102 2002-05-14 Fernando Perez <fperez@colorado.edu>
4107 2002-05-14 Fernando Perez <fperez@colorado.edu>
4103
4108
4104 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4109 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4105 what the mouse problem was. The trick is to use gnuplot with temp
4110 what the mouse problem was. The trick is to use gnuplot with temp
4106 files and NOT with pipes (for data communication), because having
4111 files and NOT with pipes (for data communication), because having
4107 both pipes and the mouse on is bad news.
4112 both pipes and the mouse on is bad news.
4108
4113
4109 2002-05-13 Fernando Perez <fperez@colorado.edu>
4114 2002-05-13 Fernando Perez <fperez@colorado.edu>
4110
4115
4111 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4116 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4112 bug. Information would be reported about builtins even when
4117 bug. Information would be reported about builtins even when
4113 user-defined functions overrode them.
4118 user-defined functions overrode them.
4114
4119
4115 2002-05-11 Fernando Perez <fperez@colorado.edu>
4120 2002-05-11 Fernando Perez <fperez@colorado.edu>
4116
4121
4117 * IPython/__init__.py (__all__): removed FlexCompleter from
4122 * IPython/__init__.py (__all__): removed FlexCompleter from
4118 __all__ so that things don't fail in platforms without readline.
4123 __all__ so that things don't fail in platforms without readline.
4119
4124
4120 2002-05-10 Fernando Perez <fperez@colorado.edu>
4125 2002-05-10 Fernando Perez <fperez@colorado.edu>
4121
4126
4122 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4127 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4123 it requires Numeric, effectively making Numeric a dependency for
4128 it requires Numeric, effectively making Numeric a dependency for
4124 IPython.
4129 IPython.
4125
4130
4126 * Released 0.2.13
4131 * Released 0.2.13
4127
4132
4128 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4133 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4129 profiler interface. Now all the major options from the profiler
4134 profiler interface. Now all the major options from the profiler
4130 module are directly supported in IPython, both for single
4135 module are directly supported in IPython, both for single
4131 expressions (@prun) and for full programs (@run -p).
4136 expressions (@prun) and for full programs (@run -p).
4132
4137
4133 2002-05-09 Fernando Perez <fperez@colorado.edu>
4138 2002-05-09 Fernando Perez <fperez@colorado.edu>
4134
4139
4135 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4140 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4136 magic properly formatted for screen.
4141 magic properly formatted for screen.
4137
4142
4138 * setup.py (make_shortcut): Changed things to put pdf version in
4143 * setup.py (make_shortcut): Changed things to put pdf version in
4139 doc/ instead of doc/manual (had to change lyxport a bit).
4144 doc/ instead of doc/manual (had to change lyxport a bit).
4140
4145
4141 * IPython/Magic.py (Profile.string_stats): made profile runs go
4146 * IPython/Magic.py (Profile.string_stats): made profile runs go
4142 through pager (they are long and a pager allows searching, saving,
4147 through pager (they are long and a pager allows searching, saving,
4143 etc.)
4148 etc.)
4144
4149
4145 2002-05-08 Fernando Perez <fperez@colorado.edu>
4150 2002-05-08 Fernando Perez <fperez@colorado.edu>
4146
4151
4147 * Released 0.2.12
4152 * Released 0.2.12
4148
4153
4149 2002-05-06 Fernando Perez <fperez@colorado.edu>
4154 2002-05-06 Fernando Perez <fperez@colorado.edu>
4150
4155
4151 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4156 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4152 introduced); 'hist n1 n2' was broken.
4157 introduced); 'hist n1 n2' was broken.
4153 (Magic.magic_pdb): added optional on/off arguments to @pdb
4158 (Magic.magic_pdb): added optional on/off arguments to @pdb
4154 (Magic.magic_run): added option -i to @run, which executes code in
4159 (Magic.magic_run): added option -i to @run, which executes code in
4155 the IPython namespace instead of a clean one. Also added @irun as
4160 the IPython namespace instead of a clean one. Also added @irun as
4156 an alias to @run -i.
4161 an alias to @run -i.
4157
4162
4158 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4163 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4159 fixed (it didn't really do anything, the namespaces were wrong).
4164 fixed (it didn't really do anything, the namespaces were wrong).
4160
4165
4161 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4166 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4162
4167
4163 * IPython/__init__.py (__all__): Fixed package namespace, now
4168 * IPython/__init__.py (__all__): Fixed package namespace, now
4164 'import IPython' does give access to IPython.<all> as
4169 'import IPython' does give access to IPython.<all> as
4165 expected. Also renamed __release__ to Release.
4170 expected. Also renamed __release__ to Release.
4166
4171
4167 * IPython/Debugger.py (__license__): created new Pdb class which
4172 * IPython/Debugger.py (__license__): created new Pdb class which
4168 functions like a drop-in for the normal pdb.Pdb but does NOT
4173 functions like a drop-in for the normal pdb.Pdb but does NOT
4169 import readline by default. This way it doesn't muck up IPython's
4174 import readline by default. This way it doesn't muck up IPython's
4170 readline handling, and now tab-completion finally works in the
4175 readline handling, and now tab-completion finally works in the
4171 debugger -- sort of. It completes things globally visible, but the
4176 debugger -- sort of. It completes things globally visible, but the
4172 completer doesn't track the stack as pdb walks it. That's a bit
4177 completer doesn't track the stack as pdb walks it. That's a bit
4173 tricky, and I'll have to implement it later.
4178 tricky, and I'll have to implement it later.
4174
4179
4175 2002-05-05 Fernando Perez <fperez@colorado.edu>
4180 2002-05-05 Fernando Perez <fperez@colorado.edu>
4176
4181
4177 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4182 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4178 magic docstrings when printed via ? (explicit \'s were being
4183 magic docstrings when printed via ? (explicit \'s were being
4179 printed).
4184 printed).
4180
4185
4181 * IPython/ipmaker.py (make_IPython): fixed namespace
4186 * IPython/ipmaker.py (make_IPython): fixed namespace
4182 identification bug. Now variables loaded via logs or command-line
4187 identification bug. Now variables loaded via logs or command-line
4183 files are recognized in the interactive namespace by @who.
4188 files are recognized in the interactive namespace by @who.
4184
4189
4185 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4190 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4186 log replay system stemming from the string form of Structs.
4191 log replay system stemming from the string form of Structs.
4187
4192
4188 * IPython/Magic.py (Macro.__init__): improved macros to properly
4193 * IPython/Magic.py (Macro.__init__): improved macros to properly
4189 handle magic commands in them.
4194 handle magic commands in them.
4190 (Magic.magic_logstart): usernames are now expanded so 'logstart
4195 (Magic.magic_logstart): usernames are now expanded so 'logstart
4191 ~/mylog' now works.
4196 ~/mylog' now works.
4192
4197
4193 * IPython/iplib.py (complete): fixed bug where paths starting with
4198 * IPython/iplib.py (complete): fixed bug where paths starting with
4194 '/' would be completed as magic names.
4199 '/' would be completed as magic names.
4195
4200
4196 2002-05-04 Fernando Perez <fperez@colorado.edu>
4201 2002-05-04 Fernando Perez <fperez@colorado.edu>
4197
4202
4198 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4203 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4199 allow running full programs under the profiler's control.
4204 allow running full programs under the profiler's control.
4200
4205
4201 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4206 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4202 mode to report exceptions verbosely but without formatting
4207 mode to report exceptions verbosely but without formatting
4203 variables. This addresses the issue of ipython 'freezing' (it's
4208 variables. This addresses the issue of ipython 'freezing' (it's
4204 not frozen, but caught in an expensive formatting loop) when huge
4209 not frozen, but caught in an expensive formatting loop) when huge
4205 variables are in the context of an exception.
4210 variables are in the context of an exception.
4206 (VerboseTB.text): Added '--->' markers at line where exception was
4211 (VerboseTB.text): Added '--->' markers at line where exception was
4207 triggered. Much clearer to read, especially in NoColor modes.
4212 triggered. Much clearer to read, especially in NoColor modes.
4208
4213
4209 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4214 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4210 implemented in reverse when changing to the new parse_options().
4215 implemented in reverse when changing to the new parse_options().
4211
4216
4212 2002-05-03 Fernando Perez <fperez@colorado.edu>
4217 2002-05-03 Fernando Perez <fperez@colorado.edu>
4213
4218
4214 * IPython/Magic.py (Magic.parse_options): new function so that
4219 * IPython/Magic.py (Magic.parse_options): new function so that
4215 magics can parse options easier.
4220 magics can parse options easier.
4216 (Magic.magic_prun): new function similar to profile.run(),
4221 (Magic.magic_prun): new function similar to profile.run(),
4217 suggested by Chris Hart.
4222 suggested by Chris Hart.
4218 (Magic.magic_cd): fixed behavior so that it only changes if
4223 (Magic.magic_cd): fixed behavior so that it only changes if
4219 directory actually is in history.
4224 directory actually is in history.
4220
4225
4221 * IPython/usage.py (__doc__): added information about potential
4226 * IPython/usage.py (__doc__): added information about potential
4222 slowness of Verbose exception mode when there are huge data
4227 slowness of Verbose exception mode when there are huge data
4223 structures to be formatted (thanks to Archie Paulson).
4228 structures to be formatted (thanks to Archie Paulson).
4224
4229
4225 * IPython/ipmaker.py (make_IPython): Changed default logging
4230 * IPython/ipmaker.py (make_IPython): Changed default logging
4226 (when simply called with -log) to use curr_dir/ipython.log in
4231 (when simply called with -log) to use curr_dir/ipython.log in
4227 rotate mode. Fixed crash which was occuring with -log before
4232 rotate mode. Fixed crash which was occuring with -log before
4228 (thanks to Jim Boyle).
4233 (thanks to Jim Boyle).
4229
4234
4230 2002-05-01 Fernando Perez <fperez@colorado.edu>
4235 2002-05-01 Fernando Perez <fperez@colorado.edu>
4231
4236
4232 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4237 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4233 was nasty -- though somewhat of a corner case).
4238 was nasty -- though somewhat of a corner case).
4234
4239
4235 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4240 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4236 text (was a bug).
4241 text (was a bug).
4237
4242
4238 2002-04-30 Fernando Perez <fperez@colorado.edu>
4243 2002-04-30 Fernando Perez <fperez@colorado.edu>
4239
4244
4240 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4245 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4241 a print after ^D or ^C from the user so that the In[] prompt
4246 a print after ^D or ^C from the user so that the In[] prompt
4242 doesn't over-run the gnuplot one.
4247 doesn't over-run the gnuplot one.
4243
4248
4244 2002-04-29 Fernando Perez <fperez@colorado.edu>
4249 2002-04-29 Fernando Perez <fperez@colorado.edu>
4245
4250
4246 * Released 0.2.10
4251 * Released 0.2.10
4247
4252
4248 * IPython/__release__.py (version): get date dynamically.
4253 * IPython/__release__.py (version): get date dynamically.
4249
4254
4250 * Misc. documentation updates thanks to Arnd's comments. Also ran
4255 * Misc. documentation updates thanks to Arnd's comments. Also ran
4251 a full spellcheck on the manual (hadn't been done in a while).
4256 a full spellcheck on the manual (hadn't been done in a while).
4252
4257
4253 2002-04-27 Fernando Perez <fperez@colorado.edu>
4258 2002-04-27 Fernando Perez <fperez@colorado.edu>
4254
4259
4255 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4260 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4256 starting a log in mid-session would reset the input history list.
4261 starting a log in mid-session would reset the input history list.
4257
4262
4258 2002-04-26 Fernando Perez <fperez@colorado.edu>
4263 2002-04-26 Fernando Perez <fperez@colorado.edu>
4259
4264
4260 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4265 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4261 all files were being included in an update. Now anything in
4266 all files were being included in an update. Now anything in
4262 UserConfig that matches [A-Za-z]*.py will go (this excludes
4267 UserConfig that matches [A-Za-z]*.py will go (this excludes
4263 __init__.py)
4268 __init__.py)
4264
4269
4265 2002-04-25 Fernando Perez <fperez@colorado.edu>
4270 2002-04-25 Fernando Perez <fperez@colorado.edu>
4266
4271
4267 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4272 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4268 to __builtins__ so that any form of embedded or imported code can
4273 to __builtins__ so that any form of embedded or imported code can
4269 test for being inside IPython.
4274 test for being inside IPython.
4270
4275
4271 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4276 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4272 changed to GnuplotMagic because it's now an importable module,
4277 changed to GnuplotMagic because it's now an importable module,
4273 this makes the name follow that of the standard Gnuplot module.
4278 this makes the name follow that of the standard Gnuplot module.
4274 GnuplotMagic can now be loaded at any time in mid-session.
4279 GnuplotMagic can now be loaded at any time in mid-session.
4275
4280
4276 2002-04-24 Fernando Perez <fperez@colorado.edu>
4281 2002-04-24 Fernando Perez <fperez@colorado.edu>
4277
4282
4278 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4283 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4279 the globals (IPython has its own namespace) and the
4284 the globals (IPython has its own namespace) and the
4280 PhysicalQuantity stuff is much better anyway.
4285 PhysicalQuantity stuff is much better anyway.
4281
4286
4282 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4287 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4283 embedding example to standard user directory for
4288 embedding example to standard user directory for
4284 distribution. Also put it in the manual.
4289 distribution. Also put it in the manual.
4285
4290
4286 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4291 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4287 instance as first argument (so it doesn't rely on some obscure
4292 instance as first argument (so it doesn't rely on some obscure
4288 hidden global).
4293 hidden global).
4289
4294
4290 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4295 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4291 delimiters. While it prevents ().TAB from working, it allows
4296 delimiters. While it prevents ().TAB from working, it allows
4292 completions in open (... expressions. This is by far a more common
4297 completions in open (... expressions. This is by far a more common
4293 case.
4298 case.
4294
4299
4295 2002-04-23 Fernando Perez <fperez@colorado.edu>
4300 2002-04-23 Fernando Perez <fperez@colorado.edu>
4296
4301
4297 * IPython/Extensions/InterpreterPasteInput.py: new
4302 * IPython/Extensions/InterpreterPasteInput.py: new
4298 syntax-processing module for pasting lines with >>> or ... at the
4303 syntax-processing module for pasting lines with >>> or ... at the
4299 start.
4304 start.
4300
4305
4301 * IPython/Extensions/PhysicalQ_Interactive.py
4306 * IPython/Extensions/PhysicalQ_Interactive.py
4302 (PhysicalQuantityInteractive.__int__): fixed to work with either
4307 (PhysicalQuantityInteractive.__int__): fixed to work with either
4303 Numeric or math.
4308 Numeric or math.
4304
4309
4305 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4310 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4306 provided profiles. Now we have:
4311 provided profiles. Now we have:
4307 -math -> math module as * and cmath with its own namespace.
4312 -math -> math module as * and cmath with its own namespace.
4308 -numeric -> Numeric as *, plus gnuplot & grace
4313 -numeric -> Numeric as *, plus gnuplot & grace
4309 -physics -> same as before
4314 -physics -> same as before
4310
4315
4311 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4316 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4312 user-defined magics wouldn't be found by @magic if they were
4317 user-defined magics wouldn't be found by @magic if they were
4313 defined as class methods. Also cleaned up the namespace search
4318 defined as class methods. Also cleaned up the namespace search
4314 logic and the string building (to use %s instead of many repeated
4319 logic and the string building (to use %s instead of many repeated
4315 string adds).
4320 string adds).
4316
4321
4317 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4322 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4318 of user-defined magics to operate with class methods (cleaner, in
4323 of user-defined magics to operate with class methods (cleaner, in
4319 line with the gnuplot code).
4324 line with the gnuplot code).
4320
4325
4321 2002-04-22 Fernando Perez <fperez@colorado.edu>
4326 2002-04-22 Fernando Perez <fperez@colorado.edu>
4322
4327
4323 * setup.py: updated dependency list so that manual is updated when
4328 * setup.py: updated dependency list so that manual is updated when
4324 all included files change.
4329 all included files change.
4325
4330
4326 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4331 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4327 the delimiter removal option (the fix is ugly right now).
4332 the delimiter removal option (the fix is ugly right now).
4328
4333
4329 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4334 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4330 all of the math profile (quicker loading, no conflict between
4335 all of the math profile (quicker loading, no conflict between
4331 g-9.8 and g-gnuplot).
4336 g-9.8 and g-gnuplot).
4332
4337
4333 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4338 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4334 name of post-mortem files to IPython_crash_report.txt.
4339 name of post-mortem files to IPython_crash_report.txt.
4335
4340
4336 * Cleanup/update of the docs. Added all the new readline info and
4341 * Cleanup/update of the docs. Added all the new readline info and
4337 formatted all lists as 'real lists'.
4342 formatted all lists as 'real lists'.
4338
4343
4339 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4344 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4340 tab-completion options, since the full readline parse_and_bind is
4345 tab-completion options, since the full readline parse_and_bind is
4341 now accessible.
4346 now accessible.
4342
4347
4343 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4348 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4344 handling of readline options. Now users can specify any string to
4349 handling of readline options. Now users can specify any string to
4345 be passed to parse_and_bind(), as well as the delimiters to be
4350 be passed to parse_and_bind(), as well as the delimiters to be
4346 removed.
4351 removed.
4347 (InteractiveShell.__init__): Added __name__ to the global
4352 (InteractiveShell.__init__): Added __name__ to the global
4348 namespace so that things like Itpl which rely on its existence
4353 namespace so that things like Itpl which rely on its existence
4349 don't crash.
4354 don't crash.
4350 (InteractiveShell._prefilter): Defined the default with a _ so
4355 (InteractiveShell._prefilter): Defined the default with a _ so
4351 that prefilter() is easier to override, while the default one
4356 that prefilter() is easier to override, while the default one
4352 remains available.
4357 remains available.
4353
4358
4354 2002-04-18 Fernando Perez <fperez@colorado.edu>
4359 2002-04-18 Fernando Perez <fperez@colorado.edu>
4355
4360
4356 * Added information about pdb in the docs.
4361 * Added information about pdb in the docs.
4357
4362
4358 2002-04-17 Fernando Perez <fperez@colorado.edu>
4363 2002-04-17 Fernando Perez <fperez@colorado.edu>
4359
4364
4360 * IPython/ipmaker.py (make_IPython): added rc_override option to
4365 * IPython/ipmaker.py (make_IPython): added rc_override option to
4361 allow passing config options at creation time which may override
4366 allow passing config options at creation time which may override
4362 anything set in the config files or command line. This is
4367 anything set in the config files or command line. This is
4363 particularly useful for configuring embedded instances.
4368 particularly useful for configuring embedded instances.
4364
4369
4365 2002-04-15 Fernando Perez <fperez@colorado.edu>
4370 2002-04-15 Fernando Perez <fperez@colorado.edu>
4366
4371
4367 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4372 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4368 crash embedded instances because of the input cache falling out of
4373 crash embedded instances because of the input cache falling out of
4369 sync with the output counter.
4374 sync with the output counter.
4370
4375
4371 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4376 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4372 mode which calls pdb after an uncaught exception in IPython itself.
4377 mode which calls pdb after an uncaught exception in IPython itself.
4373
4378
4374 2002-04-14 Fernando Perez <fperez@colorado.edu>
4379 2002-04-14 Fernando Perez <fperez@colorado.edu>
4375
4380
4376 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4381 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4377 readline, fix it back after each call.
4382 readline, fix it back after each call.
4378
4383
4379 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4384 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4380 method to force all access via __call__(), which guarantees that
4385 method to force all access via __call__(), which guarantees that
4381 traceback references are properly deleted.
4386 traceback references are properly deleted.
4382
4387
4383 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4388 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4384 improve printing when pprint is in use.
4389 improve printing when pprint is in use.
4385
4390
4386 2002-04-13 Fernando Perez <fperez@colorado.edu>
4391 2002-04-13 Fernando Perez <fperez@colorado.edu>
4387
4392
4388 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4393 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4389 exceptions aren't caught anymore. If the user triggers one, he
4394 exceptions aren't caught anymore. If the user triggers one, he
4390 should know why he's doing it and it should go all the way up,
4395 should know why he's doing it and it should go all the way up,
4391 just like any other exception. So now @abort will fully kill the
4396 just like any other exception. So now @abort will fully kill the
4392 embedded interpreter and the embedding code (unless that happens
4397 embedded interpreter and the embedding code (unless that happens
4393 to catch SystemExit).
4398 to catch SystemExit).
4394
4399
4395 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4400 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4396 and a debugger() method to invoke the interactive pdb debugger
4401 and a debugger() method to invoke the interactive pdb debugger
4397 after printing exception information. Also added the corresponding
4402 after printing exception information. Also added the corresponding
4398 -pdb option and @pdb magic to control this feature, and updated
4403 -pdb option and @pdb magic to control this feature, and updated
4399 the docs. After a suggestion from Christopher Hart
4404 the docs. After a suggestion from Christopher Hart
4400 (hart-AT-caltech.edu).
4405 (hart-AT-caltech.edu).
4401
4406
4402 2002-04-12 Fernando Perez <fperez@colorado.edu>
4407 2002-04-12 Fernando Perez <fperez@colorado.edu>
4403
4408
4404 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4409 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4405 the exception handlers defined by the user (not the CrashHandler)
4410 the exception handlers defined by the user (not the CrashHandler)
4406 so that user exceptions don't trigger an ipython bug report.
4411 so that user exceptions don't trigger an ipython bug report.
4407
4412
4408 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4413 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4409 configurable (it should have always been so).
4414 configurable (it should have always been so).
4410
4415
4411 2002-03-26 Fernando Perez <fperez@colorado.edu>
4416 2002-03-26 Fernando Perez <fperez@colorado.edu>
4412
4417
4413 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4418 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4414 and there to fix embedding namespace issues. This should all be
4419 and there to fix embedding namespace issues. This should all be
4415 done in a more elegant way.
4420 done in a more elegant way.
4416
4421
4417 2002-03-25 Fernando Perez <fperez@colorado.edu>
4422 2002-03-25 Fernando Perez <fperez@colorado.edu>
4418
4423
4419 * IPython/genutils.py (get_home_dir): Try to make it work under
4424 * IPython/genutils.py (get_home_dir): Try to make it work under
4420 win9x also.
4425 win9x also.
4421
4426
4422 2002-03-20 Fernando Perez <fperez@colorado.edu>
4427 2002-03-20 Fernando Perez <fperez@colorado.edu>
4423
4428
4424 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4429 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4425 sys.displayhook untouched upon __init__.
4430 sys.displayhook untouched upon __init__.
4426
4431
4427 2002-03-19 Fernando Perez <fperez@colorado.edu>
4432 2002-03-19 Fernando Perez <fperez@colorado.edu>
4428
4433
4429 * Released 0.2.9 (for embedding bug, basically).
4434 * Released 0.2.9 (for embedding bug, basically).
4430
4435
4431 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4436 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4432 exceptions so that enclosing shell's state can be restored.
4437 exceptions so that enclosing shell's state can be restored.
4433
4438
4434 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4439 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4435 naming conventions in the .ipython/ dir.
4440 naming conventions in the .ipython/ dir.
4436
4441
4437 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4442 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4438 from delimiters list so filenames with - in them get expanded.
4443 from delimiters list so filenames with - in them get expanded.
4439
4444
4440 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4445 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4441 sys.displayhook not being properly restored after an embedded call.
4446 sys.displayhook not being properly restored after an embedded call.
4442
4447
4443 2002-03-18 Fernando Perez <fperez@colorado.edu>
4448 2002-03-18 Fernando Perez <fperez@colorado.edu>
4444
4449
4445 * Released 0.2.8
4450 * Released 0.2.8
4446
4451
4447 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4452 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4448 some files weren't being included in a -upgrade.
4453 some files weren't being included in a -upgrade.
4449 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4454 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4450 on' so that the first tab completes.
4455 on' so that the first tab completes.
4451 (InteractiveShell.handle_magic): fixed bug with spaces around
4456 (InteractiveShell.handle_magic): fixed bug with spaces around
4452 quotes breaking many magic commands.
4457 quotes breaking many magic commands.
4453
4458
4454 * setup.py: added note about ignoring the syntax error messages at
4459 * setup.py: added note about ignoring the syntax error messages at
4455 installation.
4460 installation.
4456
4461
4457 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4462 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4458 streamlining the gnuplot interface, now there's only one magic @gp.
4463 streamlining the gnuplot interface, now there's only one magic @gp.
4459
4464
4460 2002-03-17 Fernando Perez <fperez@colorado.edu>
4465 2002-03-17 Fernando Perez <fperez@colorado.edu>
4461
4466
4462 * IPython/UserConfig/magic_gnuplot.py: new name for the
4467 * IPython/UserConfig/magic_gnuplot.py: new name for the
4463 example-magic_pm.py file. Much enhanced system, now with a shell
4468 example-magic_pm.py file. Much enhanced system, now with a shell
4464 for communicating directly with gnuplot, one command at a time.
4469 for communicating directly with gnuplot, one command at a time.
4465
4470
4466 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4471 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4467 setting __name__=='__main__'.
4472 setting __name__=='__main__'.
4468
4473
4469 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4474 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4470 mini-shell for accessing gnuplot from inside ipython. Should
4475 mini-shell for accessing gnuplot from inside ipython. Should
4471 extend it later for grace access too. Inspired by Arnd's
4476 extend it later for grace access too. Inspired by Arnd's
4472 suggestion.
4477 suggestion.
4473
4478
4474 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4479 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4475 calling magic functions with () in their arguments. Thanks to Arnd
4480 calling magic functions with () in their arguments. Thanks to Arnd
4476 Baecker for pointing this to me.
4481 Baecker for pointing this to me.
4477
4482
4478 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4483 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4479 infinitely for integer or complex arrays (only worked with floats).
4484 infinitely for integer or complex arrays (only worked with floats).
4480
4485
4481 2002-03-16 Fernando Perez <fperez@colorado.edu>
4486 2002-03-16 Fernando Perez <fperez@colorado.edu>
4482
4487
4483 * setup.py: Merged setup and setup_windows into a single script
4488 * setup.py: Merged setup and setup_windows into a single script
4484 which properly handles things for windows users.
4489 which properly handles things for windows users.
4485
4490
4486 2002-03-15 Fernando Perez <fperez@colorado.edu>
4491 2002-03-15 Fernando Perez <fperez@colorado.edu>
4487
4492
4488 * Big change to the manual: now the magics are all automatically
4493 * Big change to the manual: now the magics are all automatically
4489 documented. This information is generated from their docstrings
4494 documented. This information is generated from their docstrings
4490 and put in a latex file included by the manual lyx file. This way
4495 and put in a latex file included by the manual lyx file. This way
4491 we get always up to date information for the magics. The manual
4496 we get always up to date information for the magics. The manual
4492 now also has proper version information, also auto-synced.
4497 now also has proper version information, also auto-synced.
4493
4498
4494 For this to work, an undocumented --magic_docstrings option was added.
4499 For this to work, an undocumented --magic_docstrings option was added.
4495
4500
4496 2002-03-13 Fernando Perez <fperez@colorado.edu>
4501 2002-03-13 Fernando Perez <fperez@colorado.edu>
4497
4502
4498 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4503 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4499 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4504 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4500
4505
4501 2002-03-12 Fernando Perez <fperez@colorado.edu>
4506 2002-03-12 Fernando Perez <fperez@colorado.edu>
4502
4507
4503 * IPython/ultraTB.py (TermColors): changed color escapes again to
4508 * IPython/ultraTB.py (TermColors): changed color escapes again to
4504 fix the (old, reintroduced) line-wrapping bug. Basically, if
4509 fix the (old, reintroduced) line-wrapping bug. Basically, if
4505 \001..\002 aren't given in the color escapes, lines get wrapped
4510 \001..\002 aren't given in the color escapes, lines get wrapped
4506 weirdly. But giving those screws up old xterms and emacs terms. So
4511 weirdly. But giving those screws up old xterms and emacs terms. So
4507 I added some logic for emacs terms to be ok, but I can't identify old
4512 I added some logic for emacs terms to be ok, but I can't identify old
4508 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4513 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4509
4514
4510 2002-03-10 Fernando Perez <fperez@colorado.edu>
4515 2002-03-10 Fernando Perez <fperez@colorado.edu>
4511
4516
4512 * IPython/usage.py (__doc__): Various documentation cleanups and
4517 * IPython/usage.py (__doc__): Various documentation cleanups and
4513 updates, both in usage docstrings and in the manual.
4518 updates, both in usage docstrings and in the manual.
4514
4519
4515 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4520 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4516 handling of caching. Set minimum acceptabe value for having a
4521 handling of caching. Set minimum acceptabe value for having a
4517 cache at 20 values.
4522 cache at 20 values.
4518
4523
4519 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4524 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4520 install_first_time function to a method, renamed it and added an
4525 install_first_time function to a method, renamed it and added an
4521 'upgrade' mode. Now people can update their config directory with
4526 'upgrade' mode. Now people can update their config directory with
4522 a simple command line switch (-upgrade, also new).
4527 a simple command line switch (-upgrade, also new).
4523
4528
4524 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4529 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4525 @file (convenient for automagic users under Python >= 2.2).
4530 @file (convenient for automagic users under Python >= 2.2).
4526 Removed @files (it seemed more like a plural than an abbrev. of
4531 Removed @files (it seemed more like a plural than an abbrev. of
4527 'file show').
4532 'file show').
4528
4533
4529 * IPython/iplib.py (install_first_time): Fixed crash if there were
4534 * IPython/iplib.py (install_first_time): Fixed crash if there were
4530 backup files ('~') in .ipython/ install directory.
4535 backup files ('~') in .ipython/ install directory.
4531
4536
4532 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4537 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4533 system. Things look fine, but these changes are fairly
4538 system. Things look fine, but these changes are fairly
4534 intrusive. Test them for a few days.
4539 intrusive. Test them for a few days.
4535
4540
4536 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4541 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4537 the prompts system. Now all in/out prompt strings are user
4542 the prompts system. Now all in/out prompt strings are user
4538 controllable. This is particularly useful for embedding, as one
4543 controllable. This is particularly useful for embedding, as one
4539 can tag embedded instances with particular prompts.
4544 can tag embedded instances with particular prompts.
4540
4545
4541 Also removed global use of sys.ps1/2, which now allows nested
4546 Also removed global use of sys.ps1/2, which now allows nested
4542 embeddings without any problems. Added command-line options for
4547 embeddings without any problems. Added command-line options for
4543 the prompt strings.
4548 the prompt strings.
4544
4549
4545 2002-03-08 Fernando Perez <fperez@colorado.edu>
4550 2002-03-08 Fernando Perez <fperez@colorado.edu>
4546
4551
4547 * IPython/UserConfig/example-embed-short.py (ipshell): added
4552 * IPython/UserConfig/example-embed-short.py (ipshell): added
4548 example file with the bare minimum code for embedding.
4553 example file with the bare minimum code for embedding.
4549
4554
4550 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4555 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4551 functionality for the embeddable shell to be activated/deactivated
4556 functionality for the embeddable shell to be activated/deactivated
4552 either globally or at each call.
4557 either globally or at each call.
4553
4558
4554 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4559 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4555 rewriting the prompt with '--->' for auto-inputs with proper
4560 rewriting the prompt with '--->' for auto-inputs with proper
4556 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4561 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4557 this is handled by the prompts class itself, as it should.
4562 this is handled by the prompts class itself, as it should.
4558
4563
4559 2002-03-05 Fernando Perez <fperez@colorado.edu>
4564 2002-03-05 Fernando Perez <fperez@colorado.edu>
4560
4565
4561 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4566 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4562 @logstart to avoid name clashes with the math log function.
4567 @logstart to avoid name clashes with the math log function.
4563
4568
4564 * Big updates to X/Emacs section of the manual.
4569 * Big updates to X/Emacs section of the manual.
4565
4570
4566 * Removed ipython_emacs. Milan explained to me how to pass
4571 * Removed ipython_emacs. Milan explained to me how to pass
4567 arguments to ipython through Emacs. Some day I'm going to end up
4572 arguments to ipython through Emacs. Some day I'm going to end up
4568 learning some lisp...
4573 learning some lisp...
4569
4574
4570 2002-03-04 Fernando Perez <fperez@colorado.edu>
4575 2002-03-04 Fernando Perez <fperez@colorado.edu>
4571
4576
4572 * IPython/ipython_emacs: Created script to be used as the
4577 * IPython/ipython_emacs: Created script to be used as the
4573 py-python-command Emacs variable so we can pass IPython
4578 py-python-command Emacs variable so we can pass IPython
4574 parameters. I can't figure out how to tell Emacs directly to pass
4579 parameters. I can't figure out how to tell Emacs directly to pass
4575 parameters to IPython, so a dummy shell script will do it.
4580 parameters to IPython, so a dummy shell script will do it.
4576
4581
4577 Other enhancements made for things to work better under Emacs'
4582 Other enhancements made for things to work better under Emacs'
4578 various types of terminals. Many thanks to Milan Zamazal
4583 various types of terminals. Many thanks to Milan Zamazal
4579 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4584 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4580
4585
4581 2002-03-01 Fernando Perez <fperez@colorado.edu>
4586 2002-03-01 Fernando Perez <fperez@colorado.edu>
4582
4587
4583 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4588 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4584 that loading of readline is now optional. This gives better
4589 that loading of readline is now optional. This gives better
4585 control to emacs users.
4590 control to emacs users.
4586
4591
4587 * IPython/ultraTB.py (__date__): Modified color escape sequences
4592 * IPython/ultraTB.py (__date__): Modified color escape sequences
4588 and now things work fine under xterm and in Emacs' term buffers
4593 and now things work fine under xterm and in Emacs' term buffers
4589 (though not shell ones). Well, in emacs you get colors, but all
4594 (though not shell ones). Well, in emacs you get colors, but all
4590 seem to be 'light' colors (no difference between dark and light
4595 seem to be 'light' colors (no difference between dark and light
4591 ones). But the garbage chars are gone, and also in xterms. It
4596 ones). But the garbage chars are gone, and also in xterms. It
4592 seems that now I'm using 'cleaner' ansi sequences.
4597 seems that now I'm using 'cleaner' ansi sequences.
4593
4598
4594 2002-02-21 Fernando Perez <fperez@colorado.edu>
4599 2002-02-21 Fernando Perez <fperez@colorado.edu>
4595
4600
4596 * Released 0.2.7 (mainly to publish the scoping fix).
4601 * Released 0.2.7 (mainly to publish the scoping fix).
4597
4602
4598 * IPython/Logger.py (Logger.logstate): added. A corresponding
4603 * IPython/Logger.py (Logger.logstate): added. A corresponding
4599 @logstate magic was created.
4604 @logstate magic was created.
4600
4605
4601 * IPython/Magic.py: fixed nested scoping problem under Python
4606 * IPython/Magic.py: fixed nested scoping problem under Python
4602 2.1.x (automagic wasn't working).
4607 2.1.x (automagic wasn't working).
4603
4608
4604 2002-02-20 Fernando Perez <fperez@colorado.edu>
4609 2002-02-20 Fernando Perez <fperez@colorado.edu>
4605
4610
4606 * Released 0.2.6.
4611 * Released 0.2.6.
4607
4612
4608 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4613 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4609 option so that logs can come out without any headers at all.
4614 option so that logs can come out without any headers at all.
4610
4615
4611 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4616 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4612 SciPy.
4617 SciPy.
4613
4618
4614 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4619 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4615 that embedded IPython calls don't require vars() to be explicitly
4620 that embedded IPython calls don't require vars() to be explicitly
4616 passed. Now they are extracted from the caller's frame (code
4621 passed. Now they are extracted from the caller's frame (code
4617 snatched from Eric Jones' weave). Added better documentation to
4622 snatched from Eric Jones' weave). Added better documentation to
4618 the section on embedding and the example file.
4623 the section on embedding and the example file.
4619
4624
4620 * IPython/genutils.py (page): Changed so that under emacs, it just
4625 * IPython/genutils.py (page): Changed so that under emacs, it just
4621 prints the string. You can then page up and down in the emacs
4626 prints the string. You can then page up and down in the emacs
4622 buffer itself. This is how the builtin help() works.
4627 buffer itself. This is how the builtin help() works.
4623
4628
4624 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4629 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4625 macro scoping: macros need to be executed in the user's namespace
4630 macro scoping: macros need to be executed in the user's namespace
4626 to work as if they had been typed by the user.
4631 to work as if they had been typed by the user.
4627
4632
4628 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4633 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4629 execute automatically (no need to type 'exec...'). They then
4634 execute automatically (no need to type 'exec...'). They then
4630 behave like 'true macros'. The printing system was also modified
4635 behave like 'true macros'. The printing system was also modified
4631 for this to work.
4636 for this to work.
4632
4637
4633 2002-02-19 Fernando Perez <fperez@colorado.edu>
4638 2002-02-19 Fernando Perez <fperez@colorado.edu>
4634
4639
4635 * IPython/genutils.py (page_file): new function for paging files
4640 * IPython/genutils.py (page_file): new function for paging files
4636 in an OS-independent way. Also necessary for file viewing to work
4641 in an OS-independent way. Also necessary for file viewing to work
4637 well inside Emacs buffers.
4642 well inside Emacs buffers.
4638 (page): Added checks for being in an emacs buffer.
4643 (page): Added checks for being in an emacs buffer.
4639 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4644 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4640 same bug in iplib.
4645 same bug in iplib.
4641
4646
4642 2002-02-18 Fernando Perez <fperez@colorado.edu>
4647 2002-02-18 Fernando Perez <fperez@colorado.edu>
4643
4648
4644 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4649 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4645 of readline so that IPython can work inside an Emacs buffer.
4650 of readline so that IPython can work inside an Emacs buffer.
4646
4651
4647 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4652 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4648 method signatures (they weren't really bugs, but it looks cleaner
4653 method signatures (they weren't really bugs, but it looks cleaner
4649 and keeps PyChecker happy).
4654 and keeps PyChecker happy).
4650
4655
4651 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4656 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4652 for implementing various user-defined hooks. Currently only
4657 for implementing various user-defined hooks. Currently only
4653 display is done.
4658 display is done.
4654
4659
4655 * IPython/Prompts.py (CachedOutput._display): changed display
4660 * IPython/Prompts.py (CachedOutput._display): changed display
4656 functions so that they can be dynamically changed by users easily.
4661 functions so that they can be dynamically changed by users easily.
4657
4662
4658 * IPython/Extensions/numeric_formats.py (num_display): added an
4663 * IPython/Extensions/numeric_formats.py (num_display): added an
4659 extension for printing NumPy arrays in flexible manners. It
4664 extension for printing NumPy arrays in flexible manners. It
4660 doesn't do anything yet, but all the structure is in
4665 doesn't do anything yet, but all the structure is in
4661 place. Ultimately the plan is to implement output format control
4666 place. Ultimately the plan is to implement output format control
4662 like in Octave.
4667 like in Octave.
4663
4668
4664 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4669 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4665 methods are found at run-time by all the automatic machinery.
4670 methods are found at run-time by all the automatic machinery.
4666
4671
4667 2002-02-17 Fernando Perez <fperez@colorado.edu>
4672 2002-02-17 Fernando Perez <fperez@colorado.edu>
4668
4673
4669 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4674 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4670 whole file a little.
4675 whole file a little.
4671
4676
4672 * ToDo: closed this document. Now there's a new_design.lyx
4677 * ToDo: closed this document. Now there's a new_design.lyx
4673 document for all new ideas. Added making a pdf of it for the
4678 document for all new ideas. Added making a pdf of it for the
4674 end-user distro.
4679 end-user distro.
4675
4680
4676 * IPython/Logger.py (Logger.switch_log): Created this to replace
4681 * IPython/Logger.py (Logger.switch_log): Created this to replace
4677 logon() and logoff(). It also fixes a nasty crash reported by
4682 logon() and logoff(). It also fixes a nasty crash reported by
4678 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4683 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4679
4684
4680 * IPython/iplib.py (complete): got auto-completion to work with
4685 * IPython/iplib.py (complete): got auto-completion to work with
4681 automagic (I had wanted this for a long time).
4686 automagic (I had wanted this for a long time).
4682
4687
4683 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4688 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4684 to @file, since file() is now a builtin and clashes with automagic
4689 to @file, since file() is now a builtin and clashes with automagic
4685 for @file.
4690 for @file.
4686
4691
4687 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4692 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4688 of this was previously in iplib, which had grown to more than 2000
4693 of this was previously in iplib, which had grown to more than 2000
4689 lines, way too long. No new functionality, but it makes managing
4694 lines, way too long. No new functionality, but it makes managing
4690 the code a bit easier.
4695 the code a bit easier.
4691
4696
4692 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4697 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4693 information to crash reports.
4698 information to crash reports.
4694
4699
4695 2002-02-12 Fernando Perez <fperez@colorado.edu>
4700 2002-02-12 Fernando Perez <fperez@colorado.edu>
4696
4701
4697 * Released 0.2.5.
4702 * Released 0.2.5.
4698
4703
4699 2002-02-11 Fernando Perez <fperez@colorado.edu>
4704 2002-02-11 Fernando Perez <fperez@colorado.edu>
4700
4705
4701 * Wrote a relatively complete Windows installer. It puts
4706 * Wrote a relatively complete Windows installer. It puts
4702 everything in place, creates Start Menu entries and fixes the
4707 everything in place, creates Start Menu entries and fixes the
4703 color issues. Nothing fancy, but it works.
4708 color issues. Nothing fancy, but it works.
4704
4709
4705 2002-02-10 Fernando Perez <fperez@colorado.edu>
4710 2002-02-10 Fernando Perez <fperez@colorado.edu>
4706
4711
4707 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4712 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4708 os.path.expanduser() call so that we can type @run ~/myfile.py and
4713 os.path.expanduser() call so that we can type @run ~/myfile.py and
4709 have thigs work as expected.
4714 have thigs work as expected.
4710
4715
4711 * IPython/genutils.py (page): fixed exception handling so things
4716 * IPython/genutils.py (page): fixed exception handling so things
4712 work both in Unix and Windows correctly. Quitting a pager triggers
4717 work both in Unix and Windows correctly. Quitting a pager triggers
4713 an IOError/broken pipe in Unix, and in windows not finding a pager
4718 an IOError/broken pipe in Unix, and in windows not finding a pager
4714 is also an IOError, so I had to actually look at the return value
4719 is also an IOError, so I had to actually look at the return value
4715 of the exception, not just the exception itself. Should be ok now.
4720 of the exception, not just the exception itself. Should be ok now.
4716
4721
4717 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4722 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4718 modified to allow case-insensitive color scheme changes.
4723 modified to allow case-insensitive color scheme changes.
4719
4724
4720 2002-02-09 Fernando Perez <fperez@colorado.edu>
4725 2002-02-09 Fernando Perez <fperez@colorado.edu>
4721
4726
4722 * IPython/genutils.py (native_line_ends): new function to leave
4727 * IPython/genutils.py (native_line_ends): new function to leave
4723 user config files with os-native line-endings.
4728 user config files with os-native line-endings.
4724
4729
4725 * README and manual updates.
4730 * README and manual updates.
4726
4731
4727 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4732 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4728 instead of StringType to catch Unicode strings.
4733 instead of StringType to catch Unicode strings.
4729
4734
4730 * IPython/genutils.py (filefind): fixed bug for paths with
4735 * IPython/genutils.py (filefind): fixed bug for paths with
4731 embedded spaces (very common in Windows).
4736 embedded spaces (very common in Windows).
4732
4737
4733 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4738 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4734 files under Windows, so that they get automatically associated
4739 files under Windows, so that they get automatically associated
4735 with a text editor. Windows makes it a pain to handle
4740 with a text editor. Windows makes it a pain to handle
4736 extension-less files.
4741 extension-less files.
4737
4742
4738 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4743 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4739 warning about readline only occur for Posix. In Windows there's no
4744 warning about readline only occur for Posix. In Windows there's no
4740 way to get readline, so why bother with the warning.
4745 way to get readline, so why bother with the warning.
4741
4746
4742 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4747 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4743 for __str__ instead of dir(self), since dir() changed in 2.2.
4748 for __str__ instead of dir(self), since dir() changed in 2.2.
4744
4749
4745 * Ported to Windows! Tested on XP, I suspect it should work fine
4750 * Ported to Windows! Tested on XP, I suspect it should work fine
4746 on NT/2000, but I don't think it will work on 98 et al. That
4751 on NT/2000, but I don't think it will work on 98 et al. That
4747 series of Windows is such a piece of junk anyway that I won't try
4752 series of Windows is such a piece of junk anyway that I won't try
4748 porting it there. The XP port was straightforward, showed a few
4753 porting it there. The XP port was straightforward, showed a few
4749 bugs here and there (fixed all), in particular some string
4754 bugs here and there (fixed all), in particular some string
4750 handling stuff which required considering Unicode strings (which
4755 handling stuff which required considering Unicode strings (which
4751 Windows uses). This is good, but hasn't been too tested :) No
4756 Windows uses). This is good, but hasn't been too tested :) No
4752 fancy installer yet, I'll put a note in the manual so people at
4757 fancy installer yet, I'll put a note in the manual so people at
4753 least make manually a shortcut.
4758 least make manually a shortcut.
4754
4759
4755 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4760 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4756 into a single one, "colors". This now controls both prompt and
4761 into a single one, "colors". This now controls both prompt and
4757 exception color schemes, and can be changed both at startup
4762 exception color schemes, and can be changed both at startup
4758 (either via command-line switches or via ipythonrc files) and at
4763 (either via command-line switches or via ipythonrc files) and at
4759 runtime, with @colors.
4764 runtime, with @colors.
4760 (Magic.magic_run): renamed @prun to @run and removed the old
4765 (Magic.magic_run): renamed @prun to @run and removed the old
4761 @run. The two were too similar to warrant keeping both.
4766 @run. The two were too similar to warrant keeping both.
4762
4767
4763 2002-02-03 Fernando Perez <fperez@colorado.edu>
4768 2002-02-03 Fernando Perez <fperez@colorado.edu>
4764
4769
4765 * IPython/iplib.py (install_first_time): Added comment on how to
4770 * IPython/iplib.py (install_first_time): Added comment on how to
4766 configure the color options for first-time users. Put a <return>
4771 configure the color options for first-time users. Put a <return>
4767 request at the end so that small-terminal users get a chance to
4772 request at the end so that small-terminal users get a chance to
4768 read the startup info.
4773 read the startup info.
4769
4774
4770 2002-01-23 Fernando Perez <fperez@colorado.edu>
4775 2002-01-23 Fernando Perez <fperez@colorado.edu>
4771
4776
4772 * IPython/iplib.py (CachedOutput.update): Changed output memory
4777 * IPython/iplib.py (CachedOutput.update): Changed output memory
4773 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4778 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4774 input history we still use _i. Did this b/c these variable are
4779 input history we still use _i. Did this b/c these variable are
4775 very commonly used in interactive work, so the less we need to
4780 very commonly used in interactive work, so the less we need to
4776 type the better off we are.
4781 type the better off we are.
4777 (Magic.magic_prun): updated @prun to better handle the namespaces
4782 (Magic.magic_prun): updated @prun to better handle the namespaces
4778 the file will run in, including a fix for __name__ not being set
4783 the file will run in, including a fix for __name__ not being set
4779 before.
4784 before.
4780
4785
4781 2002-01-20 Fernando Perez <fperez@colorado.edu>
4786 2002-01-20 Fernando Perez <fperez@colorado.edu>
4782
4787
4783 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4788 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4784 extra garbage for Python 2.2. Need to look more carefully into
4789 extra garbage for Python 2.2. Need to look more carefully into
4785 this later.
4790 this later.
4786
4791
4787 2002-01-19 Fernando Perez <fperez@colorado.edu>
4792 2002-01-19 Fernando Perez <fperez@colorado.edu>
4788
4793
4789 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4794 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4790 display SyntaxError exceptions properly formatted when they occur
4795 display SyntaxError exceptions properly formatted when they occur
4791 (they can be triggered by imported code).
4796 (they can be triggered by imported code).
4792
4797
4793 2002-01-18 Fernando Perez <fperez@colorado.edu>
4798 2002-01-18 Fernando Perez <fperez@colorado.edu>
4794
4799
4795 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4800 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4796 SyntaxError exceptions are reported nicely formatted, instead of
4801 SyntaxError exceptions are reported nicely formatted, instead of
4797 spitting out only offset information as before.
4802 spitting out only offset information as before.
4798 (Magic.magic_prun): Added the @prun function for executing
4803 (Magic.magic_prun): Added the @prun function for executing
4799 programs with command line args inside IPython.
4804 programs with command line args inside IPython.
4800
4805
4801 2002-01-16 Fernando Perez <fperez@colorado.edu>
4806 2002-01-16 Fernando Perez <fperez@colorado.edu>
4802
4807
4803 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4808 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4804 to *not* include the last item given in a range. This brings their
4809 to *not* include the last item given in a range. This brings their
4805 behavior in line with Python's slicing:
4810 behavior in line with Python's slicing:
4806 a[n1:n2] -> a[n1]...a[n2-1]
4811 a[n1:n2] -> a[n1]...a[n2-1]
4807 It may be a bit less convenient, but I prefer to stick to Python's
4812 It may be a bit less convenient, but I prefer to stick to Python's
4808 conventions *everywhere*, so users never have to wonder.
4813 conventions *everywhere*, so users never have to wonder.
4809 (Magic.magic_macro): Added @macro function to ease the creation of
4814 (Magic.magic_macro): Added @macro function to ease the creation of
4810 macros.
4815 macros.
4811
4816
4812 2002-01-05 Fernando Perez <fperez@colorado.edu>
4817 2002-01-05 Fernando Perez <fperez@colorado.edu>
4813
4818
4814 * Released 0.2.4.
4819 * Released 0.2.4.
4815
4820
4816 * IPython/iplib.py (Magic.magic_pdef):
4821 * IPython/iplib.py (Magic.magic_pdef):
4817 (InteractiveShell.safe_execfile): report magic lines and error
4822 (InteractiveShell.safe_execfile): report magic lines and error
4818 lines without line numbers so one can easily copy/paste them for
4823 lines without line numbers so one can easily copy/paste them for
4819 re-execution.
4824 re-execution.
4820
4825
4821 * Updated manual with recent changes.
4826 * Updated manual with recent changes.
4822
4827
4823 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4828 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4824 docstring printing when class? is called. Very handy for knowing
4829 docstring printing when class? is called. Very handy for knowing
4825 how to create class instances (as long as __init__ is well
4830 how to create class instances (as long as __init__ is well
4826 documented, of course :)
4831 documented, of course :)
4827 (Magic.magic_doc): print both class and constructor docstrings.
4832 (Magic.magic_doc): print both class and constructor docstrings.
4828 (Magic.magic_pdef): give constructor info if passed a class and
4833 (Magic.magic_pdef): give constructor info if passed a class and
4829 __call__ info for callable object instances.
4834 __call__ info for callable object instances.
4830
4835
4831 2002-01-04 Fernando Perez <fperez@colorado.edu>
4836 2002-01-04 Fernando Perez <fperez@colorado.edu>
4832
4837
4833 * Made deep_reload() off by default. It doesn't always work
4838 * Made deep_reload() off by default. It doesn't always work
4834 exactly as intended, so it's probably safer to have it off. It's
4839 exactly as intended, so it's probably safer to have it off. It's
4835 still available as dreload() anyway, so nothing is lost.
4840 still available as dreload() anyway, so nothing is lost.
4836
4841
4837 2002-01-02 Fernando Perez <fperez@colorado.edu>
4842 2002-01-02 Fernando Perez <fperez@colorado.edu>
4838
4843
4839 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4844 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4840 so I wanted an updated release).
4845 so I wanted an updated release).
4841
4846
4842 2001-12-27 Fernando Perez <fperez@colorado.edu>
4847 2001-12-27 Fernando Perez <fperez@colorado.edu>
4843
4848
4844 * IPython/iplib.py (InteractiveShell.interact): Added the original
4849 * IPython/iplib.py (InteractiveShell.interact): Added the original
4845 code from 'code.py' for this module in order to change the
4850 code from 'code.py' for this module in order to change the
4846 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4851 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4847 the history cache would break when the user hit Ctrl-C, and
4852 the history cache would break when the user hit Ctrl-C, and
4848 interact() offers no way to add any hooks to it.
4853 interact() offers no way to add any hooks to it.
4849
4854
4850 2001-12-23 Fernando Perez <fperez@colorado.edu>
4855 2001-12-23 Fernando Perez <fperez@colorado.edu>
4851
4856
4852 * setup.py: added check for 'MANIFEST' before trying to remove
4857 * setup.py: added check for 'MANIFEST' before trying to remove
4853 it. Thanks to Sean Reifschneider.
4858 it. Thanks to Sean Reifschneider.
4854
4859
4855 2001-12-22 Fernando Perez <fperez@colorado.edu>
4860 2001-12-22 Fernando Perez <fperez@colorado.edu>
4856
4861
4857 * Released 0.2.2.
4862 * Released 0.2.2.
4858
4863
4859 * Finished (reasonably) writing the manual. Later will add the
4864 * Finished (reasonably) writing the manual. Later will add the
4860 python-standard navigation stylesheets, but for the time being
4865 python-standard navigation stylesheets, but for the time being
4861 it's fairly complete. Distribution will include html and pdf
4866 it's fairly complete. Distribution will include html and pdf
4862 versions.
4867 versions.
4863
4868
4864 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4869 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4865 (MayaVi author).
4870 (MayaVi author).
4866
4871
4867 2001-12-21 Fernando Perez <fperez@colorado.edu>
4872 2001-12-21 Fernando Perez <fperez@colorado.edu>
4868
4873
4869 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4874 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4870 good public release, I think (with the manual and the distutils
4875 good public release, I think (with the manual and the distutils
4871 installer). The manual can use some work, but that can go
4876 installer). The manual can use some work, but that can go
4872 slowly. Otherwise I think it's quite nice for end users. Next
4877 slowly. Otherwise I think it's quite nice for end users. Next
4873 summer, rewrite the guts of it...
4878 summer, rewrite the guts of it...
4874
4879
4875 * Changed format of ipythonrc files to use whitespace as the
4880 * Changed format of ipythonrc files to use whitespace as the
4876 separator instead of an explicit '='. Cleaner.
4881 separator instead of an explicit '='. Cleaner.
4877
4882
4878 2001-12-20 Fernando Perez <fperez@colorado.edu>
4883 2001-12-20 Fernando Perez <fperez@colorado.edu>
4879
4884
4880 * Started a manual in LyX. For now it's just a quick merge of the
4885 * Started a manual in LyX. For now it's just a quick merge of the
4881 various internal docstrings and READMEs. Later it may grow into a
4886 various internal docstrings and READMEs. Later it may grow into a
4882 nice, full-blown manual.
4887 nice, full-blown manual.
4883
4888
4884 * Set up a distutils based installer. Installation should now be
4889 * Set up a distutils based installer. Installation should now be
4885 trivially simple for end-users.
4890 trivially simple for end-users.
4886
4891
4887 2001-12-11 Fernando Perez <fperez@colorado.edu>
4892 2001-12-11 Fernando Perez <fperez@colorado.edu>
4888
4893
4889 * Released 0.2.0. First public release, announced it at
4894 * Released 0.2.0. First public release, announced it at
4890 comp.lang.python. From now on, just bugfixes...
4895 comp.lang.python. From now on, just bugfixes...
4891
4896
4892 * Went through all the files, set copyright/license notices and
4897 * Went through all the files, set copyright/license notices and
4893 cleaned up things. Ready for release.
4898 cleaned up things. Ready for release.
4894
4899
4895 2001-12-10 Fernando Perez <fperez@colorado.edu>
4900 2001-12-10 Fernando Perez <fperez@colorado.edu>
4896
4901
4897 * Changed the first-time installer not to use tarfiles. It's more
4902 * Changed the first-time installer not to use tarfiles. It's more
4898 robust now and less unix-dependent. Also makes it easier for
4903 robust now and less unix-dependent. Also makes it easier for
4899 people to later upgrade versions.
4904 people to later upgrade versions.
4900
4905
4901 * Changed @exit to @abort to reflect the fact that it's pretty
4906 * Changed @exit to @abort to reflect the fact that it's pretty
4902 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4907 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4903 becomes significant only when IPyhton is embedded: in that case,
4908 becomes significant only when IPyhton is embedded: in that case,
4904 C-D closes IPython only, but @abort kills the enclosing program
4909 C-D closes IPython only, but @abort kills the enclosing program
4905 too (unless it had called IPython inside a try catching
4910 too (unless it had called IPython inside a try catching
4906 SystemExit).
4911 SystemExit).
4907
4912
4908 * Created Shell module which exposes the actuall IPython Shell
4913 * Created Shell module which exposes the actuall IPython Shell
4909 classes, currently the normal and the embeddable one. This at
4914 classes, currently the normal and the embeddable one. This at
4910 least offers a stable interface we won't need to change when
4915 least offers a stable interface we won't need to change when
4911 (later) the internals are rewritten. That rewrite will be confined
4916 (later) the internals are rewritten. That rewrite will be confined
4912 to iplib and ipmaker, but the Shell interface should remain as is.
4917 to iplib and ipmaker, but the Shell interface should remain as is.
4913
4918
4914 * Added embed module which offers an embeddable IPShell object,
4919 * Added embed module which offers an embeddable IPShell object,
4915 useful to fire up IPython *inside* a running program. Great for
4920 useful to fire up IPython *inside* a running program. Great for
4916 debugging or dynamical data analysis.
4921 debugging or dynamical data analysis.
4917
4922
4918 2001-12-08 Fernando Perez <fperez@colorado.edu>
4923 2001-12-08 Fernando Perez <fperez@colorado.edu>
4919
4924
4920 * Fixed small bug preventing seeing info from methods of defined
4925 * Fixed small bug preventing seeing info from methods of defined
4921 objects (incorrect namespace in _ofind()).
4926 objects (incorrect namespace in _ofind()).
4922
4927
4923 * Documentation cleanup. Moved the main usage docstrings to a
4928 * Documentation cleanup. Moved the main usage docstrings to a
4924 separate file, usage.py (cleaner to maintain, and hopefully in the
4929 separate file, usage.py (cleaner to maintain, and hopefully in the
4925 future some perlpod-like way of producing interactive, man and
4930 future some perlpod-like way of producing interactive, man and
4926 html docs out of it will be found).
4931 html docs out of it will be found).
4927
4932
4928 * Added @profile to see your profile at any time.
4933 * Added @profile to see your profile at any time.
4929
4934
4930 * Added @p as an alias for 'print'. It's especially convenient if
4935 * Added @p as an alias for 'print'. It's especially convenient if
4931 using automagic ('p x' prints x).
4936 using automagic ('p x' prints x).
4932
4937
4933 * Small cleanups and fixes after a pychecker run.
4938 * Small cleanups and fixes after a pychecker run.
4934
4939
4935 * Changed the @cd command to handle @cd - and @cd -<n> for
4940 * Changed the @cd command to handle @cd - and @cd -<n> for
4936 visiting any directory in _dh.
4941 visiting any directory in _dh.
4937
4942
4938 * Introduced _dh, a history of visited directories. @dhist prints
4943 * Introduced _dh, a history of visited directories. @dhist prints
4939 it out with numbers.
4944 it out with numbers.
4940
4945
4941 2001-12-07 Fernando Perez <fperez@colorado.edu>
4946 2001-12-07 Fernando Perez <fperez@colorado.edu>
4942
4947
4943 * Released 0.1.22
4948 * Released 0.1.22
4944
4949
4945 * Made initialization a bit more robust against invalid color
4950 * Made initialization a bit more robust against invalid color
4946 options in user input (exit, not traceback-crash).
4951 options in user input (exit, not traceback-crash).
4947
4952
4948 * Changed the bug crash reporter to write the report only in the
4953 * Changed the bug crash reporter to write the report only in the
4949 user's .ipython directory. That way IPython won't litter people's
4954 user's .ipython directory. That way IPython won't litter people's
4950 hard disks with crash files all over the place. Also print on
4955 hard disks with crash files all over the place. Also print on
4951 screen the necessary mail command.
4956 screen the necessary mail command.
4952
4957
4953 * With the new ultraTB, implemented LightBG color scheme for light
4958 * With the new ultraTB, implemented LightBG color scheme for light
4954 background terminals. A lot of people like white backgrounds, so I
4959 background terminals. A lot of people like white backgrounds, so I
4955 guess we should at least give them something readable.
4960 guess we should at least give them something readable.
4956
4961
4957 2001-12-06 Fernando Perez <fperez@colorado.edu>
4962 2001-12-06 Fernando Perez <fperez@colorado.edu>
4958
4963
4959 * Modified the structure of ultraTB. Now there's a proper class
4964 * Modified the structure of ultraTB. Now there's a proper class
4960 for tables of color schemes which allow adding schemes easily and
4965 for tables of color schemes which allow adding schemes easily and
4961 switching the active scheme without creating a new instance every
4966 switching the active scheme without creating a new instance every
4962 time (which was ridiculous). The syntax for creating new schemes
4967 time (which was ridiculous). The syntax for creating new schemes
4963 is also cleaner. I think ultraTB is finally done, with a clean
4968 is also cleaner. I think ultraTB is finally done, with a clean
4964 class structure. Names are also much cleaner (now there's proper
4969 class structure. Names are also much cleaner (now there's proper
4965 color tables, no need for every variable to also have 'color' in
4970 color tables, no need for every variable to also have 'color' in
4966 its name).
4971 its name).
4967
4972
4968 * Broke down genutils into separate files. Now genutils only
4973 * Broke down genutils into separate files. Now genutils only
4969 contains utility functions, and classes have been moved to their
4974 contains utility functions, and classes have been moved to their
4970 own files (they had enough independent functionality to warrant
4975 own files (they had enough independent functionality to warrant
4971 it): ConfigLoader, OutputTrap, Struct.
4976 it): ConfigLoader, OutputTrap, Struct.
4972
4977
4973 2001-12-05 Fernando Perez <fperez@colorado.edu>
4978 2001-12-05 Fernando Perez <fperez@colorado.edu>
4974
4979
4975 * IPython turns 21! Released version 0.1.21, as a candidate for
4980 * IPython turns 21! Released version 0.1.21, as a candidate for
4976 public consumption. If all goes well, release in a few days.
4981 public consumption. If all goes well, release in a few days.
4977
4982
4978 * Fixed path bug (files in Extensions/ directory wouldn't be found
4983 * Fixed path bug (files in Extensions/ directory wouldn't be found
4979 unless IPython/ was explicitly in sys.path).
4984 unless IPython/ was explicitly in sys.path).
4980
4985
4981 * Extended the FlexCompleter class as MagicCompleter to allow
4986 * Extended the FlexCompleter class as MagicCompleter to allow
4982 completion of @-starting lines.
4987 completion of @-starting lines.
4983
4988
4984 * Created __release__.py file as a central repository for release
4989 * Created __release__.py file as a central repository for release
4985 info that other files can read from.
4990 info that other files can read from.
4986
4991
4987 * Fixed small bug in logging: when logging was turned on in
4992 * Fixed small bug in logging: when logging was turned on in
4988 mid-session, old lines with special meanings (!@?) were being
4993 mid-session, old lines with special meanings (!@?) were being
4989 logged without the prepended comment, which is necessary since
4994 logged without the prepended comment, which is necessary since
4990 they are not truly valid python syntax. This should make session
4995 they are not truly valid python syntax. This should make session
4991 restores produce less errors.
4996 restores produce less errors.
4992
4997
4993 * The namespace cleanup forced me to make a FlexCompleter class
4998 * The namespace cleanup forced me to make a FlexCompleter class
4994 which is nothing but a ripoff of rlcompleter, but with selectable
4999 which is nothing but a ripoff of rlcompleter, but with selectable
4995 namespace (rlcompleter only works in __main__.__dict__). I'll try
5000 namespace (rlcompleter only works in __main__.__dict__). I'll try
4996 to submit a note to the authors to see if this change can be
5001 to submit a note to the authors to see if this change can be
4997 incorporated in future rlcompleter releases (Dec.6: done)
5002 incorporated in future rlcompleter releases (Dec.6: done)
4998
5003
4999 * More fixes to namespace handling. It was a mess! Now all
5004 * More fixes to namespace handling. It was a mess! Now all
5000 explicit references to __main__.__dict__ are gone (except when
5005 explicit references to __main__.__dict__ are gone (except when
5001 really needed) and everything is handled through the namespace
5006 really needed) and everything is handled through the namespace
5002 dicts in the IPython instance. We seem to be getting somewhere
5007 dicts in the IPython instance. We seem to be getting somewhere
5003 with this, finally...
5008 with this, finally...
5004
5009
5005 * Small documentation updates.
5010 * Small documentation updates.
5006
5011
5007 * Created the Extensions directory under IPython (with an
5012 * Created the Extensions directory under IPython (with an
5008 __init__.py). Put the PhysicalQ stuff there. This directory should
5013 __init__.py). Put the PhysicalQ stuff there. This directory should
5009 be used for all special-purpose extensions.
5014 be used for all special-purpose extensions.
5010
5015
5011 * File renaming:
5016 * File renaming:
5012 ipythonlib --> ipmaker
5017 ipythonlib --> ipmaker
5013 ipplib --> iplib
5018 ipplib --> iplib
5014 This makes a bit more sense in terms of what these files actually do.
5019 This makes a bit more sense in terms of what these files actually do.
5015
5020
5016 * Moved all the classes and functions in ipythonlib to ipplib, so
5021 * Moved all the classes and functions in ipythonlib to ipplib, so
5017 now ipythonlib only has make_IPython(). This will ease up its
5022 now ipythonlib only has make_IPython(). This will ease up its
5018 splitting in smaller functional chunks later.
5023 splitting in smaller functional chunks later.
5019
5024
5020 * Cleaned up (done, I think) output of @whos. Better column
5025 * Cleaned up (done, I think) output of @whos. Better column
5021 formatting, and now shows str(var) for as much as it can, which is
5026 formatting, and now shows str(var) for as much as it can, which is
5022 typically what one gets with a 'print var'.
5027 typically what one gets with a 'print var'.
5023
5028
5024 2001-12-04 Fernando Perez <fperez@colorado.edu>
5029 2001-12-04 Fernando Perez <fperez@colorado.edu>
5025
5030
5026 * Fixed namespace problems. Now builtin/IPyhton/user names get
5031 * Fixed namespace problems. Now builtin/IPyhton/user names get
5027 properly reported in their namespace. Internal namespace handling
5032 properly reported in their namespace. Internal namespace handling
5028 is finally getting decent (not perfect yet, but much better than
5033 is finally getting decent (not perfect yet, but much better than
5029 the ad-hoc mess we had).
5034 the ad-hoc mess we had).
5030
5035
5031 * Removed -exit option. If people just want to run a python
5036 * Removed -exit option. If people just want to run a python
5032 script, that's what the normal interpreter is for. Less
5037 script, that's what the normal interpreter is for. Less
5033 unnecessary options, less chances for bugs.
5038 unnecessary options, less chances for bugs.
5034
5039
5035 * Added a crash handler which generates a complete post-mortem if
5040 * Added a crash handler which generates a complete post-mortem if
5036 IPython crashes. This will help a lot in tracking bugs down the
5041 IPython crashes. This will help a lot in tracking bugs down the
5037 road.
5042 road.
5038
5043
5039 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5044 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5040 which were boud to functions being reassigned would bypass the
5045 which were boud to functions being reassigned would bypass the
5041 logger, breaking the sync of _il with the prompt counter. This
5046 logger, breaking the sync of _il with the prompt counter. This
5042 would then crash IPython later when a new line was logged.
5047 would then crash IPython later when a new line was logged.
5043
5048
5044 2001-12-02 Fernando Perez <fperez@colorado.edu>
5049 2001-12-02 Fernando Perez <fperez@colorado.edu>
5045
5050
5046 * Made IPython a package. This means people don't have to clutter
5051 * Made IPython a package. This means people don't have to clutter
5047 their sys.path with yet another directory. Changed the INSTALL
5052 their sys.path with yet another directory. Changed the INSTALL
5048 file accordingly.
5053 file accordingly.
5049
5054
5050 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5055 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5051 sorts its output (so @who shows it sorted) and @whos formats the
5056 sorts its output (so @who shows it sorted) and @whos formats the
5052 table according to the width of the first column. Nicer, easier to
5057 table according to the width of the first column. Nicer, easier to
5053 read. Todo: write a generic table_format() which takes a list of
5058 read. Todo: write a generic table_format() which takes a list of
5054 lists and prints it nicely formatted, with optional row/column
5059 lists and prints it nicely formatted, with optional row/column
5055 separators and proper padding and justification.
5060 separators and proper padding and justification.
5056
5061
5057 * Released 0.1.20
5062 * Released 0.1.20
5058
5063
5059 * Fixed bug in @log which would reverse the inputcache list (a
5064 * Fixed bug in @log which would reverse the inputcache list (a
5060 copy operation was missing).
5065 copy operation was missing).
5061
5066
5062 * Code cleanup. @config was changed to use page(). Better, since
5067 * Code cleanup. @config was changed to use page(). Better, since
5063 its output is always quite long.
5068 its output is always quite long.
5064
5069
5065 * Itpl is back as a dependency. I was having too many problems
5070 * Itpl is back as a dependency. I was having too many problems
5066 getting the parametric aliases to work reliably, and it's just
5071 getting the parametric aliases to work reliably, and it's just
5067 easier to code weird string operations with it than playing %()s
5072 easier to code weird string operations with it than playing %()s
5068 games. It's only ~6k, so I don't think it's too big a deal.
5073 games. It's only ~6k, so I don't think it's too big a deal.
5069
5074
5070 * Found (and fixed) a very nasty bug with history. !lines weren't
5075 * Found (and fixed) a very nasty bug with history. !lines weren't
5071 getting cached, and the out of sync caches would crash
5076 getting cached, and the out of sync caches would crash
5072 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5077 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5073 division of labor a bit better. Bug fixed, cleaner structure.
5078 division of labor a bit better. Bug fixed, cleaner structure.
5074
5079
5075 2001-12-01 Fernando Perez <fperez@colorado.edu>
5080 2001-12-01 Fernando Perez <fperez@colorado.edu>
5076
5081
5077 * Released 0.1.19
5082 * Released 0.1.19
5078
5083
5079 * Added option -n to @hist to prevent line number printing. Much
5084 * Added option -n to @hist to prevent line number printing. Much
5080 easier to copy/paste code this way.
5085 easier to copy/paste code this way.
5081
5086
5082 * Created global _il to hold the input list. Allows easy
5087 * Created global _il to hold the input list. Allows easy
5083 re-execution of blocks of code by slicing it (inspired by Janko's
5088 re-execution of blocks of code by slicing it (inspired by Janko's
5084 comment on 'macros').
5089 comment on 'macros').
5085
5090
5086 * Small fixes and doc updates.
5091 * Small fixes and doc updates.
5087
5092
5088 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5093 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5089 much too fragile with automagic. Handles properly multi-line
5094 much too fragile with automagic. Handles properly multi-line
5090 statements and takes parameters.
5095 statements and takes parameters.
5091
5096
5092 2001-11-30 Fernando Perez <fperez@colorado.edu>
5097 2001-11-30 Fernando Perez <fperez@colorado.edu>
5093
5098
5094 * Version 0.1.18 released.
5099 * Version 0.1.18 released.
5095
5100
5096 * Fixed nasty namespace bug in initial module imports.
5101 * Fixed nasty namespace bug in initial module imports.
5097
5102
5098 * Added copyright/license notes to all code files (except
5103 * Added copyright/license notes to all code files (except
5099 DPyGetOpt). For the time being, LGPL. That could change.
5104 DPyGetOpt). For the time being, LGPL. That could change.
5100
5105
5101 * Rewrote a much nicer README, updated INSTALL, cleaned up
5106 * Rewrote a much nicer README, updated INSTALL, cleaned up
5102 ipythonrc-* samples.
5107 ipythonrc-* samples.
5103
5108
5104 * Overall code/documentation cleanup. Basically ready for
5109 * Overall code/documentation cleanup. Basically ready for
5105 release. Only remaining thing: licence decision (LGPL?).
5110 release. Only remaining thing: licence decision (LGPL?).
5106
5111
5107 * Converted load_config to a class, ConfigLoader. Now recursion
5112 * Converted load_config to a class, ConfigLoader. Now recursion
5108 control is better organized. Doesn't include the same file twice.
5113 control is better organized. Doesn't include the same file twice.
5109
5114
5110 2001-11-29 Fernando Perez <fperez@colorado.edu>
5115 2001-11-29 Fernando Perez <fperez@colorado.edu>
5111
5116
5112 * Got input history working. Changed output history variables from
5117 * Got input history working. Changed output history variables from
5113 _p to _o so that _i is for input and _o for output. Just cleaner
5118 _p to _o so that _i is for input and _o for output. Just cleaner
5114 convention.
5119 convention.
5115
5120
5116 * Implemented parametric aliases. This pretty much allows the
5121 * Implemented parametric aliases. This pretty much allows the
5117 alias system to offer full-blown shell convenience, I think.
5122 alias system to offer full-blown shell convenience, I think.
5118
5123
5119 * Version 0.1.17 released, 0.1.18 opened.
5124 * Version 0.1.17 released, 0.1.18 opened.
5120
5125
5121 * dot_ipython/ipythonrc (alias): added documentation.
5126 * dot_ipython/ipythonrc (alias): added documentation.
5122 (xcolor): Fixed small bug (xcolors -> xcolor)
5127 (xcolor): Fixed small bug (xcolors -> xcolor)
5123
5128
5124 * Changed the alias system. Now alias is a magic command to define
5129 * Changed the alias system. Now alias is a magic command to define
5125 aliases just like the shell. Rationale: the builtin magics should
5130 aliases just like the shell. Rationale: the builtin magics should
5126 be there for things deeply connected to IPython's
5131 be there for things deeply connected to IPython's
5127 architecture. And this is a much lighter system for what I think
5132 architecture. And this is a much lighter system for what I think
5128 is the really important feature: allowing users to define quickly
5133 is the really important feature: allowing users to define quickly
5129 magics that will do shell things for them, so they can customize
5134 magics that will do shell things for them, so they can customize
5130 IPython easily to match their work habits. If someone is really
5135 IPython easily to match their work habits. If someone is really
5131 desperate to have another name for a builtin alias, they can
5136 desperate to have another name for a builtin alias, they can
5132 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5137 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5133 works.
5138 works.
5134
5139
5135 2001-11-28 Fernando Perez <fperez@colorado.edu>
5140 2001-11-28 Fernando Perez <fperez@colorado.edu>
5136
5141
5137 * Changed @file so that it opens the source file at the proper
5142 * Changed @file so that it opens the source file at the proper
5138 line. Since it uses less, if your EDITOR environment is
5143 line. Since it uses less, if your EDITOR environment is
5139 configured, typing v will immediately open your editor of choice
5144 configured, typing v will immediately open your editor of choice
5140 right at the line where the object is defined. Not as quick as
5145 right at the line where the object is defined. Not as quick as
5141 having a direct @edit command, but for all intents and purposes it
5146 having a direct @edit command, but for all intents and purposes it
5142 works. And I don't have to worry about writing @edit to deal with
5147 works. And I don't have to worry about writing @edit to deal with
5143 all the editors, less does that.
5148 all the editors, less does that.
5144
5149
5145 * Version 0.1.16 released, 0.1.17 opened.
5150 * Version 0.1.16 released, 0.1.17 opened.
5146
5151
5147 * Fixed some nasty bugs in the page/page_dumb combo that could
5152 * Fixed some nasty bugs in the page/page_dumb combo that could
5148 crash IPython.
5153 crash IPython.
5149
5154
5150 2001-11-27 Fernando Perez <fperez@colorado.edu>
5155 2001-11-27 Fernando Perez <fperez@colorado.edu>
5151
5156
5152 * Version 0.1.15 released, 0.1.16 opened.
5157 * Version 0.1.15 released, 0.1.16 opened.
5153
5158
5154 * Finally got ? and ?? to work for undefined things: now it's
5159 * Finally got ? and ?? to work for undefined things: now it's
5155 possible to type {}.get? and get information about the get method
5160 possible to type {}.get? and get information about the get method
5156 of dicts, or os.path? even if only os is defined (so technically
5161 of dicts, or os.path? even if only os is defined (so technically
5157 os.path isn't). Works at any level. For example, after import os,
5162 os.path isn't). Works at any level. For example, after import os,
5158 os?, os.path?, os.path.abspath? all work. This is great, took some
5163 os?, os.path?, os.path.abspath? all work. This is great, took some
5159 work in _ofind.
5164 work in _ofind.
5160
5165
5161 * Fixed more bugs with logging. The sanest way to do it was to add
5166 * Fixed more bugs with logging. The sanest way to do it was to add
5162 to @log a 'mode' parameter. Killed two in one shot (this mode
5167 to @log a 'mode' parameter. Killed two in one shot (this mode
5163 option was a request of Janko's). I think it's finally clean
5168 option was a request of Janko's). I think it's finally clean
5164 (famous last words).
5169 (famous last words).
5165
5170
5166 * Added a page_dumb() pager which does a decent job of paging on
5171 * Added a page_dumb() pager which does a decent job of paging on
5167 screen, if better things (like less) aren't available. One less
5172 screen, if better things (like less) aren't available. One less
5168 unix dependency (someday maybe somebody will port this to
5173 unix dependency (someday maybe somebody will port this to
5169 windows).
5174 windows).
5170
5175
5171 * Fixed problem in magic_log: would lock of logging out if log
5176 * Fixed problem in magic_log: would lock of logging out if log
5172 creation failed (because it would still think it had succeeded).
5177 creation failed (because it would still think it had succeeded).
5173
5178
5174 * Improved the page() function using curses to auto-detect screen
5179 * Improved the page() function using curses to auto-detect screen
5175 size. Now it can make a much better decision on whether to print
5180 size. Now it can make a much better decision on whether to print
5176 or page a string. Option screen_length was modified: a value 0
5181 or page a string. Option screen_length was modified: a value 0
5177 means auto-detect, and that's the default now.
5182 means auto-detect, and that's the default now.
5178
5183
5179 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5184 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5180 go out. I'll test it for a few days, then talk to Janko about
5185 go out. I'll test it for a few days, then talk to Janko about
5181 licences and announce it.
5186 licences and announce it.
5182
5187
5183 * Fixed the length of the auto-generated ---> prompt which appears
5188 * Fixed the length of the auto-generated ---> prompt which appears
5184 for auto-parens and auto-quotes. Getting this right isn't trivial,
5189 for auto-parens and auto-quotes. Getting this right isn't trivial,
5185 with all the color escapes, different prompt types and optional
5190 with all the color escapes, different prompt types and optional
5186 separators. But it seems to be working in all the combinations.
5191 separators. But it seems to be working in all the combinations.
5187
5192
5188 2001-11-26 Fernando Perez <fperez@colorado.edu>
5193 2001-11-26 Fernando Perez <fperez@colorado.edu>
5189
5194
5190 * Wrote a regexp filter to get option types from the option names
5195 * Wrote a regexp filter to get option types from the option names
5191 string. This eliminates the need to manually keep two duplicate
5196 string. This eliminates the need to manually keep two duplicate
5192 lists.
5197 lists.
5193
5198
5194 * Removed the unneeded check_option_names. Now options are handled
5199 * Removed the unneeded check_option_names. Now options are handled
5195 in a much saner manner and it's easy to visually check that things
5200 in a much saner manner and it's easy to visually check that things
5196 are ok.
5201 are ok.
5197
5202
5198 * Updated version numbers on all files I modified to carry a
5203 * Updated version numbers on all files I modified to carry a
5199 notice so Janko and Nathan have clear version markers.
5204 notice so Janko and Nathan have clear version markers.
5200
5205
5201 * Updated docstring for ultraTB with my changes. I should send
5206 * Updated docstring for ultraTB with my changes. I should send
5202 this to Nathan.
5207 this to Nathan.
5203
5208
5204 * Lots of small fixes. Ran everything through pychecker again.
5209 * Lots of small fixes. Ran everything through pychecker again.
5205
5210
5206 * Made loading of deep_reload an cmd line option. If it's not too
5211 * Made loading of deep_reload an cmd line option. If it's not too
5207 kosher, now people can just disable it. With -nodeep_reload it's
5212 kosher, now people can just disable it. With -nodeep_reload it's
5208 still available as dreload(), it just won't overwrite reload().
5213 still available as dreload(), it just won't overwrite reload().
5209
5214
5210 * Moved many options to the no| form (-opt and -noopt
5215 * Moved many options to the no| form (-opt and -noopt
5211 accepted). Cleaner.
5216 accepted). Cleaner.
5212
5217
5213 * Changed magic_log so that if called with no parameters, it uses
5218 * Changed magic_log so that if called with no parameters, it uses
5214 'rotate' mode. That way auto-generated logs aren't automatically
5219 'rotate' mode. That way auto-generated logs aren't automatically
5215 over-written. For normal logs, now a backup is made if it exists
5220 over-written. For normal logs, now a backup is made if it exists
5216 (only 1 level of backups). A new 'backup' mode was added to the
5221 (only 1 level of backups). A new 'backup' mode was added to the
5217 Logger class to support this. This was a request by Janko.
5222 Logger class to support this. This was a request by Janko.
5218
5223
5219 * Added @logoff/@logon to stop/restart an active log.
5224 * Added @logoff/@logon to stop/restart an active log.
5220
5225
5221 * Fixed a lot of bugs in log saving/replay. It was pretty
5226 * Fixed a lot of bugs in log saving/replay. It was pretty
5222 broken. Now special lines (!@,/) appear properly in the command
5227 broken. Now special lines (!@,/) appear properly in the command
5223 history after a log replay.
5228 history after a log replay.
5224
5229
5225 * Tried and failed to implement full session saving via pickle. My
5230 * Tried and failed to implement full session saving via pickle. My
5226 idea was to pickle __main__.__dict__, but modules can't be
5231 idea was to pickle __main__.__dict__, but modules can't be
5227 pickled. This would be a better alternative to replaying logs, but
5232 pickled. This would be a better alternative to replaying logs, but
5228 seems quite tricky to get to work. Changed -session to be called
5233 seems quite tricky to get to work. Changed -session to be called
5229 -logplay, which more accurately reflects what it does. And if we
5234 -logplay, which more accurately reflects what it does. And if we
5230 ever get real session saving working, -session is now available.
5235 ever get real session saving working, -session is now available.
5231
5236
5232 * Implemented color schemes for prompts also. As for tracebacks,
5237 * Implemented color schemes for prompts also. As for tracebacks,
5233 currently only NoColor and Linux are supported. But now the
5238 currently only NoColor and Linux are supported. But now the
5234 infrastructure is in place, based on a generic ColorScheme
5239 infrastructure is in place, based on a generic ColorScheme
5235 class. So writing and activating new schemes both for the prompts
5240 class. So writing and activating new schemes both for the prompts
5236 and the tracebacks should be straightforward.
5241 and the tracebacks should be straightforward.
5237
5242
5238 * Version 0.1.13 released, 0.1.14 opened.
5243 * Version 0.1.13 released, 0.1.14 opened.
5239
5244
5240 * Changed handling of options for output cache. Now counter is
5245 * Changed handling of options for output cache. Now counter is
5241 hardwired starting at 1 and one specifies the maximum number of
5246 hardwired starting at 1 and one specifies the maximum number of
5242 entries *in the outcache* (not the max prompt counter). This is
5247 entries *in the outcache* (not the max prompt counter). This is
5243 much better, since many statements won't increase the cache
5248 much better, since many statements won't increase the cache
5244 count. It also eliminated some confusing options, now there's only
5249 count. It also eliminated some confusing options, now there's only
5245 one: cache_size.
5250 one: cache_size.
5246
5251
5247 * Added 'alias' magic function and magic_alias option in the
5252 * Added 'alias' magic function and magic_alias option in the
5248 ipythonrc file. Now the user can easily define whatever names he
5253 ipythonrc file. Now the user can easily define whatever names he
5249 wants for the magic functions without having to play weird
5254 wants for the magic functions without having to play weird
5250 namespace games. This gives IPython a real shell-like feel.
5255 namespace games. This gives IPython a real shell-like feel.
5251
5256
5252 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5257 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5253 @ or not).
5258 @ or not).
5254
5259
5255 This was one of the last remaining 'visible' bugs (that I know
5260 This was one of the last remaining 'visible' bugs (that I know
5256 of). I think if I can clean up the session loading so it works
5261 of). I think if I can clean up the session loading so it works
5257 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5262 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5258 about licensing).
5263 about licensing).
5259
5264
5260 2001-11-25 Fernando Perez <fperez@colorado.edu>
5265 2001-11-25 Fernando Perez <fperez@colorado.edu>
5261
5266
5262 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5267 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5263 there's a cleaner distinction between what ? and ?? show.
5268 there's a cleaner distinction between what ? and ?? show.
5264
5269
5265 * Added screen_length option. Now the user can define his own
5270 * Added screen_length option. Now the user can define his own
5266 screen size for page() operations.
5271 screen size for page() operations.
5267
5272
5268 * Implemented magic shell-like functions with automatic code
5273 * Implemented magic shell-like functions with automatic code
5269 generation. Now adding another function is just a matter of adding
5274 generation. Now adding another function is just a matter of adding
5270 an entry to a dict, and the function is dynamically generated at
5275 an entry to a dict, and the function is dynamically generated at
5271 run-time. Python has some really cool features!
5276 run-time. Python has some really cool features!
5272
5277
5273 * Renamed many options to cleanup conventions a little. Now all
5278 * Renamed many options to cleanup conventions a little. Now all
5274 are lowercase, and only underscores where needed. Also in the code
5279 are lowercase, and only underscores where needed. Also in the code
5275 option name tables are clearer.
5280 option name tables are clearer.
5276
5281
5277 * Changed prompts a little. Now input is 'In [n]:' instead of
5282 * Changed prompts a little. Now input is 'In [n]:' instead of
5278 'In[n]:='. This allows it the numbers to be aligned with the
5283 'In[n]:='. This allows it the numbers to be aligned with the
5279 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5284 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5280 Python (it was a Mathematica thing). The '...' continuation prompt
5285 Python (it was a Mathematica thing). The '...' continuation prompt
5281 was also changed a little to align better.
5286 was also changed a little to align better.
5282
5287
5283 * Fixed bug when flushing output cache. Not all _p<n> variables
5288 * Fixed bug when flushing output cache. Not all _p<n> variables
5284 exist, so their deletion needs to be wrapped in a try:
5289 exist, so their deletion needs to be wrapped in a try:
5285
5290
5286 * Figured out how to properly use inspect.formatargspec() (it
5291 * Figured out how to properly use inspect.formatargspec() (it
5287 requires the args preceded by *). So I removed all the code from
5292 requires the args preceded by *). So I removed all the code from
5288 _get_pdef in Magic, which was just replicating that.
5293 _get_pdef in Magic, which was just replicating that.
5289
5294
5290 * Added test to prefilter to allow redefining magic function names
5295 * Added test to prefilter to allow redefining magic function names
5291 as variables. This is ok, since the @ form is always available,
5296 as variables. This is ok, since the @ form is always available,
5292 but whe should allow the user to define a variable called 'ls' if
5297 but whe should allow the user to define a variable called 'ls' if
5293 he needs it.
5298 he needs it.
5294
5299
5295 * Moved the ToDo information from README into a separate ToDo.
5300 * Moved the ToDo information from README into a separate ToDo.
5296
5301
5297 * General code cleanup and small bugfixes. I think it's close to a
5302 * General code cleanup and small bugfixes. I think it's close to a
5298 state where it can be released, obviously with a big 'beta'
5303 state where it can be released, obviously with a big 'beta'
5299 warning on it.
5304 warning on it.
5300
5305
5301 * Got the magic function split to work. Now all magics are defined
5306 * Got the magic function split to work. Now all magics are defined
5302 in a separate class. It just organizes things a bit, and now
5307 in a separate class. It just organizes things a bit, and now
5303 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5308 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5304 was too long).
5309 was too long).
5305
5310
5306 * Changed @clear to @reset to avoid potential confusions with
5311 * Changed @clear to @reset to avoid potential confusions with
5307 the shell command clear. Also renamed @cl to @clear, which does
5312 the shell command clear. Also renamed @cl to @clear, which does
5308 exactly what people expect it to from their shell experience.
5313 exactly what people expect it to from their shell experience.
5309
5314
5310 Added a check to the @reset command (since it's so
5315 Added a check to the @reset command (since it's so
5311 destructive, it's probably a good idea to ask for confirmation).
5316 destructive, it's probably a good idea to ask for confirmation).
5312 But now reset only works for full namespace resetting. Since the
5317 But now reset only works for full namespace resetting. Since the
5313 del keyword is already there for deleting a few specific
5318 del keyword is already there for deleting a few specific
5314 variables, I don't see the point of having a redundant magic
5319 variables, I don't see the point of having a redundant magic
5315 function for the same task.
5320 function for the same task.
5316
5321
5317 2001-11-24 Fernando Perez <fperez@colorado.edu>
5322 2001-11-24 Fernando Perez <fperez@colorado.edu>
5318
5323
5319 * Updated the builtin docs (esp. the ? ones).
5324 * Updated the builtin docs (esp. the ? ones).
5320
5325
5321 * Ran all the code through pychecker. Not terribly impressed with
5326 * Ran all the code through pychecker. Not terribly impressed with
5322 it: lots of spurious warnings and didn't really find anything of
5327 it: lots of spurious warnings and didn't really find anything of
5323 substance (just a few modules being imported and not used).
5328 substance (just a few modules being imported and not used).
5324
5329
5325 * Implemented the new ultraTB functionality into IPython. New
5330 * Implemented the new ultraTB functionality into IPython. New
5326 option: xcolors. This chooses color scheme. xmode now only selects
5331 option: xcolors. This chooses color scheme. xmode now only selects
5327 between Plain and Verbose. Better orthogonality.
5332 between Plain and Verbose. Better orthogonality.
5328
5333
5329 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5334 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5330 mode and color scheme for the exception handlers. Now it's
5335 mode and color scheme for the exception handlers. Now it's
5331 possible to have the verbose traceback with no coloring.
5336 possible to have the verbose traceback with no coloring.
5332
5337
5333 2001-11-23 Fernando Perez <fperez@colorado.edu>
5338 2001-11-23 Fernando Perez <fperez@colorado.edu>
5334
5339
5335 * Version 0.1.12 released, 0.1.13 opened.
5340 * Version 0.1.12 released, 0.1.13 opened.
5336
5341
5337 * Removed option to set auto-quote and auto-paren escapes by
5342 * Removed option to set auto-quote and auto-paren escapes by
5338 user. The chances of breaking valid syntax are just too high. If
5343 user. The chances of breaking valid syntax are just too high. If
5339 someone *really* wants, they can always dig into the code.
5344 someone *really* wants, they can always dig into the code.
5340
5345
5341 * Made prompt separators configurable.
5346 * Made prompt separators configurable.
5342
5347
5343 2001-11-22 Fernando Perez <fperez@colorado.edu>
5348 2001-11-22 Fernando Perez <fperez@colorado.edu>
5344
5349
5345 * Small bugfixes in many places.
5350 * Small bugfixes in many places.
5346
5351
5347 * Removed the MyCompleter class from ipplib. It seemed redundant
5352 * Removed the MyCompleter class from ipplib. It seemed redundant
5348 with the C-p,C-n history search functionality. Less code to
5353 with the C-p,C-n history search functionality. Less code to
5349 maintain.
5354 maintain.
5350
5355
5351 * Moved all the original ipython.py code into ipythonlib.py. Right
5356 * Moved all the original ipython.py code into ipythonlib.py. Right
5352 now it's just one big dump into a function called make_IPython, so
5357 now it's just one big dump into a function called make_IPython, so
5353 no real modularity has been gained. But at least it makes the
5358 no real modularity has been gained. But at least it makes the
5354 wrapper script tiny, and since ipythonlib is a module, it gets
5359 wrapper script tiny, and since ipythonlib is a module, it gets
5355 compiled and startup is much faster.
5360 compiled and startup is much faster.
5356
5361
5357 This is a reasobably 'deep' change, so we should test it for a
5362 This is a reasobably 'deep' change, so we should test it for a
5358 while without messing too much more with the code.
5363 while without messing too much more with the code.
5359
5364
5360 2001-11-21 Fernando Perez <fperez@colorado.edu>
5365 2001-11-21 Fernando Perez <fperez@colorado.edu>
5361
5366
5362 * Version 0.1.11 released, 0.1.12 opened for further work.
5367 * Version 0.1.11 released, 0.1.12 opened for further work.
5363
5368
5364 * Removed dependency on Itpl. It was only needed in one place. It
5369 * Removed dependency on Itpl. It was only needed in one place. It
5365 would be nice if this became part of python, though. It makes life
5370 would be nice if this became part of python, though. It makes life
5366 *a lot* easier in some cases.
5371 *a lot* easier in some cases.
5367
5372
5368 * Simplified the prefilter code a bit. Now all handlers are
5373 * Simplified the prefilter code a bit. Now all handlers are
5369 expected to explicitly return a value (at least a blank string).
5374 expected to explicitly return a value (at least a blank string).
5370
5375
5371 * Heavy edits in ipplib. Removed the help system altogether. Now
5376 * Heavy edits in ipplib. Removed the help system altogether. Now
5372 obj?/?? is used for inspecting objects, a magic @doc prints
5377 obj?/?? is used for inspecting objects, a magic @doc prints
5373 docstrings, and full-blown Python help is accessed via the 'help'
5378 docstrings, and full-blown Python help is accessed via the 'help'
5374 keyword. This cleans up a lot of code (less to maintain) and does
5379 keyword. This cleans up a lot of code (less to maintain) and does
5375 the job. Since 'help' is now a standard Python component, might as
5380 the job. Since 'help' is now a standard Python component, might as
5376 well use it and remove duplicate functionality.
5381 well use it and remove duplicate functionality.
5377
5382
5378 Also removed the option to use ipplib as a standalone program. By
5383 Also removed the option to use ipplib as a standalone program. By
5379 now it's too dependent on other parts of IPython to function alone.
5384 now it's too dependent on other parts of IPython to function alone.
5380
5385
5381 * Fixed bug in genutils.pager. It would crash if the pager was
5386 * Fixed bug in genutils.pager. It would crash if the pager was
5382 exited immediately after opening (broken pipe).
5387 exited immediately after opening (broken pipe).
5383
5388
5384 * Trimmed down the VerboseTB reporting a little. The header is
5389 * Trimmed down the VerboseTB reporting a little. The header is
5385 much shorter now and the repeated exception arguments at the end
5390 much shorter now and the repeated exception arguments at the end
5386 have been removed. For interactive use the old header seemed a bit
5391 have been removed. For interactive use the old header seemed a bit
5387 excessive.
5392 excessive.
5388
5393
5389 * Fixed small bug in output of @whos for variables with multi-word
5394 * Fixed small bug in output of @whos for variables with multi-word
5390 types (only first word was displayed).
5395 types (only first word was displayed).
5391
5396
5392 2001-11-17 Fernando Perez <fperez@colorado.edu>
5397 2001-11-17 Fernando Perez <fperez@colorado.edu>
5393
5398
5394 * Version 0.1.10 released, 0.1.11 opened for further work.
5399 * Version 0.1.10 released, 0.1.11 opened for further work.
5395
5400
5396 * Modified dirs and friends. dirs now *returns* the stack (not
5401 * Modified dirs and friends. dirs now *returns* the stack (not
5397 prints), so one can manipulate it as a variable. Convenient to
5402 prints), so one can manipulate it as a variable. Convenient to
5398 travel along many directories.
5403 travel along many directories.
5399
5404
5400 * Fixed bug in magic_pdef: would only work with functions with
5405 * Fixed bug in magic_pdef: would only work with functions with
5401 arguments with default values.
5406 arguments with default values.
5402
5407
5403 2001-11-14 Fernando Perez <fperez@colorado.edu>
5408 2001-11-14 Fernando Perez <fperez@colorado.edu>
5404
5409
5405 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5410 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5406 example with IPython. Various other minor fixes and cleanups.
5411 example with IPython. Various other minor fixes and cleanups.
5407
5412
5408 * Version 0.1.9 released, 0.1.10 opened for further work.
5413 * Version 0.1.9 released, 0.1.10 opened for further work.
5409
5414
5410 * Added sys.path to the list of directories searched in the
5415 * Added sys.path to the list of directories searched in the
5411 execfile= option. It used to be the current directory and the
5416 execfile= option. It used to be the current directory and the
5412 user's IPYTHONDIR only.
5417 user's IPYTHONDIR only.
5413
5418
5414 2001-11-13 Fernando Perez <fperez@colorado.edu>
5419 2001-11-13 Fernando Perez <fperez@colorado.edu>
5415
5420
5416 * Reinstated the raw_input/prefilter separation that Janko had
5421 * Reinstated the raw_input/prefilter separation that Janko had
5417 initially. This gives a more convenient setup for extending the
5422 initially. This gives a more convenient setup for extending the
5418 pre-processor from the outside: raw_input always gets a string,
5423 pre-processor from the outside: raw_input always gets a string,
5419 and prefilter has to process it. We can then redefine prefilter
5424 and prefilter has to process it. We can then redefine prefilter
5420 from the outside and implement extensions for special
5425 from the outside and implement extensions for special
5421 purposes.
5426 purposes.
5422
5427
5423 Today I got one for inputting PhysicalQuantity objects
5428 Today I got one for inputting PhysicalQuantity objects
5424 (from Scientific) without needing any function calls at
5429 (from Scientific) without needing any function calls at
5425 all. Extremely convenient, and it's all done as a user-level
5430 all. Extremely convenient, and it's all done as a user-level
5426 extension (no IPython code was touched). Now instead of:
5431 extension (no IPython code was touched). Now instead of:
5427 a = PhysicalQuantity(4.2,'m/s**2')
5432 a = PhysicalQuantity(4.2,'m/s**2')
5428 one can simply say
5433 one can simply say
5429 a = 4.2 m/s**2
5434 a = 4.2 m/s**2
5430 or even
5435 or even
5431 a = 4.2 m/s^2
5436 a = 4.2 m/s^2
5432
5437
5433 I use this, but it's also a proof of concept: IPython really is
5438 I use this, but it's also a proof of concept: IPython really is
5434 fully user-extensible, even at the level of the parsing of the
5439 fully user-extensible, even at the level of the parsing of the
5435 command line. It's not trivial, but it's perfectly doable.
5440 command line. It's not trivial, but it's perfectly doable.
5436
5441
5437 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5442 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5438 the problem of modules being loaded in the inverse order in which
5443 the problem of modules being loaded in the inverse order in which
5439 they were defined in
5444 they were defined in
5440
5445
5441 * Version 0.1.8 released, 0.1.9 opened for further work.
5446 * Version 0.1.8 released, 0.1.9 opened for further work.
5442
5447
5443 * Added magics pdef, source and file. They respectively show the
5448 * Added magics pdef, source and file. They respectively show the
5444 definition line ('prototype' in C), source code and full python
5449 definition line ('prototype' in C), source code and full python
5445 file for any callable object. The object inspector oinfo uses
5450 file for any callable object. The object inspector oinfo uses
5446 these to show the same information.
5451 these to show the same information.
5447
5452
5448 * Version 0.1.7 released, 0.1.8 opened for further work.
5453 * Version 0.1.7 released, 0.1.8 opened for further work.
5449
5454
5450 * Separated all the magic functions into a class called Magic. The
5455 * Separated all the magic functions into a class called Magic. The
5451 InteractiveShell class was becoming too big for Xemacs to handle
5456 InteractiveShell class was becoming too big for Xemacs to handle
5452 (de-indenting a line would lock it up for 10 seconds while it
5457 (de-indenting a line would lock it up for 10 seconds while it
5453 backtracked on the whole class!)
5458 backtracked on the whole class!)
5454
5459
5455 FIXME: didn't work. It can be done, but right now namespaces are
5460 FIXME: didn't work. It can be done, but right now namespaces are
5456 all messed up. Do it later (reverted it for now, so at least
5461 all messed up. Do it later (reverted it for now, so at least
5457 everything works as before).
5462 everything works as before).
5458
5463
5459 * Got the object introspection system (magic_oinfo) working! I
5464 * Got the object introspection system (magic_oinfo) working! I
5460 think this is pretty much ready for release to Janko, so he can
5465 think this is pretty much ready for release to Janko, so he can
5461 test it for a while and then announce it. Pretty much 100% of what
5466 test it for a while and then announce it. Pretty much 100% of what
5462 I wanted for the 'phase 1' release is ready. Happy, tired.
5467 I wanted for the 'phase 1' release is ready. Happy, tired.
5463
5468
5464 2001-11-12 Fernando Perez <fperez@colorado.edu>
5469 2001-11-12 Fernando Perez <fperez@colorado.edu>
5465
5470
5466 * Version 0.1.6 released, 0.1.7 opened for further work.
5471 * Version 0.1.6 released, 0.1.7 opened for further work.
5467
5472
5468 * Fixed bug in printing: it used to test for truth before
5473 * Fixed bug in printing: it used to test for truth before
5469 printing, so 0 wouldn't print. Now checks for None.
5474 printing, so 0 wouldn't print. Now checks for None.
5470
5475
5471 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5476 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5472 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5477 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5473 reaches by hand into the outputcache. Think of a better way to do
5478 reaches by hand into the outputcache. Think of a better way to do
5474 this later.
5479 this later.
5475
5480
5476 * Various small fixes thanks to Nathan's comments.
5481 * Various small fixes thanks to Nathan's comments.
5477
5482
5478 * Changed magic_pprint to magic_Pprint. This way it doesn't
5483 * Changed magic_pprint to magic_Pprint. This way it doesn't
5479 collide with pprint() and the name is consistent with the command
5484 collide with pprint() and the name is consistent with the command
5480 line option.
5485 line option.
5481
5486
5482 * Changed prompt counter behavior to be fully like
5487 * Changed prompt counter behavior to be fully like
5483 Mathematica's. That is, even input that doesn't return a result
5488 Mathematica's. That is, even input that doesn't return a result
5484 raises the prompt counter. The old behavior was kind of confusing
5489 raises the prompt counter. The old behavior was kind of confusing
5485 (getting the same prompt number several times if the operation
5490 (getting the same prompt number several times if the operation
5486 didn't return a result).
5491 didn't return a result).
5487
5492
5488 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5493 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5489
5494
5490 * Fixed -Classic mode (wasn't working anymore).
5495 * Fixed -Classic mode (wasn't working anymore).
5491
5496
5492 * Added colored prompts using Nathan's new code. Colors are
5497 * Added colored prompts using Nathan's new code. Colors are
5493 currently hardwired, they can be user-configurable. For
5498 currently hardwired, they can be user-configurable. For
5494 developers, they can be chosen in file ipythonlib.py, at the
5499 developers, they can be chosen in file ipythonlib.py, at the
5495 beginning of the CachedOutput class def.
5500 beginning of the CachedOutput class def.
5496
5501
5497 2001-11-11 Fernando Perez <fperez@colorado.edu>
5502 2001-11-11 Fernando Perez <fperez@colorado.edu>
5498
5503
5499 * Version 0.1.5 released, 0.1.6 opened for further work.
5504 * Version 0.1.5 released, 0.1.6 opened for further work.
5500
5505
5501 * Changed magic_env to *return* the environment as a dict (not to
5506 * Changed magic_env to *return* the environment as a dict (not to
5502 print it). This way it prints, but it can also be processed.
5507 print it). This way it prints, but it can also be processed.
5503
5508
5504 * Added Verbose exception reporting to interactive
5509 * Added Verbose exception reporting to interactive
5505 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5510 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5506 traceback. Had to make some changes to the ultraTB file. This is
5511 traceback. Had to make some changes to the ultraTB file. This is
5507 probably the last 'big' thing in my mental todo list. This ties
5512 probably the last 'big' thing in my mental todo list. This ties
5508 in with the next entry:
5513 in with the next entry:
5509
5514
5510 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5515 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5511 has to specify is Plain, Color or Verbose for all exception
5516 has to specify is Plain, Color or Verbose for all exception
5512 handling.
5517 handling.
5513
5518
5514 * Removed ShellServices option. All this can really be done via
5519 * Removed ShellServices option. All this can really be done via
5515 the magic system. It's easier to extend, cleaner and has automatic
5520 the magic system. It's easier to extend, cleaner and has automatic
5516 namespace protection and documentation.
5521 namespace protection and documentation.
5517
5522
5518 2001-11-09 Fernando Perez <fperez@colorado.edu>
5523 2001-11-09 Fernando Perez <fperez@colorado.edu>
5519
5524
5520 * Fixed bug in output cache flushing (missing parameter to
5525 * Fixed bug in output cache flushing (missing parameter to
5521 __init__). Other small bugs fixed (found using pychecker).
5526 __init__). Other small bugs fixed (found using pychecker).
5522
5527
5523 * Version 0.1.4 opened for bugfixing.
5528 * Version 0.1.4 opened for bugfixing.
5524
5529
5525 2001-11-07 Fernando Perez <fperez@colorado.edu>
5530 2001-11-07 Fernando Perez <fperez@colorado.edu>
5526
5531
5527 * Version 0.1.3 released, mainly because of the raw_input bug.
5532 * Version 0.1.3 released, mainly because of the raw_input bug.
5528
5533
5529 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5534 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5530 and when testing for whether things were callable, a call could
5535 and when testing for whether things were callable, a call could
5531 actually be made to certain functions. They would get called again
5536 actually be made to certain functions. They would get called again
5532 once 'really' executed, with a resulting double call. A disaster
5537 once 'really' executed, with a resulting double call. A disaster
5533 in many cases (list.reverse() would never work!).
5538 in many cases (list.reverse() would never work!).
5534
5539
5535 * Removed prefilter() function, moved its code to raw_input (which
5540 * Removed prefilter() function, moved its code to raw_input (which
5536 after all was just a near-empty caller for prefilter). This saves
5541 after all was just a near-empty caller for prefilter). This saves
5537 a function call on every prompt, and simplifies the class a tiny bit.
5542 a function call on every prompt, and simplifies the class a tiny bit.
5538
5543
5539 * Fix _ip to __ip name in magic example file.
5544 * Fix _ip to __ip name in magic example file.
5540
5545
5541 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5546 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5542 work with non-gnu versions of tar.
5547 work with non-gnu versions of tar.
5543
5548
5544 2001-11-06 Fernando Perez <fperez@colorado.edu>
5549 2001-11-06 Fernando Perez <fperez@colorado.edu>
5545
5550
5546 * Version 0.1.2. Just to keep track of the recent changes.
5551 * Version 0.1.2. Just to keep track of the recent changes.
5547
5552
5548 * Fixed nasty bug in output prompt routine. It used to check 'if
5553 * Fixed nasty bug in output prompt routine. It used to check 'if
5549 arg != None...'. Problem is, this fails if arg implements a
5554 arg != None...'. Problem is, this fails if arg implements a
5550 special comparison (__cmp__) which disallows comparing to
5555 special comparison (__cmp__) which disallows comparing to
5551 None. Found it when trying to use the PhysicalQuantity module from
5556 None. Found it when trying to use the PhysicalQuantity module from
5552 ScientificPython.
5557 ScientificPython.
5553
5558
5554 2001-11-05 Fernando Perez <fperez@colorado.edu>
5559 2001-11-05 Fernando Perez <fperez@colorado.edu>
5555
5560
5556 * Also added dirs. Now the pushd/popd/dirs family functions
5561 * Also added dirs. Now the pushd/popd/dirs family functions
5557 basically like the shell, with the added convenience of going home
5562 basically like the shell, with the added convenience of going home
5558 when called with no args.
5563 when called with no args.
5559
5564
5560 * pushd/popd slightly modified to mimic shell behavior more
5565 * pushd/popd slightly modified to mimic shell behavior more
5561 closely.
5566 closely.
5562
5567
5563 * Added env,pushd,popd from ShellServices as magic functions. I
5568 * Added env,pushd,popd from ShellServices as magic functions. I
5564 think the cleanest will be to port all desired functions from
5569 think the cleanest will be to port all desired functions from
5565 ShellServices as magics and remove ShellServices altogether. This
5570 ShellServices as magics and remove ShellServices altogether. This
5566 will provide a single, clean way of adding functionality
5571 will provide a single, clean way of adding functionality
5567 (shell-type or otherwise) to IP.
5572 (shell-type or otherwise) to IP.
5568
5573
5569 2001-11-04 Fernando Perez <fperez@colorado.edu>
5574 2001-11-04 Fernando Perez <fperez@colorado.edu>
5570
5575
5571 * Added .ipython/ directory to sys.path. This way users can keep
5576 * Added .ipython/ directory to sys.path. This way users can keep
5572 customizations there and access them via import.
5577 customizations there and access them via import.
5573
5578
5574 2001-11-03 Fernando Perez <fperez@colorado.edu>
5579 2001-11-03 Fernando Perez <fperez@colorado.edu>
5575
5580
5576 * Opened version 0.1.1 for new changes.
5581 * Opened version 0.1.1 for new changes.
5577
5582
5578 * Changed version number to 0.1.0: first 'public' release, sent to
5583 * Changed version number to 0.1.0: first 'public' release, sent to
5579 Nathan and Janko.
5584 Nathan and Janko.
5580
5585
5581 * Lots of small fixes and tweaks.
5586 * Lots of small fixes and tweaks.
5582
5587
5583 * Minor changes to whos format. Now strings are shown, snipped if
5588 * Minor changes to whos format. Now strings are shown, snipped if
5584 too long.
5589 too long.
5585
5590
5586 * Changed ShellServices to work on __main__ so they show up in @who
5591 * Changed ShellServices to work on __main__ so they show up in @who
5587
5592
5588 * Help also works with ? at the end of a line:
5593 * Help also works with ? at the end of a line:
5589 ?sin and sin?
5594 ?sin and sin?
5590 both produce the same effect. This is nice, as often I use the
5595 both produce the same effect. This is nice, as often I use the
5591 tab-complete to find the name of a method, but I used to then have
5596 tab-complete to find the name of a method, but I used to then have
5592 to go to the beginning of the line to put a ? if I wanted more
5597 to go to the beginning of the line to put a ? if I wanted more
5593 info. Now I can just add the ? and hit return. Convenient.
5598 info. Now I can just add the ? and hit return. Convenient.
5594
5599
5595 2001-11-02 Fernando Perez <fperez@colorado.edu>
5600 2001-11-02 Fernando Perez <fperez@colorado.edu>
5596
5601
5597 * Python version check (>=2.1) added.
5602 * Python version check (>=2.1) added.
5598
5603
5599 * Added LazyPython documentation. At this point the docs are quite
5604 * Added LazyPython documentation. At this point the docs are quite
5600 a mess. A cleanup is in order.
5605 a mess. A cleanup is in order.
5601
5606
5602 * Auto-installer created. For some bizarre reason, the zipfiles
5607 * Auto-installer created. For some bizarre reason, the zipfiles
5603 module isn't working on my system. So I made a tar version
5608 module isn't working on my system. So I made a tar version
5604 (hopefully the command line options in various systems won't kill
5609 (hopefully the command line options in various systems won't kill
5605 me).
5610 me).
5606
5611
5607 * Fixes to Struct in genutils. Now all dictionary-like methods are
5612 * Fixes to Struct in genutils. Now all dictionary-like methods are
5608 protected (reasonably).
5613 protected (reasonably).
5609
5614
5610 * Added pager function to genutils and changed ? to print usage
5615 * Added pager function to genutils and changed ? to print usage
5611 note through it (it was too long).
5616 note through it (it was too long).
5612
5617
5613 * Added the LazyPython functionality. Works great! I changed the
5618 * Added the LazyPython functionality. Works great! I changed the
5614 auto-quote escape to ';', it's on home row and next to '. But
5619 auto-quote escape to ';', it's on home row and next to '. But
5615 both auto-quote and auto-paren (still /) escapes are command-line
5620 both auto-quote and auto-paren (still /) escapes are command-line
5616 parameters.
5621 parameters.
5617
5622
5618
5623
5619 2001-11-01 Fernando Perez <fperez@colorado.edu>
5624 2001-11-01 Fernando Perez <fperez@colorado.edu>
5620
5625
5621 * Version changed to 0.0.7. Fairly large change: configuration now
5626 * Version changed to 0.0.7. Fairly large change: configuration now
5622 is all stored in a directory, by default .ipython. There, all
5627 is all stored in a directory, by default .ipython. There, all
5623 config files have normal looking names (not .names)
5628 config files have normal looking names (not .names)
5624
5629
5625 * Version 0.0.6 Released first to Lucas and Archie as a test
5630 * Version 0.0.6 Released first to Lucas and Archie as a test
5626 run. Since it's the first 'semi-public' release, change version to
5631 run. Since it's the first 'semi-public' release, change version to
5627 > 0.0.6 for any changes now.
5632 > 0.0.6 for any changes now.
5628
5633
5629 * Stuff I had put in the ipplib.py changelog:
5634 * Stuff I had put in the ipplib.py changelog:
5630
5635
5631 Changes to InteractiveShell:
5636 Changes to InteractiveShell:
5632
5637
5633 - Made the usage message a parameter.
5638 - Made the usage message a parameter.
5634
5639
5635 - Require the name of the shell variable to be given. It's a bit
5640 - Require the name of the shell variable to be given. It's a bit
5636 of a hack, but allows the name 'shell' not to be hardwired in the
5641 of a hack, but allows the name 'shell' not to be hardwired in the
5637 magic (@) handler, which is problematic b/c it requires
5642 magic (@) handler, which is problematic b/c it requires
5638 polluting the global namespace with 'shell'. This in turn is
5643 polluting the global namespace with 'shell'. This in turn is
5639 fragile: if a user redefines a variable called shell, things
5644 fragile: if a user redefines a variable called shell, things
5640 break.
5645 break.
5641
5646
5642 - magic @: all functions available through @ need to be defined
5647 - magic @: all functions available through @ need to be defined
5643 as magic_<name>, even though they can be called simply as
5648 as magic_<name>, even though they can be called simply as
5644 @<name>. This allows the special command @magic to gather
5649 @<name>. This allows the special command @magic to gather
5645 information automatically about all existing magic functions,
5650 information automatically about all existing magic functions,
5646 even if they are run-time user extensions, by parsing the shell
5651 even if they are run-time user extensions, by parsing the shell
5647 instance __dict__ looking for special magic_ names.
5652 instance __dict__ looking for special magic_ names.
5648
5653
5649 - mainloop: added *two* local namespace parameters. This allows
5654 - mainloop: added *two* local namespace parameters. This allows
5650 the class to differentiate between parameters which were there
5655 the class to differentiate between parameters which were there
5651 before and after command line initialization was processed. This
5656 before and after command line initialization was processed. This
5652 way, later @who can show things loaded at startup by the
5657 way, later @who can show things loaded at startup by the
5653 user. This trick was necessary to make session saving/reloading
5658 user. This trick was necessary to make session saving/reloading
5654 really work: ideally after saving/exiting/reloading a session,
5659 really work: ideally after saving/exiting/reloading a session,
5655 *everything* should look the same, including the output of @who. I
5660 *everything* should look the same, including the output of @who. I
5656 was only able to make this work with this double namespace
5661 was only able to make this work with this double namespace
5657 trick.
5662 trick.
5658
5663
5659 - added a header to the logfile which allows (almost) full
5664 - added a header to the logfile which allows (almost) full
5660 session restoring.
5665 session restoring.
5661
5666
5662 - prepend lines beginning with @ or !, with a and log
5667 - prepend lines beginning with @ or !, with a and log
5663 them. Why? !lines: may be useful to know what you did @lines:
5668 them. Why? !lines: may be useful to know what you did @lines:
5664 they may affect session state. So when restoring a session, at
5669 they may affect session state. So when restoring a session, at
5665 least inform the user of their presence. I couldn't quite get
5670 least inform the user of their presence. I couldn't quite get
5666 them to properly re-execute, but at least the user is warned.
5671 them to properly re-execute, but at least the user is warned.
5667
5672
5668 * Started ChangeLog.
5673 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now