##// END OF EJS Templates
Display keycodes in the range 0x01-0x1F as CTRL-xx....
walter.doerwald -
Show More
@@ -1,1559 +1,1565 b''
1 # -*- coding: iso-8859-1 -*-
1 # -*- coding: iso-8859-1 -*-
2
2
3 import curses, textwrap
3 import curses, textwrap
4
4
5 import astyle, ipipe
5 import astyle, ipipe
6
6
7
7
8 # Python 2.3 compatibility
8 # Python 2.3 compatibility
9 try:
9 try:
10 set
10 set
11 except NameError:
11 except NameError:
12 import sets
12 import sets
13 set = sets.Set
13 set = sets.Set
14
14
15
15
16 _ibrowse_help = """
16 _ibrowse_help = """
17 down
17 down
18 Move the cursor to the next line.
18 Move the cursor to the next line.
19
19
20 up
20 up
21 Move the cursor to the previous line.
21 Move the cursor to the previous line.
22
22
23 pagedown
23 pagedown
24 Move the cursor down one page (minus overlap).
24 Move the cursor down one page (minus overlap).
25
25
26 pageup
26 pageup
27 Move the cursor up one page (minus overlap).
27 Move the cursor up one page (minus overlap).
28
28
29 left
29 left
30 Move the cursor left.
30 Move the cursor left.
31
31
32 right
32 right
33 Move the cursor right.
33 Move the cursor right.
34
34
35 home
35 home
36 Move the cursor to the first column.
36 Move the cursor to the first column.
37
37
38 end
38 end
39 Move the cursor to the last column.
39 Move the cursor to the last column.
40
40
41 prevattr
41 prevattr
42 Move the cursor one attribute column to the left.
42 Move the cursor one attribute column to the left.
43
43
44 nextattr
44 nextattr
45 Move the cursor one attribute column to the right.
45 Move the cursor one attribute column to the right.
46
46
47 pick
47 pick
48 'Pick' the object under the cursor (i.e. the row the cursor is on). This
48 'Pick' the object under the cursor (i.e. the row the cursor is on). This
49 leaves the browser and returns the picked object to the caller. (In IPython
49 leaves the browser and returns the picked object to the caller. (In IPython
50 this object will be available as the '_' variable.)
50 this object will be available as the '_' variable.)
51
51
52 pickattr
52 pickattr
53 'Pick' the attribute under the cursor (i.e. the row/column the cursor is on).
53 'Pick' the attribute under the cursor (i.e. the row/column the cursor is on).
54
54
55 pickallattrs
55 pickallattrs
56 Pick' the complete column under the cursor (i.e. the attribute under the
56 Pick' the complete column under the cursor (i.e. the attribute under the
57 cursor) from all currently fetched objects. These attributes will be returned
57 cursor) from all currently fetched objects. These attributes will be returned
58 as a list.
58 as a list.
59
59
60 tooglemark
60 tooglemark
61 Mark/unmark the object under the cursor. Marked objects have a '!' after the
61 Mark/unmark the object under the cursor. Marked objects have a '!' after the
62 row number).
62 row number).
63
63
64 pickmarked
64 pickmarked
65 'Pick' marked objects. Marked objects will be returned as a list.
65 'Pick' marked objects. Marked objects will be returned as a list.
66
66
67 pickmarkedattr
67 pickmarkedattr
68 'Pick' the attribute under the cursor from all marked objects (This returns a
68 'Pick' the attribute under the cursor from all marked objects (This returns a
69 list).
69 list).
70
70
71 enterdefault
71 enterdefault
72 Enter the object under the cursor. (what this mean depends on the object
72 Enter the object under the cursor. (what this mean depends on the object
73 itself (i.e. how it implements the '__xiter__' method). This opens a new
73 itself (i.e. how it implements the '__xiter__' method). This opens a new
74 browser 'level'.
74 browser 'level'.
75
75
76 enter
76 enter
77 Enter the object under the cursor. If the object provides different enter
77 Enter the object under the cursor. If the object provides different enter
78 modes a menu of all modes will be presented; choose one and enter it (via the
78 modes a menu of all modes will be presented; choose one and enter it (via the
79 'enter' or 'enterdefault' command).
79 'enter' or 'enterdefault' command).
80
80
81 enterattr
81 enterattr
82 Enter the attribute under the cursor.
82 Enter the attribute under the cursor.
83
83
84 leave
84 leave
85 Leave the current browser level and go back to the previous one.
85 Leave the current browser level and go back to the previous one.
86
86
87 detail
87 detail
88 Show a detail view of the object under the cursor. This shows the name, type,
88 Show a detail view of the object under the cursor. This shows the name, type,
89 doc string and value of the object attributes (and it might show more
89 doc string and value of the object attributes (and it might show more
90 attributes than in the list view, depending on the object).
90 attributes than in the list view, depending on the object).
91
91
92 detailattr
92 detailattr
93 Show a detail view of the attribute under the cursor.
93 Show a detail view of the attribute under the cursor.
94
94
95 markrange
95 markrange
96 Mark all objects from the last marked object before the current cursor
96 Mark all objects from the last marked object before the current cursor
97 position to the cursor position.
97 position to the cursor position.
98
98
99 sortattrasc
99 sortattrasc
100 Sort the objects (in ascending order) using the attribute under the cursor as
100 Sort the objects (in ascending order) using the attribute under the cursor as
101 the sort key.
101 the sort key.
102
102
103 sortattrdesc
103 sortattrdesc
104 Sort the objects (in descending order) using the attribute under the cursor as
104 Sort the objects (in descending order) using the attribute under the cursor as
105 the sort key.
105 the sort key.
106
106
107 hideattr
107 hideattr
108 Hide the attribute under the cursor.
108 Hide the attribute under the cursor.
109
109
110 unhideattrs
110 unhideattrs
111 Make all attributes visible again.
111 Make all attributes visible again.
112
112
113 goto
113 goto
114 Jump to a row. The row number can be entered at the bottom of the screen.
114 Jump to a row. The row number can be entered at the bottom of the screen.
115
115
116 find
116 find
117 Search forward for a row. At the bottom of the screen the condition can be
117 Search forward for a row. At the bottom of the screen the condition can be
118 entered.
118 entered.
119
119
120 findbackwards
120 findbackwards
121 Search backward for a row. At the bottom of the screen the condition can be
121 Search backward for a row. At the bottom of the screen the condition can be
122 entered.
122 entered.
123
123
124 help
124 help
125 This screen.
125 This screen.
126 """
126 """
127
127
128
128
129 class UnassignedKeyError(Exception):
129 class UnassignedKeyError(Exception):
130 """
130 """
131 Exception that is used for reporting unassigned keys.
131 Exception that is used for reporting unassigned keys.
132 """
132 """
133
133
134
134
135 class UnknownCommandError(Exception):
135 class UnknownCommandError(Exception):
136 """
136 """
137 Exception that is used for reporting unknown command (this should never
137 Exception that is used for reporting unknown command (this should never
138 happen).
138 happen).
139 """
139 """
140
140
141
141
142 class CommandError(Exception):
142 class CommandError(Exception):
143 """
143 """
144 Exception that is used for reporting that a command can't be executed.
144 Exception that is used for reporting that a command can't be executed.
145 """
145 """
146
146
147
147
148 class _BrowserCachedItem(object):
148 class _BrowserCachedItem(object):
149 # This is used internally by ``ibrowse`` to store a item together with its
149 # This is used internally by ``ibrowse`` to store a item together with its
150 # marked status.
150 # marked status.
151 __slots__ = ("item", "marked")
151 __slots__ = ("item", "marked")
152
152
153 def __init__(self, item):
153 def __init__(self, item):
154 self.item = item
154 self.item = item
155 self.marked = False
155 self.marked = False
156
156
157
157
158 class _BrowserHelp(object):
158 class _BrowserHelp(object):
159 style_header = astyle.Style.fromstr("red:blacK")
159 style_header = astyle.Style.fromstr("red:blacK")
160 # This is used internally by ``ibrowse`` for displaying the help screen.
160 # This is used internally by ``ibrowse`` for displaying the help screen.
161 def __init__(self, browser):
161 def __init__(self, browser):
162 self.browser = browser
162 self.browser = browser
163
163
164 def __xrepr__(self, mode):
164 def __xrepr__(self, mode):
165 yield (-1, True)
165 yield (-1, True)
166 if mode == "header" or mode == "footer":
166 if mode == "header" or mode == "footer":
167 yield (astyle.style_default, "ibrowse help screen")
167 yield (astyle.style_default, "ibrowse help screen")
168 else:
168 else:
169 yield (astyle.style_default, repr(self))
169 yield (astyle.style_default, repr(self))
170
170
171 def __xiter__(self, mode):
171 def __xiter__(self, mode):
172 # Get reverse key mapping
172 # Get reverse key mapping
173 allkeys = {}
173 allkeys = {}
174 for (key, cmd) in self.browser.keymap.iteritems():
174 for (key, cmd) in self.browser.keymap.iteritems():
175 allkeys.setdefault(cmd, []).append(key)
175 allkeys.setdefault(cmd, []).append(key)
176
176
177 fields = ("key", "description")
177 fields = ("key", "description")
178
178
179 for (i, command) in enumerate(_ibrowse_help.strip().split("\n\n")):
179 for (i, command) in enumerate(_ibrowse_help.strip().split("\n\n")):
180 if i:
180 if i:
181 yield ipipe.Fields(fields, key="", description="")
181 yield ipipe.Fields(fields, key="", description="")
182
182
183 (name, description) = command.split("\n", 1)
183 (name, description) = command.split("\n", 1)
184 keys = allkeys.get(name, [])
184 keys = allkeys.get(name, [])
185 lines = textwrap.wrap(description, 60)
185 lines = textwrap.wrap(description, 60)
186
186
187 yield ipipe.Fields(fields, description=astyle.Text((self.style_header, name)))
187 yield ipipe.Fields(fields, description=astyle.Text((self.style_header, name)))
188 for i in xrange(max(len(keys), len(lines))):
188 for i in xrange(max(len(keys), len(lines))):
189 try:
189 try:
190 key = self.browser.keylabel(keys[i])
190 key = self.browser.keylabel(keys[i])
191 except IndexError:
191 except IndexError:
192 key = ""
192 key = ""
193 try:
193 try:
194 line = lines[i]
194 line = lines[i]
195 except IndexError:
195 except IndexError:
196 line = ""
196 line = ""
197 yield ipipe.Fields(fields, key=key, description=line)
197 yield ipipe.Fields(fields, key=key, description=line)
198
198
199
199
200 class _BrowserLevel(object):
200 class _BrowserLevel(object):
201 # This is used internally to store the state (iterator, fetch items,
201 # This is used internally to store the state (iterator, fetch items,
202 # position of cursor and screen, etc.) of one browser level
202 # position of cursor and screen, etc.) of one browser level
203 # An ``ibrowse`` object keeps multiple ``_BrowserLevel`` objects in
203 # An ``ibrowse`` object keeps multiple ``_BrowserLevel`` objects in
204 # a stack.
204 # a stack.
205 def __init__(self, browser, input, iterator, mainsizey, *attrs):
205 def __init__(self, browser, input, iterator, mainsizey, *attrs):
206 self.browser = browser
206 self.browser = browser
207 self.input = input
207 self.input = input
208 self.header = [x for x in ipipe.xrepr(input, "header") if not isinstance(x[0], int)]
208 self.header = [x for x in ipipe.xrepr(input, "header") if not isinstance(x[0], int)]
209 # iterator for the input
209 # iterator for the input
210 self.iterator = iterator
210 self.iterator = iterator
211
211
212 # is the iterator exhausted?
212 # is the iterator exhausted?
213 self.exhausted = False
213 self.exhausted = False
214
214
215 # attributes to be display (autodetected if empty)
215 # attributes to be display (autodetected if empty)
216 self.attrs = attrs
216 self.attrs = attrs
217
217
218 # fetched items (+ marked flag)
218 # fetched items (+ marked flag)
219 self.items = ipipe.deque()
219 self.items = ipipe.deque()
220
220
221 # Number of marked objects
221 # Number of marked objects
222 self.marked = 0
222 self.marked = 0
223
223
224 # Vertical cursor position
224 # Vertical cursor position
225 self.cury = 0
225 self.cury = 0
226
226
227 # Horizontal cursor position
227 # Horizontal cursor position
228 self.curx = 0
228 self.curx = 0
229
229
230 # Index of first data column
230 # Index of first data column
231 self.datastartx = 0
231 self.datastartx = 0
232
232
233 # Index of first data line
233 # Index of first data line
234 self.datastarty = 0
234 self.datastarty = 0
235
235
236 # height of the data display area
236 # height of the data display area
237 self.mainsizey = mainsizey
237 self.mainsizey = mainsizey
238
238
239 # width of the data display area (changes when scrolling)
239 # width of the data display area (changes when scrolling)
240 self.mainsizex = 0
240 self.mainsizex = 0
241
241
242 # Size of row number (changes when scrolling)
242 # Size of row number (changes when scrolling)
243 self.numbersizex = 0
243 self.numbersizex = 0
244
244
245 # Attribute names to display (in this order)
245 # Attribute names to display (in this order)
246 self.displayattrs = []
246 self.displayattrs = []
247
247
248 # index and name of attribute under the cursor
248 # index and name of attribute under the cursor
249 self.displayattr = (None, ipipe.noitem)
249 self.displayattr = (None, ipipe.noitem)
250
250
251 # Maps attribute names to column widths
251 # Maps attribute names to column widths
252 self.colwidths = {}
252 self.colwidths = {}
253
253
254 # Set of hidden attributes
254 # Set of hidden attributes
255 self.hiddenattrs = set()
255 self.hiddenattrs = set()
256
256
257 # This takes care of all the caches etc.
257 # This takes care of all the caches etc.
258 self.moveto(0, 0, refresh=True)
258 self.moveto(0, 0, refresh=True)
259
259
260 def fetch(self, count):
260 def fetch(self, count):
261 # Try to fill ``self.items`` with at least ``count`` objects.
261 # Try to fill ``self.items`` with at least ``count`` objects.
262 have = len(self.items)
262 have = len(self.items)
263 while not self.exhausted and have < count:
263 while not self.exhausted and have < count:
264 try:
264 try:
265 item = self.iterator.next()
265 item = self.iterator.next()
266 except StopIteration:
266 except StopIteration:
267 self.exhausted = True
267 self.exhausted = True
268 break
268 break
269 else:
269 else:
270 have += 1
270 have += 1
271 self.items.append(_BrowserCachedItem(item))
271 self.items.append(_BrowserCachedItem(item))
272
272
273 def calcdisplayattrs(self):
273 def calcdisplayattrs(self):
274 # Calculate which attributes are available from the objects that are
274 # Calculate which attributes are available from the objects that are
275 # currently visible on screen (and store it in ``self.displayattrs``)
275 # currently visible on screen (and store it in ``self.displayattrs``)
276
276
277 attrnames = set()
277 attrnames = set()
278 self.displayattrs = []
278 self.displayattrs = []
279 if self.attrs:
279 if self.attrs:
280 # If the browser object specifies a fixed list of attributes,
280 # If the browser object specifies a fixed list of attributes,
281 # simply use it (removing hidden attributes).
281 # simply use it (removing hidden attributes).
282 for attrname in self.attrs:
282 for attrname in self.attrs:
283 if attrname not in attrnames and attrname not in self.hiddenattrs:
283 if attrname not in attrnames and attrname not in self.hiddenattrs:
284 self.displayattrs.append(attrname)
284 self.displayattrs.append(attrname)
285 attrnames.add(attrname)
285 attrnames.add(attrname)
286 else:
286 else:
287 endy = min(self.datastarty+self.mainsizey, len(self.items))
287 endy = min(self.datastarty+self.mainsizey, len(self.items))
288 for i in xrange(self.datastarty, endy):
288 for i in xrange(self.datastarty, endy):
289 for attrname in ipipe.xattrs(self.items[i].item, "default"):
289 for attrname in ipipe.xattrs(self.items[i].item, "default"):
290 if attrname not in attrnames and attrname not in self.hiddenattrs:
290 if attrname not in attrnames and attrname not in self.hiddenattrs:
291 self.displayattrs.append(attrname)
291 self.displayattrs.append(attrname)
292 attrnames.add(attrname)
292 attrnames.add(attrname)
293
293
294 def getrow(self, i):
294 def getrow(self, i):
295 # Return a dictinary with the attributes for the object
295 # Return a dictinary with the attributes for the object
296 # ``self.items[i]``. Attribute names are taken from
296 # ``self.items[i]``. Attribute names are taken from
297 # ``self.displayattrs`` so ``calcdisplayattrs()`` must have been
297 # ``self.displayattrs`` so ``calcdisplayattrs()`` must have been
298 # called before.
298 # called before.
299 row = {}
299 row = {}
300 item = self.items[i].item
300 item = self.items[i].item
301 for attrname in self.displayattrs:
301 for attrname in self.displayattrs:
302 try:
302 try:
303 value = ipipe._getattr(item, attrname, ipipe.noitem)
303 value = ipipe._getattr(item, attrname, ipipe.noitem)
304 except (KeyboardInterrupt, SystemExit):
304 except (KeyboardInterrupt, SystemExit):
305 raise
305 raise
306 except Exception, exc:
306 except Exception, exc:
307 value = exc
307 value = exc
308 # only store attribute if it exists (or we got an exception)
308 # only store attribute if it exists (or we got an exception)
309 if value is not ipipe.noitem:
309 if value is not ipipe.noitem:
310 # remember alignment, length and colored text
310 # remember alignment, length and colored text
311 row[attrname] = ipipe.xformat(value, "cell", self.browser.maxattrlength)
311 row[attrname] = ipipe.xformat(value, "cell", self.browser.maxattrlength)
312 return row
312 return row
313
313
314 def calcwidths(self):
314 def calcwidths(self):
315 # Recalculate the displayed fields and their widths.
315 # Recalculate the displayed fields and their widths.
316 # ``calcdisplayattrs()'' must have been called and the cache
316 # ``calcdisplayattrs()'' must have been called and the cache
317 # for attributes of the objects on screen (``self.displayrows``)
317 # for attributes of the objects on screen (``self.displayrows``)
318 # must have been filled. This returns a dictionary mapping
318 # must have been filled. This returns a dictionary mapping
319 # column names to widths.
319 # column names to widths.
320 self.colwidths = {}
320 self.colwidths = {}
321 for row in self.displayrows:
321 for row in self.displayrows:
322 for attrname in self.displayattrs:
322 for attrname in self.displayattrs:
323 try:
323 try:
324 length = row[attrname][1]
324 length = row[attrname][1]
325 except KeyError:
325 except KeyError:
326 length = 0
326 length = 0
327 # always add attribute to colwidths, even if it doesn't exist
327 # always add attribute to colwidths, even if it doesn't exist
328 if attrname not in self.colwidths:
328 if attrname not in self.colwidths:
329 self.colwidths[attrname] = len(ipipe._attrname(attrname))
329 self.colwidths[attrname] = len(ipipe._attrname(attrname))
330 newwidth = max(self.colwidths[attrname], length)
330 newwidth = max(self.colwidths[attrname], length)
331 self.colwidths[attrname] = newwidth
331 self.colwidths[attrname] = newwidth
332
332
333 # How many characters do we need to paint the largest item number?
333 # How many characters do we need to paint the largest item number?
334 self.numbersizex = len(str(self.datastarty+self.mainsizey-1))
334 self.numbersizex = len(str(self.datastarty+self.mainsizey-1))
335 # How must space have we got to display data?
335 # How must space have we got to display data?
336 self.mainsizex = self.browser.scrsizex-self.numbersizex-3
336 self.mainsizex = self.browser.scrsizex-self.numbersizex-3
337 # width of all columns
337 # width of all columns
338 self.datasizex = sum(self.colwidths.itervalues()) + len(self.colwidths)
338 self.datasizex = sum(self.colwidths.itervalues()) + len(self.colwidths)
339
339
340 def calcdisplayattr(self):
340 def calcdisplayattr(self):
341 # Find out which attribute the cursor is on and store this
341 # Find out which attribute the cursor is on and store this
342 # information in ``self.displayattr``.
342 # information in ``self.displayattr``.
343 pos = 0
343 pos = 0
344 for (i, attrname) in enumerate(self.displayattrs):
344 for (i, attrname) in enumerate(self.displayattrs):
345 if pos+self.colwidths[attrname] >= self.curx:
345 if pos+self.colwidths[attrname] >= self.curx:
346 self.displayattr = (i, attrname)
346 self.displayattr = (i, attrname)
347 break
347 break
348 pos += self.colwidths[attrname]+1
348 pos += self.colwidths[attrname]+1
349 else:
349 else:
350 self.displayattr = (None, ipipe.noitem)
350 self.displayattr = (None, ipipe.noitem)
351
351
352 def moveto(self, x, y, refresh=False):
352 def moveto(self, x, y, refresh=False):
353 # Move the cursor to the position ``(x,y)`` (in data coordinates,
353 # Move the cursor to the position ``(x,y)`` (in data coordinates,
354 # not in screen coordinates). If ``refresh`` is true, all cached
354 # not in screen coordinates). If ``refresh`` is true, all cached
355 # values will be recalculated (e.g. because the list has been
355 # values will be recalculated (e.g. because the list has been
356 # resorted, so screen positions etc. are no longer valid).
356 # resorted, so screen positions etc. are no longer valid).
357 olddatastarty = self.datastarty
357 olddatastarty = self.datastarty
358 oldx = self.curx
358 oldx = self.curx
359 oldy = self.cury
359 oldy = self.cury
360 x = int(x+0.5)
360 x = int(x+0.5)
361 y = int(y+0.5)
361 y = int(y+0.5)
362 newx = x # remember where we wanted to move
362 newx = x # remember where we wanted to move
363 newy = y # remember where we wanted to move
363 newy = y # remember where we wanted to move
364
364
365 scrollbordery = min(self.browser.scrollbordery, self.mainsizey//2)
365 scrollbordery = min(self.browser.scrollbordery, self.mainsizey//2)
366 scrollborderx = min(self.browser.scrollborderx, self.mainsizex//2)
366 scrollborderx = min(self.browser.scrollborderx, self.mainsizex//2)
367
367
368 # Make sure that the cursor didn't leave the main area vertically
368 # Make sure that the cursor didn't leave the main area vertically
369 if y < 0:
369 if y < 0:
370 y = 0
370 y = 0
371 # try to get enough items to fill the screen
371 # try to get enough items to fill the screen
372 self.fetch(max(y+scrollbordery+1, self.mainsizey))
372 self.fetch(max(y+scrollbordery+1, self.mainsizey))
373 if y >= len(self.items):
373 if y >= len(self.items):
374 y = max(0, len(self.items)-1)
374 y = max(0, len(self.items)-1)
375
375
376 # Make sure that the cursor stays on screen vertically
376 # Make sure that the cursor stays on screen vertically
377 if y < self.datastarty+scrollbordery:
377 if y < self.datastarty+scrollbordery:
378 self.datastarty = max(0, y-scrollbordery)
378 self.datastarty = max(0, y-scrollbordery)
379 elif y >= self.datastarty+self.mainsizey-scrollbordery:
379 elif y >= self.datastarty+self.mainsizey-scrollbordery:
380 self.datastarty = max(0, min(y-self.mainsizey+scrollbordery+1,
380 self.datastarty = max(0, min(y-self.mainsizey+scrollbordery+1,
381 len(self.items)-self.mainsizey))
381 len(self.items)-self.mainsizey))
382
382
383 if refresh: # Do we need to refresh the complete display?
383 if refresh: # Do we need to refresh the complete display?
384 self.calcdisplayattrs()
384 self.calcdisplayattrs()
385 endy = min(self.datastarty+self.mainsizey, len(self.items))
385 endy = min(self.datastarty+self.mainsizey, len(self.items))
386 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
386 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
387 self.calcwidths()
387 self.calcwidths()
388 # Did we scroll vertically => update displayrows
388 # Did we scroll vertically => update displayrows
389 # and various other attributes
389 # and various other attributes
390 elif self.datastarty != olddatastarty:
390 elif self.datastarty != olddatastarty:
391 # Recalculate which attributes we have to display
391 # Recalculate which attributes we have to display
392 olddisplayattrs = self.displayattrs
392 olddisplayattrs = self.displayattrs
393 self.calcdisplayattrs()
393 self.calcdisplayattrs()
394 # If there are new attributes, recreate the cache
394 # If there are new attributes, recreate the cache
395 if self.displayattrs != olddisplayattrs:
395 if self.displayattrs != olddisplayattrs:
396 endy = min(self.datastarty+self.mainsizey, len(self.items))
396 endy = min(self.datastarty+self.mainsizey, len(self.items))
397 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
397 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
398 elif self.datastarty<olddatastarty: # we did scroll up
398 elif self.datastarty<olddatastarty: # we did scroll up
399 # drop rows from the end
399 # drop rows from the end
400 del self.displayrows[self.datastarty-olddatastarty:]
400 del self.displayrows[self.datastarty-olddatastarty:]
401 # fetch new items
401 # fetch new items
402 for i in xrange(olddatastarty-1,
402 for i in xrange(olddatastarty-1,
403 self.datastarty-1, -1):
403 self.datastarty-1, -1):
404 try:
404 try:
405 row = self.getrow(i)
405 row = self.getrow(i)
406 except IndexError:
406 except IndexError:
407 # we didn't have enough objects to fill the screen
407 # we didn't have enough objects to fill the screen
408 break
408 break
409 self.displayrows.insert(0, row)
409 self.displayrows.insert(0, row)
410 else: # we did scroll down
410 else: # we did scroll down
411 # drop rows from the start
411 # drop rows from the start
412 del self.displayrows[:self.datastarty-olddatastarty]
412 del self.displayrows[:self.datastarty-olddatastarty]
413 # fetch new items
413 # fetch new items
414 for i in xrange(olddatastarty+self.mainsizey,
414 for i in xrange(olddatastarty+self.mainsizey,
415 self.datastarty+self.mainsizey):
415 self.datastarty+self.mainsizey):
416 try:
416 try:
417 row = self.getrow(i)
417 row = self.getrow(i)
418 except IndexError:
418 except IndexError:
419 # we didn't have enough objects to fill the screen
419 # we didn't have enough objects to fill the screen
420 break
420 break
421 self.displayrows.append(row)
421 self.displayrows.append(row)
422 self.calcwidths()
422 self.calcwidths()
423
423
424 # Make sure that the cursor didn't leave the data area horizontally
424 # Make sure that the cursor didn't leave the data area horizontally
425 if x < 0:
425 if x < 0:
426 x = 0
426 x = 0
427 elif x >= self.datasizex:
427 elif x >= self.datasizex:
428 x = max(0, self.datasizex-1)
428 x = max(0, self.datasizex-1)
429
429
430 # Make sure that the cursor stays on screen horizontally
430 # Make sure that the cursor stays on screen horizontally
431 if x < self.datastartx+scrollborderx:
431 if x < self.datastartx+scrollborderx:
432 self.datastartx = max(0, x-scrollborderx)
432 self.datastartx = max(0, x-scrollborderx)
433 elif x >= self.datastartx+self.mainsizex-scrollborderx:
433 elif x >= self.datastartx+self.mainsizex-scrollborderx:
434 self.datastartx = max(0, min(x-self.mainsizex+scrollborderx+1,
434 self.datastartx = max(0, min(x-self.mainsizex+scrollborderx+1,
435 self.datasizex-self.mainsizex))
435 self.datasizex-self.mainsizex))
436
436
437 if x == oldx and y == oldy and (x != newx or y != newy): # couldn't move
437 if x == oldx and y == oldy and (x != newx or y != newy): # couldn't move
438 self.browser.beep()
438 self.browser.beep()
439 else:
439 else:
440 self.curx = x
440 self.curx = x
441 self.cury = y
441 self.cury = y
442 self.calcdisplayattr()
442 self.calcdisplayattr()
443
443
444 def sort(self, key, reverse=False):
444 def sort(self, key, reverse=False):
445 """
445 """
446 Sort the currently list of items using the key function ``key``. If
446 Sort the currently list of items using the key function ``key``. If
447 ``reverse`` is true the sort order is reversed.
447 ``reverse`` is true the sort order is reversed.
448 """
448 """
449 curitem = self.items[self.cury] # Remember where the cursor is now
449 curitem = self.items[self.cury] # Remember where the cursor is now
450
450
451 # Sort items
451 # Sort items
452 def realkey(item):
452 def realkey(item):
453 return key(item.item)
453 return key(item.item)
454 self.items = ipipe.deque(sorted(self.items, key=realkey, reverse=reverse))
454 self.items = ipipe.deque(sorted(self.items, key=realkey, reverse=reverse))
455
455
456 # Find out where the object under the cursor went
456 # Find out where the object under the cursor went
457 cury = self.cury
457 cury = self.cury
458 for (i, item) in enumerate(self.items):
458 for (i, item) in enumerate(self.items):
459 if item is curitem:
459 if item is curitem:
460 cury = i
460 cury = i
461 break
461 break
462
462
463 self.moveto(self.curx, cury, refresh=True)
463 self.moveto(self.curx, cury, refresh=True)
464
464
465
465
466 class _CommandInput(object):
466 class _CommandInput(object):
467 keymap = {
467 keymap = {
468 curses.KEY_LEFT: "left",
468 curses.KEY_LEFT: "left",
469 curses.KEY_RIGHT: "right",
469 curses.KEY_RIGHT: "right",
470 curses.KEY_HOME: "home",
470 curses.KEY_HOME: "home",
471 1: "home",
471 curses.KEY_END: "end",
472 curses.KEY_END: "end",
473 5: "end",
472 # FIXME: What's happening here?
474 # FIXME: What's happening here?
473 8: "backspace",
475 8: "backspace",
474 127: "backspace",
476 127: "backspace",
475 curses.KEY_BACKSPACE: "backspace",
477 curses.KEY_BACKSPACE: "backspace",
476 curses.KEY_DC: "delete",
478 curses.KEY_DC: "delete",
477 ord("x"): "delete",
479 ord("x"): "delete",
478 ord("\n"): "execute",
480 ord("\n"): "execute",
479 ord("\r"): "execute",
481 ord("\r"): "execute",
480 curses.KEY_UP: "up",
482 curses.KEY_UP: "up",
481 curses.KEY_DOWN: "down",
483 curses.KEY_DOWN: "down",
482 # CTRL-X
484 # CTRL-X
483 0x18: "exit",
485 0x18: "exit",
484 }
486 }
485
487
486 def __init__(self, prompt):
488 def __init__(self, prompt):
487 self.prompt = prompt
489 self.prompt = prompt
488 self.history = []
490 self.history = []
489 self.maxhistory = 100
491 self.maxhistory = 100
490 self.input = ""
492 self.input = ""
491 self.curx = 0
493 self.curx = 0
492 self.cury = -1 # blank line
494 self.cury = -1 # blank line
493
495
494 def start(self):
496 def start(self):
495 self.input = ""
497 self.input = ""
496 self.curx = 0
498 self.curx = 0
497 self.cury = -1 # blank line
499 self.cury = -1 # blank line
498
500
499 def handlekey(self, browser, key):
501 def handlekey(self, browser, key):
500 cmdname = self.keymap.get(key, None)
502 cmdname = self.keymap.get(key, None)
501 if cmdname is not None:
503 if cmdname is not None:
502 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
504 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
503 if cmdfunc is not None:
505 if cmdfunc is not None:
504 return cmdfunc(browser)
506 return cmdfunc(browser)
505 curses.beep()
507 curses.beep()
506 elif key != -1:
508 elif key != -1:
507 try:
509 try:
508 char = chr(key)
510 char = chr(key)
509 except ValueError:
511 except ValueError:
510 curses.beep()
512 curses.beep()
511 else:
513 else:
512 return self.handlechar(browser, char)
514 return self.handlechar(browser, char)
513
515
514 def handlechar(self, browser, char):
516 def handlechar(self, browser, char):
515 self.input = self.input[:self.curx] + char + self.input[self.curx:]
517 self.input = self.input[:self.curx] + char + self.input[self.curx:]
516 self.curx += 1
518 self.curx += 1
517 return True
519 return True
518
520
519 def dohistory(self):
521 def dohistory(self):
520 self.history.insert(0, self.input)
522 self.history.insert(0, self.input)
521 del self.history[:-self.maxhistory]
523 del self.history[:-self.maxhistory]
522
524
523 def cmd_backspace(self, browser):
525 def cmd_backspace(self, browser):
524 if self.curx:
526 if self.curx:
525 self.input = self.input[:self.curx-1] + self.input[self.curx:]
527 self.input = self.input[:self.curx-1] + self.input[self.curx:]
526 self.curx -= 1
528 self.curx -= 1
527 return True
529 return True
528 else:
530 else:
529 curses.beep()
531 curses.beep()
530
532
531 def cmd_delete(self, browser):
533 def cmd_delete(self, browser):
532 if self.curx<len(self.input):
534 if self.curx<len(self.input):
533 self.input = self.input[:self.curx] + self.input[self.curx+1:]
535 self.input = self.input[:self.curx] + self.input[self.curx+1:]
534 return True
536 return True
535 else:
537 else:
536 curses.beep()
538 curses.beep()
537
539
538 def cmd_left(self, browser):
540 def cmd_left(self, browser):
539 if self.curx:
541 if self.curx:
540 self.curx -= 1
542 self.curx -= 1
541 return True
543 return True
542 else:
544 else:
543 curses.beep()
545 curses.beep()
544
546
545 def cmd_right(self, browser):
547 def cmd_right(self, browser):
546 if self.curx < len(self.input):
548 if self.curx < len(self.input):
547 self.curx += 1
549 self.curx += 1
548 return True
550 return True
549 else:
551 else:
550 curses.beep()
552 curses.beep()
551
553
552 def cmd_home(self, browser):
554 def cmd_home(self, browser):
553 if self.curx:
555 if self.curx:
554 self.curx = 0
556 self.curx = 0
555 return True
557 return True
556 else:
558 else:
557 curses.beep()
559 curses.beep()
558
560
559 def cmd_end(self, browser):
561 def cmd_end(self, browser):
560 if self.curx < len(self.input):
562 if self.curx < len(self.input):
561 self.curx = len(self.input)
563 self.curx = len(self.input)
562 return True
564 return True
563 else:
565 else:
564 curses.beep()
566 curses.beep()
565
567
566 def cmd_up(self, browser):
568 def cmd_up(self, browser):
567 if self.cury < len(self.history)-1:
569 if self.cury < len(self.history)-1:
568 self.cury += 1
570 self.cury += 1
569 self.input = self.history[self.cury]
571 self.input = self.history[self.cury]
570 self.curx = len(self.input)
572 self.curx = len(self.input)
571 return True
573 return True
572 else:
574 else:
573 curses.beep()
575 curses.beep()
574
576
575 def cmd_down(self, browser):
577 def cmd_down(self, browser):
576 if self.cury >= 0:
578 if self.cury >= 0:
577 self.cury -= 1
579 self.cury -= 1
578 if self.cury>=0:
580 if self.cury>=0:
579 self.input = self.history[self.cury]
581 self.input = self.history[self.cury]
580 else:
582 else:
581 self.input = ""
583 self.input = ""
582 self.curx = len(self.input)
584 self.curx = len(self.input)
583 return True
585 return True
584 else:
586 else:
585 curses.beep()
587 curses.beep()
586
588
587 def cmd_exit(self, browser):
589 def cmd_exit(self, browser):
588 browser.mode = "default"
590 browser.mode = "default"
589 return True
591 return True
590
592
591 def cmd_execute(self, browser):
593 def cmd_execute(self, browser):
592 raise NotImplementedError
594 raise NotImplementedError
593
595
594
596
595 class _CommandGoto(_CommandInput):
597 class _CommandGoto(_CommandInput):
596 def __init__(self):
598 def __init__(self):
597 _CommandInput.__init__(self, "goto object #")
599 _CommandInput.__init__(self, "goto object #")
598
600
599 def handlechar(self, browser, char):
601 def handlechar(self, browser, char):
600 # Only accept digits
602 # Only accept digits
601 if not "0" <= char <= "9":
603 if not "0" <= char <= "9":
602 curses.beep()
604 curses.beep()
603 else:
605 else:
604 return _CommandInput.handlechar(self, browser, char)
606 return _CommandInput.handlechar(self, browser, char)
605
607
606 def cmd_execute(self, browser):
608 def cmd_execute(self, browser):
607 level = browser.levels[-1]
609 level = browser.levels[-1]
608 if self.input:
610 if self.input:
609 self.dohistory()
611 self.dohistory()
610 level.moveto(level.curx, int(self.input))
612 level.moveto(level.curx, int(self.input))
611 browser.mode = "default"
613 browser.mode = "default"
612 return True
614 return True
613
615
614
616
615 class _CommandFind(_CommandInput):
617 class _CommandFind(_CommandInput):
616 def __init__(self):
618 def __init__(self):
617 _CommandInput.__init__(self, "find expression")
619 _CommandInput.__init__(self, "find expression")
618
620
619 def cmd_execute(self, browser):
621 def cmd_execute(self, browser):
620 level = browser.levels[-1]
622 level = browser.levels[-1]
621 if self.input:
623 if self.input:
622 self.dohistory()
624 self.dohistory()
623 while True:
625 while True:
624 cury = level.cury
626 cury = level.cury
625 level.moveto(level.curx, cury+1)
627 level.moveto(level.curx, cury+1)
626 if cury == level.cury:
628 if cury == level.cury:
627 curses.beep()
629 curses.beep()
628 break # hit end
630 break # hit end
629 item = level.items[level.cury].item
631 item = level.items[level.cury].item
630 try:
632 try:
631 globals = ipipe.getglobals(None)
633 globals = ipipe.getglobals(None)
632 if eval(self.input, globals, ipipe.AttrNamespace(item)):
634 if eval(self.input, globals, ipipe.AttrNamespace(item)):
633 break # found something
635 break # found something
634 except (KeyboardInterrupt, SystemExit):
636 except (KeyboardInterrupt, SystemExit):
635 raise
637 raise
636 except Exception, exc:
638 except Exception, exc:
637 browser.report(exc)
639 browser.report(exc)
638 curses.beep()
640 curses.beep()
639 break # break on error
641 break # break on error
640 browser.mode = "default"
642 browser.mode = "default"
641 return True
643 return True
642
644
643
645
644 class _CommandFindBackwards(_CommandInput):
646 class _CommandFindBackwards(_CommandInput):
645 def __init__(self):
647 def __init__(self):
646 _CommandInput.__init__(self, "find backwards expression")
648 _CommandInput.__init__(self, "find backwards expression")
647
649
648 def cmd_execute(self, browser):
650 def cmd_execute(self, browser):
649 level = browser.levels[-1]
651 level = browser.levels[-1]
650 if self.input:
652 if self.input:
651 self.dohistory()
653 self.dohistory()
652 while level.cury:
654 while level.cury:
653 level.moveto(level.curx, level.cury-1)
655 level.moveto(level.curx, level.cury-1)
654 item = level.items[level.cury].item
656 item = level.items[level.cury].item
655 try:
657 try:
656 globals = ipipe.getglobals(None)
658 globals = ipipe.getglobals(None)
657 if eval(self.input, globals, ipipe.AttrNamespace(item)):
659 if eval(self.input, globals, ipipe.AttrNamespace(item)):
658 break # found something
660 break # found something
659 except (KeyboardInterrupt, SystemExit):
661 except (KeyboardInterrupt, SystemExit):
660 raise
662 raise
661 except Exception, exc:
663 except Exception, exc:
662 browser.report(exc)
664 browser.report(exc)
663 curses.beep()
665 curses.beep()
664 break # break on error
666 break # break on error
665 else:
667 else:
666 curses.beep()
668 curses.beep()
667 browser.mode = "default"
669 browser.mode = "default"
668 return True
670 return True
669
671
670
672
671 class ibrowse(ipipe.Display):
673 class ibrowse(ipipe.Display):
672 # Show this many lines from the previous screen when paging horizontally
674 # Show this many lines from the previous screen when paging horizontally
673 pageoverlapx = 1
675 pageoverlapx = 1
674
676
675 # Show this many lines from the previous screen when paging vertically
677 # Show this many lines from the previous screen when paging vertically
676 pageoverlapy = 1
678 pageoverlapy = 1
677
679
678 # Start scrolling when the cursor is less than this number of columns
680 # Start scrolling when the cursor is less than this number of columns
679 # away from the left or right screen edge
681 # away from the left or right screen edge
680 scrollborderx = 10
682 scrollborderx = 10
681
683
682 # Start scrolling when the cursor is less than this number of lines
684 # Start scrolling when the cursor is less than this number of lines
683 # away from the top or bottom screen edge
685 # away from the top or bottom screen edge
684 scrollbordery = 5
686 scrollbordery = 5
685
687
686 # Accelerate by this factor when scrolling horizontally
688 # Accelerate by this factor when scrolling horizontally
687 acceleratex = 1.05
689 acceleratex = 1.05
688
690
689 # Accelerate by this factor when scrolling vertically
691 # Accelerate by this factor when scrolling vertically
690 acceleratey = 1.05
692 acceleratey = 1.05
691
693
692 # The maximum horizontal scroll speed
694 # The maximum horizontal scroll speed
693 # (as a factor of the screen width (i.e. 0.5 == half a screen width)
695 # (as a factor of the screen width (i.e. 0.5 == half a screen width)
694 maxspeedx = 0.5
696 maxspeedx = 0.5
695
697
696 # The maximum vertical scroll speed
698 # The maximum vertical scroll speed
697 # (as a factor of the screen height (i.e. 0.5 == half a screen height)
699 # (as a factor of the screen height (i.e. 0.5 == half a screen height)
698 maxspeedy = 0.5
700 maxspeedy = 0.5
699
701
700 # The maximum number of header lines for browser level
702 # The maximum number of header lines for browser level
701 # if the nesting is deeper, only the innermost levels are displayed
703 # if the nesting is deeper, only the innermost levels are displayed
702 maxheaders = 5
704 maxheaders = 5
703
705
704 # The approximate maximum length of a column entry
706 # The approximate maximum length of a column entry
705 maxattrlength = 200
707 maxattrlength = 200
706
708
707 # Styles for various parts of the GUI
709 # Styles for various parts of the GUI
708 style_objheadertext = astyle.Style.fromstr("white:black:bold|reverse")
710 style_objheadertext = astyle.Style.fromstr("white:black:bold|reverse")
709 style_objheadernumber = astyle.Style.fromstr("white:blue:bold|reverse")
711 style_objheadernumber = astyle.Style.fromstr("white:blue:bold|reverse")
710 style_objheaderobject = astyle.Style.fromstr("white:black:reverse")
712 style_objheaderobject = astyle.Style.fromstr("white:black:reverse")
711 style_colheader = astyle.Style.fromstr("blue:white:reverse")
713 style_colheader = astyle.Style.fromstr("blue:white:reverse")
712 style_colheaderhere = astyle.Style.fromstr("green:black:bold|reverse")
714 style_colheaderhere = astyle.Style.fromstr("green:black:bold|reverse")
713 style_colheadersep = astyle.Style.fromstr("blue:black:reverse")
715 style_colheadersep = astyle.Style.fromstr("blue:black:reverse")
714 style_number = astyle.Style.fromstr("blue:white:reverse")
716 style_number = astyle.Style.fromstr("blue:white:reverse")
715 style_numberhere = astyle.Style.fromstr("green:black:bold|reverse")
717 style_numberhere = astyle.Style.fromstr("green:black:bold|reverse")
716 style_sep = astyle.Style.fromstr("blue:black")
718 style_sep = astyle.Style.fromstr("blue:black")
717 style_data = astyle.Style.fromstr("white:black")
719 style_data = astyle.Style.fromstr("white:black")
718 style_datapad = astyle.Style.fromstr("blue:black:bold")
720 style_datapad = astyle.Style.fromstr("blue:black:bold")
719 style_footer = astyle.Style.fromstr("black:white")
721 style_footer = astyle.Style.fromstr("black:white")
720 style_report = astyle.Style.fromstr("white:black")
722 style_report = astyle.Style.fromstr("white:black")
721
723
722 # Column separator in header
724 # Column separator in header
723 headersepchar = "|"
725 headersepchar = "|"
724
726
725 # Character for padding data cell entries
727 # Character for padding data cell entries
726 datapadchar = "."
728 datapadchar = "."
727
729
728 # Column separator in data area
730 # Column separator in data area
729 datasepchar = "|"
731 datasepchar = "|"
730
732
731 # Character to use for "empty" cell (i.e. for non-existing attributes)
733 # Character to use for "empty" cell (i.e. for non-existing attributes)
732 nodatachar = "-"
734 nodatachar = "-"
733
735
734 # Prompts for modes that require keyboard input
736 # Prompts for modes that require keyboard input
735 prompts = {
737 prompts = {
736 "goto": _CommandGoto(),
738 "goto": _CommandGoto(),
737 "find": _CommandFind(),
739 "find": _CommandFind(),
738 "findbackwards": _CommandFindBackwards()
740 "findbackwards": _CommandFindBackwards()
739 }
741 }
740
742
741 # Maps curses key codes to "function" names
743 # Maps curses key codes to "function" names
742 keymap = {
744 keymap = {
743 ord("q"): "quit",
745 ord("q"): "quit",
744 curses.KEY_UP: "up",
746 curses.KEY_UP: "up",
745 curses.KEY_DOWN: "down",
747 curses.KEY_DOWN: "down",
746 curses.KEY_PPAGE: "pageup",
748 curses.KEY_PPAGE: "pageup",
747 curses.KEY_NPAGE: "pagedown",
749 curses.KEY_NPAGE: "pagedown",
748 curses.KEY_LEFT: "left",
750 curses.KEY_LEFT: "left",
749 curses.KEY_RIGHT: "right",
751 curses.KEY_RIGHT: "right",
750 curses.KEY_HOME: "home",
752 curses.KEY_HOME: "home",
753 1: "home",
751 curses.KEY_END: "end",
754 curses.KEY_END: "end",
755 5: "end",
752 ord("<"): "prevattr",
756 ord("<"): "prevattr",
753 0x1b: "prevattr", # SHIFT-TAB
757 0x1b: "prevattr", # SHIFT-TAB
754 ord(">"): "nextattr",
758 ord(">"): "nextattr",
755 ord("\t"):"nextattr", # TAB
759 ord("\t"):"nextattr", # TAB
756 ord("p"): "pick",
760 ord("p"): "pick",
757 ord("P"): "pickattr",
761 ord("P"): "pickattr",
758 ord("C"): "pickallattrs",
762 ord("C"): "pickallattrs",
759 ord("m"): "pickmarked",
763 ord("m"): "pickmarked",
760 ord("M"): "pickmarkedattr",
764 ord("M"): "pickmarkedattr",
761 ord("\n"): "enterdefault",
765 ord("\n"): "enterdefault",
762 ord("\r"): "enterdefault",
766 ord("\r"): "enterdefault",
763 # FIXME: What's happening here?
767 # FIXME: What's happening here?
764 8: "leave",
768 8: "leave",
765 127: "leave",
769 127: "leave",
766 curses.KEY_BACKSPACE: "leave",
770 curses.KEY_BACKSPACE: "leave",
767 ord("x"): "leave",
771 ord("x"): "leave",
768 ord("h"): "hideattr",
772 ord("h"): "hideattr",
769 ord("H"): "unhideattrs",
773 ord("H"): "unhideattrs",
770 ord("?"): "help",
774 ord("?"): "help",
771 ord("e"): "enter",
775 ord("e"): "enter",
772 ord("E"): "enterattr",
776 ord("E"): "enterattr",
773 ord("d"): "detail",
777 ord("d"): "detail",
774 ord("D"): "detailattr",
778 ord("D"): "detailattr",
775 ord(" "): "tooglemark",
779 ord(" "): "tooglemark",
776 ord("r"): "markrange",
780 ord("r"): "markrange",
777 ord("v"): "sortattrasc",
781 ord("v"): "sortattrasc",
778 ord("V"): "sortattrdesc",
782 ord("V"): "sortattrdesc",
779 ord("g"): "goto",
783 ord("g"): "goto",
780 ord("f"): "find",
784 ord("f"): "find",
781 ord("b"): "findbackwards",
785 ord("b"): "findbackwards",
782 }
786 }
783
787
784 def __init__(self, *attrs):
788 def __init__(self, *attrs):
785 """
789 """
786 Create a new browser. If ``attrs`` is not empty, it is the list
790 Create a new browser. If ``attrs`` is not empty, it is the list
787 of attributes that will be displayed in the browser, otherwise
791 of attributes that will be displayed in the browser, otherwise
788 these will be determined by the objects on screen.
792 these will be determined by the objects on screen.
789 """
793 """
790 self.attrs = attrs
794 self.attrs = attrs
791
795
792 # Stack of browser levels
796 # Stack of browser levels
793 self.levels = []
797 self.levels = []
794 # how many colums to scroll (Changes when accelerating)
798 # how many colums to scroll (Changes when accelerating)
795 self.stepx = 1.
799 self.stepx = 1.
796
800
797 # how many rows to scroll (Changes when accelerating)
801 # how many rows to scroll (Changes when accelerating)
798 self.stepy = 1.
802 self.stepy = 1.
799
803
800 # Beep on the edges of the data area? (Will be set to ``False``
804 # Beep on the edges of the data area? (Will be set to ``False``
801 # once the cursor hits the edge of the screen, so we don't get
805 # once the cursor hits the edge of the screen, so we don't get
802 # multiple beeps).
806 # multiple beeps).
803 self._dobeep = True
807 self._dobeep = True
804
808
805 # Cache for registered ``curses`` colors and styles.
809 # Cache for registered ``curses`` colors and styles.
806 self._styles = {}
810 self._styles = {}
807 self._colors = {}
811 self._colors = {}
808 self._maxcolor = 1
812 self._maxcolor = 1
809
813
810 # How many header lines do we want to paint (the numbers of levels
814 # How many header lines do we want to paint (the numbers of levels
811 # we have, but with an upper bound)
815 # we have, but with an upper bound)
812 self._headerlines = 1
816 self._headerlines = 1
813
817
814 # Index of first header line
818 # Index of first header line
815 self._firstheaderline = 0
819 self._firstheaderline = 0
816
820
817 # curses window
821 # curses window
818 self.scr = None
822 self.scr = None
819 # report in the footer line (error, executed command etc.)
823 # report in the footer line (error, executed command etc.)
820 self._report = None
824 self._report = None
821
825
822 # value to be returned to the caller (set by commands)
826 # value to be returned to the caller (set by commands)
823 self.returnvalue = None
827 self.returnvalue = None
824
828
825 # The mode the browser is in
829 # The mode the browser is in
826 # e.g. normal browsing or entering an argument for a command
830 # e.g. normal browsing or entering an argument for a command
827 self.mode = "default"
831 self.mode = "default"
828
832
829 def nextstepx(self, step):
833 def nextstepx(self, step):
830 """
834 """
831 Accelerate horizontally.
835 Accelerate horizontally.
832 """
836 """
833 return max(1., min(step*self.acceleratex,
837 return max(1., min(step*self.acceleratex,
834 self.maxspeedx*self.levels[-1].mainsizex))
838 self.maxspeedx*self.levels[-1].mainsizex))
835
839
836 def nextstepy(self, step):
840 def nextstepy(self, step):
837 """
841 """
838 Accelerate vertically.
842 Accelerate vertically.
839 """
843 """
840 return max(1., min(step*self.acceleratey,
844 return max(1., min(step*self.acceleratey,
841 self.maxspeedy*self.levels[-1].mainsizey))
845 self.maxspeedy*self.levels[-1].mainsizey))
842
846
843 def getstyle(self, style):
847 def getstyle(self, style):
844 """
848 """
845 Register the ``style`` with ``curses`` or get it from the cache,
849 Register the ``style`` with ``curses`` or get it from the cache,
846 if it has been registered before.
850 if it has been registered before.
847 """
851 """
848 try:
852 try:
849 return self._styles[style.fg, style.bg, style.attrs]
853 return self._styles[style.fg, style.bg, style.attrs]
850 except KeyError:
854 except KeyError:
851 attrs = 0
855 attrs = 0
852 for b in astyle.A2CURSES:
856 for b in astyle.A2CURSES:
853 if style.attrs & b:
857 if style.attrs & b:
854 attrs |= astyle.A2CURSES[b]
858 attrs |= astyle.A2CURSES[b]
855 try:
859 try:
856 color = self._colors[style.fg, style.bg]
860 color = self._colors[style.fg, style.bg]
857 except KeyError:
861 except KeyError:
858 curses.init_pair(
862 curses.init_pair(
859 self._maxcolor,
863 self._maxcolor,
860 astyle.COLOR2CURSES[style.fg],
864 astyle.COLOR2CURSES[style.fg],
861 astyle.COLOR2CURSES[style.bg]
865 astyle.COLOR2CURSES[style.bg]
862 )
866 )
863 color = curses.color_pair(self._maxcolor)
867 color = curses.color_pair(self._maxcolor)
864 self._colors[style.fg, style.bg] = color
868 self._colors[style.fg, style.bg] = color
865 self._maxcolor += 1
869 self._maxcolor += 1
866 c = color | attrs
870 c = color | attrs
867 self._styles[style.fg, style.bg, style.attrs] = c
871 self._styles[style.fg, style.bg, style.attrs] = c
868 return c
872 return c
869
873
870 def addstr(self, y, x, begx, endx, text, style):
874 def addstr(self, y, x, begx, endx, text, style):
871 """
875 """
872 A version of ``curses.addstr()`` that can handle ``x`` coordinates
876 A version of ``curses.addstr()`` that can handle ``x`` coordinates
873 that are outside the screen.
877 that are outside the screen.
874 """
878 """
875 text2 = text[max(0, begx-x):max(0, endx-x)]
879 text2 = text[max(0, begx-x):max(0, endx-x)]
876 if text2:
880 if text2:
877 self.scr.addstr(y, max(x, begx), text2, self.getstyle(style))
881 self.scr.addstr(y, max(x, begx), text2, self.getstyle(style))
878 return len(text)
882 return len(text)
879
883
880 def addchr(self, y, x, begx, endx, c, l, style):
884 def addchr(self, y, x, begx, endx, c, l, style):
881 x0 = max(x, begx)
885 x0 = max(x, begx)
882 x1 = min(x+l, endx)
886 x1 = min(x+l, endx)
883 if x1>x0:
887 if x1>x0:
884 self.scr.addstr(y, x0, c*(x1-x0), self.getstyle(style))
888 self.scr.addstr(y, x0, c*(x1-x0), self.getstyle(style))
885 return l
889 return l
886
890
887 def _calcheaderlines(self, levels):
891 def _calcheaderlines(self, levels):
888 # Calculate how many headerlines do we have to display, if we have
892 # Calculate how many headerlines do we have to display, if we have
889 # ``levels`` browser levels
893 # ``levels`` browser levels
890 if levels is None:
894 if levels is None:
891 levels = len(self.levels)
895 levels = len(self.levels)
892 self._headerlines = min(self.maxheaders, levels)
896 self._headerlines = min(self.maxheaders, levels)
893 self._firstheaderline = levels-self._headerlines
897 self._firstheaderline = levels-self._headerlines
894
898
895 def getstylehere(self, style):
899 def getstylehere(self, style):
896 """
900 """
897 Return a style for displaying the original style ``style``
901 Return a style for displaying the original style ``style``
898 in the row the cursor is on.
902 in the row the cursor is on.
899 """
903 """
900 return astyle.Style(style.fg, style.bg, style.attrs | astyle.A_BOLD)
904 return astyle.Style(style.fg, style.bg, style.attrs | astyle.A_BOLD)
901
905
902 def report(self, msg):
906 def report(self, msg):
903 """
907 """
904 Store the message ``msg`` for display below the footer line. This
908 Store the message ``msg`` for display below the footer line. This
905 will be displayed as soon as the screen is redrawn.
909 will be displayed as soon as the screen is redrawn.
906 """
910 """
907 self._report = msg
911 self._report = msg
908
912
909 def enter(self, item, mode, *attrs):
913 def enter(self, item, mode, *attrs):
910 """
914 """
911 Enter the object ``item`` in the mode ``mode``. If ``attrs`` is
915 Enter the object ``item`` in the mode ``mode``. If ``attrs`` is
912 specified, it will be used as a fixed list of attributes to display.
916 specified, it will be used as a fixed list of attributes to display.
913 """
917 """
914 try:
918 try:
915 iterator = ipipe.xiter(item, mode)
919 iterator = ipipe.xiter(item, mode)
916 except (KeyboardInterrupt, SystemExit):
920 except (KeyboardInterrupt, SystemExit):
917 raise
921 raise
918 except Exception, exc:
922 except Exception, exc:
919 curses.beep()
923 curses.beep()
920 self.report(exc)
924 self.report(exc)
921 else:
925 else:
922 self._calcheaderlines(len(self.levels)+1)
926 self._calcheaderlines(len(self.levels)+1)
923 level = _BrowserLevel(
927 level = _BrowserLevel(
924 self,
928 self,
925 item,
929 item,
926 iterator,
930 iterator,
927 self.scrsizey-1-self._headerlines-2,
931 self.scrsizey-1-self._headerlines-2,
928 *attrs
932 *attrs
929 )
933 )
930 self.levels.append(level)
934 self.levels.append(level)
931
935
932 def startkeyboardinput(self, mode):
936 def startkeyboardinput(self, mode):
933 """
937 """
934 Enter mode ``mode``, which requires keyboard input.
938 Enter mode ``mode``, which requires keyboard input.
935 """
939 """
936 self.mode = mode
940 self.mode = mode
937 self.prompts[mode].start()
941 self.prompts[mode].start()
938
942
939 def keylabel(self, keycode):
943 def keylabel(self, keycode):
940 """
944 """
941 Return a pretty name for the ``curses`` key ``keycode`` (used in the
945 Return a pretty name for the ``curses`` key ``keycode`` (used in the
942 help screen and in reports about unassigned keys).
946 help screen and in reports about unassigned keys).
943 """
947 """
944 if keycode <= 0xff:
948 if keycode <= 0xff:
945 specialsnames = {
949 specialsnames = {
946 ord("\n"): "RETURN",
950 ord("\n"): "RETURN",
947 ord(" "): "SPACE",
951 ord(" "): "SPACE",
948 ord("\t"): "TAB",
952 ord("\t"): "TAB",
949 ord("\x7f"): "DELETE",
953 ord("\x7f"): "DELETE",
950 ord("\x08"): "BACKSPACE",
954 ord("\x08"): "BACKSPACE",
951 }
955 }
952 if keycode in specialsnames:
956 if keycode in specialsnames:
953 return specialsnames[keycode]
957 return specialsnames[keycode]
958 elif 0x00 < keycode < 0x20:
959 return "CTRL-%s" % chr(keycode + 64)
954 return repr(chr(keycode))
960 return repr(chr(keycode))
955 for name in dir(curses):
961 for name in dir(curses):
956 if name.startswith("KEY_") and getattr(curses, name) == keycode:
962 if name.startswith("KEY_") and getattr(curses, name) == keycode:
957 return name
963 return name
958 return str(keycode)
964 return str(keycode)
959
965
960 def beep(self, force=False):
966 def beep(self, force=False):
961 if force or self._dobeep:
967 if force or self._dobeep:
962 curses.beep()
968 curses.beep()
963 # don't beep again (as long as the same key is pressed)
969 # don't beep again (as long as the same key is pressed)
964 self._dobeep = False
970 self._dobeep = False
965
971
966 def cmd_quit(self):
972 def cmd_quit(self):
967 self.returnvalue = None
973 self.returnvalue = None
968 return True
974 return True
969
975
970 def cmd_up(self):
976 def cmd_up(self):
971 level = self.levels[-1]
977 level = self.levels[-1]
972 self.report("up")
978 self.report("up")
973 level.moveto(level.curx, level.cury-self.stepy)
979 level.moveto(level.curx, level.cury-self.stepy)
974
980
975 def cmd_down(self):
981 def cmd_down(self):
976 level = self.levels[-1]
982 level = self.levels[-1]
977 self.report("down")
983 self.report("down")
978 level.moveto(level.curx, level.cury+self.stepy)
984 level.moveto(level.curx, level.cury+self.stepy)
979
985
980 def cmd_pageup(self):
986 def cmd_pageup(self):
981 level = self.levels[-1]
987 level = self.levels[-1]
982 self.report("page up")
988 self.report("page up")
983 level.moveto(level.curx, level.cury-level.mainsizey+self.pageoverlapy)
989 level.moveto(level.curx, level.cury-level.mainsizey+self.pageoverlapy)
984
990
985 def cmd_pagedown(self):
991 def cmd_pagedown(self):
986 level = self.levels[-1]
992 level = self.levels[-1]
987 self.report("page down")
993 self.report("page down")
988 level.moveto(level.curx, level.cury+level.mainsizey-self.pageoverlapy)
994 level.moveto(level.curx, level.cury+level.mainsizey-self.pageoverlapy)
989
995
990 def cmd_left(self):
996 def cmd_left(self):
991 level = self.levels[-1]
997 level = self.levels[-1]
992 self.report("left")
998 self.report("left")
993 level.moveto(level.curx-self.stepx, level.cury)
999 level.moveto(level.curx-self.stepx, level.cury)
994
1000
995 def cmd_right(self):
1001 def cmd_right(self):
996 level = self.levels[-1]
1002 level = self.levels[-1]
997 self.report("right")
1003 self.report("right")
998 level.moveto(level.curx+self.stepx, level.cury)
1004 level.moveto(level.curx+self.stepx, level.cury)
999
1005
1000 def cmd_home(self):
1006 def cmd_home(self):
1001 level = self.levels[-1]
1007 level = self.levels[-1]
1002 self.report("home")
1008 self.report("home")
1003 level.moveto(0, level.cury)
1009 level.moveto(0, level.cury)
1004
1010
1005 def cmd_end(self):
1011 def cmd_end(self):
1006 level = self.levels[-1]
1012 level = self.levels[-1]
1007 self.report("end")
1013 self.report("end")
1008 level.moveto(level.datasizex+level.mainsizey-self.pageoverlapx, level.cury)
1014 level.moveto(level.datasizex+level.mainsizey-self.pageoverlapx, level.cury)
1009
1015
1010 def cmd_prevattr(self):
1016 def cmd_prevattr(self):
1011 level = self.levels[-1]
1017 level = self.levels[-1]
1012 if level.displayattr[0] is None or level.displayattr[0] == 0:
1018 if level.displayattr[0] is None or level.displayattr[0] == 0:
1013 self.beep()
1019 self.beep()
1014 else:
1020 else:
1015 self.report("prevattr")
1021 self.report("prevattr")
1016 pos = 0
1022 pos = 0
1017 for (i, attrname) in enumerate(level.displayattrs):
1023 for (i, attrname) in enumerate(level.displayattrs):
1018 if i == level.displayattr[0]-1:
1024 if i == level.displayattr[0]-1:
1019 break
1025 break
1020 pos += level.colwidths[attrname] + 1
1026 pos += level.colwidths[attrname] + 1
1021 level.moveto(pos, level.cury)
1027 level.moveto(pos, level.cury)
1022
1028
1023 def cmd_nextattr(self):
1029 def cmd_nextattr(self):
1024 level = self.levels[-1]
1030 level = self.levels[-1]
1025 if level.displayattr[0] is None or level.displayattr[0] == len(level.displayattrs)-1:
1031 if level.displayattr[0] is None or level.displayattr[0] == len(level.displayattrs)-1:
1026 self.beep()
1032 self.beep()
1027 else:
1033 else:
1028 self.report("nextattr")
1034 self.report("nextattr")
1029 pos = 0
1035 pos = 0
1030 for (i, attrname) in enumerate(level.displayattrs):
1036 for (i, attrname) in enumerate(level.displayattrs):
1031 if i == level.displayattr[0]+1:
1037 if i == level.displayattr[0]+1:
1032 break
1038 break
1033 pos += level.colwidths[attrname] + 1
1039 pos += level.colwidths[attrname] + 1
1034 level.moveto(pos, level.cury)
1040 level.moveto(pos, level.cury)
1035
1041
1036 def cmd_pick(self):
1042 def cmd_pick(self):
1037 level = self.levels[-1]
1043 level = self.levels[-1]
1038 self.returnvalue = level.items[level.cury].item
1044 self.returnvalue = level.items[level.cury].item
1039 return True
1045 return True
1040
1046
1041 def cmd_pickattr(self):
1047 def cmd_pickattr(self):
1042 level = self.levels[-1]
1048 level = self.levels[-1]
1043 attrname = level.displayattr[1]
1049 attrname = level.displayattr[1]
1044 if attrname is ipipe.noitem:
1050 if attrname is ipipe.noitem:
1045 curses.beep()
1051 curses.beep()
1046 self.report(AttributeError(ipipe._attrname(attrname)))
1052 self.report(AttributeError(ipipe._attrname(attrname)))
1047 return
1053 return
1048 attr = ipipe._getattr(level.items[level.cury].item, attrname)
1054 attr = ipipe._getattr(level.items[level.cury].item, attrname)
1049 if attr is ipipe.noitem:
1055 if attr is ipipe.noitem:
1050 curses.beep()
1056 curses.beep()
1051 self.report(AttributeError(ipipe._attrname(attrname)))
1057 self.report(AttributeError(ipipe._attrname(attrname)))
1052 else:
1058 else:
1053 self.returnvalue = attr
1059 self.returnvalue = attr
1054 return True
1060 return True
1055
1061
1056 def cmd_pickallattrs(self):
1062 def cmd_pickallattrs(self):
1057 level = self.levels[-1]
1063 level = self.levels[-1]
1058 attrname = level.displayattr[1]
1064 attrname = level.displayattr[1]
1059 if attrname is ipipe.noitem:
1065 if attrname is ipipe.noitem:
1060 curses.beep()
1066 curses.beep()
1061 self.report(AttributeError(ipipe._attrname(attrname)))
1067 self.report(AttributeError(ipipe._attrname(attrname)))
1062 return
1068 return
1063 result = []
1069 result = []
1064 for cache in level.items:
1070 for cache in level.items:
1065 attr = ipipe._getattr(cache.item, attrname)
1071 attr = ipipe._getattr(cache.item, attrname)
1066 if attr is not ipipe.noitem:
1072 if attr is not ipipe.noitem:
1067 result.append(attr)
1073 result.append(attr)
1068 self.returnvalue = result
1074 self.returnvalue = result
1069 return True
1075 return True
1070
1076
1071 def cmd_pickmarked(self):
1077 def cmd_pickmarked(self):
1072 level = self.levels[-1]
1078 level = self.levels[-1]
1073 self.returnvalue = [cache.item for cache in level.items if cache.marked]
1079 self.returnvalue = [cache.item for cache in level.items if cache.marked]
1074 return True
1080 return True
1075
1081
1076 def cmd_pickmarkedattr(self):
1082 def cmd_pickmarkedattr(self):
1077 level = self.levels[-1]
1083 level = self.levels[-1]
1078 attrname = level.displayattr[1]
1084 attrname = level.displayattr[1]
1079 if attrname is ipipe.noitem:
1085 if attrname is ipipe.noitem:
1080 curses.beep()
1086 curses.beep()
1081 self.report(AttributeError(ipipe._attrname(attrname)))
1087 self.report(AttributeError(ipipe._attrname(attrname)))
1082 return
1088 return
1083 result = []
1089 result = []
1084 for cache in level.items:
1090 for cache in level.items:
1085 if cache.marked:
1091 if cache.marked:
1086 attr = ipipe._getattr(cache.item, attrname)
1092 attr = ipipe._getattr(cache.item, attrname)
1087 if attr is not ipipe.noitem:
1093 if attr is not ipipe.noitem:
1088 result.append(attr)
1094 result.append(attr)
1089 self.returnvalue = result
1095 self.returnvalue = result
1090 return True
1096 return True
1091
1097
1092 def cmd_markrange(self):
1098 def cmd_markrange(self):
1093 level = self.levels[-1]
1099 level = self.levels[-1]
1094 self.report("markrange")
1100 self.report("markrange")
1095 start = None
1101 start = None
1096 if level.items:
1102 if level.items:
1097 for i in xrange(level.cury, -1, -1):
1103 for i in xrange(level.cury, -1, -1):
1098 if level.items[i].marked:
1104 if level.items[i].marked:
1099 start = i
1105 start = i
1100 break
1106 break
1101 if start is None:
1107 if start is None:
1102 self.report(CommandError("no mark before cursor"))
1108 self.report(CommandError("no mark before cursor"))
1103 curses.beep()
1109 curses.beep()
1104 else:
1110 else:
1105 for i in xrange(start, level.cury+1):
1111 for i in xrange(start, level.cury+1):
1106 cache = level.items[i]
1112 cache = level.items[i]
1107 if not cache.marked:
1113 if not cache.marked:
1108 cache.marked = True
1114 cache.marked = True
1109 level.marked += 1
1115 level.marked += 1
1110
1116
1111 def cmd_enterdefault(self):
1117 def cmd_enterdefault(self):
1112 level = self.levels[-1]
1118 level = self.levels[-1]
1113 try:
1119 try:
1114 item = level.items[level.cury].item
1120 item = level.items[level.cury].item
1115 except IndexError:
1121 except IndexError:
1116 self.report(CommandError("No object"))
1122 self.report(CommandError("No object"))
1117 curses.beep()
1123 curses.beep()
1118 else:
1124 else:
1119 self.report("entering object (default mode)...")
1125 self.report("entering object (default mode)...")
1120 self.enter(item, "default")
1126 self.enter(item, "default")
1121
1127
1122 def cmd_leave(self):
1128 def cmd_leave(self):
1123 self.report("leave")
1129 self.report("leave")
1124 if len(self.levels) > 1:
1130 if len(self.levels) > 1:
1125 self._calcheaderlines(len(self.levels)-1)
1131 self._calcheaderlines(len(self.levels)-1)
1126 self.levels.pop(-1)
1132 self.levels.pop(-1)
1127 else:
1133 else:
1128 self.report(CommandError("This is the last level"))
1134 self.report(CommandError("This is the last level"))
1129 curses.beep()
1135 curses.beep()
1130
1136
1131 def cmd_enter(self):
1137 def cmd_enter(self):
1132 level = self.levels[-1]
1138 level = self.levels[-1]
1133 try:
1139 try:
1134 item = level.items[level.cury].item
1140 item = level.items[level.cury].item
1135 except IndexError:
1141 except IndexError:
1136 self.report(CommandError("No object"))
1142 self.report(CommandError("No object"))
1137 curses.beep()
1143 curses.beep()
1138 else:
1144 else:
1139 self.report("entering object...")
1145 self.report("entering object...")
1140 self.enter(item, None)
1146 self.enter(item, None)
1141
1147
1142 def cmd_enterattr(self):
1148 def cmd_enterattr(self):
1143 level = self.levels[-1]
1149 level = self.levels[-1]
1144 attrname = level.displayattr[1]
1150 attrname = level.displayattr[1]
1145 if attrname is ipipe.noitem:
1151 if attrname is ipipe.noitem:
1146 curses.beep()
1152 curses.beep()
1147 self.report(AttributeError(ipipe._attrname(attrname)))
1153 self.report(AttributeError(ipipe._attrname(attrname)))
1148 return
1154 return
1149 try:
1155 try:
1150 item = level.items[level.cury].item
1156 item = level.items[level.cury].item
1151 except IndexError:
1157 except IndexError:
1152 self.report(CommandError("No object"))
1158 self.report(CommandError("No object"))
1153 curses.beep()
1159 curses.beep()
1154 else:
1160 else:
1155 attr = ipipe._getattr(item, attrname)
1161 attr = ipipe._getattr(item, attrname)
1156 if attr is ipipe.noitem:
1162 if attr is ipipe.noitem:
1157 self.report(AttributeError(ipipe._attrname(attrname)))
1163 self.report(AttributeError(ipipe._attrname(attrname)))
1158 else:
1164 else:
1159 self.report("entering object attribute %s..." % ipipe._attrname(attrname))
1165 self.report("entering object attribute %s..." % ipipe._attrname(attrname))
1160 self.enter(attr, None)
1166 self.enter(attr, None)
1161
1167
1162 def cmd_detail(self):
1168 def cmd_detail(self):
1163 level = self.levels[-1]
1169 level = self.levels[-1]
1164 try:
1170 try:
1165 item = level.items[level.cury].item
1171 item = level.items[level.cury].item
1166 except IndexError:
1172 except IndexError:
1167 self.report(CommandError("No object"))
1173 self.report(CommandError("No object"))
1168 curses.beep()
1174 curses.beep()
1169 else:
1175 else:
1170 self.report("entering detail view for object...")
1176 self.report("entering detail view for object...")
1171 self.enter(item, "detail")
1177 self.enter(item, "detail")
1172
1178
1173 def cmd_detailattr(self):
1179 def cmd_detailattr(self):
1174 level = self.levels[-1]
1180 level = self.levels[-1]
1175 attrname = level.displayattr[1]
1181 attrname = level.displayattr[1]
1176 if attrname is ipipe.noitem:
1182 if attrname is ipipe.noitem:
1177 curses.beep()
1183 curses.beep()
1178 self.report(AttributeError(ipipe._attrname(attrname)))
1184 self.report(AttributeError(ipipe._attrname(attrname)))
1179 return
1185 return
1180 try:
1186 try:
1181 item = level.items[level.cury].item
1187 item = level.items[level.cury].item
1182 except IndexError:
1188 except IndexError:
1183 self.report(CommandError("No object"))
1189 self.report(CommandError("No object"))
1184 curses.beep()
1190 curses.beep()
1185 else:
1191 else:
1186 attr = ipipe._getattr(item, attrname)
1192 attr = ipipe._getattr(item, attrname)
1187 if attr is ipipe.noitem:
1193 if attr is ipipe.noitem:
1188 self.report(AttributeError(ipipe._attrname(attrname)))
1194 self.report(AttributeError(ipipe._attrname(attrname)))
1189 else:
1195 else:
1190 self.report("entering detail view for attribute...")
1196 self.report("entering detail view for attribute...")
1191 self.enter(attr, "detail")
1197 self.enter(attr, "detail")
1192
1198
1193 def cmd_tooglemark(self):
1199 def cmd_tooglemark(self):
1194 level = self.levels[-1]
1200 level = self.levels[-1]
1195 self.report("toggle mark")
1201 self.report("toggle mark")
1196 try:
1202 try:
1197 item = level.items[level.cury]
1203 item = level.items[level.cury]
1198 except IndexError: # no items?
1204 except IndexError: # no items?
1199 pass
1205 pass
1200 else:
1206 else:
1201 if item.marked:
1207 if item.marked:
1202 item.marked = False
1208 item.marked = False
1203 level.marked -= 1
1209 level.marked -= 1
1204 else:
1210 else:
1205 item.marked = True
1211 item.marked = True
1206 level.marked += 1
1212 level.marked += 1
1207
1213
1208 def cmd_sortattrasc(self):
1214 def cmd_sortattrasc(self):
1209 level = self.levels[-1]
1215 level = self.levels[-1]
1210 attrname = level.displayattr[1]
1216 attrname = level.displayattr[1]
1211 if attrname is ipipe.noitem:
1217 if attrname is ipipe.noitem:
1212 curses.beep()
1218 curses.beep()
1213 self.report(AttributeError(ipipe._attrname(attrname)))
1219 self.report(AttributeError(ipipe._attrname(attrname)))
1214 return
1220 return
1215 self.report("sort by %s (ascending)" % ipipe._attrname(attrname))
1221 self.report("sort by %s (ascending)" % ipipe._attrname(attrname))
1216 def key(item):
1222 def key(item):
1217 try:
1223 try:
1218 return ipipe._getattr(item, attrname, None)
1224 return ipipe._getattr(item, attrname, None)
1219 except (KeyboardInterrupt, SystemExit):
1225 except (KeyboardInterrupt, SystemExit):
1220 raise
1226 raise
1221 except Exception:
1227 except Exception:
1222 return None
1228 return None
1223 level.sort(key)
1229 level.sort(key)
1224
1230
1225 def cmd_sortattrdesc(self):
1231 def cmd_sortattrdesc(self):
1226 level = self.levels[-1]
1232 level = self.levels[-1]
1227 attrname = level.displayattr[1]
1233 attrname = level.displayattr[1]
1228 if attrname is ipipe.noitem:
1234 if attrname is ipipe.noitem:
1229 curses.beep()
1235 curses.beep()
1230 self.report(AttributeError(ipipe._attrname(attrname)))
1236 self.report(AttributeError(ipipe._attrname(attrname)))
1231 return
1237 return
1232 self.report("sort by %s (descending)" % ipipe._attrname(attrname))
1238 self.report("sort by %s (descending)" % ipipe._attrname(attrname))
1233 def key(item):
1239 def key(item):
1234 try:
1240 try:
1235 return ipipe._getattr(item, attrname, None)
1241 return ipipe._getattr(item, attrname, None)
1236 except (KeyboardInterrupt, SystemExit):
1242 except (KeyboardInterrupt, SystemExit):
1237 raise
1243 raise
1238 except Exception:
1244 except Exception:
1239 return None
1245 return None
1240 level.sort(key, reverse=True)
1246 level.sort(key, reverse=True)
1241
1247
1242 def cmd_goto(self):
1248 def cmd_goto(self):
1243 self.startkeyboardinput("goto")
1249 self.startkeyboardinput("goto")
1244
1250
1245 def cmd_find(self):
1251 def cmd_find(self):
1246 self.startkeyboardinput("find")
1252 self.startkeyboardinput("find")
1247
1253
1248 def cmd_findbackwards(self):
1254 def cmd_findbackwards(self):
1249 self.startkeyboardinput("findbackwards")
1255 self.startkeyboardinput("findbackwards")
1250
1256
1251 def cmd_help(self):
1257 def cmd_help(self):
1252 """
1258 """
1253 The help command
1259 The help command
1254 """
1260 """
1255 for level in self.levels:
1261 for level in self.levels:
1256 if isinstance(level.input, _BrowserHelp):
1262 if isinstance(level.input, _BrowserHelp):
1257 curses.beep()
1263 curses.beep()
1258 self.report(CommandError("help already active"))
1264 self.report(CommandError("help already active"))
1259 return
1265 return
1260
1266
1261 self.enter(_BrowserHelp(self), "default")
1267 self.enter(_BrowserHelp(self), "default")
1262
1268
1263 def cmd_hideattr(self):
1269 def cmd_hideattr(self):
1264 level = self.levels[-1]
1270 level = self.levels[-1]
1265 if level.displayattr[0] is None:
1271 if level.displayattr[0] is None:
1266 self.beep()
1272 self.beep()
1267 else:
1273 else:
1268 self.report("hideattr")
1274 self.report("hideattr")
1269 level.hiddenattrs.add(level.displayattr[1])
1275 level.hiddenattrs.add(level.displayattr[1])
1270 level.moveto(level.curx, level.cury, refresh=True)
1276 level.moveto(level.curx, level.cury, refresh=True)
1271
1277
1272 def cmd_unhideattrs(self):
1278 def cmd_unhideattrs(self):
1273 level = self.levels[-1]
1279 level = self.levels[-1]
1274 self.report("unhideattrs")
1280 self.report("unhideattrs")
1275 level.hiddenattrs.clear()
1281 level.hiddenattrs.clear()
1276 level.moveto(level.curx, level.cury, refresh=True)
1282 level.moveto(level.curx, level.cury, refresh=True)
1277
1283
1278 def _dodisplay(self, scr):
1284 def _dodisplay(self, scr):
1279 """
1285 """
1280 This method is the workhorse of the browser. It handles screen
1286 This method is the workhorse of the browser. It handles screen
1281 drawing and the keyboard.
1287 drawing and the keyboard.
1282 """
1288 """
1283 self.scr = scr
1289 self.scr = scr
1284 curses.halfdelay(1)
1290 curses.halfdelay(1)
1285 footery = 2
1291 footery = 2
1286
1292
1287 keys = []
1293 keys = []
1288 for (key, cmd) in self.keymap.iteritems():
1294 for (key, cmd) in self.keymap.iteritems():
1289 if cmd == "quit":
1295 if cmd == "quit":
1290 keys.append("%s=%s" % (self.keylabel(key), cmd))
1296 keys.append("%s=%s" % (self.keylabel(key), cmd))
1291 for (key, cmd) in self.keymap.iteritems():
1297 for (key, cmd) in self.keymap.iteritems():
1292 if cmd == "help":
1298 if cmd == "help":
1293 keys.append("%s=%s" % (self.keylabel(key), cmd))
1299 keys.append("%s=%s" % (self.keylabel(key), cmd))
1294 helpmsg = " | %s" % " ".join(keys)
1300 helpmsg = " | %s" % " ".join(keys)
1295
1301
1296 scr.clear()
1302 scr.clear()
1297 msg = "Fetching first batch of objects..."
1303 msg = "Fetching first batch of objects..."
1298 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1304 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1299 scr.addstr(self.scrsizey//2, (self.scrsizex-len(msg))//2, msg)
1305 scr.addstr(self.scrsizey//2, (self.scrsizex-len(msg))//2, msg)
1300 scr.refresh()
1306 scr.refresh()
1301
1307
1302 lastc = -1
1308 lastc = -1
1303
1309
1304 self.levels = []
1310 self.levels = []
1305 # enter the first level
1311 # enter the first level
1306 self.enter(self.input, ipipe.xiter(self.input, "default"), *self.attrs)
1312 self.enter(self.input, ipipe.xiter(self.input, "default"), *self.attrs)
1307
1313
1308 self._calcheaderlines(None)
1314 self._calcheaderlines(None)
1309
1315
1310 while True:
1316 while True:
1311 level = self.levels[-1]
1317 level = self.levels[-1]
1312 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1318 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1313 level.mainsizey = self.scrsizey-1-self._headerlines-footery
1319 level.mainsizey = self.scrsizey-1-self._headerlines-footery
1314
1320
1315 # Paint object header
1321 # Paint object header
1316 for i in xrange(self._firstheaderline, self._firstheaderline+self._headerlines):
1322 for i in xrange(self._firstheaderline, self._firstheaderline+self._headerlines):
1317 lv = self.levels[i]
1323 lv = self.levels[i]
1318 posx = 0
1324 posx = 0
1319 posy = i-self._firstheaderline
1325 posy = i-self._firstheaderline
1320 endx = self.scrsizex
1326 endx = self.scrsizex
1321 if i: # not the first level
1327 if i: # not the first level
1322 msg = " (%d/%d" % (self.levels[i-1].cury, len(self.levels[i-1].items))
1328 msg = " (%d/%d" % (self.levels[i-1].cury, len(self.levels[i-1].items))
1323 if not self.levels[i-1].exhausted:
1329 if not self.levels[i-1].exhausted:
1324 msg += "+"
1330 msg += "+"
1325 msg += ") "
1331 msg += ") "
1326 endx -= len(msg)+1
1332 endx -= len(msg)+1
1327 posx += self.addstr(posy, posx, 0, endx, " ibrowse #%d: " % i, self.style_objheadertext)
1333 posx += self.addstr(posy, posx, 0, endx, " ibrowse #%d: " % i, self.style_objheadertext)
1328 for (style, text) in lv.header:
1334 for (style, text) in lv.header:
1329 posx += self.addstr(posy, posx, 0, endx, text, self.style_objheaderobject)
1335 posx += self.addstr(posy, posx, 0, endx, text, self.style_objheaderobject)
1330 if posx >= endx:
1336 if posx >= endx:
1331 break
1337 break
1332 if i:
1338 if i:
1333 posx += self.addstr(posy, posx, 0, self.scrsizex, msg, self.style_objheadernumber)
1339 posx += self.addstr(posy, posx, 0, self.scrsizex, msg, self.style_objheadernumber)
1334 posx += self.addchr(posy, posx, 0, self.scrsizex, " ", self.scrsizex-posx, self.style_objheadernumber)
1340 posx += self.addchr(posy, posx, 0, self.scrsizex, " ", self.scrsizex-posx, self.style_objheadernumber)
1335
1341
1336 if not level.items:
1342 if not level.items:
1337 self.addchr(self._headerlines, 0, 0, self.scrsizex, " ", self.scrsizex, self.style_colheader)
1343 self.addchr(self._headerlines, 0, 0, self.scrsizex, " ", self.scrsizex, self.style_colheader)
1338 self.addstr(self._headerlines+1, 0, 0, self.scrsizex, " <empty>", astyle.style_error)
1344 self.addstr(self._headerlines+1, 0, 0, self.scrsizex, " <empty>", astyle.style_error)
1339 scr.clrtobot()
1345 scr.clrtobot()
1340 else:
1346 else:
1341 # Paint column headers
1347 # Paint column headers
1342 scr.move(self._headerlines, 0)
1348 scr.move(self._headerlines, 0)
1343 scr.addstr(" %*s " % (level.numbersizex, "#"), self.getstyle(self.style_colheader))
1349 scr.addstr(" %*s " % (level.numbersizex, "#"), self.getstyle(self.style_colheader))
1344 scr.addstr(self.headersepchar, self.getstyle(self.style_colheadersep))
1350 scr.addstr(self.headersepchar, self.getstyle(self.style_colheadersep))
1345 begx = level.numbersizex+3
1351 begx = level.numbersizex+3
1346 posx = begx-level.datastartx
1352 posx = begx-level.datastartx
1347 for attrname in level.displayattrs:
1353 for attrname in level.displayattrs:
1348 strattrname = ipipe._attrname(attrname)
1354 strattrname = ipipe._attrname(attrname)
1349 cwidth = level.colwidths[attrname]
1355 cwidth = level.colwidths[attrname]
1350 header = strattrname.ljust(cwidth)
1356 header = strattrname.ljust(cwidth)
1351 if attrname == level.displayattr[1]:
1357 if attrname == level.displayattr[1]:
1352 style = self.style_colheaderhere
1358 style = self.style_colheaderhere
1353 else:
1359 else:
1354 style = self.style_colheader
1360 style = self.style_colheader
1355 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, header, style)
1361 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, header, style)
1356 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, self.headersepchar, self.style_colheadersep)
1362 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, self.headersepchar, self.style_colheadersep)
1357 if posx >= self.scrsizex:
1363 if posx >= self.scrsizex:
1358 break
1364 break
1359 else:
1365 else:
1360 scr.addstr(" "*(self.scrsizex-posx), self.getstyle(self.style_colheader))
1366 scr.addstr(" "*(self.scrsizex-posx), self.getstyle(self.style_colheader))
1361
1367
1362 # Paint rows
1368 # Paint rows
1363 posy = self._headerlines+1+level.datastarty
1369 posy = self._headerlines+1+level.datastarty
1364 for i in xrange(level.datastarty, min(level.datastarty+level.mainsizey, len(level.items))):
1370 for i in xrange(level.datastarty, min(level.datastarty+level.mainsizey, len(level.items))):
1365 cache = level.items[i]
1371 cache = level.items[i]
1366 if i == level.cury:
1372 if i == level.cury:
1367 style = self.style_numberhere
1373 style = self.style_numberhere
1368 else:
1374 else:
1369 style = self.style_number
1375 style = self.style_number
1370
1376
1371 posy = self._headerlines+1+i-level.datastarty
1377 posy = self._headerlines+1+i-level.datastarty
1372 posx = begx-level.datastartx
1378 posx = begx-level.datastartx
1373
1379
1374 scr.move(posy, 0)
1380 scr.move(posy, 0)
1375 scr.addstr(" %*d%s" % (level.numbersizex, i, " !"[cache.marked]), self.getstyle(style))
1381 scr.addstr(" %*d%s" % (level.numbersizex, i, " !"[cache.marked]), self.getstyle(style))
1376 scr.addstr(self.headersepchar, self.getstyle(self.style_sep))
1382 scr.addstr(self.headersepchar, self.getstyle(self.style_sep))
1377
1383
1378 for attrname in level.displayattrs:
1384 for attrname in level.displayattrs:
1379 cwidth = level.colwidths[attrname]
1385 cwidth = level.colwidths[attrname]
1380 try:
1386 try:
1381 (align, length, parts) = level.displayrows[i-level.datastarty][attrname]
1387 (align, length, parts) = level.displayrows[i-level.datastarty][attrname]
1382 except KeyError:
1388 except KeyError:
1383 align = 2
1389 align = 2
1384 style = astyle.style_nodata
1390 style = astyle.style_nodata
1385 padstyle = self.style_datapad
1391 padstyle = self.style_datapad
1386 sepstyle = self.style_sep
1392 sepstyle = self.style_sep
1387 if i == level.cury:
1393 if i == level.cury:
1388 padstyle = self.getstylehere(padstyle)
1394 padstyle = self.getstylehere(padstyle)
1389 sepstyle = self.getstylehere(sepstyle)
1395 sepstyle = self.getstylehere(sepstyle)
1390 if align == 2:
1396 if align == 2:
1391 posx += self.addchr(posy, posx, begx, self.scrsizex, self.nodatachar, cwidth, style)
1397 posx += self.addchr(posy, posx, begx, self.scrsizex, self.nodatachar, cwidth, style)
1392 else:
1398 else:
1393 if align == 1:
1399 if align == 1:
1394 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1400 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1395 elif align == 0:
1401 elif align == 0:
1396 pad1 = (cwidth-length)//2
1402 pad1 = (cwidth-length)//2
1397 pad2 = cwidth-length-len(pad1)
1403 pad2 = cwidth-length-len(pad1)
1398 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad1, padstyle)
1404 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad1, padstyle)
1399 for (style, text) in parts:
1405 for (style, text) in parts:
1400 if i == level.cury:
1406 if i == level.cury:
1401 style = self.getstylehere(style)
1407 style = self.getstylehere(style)
1402 posx += self.addstr(posy, posx, begx, self.scrsizex, text, style)
1408 posx += self.addstr(posy, posx, begx, self.scrsizex, text, style)
1403 if posx >= self.scrsizex:
1409 if posx >= self.scrsizex:
1404 break
1410 break
1405 if align == -1:
1411 if align == -1:
1406 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1412 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1407 elif align == 0:
1413 elif align == 0:
1408 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad2, padstyle)
1414 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad2, padstyle)
1409 posx += self.addstr(posy, posx, begx, self.scrsizex, self.datasepchar, sepstyle)
1415 posx += self.addstr(posy, posx, begx, self.scrsizex, self.datasepchar, sepstyle)
1410 else:
1416 else:
1411 scr.clrtoeol()
1417 scr.clrtoeol()
1412
1418
1413 # Add blank row headers for the rest of the screen
1419 # Add blank row headers for the rest of the screen
1414 for posy in xrange(posy+1, self.scrsizey-2):
1420 for posy in xrange(posy+1, self.scrsizey-2):
1415 scr.addstr(posy, 0, " " * (level.numbersizex+2), self.getstyle(self.style_colheader))
1421 scr.addstr(posy, 0, " " * (level.numbersizex+2), self.getstyle(self.style_colheader))
1416 scr.clrtoeol()
1422 scr.clrtoeol()
1417
1423
1418 posy = self.scrsizey-footery
1424 posy = self.scrsizey-footery
1419 # Display footer
1425 # Display footer
1420 scr.addstr(posy, 0, " "*self.scrsizex, self.getstyle(self.style_footer))
1426 scr.addstr(posy, 0, " "*self.scrsizex, self.getstyle(self.style_footer))
1421
1427
1422 if level.exhausted:
1428 if level.exhausted:
1423 flag = ""
1429 flag = ""
1424 else:
1430 else:
1425 flag = "+"
1431 flag = "+"
1426
1432
1427 endx = self.scrsizex-len(helpmsg)-1
1433 endx = self.scrsizex-len(helpmsg)-1
1428 scr.addstr(posy, endx, helpmsg, self.getstyle(self.style_footer))
1434 scr.addstr(posy, endx, helpmsg, self.getstyle(self.style_footer))
1429
1435
1430 posx = 0
1436 posx = 0
1431 msg = " %d%s objects (%d marked): " % (len(level.items), flag, level.marked)
1437 msg = " %d%s objects (%d marked): " % (len(level.items), flag, level.marked)
1432 posx += self.addstr(posy, posx, 0, endx, msg, self.style_footer)
1438 posx += self.addstr(posy, posx, 0, endx, msg, self.style_footer)
1433 try:
1439 try:
1434 item = level.items[level.cury].item
1440 item = level.items[level.cury].item
1435 except IndexError: # empty
1441 except IndexError: # empty
1436 pass
1442 pass
1437 else:
1443 else:
1438 for (nostyle, text) in ipipe.xrepr(item, "footer"):
1444 for (nostyle, text) in ipipe.xrepr(item, "footer"):
1439 if not isinstance(nostyle, int):
1445 if not isinstance(nostyle, int):
1440 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1446 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1441 if posx >= endx:
1447 if posx >= endx:
1442 break
1448 break
1443
1449
1444 attrstyle = [(astyle.style_default, "no attribute")]
1450 attrstyle = [(astyle.style_default, "no attribute")]
1445 attrname = level.displayattr[1]
1451 attrname = level.displayattr[1]
1446 if attrname is not ipipe.noitem and attrname is not None:
1452 if attrname is not ipipe.noitem and attrname is not None:
1447 posx += self.addstr(posy, posx, 0, endx, " | ", self.style_footer)
1453 posx += self.addstr(posy, posx, 0, endx, " | ", self.style_footer)
1448 posx += self.addstr(posy, posx, 0, endx, ipipe._attrname(attrname), self.style_footer)
1454 posx += self.addstr(posy, posx, 0, endx, ipipe._attrname(attrname), self.style_footer)
1449 posx += self.addstr(posy, posx, 0, endx, ": ", self.style_footer)
1455 posx += self.addstr(posy, posx, 0, endx, ": ", self.style_footer)
1450 try:
1456 try:
1451 attr = ipipe._getattr(item, attrname)
1457 attr = ipipe._getattr(item, attrname)
1452 except (SystemExit, KeyboardInterrupt):
1458 except (SystemExit, KeyboardInterrupt):
1453 raise
1459 raise
1454 except Exception, exc:
1460 except Exception, exc:
1455 attr = exc
1461 attr = exc
1456 if attr is not ipipe.noitem:
1462 if attr is not ipipe.noitem:
1457 attrstyle = ipipe.xrepr(attr, "footer")
1463 attrstyle = ipipe.xrepr(attr, "footer")
1458 for (nostyle, text) in attrstyle:
1464 for (nostyle, text) in attrstyle:
1459 if not isinstance(nostyle, int):
1465 if not isinstance(nostyle, int):
1460 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1466 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1461 if posx >= endx:
1467 if posx >= endx:
1462 break
1468 break
1463
1469
1464 try:
1470 try:
1465 # Display input prompt
1471 # Display input prompt
1466 if self.mode in self.prompts:
1472 if self.mode in self.prompts:
1467 history = self.prompts[self.mode]
1473 history = self.prompts[self.mode]
1468 posx = 0
1474 posx = 0
1469 posy = self.scrsizey-1
1475 posy = self.scrsizey-1
1470 posx += self.addstr(posy, posx, 0, endx, history.prompt, astyle.style_default)
1476 posx += self.addstr(posy, posx, 0, endx, history.prompt, astyle.style_default)
1471 posx += self.addstr(posy, posx, 0, endx, " [", astyle.style_default)
1477 posx += self.addstr(posy, posx, 0, endx, " [", astyle.style_default)
1472 if history.cury==-1:
1478 if history.cury==-1:
1473 text = "new"
1479 text = "new"
1474 else:
1480 else:
1475 text = str(history.cury+1)
1481 text = str(history.cury+1)
1476 posx += self.addstr(posy, posx, 0, endx, text, astyle.style_type_number)
1482 posx += self.addstr(posy, posx, 0, endx, text, astyle.style_type_number)
1477 if history.history:
1483 if history.history:
1478 posx += self.addstr(posy, posx, 0, endx, "/", astyle.style_default)
1484 posx += self.addstr(posy, posx, 0, endx, "/", astyle.style_default)
1479 posx += self.addstr(posy, posx, 0, endx, str(len(history.history)), astyle.style_type_number)
1485 posx += self.addstr(posy, posx, 0, endx, str(len(history.history)), astyle.style_type_number)
1480 posx += self.addstr(posy, posx, 0, endx, "]: ", astyle.style_default)
1486 posx += self.addstr(posy, posx, 0, endx, "]: ", astyle.style_default)
1481 inputstartx = posx
1487 inputstartx = posx
1482 posx += self.addstr(posy, posx, 0, endx, history.input, astyle.style_default)
1488 posx += self.addstr(posy, posx, 0, endx, history.input, astyle.style_default)
1483 # Display report
1489 # Display report
1484 else:
1490 else:
1485 if self._report is not None:
1491 if self._report is not None:
1486 if isinstance(self._report, Exception):
1492 if isinstance(self._report, Exception):
1487 style = self.getstyle(astyle.style_error)
1493 style = self.getstyle(astyle.style_error)
1488 if self._report.__class__.__module__ == "exceptions":
1494 if self._report.__class__.__module__ == "exceptions":
1489 msg = "%s: %s" % \
1495 msg = "%s: %s" % \
1490 (self._report.__class__.__name__, self._report)
1496 (self._report.__class__.__name__, self._report)
1491 else:
1497 else:
1492 msg = "%s.%s: %s" % \
1498 msg = "%s.%s: %s" % \
1493 (self._report.__class__.__module__,
1499 (self._report.__class__.__module__,
1494 self._report.__class__.__name__, self._report)
1500 self._report.__class__.__name__, self._report)
1495 else:
1501 else:
1496 style = self.getstyle(self.style_report)
1502 style = self.getstyle(self.style_report)
1497 msg = self._report
1503 msg = self._report
1498 scr.addstr(self.scrsizey-1, 0, msg[:self.scrsizex], style)
1504 scr.addstr(self.scrsizey-1, 0, msg[:self.scrsizex], style)
1499 self._report = None
1505 self._report = None
1500 else:
1506 else:
1501 scr.move(self.scrsizey-1, 0)
1507 scr.move(self.scrsizey-1, 0)
1502 except curses.error:
1508 except curses.error:
1503 # Protect against errors from writing to the last line
1509 # Protect against errors from writing to the last line
1504 pass
1510 pass
1505 scr.clrtoeol()
1511 scr.clrtoeol()
1506
1512
1507 # Position cursor
1513 # Position cursor
1508 if self.mode in self.prompts:
1514 if self.mode in self.prompts:
1509 history = self.prompts[self.mode]
1515 history = self.prompts[self.mode]
1510 scr.move(self.scrsizey-1, inputstartx+history.curx)
1516 scr.move(self.scrsizey-1, inputstartx+history.curx)
1511 else:
1517 else:
1512 scr.move(
1518 scr.move(
1513 1+self._headerlines+level.cury-level.datastarty,
1519 1+self._headerlines+level.cury-level.datastarty,
1514 level.numbersizex+3+level.curx-level.datastartx
1520 level.numbersizex+3+level.curx-level.datastartx
1515 )
1521 )
1516 scr.refresh()
1522 scr.refresh()
1517
1523
1518 # Check keyboard
1524 # Check keyboard
1519 while True:
1525 while True:
1520 c = scr.getch()
1526 c = scr.getch()
1521 if self.mode in self.prompts:
1527 if self.mode in self.prompts:
1522 if self.prompts[self.mode].handlekey(self, c):
1528 if self.prompts[self.mode].handlekey(self, c):
1523 break # Redisplay
1529 break # Redisplay
1524 else:
1530 else:
1525 # if no key is pressed slow down and beep again
1531 # if no key is pressed slow down and beep again
1526 if c == -1:
1532 if c == -1:
1527 self.stepx = 1.
1533 self.stepx = 1.
1528 self.stepy = 1.
1534 self.stepy = 1.
1529 self._dobeep = True
1535 self._dobeep = True
1530 else:
1536 else:
1531 # if a different key was pressed slow down and beep too
1537 # if a different key was pressed slow down and beep too
1532 if c != lastc:
1538 if c != lastc:
1533 lastc = c
1539 lastc = c
1534 self.stepx = 1.
1540 self.stepx = 1.
1535 self.stepy = 1.
1541 self.stepy = 1.
1536 self._dobeep = True
1542 self._dobeep = True
1537 cmdname = self.keymap.get(c, None)
1543 cmdname = self.keymap.get(c, None)
1538 if cmdname is None:
1544 if cmdname is None:
1539 self.report(
1545 self.report(
1540 UnassignedKeyError("Unassigned key %s" %
1546 UnassignedKeyError("Unassigned key %s" %
1541 self.keylabel(c)))
1547 self.keylabel(c)))
1542 else:
1548 else:
1543 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
1549 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
1544 if cmdfunc is None:
1550 if cmdfunc is None:
1545 self.report(
1551 self.report(
1546 UnknownCommandError("Unknown command %r" %
1552 UnknownCommandError("Unknown command %r" %
1547 (cmdname,)))
1553 (cmdname,)))
1548 elif cmdfunc():
1554 elif cmdfunc():
1549 returnvalue = self.returnvalue
1555 returnvalue = self.returnvalue
1550 self.returnvalue = None
1556 self.returnvalue = None
1551 return returnvalue
1557 return returnvalue
1552 self.stepx = self.nextstepx(self.stepx)
1558 self.stepx = self.nextstepx(self.stepx)
1553 self.stepy = self.nextstepy(self.stepy)
1559 self.stepy = self.nextstepy(self.stepy)
1554 curses.flushinp() # get rid of type ahead
1560 curses.flushinp() # get rid of type ahead
1555 break # Redisplay
1561 break # Redisplay
1556 self.scr = None
1562 self.scr = None
1557
1563
1558 def display(self):
1564 def display(self):
1559 return curses.wrapper(self._dodisplay)
1565 return curses.wrapper(self._dodisplay)
@@ -1,5593 +1,5594 b''
1 2006-06-16 Walter Doerwald <walter@livinglogic.de>
1 2006-06-16 Walter Doerwald <walter@livinglogic.de>
2
2
3 * IPython/Extensions/ibrowse.py: Add two new commands to
3 * IPython/Extensions/ibrowse.py: Add two new commands to
4 ibrowse: hideattr (mapped to "h") hides the attribute under
4 ibrowse: hideattr (mapped to "h") hides the attribute under
5 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
5 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
6 attributes again. Remapped the help command to "?".
6 attributes again. Remapped the help command to "?". Display
7
7 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
8 as keys for the "home" and "end" commands.
8
9
9 2006-06-15 Ville Vainio <vivainio@gmail.com>
10 2006-06-15 Ville Vainio <vivainio@gmail.com>
10
11
11 * iplib.py, hooks.py: Added new generate_prompt hook that can be
12 * iplib.py, hooks.py: Added new generate_prompt hook that can be
12 used to create prompts dynamically, instead of the "old" way of
13 used to create prompts dynamically, instead of the "old" way of
13 assigning "magic" strings to prompt_in1 and prompt_in2. The old
14 assigning "magic" strings to prompt_in1 and prompt_in2. The old
14 way still works (it's invoked by the default hook), of course.
15 way still works (it's invoked by the default hook), of course.
15
16
16 * Prompts.py: added generate_output_prompt hook for altering output
17 * Prompts.py: added generate_output_prompt hook for altering output
17 prompt
18 prompt
18
19
19 * Release.py: Changed version string to 0.7.3.svn.
20 * Release.py: Changed version string to 0.7.3.svn.
20
21
21 2006-06-15 Walter Doerwald <walter@livinglogic.de>
22 2006-06-15 Walter Doerwald <walter@livinglogic.de>
22
23
23 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
24 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
24 the call to fetch() always tries to fetch enough data for at least one
25 the call to fetch() always tries to fetch enough data for at least one
25 full screen. This makes it possible to simply call moveto(0,0,True) in
26 full screen. This makes it possible to simply call moveto(0,0,True) in
26 the constructor. Fix typos and removed the obsolete goto attribute.
27 the constructor. Fix typos and removed the obsolete goto attribute.
27
28
28 2006-06-12 Ville Vainio <vivainio@gmail.com>
29 2006-06-12 Ville Vainio <vivainio@gmail.com>
29
30
30 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
31 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
31 allowing $variable interpolation within multiline statements,
32 allowing $variable interpolation within multiline statements,
32 though so far only with "sh" profile for a testing period.
33 though so far only with "sh" profile for a testing period.
33 The patch also enables splitting long commands with \ but it
34 The patch also enables splitting long commands with \ but it
34 doesn't work properly yet.
35 doesn't work properly yet.
35
36
36 2006-06-12 Walter Doerwald <walter@livinglogic.de>
37 2006-06-12 Walter Doerwald <walter@livinglogic.de>
37
38
38 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
39 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
39 input history and the position of the cursor in the input history for
40 input history and the position of the cursor in the input history for
40 the find, findbackwards and goto command.
41 the find, findbackwards and goto command.
41
42
42 2006-06-10 Walter Doerwald <walter@livinglogic.de>
43 2006-06-10 Walter Doerwald <walter@livinglogic.de>
43
44
44 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
45 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
45 implements the basic functionality of browser commands that require
46 implements the basic functionality of browser commands that require
46 input. Reimplement the goto, find and findbackwards commands as
47 input. Reimplement the goto, find and findbackwards commands as
47 subclasses of _CommandInput. Add an input history and keymaps to those
48 subclasses of _CommandInput. Add an input history and keymaps to those
48 commands. Add "\r" as a keyboard shortcut for the enterdefault and
49 commands. Add "\r" as a keyboard shortcut for the enterdefault and
49 execute commands.
50 execute commands.
50
51
51 2006-06-07 Ville Vainio <vivainio@gmail.com>
52 2006-06-07 Ville Vainio <vivainio@gmail.com>
52
53
53 * iplib.py: ipython mybatch.ipy exits ipython immediately after
54 * iplib.py: ipython mybatch.ipy exits ipython immediately after
54 running the batch files instead of leaving the session open.
55 running the batch files instead of leaving the session open.
55
56
56 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
57 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
57
58
58 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
59 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
59 the original fix was incomplete. Patch submitted by W. Maier.
60 the original fix was incomplete. Patch submitted by W. Maier.
60
61
61 2006-06-07 Ville Vainio <vivainio@gmail.com>
62 2006-06-07 Ville Vainio <vivainio@gmail.com>
62
63
63 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
64 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
64 Confirmation prompts can be supressed by 'quiet' option.
65 Confirmation prompts can be supressed by 'quiet' option.
65 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
66 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
66
67
67 2006-06-06 *** Released version 0.7.2
68 2006-06-06 *** Released version 0.7.2
68
69
69 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
70 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
70
71
71 * IPython/Release.py (version): Made 0.7.2 final for release.
72 * IPython/Release.py (version): Made 0.7.2 final for release.
72 Repo tagged and release cut.
73 Repo tagged and release cut.
73
74
74 2006-06-05 Ville Vainio <vivainio@gmail.com>
75 2006-06-05 Ville Vainio <vivainio@gmail.com>
75
76
76 * Magic.py (magic_rehashx): Honor no_alias list earlier in
77 * Magic.py (magic_rehashx): Honor no_alias list earlier in
77 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
78 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
78
79
79 * upgrade_dir.py: try import 'path' module a bit harder
80 * upgrade_dir.py: try import 'path' module a bit harder
80 (for %upgrade)
81 (for %upgrade)
81
82
82 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
83 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
83
84
84 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
85 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
85 instead of looping 20 times.
86 instead of looping 20 times.
86
87
87 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
88 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
88 correctly at initialization time. Bug reported by Krishna Mohan
89 correctly at initialization time. Bug reported by Krishna Mohan
89 Gundu <gkmohan-AT-gmail.com> on the user list.
90 Gundu <gkmohan-AT-gmail.com> on the user list.
90
91
91 * IPython/Release.py (version): Mark 0.7.2 version to start
92 * IPython/Release.py (version): Mark 0.7.2 version to start
92 testing for release on 06/06.
93 testing for release on 06/06.
93
94
94 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
95 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
95
96
96 * scripts/irunner: thin script interface so users don't have to
97 * scripts/irunner: thin script interface so users don't have to
97 find the module and call it as an executable, since modules rarely
98 find the module and call it as an executable, since modules rarely
98 live in people's PATH.
99 live in people's PATH.
99
100
100 * IPython/irunner.py (InteractiveRunner.__init__): added
101 * IPython/irunner.py (InteractiveRunner.__init__): added
101 delaybeforesend attribute to control delays with newer versions of
102 delaybeforesend attribute to control delays with newer versions of
102 pexpect. Thanks to detailed help from pexpect's author, Noah
103 pexpect. Thanks to detailed help from pexpect's author, Noah
103 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
104 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
104 correctly (it works in NoColor mode).
105 correctly (it works in NoColor mode).
105
106
106 * IPython/iplib.py (handle_normal): fix nasty crash reported on
107 * IPython/iplib.py (handle_normal): fix nasty crash reported on
107 SAGE list, from improper log() calls.
108 SAGE list, from improper log() calls.
108
109
109 2006-05-31 Ville Vainio <vivainio@gmail.com>
110 2006-05-31 Ville Vainio <vivainio@gmail.com>
110
111
111 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
112 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
112 with args in parens to work correctly with dirs that have spaces.
113 with args in parens to work correctly with dirs that have spaces.
113
114
114 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
115 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
115
116
116 * IPython/Logger.py (Logger.logstart): add option to log raw input
117 * IPython/Logger.py (Logger.logstart): add option to log raw input
117 instead of the processed one. A -r flag was added to the
118 instead of the processed one. A -r flag was added to the
118 %logstart magic used for controlling logging.
119 %logstart magic used for controlling logging.
119
120
120 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
121 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
121
122
122 * IPython/iplib.py (InteractiveShell.__init__): add check for the
123 * IPython/iplib.py (InteractiveShell.__init__): add check for the
123 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
124 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
124 recognize the option. After a bug report by Will Maier. This
125 recognize the option. After a bug report by Will Maier. This
125 closes #64 (will do it after confirmation from W. Maier).
126 closes #64 (will do it after confirmation from W. Maier).
126
127
127 * IPython/irunner.py: New module to run scripts as if manually
128 * IPython/irunner.py: New module to run scripts as if manually
128 typed into an interactive environment, based on pexpect. After a
129 typed into an interactive environment, based on pexpect. After a
129 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
130 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
130 ipython-user list. Simple unittests in the tests/ directory.
131 ipython-user list. Simple unittests in the tests/ directory.
131
132
132 * tools/release: add Will Maier, OpenBSD port maintainer, to
133 * tools/release: add Will Maier, OpenBSD port maintainer, to
133 recepients list. We are now officially part of the OpenBSD ports:
134 recepients list. We are now officially part of the OpenBSD ports:
134 http://www.openbsd.org/ports.html ! Many thanks to Will for the
135 http://www.openbsd.org/ports.html ! Many thanks to Will for the
135 work.
136 work.
136
137
137 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
138 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
138
139
139 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
140 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
140 so that it doesn't break tkinter apps.
141 so that it doesn't break tkinter apps.
141
142
142 * IPython/iplib.py (_prefilter): fix bug where aliases would
143 * IPython/iplib.py (_prefilter): fix bug where aliases would
143 shadow variables when autocall was fully off. Reported by SAGE
144 shadow variables when autocall was fully off. Reported by SAGE
144 author William Stein.
145 author William Stein.
145
146
146 * IPython/OInspect.py (Inspector.__init__): add a flag to control
147 * IPython/OInspect.py (Inspector.__init__): add a flag to control
147 at what detail level strings are computed when foo? is requested.
148 at what detail level strings are computed when foo? is requested.
148 This allows users to ask for example that the string form of an
149 This allows users to ask for example that the string form of an
149 object is only computed when foo?? is called, or even never, by
150 object is only computed when foo?? is called, or even never, by
150 setting the object_info_string_level >= 2 in the configuration
151 setting the object_info_string_level >= 2 in the configuration
151 file. This new option has been added and documented. After a
152 file. This new option has been added and documented. After a
152 request by SAGE to be able to control the printing of very large
153 request by SAGE to be able to control the printing of very large
153 objects more easily.
154 objects more easily.
154
155
155 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
156 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
156
157
157 * IPython/ipmaker.py (make_IPython): remove the ipython call path
158 * IPython/ipmaker.py (make_IPython): remove the ipython call path
158 from sys.argv, to be 100% consistent with how Python itself works
159 from sys.argv, to be 100% consistent with how Python itself works
159 (as seen for example with python -i file.py). After a bug report
160 (as seen for example with python -i file.py). After a bug report
160 by Jeffrey Collins.
161 by Jeffrey Collins.
161
162
162 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
163 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
163 nasty bug which was preventing custom namespaces with -pylab,
164 nasty bug which was preventing custom namespaces with -pylab,
164 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
165 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
165 compatibility (long gone from mpl).
166 compatibility (long gone from mpl).
166
167
167 * IPython/ipapi.py (make_session): name change: create->make. We
168 * IPython/ipapi.py (make_session): name change: create->make. We
168 use make in other places (ipmaker,...), it's shorter and easier to
169 use make in other places (ipmaker,...), it's shorter and easier to
169 type and say, etc. I'm trying to clean things before 0.7.2 so
170 type and say, etc. I'm trying to clean things before 0.7.2 so
170 that I can keep things stable wrt to ipapi in the chainsaw branch.
171 that I can keep things stable wrt to ipapi in the chainsaw branch.
171
172
172 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
173 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
173 python-mode recognizes our debugger mode. Add support for
174 python-mode recognizes our debugger mode. Add support for
174 autoindent inside (X)emacs. After a patch sent in by Jin Liu
175 autoindent inside (X)emacs. After a patch sent in by Jin Liu
175 <m.liu.jin-AT-gmail.com> originally written by
176 <m.liu.jin-AT-gmail.com> originally written by
176 doxgen-AT-newsmth.net (with minor modifications for xemacs
177 doxgen-AT-newsmth.net (with minor modifications for xemacs
177 compatibility)
178 compatibility)
178
179
179 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
180 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
180 tracebacks when walking the stack so that the stack tracking system
181 tracebacks when walking the stack so that the stack tracking system
181 in emacs' python-mode can identify the frames correctly.
182 in emacs' python-mode can identify the frames correctly.
182
183
183 * IPython/ipmaker.py (make_IPython): make the internal (and
184 * IPython/ipmaker.py (make_IPython): make the internal (and
184 default config) autoedit_syntax value false by default. Too many
185 default config) autoedit_syntax value false by default. Too many
185 users have complained to me (both on and off-list) about problems
186 users have complained to me (both on and off-list) about problems
186 with this option being on by default, so I'm making it default to
187 with this option being on by default, so I'm making it default to
187 off. It can still be enabled by anyone via the usual mechanisms.
188 off. It can still be enabled by anyone via the usual mechanisms.
188
189
189 * IPython/completer.py (Completer.attr_matches): add support for
190 * IPython/completer.py (Completer.attr_matches): add support for
190 PyCrust-style _getAttributeNames magic method. Patch contributed
191 PyCrust-style _getAttributeNames magic method. Patch contributed
191 by <mscott-AT-goldenspud.com>. Closes #50.
192 by <mscott-AT-goldenspud.com>. Closes #50.
192
193
193 * IPython/iplib.py (InteractiveShell.__init__): remove the
194 * IPython/iplib.py (InteractiveShell.__init__): remove the
194 deletion of exit/quit from __builtin__, which can break
195 deletion of exit/quit from __builtin__, which can break
195 third-party tools like the Zope debugging console. The
196 third-party tools like the Zope debugging console. The
196 %exit/%quit magics remain. In general, it's probably a good idea
197 %exit/%quit magics remain. In general, it's probably a good idea
197 not to delete anything from __builtin__, since we never know what
198 not to delete anything from __builtin__, since we never know what
198 that will break. In any case, python now (for 2.5) will support
199 that will break. In any case, python now (for 2.5) will support
199 'real' exit/quit, so this issue is moot. Closes #55.
200 'real' exit/quit, so this issue is moot. Closes #55.
200
201
201 * IPython/genutils.py (with_obj): rename the 'with' function to
202 * IPython/genutils.py (with_obj): rename the 'with' function to
202 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
203 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
203 becomes a language keyword. Closes #53.
204 becomes a language keyword. Closes #53.
204
205
205 * IPython/FakeModule.py (FakeModule.__init__): add a proper
206 * IPython/FakeModule.py (FakeModule.__init__): add a proper
206 __file__ attribute to this so it fools more things into thinking
207 __file__ attribute to this so it fools more things into thinking
207 it is a real module. Closes #59.
208 it is a real module. Closes #59.
208
209
209 * IPython/Magic.py (magic_edit): add -n option to open the editor
210 * IPython/Magic.py (magic_edit): add -n option to open the editor
210 at a specific line number. After a patch by Stefan van der Walt.
211 at a specific line number. After a patch by Stefan van der Walt.
211
212
212 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
213 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
213
214
214 * IPython/iplib.py (edit_syntax_error): fix crash when for some
215 * IPython/iplib.py (edit_syntax_error): fix crash when for some
215 reason the file could not be opened. After automatic crash
216 reason the file could not be opened. After automatic crash
216 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
217 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
217 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
218 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
218 (_should_recompile): Don't fire editor if using %bg, since there
219 (_should_recompile): Don't fire editor if using %bg, since there
219 is no file in the first place. From the same report as above.
220 is no file in the first place. From the same report as above.
220 (raw_input): protect against faulty third-party prefilters. After
221 (raw_input): protect against faulty third-party prefilters. After
221 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
222 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
222 while running under SAGE.
223 while running under SAGE.
223
224
224 2006-05-23 Ville Vainio <vivainio@gmail.com>
225 2006-05-23 Ville Vainio <vivainio@gmail.com>
225
226
226 * ipapi.py: Stripped down ip.to_user_ns() to work only as
227 * ipapi.py: Stripped down ip.to_user_ns() to work only as
227 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
228 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
228 now returns None (again), unless dummy is specifically allowed by
229 now returns None (again), unless dummy is specifically allowed by
229 ipapi.get(allow_dummy=True).
230 ipapi.get(allow_dummy=True).
230
231
231 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
232 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
232
233
233 * IPython: remove all 2.2-compatibility objects and hacks from
234 * IPython: remove all 2.2-compatibility objects and hacks from
234 everywhere, since we only support 2.3 at this point. Docs
235 everywhere, since we only support 2.3 at this point. Docs
235 updated.
236 updated.
236
237
237 * IPython/ipapi.py (IPApi.__init__): Clean up of all getters.
238 * IPython/ipapi.py (IPApi.__init__): Clean up of all getters.
238 Anything requiring extra validation can be turned into a Python
239 Anything requiring extra validation can be turned into a Python
239 property in the future. I used a property for the db one b/c
240 property in the future. I used a property for the db one b/c
240 there was a nasty circularity problem with the initialization
241 there was a nasty circularity problem with the initialization
241 order, which right now I don't have time to clean up.
242 order, which right now I don't have time to clean up.
242
243
243 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
244 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
244 another locking bug reported by Jorgen. I'm not 100% sure though,
245 another locking bug reported by Jorgen. I'm not 100% sure though,
245 so more testing is needed...
246 so more testing is needed...
246
247
247 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
248 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
248
249
249 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
250 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
250 local variables from any routine in user code (typically executed
251 local variables from any routine in user code (typically executed
251 with %run) directly into the interactive namespace. Very useful
252 with %run) directly into the interactive namespace. Very useful
252 when doing complex debugging.
253 when doing complex debugging.
253 (IPythonNotRunning): Changed the default None object to a dummy
254 (IPythonNotRunning): Changed the default None object to a dummy
254 whose attributes can be queried as well as called without
255 whose attributes can be queried as well as called without
255 exploding, to ease writing code which works transparently both in
256 exploding, to ease writing code which works transparently both in
256 and out of ipython and uses some of this API.
257 and out of ipython and uses some of this API.
257
258
258 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
259 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
259
260
260 * IPython/hooks.py (result_display): Fix the fact that our display
261 * IPython/hooks.py (result_display): Fix the fact that our display
261 hook was using str() instead of repr(), as the default python
262 hook was using str() instead of repr(), as the default python
262 console does. This had gone unnoticed b/c it only happened if
263 console does. This had gone unnoticed b/c it only happened if
263 %Pprint was off, but the inconsistency was there.
264 %Pprint was off, but the inconsistency was there.
264
265
265 2006-05-15 Ville Vainio <vivainio@gmail.com>
266 2006-05-15 Ville Vainio <vivainio@gmail.com>
266
267
267 * Oinspect.py: Only show docstring for nonexisting/binary files
268 * Oinspect.py: Only show docstring for nonexisting/binary files
268 when doing object??, closing ticket #62
269 when doing object??, closing ticket #62
269
270
270 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
271 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
271
272
272 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
273 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
273 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
274 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
274 was being released in a routine which hadn't checked if it had
275 was being released in a routine which hadn't checked if it had
275 been the one to acquire it.
276 been the one to acquire it.
276
277
277 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
278 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
278
279
279 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
280 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
280
281
281 2006-04-11 Ville Vainio <vivainio@gmail.com>
282 2006-04-11 Ville Vainio <vivainio@gmail.com>
282
283
283 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
284 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
284 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
285 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
285 prefilters, allowing stuff like magics and aliases in the file.
286 prefilters, allowing stuff like magics and aliases in the file.
286
287
287 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
288 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
288 added. Supported now are "%clear in" and "%clear out" (clear input and
289 added. Supported now are "%clear in" and "%clear out" (clear input and
289 output history, respectively). Also fixed CachedOutput.flush to
290 output history, respectively). Also fixed CachedOutput.flush to
290 properly flush the output cache.
291 properly flush the output cache.
291
292
292 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
293 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
293 half-success (and fail explicitly).
294 half-success (and fail explicitly).
294
295
295 2006-03-28 Ville Vainio <vivainio@gmail.com>
296 2006-03-28 Ville Vainio <vivainio@gmail.com>
296
297
297 * iplib.py: Fix quoting of aliases so that only argless ones
298 * iplib.py: Fix quoting of aliases so that only argless ones
298 are quoted
299 are quoted
299
300
300 2006-03-28 Ville Vainio <vivainio@gmail.com>
301 2006-03-28 Ville Vainio <vivainio@gmail.com>
301
302
302 * iplib.py: Quote aliases with spaces in the name.
303 * iplib.py: Quote aliases with spaces in the name.
303 "c:\program files\blah\bin" is now legal alias target.
304 "c:\program files\blah\bin" is now legal alias target.
304
305
305 * ext_rehashdir.py: Space no longer allowed as arg
306 * ext_rehashdir.py: Space no longer allowed as arg
306 separator, since space is legal in path names.
307 separator, since space is legal in path names.
307
308
308 2006-03-16 Ville Vainio <vivainio@gmail.com>
309 2006-03-16 Ville Vainio <vivainio@gmail.com>
309
310
310 * upgrade_dir.py: Take path.py from Extensions, correcting
311 * upgrade_dir.py: Take path.py from Extensions, correcting
311 %upgrade magic
312 %upgrade magic
312
313
313 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
314 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
314
315
315 * hooks.py: Only enclose editor binary in quotes if legal and
316 * hooks.py: Only enclose editor binary in quotes if legal and
316 necessary (space in the name, and is an existing file). Fixes a bug
317 necessary (space in the name, and is an existing file). Fixes a bug
317 reported by Zachary Pincus.
318 reported by Zachary Pincus.
318
319
319 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
320 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
320
321
321 * Manual: thanks to a tip on proper color handling for Emacs, by
322 * Manual: thanks to a tip on proper color handling for Emacs, by
322 Eric J Haywiser <ejh1-AT-MIT.EDU>.
323 Eric J Haywiser <ejh1-AT-MIT.EDU>.
323
324
324 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
325 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
325 by applying the provided patch. Thanks to Liu Jin
326 by applying the provided patch. Thanks to Liu Jin
326 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
327 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
327 XEmacs/Linux, I'm trusting the submitter that it actually helps
328 XEmacs/Linux, I'm trusting the submitter that it actually helps
328 under win32/GNU Emacs. Will revisit if any problems are reported.
329 under win32/GNU Emacs. Will revisit if any problems are reported.
329
330
330 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
331 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
331
332
332 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
333 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
333 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
334 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
334
335
335 2006-03-12 Ville Vainio <vivainio@gmail.com>
336 2006-03-12 Ville Vainio <vivainio@gmail.com>
336
337
337 * Magic.py (magic_timeit): Added %timeit magic, contributed by
338 * Magic.py (magic_timeit): Added %timeit magic, contributed by
338 Torsten Marek.
339 Torsten Marek.
339
340
340 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
341 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
341
342
342 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
343 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
343 line ranges works again.
344 line ranges works again.
344
345
345 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
346 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
346
347
347 * IPython/iplib.py (showtraceback): add back sys.last_traceback
348 * IPython/iplib.py (showtraceback): add back sys.last_traceback
348 and friends, after a discussion with Zach Pincus on ipython-user.
349 and friends, after a discussion with Zach Pincus on ipython-user.
349 I'm not 100% sure, but after thinking aobut it quite a bit, it may
350 I'm not 100% sure, but after thinking aobut it quite a bit, it may
350 be OK. Testing with the multithreaded shells didn't reveal any
351 be OK. Testing with the multithreaded shells didn't reveal any
351 problems, but let's keep an eye out.
352 problems, but let's keep an eye out.
352
353
353 In the process, I fixed a few things which were calling
354 In the process, I fixed a few things which were calling
354 self.InteractiveTB() directly (like safe_execfile), which is a
355 self.InteractiveTB() directly (like safe_execfile), which is a
355 mistake: ALL exception reporting should be done by calling
356 mistake: ALL exception reporting should be done by calling
356 self.showtraceback(), which handles state and tab-completion and
357 self.showtraceback(), which handles state and tab-completion and
357 more.
358 more.
358
359
359 2006-03-01 Ville Vainio <vivainio@gmail.com>
360 2006-03-01 Ville Vainio <vivainio@gmail.com>
360
361
361 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
362 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
362 To use, do "from ipipe import *".
363 To use, do "from ipipe import *".
363
364
364 2006-02-24 Ville Vainio <vivainio@gmail.com>
365 2006-02-24 Ville Vainio <vivainio@gmail.com>
365
366
366 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
367 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
367 "cleanly" and safely than the older upgrade mechanism.
368 "cleanly" and safely than the older upgrade mechanism.
368
369
369 2006-02-21 Ville Vainio <vivainio@gmail.com>
370 2006-02-21 Ville Vainio <vivainio@gmail.com>
370
371
371 * Magic.py: %save works again.
372 * Magic.py: %save works again.
372
373
373 2006-02-15 Ville Vainio <vivainio@gmail.com>
374 2006-02-15 Ville Vainio <vivainio@gmail.com>
374
375
375 * Magic.py: %Pprint works again
376 * Magic.py: %Pprint works again
376
377
377 * Extensions/ipy_sane_defaults.py: Provide everything provided
378 * Extensions/ipy_sane_defaults.py: Provide everything provided
378 in default ipythonrc, to make it possible to have a completely empty
379 in default ipythonrc, to make it possible to have a completely empty
379 ipythonrc (and thus completely rc-file free configuration)
380 ipythonrc (and thus completely rc-file free configuration)
380
381
381
382
382 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
383 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
383
384
384 * IPython/hooks.py (editor): quote the call to the editor command,
385 * IPython/hooks.py (editor): quote the call to the editor command,
385 to allow commands with spaces in them. Problem noted by watching
386 to allow commands with spaces in them. Problem noted by watching
386 Ian Oswald's video about textpad under win32 at
387 Ian Oswald's video about textpad under win32 at
387 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
388 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
388
389
389 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
390 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
390 describing magics (we haven't used @ for a loong time).
391 describing magics (we haven't used @ for a loong time).
391
392
392 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
393 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
393 contributed by marienz to close
394 contributed by marienz to close
394 http://www.scipy.net/roundup/ipython/issue53.
395 http://www.scipy.net/roundup/ipython/issue53.
395
396
396 2006-02-10 Ville Vainio <vivainio@gmail.com>
397 2006-02-10 Ville Vainio <vivainio@gmail.com>
397
398
398 * genutils.py: getoutput now works in win32 too
399 * genutils.py: getoutput now works in win32 too
399
400
400 * completer.py: alias and magic completion only invoked
401 * completer.py: alias and magic completion only invoked
401 at the first "item" in the line, to avoid "cd %store"
402 at the first "item" in the line, to avoid "cd %store"
402 nonsense.
403 nonsense.
403
404
404 2006-02-09 Ville Vainio <vivainio@gmail.com>
405 2006-02-09 Ville Vainio <vivainio@gmail.com>
405
406
406 * test/*: Added a unit testing framework (finally).
407 * test/*: Added a unit testing framework (finally).
407 '%run runtests.py' to run test_*.
408 '%run runtests.py' to run test_*.
408
409
409 * ipapi.py: Exposed runlines and set_custom_exc
410 * ipapi.py: Exposed runlines and set_custom_exc
410
411
411 2006-02-07 Ville Vainio <vivainio@gmail.com>
412 2006-02-07 Ville Vainio <vivainio@gmail.com>
412
413
413 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
414 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
414 instead use "f(1 2)" as before.
415 instead use "f(1 2)" as before.
415
416
416 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
417 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
417
418
418 * IPython/demo.py (IPythonDemo): Add new classes to the demo
419 * IPython/demo.py (IPythonDemo): Add new classes to the demo
419 facilities, for demos processed by the IPython input filter
420 facilities, for demos processed by the IPython input filter
420 (IPythonDemo), and for running a script one-line-at-a-time as a
421 (IPythonDemo), and for running a script one-line-at-a-time as a
421 demo, both for pure Python (LineDemo) and for IPython-processed
422 demo, both for pure Python (LineDemo) and for IPython-processed
422 input (IPythonLineDemo). After a request by Dave Kohel, from the
423 input (IPythonLineDemo). After a request by Dave Kohel, from the
423 SAGE team.
424 SAGE team.
424 (Demo.edit): added and edit() method to the demo objects, to edit
425 (Demo.edit): added and edit() method to the demo objects, to edit
425 the in-memory copy of the last executed block.
426 the in-memory copy of the last executed block.
426
427
427 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
428 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
428 processing to %edit, %macro and %save. These commands can now be
429 processing to %edit, %macro and %save. These commands can now be
429 invoked on the unprocessed input as it was typed by the user
430 invoked on the unprocessed input as it was typed by the user
430 (without any prefilters applied). After requests by the SAGE team
431 (without any prefilters applied). After requests by the SAGE team
431 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
432 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
432
433
433 2006-02-01 Ville Vainio <vivainio@gmail.com>
434 2006-02-01 Ville Vainio <vivainio@gmail.com>
434
435
435 * setup.py, eggsetup.py: easy_install ipython==dev works
436 * setup.py, eggsetup.py: easy_install ipython==dev works
436 correctly now (on Linux)
437 correctly now (on Linux)
437
438
438 * ipy_user_conf,ipmaker: user config changes, removed spurious
439 * ipy_user_conf,ipmaker: user config changes, removed spurious
439 warnings
440 warnings
440
441
441 * iplib: if rc.banner is string, use it as is.
442 * iplib: if rc.banner is string, use it as is.
442
443
443 * Magic: %pycat accepts a string argument and pages it's contents.
444 * Magic: %pycat accepts a string argument and pages it's contents.
444
445
445
446
446 2006-01-30 Ville Vainio <vivainio@gmail.com>
447 2006-01-30 Ville Vainio <vivainio@gmail.com>
447
448
448 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
449 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
449 Now %store and bookmarks work through PickleShare, meaning that
450 Now %store and bookmarks work through PickleShare, meaning that
450 concurrent access is possible and all ipython sessions see the
451 concurrent access is possible and all ipython sessions see the
451 same database situation all the time, instead of snapshot of
452 same database situation all the time, instead of snapshot of
452 the situation when the session was started. Hence, %bookmark
453 the situation when the session was started. Hence, %bookmark
453 results are immediately accessible from othes sessions. The database
454 results are immediately accessible from othes sessions. The database
454 is also available for use by user extensions. See:
455 is also available for use by user extensions. See:
455 http://www.python.org/pypi/pickleshare
456 http://www.python.org/pypi/pickleshare
456
457
457 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
458 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
458
459
459 * aliases can now be %store'd
460 * aliases can now be %store'd
460
461
461 * path.py move to Extensions so that pickleshare does not need
462 * path.py move to Extensions so that pickleshare does not need
462 IPython-specific import. Extensions added to pythonpath right
463 IPython-specific import. Extensions added to pythonpath right
463 at __init__.
464 at __init__.
464
465
465 * iplib.py: ipalias deprecated/redundant; aliases are converted and
466 * iplib.py: ipalias deprecated/redundant; aliases are converted and
466 called with _ip.system and the pre-transformed command string.
467 called with _ip.system and the pre-transformed command string.
467
468
468 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
469 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
469
470
470 * IPython/iplib.py (interact): Fix that we were not catching
471 * IPython/iplib.py (interact): Fix that we were not catching
471 KeyboardInterrupt exceptions properly. I'm not quite sure why the
472 KeyboardInterrupt exceptions properly. I'm not quite sure why the
472 logic here had to change, but it's fixed now.
473 logic here had to change, but it's fixed now.
473
474
474 2006-01-29 Ville Vainio <vivainio@gmail.com>
475 2006-01-29 Ville Vainio <vivainio@gmail.com>
475
476
476 * iplib.py: Try to import pyreadline on Windows.
477 * iplib.py: Try to import pyreadline on Windows.
477
478
478 2006-01-27 Ville Vainio <vivainio@gmail.com>
479 2006-01-27 Ville Vainio <vivainio@gmail.com>
479
480
480 * iplib.py: Expose ipapi as _ip in builtin namespace.
481 * iplib.py: Expose ipapi as _ip in builtin namespace.
481 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
482 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
482 and ip_set_hook (-> _ip.set_hook) redundant. % and !
483 and ip_set_hook (-> _ip.set_hook) redundant. % and !
483 syntax now produce _ip.* variant of the commands.
484 syntax now produce _ip.* variant of the commands.
484
485
485 * "_ip.options().autoedit_syntax = 2" automatically throws
486 * "_ip.options().autoedit_syntax = 2" automatically throws
486 user to editor for syntax error correction without prompting.
487 user to editor for syntax error correction without prompting.
487
488
488 2006-01-27 Ville Vainio <vivainio@gmail.com>
489 2006-01-27 Ville Vainio <vivainio@gmail.com>
489
490
490 * ipmaker.py: Give "realistic" sys.argv for scripts (without
491 * ipmaker.py: Give "realistic" sys.argv for scripts (without
491 'ipython' at argv[0]) executed through command line.
492 'ipython' at argv[0]) executed through command line.
492 NOTE: this DEPRECATES calling ipython with multiple scripts
493 NOTE: this DEPRECATES calling ipython with multiple scripts
493 ("ipython a.py b.py c.py")
494 ("ipython a.py b.py c.py")
494
495
495 * iplib.py, hooks.py: Added configurable input prefilter,
496 * iplib.py, hooks.py: Added configurable input prefilter,
496 named 'input_prefilter'. See ext_rescapture.py for example
497 named 'input_prefilter'. See ext_rescapture.py for example
497 usage.
498 usage.
498
499
499 * ext_rescapture.py, Magic.py: Better system command output capture
500 * ext_rescapture.py, Magic.py: Better system command output capture
500 through 'var = !ls' (deprecates user-visible %sc). Same notation
501 through 'var = !ls' (deprecates user-visible %sc). Same notation
501 applies for magics, 'var = %alias' assigns alias list to var.
502 applies for magics, 'var = %alias' assigns alias list to var.
502
503
503 * ipapi.py: added meta() for accessing extension-usable data store.
504 * ipapi.py: added meta() for accessing extension-usable data store.
504
505
505 * iplib.py: added InteractiveShell.getapi(). New magics should be
506 * iplib.py: added InteractiveShell.getapi(). New magics should be
506 written doing self.getapi() instead of using the shell directly.
507 written doing self.getapi() instead of using the shell directly.
507
508
508 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
509 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
509 %store foo >> ~/myfoo.txt to store variables to files (in clean
510 %store foo >> ~/myfoo.txt to store variables to files (in clean
510 textual form, not a restorable pickle).
511 textual form, not a restorable pickle).
511
512
512 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
513 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
513
514
514 * usage.py, Magic.py: added %quickref
515 * usage.py, Magic.py: added %quickref
515
516
516 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
517 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
517
518
518 * GetoptErrors when invoking magics etc. with wrong args
519 * GetoptErrors when invoking magics etc. with wrong args
519 are now more helpful:
520 are now more helpful:
520 GetoptError: option -l not recognized (allowed: "qb" )
521 GetoptError: option -l not recognized (allowed: "qb" )
521
522
522 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
523 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
523
524
524 * IPython/demo.py (Demo.show): Flush stdout after each block, so
525 * IPython/demo.py (Demo.show): Flush stdout after each block, so
525 computationally intensive blocks don't appear to stall the demo.
526 computationally intensive blocks don't appear to stall the demo.
526
527
527 2006-01-24 Ville Vainio <vivainio@gmail.com>
528 2006-01-24 Ville Vainio <vivainio@gmail.com>
528
529
529 * iplib.py, hooks.py: 'result_display' hook can return a non-None
530 * iplib.py, hooks.py: 'result_display' hook can return a non-None
530 value to manipulate resulting history entry.
531 value to manipulate resulting history entry.
531
532
532 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
533 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
533 to instance methods of IPApi class, to make extending an embedded
534 to instance methods of IPApi class, to make extending an embedded
534 IPython feasible. See ext_rehashdir.py for example usage.
535 IPython feasible. See ext_rehashdir.py for example usage.
535
536
536 * Merged 1071-1076 from banches/0.7.1
537 * Merged 1071-1076 from banches/0.7.1
537
538
538
539
539 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
540 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
540
541
541 * tools/release (daystamp): Fix build tools to use the new
542 * tools/release (daystamp): Fix build tools to use the new
542 eggsetup.py script to build lightweight eggs.
543 eggsetup.py script to build lightweight eggs.
543
544
544 * Applied changesets 1062 and 1064 before 0.7.1 release.
545 * Applied changesets 1062 and 1064 before 0.7.1 release.
545
546
546 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
547 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
547 see the raw input history (without conversions like %ls ->
548 see the raw input history (without conversions like %ls ->
548 ipmagic("ls")). After a request from W. Stein, SAGE
549 ipmagic("ls")). After a request from W. Stein, SAGE
549 (http://modular.ucsd.edu/sage) developer. This information is
550 (http://modular.ucsd.edu/sage) developer. This information is
550 stored in the input_hist_raw attribute of the IPython instance, so
551 stored in the input_hist_raw attribute of the IPython instance, so
551 developers can access it if needed (it's an InputList instance).
552 developers can access it if needed (it's an InputList instance).
552
553
553 * Versionstring = 0.7.2.svn
554 * Versionstring = 0.7.2.svn
554
555
555 * eggsetup.py: A separate script for constructing eggs, creates
556 * eggsetup.py: A separate script for constructing eggs, creates
556 proper launch scripts even on Windows (an .exe file in
557 proper launch scripts even on Windows (an .exe file in
557 \python24\scripts).
558 \python24\scripts).
558
559
559 * ipapi.py: launch_new_instance, launch entry point needed for the
560 * ipapi.py: launch_new_instance, launch entry point needed for the
560 egg.
561 egg.
561
562
562 2006-01-23 Ville Vainio <vivainio@gmail.com>
563 2006-01-23 Ville Vainio <vivainio@gmail.com>
563
564
564 * Added %cpaste magic for pasting python code
565 * Added %cpaste magic for pasting python code
565
566
566 2006-01-22 Ville Vainio <vivainio@gmail.com>
567 2006-01-22 Ville Vainio <vivainio@gmail.com>
567
568
568 * Merge from branches/0.7.1 into trunk, revs 1052-1057
569 * Merge from branches/0.7.1 into trunk, revs 1052-1057
569
570
570 * Versionstring = 0.7.2.svn
571 * Versionstring = 0.7.2.svn
571
572
572 * eggsetup.py: A separate script for constructing eggs, creates
573 * eggsetup.py: A separate script for constructing eggs, creates
573 proper launch scripts even on Windows (an .exe file in
574 proper launch scripts even on Windows (an .exe file in
574 \python24\scripts).
575 \python24\scripts).
575
576
576 * ipapi.py: launch_new_instance, launch entry point needed for the
577 * ipapi.py: launch_new_instance, launch entry point needed for the
577 egg.
578 egg.
578
579
579 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
580 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
580
581
581 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
582 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
582 %pfile foo would print the file for foo even if it was a binary.
583 %pfile foo would print the file for foo even if it was a binary.
583 Now, extensions '.so' and '.dll' are skipped.
584 Now, extensions '.so' and '.dll' are skipped.
584
585
585 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
586 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
586 bug, where macros would fail in all threaded modes. I'm not 100%
587 bug, where macros would fail in all threaded modes. I'm not 100%
587 sure, so I'm going to put out an rc instead of making a release
588 sure, so I'm going to put out an rc instead of making a release
588 today, and wait for feedback for at least a few days.
589 today, and wait for feedback for at least a few days.
589
590
590 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
591 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
591 it...) the handling of pasting external code with autoindent on.
592 it...) the handling of pasting external code with autoindent on.
592 To get out of a multiline input, the rule will appear for most
593 To get out of a multiline input, the rule will appear for most
593 users unchanged: two blank lines or change the indent level
594 users unchanged: two blank lines or change the indent level
594 proposed by IPython. But there is a twist now: you can
595 proposed by IPython. But there is a twist now: you can
595 add/subtract only *one or two spaces*. If you add/subtract three
596 add/subtract only *one or two spaces*. If you add/subtract three
596 or more (unless you completely delete the line), IPython will
597 or more (unless you completely delete the line), IPython will
597 accept that line, and you'll need to enter a second one of pure
598 accept that line, and you'll need to enter a second one of pure
598 whitespace. I know it sounds complicated, but I can't find a
599 whitespace. I know it sounds complicated, but I can't find a
599 different solution that covers all the cases, with the right
600 different solution that covers all the cases, with the right
600 heuristics. Hopefully in actual use, nobody will really notice
601 heuristics. Hopefully in actual use, nobody will really notice
601 all these strange rules and things will 'just work'.
602 all these strange rules and things will 'just work'.
602
603
603 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
604 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
604
605
605 * IPython/iplib.py (interact): catch exceptions which can be
606 * IPython/iplib.py (interact): catch exceptions which can be
606 triggered asynchronously by signal handlers. Thanks to an
607 triggered asynchronously by signal handlers. Thanks to an
607 automatic crash report, submitted by Colin Kingsley
608 automatic crash report, submitted by Colin Kingsley
608 <tercel-AT-gentoo.org>.
609 <tercel-AT-gentoo.org>.
609
610
610 2006-01-20 Ville Vainio <vivainio@gmail.com>
611 2006-01-20 Ville Vainio <vivainio@gmail.com>
611
612
612 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
613 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
613 (%rehashdir, very useful, try it out) of how to extend ipython
614 (%rehashdir, very useful, try it out) of how to extend ipython
614 with new magics. Also added Extensions dir to pythonpath to make
615 with new magics. Also added Extensions dir to pythonpath to make
615 importing extensions easy.
616 importing extensions easy.
616
617
617 * %store now complains when trying to store interactively declared
618 * %store now complains when trying to store interactively declared
618 classes / instances of those classes.
619 classes / instances of those classes.
619
620
620 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
621 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
621 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
622 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
622 if they exist, and ipy_user_conf.py with some defaults is created for
623 if they exist, and ipy_user_conf.py with some defaults is created for
623 the user.
624 the user.
624
625
625 * Startup rehashing done by the config file, not InterpreterExec.
626 * Startup rehashing done by the config file, not InterpreterExec.
626 This means system commands are available even without selecting the
627 This means system commands are available even without selecting the
627 pysh profile. It's the sensible default after all.
628 pysh profile. It's the sensible default after all.
628
629
629 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
630 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
630
631
631 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
632 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
632 multiline code with autoindent on working. But I am really not
633 multiline code with autoindent on working. But I am really not
633 sure, so this needs more testing. Will commit a debug-enabled
634 sure, so this needs more testing. Will commit a debug-enabled
634 version for now, while I test it some more, so that Ville and
635 version for now, while I test it some more, so that Ville and
635 others may also catch any problems. Also made
636 others may also catch any problems. Also made
636 self.indent_current_str() a method, to ensure that there's no
637 self.indent_current_str() a method, to ensure that there's no
637 chance of the indent space count and the corresponding string
638 chance of the indent space count and the corresponding string
638 falling out of sync. All code needing the string should just call
639 falling out of sync. All code needing the string should just call
639 the method.
640 the method.
640
641
641 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
642 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
642
643
643 * IPython/Magic.py (magic_edit): fix check for when users don't
644 * IPython/Magic.py (magic_edit): fix check for when users don't
644 save their output files, the try/except was in the wrong section.
645 save their output files, the try/except was in the wrong section.
645
646
646 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
647 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
647
648
648 * IPython/Magic.py (magic_run): fix __file__ global missing from
649 * IPython/Magic.py (magic_run): fix __file__ global missing from
649 script's namespace when executed via %run. After a report by
650 script's namespace when executed via %run. After a report by
650 Vivian.
651 Vivian.
651
652
652 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
653 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
653 when using python 2.4. The parent constructor changed in 2.4, and
654 when using python 2.4. The parent constructor changed in 2.4, and
654 we need to track it directly (we can't call it, as it messes up
655 we need to track it directly (we can't call it, as it messes up
655 readline and tab-completion inside our pdb would stop working).
656 readline and tab-completion inside our pdb would stop working).
656 After a bug report by R. Bernstein <rocky-AT-panix.com>.
657 After a bug report by R. Bernstein <rocky-AT-panix.com>.
657
658
658 2006-01-16 Ville Vainio <vivainio@gmail.com>
659 2006-01-16 Ville Vainio <vivainio@gmail.com>
659
660
660 * Ipython/magic.py:Reverted back to old %edit functionality
661 * Ipython/magic.py:Reverted back to old %edit functionality
661 that returns file contents on exit.
662 that returns file contents on exit.
662
663
663 * IPython/path.py: Added Jason Orendorff's "path" module to
664 * IPython/path.py: Added Jason Orendorff's "path" module to
664 IPython tree, http://www.jorendorff.com/articles/python/path/.
665 IPython tree, http://www.jorendorff.com/articles/python/path/.
665 You can get path objects conveniently through %sc, and !!, e.g.:
666 You can get path objects conveniently through %sc, and !!, e.g.:
666 sc files=ls
667 sc files=ls
667 for p in files.paths: # or files.p
668 for p in files.paths: # or files.p
668 print p,p.mtime
669 print p,p.mtime
669
670
670 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
671 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
671 now work again without considering the exclusion regexp -
672 now work again without considering the exclusion regexp -
672 hence, things like ',foo my/path' turn to 'foo("my/path")'
673 hence, things like ',foo my/path' turn to 'foo("my/path")'
673 instead of syntax error.
674 instead of syntax error.
674
675
675
676
676 2006-01-14 Ville Vainio <vivainio@gmail.com>
677 2006-01-14 Ville Vainio <vivainio@gmail.com>
677
678
678 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
679 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
679 ipapi decorators for python 2.4 users, options() provides access to rc
680 ipapi decorators for python 2.4 users, options() provides access to rc
680 data.
681 data.
681
682
682 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
683 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
683 as path separators (even on Linux ;-). Space character after
684 as path separators (even on Linux ;-). Space character after
684 backslash (as yielded by tab completer) is still space;
685 backslash (as yielded by tab completer) is still space;
685 "%cd long\ name" works as expected.
686 "%cd long\ name" works as expected.
686
687
687 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
688 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
688 as "chain of command", with priority. API stays the same,
689 as "chain of command", with priority. API stays the same,
689 TryNext exception raised by a hook function signals that
690 TryNext exception raised by a hook function signals that
690 current hook failed and next hook should try handling it, as
691 current hook failed and next hook should try handling it, as
691 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
692 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
692 requested configurable display hook, which is now implemented.
693 requested configurable display hook, which is now implemented.
693
694
694 2006-01-13 Ville Vainio <vivainio@gmail.com>
695 2006-01-13 Ville Vainio <vivainio@gmail.com>
695
696
696 * IPython/platutils*.py: platform specific utility functions,
697 * IPython/platutils*.py: platform specific utility functions,
697 so far only set_term_title is implemented (change terminal
698 so far only set_term_title is implemented (change terminal
698 label in windowing systems). %cd now changes the title to
699 label in windowing systems). %cd now changes the title to
699 current dir.
700 current dir.
700
701
701 * IPython/Release.py: Added myself to "authors" list,
702 * IPython/Release.py: Added myself to "authors" list,
702 had to create new files.
703 had to create new files.
703
704
704 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
705 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
705 shell escape; not a known bug but had potential to be one in the
706 shell escape; not a known bug but had potential to be one in the
706 future.
707 future.
707
708
708 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
709 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
709 extension API for IPython! See the module for usage example. Fix
710 extension API for IPython! See the module for usage example. Fix
710 OInspect for docstring-less magic functions.
711 OInspect for docstring-less magic functions.
711
712
712
713
713 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
714 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
714
715
715 * IPython/iplib.py (raw_input): temporarily deactivate all
716 * IPython/iplib.py (raw_input): temporarily deactivate all
716 attempts at allowing pasting of code with autoindent on. It
717 attempts at allowing pasting of code with autoindent on. It
717 introduced bugs (reported by Prabhu) and I can't seem to find a
718 introduced bugs (reported by Prabhu) and I can't seem to find a
718 robust combination which works in all cases. Will have to revisit
719 robust combination which works in all cases. Will have to revisit
719 later.
720 later.
720
721
721 * IPython/genutils.py: remove isspace() function. We've dropped
722 * IPython/genutils.py: remove isspace() function. We've dropped
722 2.2 compatibility, so it's OK to use the string method.
723 2.2 compatibility, so it's OK to use the string method.
723
724
724 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
725 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
725
726
726 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
727 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
727 matching what NOT to autocall on, to include all python binary
728 matching what NOT to autocall on, to include all python binary
728 operators (including things like 'and', 'or', 'is' and 'in').
729 operators (including things like 'and', 'or', 'is' and 'in').
729 Prompted by a bug report on 'foo & bar', but I realized we had
730 Prompted by a bug report on 'foo & bar', but I realized we had
730 many more potential bug cases with other operators. The regexp is
731 many more potential bug cases with other operators. The regexp is
731 self.re_exclude_auto, it's fairly commented.
732 self.re_exclude_auto, it's fairly commented.
732
733
733 2006-01-12 Ville Vainio <vivainio@gmail.com>
734 2006-01-12 Ville Vainio <vivainio@gmail.com>
734
735
735 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
736 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
736 Prettified and hardened string/backslash quoting with ipsystem(),
737 Prettified and hardened string/backslash quoting with ipsystem(),
737 ipalias() and ipmagic(). Now even \ characters are passed to
738 ipalias() and ipmagic(). Now even \ characters are passed to
738 %magics, !shell escapes and aliases exactly as they are in the
739 %magics, !shell escapes and aliases exactly as they are in the
739 ipython command line. Should improve backslash experience,
740 ipython command line. Should improve backslash experience,
740 particularly in Windows (path delimiter for some commands that
741 particularly in Windows (path delimiter for some commands that
741 won't understand '/'), but Unix benefits as well (regexps). %cd
742 won't understand '/'), but Unix benefits as well (regexps). %cd
742 magic still doesn't support backslash path delimiters, though. Also
743 magic still doesn't support backslash path delimiters, though. Also
743 deleted all pretense of supporting multiline command strings in
744 deleted all pretense of supporting multiline command strings in
744 !system or %magic commands. Thanks to Jerry McRae for suggestions.
745 !system or %magic commands. Thanks to Jerry McRae for suggestions.
745
746
746 * doc/build_doc_instructions.txt added. Documentation on how to
747 * doc/build_doc_instructions.txt added. Documentation on how to
747 use doc/update_manual.py, added yesterday. Both files contributed
748 use doc/update_manual.py, added yesterday. Both files contributed
748 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
749 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
749 doc/*.sh for deprecation at a later date.
750 doc/*.sh for deprecation at a later date.
750
751
751 * /ipython.py Added ipython.py to root directory for
752 * /ipython.py Added ipython.py to root directory for
752 zero-installation (tar xzvf ipython.tgz; cd ipython; python
753 zero-installation (tar xzvf ipython.tgz; cd ipython; python
753 ipython.py) and development convenience (no need to kee doing
754 ipython.py) and development convenience (no need to kee doing
754 "setup.py install" between changes).
755 "setup.py install" between changes).
755
756
756 * Made ! and !! shell escapes work (again) in multiline expressions:
757 * Made ! and !! shell escapes work (again) in multiline expressions:
757 if 1:
758 if 1:
758 !ls
759 !ls
759 !!ls
760 !!ls
760
761
761 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
762 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
762
763
763 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
764 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
764 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
765 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
765 module in case-insensitive installation. Was causing crashes
766 module in case-insensitive installation. Was causing crashes
766 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
767 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
767
768
768 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
769 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
769 <marienz-AT-gentoo.org>, closes
770 <marienz-AT-gentoo.org>, closes
770 http://www.scipy.net/roundup/ipython/issue51.
771 http://www.scipy.net/roundup/ipython/issue51.
771
772
772 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
773 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
773
774
774 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
775 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
775 problem of excessive CPU usage under *nix and keyboard lag under
776 problem of excessive CPU usage under *nix and keyboard lag under
776 win32.
777 win32.
777
778
778 2006-01-10 *** Released version 0.7.0
779 2006-01-10 *** Released version 0.7.0
779
780
780 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
781 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
781
782
782 * IPython/Release.py (revision): tag version number to 0.7.0,
783 * IPython/Release.py (revision): tag version number to 0.7.0,
783 ready for release.
784 ready for release.
784
785
785 * IPython/Magic.py (magic_edit): Add print statement to %edit so
786 * IPython/Magic.py (magic_edit): Add print statement to %edit so
786 it informs the user of the name of the temp. file used. This can
787 it informs the user of the name of the temp. file used. This can
787 help if you decide later to reuse that same file, so you know
788 help if you decide later to reuse that same file, so you know
788 where to copy the info from.
789 where to copy the info from.
789
790
790 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
791 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
791
792
792 * setup_bdist_egg.py: little script to build an egg. Added
793 * setup_bdist_egg.py: little script to build an egg. Added
793 support in the release tools as well.
794 support in the release tools as well.
794
795
795 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
796 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
796
797
797 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
798 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
798 version selection (new -wxversion command line and ipythonrc
799 version selection (new -wxversion command line and ipythonrc
799 parameter). Patch contributed by Arnd Baecker
800 parameter). Patch contributed by Arnd Baecker
800 <arnd.baecker-AT-web.de>.
801 <arnd.baecker-AT-web.de>.
801
802
802 * IPython/iplib.py (embed_mainloop): fix tab-completion in
803 * IPython/iplib.py (embed_mainloop): fix tab-completion in
803 embedded instances, for variables defined at the interactive
804 embedded instances, for variables defined at the interactive
804 prompt of the embedded ipython. Reported by Arnd.
805 prompt of the embedded ipython. Reported by Arnd.
805
806
806 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
807 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
807 it can be used as a (stateful) toggle, or with a direct parameter.
808 it can be used as a (stateful) toggle, or with a direct parameter.
808
809
809 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
810 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
810 could be triggered in certain cases and cause the traceback
811 could be triggered in certain cases and cause the traceback
811 printer not to work.
812 printer not to work.
812
813
813 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
814 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
814
815
815 * IPython/iplib.py (_should_recompile): Small fix, closes
816 * IPython/iplib.py (_should_recompile): Small fix, closes
816 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
817 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
817
818
818 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
819 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
819
820
820 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
821 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
821 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
822 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
822 Moad for help with tracking it down.
823 Moad for help with tracking it down.
823
824
824 * IPython/iplib.py (handle_auto): fix autocall handling for
825 * IPython/iplib.py (handle_auto): fix autocall handling for
825 objects which support BOTH __getitem__ and __call__ (so that f [x]
826 objects which support BOTH __getitem__ and __call__ (so that f [x]
826 is left alone, instead of becoming f([x]) automatically).
827 is left alone, instead of becoming f([x]) automatically).
827
828
828 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
829 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
829 Ville's patch.
830 Ville's patch.
830
831
831 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
832 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
832
833
833 * IPython/iplib.py (handle_auto): changed autocall semantics to
834 * IPython/iplib.py (handle_auto): changed autocall semantics to
834 include 'smart' mode, where the autocall transformation is NOT
835 include 'smart' mode, where the autocall transformation is NOT
835 applied if there are no arguments on the line. This allows you to
836 applied if there are no arguments on the line. This allows you to
836 just type 'foo' if foo is a callable to see its internal form,
837 just type 'foo' if foo is a callable to see its internal form,
837 instead of having it called with no arguments (typically a
838 instead of having it called with no arguments (typically a
838 mistake). The old 'full' autocall still exists: for that, you
839 mistake). The old 'full' autocall still exists: for that, you
839 need to set the 'autocall' parameter to 2 in your ipythonrc file.
840 need to set the 'autocall' parameter to 2 in your ipythonrc file.
840
841
841 * IPython/completer.py (Completer.attr_matches): add
842 * IPython/completer.py (Completer.attr_matches): add
842 tab-completion support for Enthoughts' traits. After a report by
843 tab-completion support for Enthoughts' traits. After a report by
843 Arnd and a patch by Prabhu.
844 Arnd and a patch by Prabhu.
844
845
845 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
846 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
846
847
847 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
848 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
848 Schmolck's patch to fix inspect.getinnerframes().
849 Schmolck's patch to fix inspect.getinnerframes().
849
850
850 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
851 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
851 for embedded instances, regarding handling of namespaces and items
852 for embedded instances, regarding handling of namespaces and items
852 added to the __builtin__ one. Multiple embedded instances and
853 added to the __builtin__ one. Multiple embedded instances and
853 recursive embeddings should work better now (though I'm not sure
854 recursive embeddings should work better now (though I'm not sure
854 I've got all the corner cases fixed, that code is a bit of a brain
855 I've got all the corner cases fixed, that code is a bit of a brain
855 twister).
856 twister).
856
857
857 * IPython/Magic.py (magic_edit): added support to edit in-memory
858 * IPython/Magic.py (magic_edit): added support to edit in-memory
858 macros (automatically creates the necessary temp files). %edit
859 macros (automatically creates the necessary temp files). %edit
859 also doesn't return the file contents anymore, it's just noise.
860 also doesn't return the file contents anymore, it's just noise.
860
861
861 * IPython/completer.py (Completer.attr_matches): revert change to
862 * IPython/completer.py (Completer.attr_matches): revert change to
862 complete only on attributes listed in __all__. I realized it
863 complete only on attributes listed in __all__. I realized it
863 cripples the tab-completion system as a tool for exploring the
864 cripples the tab-completion system as a tool for exploring the
864 internals of unknown libraries (it renders any non-__all__
865 internals of unknown libraries (it renders any non-__all__
865 attribute off-limits). I got bit by this when trying to see
866 attribute off-limits). I got bit by this when trying to see
866 something inside the dis module.
867 something inside the dis module.
867
868
868 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
869 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
869
870
870 * IPython/iplib.py (InteractiveShell.__init__): add .meta
871 * IPython/iplib.py (InteractiveShell.__init__): add .meta
871 namespace for users and extension writers to hold data in. This
872 namespace for users and extension writers to hold data in. This
872 follows the discussion in
873 follows the discussion in
873 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
874 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
874
875
875 * IPython/completer.py (IPCompleter.complete): small patch to help
876 * IPython/completer.py (IPCompleter.complete): small patch to help
876 tab-completion under Emacs, after a suggestion by John Barnard
877 tab-completion under Emacs, after a suggestion by John Barnard
877 <barnarj-AT-ccf.org>.
878 <barnarj-AT-ccf.org>.
878
879
879 * IPython/Magic.py (Magic.extract_input_slices): added support for
880 * IPython/Magic.py (Magic.extract_input_slices): added support for
880 the slice notation in magics to use N-M to represent numbers N...M
881 the slice notation in magics to use N-M to represent numbers N...M
881 (closed endpoints). This is used by %macro and %save.
882 (closed endpoints). This is used by %macro and %save.
882
883
883 * IPython/completer.py (Completer.attr_matches): for modules which
884 * IPython/completer.py (Completer.attr_matches): for modules which
884 define __all__, complete only on those. After a patch by Jeffrey
885 define __all__, complete only on those. After a patch by Jeffrey
885 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
886 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
886 speed up this routine.
887 speed up this routine.
887
888
888 * IPython/Logger.py (Logger.log): fix a history handling bug. I
889 * IPython/Logger.py (Logger.log): fix a history handling bug. I
889 don't know if this is the end of it, but the behavior now is
890 don't know if this is the end of it, but the behavior now is
890 certainly much more correct. Note that coupled with macros,
891 certainly much more correct. Note that coupled with macros,
891 slightly surprising (at first) behavior may occur: a macro will in
892 slightly surprising (at first) behavior may occur: a macro will in
892 general expand to multiple lines of input, so upon exiting, the
893 general expand to multiple lines of input, so upon exiting, the
893 in/out counters will both be bumped by the corresponding amount
894 in/out counters will both be bumped by the corresponding amount
894 (as if the macro's contents had been typed interactively). Typing
895 (as if the macro's contents had been typed interactively). Typing
895 %hist will reveal the intermediate (silently processed) lines.
896 %hist will reveal the intermediate (silently processed) lines.
896
897
897 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
898 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
898 pickle to fail (%run was overwriting __main__ and not restoring
899 pickle to fail (%run was overwriting __main__ and not restoring
899 it, but pickle relies on __main__ to operate).
900 it, but pickle relies on __main__ to operate).
900
901
901 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
902 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
902 using properties, but forgot to make the main InteractiveShell
903 using properties, but forgot to make the main InteractiveShell
903 class a new-style class. Properties fail silently, and
904 class a new-style class. Properties fail silently, and
904 misteriously, with old-style class (getters work, but
905 misteriously, with old-style class (getters work, but
905 setters don't do anything).
906 setters don't do anything).
906
907
907 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
908 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
908
909
909 * IPython/Magic.py (magic_history): fix history reporting bug (I
910 * IPython/Magic.py (magic_history): fix history reporting bug (I
910 know some nasties are still there, I just can't seem to find a
911 know some nasties are still there, I just can't seem to find a
911 reproducible test case to track them down; the input history is
912 reproducible test case to track them down; the input history is
912 falling out of sync...)
913 falling out of sync...)
913
914
914 * IPython/iplib.py (handle_shell_escape): fix bug where both
915 * IPython/iplib.py (handle_shell_escape): fix bug where both
915 aliases and system accesses where broken for indented code (such
916 aliases and system accesses where broken for indented code (such
916 as loops).
917 as loops).
917
918
918 * IPython/genutils.py (shell): fix small but critical bug for
919 * IPython/genutils.py (shell): fix small but critical bug for
919 win32 system access.
920 win32 system access.
920
921
921 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
922 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
922
923
923 * IPython/iplib.py (showtraceback): remove use of the
924 * IPython/iplib.py (showtraceback): remove use of the
924 sys.last_{type/value/traceback} structures, which are non
925 sys.last_{type/value/traceback} structures, which are non
925 thread-safe.
926 thread-safe.
926 (_prefilter): change control flow to ensure that we NEVER
927 (_prefilter): change control flow to ensure that we NEVER
927 introspect objects when autocall is off. This will guarantee that
928 introspect objects when autocall is off. This will guarantee that
928 having an input line of the form 'x.y', where access to attribute
929 having an input line of the form 'x.y', where access to attribute
929 'y' has side effects, doesn't trigger the side effect TWICE. It
930 'y' has side effects, doesn't trigger the side effect TWICE. It
930 is important to note that, with autocall on, these side effects
931 is important to note that, with autocall on, these side effects
931 can still happen.
932 can still happen.
932 (ipsystem): new builtin, to complete the ip{magic/alias/system}
933 (ipsystem): new builtin, to complete the ip{magic/alias/system}
933 trio. IPython offers these three kinds of special calls which are
934 trio. IPython offers these three kinds of special calls which are
934 not python code, and it's a good thing to have their call method
935 not python code, and it's a good thing to have their call method
935 be accessible as pure python functions (not just special syntax at
936 be accessible as pure python functions (not just special syntax at
936 the command line). It gives us a better internal implementation
937 the command line). It gives us a better internal implementation
937 structure, as well as exposing these for user scripting more
938 structure, as well as exposing these for user scripting more
938 cleanly.
939 cleanly.
939
940
940 * IPython/macro.py (Macro.__init__): moved macros to a standalone
941 * IPython/macro.py (Macro.__init__): moved macros to a standalone
941 file. Now that they'll be more likely to be used with the
942 file. Now that they'll be more likely to be used with the
942 persistance system (%store), I want to make sure their module path
943 persistance system (%store), I want to make sure their module path
943 doesn't change in the future, so that we don't break things for
944 doesn't change in the future, so that we don't break things for
944 users' persisted data.
945 users' persisted data.
945
946
946 * IPython/iplib.py (autoindent_update): move indentation
947 * IPython/iplib.py (autoindent_update): move indentation
947 management into the _text_ processing loop, not the keyboard
948 management into the _text_ processing loop, not the keyboard
948 interactive one. This is necessary to correctly process non-typed
949 interactive one. This is necessary to correctly process non-typed
949 multiline input (such as macros).
950 multiline input (such as macros).
950
951
951 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
952 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
952 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
953 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
953 which was producing problems in the resulting manual.
954 which was producing problems in the resulting manual.
954 (magic_whos): improve reporting of instances (show their class,
955 (magic_whos): improve reporting of instances (show their class,
955 instead of simply printing 'instance' which isn't terribly
956 instead of simply printing 'instance' which isn't terribly
956 informative).
957 informative).
957
958
958 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
959 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
959 (minor mods) to support network shares under win32.
960 (minor mods) to support network shares under win32.
960
961
961 * IPython/winconsole.py (get_console_size): add new winconsole
962 * IPython/winconsole.py (get_console_size): add new winconsole
962 module and fixes to page_dumb() to improve its behavior under
963 module and fixes to page_dumb() to improve its behavior under
963 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
964 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
964
965
965 * IPython/Magic.py (Macro): simplified Macro class to just
966 * IPython/Magic.py (Macro): simplified Macro class to just
966 subclass list. We've had only 2.2 compatibility for a very long
967 subclass list. We've had only 2.2 compatibility for a very long
967 time, yet I was still avoiding subclassing the builtin types. No
968 time, yet I was still avoiding subclassing the builtin types. No
968 more (I'm also starting to use properties, though I won't shift to
969 more (I'm also starting to use properties, though I won't shift to
969 2.3-specific features quite yet).
970 2.3-specific features quite yet).
970 (magic_store): added Ville's patch for lightweight variable
971 (magic_store): added Ville's patch for lightweight variable
971 persistence, after a request on the user list by Matt Wilkie
972 persistence, after a request on the user list by Matt Wilkie
972 <maphew-AT-gmail.com>. The new %store magic's docstring has full
973 <maphew-AT-gmail.com>. The new %store magic's docstring has full
973 details.
974 details.
974
975
975 * IPython/iplib.py (InteractiveShell.post_config_initialization):
976 * IPython/iplib.py (InteractiveShell.post_config_initialization):
976 changed the default logfile name from 'ipython.log' to
977 changed the default logfile name from 'ipython.log' to
977 'ipython_log.py'. These logs are real python files, and now that
978 'ipython_log.py'. These logs are real python files, and now that
978 we have much better multiline support, people are more likely to
979 we have much better multiline support, people are more likely to
979 want to use them as such. Might as well name them correctly.
980 want to use them as such. Might as well name them correctly.
980
981
981 * IPython/Magic.py: substantial cleanup. While we can't stop
982 * IPython/Magic.py: substantial cleanup. While we can't stop
982 using magics as mixins, due to the existing customizations 'out
983 using magics as mixins, due to the existing customizations 'out
983 there' which rely on the mixin naming conventions, at least I
984 there' which rely on the mixin naming conventions, at least I
984 cleaned out all cross-class name usage. So once we are OK with
985 cleaned out all cross-class name usage. So once we are OK with
985 breaking compatibility, the two systems can be separated.
986 breaking compatibility, the two systems can be separated.
986
987
987 * IPython/Logger.py: major cleanup. This one is NOT a mixin
988 * IPython/Logger.py: major cleanup. This one is NOT a mixin
988 anymore, and the class is a fair bit less hideous as well. New
989 anymore, and the class is a fair bit less hideous as well. New
989 features were also introduced: timestamping of input, and logging
990 features were also introduced: timestamping of input, and logging
990 of output results. These are user-visible with the -t and -o
991 of output results. These are user-visible with the -t and -o
991 options to %logstart. Closes
992 options to %logstart. Closes
992 http://www.scipy.net/roundup/ipython/issue11 and a request by
993 http://www.scipy.net/roundup/ipython/issue11 and a request by
993 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
994 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
994
995
995 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
996 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
996
997
997 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
998 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
998 better hadnle backslashes in paths. See the thread 'More Windows
999 better hadnle backslashes in paths. See the thread 'More Windows
999 questions part 2 - \/ characters revisited' on the iypthon user
1000 questions part 2 - \/ characters revisited' on the iypthon user
1000 list:
1001 list:
1001 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1002 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1002
1003
1003 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1004 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1004
1005
1005 (InteractiveShell.__init__): change threaded shells to not use the
1006 (InteractiveShell.__init__): change threaded shells to not use the
1006 ipython crash handler. This was causing more problems than not,
1007 ipython crash handler. This was causing more problems than not,
1007 as exceptions in the main thread (GUI code, typically) would
1008 as exceptions in the main thread (GUI code, typically) would
1008 always show up as a 'crash', when they really weren't.
1009 always show up as a 'crash', when they really weren't.
1009
1010
1010 The colors and exception mode commands (%colors/%xmode) have been
1011 The colors and exception mode commands (%colors/%xmode) have been
1011 synchronized to also take this into account, so users can get
1012 synchronized to also take this into account, so users can get
1012 verbose exceptions for their threaded code as well. I also added
1013 verbose exceptions for their threaded code as well. I also added
1013 support for activating pdb inside this exception handler as well,
1014 support for activating pdb inside this exception handler as well,
1014 so now GUI authors can use IPython's enhanced pdb at runtime.
1015 so now GUI authors can use IPython's enhanced pdb at runtime.
1015
1016
1016 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1017 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1017 true by default, and add it to the shipped ipythonrc file. Since
1018 true by default, and add it to the shipped ipythonrc file. Since
1018 this asks the user before proceeding, I think it's OK to make it
1019 this asks the user before proceeding, I think it's OK to make it
1019 true by default.
1020 true by default.
1020
1021
1021 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1022 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1022 of the previous special-casing of input in the eval loop. I think
1023 of the previous special-casing of input in the eval loop. I think
1023 this is cleaner, as they really are commands and shouldn't have
1024 this is cleaner, as they really are commands and shouldn't have
1024 a special role in the middle of the core code.
1025 a special role in the middle of the core code.
1025
1026
1026 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1027 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1027
1028
1028 * IPython/iplib.py (edit_syntax_error): added support for
1029 * IPython/iplib.py (edit_syntax_error): added support for
1029 automatically reopening the editor if the file had a syntax error
1030 automatically reopening the editor if the file had a syntax error
1030 in it. Thanks to scottt who provided the patch at:
1031 in it. Thanks to scottt who provided the patch at:
1031 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1032 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1032 version committed).
1033 version committed).
1033
1034
1034 * IPython/iplib.py (handle_normal): add suport for multi-line
1035 * IPython/iplib.py (handle_normal): add suport for multi-line
1035 input with emtpy lines. This fixes
1036 input with emtpy lines. This fixes
1036 http://www.scipy.net/roundup/ipython/issue43 and a similar
1037 http://www.scipy.net/roundup/ipython/issue43 and a similar
1037 discussion on the user list.
1038 discussion on the user list.
1038
1039
1039 WARNING: a behavior change is necessarily introduced to support
1040 WARNING: a behavior change is necessarily introduced to support
1040 blank lines: now a single blank line with whitespace does NOT
1041 blank lines: now a single blank line with whitespace does NOT
1041 break the input loop, which means that when autoindent is on, by
1042 break the input loop, which means that when autoindent is on, by
1042 default hitting return on the next (indented) line does NOT exit.
1043 default hitting return on the next (indented) line does NOT exit.
1043
1044
1044 Instead, to exit a multiline input you can either have:
1045 Instead, to exit a multiline input you can either have:
1045
1046
1046 - TWO whitespace lines (just hit return again), or
1047 - TWO whitespace lines (just hit return again), or
1047 - a single whitespace line of a different length than provided
1048 - a single whitespace line of a different length than provided
1048 by the autoindent (add or remove a space).
1049 by the autoindent (add or remove a space).
1049
1050
1050 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1051 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1051 module to better organize all readline-related functionality.
1052 module to better organize all readline-related functionality.
1052 I've deleted FlexCompleter and put all completion clases here.
1053 I've deleted FlexCompleter and put all completion clases here.
1053
1054
1054 * IPython/iplib.py (raw_input): improve indentation management.
1055 * IPython/iplib.py (raw_input): improve indentation management.
1055 It is now possible to paste indented code with autoindent on, and
1056 It is now possible to paste indented code with autoindent on, and
1056 the code is interpreted correctly (though it still looks bad on
1057 the code is interpreted correctly (though it still looks bad on
1057 screen, due to the line-oriented nature of ipython).
1058 screen, due to the line-oriented nature of ipython).
1058 (MagicCompleter.complete): change behavior so that a TAB key on an
1059 (MagicCompleter.complete): change behavior so that a TAB key on an
1059 otherwise empty line actually inserts a tab, instead of completing
1060 otherwise empty line actually inserts a tab, instead of completing
1060 on the entire global namespace. This makes it easier to use the
1061 on the entire global namespace. This makes it easier to use the
1061 TAB key for indentation. After a request by Hans Meine
1062 TAB key for indentation. After a request by Hans Meine
1062 <hans_meine-AT-gmx.net>
1063 <hans_meine-AT-gmx.net>
1063 (_prefilter): add support so that typing plain 'exit' or 'quit'
1064 (_prefilter): add support so that typing plain 'exit' or 'quit'
1064 does a sensible thing. Originally I tried to deviate as little as
1065 does a sensible thing. Originally I tried to deviate as little as
1065 possible from the default python behavior, but even that one may
1066 possible from the default python behavior, but even that one may
1066 change in this direction (thread on python-dev to that effect).
1067 change in this direction (thread on python-dev to that effect).
1067 Regardless, ipython should do the right thing even if CPython's
1068 Regardless, ipython should do the right thing even if CPython's
1068 '>>>' prompt doesn't.
1069 '>>>' prompt doesn't.
1069 (InteractiveShell): removed subclassing code.InteractiveConsole
1070 (InteractiveShell): removed subclassing code.InteractiveConsole
1070 class. By now we'd overridden just about all of its methods: I've
1071 class. By now we'd overridden just about all of its methods: I've
1071 copied the remaining two over, and now ipython is a standalone
1072 copied the remaining two over, and now ipython is a standalone
1072 class. This will provide a clearer picture for the chainsaw
1073 class. This will provide a clearer picture for the chainsaw
1073 branch refactoring.
1074 branch refactoring.
1074
1075
1075 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1076 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1076
1077
1077 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1078 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1078 failures for objects which break when dir() is called on them.
1079 failures for objects which break when dir() is called on them.
1079
1080
1080 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1081 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1081 distinct local and global namespaces in the completer API. This
1082 distinct local and global namespaces in the completer API. This
1082 change allows us top properly handle completion with distinct
1083 change allows us top properly handle completion with distinct
1083 scopes, including in embedded instances (this had never really
1084 scopes, including in embedded instances (this had never really
1084 worked correctly).
1085 worked correctly).
1085
1086
1086 Note: this introduces a change in the constructor for
1087 Note: this introduces a change in the constructor for
1087 MagicCompleter, as a new global_namespace parameter is now the
1088 MagicCompleter, as a new global_namespace parameter is now the
1088 second argument (the others were bumped one position).
1089 second argument (the others were bumped one position).
1089
1090
1090 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1091 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1091
1092
1092 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1093 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1093 embedded instances (which can be done now thanks to Vivian's
1094 embedded instances (which can be done now thanks to Vivian's
1094 frame-handling fixes for pdb).
1095 frame-handling fixes for pdb).
1095 (InteractiveShell.__init__): Fix namespace handling problem in
1096 (InteractiveShell.__init__): Fix namespace handling problem in
1096 embedded instances. We were overwriting __main__ unconditionally,
1097 embedded instances. We were overwriting __main__ unconditionally,
1097 and this should only be done for 'full' (non-embedded) IPython;
1098 and this should only be done for 'full' (non-embedded) IPython;
1098 embedded instances must respect the caller's __main__. Thanks to
1099 embedded instances must respect the caller's __main__. Thanks to
1099 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1100 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1100
1101
1101 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1102 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1102
1103
1103 * setup.py: added download_url to setup(). This registers the
1104 * setup.py: added download_url to setup(). This registers the
1104 download address at PyPI, which is not only useful to humans
1105 download address at PyPI, which is not only useful to humans
1105 browsing the site, but is also picked up by setuptools (the Eggs
1106 browsing the site, but is also picked up by setuptools (the Eggs
1106 machinery). Thanks to Ville and R. Kern for the info/discussion
1107 machinery). Thanks to Ville and R. Kern for the info/discussion
1107 on this.
1108 on this.
1108
1109
1109 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1110 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1110
1111
1111 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1112 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1112 This brings a lot of nice functionality to the pdb mode, which now
1113 This brings a lot of nice functionality to the pdb mode, which now
1113 has tab-completion, syntax highlighting, and better stack handling
1114 has tab-completion, syntax highlighting, and better stack handling
1114 than before. Many thanks to Vivian De Smedt
1115 than before. Many thanks to Vivian De Smedt
1115 <vivian-AT-vdesmedt.com> for the original patches.
1116 <vivian-AT-vdesmedt.com> for the original patches.
1116
1117
1117 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1118 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1118
1119
1119 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1120 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1120 sequence to consistently accept the banner argument. The
1121 sequence to consistently accept the banner argument. The
1121 inconsistency was tripping SAGE, thanks to Gary Zablackis
1122 inconsistency was tripping SAGE, thanks to Gary Zablackis
1122 <gzabl-AT-yahoo.com> for the report.
1123 <gzabl-AT-yahoo.com> for the report.
1123
1124
1124 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1125 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1125
1126
1126 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1127 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1127 Fix bug where a naked 'alias' call in the ipythonrc file would
1128 Fix bug where a naked 'alias' call in the ipythonrc file would
1128 cause a crash. Bug reported by Jorgen Stenarson.
1129 cause a crash. Bug reported by Jorgen Stenarson.
1129
1130
1130 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1131 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1131
1132
1132 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1133 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1133 startup time.
1134 startup time.
1134
1135
1135 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1136 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1136 instances had introduced a bug with globals in normal code. Now
1137 instances had introduced a bug with globals in normal code. Now
1137 it's working in all cases.
1138 it's working in all cases.
1138
1139
1139 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1140 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1140 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1141 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1141 has been introduced to set the default case sensitivity of the
1142 has been introduced to set the default case sensitivity of the
1142 searches. Users can still select either mode at runtime on a
1143 searches. Users can still select either mode at runtime on a
1143 per-search basis.
1144 per-search basis.
1144
1145
1145 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1146 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1146
1147
1147 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1148 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1148 attributes in wildcard searches for subclasses. Modified version
1149 attributes in wildcard searches for subclasses. Modified version
1149 of a patch by Jorgen.
1150 of a patch by Jorgen.
1150
1151
1151 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1152 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1152
1153
1153 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1154 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1154 embedded instances. I added a user_global_ns attribute to the
1155 embedded instances. I added a user_global_ns attribute to the
1155 InteractiveShell class to handle this.
1156 InteractiveShell class to handle this.
1156
1157
1157 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1158 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1158
1159
1159 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1160 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1160 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1161 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1161 (reported under win32, but may happen also in other platforms).
1162 (reported under win32, but may happen also in other platforms).
1162 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1163 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1163
1164
1164 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1165 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1165
1166
1166 * IPython/Magic.py (magic_psearch): new support for wildcard
1167 * IPython/Magic.py (magic_psearch): new support for wildcard
1167 patterns. Now, typing ?a*b will list all names which begin with a
1168 patterns. Now, typing ?a*b will list all names which begin with a
1168 and end in b, for example. The %psearch magic has full
1169 and end in b, for example. The %psearch magic has full
1169 docstrings. Many thanks to JΓΆrgen Stenarson
1170 docstrings. Many thanks to JΓΆrgen Stenarson
1170 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1171 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1171 implementing this functionality.
1172 implementing this functionality.
1172
1173
1173 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1174 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1174
1175
1175 * Manual: fixed long-standing annoyance of double-dashes (as in
1176 * Manual: fixed long-standing annoyance of double-dashes (as in
1176 --prefix=~, for example) being stripped in the HTML version. This
1177 --prefix=~, for example) being stripped in the HTML version. This
1177 is a latex2html bug, but a workaround was provided. Many thanks
1178 is a latex2html bug, but a workaround was provided. Many thanks
1178 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1179 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1179 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1180 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1180 rolling. This seemingly small issue had tripped a number of users
1181 rolling. This seemingly small issue had tripped a number of users
1181 when first installing, so I'm glad to see it gone.
1182 when first installing, so I'm glad to see it gone.
1182
1183
1183 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1184 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1184
1185
1185 * IPython/Extensions/numeric_formats.py: fix missing import,
1186 * IPython/Extensions/numeric_formats.py: fix missing import,
1186 reported by Stephen Walton.
1187 reported by Stephen Walton.
1187
1188
1188 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1189 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1189
1190
1190 * IPython/demo.py: finish demo module, fully documented now.
1191 * IPython/demo.py: finish demo module, fully documented now.
1191
1192
1192 * IPython/genutils.py (file_read): simple little utility to read a
1193 * IPython/genutils.py (file_read): simple little utility to read a
1193 file and ensure it's closed afterwards.
1194 file and ensure it's closed afterwards.
1194
1195
1195 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1196 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1196
1197
1197 * IPython/demo.py (Demo.__init__): added support for individually
1198 * IPython/demo.py (Demo.__init__): added support for individually
1198 tagging blocks for automatic execution.
1199 tagging blocks for automatic execution.
1199
1200
1200 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1201 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1201 syntax-highlighted python sources, requested by John.
1202 syntax-highlighted python sources, requested by John.
1202
1203
1203 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1204 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1204
1205
1205 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1206 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1206 finishing.
1207 finishing.
1207
1208
1208 * IPython/genutils.py (shlex_split): moved from Magic to here,
1209 * IPython/genutils.py (shlex_split): moved from Magic to here,
1209 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1210 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1210
1211
1211 * IPython/demo.py (Demo.__init__): added support for silent
1212 * IPython/demo.py (Demo.__init__): added support for silent
1212 blocks, improved marks as regexps, docstrings written.
1213 blocks, improved marks as regexps, docstrings written.
1213 (Demo.__init__): better docstring, added support for sys.argv.
1214 (Demo.__init__): better docstring, added support for sys.argv.
1214
1215
1215 * IPython/genutils.py (marquee): little utility used by the demo
1216 * IPython/genutils.py (marquee): little utility used by the demo
1216 code, handy in general.
1217 code, handy in general.
1217
1218
1218 * IPython/demo.py (Demo.__init__): new class for interactive
1219 * IPython/demo.py (Demo.__init__): new class for interactive
1219 demos. Not documented yet, I just wrote it in a hurry for
1220 demos. Not documented yet, I just wrote it in a hurry for
1220 scipy'05. Will docstring later.
1221 scipy'05. Will docstring later.
1221
1222
1222 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1223 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1223
1224
1224 * IPython/Shell.py (sigint_handler): Drastic simplification which
1225 * IPython/Shell.py (sigint_handler): Drastic simplification which
1225 also seems to make Ctrl-C work correctly across threads! This is
1226 also seems to make Ctrl-C work correctly across threads! This is
1226 so simple, that I can't beleive I'd missed it before. Needs more
1227 so simple, that I can't beleive I'd missed it before. Needs more
1227 testing, though.
1228 testing, though.
1228 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1229 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1229 like this before...
1230 like this before...
1230
1231
1231 * IPython/genutils.py (get_home_dir): add protection against
1232 * IPython/genutils.py (get_home_dir): add protection against
1232 non-dirs in win32 registry.
1233 non-dirs in win32 registry.
1233
1234
1234 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1235 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1235 bug where dict was mutated while iterating (pysh crash).
1236 bug where dict was mutated while iterating (pysh crash).
1236
1237
1237 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1238 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1238
1239
1239 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1240 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1240 spurious newlines added by this routine. After a report by
1241 spurious newlines added by this routine. After a report by
1241 F. Mantegazza.
1242 F. Mantegazza.
1242
1243
1243 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1244 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1244
1245
1245 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1246 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1246 calls. These were a leftover from the GTK 1.x days, and can cause
1247 calls. These were a leftover from the GTK 1.x days, and can cause
1247 problems in certain cases (after a report by John Hunter).
1248 problems in certain cases (after a report by John Hunter).
1248
1249
1249 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1250 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1250 os.getcwd() fails at init time. Thanks to patch from David Remahl
1251 os.getcwd() fails at init time. Thanks to patch from David Remahl
1251 <chmod007-AT-mac.com>.
1252 <chmod007-AT-mac.com>.
1252 (InteractiveShell.__init__): prevent certain special magics from
1253 (InteractiveShell.__init__): prevent certain special magics from
1253 being shadowed by aliases. Closes
1254 being shadowed by aliases. Closes
1254 http://www.scipy.net/roundup/ipython/issue41.
1255 http://www.scipy.net/roundup/ipython/issue41.
1255
1256
1256 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1257 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1257
1258
1258 * IPython/iplib.py (InteractiveShell.complete): Added new
1259 * IPython/iplib.py (InteractiveShell.complete): Added new
1259 top-level completion method to expose the completion mechanism
1260 top-level completion method to expose the completion mechanism
1260 beyond readline-based environments.
1261 beyond readline-based environments.
1261
1262
1262 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1263 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1263
1264
1264 * tools/ipsvnc (svnversion): fix svnversion capture.
1265 * tools/ipsvnc (svnversion): fix svnversion capture.
1265
1266
1266 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1267 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1267 attribute to self, which was missing. Before, it was set by a
1268 attribute to self, which was missing. Before, it was set by a
1268 routine which in certain cases wasn't being called, so the
1269 routine which in certain cases wasn't being called, so the
1269 instance could end up missing the attribute. This caused a crash.
1270 instance could end up missing the attribute. This caused a crash.
1270 Closes http://www.scipy.net/roundup/ipython/issue40.
1271 Closes http://www.scipy.net/roundup/ipython/issue40.
1271
1272
1272 2005-08-16 Fernando Perez <fperez@colorado.edu>
1273 2005-08-16 Fernando Perez <fperez@colorado.edu>
1273
1274
1274 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1275 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1275 contains non-string attribute. Closes
1276 contains non-string attribute. Closes
1276 http://www.scipy.net/roundup/ipython/issue38.
1277 http://www.scipy.net/roundup/ipython/issue38.
1277
1278
1278 2005-08-14 Fernando Perez <fperez@colorado.edu>
1279 2005-08-14 Fernando Perez <fperez@colorado.edu>
1279
1280
1280 * tools/ipsvnc: Minor improvements, to add changeset info.
1281 * tools/ipsvnc: Minor improvements, to add changeset info.
1281
1282
1282 2005-08-12 Fernando Perez <fperez@colorado.edu>
1283 2005-08-12 Fernando Perez <fperez@colorado.edu>
1283
1284
1284 * IPython/iplib.py (runsource): remove self.code_to_run_src
1285 * IPython/iplib.py (runsource): remove self.code_to_run_src
1285 attribute. I realized this is nothing more than
1286 attribute. I realized this is nothing more than
1286 '\n'.join(self.buffer), and having the same data in two different
1287 '\n'.join(self.buffer), and having the same data in two different
1287 places is just asking for synchronization bugs. This may impact
1288 places is just asking for synchronization bugs. This may impact
1288 people who have custom exception handlers, so I need to warn
1289 people who have custom exception handlers, so I need to warn
1289 ipython-dev about it (F. Mantegazza may use them).
1290 ipython-dev about it (F. Mantegazza may use them).
1290
1291
1291 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1292 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1292
1293
1293 * IPython/genutils.py: fix 2.2 compatibility (generators)
1294 * IPython/genutils.py: fix 2.2 compatibility (generators)
1294
1295
1295 2005-07-18 Fernando Perez <fperez@colorado.edu>
1296 2005-07-18 Fernando Perez <fperez@colorado.edu>
1296
1297
1297 * IPython/genutils.py (get_home_dir): fix to help users with
1298 * IPython/genutils.py (get_home_dir): fix to help users with
1298 invalid $HOME under win32.
1299 invalid $HOME under win32.
1299
1300
1300 2005-07-17 Fernando Perez <fperez@colorado.edu>
1301 2005-07-17 Fernando Perez <fperez@colorado.edu>
1301
1302
1302 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1303 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1303 some old hacks and clean up a bit other routines; code should be
1304 some old hacks and clean up a bit other routines; code should be
1304 simpler and a bit faster.
1305 simpler and a bit faster.
1305
1306
1306 * IPython/iplib.py (interact): removed some last-resort attempts
1307 * IPython/iplib.py (interact): removed some last-resort attempts
1307 to survive broken stdout/stderr. That code was only making it
1308 to survive broken stdout/stderr. That code was only making it
1308 harder to abstract out the i/o (necessary for gui integration),
1309 harder to abstract out the i/o (necessary for gui integration),
1309 and the crashes it could prevent were extremely rare in practice
1310 and the crashes it could prevent were extremely rare in practice
1310 (besides being fully user-induced in a pretty violent manner).
1311 (besides being fully user-induced in a pretty violent manner).
1311
1312
1312 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1313 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1313 Nothing major yet, but the code is simpler to read; this should
1314 Nothing major yet, but the code is simpler to read; this should
1314 make it easier to do more serious modifications in the future.
1315 make it easier to do more serious modifications in the future.
1315
1316
1316 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1317 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1317 which broke in .15 (thanks to a report by Ville).
1318 which broke in .15 (thanks to a report by Ville).
1318
1319
1319 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1320 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1320 be quite correct, I know next to nothing about unicode). This
1321 be quite correct, I know next to nothing about unicode). This
1321 will allow unicode strings to be used in prompts, amongst other
1322 will allow unicode strings to be used in prompts, amongst other
1322 cases. It also will prevent ipython from crashing when unicode
1323 cases. It also will prevent ipython from crashing when unicode
1323 shows up unexpectedly in many places. If ascii encoding fails, we
1324 shows up unexpectedly in many places. If ascii encoding fails, we
1324 assume utf_8. Currently the encoding is not a user-visible
1325 assume utf_8. Currently the encoding is not a user-visible
1325 setting, though it could be made so if there is demand for it.
1326 setting, though it could be made so if there is demand for it.
1326
1327
1327 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1328 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1328
1329
1329 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1330 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1330
1331
1331 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1332 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1332
1333
1333 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1334 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1334 code can work transparently for 2.2/2.3.
1335 code can work transparently for 2.2/2.3.
1335
1336
1336 2005-07-16 Fernando Perez <fperez@colorado.edu>
1337 2005-07-16 Fernando Perez <fperez@colorado.edu>
1337
1338
1338 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1339 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1339 out of the color scheme table used for coloring exception
1340 out of the color scheme table used for coloring exception
1340 tracebacks. This allows user code to add new schemes at runtime.
1341 tracebacks. This allows user code to add new schemes at runtime.
1341 This is a minimally modified version of the patch at
1342 This is a minimally modified version of the patch at
1342 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1343 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1343 for the contribution.
1344 for the contribution.
1344
1345
1345 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1346 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1346 slightly modified version of the patch in
1347 slightly modified version of the patch in
1347 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1348 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1348 to remove the previous try/except solution (which was costlier).
1349 to remove the previous try/except solution (which was costlier).
1349 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1350 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1350
1351
1351 2005-06-08 Fernando Perez <fperez@colorado.edu>
1352 2005-06-08 Fernando Perez <fperez@colorado.edu>
1352
1353
1353 * IPython/iplib.py (write/write_err): Add methods to abstract all
1354 * IPython/iplib.py (write/write_err): Add methods to abstract all
1354 I/O a bit more.
1355 I/O a bit more.
1355
1356
1356 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1357 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1357 warning, reported by Aric Hagberg, fix by JD Hunter.
1358 warning, reported by Aric Hagberg, fix by JD Hunter.
1358
1359
1359 2005-06-02 *** Released version 0.6.15
1360 2005-06-02 *** Released version 0.6.15
1360
1361
1361 2005-06-01 Fernando Perez <fperez@colorado.edu>
1362 2005-06-01 Fernando Perez <fperez@colorado.edu>
1362
1363
1363 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1364 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1364 tab-completion of filenames within open-quoted strings. Note that
1365 tab-completion of filenames within open-quoted strings. Note that
1365 this requires that in ~/.ipython/ipythonrc, users change the
1366 this requires that in ~/.ipython/ipythonrc, users change the
1366 readline delimiters configuration to read:
1367 readline delimiters configuration to read:
1367
1368
1368 readline_remove_delims -/~
1369 readline_remove_delims -/~
1369
1370
1370
1371
1371 2005-05-31 *** Released version 0.6.14
1372 2005-05-31 *** Released version 0.6.14
1372
1373
1373 2005-05-29 Fernando Perez <fperez@colorado.edu>
1374 2005-05-29 Fernando Perez <fperez@colorado.edu>
1374
1375
1375 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1376 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1376 with files not on the filesystem. Reported by Eliyahu Sandler
1377 with files not on the filesystem. Reported by Eliyahu Sandler
1377 <eli@gondolin.net>
1378 <eli@gondolin.net>
1378
1379
1379 2005-05-22 Fernando Perez <fperez@colorado.edu>
1380 2005-05-22 Fernando Perez <fperez@colorado.edu>
1380
1381
1381 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1382 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1382 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1383 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1383
1384
1384 2005-05-19 Fernando Perez <fperez@colorado.edu>
1385 2005-05-19 Fernando Perez <fperez@colorado.edu>
1385
1386
1386 * IPython/iplib.py (safe_execfile): close a file which could be
1387 * IPython/iplib.py (safe_execfile): close a file which could be
1387 left open (causing problems in win32, which locks open files).
1388 left open (causing problems in win32, which locks open files).
1388 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1389 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1389
1390
1390 2005-05-18 Fernando Perez <fperez@colorado.edu>
1391 2005-05-18 Fernando Perez <fperez@colorado.edu>
1391
1392
1392 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1393 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1393 keyword arguments correctly to safe_execfile().
1394 keyword arguments correctly to safe_execfile().
1394
1395
1395 2005-05-13 Fernando Perez <fperez@colorado.edu>
1396 2005-05-13 Fernando Perez <fperez@colorado.edu>
1396
1397
1397 * ipython.1: Added info about Qt to manpage, and threads warning
1398 * ipython.1: Added info about Qt to manpage, and threads warning
1398 to usage page (invoked with --help).
1399 to usage page (invoked with --help).
1399
1400
1400 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1401 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1401 new matcher (it goes at the end of the priority list) to do
1402 new matcher (it goes at the end of the priority list) to do
1402 tab-completion on named function arguments. Submitted by George
1403 tab-completion on named function arguments. Submitted by George
1403 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1404 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1404 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1405 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1405 for more details.
1406 for more details.
1406
1407
1407 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1408 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1408 SystemExit exceptions in the script being run. Thanks to a report
1409 SystemExit exceptions in the script being run. Thanks to a report
1409 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1410 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1410 producing very annoying behavior when running unit tests.
1411 producing very annoying behavior when running unit tests.
1411
1412
1412 2005-05-12 Fernando Perez <fperez@colorado.edu>
1413 2005-05-12 Fernando Perez <fperez@colorado.edu>
1413
1414
1414 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1415 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1415 which I'd broken (again) due to a changed regexp. In the process,
1416 which I'd broken (again) due to a changed regexp. In the process,
1416 added ';' as an escape to auto-quote the whole line without
1417 added ';' as an escape to auto-quote the whole line without
1417 splitting its arguments. Thanks to a report by Jerry McRae
1418 splitting its arguments. Thanks to a report by Jerry McRae
1418 <qrs0xyc02-AT-sneakemail.com>.
1419 <qrs0xyc02-AT-sneakemail.com>.
1419
1420
1420 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1421 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1421 possible crashes caused by a TokenError. Reported by Ed Schofield
1422 possible crashes caused by a TokenError. Reported by Ed Schofield
1422 <schofield-AT-ftw.at>.
1423 <schofield-AT-ftw.at>.
1423
1424
1424 2005-05-06 Fernando Perez <fperez@colorado.edu>
1425 2005-05-06 Fernando Perez <fperez@colorado.edu>
1425
1426
1426 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1427 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1427
1428
1428 2005-04-29 Fernando Perez <fperez@colorado.edu>
1429 2005-04-29 Fernando Perez <fperez@colorado.edu>
1429
1430
1430 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1431 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1431 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1432 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1432 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1433 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1433 which provides support for Qt interactive usage (similar to the
1434 which provides support for Qt interactive usage (similar to the
1434 existing one for WX and GTK). This had been often requested.
1435 existing one for WX and GTK). This had been often requested.
1435
1436
1436 2005-04-14 *** Released version 0.6.13
1437 2005-04-14 *** Released version 0.6.13
1437
1438
1438 2005-04-08 Fernando Perez <fperez@colorado.edu>
1439 2005-04-08 Fernando Perez <fperez@colorado.edu>
1439
1440
1440 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1441 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1441 from _ofind, which gets called on almost every input line. Now,
1442 from _ofind, which gets called on almost every input line. Now,
1442 we only try to get docstrings if they are actually going to be
1443 we only try to get docstrings if they are actually going to be
1443 used (the overhead of fetching unnecessary docstrings can be
1444 used (the overhead of fetching unnecessary docstrings can be
1444 noticeable for certain objects, such as Pyro proxies).
1445 noticeable for certain objects, such as Pyro proxies).
1445
1446
1446 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1447 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1447 for completers. For some reason I had been passing them the state
1448 for completers. For some reason I had been passing them the state
1448 variable, which completers never actually need, and was in
1449 variable, which completers never actually need, and was in
1449 conflict with the rlcompleter API. Custom completers ONLY need to
1450 conflict with the rlcompleter API. Custom completers ONLY need to
1450 take the text parameter.
1451 take the text parameter.
1451
1452
1452 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1453 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1453 work correctly in pysh. I've also moved all the logic which used
1454 work correctly in pysh. I've also moved all the logic which used
1454 to be in pysh.py here, which will prevent problems with future
1455 to be in pysh.py here, which will prevent problems with future
1455 upgrades. However, this time I must warn users to update their
1456 upgrades. However, this time I must warn users to update their
1456 pysh profile to include the line
1457 pysh profile to include the line
1457
1458
1458 import_all IPython.Extensions.InterpreterExec
1459 import_all IPython.Extensions.InterpreterExec
1459
1460
1460 because otherwise things won't work for them. They MUST also
1461 because otherwise things won't work for them. They MUST also
1461 delete pysh.py and the line
1462 delete pysh.py and the line
1462
1463
1463 execfile pysh.py
1464 execfile pysh.py
1464
1465
1465 from their ipythonrc-pysh.
1466 from their ipythonrc-pysh.
1466
1467
1467 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1468 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1468 robust in the face of objects whose dir() returns non-strings
1469 robust in the face of objects whose dir() returns non-strings
1469 (which it shouldn't, but some broken libs like ITK do). Thanks to
1470 (which it shouldn't, but some broken libs like ITK do). Thanks to
1470 a patch by John Hunter (implemented differently, though). Also
1471 a patch by John Hunter (implemented differently, though). Also
1471 minor improvements by using .extend instead of + on lists.
1472 minor improvements by using .extend instead of + on lists.
1472
1473
1473 * pysh.py:
1474 * pysh.py:
1474
1475
1475 2005-04-06 Fernando Perez <fperez@colorado.edu>
1476 2005-04-06 Fernando Perez <fperez@colorado.edu>
1476
1477
1477 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1478 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1478 by default, so that all users benefit from it. Those who don't
1479 by default, so that all users benefit from it. Those who don't
1479 want it can still turn it off.
1480 want it can still turn it off.
1480
1481
1481 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1482 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1482 config file, I'd forgotten about this, so users were getting it
1483 config file, I'd forgotten about this, so users were getting it
1483 off by default.
1484 off by default.
1484
1485
1485 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1486 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1486 consistency. Now magics can be called in multiline statements,
1487 consistency. Now magics can be called in multiline statements,
1487 and python variables can be expanded in magic calls via $var.
1488 and python variables can be expanded in magic calls via $var.
1488 This makes the magic system behave just like aliases or !system
1489 This makes the magic system behave just like aliases or !system
1489 calls.
1490 calls.
1490
1491
1491 2005-03-28 Fernando Perez <fperez@colorado.edu>
1492 2005-03-28 Fernando Perez <fperez@colorado.edu>
1492
1493
1493 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1494 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1494 expensive string additions for building command. Add support for
1495 expensive string additions for building command. Add support for
1495 trailing ';' when autocall is used.
1496 trailing ';' when autocall is used.
1496
1497
1497 2005-03-26 Fernando Perez <fperez@colorado.edu>
1498 2005-03-26 Fernando Perez <fperez@colorado.edu>
1498
1499
1499 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1500 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1500 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1501 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1501 ipython.el robust against prompts with any number of spaces
1502 ipython.el robust against prompts with any number of spaces
1502 (including 0) after the ':' character.
1503 (including 0) after the ':' character.
1503
1504
1504 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1505 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1505 continuation prompt, which misled users to think the line was
1506 continuation prompt, which misled users to think the line was
1506 already indented. Closes debian Bug#300847, reported to me by
1507 already indented. Closes debian Bug#300847, reported to me by
1507 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1508 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1508
1509
1509 2005-03-23 Fernando Perez <fperez@colorado.edu>
1510 2005-03-23 Fernando Perez <fperez@colorado.edu>
1510
1511
1511 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1512 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1512 properly aligned if they have embedded newlines.
1513 properly aligned if they have embedded newlines.
1513
1514
1514 * IPython/iplib.py (runlines): Add a public method to expose
1515 * IPython/iplib.py (runlines): Add a public method to expose
1515 IPython's code execution machinery, so that users can run strings
1516 IPython's code execution machinery, so that users can run strings
1516 as if they had been typed at the prompt interactively.
1517 as if they had been typed at the prompt interactively.
1517 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1518 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1518 methods which can call the system shell, but with python variable
1519 methods which can call the system shell, but with python variable
1519 expansion. The three such methods are: __IPYTHON__.system,
1520 expansion. The three such methods are: __IPYTHON__.system,
1520 .getoutput and .getoutputerror. These need to be documented in a
1521 .getoutput and .getoutputerror. These need to be documented in a
1521 'public API' section (to be written) of the manual.
1522 'public API' section (to be written) of the manual.
1522
1523
1523 2005-03-20 Fernando Perez <fperez@colorado.edu>
1524 2005-03-20 Fernando Perez <fperez@colorado.edu>
1524
1525
1525 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1526 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1526 for custom exception handling. This is quite powerful, and it
1527 for custom exception handling. This is quite powerful, and it
1527 allows for user-installable exception handlers which can trap
1528 allows for user-installable exception handlers which can trap
1528 custom exceptions at runtime and treat them separately from
1529 custom exceptions at runtime and treat them separately from
1529 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1530 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1530 Mantegazza <mantegazza-AT-ill.fr>.
1531 Mantegazza <mantegazza-AT-ill.fr>.
1531 (InteractiveShell.set_custom_completer): public API function to
1532 (InteractiveShell.set_custom_completer): public API function to
1532 add new completers at runtime.
1533 add new completers at runtime.
1533
1534
1534 2005-03-19 Fernando Perez <fperez@colorado.edu>
1535 2005-03-19 Fernando Perez <fperez@colorado.edu>
1535
1536
1536 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1537 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1537 allow objects which provide their docstrings via non-standard
1538 allow objects which provide their docstrings via non-standard
1538 mechanisms (like Pyro proxies) to still be inspected by ipython's
1539 mechanisms (like Pyro proxies) to still be inspected by ipython's
1539 ? system.
1540 ? system.
1540
1541
1541 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1542 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1542 automatic capture system. I tried quite hard to make it work
1543 automatic capture system. I tried quite hard to make it work
1543 reliably, and simply failed. I tried many combinations with the
1544 reliably, and simply failed. I tried many combinations with the
1544 subprocess module, but eventually nothing worked in all needed
1545 subprocess module, but eventually nothing worked in all needed
1545 cases (not blocking stdin for the child, duplicating stdout
1546 cases (not blocking stdin for the child, duplicating stdout
1546 without blocking, etc). The new %sc/%sx still do capture to these
1547 without blocking, etc). The new %sc/%sx still do capture to these
1547 magical list/string objects which make shell use much more
1548 magical list/string objects which make shell use much more
1548 conveninent, so not all is lost.
1549 conveninent, so not all is lost.
1549
1550
1550 XXX - FIX MANUAL for the change above!
1551 XXX - FIX MANUAL for the change above!
1551
1552
1552 (runsource): I copied code.py's runsource() into ipython to modify
1553 (runsource): I copied code.py's runsource() into ipython to modify
1553 it a bit. Now the code object and source to be executed are
1554 it a bit. Now the code object and source to be executed are
1554 stored in ipython. This makes this info accessible to third-party
1555 stored in ipython. This makes this info accessible to third-party
1555 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1556 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1556 Mantegazza <mantegazza-AT-ill.fr>.
1557 Mantegazza <mantegazza-AT-ill.fr>.
1557
1558
1558 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1559 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1559 history-search via readline (like C-p/C-n). I'd wanted this for a
1560 history-search via readline (like C-p/C-n). I'd wanted this for a
1560 long time, but only recently found out how to do it. For users
1561 long time, but only recently found out how to do it. For users
1561 who already have their ipythonrc files made and want this, just
1562 who already have their ipythonrc files made and want this, just
1562 add:
1563 add:
1563
1564
1564 readline_parse_and_bind "\e[A": history-search-backward
1565 readline_parse_and_bind "\e[A": history-search-backward
1565 readline_parse_and_bind "\e[B": history-search-forward
1566 readline_parse_and_bind "\e[B": history-search-forward
1566
1567
1567 2005-03-18 Fernando Perez <fperez@colorado.edu>
1568 2005-03-18 Fernando Perez <fperez@colorado.edu>
1568
1569
1569 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1570 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1570 LSString and SList classes which allow transparent conversions
1571 LSString and SList classes which allow transparent conversions
1571 between list mode and whitespace-separated string.
1572 between list mode and whitespace-separated string.
1572 (magic_r): Fix recursion problem in %r.
1573 (magic_r): Fix recursion problem in %r.
1573
1574
1574 * IPython/genutils.py (LSString): New class to be used for
1575 * IPython/genutils.py (LSString): New class to be used for
1575 automatic storage of the results of all alias/system calls in _o
1576 automatic storage of the results of all alias/system calls in _o
1576 and _e (stdout/err). These provide a .l/.list attribute which
1577 and _e (stdout/err). These provide a .l/.list attribute which
1577 does automatic splitting on newlines. This means that for most
1578 does automatic splitting on newlines. This means that for most
1578 uses, you'll never need to do capturing of output with %sc/%sx
1579 uses, you'll never need to do capturing of output with %sc/%sx
1579 anymore, since ipython keeps this always done for you. Note that
1580 anymore, since ipython keeps this always done for you. Note that
1580 only the LAST results are stored, the _o/e variables are
1581 only the LAST results are stored, the _o/e variables are
1581 overwritten on each call. If you need to save their contents
1582 overwritten on each call. If you need to save their contents
1582 further, simply bind them to any other name.
1583 further, simply bind them to any other name.
1583
1584
1584 2005-03-17 Fernando Perez <fperez@colorado.edu>
1585 2005-03-17 Fernando Perez <fperez@colorado.edu>
1585
1586
1586 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1587 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1587 prompt namespace handling.
1588 prompt namespace handling.
1588
1589
1589 2005-03-16 Fernando Perez <fperez@colorado.edu>
1590 2005-03-16 Fernando Perez <fperez@colorado.edu>
1590
1591
1591 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1592 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1592 classic prompts to be '>>> ' (final space was missing, and it
1593 classic prompts to be '>>> ' (final space was missing, and it
1593 trips the emacs python mode).
1594 trips the emacs python mode).
1594 (BasePrompt.__str__): Added safe support for dynamic prompt
1595 (BasePrompt.__str__): Added safe support for dynamic prompt
1595 strings. Now you can set your prompt string to be '$x', and the
1596 strings. Now you can set your prompt string to be '$x', and the
1596 value of x will be printed from your interactive namespace. The
1597 value of x will be printed from your interactive namespace. The
1597 interpolation syntax includes the full Itpl support, so
1598 interpolation syntax includes the full Itpl support, so
1598 ${foo()+x+bar()} is a valid prompt string now, and the function
1599 ${foo()+x+bar()} is a valid prompt string now, and the function
1599 calls will be made at runtime.
1600 calls will be made at runtime.
1600
1601
1601 2005-03-15 Fernando Perez <fperez@colorado.edu>
1602 2005-03-15 Fernando Perez <fperez@colorado.edu>
1602
1603
1603 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1604 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1604 avoid name clashes in pylab. %hist still works, it just forwards
1605 avoid name clashes in pylab. %hist still works, it just forwards
1605 the call to %history.
1606 the call to %history.
1606
1607
1607 2005-03-02 *** Released version 0.6.12
1608 2005-03-02 *** Released version 0.6.12
1608
1609
1609 2005-03-02 Fernando Perez <fperez@colorado.edu>
1610 2005-03-02 Fernando Perez <fperez@colorado.edu>
1610
1611
1611 * IPython/iplib.py (handle_magic): log magic calls properly as
1612 * IPython/iplib.py (handle_magic): log magic calls properly as
1612 ipmagic() function calls.
1613 ipmagic() function calls.
1613
1614
1614 * IPython/Magic.py (magic_time): Improved %time to support
1615 * IPython/Magic.py (magic_time): Improved %time to support
1615 statements and provide wall-clock as well as CPU time.
1616 statements and provide wall-clock as well as CPU time.
1616
1617
1617 2005-02-27 Fernando Perez <fperez@colorado.edu>
1618 2005-02-27 Fernando Perez <fperez@colorado.edu>
1618
1619
1619 * IPython/hooks.py: New hooks module, to expose user-modifiable
1620 * IPython/hooks.py: New hooks module, to expose user-modifiable
1620 IPython functionality in a clean manner. For now only the editor
1621 IPython functionality in a clean manner. For now only the editor
1621 hook is actually written, and other thigns which I intend to turn
1622 hook is actually written, and other thigns which I intend to turn
1622 into proper hooks aren't yet there. The display and prefilter
1623 into proper hooks aren't yet there. The display and prefilter
1623 stuff, for example, should be hooks. But at least now the
1624 stuff, for example, should be hooks. But at least now the
1624 framework is in place, and the rest can be moved here with more
1625 framework is in place, and the rest can be moved here with more
1625 time later. IPython had had a .hooks variable for a long time for
1626 time later. IPython had had a .hooks variable for a long time for
1626 this purpose, but I'd never actually used it for anything.
1627 this purpose, but I'd never actually used it for anything.
1627
1628
1628 2005-02-26 Fernando Perez <fperez@colorado.edu>
1629 2005-02-26 Fernando Perez <fperez@colorado.edu>
1629
1630
1630 * IPython/ipmaker.py (make_IPython): make the default ipython
1631 * IPython/ipmaker.py (make_IPython): make the default ipython
1631 directory be called _ipython under win32, to follow more the
1632 directory be called _ipython under win32, to follow more the
1632 naming peculiarities of that platform (where buggy software like
1633 naming peculiarities of that platform (where buggy software like
1633 Visual Sourcesafe breaks with .named directories). Reported by
1634 Visual Sourcesafe breaks with .named directories). Reported by
1634 Ville Vainio.
1635 Ville Vainio.
1635
1636
1636 2005-02-23 Fernando Perez <fperez@colorado.edu>
1637 2005-02-23 Fernando Perez <fperez@colorado.edu>
1637
1638
1638 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1639 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1639 auto_aliases for win32 which were causing problems. Users can
1640 auto_aliases for win32 which were causing problems. Users can
1640 define the ones they personally like.
1641 define the ones they personally like.
1641
1642
1642 2005-02-21 Fernando Perez <fperez@colorado.edu>
1643 2005-02-21 Fernando Perez <fperez@colorado.edu>
1643
1644
1644 * IPython/Magic.py (magic_time): new magic to time execution of
1645 * IPython/Magic.py (magic_time): new magic to time execution of
1645 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1646 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1646
1647
1647 2005-02-19 Fernando Perez <fperez@colorado.edu>
1648 2005-02-19 Fernando Perez <fperez@colorado.edu>
1648
1649
1649 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1650 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1650 into keys (for prompts, for example).
1651 into keys (for prompts, for example).
1651
1652
1652 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1653 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1653 prompts in case users want them. This introduces a small behavior
1654 prompts in case users want them. This introduces a small behavior
1654 change: ipython does not automatically add a space to all prompts
1655 change: ipython does not automatically add a space to all prompts
1655 anymore. To get the old prompts with a space, users should add it
1656 anymore. To get the old prompts with a space, users should add it
1656 manually to their ipythonrc file, so for example prompt_in1 should
1657 manually to their ipythonrc file, so for example prompt_in1 should
1657 now read 'In [\#]: ' instead of 'In [\#]:'.
1658 now read 'In [\#]: ' instead of 'In [\#]:'.
1658 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1659 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1659 file) to control left-padding of secondary prompts.
1660 file) to control left-padding of secondary prompts.
1660
1661
1661 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1662 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1662 the profiler can't be imported. Fix for Debian, which removed
1663 the profiler can't be imported. Fix for Debian, which removed
1663 profile.py because of License issues. I applied a slightly
1664 profile.py because of License issues. I applied a slightly
1664 modified version of the original Debian patch at
1665 modified version of the original Debian patch at
1665 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1666 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1666
1667
1667 2005-02-17 Fernando Perez <fperez@colorado.edu>
1668 2005-02-17 Fernando Perez <fperez@colorado.edu>
1668
1669
1669 * IPython/genutils.py (native_line_ends): Fix bug which would
1670 * IPython/genutils.py (native_line_ends): Fix bug which would
1670 cause improper line-ends under win32 b/c I was not opening files
1671 cause improper line-ends under win32 b/c I was not opening files
1671 in binary mode. Bug report and fix thanks to Ville.
1672 in binary mode. Bug report and fix thanks to Ville.
1672
1673
1673 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1674 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1674 trying to catch spurious foo[1] autocalls. My fix actually broke
1675 trying to catch spurious foo[1] autocalls. My fix actually broke
1675 ',/' autoquote/call with explicit escape (bad regexp).
1676 ',/' autoquote/call with explicit escape (bad regexp).
1676
1677
1677 2005-02-15 *** Released version 0.6.11
1678 2005-02-15 *** Released version 0.6.11
1678
1679
1679 2005-02-14 Fernando Perez <fperez@colorado.edu>
1680 2005-02-14 Fernando Perez <fperez@colorado.edu>
1680
1681
1681 * IPython/background_jobs.py: New background job management
1682 * IPython/background_jobs.py: New background job management
1682 subsystem. This is implemented via a new set of classes, and
1683 subsystem. This is implemented via a new set of classes, and
1683 IPython now provides a builtin 'jobs' object for background job
1684 IPython now provides a builtin 'jobs' object for background job
1684 execution. A convenience %bg magic serves as a lightweight
1685 execution. A convenience %bg magic serves as a lightweight
1685 frontend for starting the more common type of calls. This was
1686 frontend for starting the more common type of calls. This was
1686 inspired by discussions with B. Granger and the BackgroundCommand
1687 inspired by discussions with B. Granger and the BackgroundCommand
1687 class described in the book Python Scripting for Computational
1688 class described in the book Python Scripting for Computational
1688 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1689 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1689 (although ultimately no code from this text was used, as IPython's
1690 (although ultimately no code from this text was used, as IPython's
1690 system is a separate implementation).
1691 system is a separate implementation).
1691
1692
1692 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1693 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1693 to control the completion of single/double underscore names
1694 to control the completion of single/double underscore names
1694 separately. As documented in the example ipytonrc file, the
1695 separately. As documented in the example ipytonrc file, the
1695 readline_omit__names variable can now be set to 2, to omit even
1696 readline_omit__names variable can now be set to 2, to omit even
1696 single underscore names. Thanks to a patch by Brian Wong
1697 single underscore names. Thanks to a patch by Brian Wong
1697 <BrianWong-AT-AirgoNetworks.Com>.
1698 <BrianWong-AT-AirgoNetworks.Com>.
1698 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1699 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1699 be autocalled as foo([1]) if foo were callable. A problem for
1700 be autocalled as foo([1]) if foo were callable. A problem for
1700 things which are both callable and implement __getitem__.
1701 things which are both callable and implement __getitem__.
1701 (init_readline): Fix autoindentation for win32. Thanks to a patch
1702 (init_readline): Fix autoindentation for win32. Thanks to a patch
1702 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1703 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1703
1704
1704 2005-02-12 Fernando Perez <fperez@colorado.edu>
1705 2005-02-12 Fernando Perez <fperez@colorado.edu>
1705
1706
1706 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1707 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1707 which I had written long ago to sort out user error messages which
1708 which I had written long ago to sort out user error messages which
1708 may occur during startup. This seemed like a good idea initially,
1709 may occur during startup. This seemed like a good idea initially,
1709 but it has proven a disaster in retrospect. I don't want to
1710 but it has proven a disaster in retrospect. I don't want to
1710 change much code for now, so my fix is to set the internal 'debug'
1711 change much code for now, so my fix is to set the internal 'debug'
1711 flag to true everywhere, whose only job was precisely to control
1712 flag to true everywhere, whose only job was precisely to control
1712 this subsystem. This closes issue 28 (as well as avoiding all
1713 this subsystem. This closes issue 28 (as well as avoiding all
1713 sorts of strange hangups which occur from time to time).
1714 sorts of strange hangups which occur from time to time).
1714
1715
1715 2005-02-07 Fernando Perez <fperez@colorado.edu>
1716 2005-02-07 Fernando Perez <fperez@colorado.edu>
1716
1717
1717 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1718 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1718 previous call produced a syntax error.
1719 previous call produced a syntax error.
1719
1720
1720 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1721 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1721 classes without constructor.
1722 classes without constructor.
1722
1723
1723 2005-02-06 Fernando Perez <fperez@colorado.edu>
1724 2005-02-06 Fernando Perez <fperez@colorado.edu>
1724
1725
1725 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1726 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1726 completions with the results of each matcher, so we return results
1727 completions with the results of each matcher, so we return results
1727 to the user from all namespaces. This breaks with ipython
1728 to the user from all namespaces. This breaks with ipython
1728 tradition, but I think it's a nicer behavior. Now you get all
1729 tradition, but I think it's a nicer behavior. Now you get all
1729 possible completions listed, from all possible namespaces (python,
1730 possible completions listed, from all possible namespaces (python,
1730 filesystem, magics...) After a request by John Hunter
1731 filesystem, magics...) After a request by John Hunter
1731 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1732 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1732
1733
1733 2005-02-05 Fernando Perez <fperez@colorado.edu>
1734 2005-02-05 Fernando Perez <fperez@colorado.edu>
1734
1735
1735 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1736 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1736 the call had quote characters in it (the quotes were stripped).
1737 the call had quote characters in it (the quotes were stripped).
1737
1738
1738 2005-01-31 Fernando Perez <fperez@colorado.edu>
1739 2005-01-31 Fernando Perez <fperez@colorado.edu>
1739
1740
1740 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1741 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1741 Itpl.itpl() to make the code more robust against psyco
1742 Itpl.itpl() to make the code more robust against psyco
1742 optimizations.
1743 optimizations.
1743
1744
1744 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1745 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1745 of causing an exception. Quicker, cleaner.
1746 of causing an exception. Quicker, cleaner.
1746
1747
1747 2005-01-28 Fernando Perez <fperez@colorado.edu>
1748 2005-01-28 Fernando Perez <fperez@colorado.edu>
1748
1749
1749 * scripts/ipython_win_post_install.py (install): hardcode
1750 * scripts/ipython_win_post_install.py (install): hardcode
1750 sys.prefix+'python.exe' as the executable path. It turns out that
1751 sys.prefix+'python.exe' as the executable path. It turns out that
1751 during the post-installation run, sys.executable resolves to the
1752 during the post-installation run, sys.executable resolves to the
1752 name of the binary installer! I should report this as a distutils
1753 name of the binary installer! I should report this as a distutils
1753 bug, I think. I updated the .10 release with this tiny fix, to
1754 bug, I think. I updated the .10 release with this tiny fix, to
1754 avoid annoying the lists further.
1755 avoid annoying the lists further.
1755
1756
1756 2005-01-27 *** Released version 0.6.10
1757 2005-01-27 *** Released version 0.6.10
1757
1758
1758 2005-01-27 Fernando Perez <fperez@colorado.edu>
1759 2005-01-27 Fernando Perez <fperez@colorado.edu>
1759
1760
1760 * IPython/numutils.py (norm): Added 'inf' as optional name for
1761 * IPython/numutils.py (norm): Added 'inf' as optional name for
1761 L-infinity norm, included references to mathworld.com for vector
1762 L-infinity norm, included references to mathworld.com for vector
1762 norm definitions.
1763 norm definitions.
1763 (amin/amax): added amin/amax for array min/max. Similar to what
1764 (amin/amax): added amin/amax for array min/max. Similar to what
1764 pylab ships with after the recent reorganization of names.
1765 pylab ships with after the recent reorganization of names.
1765 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1766 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1766
1767
1767 * ipython.el: committed Alex's recent fixes and improvements.
1768 * ipython.el: committed Alex's recent fixes and improvements.
1768 Tested with python-mode from CVS, and it looks excellent. Since
1769 Tested with python-mode from CVS, and it looks excellent. Since
1769 python-mode hasn't released anything in a while, I'm temporarily
1770 python-mode hasn't released anything in a while, I'm temporarily
1770 putting a copy of today's CVS (v 4.70) of python-mode in:
1771 putting a copy of today's CVS (v 4.70) of python-mode in:
1771 http://ipython.scipy.org/tmp/python-mode.el
1772 http://ipython.scipy.org/tmp/python-mode.el
1772
1773
1773 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1774 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1774 sys.executable for the executable name, instead of assuming it's
1775 sys.executable for the executable name, instead of assuming it's
1775 called 'python.exe' (the post-installer would have produced broken
1776 called 'python.exe' (the post-installer would have produced broken
1776 setups on systems with a differently named python binary).
1777 setups on systems with a differently named python binary).
1777
1778
1778 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1779 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1779 references to os.linesep, to make the code more
1780 references to os.linesep, to make the code more
1780 platform-independent. This is also part of the win32 coloring
1781 platform-independent. This is also part of the win32 coloring
1781 fixes.
1782 fixes.
1782
1783
1783 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1784 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1784 lines, which actually cause coloring bugs because the length of
1785 lines, which actually cause coloring bugs because the length of
1785 the line is very difficult to correctly compute with embedded
1786 the line is very difficult to correctly compute with embedded
1786 escapes. This was the source of all the coloring problems under
1787 escapes. This was the source of all the coloring problems under
1787 Win32. I think that _finally_, Win32 users have a properly
1788 Win32. I think that _finally_, Win32 users have a properly
1788 working ipython in all respects. This would never have happened
1789 working ipython in all respects. This would never have happened
1789 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1790 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1790
1791
1791 2005-01-26 *** Released version 0.6.9
1792 2005-01-26 *** Released version 0.6.9
1792
1793
1793 2005-01-25 Fernando Perez <fperez@colorado.edu>
1794 2005-01-25 Fernando Perez <fperez@colorado.edu>
1794
1795
1795 * setup.py: finally, we have a true Windows installer, thanks to
1796 * setup.py: finally, we have a true Windows installer, thanks to
1796 the excellent work of Viktor Ransmayr
1797 the excellent work of Viktor Ransmayr
1797 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1798 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1798 Windows users. The setup routine is quite a bit cleaner thanks to
1799 Windows users. The setup routine is quite a bit cleaner thanks to
1799 this, and the post-install script uses the proper functions to
1800 this, and the post-install script uses the proper functions to
1800 allow a clean de-installation using the standard Windows Control
1801 allow a clean de-installation using the standard Windows Control
1801 Panel.
1802 Panel.
1802
1803
1803 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1804 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1804 environment variable under all OSes (including win32) if
1805 environment variable under all OSes (including win32) if
1805 available. This will give consistency to win32 users who have set
1806 available. This will give consistency to win32 users who have set
1806 this variable for any reason. If os.environ['HOME'] fails, the
1807 this variable for any reason. If os.environ['HOME'] fails, the
1807 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1808 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1808
1809
1809 2005-01-24 Fernando Perez <fperez@colorado.edu>
1810 2005-01-24 Fernando Perez <fperez@colorado.edu>
1810
1811
1811 * IPython/numutils.py (empty_like): add empty_like(), similar to
1812 * IPython/numutils.py (empty_like): add empty_like(), similar to
1812 zeros_like() but taking advantage of the new empty() Numeric routine.
1813 zeros_like() but taking advantage of the new empty() Numeric routine.
1813
1814
1814 2005-01-23 *** Released version 0.6.8
1815 2005-01-23 *** Released version 0.6.8
1815
1816
1816 2005-01-22 Fernando Perez <fperez@colorado.edu>
1817 2005-01-22 Fernando Perez <fperez@colorado.edu>
1817
1818
1818 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1819 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1819 automatic show() calls. After discussing things with JDH, it
1820 automatic show() calls. After discussing things with JDH, it
1820 turns out there are too many corner cases where this can go wrong.
1821 turns out there are too many corner cases where this can go wrong.
1821 It's best not to try to be 'too smart', and simply have ipython
1822 It's best not to try to be 'too smart', and simply have ipython
1822 reproduce as much as possible the default behavior of a normal
1823 reproduce as much as possible the default behavior of a normal
1823 python shell.
1824 python shell.
1824
1825
1825 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1826 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1826 line-splitting regexp and _prefilter() to avoid calling getattr()
1827 line-splitting regexp and _prefilter() to avoid calling getattr()
1827 on assignments. This closes
1828 on assignments. This closes
1828 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1829 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1829 readline uses getattr(), so a simple <TAB> keypress is still
1830 readline uses getattr(), so a simple <TAB> keypress is still
1830 enough to trigger getattr() calls on an object.
1831 enough to trigger getattr() calls on an object.
1831
1832
1832 2005-01-21 Fernando Perez <fperez@colorado.edu>
1833 2005-01-21 Fernando Perez <fperez@colorado.edu>
1833
1834
1834 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1835 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1835 docstring under pylab so it doesn't mask the original.
1836 docstring under pylab so it doesn't mask the original.
1836
1837
1837 2005-01-21 *** Released version 0.6.7
1838 2005-01-21 *** Released version 0.6.7
1838
1839
1839 2005-01-21 Fernando Perez <fperez@colorado.edu>
1840 2005-01-21 Fernando Perez <fperez@colorado.edu>
1840
1841
1841 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1842 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1842 signal handling for win32 users in multithreaded mode.
1843 signal handling for win32 users in multithreaded mode.
1843
1844
1844 2005-01-17 Fernando Perez <fperez@colorado.edu>
1845 2005-01-17 Fernando Perez <fperez@colorado.edu>
1845
1846
1846 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1847 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1847 instances with no __init__. After a crash report by Norbert Nemec
1848 instances with no __init__. After a crash report by Norbert Nemec
1848 <Norbert-AT-nemec-online.de>.
1849 <Norbert-AT-nemec-online.de>.
1849
1850
1850 2005-01-14 Fernando Perez <fperez@colorado.edu>
1851 2005-01-14 Fernando Perez <fperez@colorado.edu>
1851
1852
1852 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1853 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1853 names for verbose exceptions, when multiple dotted names and the
1854 names for verbose exceptions, when multiple dotted names and the
1854 'parent' object were present on the same line.
1855 'parent' object were present on the same line.
1855
1856
1856 2005-01-11 Fernando Perez <fperez@colorado.edu>
1857 2005-01-11 Fernando Perez <fperez@colorado.edu>
1857
1858
1858 * IPython/genutils.py (flag_calls): new utility to trap and flag
1859 * IPython/genutils.py (flag_calls): new utility to trap and flag
1859 calls in functions. I need it to clean up matplotlib support.
1860 calls in functions. I need it to clean up matplotlib support.
1860 Also removed some deprecated code in genutils.
1861 Also removed some deprecated code in genutils.
1861
1862
1862 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1863 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1863 that matplotlib scripts called with %run, which don't call show()
1864 that matplotlib scripts called with %run, which don't call show()
1864 themselves, still have their plotting windows open.
1865 themselves, still have their plotting windows open.
1865
1866
1866 2005-01-05 Fernando Perez <fperez@colorado.edu>
1867 2005-01-05 Fernando Perez <fperez@colorado.edu>
1867
1868
1868 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1869 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1869 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1870 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1870
1871
1871 2004-12-19 Fernando Perez <fperez@colorado.edu>
1872 2004-12-19 Fernando Perez <fperez@colorado.edu>
1872
1873
1873 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1874 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1874 parent_runcode, which was an eyesore. The same result can be
1875 parent_runcode, which was an eyesore. The same result can be
1875 obtained with Python's regular superclass mechanisms.
1876 obtained with Python's regular superclass mechanisms.
1876
1877
1877 2004-12-17 Fernando Perez <fperez@colorado.edu>
1878 2004-12-17 Fernando Perez <fperez@colorado.edu>
1878
1879
1879 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1880 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1880 reported by Prabhu.
1881 reported by Prabhu.
1881 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1882 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1882 sys.stderr) instead of explicitly calling sys.stderr. This helps
1883 sys.stderr) instead of explicitly calling sys.stderr. This helps
1883 maintain our I/O abstractions clean, for future GUI embeddings.
1884 maintain our I/O abstractions clean, for future GUI embeddings.
1884
1885
1885 * IPython/genutils.py (info): added new utility for sys.stderr
1886 * IPython/genutils.py (info): added new utility for sys.stderr
1886 unified info message handling (thin wrapper around warn()).
1887 unified info message handling (thin wrapper around warn()).
1887
1888
1888 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1889 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1889 composite (dotted) names on verbose exceptions.
1890 composite (dotted) names on verbose exceptions.
1890 (VerboseTB.nullrepr): harden against another kind of errors which
1891 (VerboseTB.nullrepr): harden against another kind of errors which
1891 Python's inspect module can trigger, and which were crashing
1892 Python's inspect module can trigger, and which were crashing
1892 IPython. Thanks to a report by Marco Lombardi
1893 IPython. Thanks to a report by Marco Lombardi
1893 <mlombard-AT-ma010192.hq.eso.org>.
1894 <mlombard-AT-ma010192.hq.eso.org>.
1894
1895
1895 2004-12-13 *** Released version 0.6.6
1896 2004-12-13 *** Released version 0.6.6
1896
1897
1897 2004-12-12 Fernando Perez <fperez@colorado.edu>
1898 2004-12-12 Fernando Perez <fperez@colorado.edu>
1898
1899
1899 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1900 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1900 generated by pygtk upon initialization if it was built without
1901 generated by pygtk upon initialization if it was built without
1901 threads (for matplotlib users). After a crash reported by
1902 threads (for matplotlib users). After a crash reported by
1902 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1903 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1903
1904
1904 * IPython/ipmaker.py (make_IPython): fix small bug in the
1905 * IPython/ipmaker.py (make_IPython): fix small bug in the
1905 import_some parameter for multiple imports.
1906 import_some parameter for multiple imports.
1906
1907
1907 * IPython/iplib.py (ipmagic): simplified the interface of
1908 * IPython/iplib.py (ipmagic): simplified the interface of
1908 ipmagic() to take a single string argument, just as it would be
1909 ipmagic() to take a single string argument, just as it would be
1909 typed at the IPython cmd line.
1910 typed at the IPython cmd line.
1910 (ipalias): Added new ipalias() with an interface identical to
1911 (ipalias): Added new ipalias() with an interface identical to
1911 ipmagic(). This completes exposing a pure python interface to the
1912 ipmagic(). This completes exposing a pure python interface to the
1912 alias and magic system, which can be used in loops or more complex
1913 alias and magic system, which can be used in loops or more complex
1913 code where IPython's automatic line mangling is not active.
1914 code where IPython's automatic line mangling is not active.
1914
1915
1915 * IPython/genutils.py (timing): changed interface of timing to
1916 * IPython/genutils.py (timing): changed interface of timing to
1916 simply run code once, which is the most common case. timings()
1917 simply run code once, which is the most common case. timings()
1917 remains unchanged, for the cases where you want multiple runs.
1918 remains unchanged, for the cases where you want multiple runs.
1918
1919
1919 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1920 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1920 bug where Python2.2 crashes with exec'ing code which does not end
1921 bug where Python2.2 crashes with exec'ing code which does not end
1921 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1922 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1922 before.
1923 before.
1923
1924
1924 2004-12-10 Fernando Perez <fperez@colorado.edu>
1925 2004-12-10 Fernando Perez <fperez@colorado.edu>
1925
1926
1926 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1927 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1927 -t to -T, to accomodate the new -t flag in %run (the %run and
1928 -t to -T, to accomodate the new -t flag in %run (the %run and
1928 %prun options are kind of intermixed, and it's not easy to change
1929 %prun options are kind of intermixed, and it's not easy to change
1929 this with the limitations of python's getopt).
1930 this with the limitations of python's getopt).
1930
1931
1931 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1932 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1932 the execution of scripts. It's not as fine-tuned as timeit.py,
1933 the execution of scripts. It's not as fine-tuned as timeit.py,
1933 but it works from inside ipython (and under 2.2, which lacks
1934 but it works from inside ipython (and under 2.2, which lacks
1934 timeit.py). Optionally a number of runs > 1 can be given for
1935 timeit.py). Optionally a number of runs > 1 can be given for
1935 timing very short-running code.
1936 timing very short-running code.
1936
1937
1937 * IPython/genutils.py (uniq_stable): new routine which returns a
1938 * IPython/genutils.py (uniq_stable): new routine which returns a
1938 list of unique elements in any iterable, but in stable order of
1939 list of unique elements in any iterable, but in stable order of
1939 appearance. I needed this for the ultraTB fixes, and it's a handy
1940 appearance. I needed this for the ultraTB fixes, and it's a handy
1940 utility.
1941 utility.
1941
1942
1942 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1943 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1943 dotted names in Verbose exceptions. This had been broken since
1944 dotted names in Verbose exceptions. This had been broken since
1944 the very start, now x.y will properly be printed in a Verbose
1945 the very start, now x.y will properly be printed in a Verbose
1945 traceback, instead of x being shown and y appearing always as an
1946 traceback, instead of x being shown and y appearing always as an
1946 'undefined global'. Getting this to work was a bit tricky,
1947 'undefined global'. Getting this to work was a bit tricky,
1947 because by default python tokenizers are stateless. Saved by
1948 because by default python tokenizers are stateless. Saved by
1948 python's ability to easily add a bit of state to an arbitrary
1949 python's ability to easily add a bit of state to an arbitrary
1949 function (without needing to build a full-blown callable object).
1950 function (without needing to build a full-blown callable object).
1950
1951
1951 Also big cleanup of this code, which had horrendous runtime
1952 Also big cleanup of this code, which had horrendous runtime
1952 lookups of zillions of attributes for colorization. Moved all
1953 lookups of zillions of attributes for colorization. Moved all
1953 this code into a few templates, which make it cleaner and quicker.
1954 this code into a few templates, which make it cleaner and quicker.
1954
1955
1955 Printout quality was also improved for Verbose exceptions: one
1956 Printout quality was also improved for Verbose exceptions: one
1956 variable per line, and memory addresses are printed (this can be
1957 variable per line, and memory addresses are printed (this can be
1957 quite handy in nasty debugging situations, which is what Verbose
1958 quite handy in nasty debugging situations, which is what Verbose
1958 is for).
1959 is for).
1959
1960
1960 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1961 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1961 the command line as scripts to be loaded by embedded instances.
1962 the command line as scripts to be loaded by embedded instances.
1962 Doing so has the potential for an infinite recursion if there are
1963 Doing so has the potential for an infinite recursion if there are
1963 exceptions thrown in the process. This fixes a strange crash
1964 exceptions thrown in the process. This fixes a strange crash
1964 reported by Philippe MULLER <muller-AT-irit.fr>.
1965 reported by Philippe MULLER <muller-AT-irit.fr>.
1965
1966
1966 2004-12-09 Fernando Perez <fperez@colorado.edu>
1967 2004-12-09 Fernando Perez <fperez@colorado.edu>
1967
1968
1968 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1969 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1969 to reflect new names in matplotlib, which now expose the
1970 to reflect new names in matplotlib, which now expose the
1970 matlab-compatible interface via a pylab module instead of the
1971 matlab-compatible interface via a pylab module instead of the
1971 'matlab' name. The new code is backwards compatible, so users of
1972 'matlab' name. The new code is backwards compatible, so users of
1972 all matplotlib versions are OK. Patch by J. Hunter.
1973 all matplotlib versions are OK. Patch by J. Hunter.
1973
1974
1974 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1975 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1975 of __init__ docstrings for instances (class docstrings are already
1976 of __init__ docstrings for instances (class docstrings are already
1976 automatically printed). Instances with customized docstrings
1977 automatically printed). Instances with customized docstrings
1977 (indep. of the class) are also recognized and all 3 separate
1978 (indep. of the class) are also recognized and all 3 separate
1978 docstrings are printed (instance, class, constructor). After some
1979 docstrings are printed (instance, class, constructor). After some
1979 comments/suggestions by J. Hunter.
1980 comments/suggestions by J. Hunter.
1980
1981
1981 2004-12-05 Fernando Perez <fperez@colorado.edu>
1982 2004-12-05 Fernando Perez <fperez@colorado.edu>
1982
1983
1983 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1984 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1984 warnings when tab-completion fails and triggers an exception.
1985 warnings when tab-completion fails and triggers an exception.
1985
1986
1986 2004-12-03 Fernando Perez <fperez@colorado.edu>
1987 2004-12-03 Fernando Perez <fperez@colorado.edu>
1987
1988
1988 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1989 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1989 be triggered when using 'run -p'. An incorrect option flag was
1990 be triggered when using 'run -p'. An incorrect option flag was
1990 being set ('d' instead of 'D').
1991 being set ('d' instead of 'D').
1991 (manpage): fix missing escaped \- sign.
1992 (manpage): fix missing escaped \- sign.
1992
1993
1993 2004-11-30 *** Released version 0.6.5
1994 2004-11-30 *** Released version 0.6.5
1994
1995
1995 2004-11-30 Fernando Perez <fperez@colorado.edu>
1996 2004-11-30 Fernando Perez <fperez@colorado.edu>
1996
1997
1997 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1998 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1998 setting with -d option.
1999 setting with -d option.
1999
2000
2000 * setup.py (docfiles): Fix problem where the doc glob I was using
2001 * setup.py (docfiles): Fix problem where the doc glob I was using
2001 was COMPLETELY BROKEN. It was giving the right files by pure
2002 was COMPLETELY BROKEN. It was giving the right files by pure
2002 accident, but failed once I tried to include ipython.el. Note:
2003 accident, but failed once I tried to include ipython.el. Note:
2003 glob() does NOT allow you to do exclusion on multiple endings!
2004 glob() does NOT allow you to do exclusion on multiple endings!
2004
2005
2005 2004-11-29 Fernando Perez <fperez@colorado.edu>
2006 2004-11-29 Fernando Perez <fperez@colorado.edu>
2006
2007
2007 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2008 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2008 the manpage as the source. Better formatting & consistency.
2009 the manpage as the source. Better formatting & consistency.
2009
2010
2010 * IPython/Magic.py (magic_run): Added new -d option, to run
2011 * IPython/Magic.py (magic_run): Added new -d option, to run
2011 scripts under the control of the python pdb debugger. Note that
2012 scripts under the control of the python pdb debugger. Note that
2012 this required changing the %prun option -d to -D, to avoid a clash
2013 this required changing the %prun option -d to -D, to avoid a clash
2013 (since %run must pass options to %prun, and getopt is too dumb to
2014 (since %run must pass options to %prun, and getopt is too dumb to
2014 handle options with string values with embedded spaces). Thanks
2015 handle options with string values with embedded spaces). Thanks
2015 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2016 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2016 (magic_who_ls): added type matching to %who and %whos, so that one
2017 (magic_who_ls): added type matching to %who and %whos, so that one
2017 can filter their output to only include variables of certain
2018 can filter their output to only include variables of certain
2018 types. Another suggestion by Matthew.
2019 types. Another suggestion by Matthew.
2019 (magic_whos): Added memory summaries in kb and Mb for arrays.
2020 (magic_whos): Added memory summaries in kb and Mb for arrays.
2020 (magic_who): Improve formatting (break lines every 9 vars).
2021 (magic_who): Improve formatting (break lines every 9 vars).
2021
2022
2022 2004-11-28 Fernando Perez <fperez@colorado.edu>
2023 2004-11-28 Fernando Perez <fperez@colorado.edu>
2023
2024
2024 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2025 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2025 cache when empty lines were present.
2026 cache when empty lines were present.
2026
2027
2027 2004-11-24 Fernando Perez <fperez@colorado.edu>
2028 2004-11-24 Fernando Perez <fperez@colorado.edu>
2028
2029
2029 * IPython/usage.py (__doc__): document the re-activated threading
2030 * IPython/usage.py (__doc__): document the re-activated threading
2030 options for WX and GTK.
2031 options for WX and GTK.
2031
2032
2032 2004-11-23 Fernando Perez <fperez@colorado.edu>
2033 2004-11-23 Fernando Perez <fperez@colorado.edu>
2033
2034
2034 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2035 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2035 the -wthread and -gthread options, along with a new -tk one to try
2036 the -wthread and -gthread options, along with a new -tk one to try
2036 and coordinate Tk threading with wx/gtk. The tk support is very
2037 and coordinate Tk threading with wx/gtk. The tk support is very
2037 platform dependent, since it seems to require Tcl and Tk to be
2038 platform dependent, since it seems to require Tcl and Tk to be
2038 built with threads (Fedora1/2 appears NOT to have it, but in
2039 built with threads (Fedora1/2 appears NOT to have it, but in
2039 Prabhu's Debian boxes it works OK). But even with some Tk
2040 Prabhu's Debian boxes it works OK). But even with some Tk
2040 limitations, this is a great improvement.
2041 limitations, this is a great improvement.
2041
2042
2042 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2043 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2043 info in user prompts. Patch by Prabhu.
2044 info in user prompts. Patch by Prabhu.
2044
2045
2045 2004-11-18 Fernando Perez <fperez@colorado.edu>
2046 2004-11-18 Fernando Perez <fperez@colorado.edu>
2046
2047
2047 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2048 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2048 EOFErrors and bail, to avoid infinite loops if a non-terminating
2049 EOFErrors and bail, to avoid infinite loops if a non-terminating
2049 file is fed into ipython. Patch submitted in issue 19 by user,
2050 file is fed into ipython. Patch submitted in issue 19 by user,
2050 many thanks.
2051 many thanks.
2051
2052
2052 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2053 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2053 autoquote/parens in continuation prompts, which can cause lots of
2054 autoquote/parens in continuation prompts, which can cause lots of
2054 problems. Closes roundup issue 20.
2055 problems. Closes roundup issue 20.
2055
2056
2056 2004-11-17 Fernando Perez <fperez@colorado.edu>
2057 2004-11-17 Fernando Perez <fperez@colorado.edu>
2057
2058
2058 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2059 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2059 reported as debian bug #280505. I'm not sure my local changelog
2060 reported as debian bug #280505. I'm not sure my local changelog
2060 entry has the proper debian format (Jack?).
2061 entry has the proper debian format (Jack?).
2061
2062
2062 2004-11-08 *** Released version 0.6.4
2063 2004-11-08 *** Released version 0.6.4
2063
2064
2064 2004-11-08 Fernando Perez <fperez@colorado.edu>
2065 2004-11-08 Fernando Perez <fperez@colorado.edu>
2065
2066
2066 * IPython/iplib.py (init_readline): Fix exit message for Windows
2067 * IPython/iplib.py (init_readline): Fix exit message for Windows
2067 when readline is active. Thanks to a report by Eric Jones
2068 when readline is active. Thanks to a report by Eric Jones
2068 <eric-AT-enthought.com>.
2069 <eric-AT-enthought.com>.
2069
2070
2070 2004-11-07 Fernando Perez <fperez@colorado.edu>
2071 2004-11-07 Fernando Perez <fperez@colorado.edu>
2071
2072
2072 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2073 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2073 sometimes seen by win2k/cygwin users.
2074 sometimes seen by win2k/cygwin users.
2074
2075
2075 2004-11-06 Fernando Perez <fperez@colorado.edu>
2076 2004-11-06 Fernando Perez <fperez@colorado.edu>
2076
2077
2077 * IPython/iplib.py (interact): Change the handling of %Exit from
2078 * IPython/iplib.py (interact): Change the handling of %Exit from
2078 trying to propagate a SystemExit to an internal ipython flag.
2079 trying to propagate a SystemExit to an internal ipython flag.
2079 This is less elegant than using Python's exception mechanism, but
2080 This is less elegant than using Python's exception mechanism, but
2080 I can't get that to work reliably with threads, so under -pylab
2081 I can't get that to work reliably with threads, so under -pylab
2081 %Exit was hanging IPython. Cross-thread exception handling is
2082 %Exit was hanging IPython. Cross-thread exception handling is
2082 really a bitch. Thaks to a bug report by Stephen Walton
2083 really a bitch. Thaks to a bug report by Stephen Walton
2083 <stephen.walton-AT-csun.edu>.
2084 <stephen.walton-AT-csun.edu>.
2084
2085
2085 2004-11-04 Fernando Perez <fperez@colorado.edu>
2086 2004-11-04 Fernando Perez <fperez@colorado.edu>
2086
2087
2087 * IPython/iplib.py (raw_input_original): store a pointer to the
2088 * IPython/iplib.py (raw_input_original): store a pointer to the
2088 true raw_input to harden against code which can modify it
2089 true raw_input to harden against code which can modify it
2089 (wx.py.PyShell does this and would otherwise crash ipython).
2090 (wx.py.PyShell does this and would otherwise crash ipython).
2090 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2091 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2091
2092
2092 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2093 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2093 Ctrl-C problem, which does not mess up the input line.
2094 Ctrl-C problem, which does not mess up the input line.
2094
2095
2095 2004-11-03 Fernando Perez <fperez@colorado.edu>
2096 2004-11-03 Fernando Perez <fperez@colorado.edu>
2096
2097
2097 * IPython/Release.py: Changed licensing to BSD, in all files.
2098 * IPython/Release.py: Changed licensing to BSD, in all files.
2098 (name): lowercase name for tarball/RPM release.
2099 (name): lowercase name for tarball/RPM release.
2099
2100
2100 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2101 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2101 use throughout ipython.
2102 use throughout ipython.
2102
2103
2103 * IPython/Magic.py (Magic._ofind): Switch to using the new
2104 * IPython/Magic.py (Magic._ofind): Switch to using the new
2104 OInspect.getdoc() function.
2105 OInspect.getdoc() function.
2105
2106
2106 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2107 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2107 of the line currently being canceled via Ctrl-C. It's extremely
2108 of the line currently being canceled via Ctrl-C. It's extremely
2108 ugly, but I don't know how to do it better (the problem is one of
2109 ugly, but I don't know how to do it better (the problem is one of
2109 handling cross-thread exceptions).
2110 handling cross-thread exceptions).
2110
2111
2111 2004-10-28 Fernando Perez <fperez@colorado.edu>
2112 2004-10-28 Fernando Perez <fperez@colorado.edu>
2112
2113
2113 * IPython/Shell.py (signal_handler): add signal handlers to trap
2114 * IPython/Shell.py (signal_handler): add signal handlers to trap
2114 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2115 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2115 report by Francesc Alted.
2116 report by Francesc Alted.
2116
2117
2117 2004-10-21 Fernando Perez <fperez@colorado.edu>
2118 2004-10-21 Fernando Perez <fperez@colorado.edu>
2118
2119
2119 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2120 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2120 to % for pysh syntax extensions.
2121 to % for pysh syntax extensions.
2121
2122
2122 2004-10-09 Fernando Perez <fperez@colorado.edu>
2123 2004-10-09 Fernando Perez <fperez@colorado.edu>
2123
2124
2124 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2125 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2125 arrays to print a more useful summary, without calling str(arr).
2126 arrays to print a more useful summary, without calling str(arr).
2126 This avoids the problem of extremely lengthy computations which
2127 This avoids the problem of extremely lengthy computations which
2127 occur if arr is large, and appear to the user as a system lockup
2128 occur if arr is large, and appear to the user as a system lockup
2128 with 100% cpu activity. After a suggestion by Kristian Sandberg
2129 with 100% cpu activity. After a suggestion by Kristian Sandberg
2129 <Kristian.Sandberg@colorado.edu>.
2130 <Kristian.Sandberg@colorado.edu>.
2130 (Magic.__init__): fix bug in global magic escapes not being
2131 (Magic.__init__): fix bug in global magic escapes not being
2131 correctly set.
2132 correctly set.
2132
2133
2133 2004-10-08 Fernando Perez <fperez@colorado.edu>
2134 2004-10-08 Fernando Perez <fperez@colorado.edu>
2134
2135
2135 * IPython/Magic.py (__license__): change to absolute imports of
2136 * IPython/Magic.py (__license__): change to absolute imports of
2136 ipython's own internal packages, to start adapting to the absolute
2137 ipython's own internal packages, to start adapting to the absolute
2137 import requirement of PEP-328.
2138 import requirement of PEP-328.
2138
2139
2139 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2140 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2140 files, and standardize author/license marks through the Release
2141 files, and standardize author/license marks through the Release
2141 module instead of having per/file stuff (except for files with
2142 module instead of having per/file stuff (except for files with
2142 particular licenses, like the MIT/PSF-licensed codes).
2143 particular licenses, like the MIT/PSF-licensed codes).
2143
2144
2144 * IPython/Debugger.py: remove dead code for python 2.1
2145 * IPython/Debugger.py: remove dead code for python 2.1
2145
2146
2146 2004-10-04 Fernando Perez <fperez@colorado.edu>
2147 2004-10-04 Fernando Perez <fperez@colorado.edu>
2147
2148
2148 * IPython/iplib.py (ipmagic): New function for accessing magics
2149 * IPython/iplib.py (ipmagic): New function for accessing magics
2149 via a normal python function call.
2150 via a normal python function call.
2150
2151
2151 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2152 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2152 from '@' to '%', to accomodate the new @decorator syntax of python
2153 from '@' to '%', to accomodate the new @decorator syntax of python
2153 2.4.
2154 2.4.
2154
2155
2155 2004-09-29 Fernando Perez <fperez@colorado.edu>
2156 2004-09-29 Fernando Perez <fperez@colorado.edu>
2156
2157
2157 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2158 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2158 matplotlib.use to prevent running scripts which try to switch
2159 matplotlib.use to prevent running scripts which try to switch
2159 interactive backends from within ipython. This will just crash
2160 interactive backends from within ipython. This will just crash
2160 the python interpreter, so we can't allow it (but a detailed error
2161 the python interpreter, so we can't allow it (but a detailed error
2161 is given to the user).
2162 is given to the user).
2162
2163
2163 2004-09-28 Fernando Perez <fperez@colorado.edu>
2164 2004-09-28 Fernando Perez <fperez@colorado.edu>
2164
2165
2165 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2166 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2166 matplotlib-related fixes so that using @run with non-matplotlib
2167 matplotlib-related fixes so that using @run with non-matplotlib
2167 scripts doesn't pop up spurious plot windows. This requires
2168 scripts doesn't pop up spurious plot windows. This requires
2168 matplotlib >= 0.63, where I had to make some changes as well.
2169 matplotlib >= 0.63, where I had to make some changes as well.
2169
2170
2170 * IPython/ipmaker.py (make_IPython): update version requirement to
2171 * IPython/ipmaker.py (make_IPython): update version requirement to
2171 python 2.2.
2172 python 2.2.
2172
2173
2173 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2174 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2174 banner arg for embedded customization.
2175 banner arg for embedded customization.
2175
2176
2176 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2177 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2177 explicit uses of __IP as the IPython's instance name. Now things
2178 explicit uses of __IP as the IPython's instance name. Now things
2178 are properly handled via the shell.name value. The actual code
2179 are properly handled via the shell.name value. The actual code
2179 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2180 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2180 is much better than before. I'll clean things completely when the
2181 is much better than before. I'll clean things completely when the
2181 magic stuff gets a real overhaul.
2182 magic stuff gets a real overhaul.
2182
2183
2183 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2184 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2184 minor changes to debian dir.
2185 minor changes to debian dir.
2185
2186
2186 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2187 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2187 pointer to the shell itself in the interactive namespace even when
2188 pointer to the shell itself in the interactive namespace even when
2188 a user-supplied dict is provided. This is needed for embedding
2189 a user-supplied dict is provided. This is needed for embedding
2189 purposes (found by tests with Michel Sanner).
2190 purposes (found by tests with Michel Sanner).
2190
2191
2191 2004-09-27 Fernando Perez <fperez@colorado.edu>
2192 2004-09-27 Fernando Perez <fperez@colorado.edu>
2192
2193
2193 * IPython/UserConfig/ipythonrc: remove []{} from
2194 * IPython/UserConfig/ipythonrc: remove []{} from
2194 readline_remove_delims, so that things like [modname.<TAB> do
2195 readline_remove_delims, so that things like [modname.<TAB> do
2195 proper completion. This disables [].TAB, but that's a less common
2196 proper completion. This disables [].TAB, but that's a less common
2196 case than module names in list comprehensions, for example.
2197 case than module names in list comprehensions, for example.
2197 Thanks to a report by Andrea Riciputi.
2198 Thanks to a report by Andrea Riciputi.
2198
2199
2199 2004-09-09 Fernando Perez <fperez@colorado.edu>
2200 2004-09-09 Fernando Perez <fperez@colorado.edu>
2200
2201
2201 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2202 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2202 blocking problems in win32 and osx. Fix by John.
2203 blocking problems in win32 and osx. Fix by John.
2203
2204
2204 2004-09-08 Fernando Perez <fperez@colorado.edu>
2205 2004-09-08 Fernando Perez <fperez@colorado.edu>
2205
2206
2206 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2207 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2207 for Win32 and OSX. Fix by John Hunter.
2208 for Win32 and OSX. Fix by John Hunter.
2208
2209
2209 2004-08-30 *** Released version 0.6.3
2210 2004-08-30 *** Released version 0.6.3
2210
2211
2211 2004-08-30 Fernando Perez <fperez@colorado.edu>
2212 2004-08-30 Fernando Perez <fperez@colorado.edu>
2212
2213
2213 * setup.py (isfile): Add manpages to list of dependent files to be
2214 * setup.py (isfile): Add manpages to list of dependent files to be
2214 updated.
2215 updated.
2215
2216
2216 2004-08-27 Fernando Perez <fperez@colorado.edu>
2217 2004-08-27 Fernando Perez <fperez@colorado.edu>
2217
2218
2218 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2219 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2219 for now. They don't really work with standalone WX/GTK code
2220 for now. They don't really work with standalone WX/GTK code
2220 (though matplotlib IS working fine with both of those backends).
2221 (though matplotlib IS working fine with both of those backends).
2221 This will neeed much more testing. I disabled most things with
2222 This will neeed much more testing. I disabled most things with
2222 comments, so turning it back on later should be pretty easy.
2223 comments, so turning it back on later should be pretty easy.
2223
2224
2224 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2225 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2225 autocalling of expressions like r'foo', by modifying the line
2226 autocalling of expressions like r'foo', by modifying the line
2226 split regexp. Closes
2227 split regexp. Closes
2227 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2228 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2228 Riley <ipythonbugs-AT-sabi.net>.
2229 Riley <ipythonbugs-AT-sabi.net>.
2229 (InteractiveShell.mainloop): honor --nobanner with banner
2230 (InteractiveShell.mainloop): honor --nobanner with banner
2230 extensions.
2231 extensions.
2231
2232
2232 * IPython/Shell.py: Significant refactoring of all classes, so
2233 * IPython/Shell.py: Significant refactoring of all classes, so
2233 that we can really support ALL matplotlib backends and threading
2234 that we can really support ALL matplotlib backends and threading
2234 models (John spotted a bug with Tk which required this). Now we
2235 models (John spotted a bug with Tk which required this). Now we
2235 should support single-threaded, WX-threads and GTK-threads, both
2236 should support single-threaded, WX-threads and GTK-threads, both
2236 for generic code and for matplotlib.
2237 for generic code and for matplotlib.
2237
2238
2238 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2239 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2239 -pylab, to simplify things for users. Will also remove the pylab
2240 -pylab, to simplify things for users. Will also remove the pylab
2240 profile, since now all of matplotlib configuration is directly
2241 profile, since now all of matplotlib configuration is directly
2241 handled here. This also reduces startup time.
2242 handled here. This also reduces startup time.
2242
2243
2243 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2244 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2244 shell wasn't being correctly called. Also in IPShellWX.
2245 shell wasn't being correctly called. Also in IPShellWX.
2245
2246
2246 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2247 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2247 fine-tune banner.
2248 fine-tune banner.
2248
2249
2249 * IPython/numutils.py (spike): Deprecate these spike functions,
2250 * IPython/numutils.py (spike): Deprecate these spike functions,
2250 delete (long deprecated) gnuplot_exec handler.
2251 delete (long deprecated) gnuplot_exec handler.
2251
2252
2252 2004-08-26 Fernando Perez <fperez@colorado.edu>
2253 2004-08-26 Fernando Perez <fperez@colorado.edu>
2253
2254
2254 * ipython.1: Update for threading options, plus some others which
2255 * ipython.1: Update for threading options, plus some others which
2255 were missing.
2256 were missing.
2256
2257
2257 * IPython/ipmaker.py (__call__): Added -wthread option for
2258 * IPython/ipmaker.py (__call__): Added -wthread option for
2258 wxpython thread handling. Make sure threading options are only
2259 wxpython thread handling. Make sure threading options are only
2259 valid at the command line.
2260 valid at the command line.
2260
2261
2261 * scripts/ipython: moved shell selection into a factory function
2262 * scripts/ipython: moved shell selection into a factory function
2262 in Shell.py, to keep the starter script to a minimum.
2263 in Shell.py, to keep the starter script to a minimum.
2263
2264
2264 2004-08-25 Fernando Perez <fperez@colorado.edu>
2265 2004-08-25 Fernando Perez <fperez@colorado.edu>
2265
2266
2266 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2267 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2267 John. Along with some recent changes he made to matplotlib, the
2268 John. Along with some recent changes he made to matplotlib, the
2268 next versions of both systems should work very well together.
2269 next versions of both systems should work very well together.
2269
2270
2270 2004-08-24 Fernando Perez <fperez@colorado.edu>
2271 2004-08-24 Fernando Perez <fperez@colorado.edu>
2271
2272
2272 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2273 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2273 tried to switch the profiling to using hotshot, but I'm getting
2274 tried to switch the profiling to using hotshot, but I'm getting
2274 strange errors from prof.runctx() there. I may be misreading the
2275 strange errors from prof.runctx() there. I may be misreading the
2275 docs, but it looks weird. For now the profiling code will
2276 docs, but it looks weird. For now the profiling code will
2276 continue to use the standard profiler.
2277 continue to use the standard profiler.
2277
2278
2278 2004-08-23 Fernando Perez <fperez@colorado.edu>
2279 2004-08-23 Fernando Perez <fperez@colorado.edu>
2279
2280
2280 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2281 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2281 threaded shell, by John Hunter. It's not quite ready yet, but
2282 threaded shell, by John Hunter. It's not quite ready yet, but
2282 close.
2283 close.
2283
2284
2284 2004-08-22 Fernando Perez <fperez@colorado.edu>
2285 2004-08-22 Fernando Perez <fperez@colorado.edu>
2285
2286
2286 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2287 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2287 in Magic and ultraTB.
2288 in Magic and ultraTB.
2288
2289
2289 * ipython.1: document threading options in manpage.
2290 * ipython.1: document threading options in manpage.
2290
2291
2291 * scripts/ipython: Changed name of -thread option to -gthread,
2292 * scripts/ipython: Changed name of -thread option to -gthread,
2292 since this is GTK specific. I want to leave the door open for a
2293 since this is GTK specific. I want to leave the door open for a
2293 -wthread option for WX, which will most likely be necessary. This
2294 -wthread option for WX, which will most likely be necessary. This
2294 change affects usage and ipmaker as well.
2295 change affects usage and ipmaker as well.
2295
2296
2296 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2297 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2297 handle the matplotlib shell issues. Code by John Hunter
2298 handle the matplotlib shell issues. Code by John Hunter
2298 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2299 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2299 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2300 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2300 broken (and disabled for end users) for now, but it puts the
2301 broken (and disabled for end users) for now, but it puts the
2301 infrastructure in place.
2302 infrastructure in place.
2302
2303
2303 2004-08-21 Fernando Perez <fperez@colorado.edu>
2304 2004-08-21 Fernando Perez <fperez@colorado.edu>
2304
2305
2305 * ipythonrc-pylab: Add matplotlib support.
2306 * ipythonrc-pylab: Add matplotlib support.
2306
2307
2307 * matplotlib_config.py: new files for matplotlib support, part of
2308 * matplotlib_config.py: new files for matplotlib support, part of
2308 the pylab profile.
2309 the pylab profile.
2309
2310
2310 * IPython/usage.py (__doc__): documented the threading options.
2311 * IPython/usage.py (__doc__): documented the threading options.
2311
2312
2312 2004-08-20 Fernando Perez <fperez@colorado.edu>
2313 2004-08-20 Fernando Perez <fperez@colorado.edu>
2313
2314
2314 * ipython: Modified the main calling routine to handle the -thread
2315 * ipython: Modified the main calling routine to handle the -thread
2315 and -mpthread options. This needs to be done as a top-level hack,
2316 and -mpthread options. This needs to be done as a top-level hack,
2316 because it determines which class to instantiate for IPython
2317 because it determines which class to instantiate for IPython
2317 itself.
2318 itself.
2318
2319
2319 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2320 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2320 classes to support multithreaded GTK operation without blocking,
2321 classes to support multithreaded GTK operation without blocking,
2321 and matplotlib with all backends. This is a lot of still very
2322 and matplotlib with all backends. This is a lot of still very
2322 experimental code, and threads are tricky. So it may still have a
2323 experimental code, and threads are tricky. So it may still have a
2323 few rough edges... This code owes a lot to
2324 few rough edges... This code owes a lot to
2324 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2325 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2325 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2326 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2326 to John Hunter for all the matplotlib work.
2327 to John Hunter for all the matplotlib work.
2327
2328
2328 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2329 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2329 options for gtk thread and matplotlib support.
2330 options for gtk thread and matplotlib support.
2330
2331
2331 2004-08-16 Fernando Perez <fperez@colorado.edu>
2332 2004-08-16 Fernando Perez <fperez@colorado.edu>
2332
2333
2333 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2334 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2334 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2335 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2335 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2336 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2336
2337
2337 2004-08-11 Fernando Perez <fperez@colorado.edu>
2338 2004-08-11 Fernando Perez <fperez@colorado.edu>
2338
2339
2339 * setup.py (isfile): Fix build so documentation gets updated for
2340 * setup.py (isfile): Fix build so documentation gets updated for
2340 rpms (it was only done for .tgz builds).
2341 rpms (it was only done for .tgz builds).
2341
2342
2342 2004-08-10 Fernando Perez <fperez@colorado.edu>
2343 2004-08-10 Fernando Perez <fperez@colorado.edu>
2343
2344
2344 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2345 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2345
2346
2346 * iplib.py : Silence syntax error exceptions in tab-completion.
2347 * iplib.py : Silence syntax error exceptions in tab-completion.
2347
2348
2348 2004-08-05 Fernando Perez <fperez@colorado.edu>
2349 2004-08-05 Fernando Perez <fperez@colorado.edu>
2349
2350
2350 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2351 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2351 'color off' mark for continuation prompts. This was causing long
2352 'color off' mark for continuation prompts. This was causing long
2352 continuation lines to mis-wrap.
2353 continuation lines to mis-wrap.
2353
2354
2354 2004-08-01 Fernando Perez <fperez@colorado.edu>
2355 2004-08-01 Fernando Perez <fperez@colorado.edu>
2355
2356
2356 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2357 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2357 for building ipython to be a parameter. All this is necessary
2358 for building ipython to be a parameter. All this is necessary
2358 right now to have a multithreaded version, but this insane
2359 right now to have a multithreaded version, but this insane
2359 non-design will be cleaned up soon. For now, it's a hack that
2360 non-design will be cleaned up soon. For now, it's a hack that
2360 works.
2361 works.
2361
2362
2362 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2363 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2363 args in various places. No bugs so far, but it's a dangerous
2364 args in various places. No bugs so far, but it's a dangerous
2364 practice.
2365 practice.
2365
2366
2366 2004-07-31 Fernando Perez <fperez@colorado.edu>
2367 2004-07-31 Fernando Perez <fperez@colorado.edu>
2367
2368
2368 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2369 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2369 fix completion of files with dots in their names under most
2370 fix completion of files with dots in their names under most
2370 profiles (pysh was OK because the completion order is different).
2371 profiles (pysh was OK because the completion order is different).
2371
2372
2372 2004-07-27 Fernando Perez <fperez@colorado.edu>
2373 2004-07-27 Fernando Perez <fperez@colorado.edu>
2373
2374
2374 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2375 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2375 keywords manually, b/c the one in keyword.py was removed in python
2376 keywords manually, b/c the one in keyword.py was removed in python
2376 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2377 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2377 This is NOT a bug under python 2.3 and earlier.
2378 This is NOT a bug under python 2.3 and earlier.
2378
2379
2379 2004-07-26 Fernando Perez <fperez@colorado.edu>
2380 2004-07-26 Fernando Perez <fperez@colorado.edu>
2380
2381
2381 * IPython/ultraTB.py (VerboseTB.text): Add another
2382 * IPython/ultraTB.py (VerboseTB.text): Add another
2382 linecache.checkcache() call to try to prevent inspect.py from
2383 linecache.checkcache() call to try to prevent inspect.py from
2383 crashing under python 2.3. I think this fixes
2384 crashing under python 2.3. I think this fixes
2384 http://www.scipy.net/roundup/ipython/issue17.
2385 http://www.scipy.net/roundup/ipython/issue17.
2385
2386
2386 2004-07-26 *** Released version 0.6.2
2387 2004-07-26 *** Released version 0.6.2
2387
2388
2388 2004-07-26 Fernando Perez <fperez@colorado.edu>
2389 2004-07-26 Fernando Perez <fperez@colorado.edu>
2389
2390
2390 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2391 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2391 fail for any number.
2392 fail for any number.
2392 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2393 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2393 empty bookmarks.
2394 empty bookmarks.
2394
2395
2395 2004-07-26 *** Released version 0.6.1
2396 2004-07-26 *** Released version 0.6.1
2396
2397
2397 2004-07-26 Fernando Perez <fperez@colorado.edu>
2398 2004-07-26 Fernando Perez <fperez@colorado.edu>
2398
2399
2399 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2400 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2400
2401
2401 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2402 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2402 escaping '()[]{}' in filenames.
2403 escaping '()[]{}' in filenames.
2403
2404
2404 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2405 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2405 Python 2.2 users who lack a proper shlex.split.
2406 Python 2.2 users who lack a proper shlex.split.
2406
2407
2407 2004-07-19 Fernando Perez <fperez@colorado.edu>
2408 2004-07-19 Fernando Perez <fperez@colorado.edu>
2408
2409
2409 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2410 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2410 for reading readline's init file. I follow the normal chain:
2411 for reading readline's init file. I follow the normal chain:
2411 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2412 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2412 report by Mike Heeter. This closes
2413 report by Mike Heeter. This closes
2413 http://www.scipy.net/roundup/ipython/issue16.
2414 http://www.scipy.net/roundup/ipython/issue16.
2414
2415
2415 2004-07-18 Fernando Perez <fperez@colorado.edu>
2416 2004-07-18 Fernando Perez <fperez@colorado.edu>
2416
2417
2417 * IPython/iplib.py (__init__): Add better handling of '\' under
2418 * IPython/iplib.py (__init__): Add better handling of '\' under
2418 Win32 for filenames. After a patch by Ville.
2419 Win32 for filenames. After a patch by Ville.
2419
2420
2420 2004-07-17 Fernando Perez <fperez@colorado.edu>
2421 2004-07-17 Fernando Perez <fperez@colorado.edu>
2421
2422
2422 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2423 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2423 autocalling would be triggered for 'foo is bar' if foo is
2424 autocalling would be triggered for 'foo is bar' if foo is
2424 callable. I also cleaned up the autocall detection code to use a
2425 callable. I also cleaned up the autocall detection code to use a
2425 regexp, which is faster. Bug reported by Alexander Schmolck.
2426 regexp, which is faster. Bug reported by Alexander Schmolck.
2426
2427
2427 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2428 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2428 '?' in them would confuse the help system. Reported by Alex
2429 '?' in them would confuse the help system. Reported by Alex
2429 Schmolck.
2430 Schmolck.
2430
2431
2431 2004-07-16 Fernando Perez <fperez@colorado.edu>
2432 2004-07-16 Fernando Perez <fperez@colorado.edu>
2432
2433
2433 * IPython/GnuplotInteractive.py (__all__): added plot2.
2434 * IPython/GnuplotInteractive.py (__all__): added plot2.
2434
2435
2435 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2436 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2436 plotting dictionaries, lists or tuples of 1d arrays.
2437 plotting dictionaries, lists or tuples of 1d arrays.
2437
2438
2438 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2439 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2439 optimizations.
2440 optimizations.
2440
2441
2441 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2442 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2442 the information which was there from Janko's original IPP code:
2443 the information which was there from Janko's original IPP code:
2443
2444
2444 03.05.99 20:53 porto.ifm.uni-kiel.de
2445 03.05.99 20:53 porto.ifm.uni-kiel.de
2445 --Started changelog.
2446 --Started changelog.
2446 --make clear do what it say it does
2447 --make clear do what it say it does
2447 --added pretty output of lines from inputcache
2448 --added pretty output of lines from inputcache
2448 --Made Logger a mixin class, simplifies handling of switches
2449 --Made Logger a mixin class, simplifies handling of switches
2449 --Added own completer class. .string<TAB> expands to last history
2450 --Added own completer class. .string<TAB> expands to last history
2450 line which starts with string. The new expansion is also present
2451 line which starts with string. The new expansion is also present
2451 with Ctrl-r from the readline library. But this shows, who this
2452 with Ctrl-r from the readline library. But this shows, who this
2452 can be done for other cases.
2453 can be done for other cases.
2453 --Added convention that all shell functions should accept a
2454 --Added convention that all shell functions should accept a
2454 parameter_string This opens the door for different behaviour for
2455 parameter_string This opens the door for different behaviour for
2455 each function. @cd is a good example of this.
2456 each function. @cd is a good example of this.
2456
2457
2457 04.05.99 12:12 porto.ifm.uni-kiel.de
2458 04.05.99 12:12 porto.ifm.uni-kiel.de
2458 --added logfile rotation
2459 --added logfile rotation
2459 --added new mainloop method which freezes first the namespace
2460 --added new mainloop method which freezes first the namespace
2460
2461
2461 07.05.99 21:24 porto.ifm.uni-kiel.de
2462 07.05.99 21:24 porto.ifm.uni-kiel.de
2462 --added the docreader classes. Now there is a help system.
2463 --added the docreader classes. Now there is a help system.
2463 -This is only a first try. Currently it's not easy to put new
2464 -This is only a first try. Currently it's not easy to put new
2464 stuff in the indices. But this is the way to go. Info would be
2465 stuff in the indices. But this is the way to go. Info would be
2465 better, but HTML is every where and not everybody has an info
2466 better, but HTML is every where and not everybody has an info
2466 system installed and it's not so easy to change html-docs to info.
2467 system installed and it's not so easy to change html-docs to info.
2467 --added global logfile option
2468 --added global logfile option
2468 --there is now a hook for object inspection method pinfo needs to
2469 --there is now a hook for object inspection method pinfo needs to
2469 be provided for this. Can be reached by two '??'.
2470 be provided for this. Can be reached by two '??'.
2470
2471
2471 08.05.99 20:51 porto.ifm.uni-kiel.de
2472 08.05.99 20:51 porto.ifm.uni-kiel.de
2472 --added a README
2473 --added a README
2473 --bug in rc file. Something has changed so functions in the rc
2474 --bug in rc file. Something has changed so functions in the rc
2474 file need to reference the shell and not self. Not clear if it's a
2475 file need to reference the shell and not self. Not clear if it's a
2475 bug or feature.
2476 bug or feature.
2476 --changed rc file for new behavior
2477 --changed rc file for new behavior
2477
2478
2478 2004-07-15 Fernando Perez <fperez@colorado.edu>
2479 2004-07-15 Fernando Perez <fperez@colorado.edu>
2479
2480
2480 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2481 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2481 cache was falling out of sync in bizarre manners when multi-line
2482 cache was falling out of sync in bizarre manners when multi-line
2482 input was present. Minor optimizations and cleanup.
2483 input was present. Minor optimizations and cleanup.
2483
2484
2484 (Logger): Remove old Changelog info for cleanup. This is the
2485 (Logger): Remove old Changelog info for cleanup. This is the
2485 information which was there from Janko's original code:
2486 information which was there from Janko's original code:
2486
2487
2487 Changes to Logger: - made the default log filename a parameter
2488 Changes to Logger: - made the default log filename a parameter
2488
2489
2489 - put a check for lines beginning with !@? in log(). Needed
2490 - put a check for lines beginning with !@? in log(). Needed
2490 (even if the handlers properly log their lines) for mid-session
2491 (even if the handlers properly log their lines) for mid-session
2491 logging activation to work properly. Without this, lines logged
2492 logging activation to work properly. Without this, lines logged
2492 in mid session, which get read from the cache, would end up
2493 in mid session, which get read from the cache, would end up
2493 'bare' (with !@? in the open) in the log. Now they are caught
2494 'bare' (with !@? in the open) in the log. Now they are caught
2494 and prepended with a #.
2495 and prepended with a #.
2495
2496
2496 * IPython/iplib.py (InteractiveShell.init_readline): added check
2497 * IPython/iplib.py (InteractiveShell.init_readline): added check
2497 in case MagicCompleter fails to be defined, so we don't crash.
2498 in case MagicCompleter fails to be defined, so we don't crash.
2498
2499
2499 2004-07-13 Fernando Perez <fperez@colorado.edu>
2500 2004-07-13 Fernando Perez <fperez@colorado.edu>
2500
2501
2501 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2502 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2502 of EPS if the requested filename ends in '.eps'.
2503 of EPS if the requested filename ends in '.eps'.
2503
2504
2504 2004-07-04 Fernando Perez <fperez@colorado.edu>
2505 2004-07-04 Fernando Perez <fperez@colorado.edu>
2505
2506
2506 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2507 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2507 escaping of quotes when calling the shell.
2508 escaping of quotes when calling the shell.
2508
2509
2509 2004-07-02 Fernando Perez <fperez@colorado.edu>
2510 2004-07-02 Fernando Perez <fperez@colorado.edu>
2510
2511
2511 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2512 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2512 gettext not working because we were clobbering '_'. Fixes
2513 gettext not working because we were clobbering '_'. Fixes
2513 http://www.scipy.net/roundup/ipython/issue6.
2514 http://www.scipy.net/roundup/ipython/issue6.
2514
2515
2515 2004-07-01 Fernando Perez <fperez@colorado.edu>
2516 2004-07-01 Fernando Perez <fperez@colorado.edu>
2516
2517
2517 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2518 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2518 into @cd. Patch by Ville.
2519 into @cd. Patch by Ville.
2519
2520
2520 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2521 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2521 new function to store things after ipmaker runs. Patch by Ville.
2522 new function to store things after ipmaker runs. Patch by Ville.
2522 Eventually this will go away once ipmaker is removed and the class
2523 Eventually this will go away once ipmaker is removed and the class
2523 gets cleaned up, but for now it's ok. Key functionality here is
2524 gets cleaned up, but for now it's ok. Key functionality here is
2524 the addition of the persistent storage mechanism, a dict for
2525 the addition of the persistent storage mechanism, a dict for
2525 keeping data across sessions (for now just bookmarks, but more can
2526 keeping data across sessions (for now just bookmarks, but more can
2526 be implemented later).
2527 be implemented later).
2527
2528
2528 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2529 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2529 persistent across sections. Patch by Ville, I modified it
2530 persistent across sections. Patch by Ville, I modified it
2530 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2531 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2531 added a '-l' option to list all bookmarks.
2532 added a '-l' option to list all bookmarks.
2532
2533
2533 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2534 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2534 center for cleanup. Registered with atexit.register(). I moved
2535 center for cleanup. Registered with atexit.register(). I moved
2535 here the old exit_cleanup(). After a patch by Ville.
2536 here the old exit_cleanup(). After a patch by Ville.
2536
2537
2537 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2538 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2538 characters in the hacked shlex_split for python 2.2.
2539 characters in the hacked shlex_split for python 2.2.
2539
2540
2540 * IPython/iplib.py (file_matches): more fixes to filenames with
2541 * IPython/iplib.py (file_matches): more fixes to filenames with
2541 whitespace in them. It's not perfect, but limitations in python's
2542 whitespace in them. It's not perfect, but limitations in python's
2542 readline make it impossible to go further.
2543 readline make it impossible to go further.
2543
2544
2544 2004-06-29 Fernando Perez <fperez@colorado.edu>
2545 2004-06-29 Fernando Perez <fperez@colorado.edu>
2545
2546
2546 * IPython/iplib.py (file_matches): escape whitespace correctly in
2547 * IPython/iplib.py (file_matches): escape whitespace correctly in
2547 filename completions. Bug reported by Ville.
2548 filename completions. Bug reported by Ville.
2548
2549
2549 2004-06-28 Fernando Perez <fperez@colorado.edu>
2550 2004-06-28 Fernando Perez <fperez@colorado.edu>
2550
2551
2551 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2552 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2552 the history file will be called 'history-PROFNAME' (or just
2553 the history file will be called 'history-PROFNAME' (or just
2553 'history' if no profile is loaded). I was getting annoyed at
2554 'history' if no profile is loaded). I was getting annoyed at
2554 getting my Numerical work history clobbered by pysh sessions.
2555 getting my Numerical work history clobbered by pysh sessions.
2555
2556
2556 * IPython/iplib.py (InteractiveShell.__init__): Internal
2557 * IPython/iplib.py (InteractiveShell.__init__): Internal
2557 getoutputerror() function so that we can honor the system_verbose
2558 getoutputerror() function so that we can honor the system_verbose
2558 flag for _all_ system calls. I also added escaping of #
2559 flag for _all_ system calls. I also added escaping of #
2559 characters here to avoid confusing Itpl.
2560 characters here to avoid confusing Itpl.
2560
2561
2561 * IPython/Magic.py (shlex_split): removed call to shell in
2562 * IPython/Magic.py (shlex_split): removed call to shell in
2562 parse_options and replaced it with shlex.split(). The annoying
2563 parse_options and replaced it with shlex.split(). The annoying
2563 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2564 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2564 to backport it from 2.3, with several frail hacks (the shlex
2565 to backport it from 2.3, with several frail hacks (the shlex
2565 module is rather limited in 2.2). Thanks to a suggestion by Ville
2566 module is rather limited in 2.2). Thanks to a suggestion by Ville
2566 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2567 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2567 problem.
2568 problem.
2568
2569
2569 (Magic.magic_system_verbose): new toggle to print the actual
2570 (Magic.magic_system_verbose): new toggle to print the actual
2570 system calls made by ipython. Mainly for debugging purposes.
2571 system calls made by ipython. Mainly for debugging purposes.
2571
2572
2572 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2573 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2573 doesn't support persistence. Reported (and fix suggested) by
2574 doesn't support persistence. Reported (and fix suggested) by
2574 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2575 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2575
2576
2576 2004-06-26 Fernando Perez <fperez@colorado.edu>
2577 2004-06-26 Fernando Perez <fperez@colorado.edu>
2577
2578
2578 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2579 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2579 continue prompts.
2580 continue prompts.
2580
2581
2581 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2582 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2582 function (basically a big docstring) and a few more things here to
2583 function (basically a big docstring) and a few more things here to
2583 speedup startup. pysh.py is now very lightweight. We want because
2584 speedup startup. pysh.py is now very lightweight. We want because
2584 it gets execfile'd, while InterpreterExec gets imported, so
2585 it gets execfile'd, while InterpreterExec gets imported, so
2585 byte-compilation saves time.
2586 byte-compilation saves time.
2586
2587
2587 2004-06-25 Fernando Perez <fperez@colorado.edu>
2588 2004-06-25 Fernando Perez <fperez@colorado.edu>
2588
2589
2589 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2590 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2590 -NUM', which was recently broken.
2591 -NUM', which was recently broken.
2591
2592
2592 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2593 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2593 in multi-line input (but not !!, which doesn't make sense there).
2594 in multi-line input (but not !!, which doesn't make sense there).
2594
2595
2595 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2596 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2596 It's just too useful, and people can turn it off in the less
2597 It's just too useful, and people can turn it off in the less
2597 common cases where it's a problem.
2598 common cases where it's a problem.
2598
2599
2599 2004-06-24 Fernando Perez <fperez@colorado.edu>
2600 2004-06-24 Fernando Perez <fperez@colorado.edu>
2600
2601
2601 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2602 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2602 special syntaxes (like alias calling) is now allied in multi-line
2603 special syntaxes (like alias calling) is now allied in multi-line
2603 input. This is still _very_ experimental, but it's necessary for
2604 input. This is still _very_ experimental, but it's necessary for
2604 efficient shell usage combining python looping syntax with system
2605 efficient shell usage combining python looping syntax with system
2605 calls. For now it's restricted to aliases, I don't think it
2606 calls. For now it's restricted to aliases, I don't think it
2606 really even makes sense to have this for magics.
2607 really even makes sense to have this for magics.
2607
2608
2608 2004-06-23 Fernando Perez <fperez@colorado.edu>
2609 2004-06-23 Fernando Perez <fperez@colorado.edu>
2609
2610
2610 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2611 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2611 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2612 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2612
2613
2613 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2614 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2614 extensions under Windows (after code sent by Gary Bishop). The
2615 extensions under Windows (after code sent by Gary Bishop). The
2615 extensions considered 'executable' are stored in IPython's rc
2616 extensions considered 'executable' are stored in IPython's rc
2616 structure as win_exec_ext.
2617 structure as win_exec_ext.
2617
2618
2618 * IPython/genutils.py (shell): new function, like system() but
2619 * IPython/genutils.py (shell): new function, like system() but
2619 without return value. Very useful for interactive shell work.
2620 without return value. Very useful for interactive shell work.
2620
2621
2621 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2622 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2622 delete aliases.
2623 delete aliases.
2623
2624
2624 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2625 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2625 sure that the alias table doesn't contain python keywords.
2626 sure that the alias table doesn't contain python keywords.
2626
2627
2627 2004-06-21 Fernando Perez <fperez@colorado.edu>
2628 2004-06-21 Fernando Perez <fperez@colorado.edu>
2628
2629
2629 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2630 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2630 non-existent items are found in $PATH. Reported by Thorsten.
2631 non-existent items are found in $PATH. Reported by Thorsten.
2631
2632
2632 2004-06-20 Fernando Perez <fperez@colorado.edu>
2633 2004-06-20 Fernando Perez <fperez@colorado.edu>
2633
2634
2634 * IPython/iplib.py (complete): modified the completer so that the
2635 * IPython/iplib.py (complete): modified the completer so that the
2635 order of priorities can be easily changed at runtime.
2636 order of priorities can be easily changed at runtime.
2636
2637
2637 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2638 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2638 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2639 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2639
2640
2640 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2641 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2641 expand Python variables prepended with $ in all system calls. The
2642 expand Python variables prepended with $ in all system calls. The
2642 same was done to InteractiveShell.handle_shell_escape. Now all
2643 same was done to InteractiveShell.handle_shell_escape. Now all
2643 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2644 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2644 expansion of python variables and expressions according to the
2645 expansion of python variables and expressions according to the
2645 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2646 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2646
2647
2647 Though PEP-215 has been rejected, a similar (but simpler) one
2648 Though PEP-215 has been rejected, a similar (but simpler) one
2648 seems like it will go into Python 2.4, PEP-292 -
2649 seems like it will go into Python 2.4, PEP-292 -
2649 http://www.python.org/peps/pep-0292.html.
2650 http://www.python.org/peps/pep-0292.html.
2650
2651
2651 I'll keep the full syntax of PEP-215, since IPython has since the
2652 I'll keep the full syntax of PEP-215, since IPython has since the
2652 start used Ka-Ping Yee's reference implementation discussed there
2653 start used Ka-Ping Yee's reference implementation discussed there
2653 (Itpl), and I actually like the powerful semantics it offers.
2654 (Itpl), and I actually like the powerful semantics it offers.
2654
2655
2655 In order to access normal shell variables, the $ has to be escaped
2656 In order to access normal shell variables, the $ has to be escaped
2656 via an extra $. For example:
2657 via an extra $. For example:
2657
2658
2658 In [7]: PATH='a python variable'
2659 In [7]: PATH='a python variable'
2659
2660
2660 In [8]: !echo $PATH
2661 In [8]: !echo $PATH
2661 a python variable
2662 a python variable
2662
2663
2663 In [9]: !echo $$PATH
2664 In [9]: !echo $$PATH
2664 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2665 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2665
2666
2666 (Magic.parse_options): escape $ so the shell doesn't evaluate
2667 (Magic.parse_options): escape $ so the shell doesn't evaluate
2667 things prematurely.
2668 things prematurely.
2668
2669
2669 * IPython/iplib.py (InteractiveShell.call_alias): added the
2670 * IPython/iplib.py (InteractiveShell.call_alias): added the
2670 ability for aliases to expand python variables via $.
2671 ability for aliases to expand python variables via $.
2671
2672
2672 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2673 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2673 system, now there's a @rehash/@rehashx pair of magics. These work
2674 system, now there's a @rehash/@rehashx pair of magics. These work
2674 like the csh rehash command, and can be invoked at any time. They
2675 like the csh rehash command, and can be invoked at any time. They
2675 build a table of aliases to everything in the user's $PATH
2676 build a table of aliases to everything in the user's $PATH
2676 (@rehash uses everything, @rehashx is slower but only adds
2677 (@rehash uses everything, @rehashx is slower but only adds
2677 executable files). With this, the pysh.py-based shell profile can
2678 executable files). With this, the pysh.py-based shell profile can
2678 now simply call rehash upon startup, and full access to all
2679 now simply call rehash upon startup, and full access to all
2679 programs in the user's path is obtained.
2680 programs in the user's path is obtained.
2680
2681
2681 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2682 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2682 functionality is now fully in place. I removed the old dynamic
2683 functionality is now fully in place. I removed the old dynamic
2683 code generation based approach, in favor of a much lighter one
2684 code generation based approach, in favor of a much lighter one
2684 based on a simple dict. The advantage is that this allows me to
2685 based on a simple dict. The advantage is that this allows me to
2685 now have thousands of aliases with negligible cost (unthinkable
2686 now have thousands of aliases with negligible cost (unthinkable
2686 with the old system).
2687 with the old system).
2687
2688
2688 2004-06-19 Fernando Perez <fperez@colorado.edu>
2689 2004-06-19 Fernando Perez <fperez@colorado.edu>
2689
2690
2690 * IPython/iplib.py (__init__): extended MagicCompleter class to
2691 * IPython/iplib.py (__init__): extended MagicCompleter class to
2691 also complete (last in priority) on user aliases.
2692 also complete (last in priority) on user aliases.
2692
2693
2693 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2694 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2694 call to eval.
2695 call to eval.
2695 (ItplNS.__init__): Added a new class which functions like Itpl,
2696 (ItplNS.__init__): Added a new class which functions like Itpl,
2696 but allows configuring the namespace for the evaluation to occur
2697 but allows configuring the namespace for the evaluation to occur
2697 in.
2698 in.
2698
2699
2699 2004-06-18 Fernando Perez <fperez@colorado.edu>
2700 2004-06-18 Fernando Perez <fperez@colorado.edu>
2700
2701
2701 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2702 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2702 better message when 'exit' or 'quit' are typed (a common newbie
2703 better message when 'exit' or 'quit' are typed (a common newbie
2703 confusion).
2704 confusion).
2704
2705
2705 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2706 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2706 check for Windows users.
2707 check for Windows users.
2707
2708
2708 * IPython/iplib.py (InteractiveShell.user_setup): removed
2709 * IPython/iplib.py (InteractiveShell.user_setup): removed
2709 disabling of colors for Windows. I'll test at runtime and issue a
2710 disabling of colors for Windows. I'll test at runtime and issue a
2710 warning if Gary's readline isn't found, as to nudge users to
2711 warning if Gary's readline isn't found, as to nudge users to
2711 download it.
2712 download it.
2712
2713
2713 2004-06-16 Fernando Perez <fperez@colorado.edu>
2714 2004-06-16 Fernando Perez <fperez@colorado.edu>
2714
2715
2715 * IPython/genutils.py (Stream.__init__): changed to print errors
2716 * IPython/genutils.py (Stream.__init__): changed to print errors
2716 to sys.stderr. I had a circular dependency here. Now it's
2717 to sys.stderr. I had a circular dependency here. Now it's
2717 possible to run ipython as IDLE's shell (consider this pre-alpha,
2718 possible to run ipython as IDLE's shell (consider this pre-alpha,
2718 since true stdout things end up in the starting terminal instead
2719 since true stdout things end up in the starting terminal instead
2719 of IDLE's out).
2720 of IDLE's out).
2720
2721
2721 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2722 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2722 users who haven't # updated their prompt_in2 definitions. Remove
2723 users who haven't # updated their prompt_in2 definitions. Remove
2723 eventually.
2724 eventually.
2724 (multiple_replace): added credit to original ASPN recipe.
2725 (multiple_replace): added credit to original ASPN recipe.
2725
2726
2726 2004-06-15 Fernando Perez <fperez@colorado.edu>
2727 2004-06-15 Fernando Perez <fperez@colorado.edu>
2727
2728
2728 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2729 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2729 list of auto-defined aliases.
2730 list of auto-defined aliases.
2730
2731
2731 2004-06-13 Fernando Perez <fperez@colorado.edu>
2732 2004-06-13 Fernando Perez <fperez@colorado.edu>
2732
2733
2733 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2734 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2734 install was really requested (so setup.py can be used for other
2735 install was really requested (so setup.py can be used for other
2735 things under Windows).
2736 things under Windows).
2736
2737
2737 2004-06-10 Fernando Perez <fperez@colorado.edu>
2738 2004-06-10 Fernando Perez <fperez@colorado.edu>
2738
2739
2739 * IPython/Logger.py (Logger.create_log): Manually remove any old
2740 * IPython/Logger.py (Logger.create_log): Manually remove any old
2740 backup, since os.remove may fail under Windows. Fixes bug
2741 backup, since os.remove may fail under Windows. Fixes bug
2741 reported by Thorsten.
2742 reported by Thorsten.
2742
2743
2743 2004-06-09 Fernando Perez <fperez@colorado.edu>
2744 2004-06-09 Fernando Perez <fperez@colorado.edu>
2744
2745
2745 * examples/example-embed.py: fixed all references to %n (replaced
2746 * examples/example-embed.py: fixed all references to %n (replaced
2746 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2747 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2747 for all examples and the manual as well.
2748 for all examples and the manual as well.
2748
2749
2749 2004-06-08 Fernando Perez <fperez@colorado.edu>
2750 2004-06-08 Fernando Perez <fperez@colorado.edu>
2750
2751
2751 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2752 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2752 alignment and color management. All 3 prompt subsystems now
2753 alignment and color management. All 3 prompt subsystems now
2753 inherit from BasePrompt.
2754 inherit from BasePrompt.
2754
2755
2755 * tools/release: updates for windows installer build and tag rpms
2756 * tools/release: updates for windows installer build and tag rpms
2756 with python version (since paths are fixed).
2757 with python version (since paths are fixed).
2757
2758
2758 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2759 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2759 which will become eventually obsolete. Also fixed the default
2760 which will become eventually obsolete. Also fixed the default
2760 prompt_in2 to use \D, so at least new users start with the correct
2761 prompt_in2 to use \D, so at least new users start with the correct
2761 defaults.
2762 defaults.
2762 WARNING: Users with existing ipythonrc files will need to apply
2763 WARNING: Users with existing ipythonrc files will need to apply
2763 this fix manually!
2764 this fix manually!
2764
2765
2765 * setup.py: make windows installer (.exe). This is finally the
2766 * setup.py: make windows installer (.exe). This is finally the
2766 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2767 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2767 which I hadn't included because it required Python 2.3 (or recent
2768 which I hadn't included because it required Python 2.3 (or recent
2768 distutils).
2769 distutils).
2769
2770
2770 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2771 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2771 usage of new '\D' escape.
2772 usage of new '\D' escape.
2772
2773
2773 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2774 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2774 lacks os.getuid())
2775 lacks os.getuid())
2775 (CachedOutput.set_colors): Added the ability to turn coloring
2776 (CachedOutput.set_colors): Added the ability to turn coloring
2776 on/off with @colors even for manually defined prompt colors. It
2777 on/off with @colors even for manually defined prompt colors. It
2777 uses a nasty global, but it works safely and via the generic color
2778 uses a nasty global, but it works safely and via the generic color
2778 handling mechanism.
2779 handling mechanism.
2779 (Prompt2.__init__): Introduced new escape '\D' for continuation
2780 (Prompt2.__init__): Introduced new escape '\D' for continuation
2780 prompts. It represents the counter ('\#') as dots.
2781 prompts. It represents the counter ('\#') as dots.
2781 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2782 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2782 need to update their ipythonrc files and replace '%n' with '\D' in
2783 need to update their ipythonrc files and replace '%n' with '\D' in
2783 their prompt_in2 settings everywhere. Sorry, but there's
2784 their prompt_in2 settings everywhere. Sorry, but there's
2784 otherwise no clean way to get all prompts to properly align. The
2785 otherwise no clean way to get all prompts to properly align. The
2785 ipythonrc shipped with IPython has been updated.
2786 ipythonrc shipped with IPython has been updated.
2786
2787
2787 2004-06-07 Fernando Perez <fperez@colorado.edu>
2788 2004-06-07 Fernando Perez <fperez@colorado.edu>
2788
2789
2789 * setup.py (isfile): Pass local_icons option to latex2html, so the
2790 * setup.py (isfile): Pass local_icons option to latex2html, so the
2790 resulting HTML file is self-contained. Thanks to
2791 resulting HTML file is self-contained. Thanks to
2791 dryice-AT-liu.com.cn for the tip.
2792 dryice-AT-liu.com.cn for the tip.
2792
2793
2793 * pysh.py: I created a new profile 'shell', which implements a
2794 * pysh.py: I created a new profile 'shell', which implements a
2794 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2795 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2795 system shell, nor will it become one anytime soon. It's mainly
2796 system shell, nor will it become one anytime soon. It's mainly
2796 meant to illustrate the use of the new flexible bash-like prompts.
2797 meant to illustrate the use of the new flexible bash-like prompts.
2797 I guess it could be used by hardy souls for true shell management,
2798 I guess it could be used by hardy souls for true shell management,
2798 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2799 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2799 profile. This uses the InterpreterExec extension provided by
2800 profile. This uses the InterpreterExec extension provided by
2800 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2801 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2801
2802
2802 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2803 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2803 auto-align itself with the length of the previous input prompt
2804 auto-align itself with the length of the previous input prompt
2804 (taking into account the invisible color escapes).
2805 (taking into account the invisible color escapes).
2805 (CachedOutput.__init__): Large restructuring of this class. Now
2806 (CachedOutput.__init__): Large restructuring of this class. Now
2806 all three prompts (primary1, primary2, output) are proper objects,
2807 all three prompts (primary1, primary2, output) are proper objects,
2807 managed by the 'parent' CachedOutput class. The code is still a
2808 managed by the 'parent' CachedOutput class. The code is still a
2808 bit hackish (all prompts share state via a pointer to the cache),
2809 bit hackish (all prompts share state via a pointer to the cache),
2809 but it's overall far cleaner than before.
2810 but it's overall far cleaner than before.
2810
2811
2811 * IPython/genutils.py (getoutputerror): modified to add verbose,
2812 * IPython/genutils.py (getoutputerror): modified to add verbose,
2812 debug and header options. This makes the interface of all getout*
2813 debug and header options. This makes the interface of all getout*
2813 functions uniform.
2814 functions uniform.
2814 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2815 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2815
2816
2816 * IPython/Magic.py (Magic.default_option): added a function to
2817 * IPython/Magic.py (Magic.default_option): added a function to
2817 allow registering default options for any magic command. This
2818 allow registering default options for any magic command. This
2818 makes it easy to have profiles which customize the magics globally
2819 makes it easy to have profiles which customize the magics globally
2819 for a certain use. The values set through this function are
2820 for a certain use. The values set through this function are
2820 picked up by the parse_options() method, which all magics should
2821 picked up by the parse_options() method, which all magics should
2821 use to parse their options.
2822 use to parse their options.
2822
2823
2823 * IPython/genutils.py (warn): modified the warnings framework to
2824 * IPython/genutils.py (warn): modified the warnings framework to
2824 use the Term I/O class. I'm trying to slowly unify all of
2825 use the Term I/O class. I'm trying to slowly unify all of
2825 IPython's I/O operations to pass through Term.
2826 IPython's I/O operations to pass through Term.
2826
2827
2827 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2828 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2828 the secondary prompt to correctly match the length of the primary
2829 the secondary prompt to correctly match the length of the primary
2829 one for any prompt. Now multi-line code will properly line up
2830 one for any prompt. Now multi-line code will properly line up
2830 even for path dependent prompts, such as the new ones available
2831 even for path dependent prompts, such as the new ones available
2831 via the prompt_specials.
2832 via the prompt_specials.
2832
2833
2833 2004-06-06 Fernando Perez <fperez@colorado.edu>
2834 2004-06-06 Fernando Perez <fperez@colorado.edu>
2834
2835
2835 * IPython/Prompts.py (prompt_specials): Added the ability to have
2836 * IPython/Prompts.py (prompt_specials): Added the ability to have
2836 bash-like special sequences in the prompts, which get
2837 bash-like special sequences in the prompts, which get
2837 automatically expanded. Things like hostname, current working
2838 automatically expanded. Things like hostname, current working
2838 directory and username are implemented already, but it's easy to
2839 directory and username are implemented already, but it's easy to
2839 add more in the future. Thanks to a patch by W.J. van der Laan
2840 add more in the future. Thanks to a patch by W.J. van der Laan
2840 <gnufnork-AT-hetdigitalegat.nl>
2841 <gnufnork-AT-hetdigitalegat.nl>
2841 (prompt_specials): Added color support for prompt strings, so
2842 (prompt_specials): Added color support for prompt strings, so
2842 users can define arbitrary color setups for their prompts.
2843 users can define arbitrary color setups for their prompts.
2843
2844
2844 2004-06-05 Fernando Perez <fperez@colorado.edu>
2845 2004-06-05 Fernando Perez <fperez@colorado.edu>
2845
2846
2846 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2847 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2847 code to load Gary Bishop's readline and configure it
2848 code to load Gary Bishop's readline and configure it
2848 automatically. Thanks to Gary for help on this.
2849 automatically. Thanks to Gary for help on this.
2849
2850
2850 2004-06-01 Fernando Perez <fperez@colorado.edu>
2851 2004-06-01 Fernando Perez <fperez@colorado.edu>
2851
2852
2852 * IPython/Logger.py (Logger.create_log): fix bug for logging
2853 * IPython/Logger.py (Logger.create_log): fix bug for logging
2853 with no filename (previous fix was incomplete).
2854 with no filename (previous fix was incomplete).
2854
2855
2855 2004-05-25 Fernando Perez <fperez@colorado.edu>
2856 2004-05-25 Fernando Perez <fperez@colorado.edu>
2856
2857
2857 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2858 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2858 parens would get passed to the shell.
2859 parens would get passed to the shell.
2859
2860
2860 2004-05-20 Fernando Perez <fperez@colorado.edu>
2861 2004-05-20 Fernando Perez <fperez@colorado.edu>
2861
2862
2862 * IPython/Magic.py (Magic.magic_prun): changed default profile
2863 * IPython/Magic.py (Magic.magic_prun): changed default profile
2863 sort order to 'time' (the more common profiling need).
2864 sort order to 'time' (the more common profiling need).
2864
2865
2865 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2866 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2866 so that source code shown is guaranteed in sync with the file on
2867 so that source code shown is guaranteed in sync with the file on
2867 disk (also changed in psource). Similar fix to the one for
2868 disk (also changed in psource). Similar fix to the one for
2868 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2869 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2869 <yann.ledu-AT-noos.fr>.
2870 <yann.ledu-AT-noos.fr>.
2870
2871
2871 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2872 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2872 with a single option would not be correctly parsed. Closes
2873 with a single option would not be correctly parsed. Closes
2873 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2874 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2874 introduced in 0.6.0 (on 2004-05-06).
2875 introduced in 0.6.0 (on 2004-05-06).
2875
2876
2876 2004-05-13 *** Released version 0.6.0
2877 2004-05-13 *** Released version 0.6.0
2877
2878
2878 2004-05-13 Fernando Perez <fperez@colorado.edu>
2879 2004-05-13 Fernando Perez <fperez@colorado.edu>
2879
2880
2880 * debian/: Added debian/ directory to CVS, so that debian support
2881 * debian/: Added debian/ directory to CVS, so that debian support
2881 is publicly accessible. The debian package is maintained by Jack
2882 is publicly accessible. The debian package is maintained by Jack
2882 Moffit <jack-AT-xiph.org>.
2883 Moffit <jack-AT-xiph.org>.
2883
2884
2884 * Documentation: included the notes about an ipython-based system
2885 * Documentation: included the notes about an ipython-based system
2885 shell (the hypothetical 'pysh') into the new_design.pdf document,
2886 shell (the hypothetical 'pysh') into the new_design.pdf document,
2886 so that these ideas get distributed to users along with the
2887 so that these ideas get distributed to users along with the
2887 official documentation.
2888 official documentation.
2888
2889
2889 2004-05-10 Fernando Perez <fperez@colorado.edu>
2890 2004-05-10 Fernando Perez <fperez@colorado.edu>
2890
2891
2891 * IPython/Logger.py (Logger.create_log): fix recently introduced
2892 * IPython/Logger.py (Logger.create_log): fix recently introduced
2892 bug (misindented line) where logstart would fail when not given an
2893 bug (misindented line) where logstart would fail when not given an
2893 explicit filename.
2894 explicit filename.
2894
2895
2895 2004-05-09 Fernando Perez <fperez@colorado.edu>
2896 2004-05-09 Fernando Perez <fperez@colorado.edu>
2896
2897
2897 * IPython/Magic.py (Magic.parse_options): skip system call when
2898 * IPython/Magic.py (Magic.parse_options): skip system call when
2898 there are no options to look for. Faster, cleaner for the common
2899 there are no options to look for. Faster, cleaner for the common
2899 case.
2900 case.
2900
2901
2901 * Documentation: many updates to the manual: describing Windows
2902 * Documentation: many updates to the manual: describing Windows
2902 support better, Gnuplot updates, credits, misc small stuff. Also
2903 support better, Gnuplot updates, credits, misc small stuff. Also
2903 updated the new_design doc a bit.
2904 updated the new_design doc a bit.
2904
2905
2905 2004-05-06 *** Released version 0.6.0.rc1
2906 2004-05-06 *** Released version 0.6.0.rc1
2906
2907
2907 2004-05-06 Fernando Perez <fperez@colorado.edu>
2908 2004-05-06 Fernando Perez <fperez@colorado.edu>
2908
2909
2909 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2910 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2910 operations to use the vastly more efficient list/''.join() method.
2911 operations to use the vastly more efficient list/''.join() method.
2911 (FormattedTB.text): Fix
2912 (FormattedTB.text): Fix
2912 http://www.scipy.net/roundup/ipython/issue12 - exception source
2913 http://www.scipy.net/roundup/ipython/issue12 - exception source
2913 extract not updated after reload. Thanks to Mike Salib
2914 extract not updated after reload. Thanks to Mike Salib
2914 <msalib-AT-mit.edu> for pinning the source of the problem.
2915 <msalib-AT-mit.edu> for pinning the source of the problem.
2915 Fortunately, the solution works inside ipython and doesn't require
2916 Fortunately, the solution works inside ipython and doesn't require
2916 any changes to python proper.
2917 any changes to python proper.
2917
2918
2918 * IPython/Magic.py (Magic.parse_options): Improved to process the
2919 * IPython/Magic.py (Magic.parse_options): Improved to process the
2919 argument list as a true shell would (by actually using the
2920 argument list as a true shell would (by actually using the
2920 underlying system shell). This way, all @magics automatically get
2921 underlying system shell). This way, all @magics automatically get
2921 shell expansion for variables. Thanks to a comment by Alex
2922 shell expansion for variables. Thanks to a comment by Alex
2922 Schmolck.
2923 Schmolck.
2923
2924
2924 2004-04-04 Fernando Perez <fperez@colorado.edu>
2925 2004-04-04 Fernando Perez <fperez@colorado.edu>
2925
2926
2926 * IPython/iplib.py (InteractiveShell.interact): Added a special
2927 * IPython/iplib.py (InteractiveShell.interact): Added a special
2927 trap for a debugger quit exception, which is basically impossible
2928 trap for a debugger quit exception, which is basically impossible
2928 to handle by normal mechanisms, given what pdb does to the stack.
2929 to handle by normal mechanisms, given what pdb does to the stack.
2929 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2930 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2930
2931
2931 2004-04-03 Fernando Perez <fperez@colorado.edu>
2932 2004-04-03 Fernando Perez <fperez@colorado.edu>
2932
2933
2933 * IPython/genutils.py (Term): Standardized the names of the Term
2934 * IPython/genutils.py (Term): Standardized the names of the Term
2934 class streams to cin/cout/cerr, following C++ naming conventions
2935 class streams to cin/cout/cerr, following C++ naming conventions
2935 (I can't use in/out/err because 'in' is not a valid attribute
2936 (I can't use in/out/err because 'in' is not a valid attribute
2936 name).
2937 name).
2937
2938
2938 * IPython/iplib.py (InteractiveShell.interact): don't increment
2939 * IPython/iplib.py (InteractiveShell.interact): don't increment
2939 the prompt if there's no user input. By Daniel 'Dang' Griffith
2940 the prompt if there's no user input. By Daniel 'Dang' Griffith
2940 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2941 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2941 Francois Pinard.
2942 Francois Pinard.
2942
2943
2943 2004-04-02 Fernando Perez <fperez@colorado.edu>
2944 2004-04-02 Fernando Perez <fperez@colorado.edu>
2944
2945
2945 * IPython/genutils.py (Stream.__init__): Modified to survive at
2946 * IPython/genutils.py (Stream.__init__): Modified to survive at
2946 least importing in contexts where stdin/out/err aren't true file
2947 least importing in contexts where stdin/out/err aren't true file
2947 objects, such as PyCrust (they lack fileno() and mode). However,
2948 objects, such as PyCrust (they lack fileno() and mode). However,
2948 the recovery facilities which rely on these things existing will
2949 the recovery facilities which rely on these things existing will
2949 not work.
2950 not work.
2950
2951
2951 2004-04-01 Fernando Perez <fperez@colorado.edu>
2952 2004-04-01 Fernando Perez <fperez@colorado.edu>
2952
2953
2953 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2954 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2954 use the new getoutputerror() function, so it properly
2955 use the new getoutputerror() function, so it properly
2955 distinguishes stdout/err.
2956 distinguishes stdout/err.
2956
2957
2957 * IPython/genutils.py (getoutputerror): added a function to
2958 * IPython/genutils.py (getoutputerror): added a function to
2958 capture separately the standard output and error of a command.
2959 capture separately the standard output and error of a command.
2959 After a comment from dang on the mailing lists. This code is
2960 After a comment from dang on the mailing lists. This code is
2960 basically a modified version of commands.getstatusoutput(), from
2961 basically a modified version of commands.getstatusoutput(), from
2961 the standard library.
2962 the standard library.
2962
2963
2963 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2964 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2964 '!!' as a special syntax (shorthand) to access @sx.
2965 '!!' as a special syntax (shorthand) to access @sx.
2965
2966
2966 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2967 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2967 command and return its output as a list split on '\n'.
2968 command and return its output as a list split on '\n'.
2968
2969
2969 2004-03-31 Fernando Perez <fperez@colorado.edu>
2970 2004-03-31 Fernando Perez <fperez@colorado.edu>
2970
2971
2971 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2972 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2972 method to dictionaries used as FakeModule instances if they lack
2973 method to dictionaries used as FakeModule instances if they lack
2973 it. At least pydoc in python2.3 breaks for runtime-defined
2974 it. At least pydoc in python2.3 breaks for runtime-defined
2974 functions without this hack. At some point I need to _really_
2975 functions without this hack. At some point I need to _really_
2975 understand what FakeModule is doing, because it's a gross hack.
2976 understand what FakeModule is doing, because it's a gross hack.
2976 But it solves Arnd's problem for now...
2977 But it solves Arnd's problem for now...
2977
2978
2978 2004-02-27 Fernando Perez <fperez@colorado.edu>
2979 2004-02-27 Fernando Perez <fperez@colorado.edu>
2979
2980
2980 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2981 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2981 mode would behave erratically. Also increased the number of
2982 mode would behave erratically. Also increased the number of
2982 possible logs in rotate mod to 999. Thanks to Rod Holland
2983 possible logs in rotate mod to 999. Thanks to Rod Holland
2983 <rhh@StructureLABS.com> for the report and fixes.
2984 <rhh@StructureLABS.com> for the report and fixes.
2984
2985
2985 2004-02-26 Fernando Perez <fperez@colorado.edu>
2986 2004-02-26 Fernando Perez <fperez@colorado.edu>
2986
2987
2987 * IPython/genutils.py (page): Check that the curses module really
2988 * IPython/genutils.py (page): Check that the curses module really
2988 has the initscr attribute before trying to use it. For some
2989 has the initscr attribute before trying to use it. For some
2989 reason, the Solaris curses module is missing this. I think this
2990 reason, the Solaris curses module is missing this. I think this
2990 should be considered a Solaris python bug, but I'm not sure.
2991 should be considered a Solaris python bug, but I'm not sure.
2991
2992
2992 2004-01-17 Fernando Perez <fperez@colorado.edu>
2993 2004-01-17 Fernando Perez <fperez@colorado.edu>
2993
2994
2994 * IPython/genutils.py (Stream.__init__): Changes to try to make
2995 * IPython/genutils.py (Stream.__init__): Changes to try to make
2995 ipython robust against stdin/out/err being closed by the user.
2996 ipython robust against stdin/out/err being closed by the user.
2996 This is 'user error' (and blocks a normal python session, at least
2997 This is 'user error' (and blocks a normal python session, at least
2997 the stdout case). However, Ipython should be able to survive such
2998 the stdout case). However, Ipython should be able to survive such
2998 instances of abuse as gracefully as possible. To simplify the
2999 instances of abuse as gracefully as possible. To simplify the
2999 coding and maintain compatibility with Gary Bishop's Term
3000 coding and maintain compatibility with Gary Bishop's Term
3000 contributions, I've made use of classmethods for this. I think
3001 contributions, I've made use of classmethods for this. I think
3001 this introduces a dependency on python 2.2.
3002 this introduces a dependency on python 2.2.
3002
3003
3003 2004-01-13 Fernando Perez <fperez@colorado.edu>
3004 2004-01-13 Fernando Perez <fperez@colorado.edu>
3004
3005
3005 * IPython/numutils.py (exp_safe): simplified the code a bit and
3006 * IPython/numutils.py (exp_safe): simplified the code a bit and
3006 removed the need for importing the kinds module altogether.
3007 removed the need for importing the kinds module altogether.
3007
3008
3008 2004-01-06 Fernando Perez <fperez@colorado.edu>
3009 2004-01-06 Fernando Perez <fperez@colorado.edu>
3009
3010
3010 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3011 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3011 a magic function instead, after some community feedback. No
3012 a magic function instead, after some community feedback. No
3012 special syntax will exist for it, but its name is deliberately
3013 special syntax will exist for it, but its name is deliberately
3013 very short.
3014 very short.
3014
3015
3015 2003-12-20 Fernando Perez <fperez@colorado.edu>
3016 2003-12-20 Fernando Perez <fperez@colorado.edu>
3016
3017
3017 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3018 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3018 new functionality, to automagically assign the result of a shell
3019 new functionality, to automagically assign the result of a shell
3019 command to a variable. I'll solicit some community feedback on
3020 command to a variable. I'll solicit some community feedback on
3020 this before making it permanent.
3021 this before making it permanent.
3021
3022
3022 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3023 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3023 requested about callables for which inspect couldn't obtain a
3024 requested about callables for which inspect couldn't obtain a
3024 proper argspec. Thanks to a crash report sent by Etienne
3025 proper argspec. Thanks to a crash report sent by Etienne
3025 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3026 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3026
3027
3027 2003-12-09 Fernando Perez <fperez@colorado.edu>
3028 2003-12-09 Fernando Perez <fperez@colorado.edu>
3028
3029
3029 * IPython/genutils.py (page): patch for the pager to work across
3030 * IPython/genutils.py (page): patch for the pager to work across
3030 various versions of Windows. By Gary Bishop.
3031 various versions of Windows. By Gary Bishop.
3031
3032
3032 2003-12-04 Fernando Perez <fperez@colorado.edu>
3033 2003-12-04 Fernando Perez <fperez@colorado.edu>
3033
3034
3034 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3035 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3035 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3036 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3036 While I tested this and it looks ok, there may still be corner
3037 While I tested this and it looks ok, there may still be corner
3037 cases I've missed.
3038 cases I've missed.
3038
3039
3039 2003-12-01 Fernando Perez <fperez@colorado.edu>
3040 2003-12-01 Fernando Perez <fperez@colorado.edu>
3040
3041
3041 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3042 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3042 where a line like 'p,q=1,2' would fail because the automagic
3043 where a line like 'p,q=1,2' would fail because the automagic
3043 system would be triggered for @p.
3044 system would be triggered for @p.
3044
3045
3045 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3046 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3046 cleanups, code unmodified.
3047 cleanups, code unmodified.
3047
3048
3048 * IPython/genutils.py (Term): added a class for IPython to handle
3049 * IPython/genutils.py (Term): added a class for IPython to handle
3049 output. In most cases it will just be a proxy for stdout/err, but
3050 output. In most cases it will just be a proxy for stdout/err, but
3050 having this allows modifications to be made for some platforms,
3051 having this allows modifications to be made for some platforms,
3051 such as handling color escapes under Windows. All of this code
3052 such as handling color escapes under Windows. All of this code
3052 was contributed by Gary Bishop, with minor modifications by me.
3053 was contributed by Gary Bishop, with minor modifications by me.
3053 The actual changes affect many files.
3054 The actual changes affect many files.
3054
3055
3055 2003-11-30 Fernando Perez <fperez@colorado.edu>
3056 2003-11-30 Fernando Perez <fperez@colorado.edu>
3056
3057
3057 * IPython/iplib.py (file_matches): new completion code, courtesy
3058 * IPython/iplib.py (file_matches): new completion code, courtesy
3058 of Jeff Collins. This enables filename completion again under
3059 of Jeff Collins. This enables filename completion again under
3059 python 2.3, which disabled it at the C level.
3060 python 2.3, which disabled it at the C level.
3060
3061
3061 2003-11-11 Fernando Perez <fperez@colorado.edu>
3062 2003-11-11 Fernando Perez <fperez@colorado.edu>
3062
3063
3063 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3064 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3064 for Numeric.array(map(...)), but often convenient.
3065 for Numeric.array(map(...)), but often convenient.
3065
3066
3066 2003-11-05 Fernando Perez <fperez@colorado.edu>
3067 2003-11-05 Fernando Perez <fperez@colorado.edu>
3067
3068
3068 * IPython/numutils.py (frange): Changed a call from int() to
3069 * IPython/numutils.py (frange): Changed a call from int() to
3069 int(round()) to prevent a problem reported with arange() in the
3070 int(round()) to prevent a problem reported with arange() in the
3070 numpy list.
3071 numpy list.
3071
3072
3072 2003-10-06 Fernando Perez <fperez@colorado.edu>
3073 2003-10-06 Fernando Perez <fperez@colorado.edu>
3073
3074
3074 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3075 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3075 prevent crashes if sys lacks an argv attribute (it happens with
3076 prevent crashes if sys lacks an argv attribute (it happens with
3076 embedded interpreters which build a bare-bones sys module).
3077 embedded interpreters which build a bare-bones sys module).
3077 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3078 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3078
3079
3079 2003-09-24 Fernando Perez <fperez@colorado.edu>
3080 2003-09-24 Fernando Perez <fperez@colorado.edu>
3080
3081
3081 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3082 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3082 to protect against poorly written user objects where __getattr__
3083 to protect against poorly written user objects where __getattr__
3083 raises exceptions other than AttributeError. Thanks to a bug
3084 raises exceptions other than AttributeError. Thanks to a bug
3084 report by Oliver Sander <osander-AT-gmx.de>.
3085 report by Oliver Sander <osander-AT-gmx.de>.
3085
3086
3086 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3087 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3087 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3088 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3088
3089
3089 2003-09-09 Fernando Perez <fperez@colorado.edu>
3090 2003-09-09 Fernando Perez <fperez@colorado.edu>
3090
3091
3091 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3092 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3092 unpacking a list whith a callable as first element would
3093 unpacking a list whith a callable as first element would
3093 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3094 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3094 Collins.
3095 Collins.
3095
3096
3096 2003-08-25 *** Released version 0.5.0
3097 2003-08-25 *** Released version 0.5.0
3097
3098
3098 2003-08-22 Fernando Perez <fperez@colorado.edu>
3099 2003-08-22 Fernando Perez <fperez@colorado.edu>
3099
3100
3100 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3101 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3101 improperly defined user exceptions. Thanks to feedback from Mark
3102 improperly defined user exceptions. Thanks to feedback from Mark
3102 Russell <mrussell-AT-verio.net>.
3103 Russell <mrussell-AT-verio.net>.
3103
3104
3104 2003-08-20 Fernando Perez <fperez@colorado.edu>
3105 2003-08-20 Fernando Perez <fperez@colorado.edu>
3105
3106
3106 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3107 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3107 printing so that it would print multi-line string forms starting
3108 printing so that it would print multi-line string forms starting
3108 with a new line. This way the formatting is better respected for
3109 with a new line. This way the formatting is better respected for
3109 objects which work hard to make nice string forms.
3110 objects which work hard to make nice string forms.
3110
3111
3111 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3112 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3112 autocall would overtake data access for objects with both
3113 autocall would overtake data access for objects with both
3113 __getitem__ and __call__.
3114 __getitem__ and __call__.
3114
3115
3115 2003-08-19 *** Released version 0.5.0-rc1
3116 2003-08-19 *** Released version 0.5.0-rc1
3116
3117
3117 2003-08-19 Fernando Perez <fperez@colorado.edu>
3118 2003-08-19 Fernando Perez <fperez@colorado.edu>
3118
3119
3119 * IPython/deep_reload.py (load_tail): single tiny change here
3120 * IPython/deep_reload.py (load_tail): single tiny change here
3120 seems to fix the long-standing bug of dreload() failing to work
3121 seems to fix the long-standing bug of dreload() failing to work
3121 for dotted names. But this module is pretty tricky, so I may have
3122 for dotted names. But this module is pretty tricky, so I may have
3122 missed some subtlety. Needs more testing!.
3123 missed some subtlety. Needs more testing!.
3123
3124
3124 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3125 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3125 exceptions which have badly implemented __str__ methods.
3126 exceptions which have badly implemented __str__ methods.
3126 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3127 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3127 which I've been getting reports about from Python 2.3 users. I
3128 which I've been getting reports about from Python 2.3 users. I
3128 wish I had a simple test case to reproduce the problem, so I could
3129 wish I had a simple test case to reproduce the problem, so I could
3129 either write a cleaner workaround or file a bug report if
3130 either write a cleaner workaround or file a bug report if
3130 necessary.
3131 necessary.
3131
3132
3132 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3133 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3133 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3134 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3134 a bug report by Tjabo Kloppenburg.
3135 a bug report by Tjabo Kloppenburg.
3135
3136
3136 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3137 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3137 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3138 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3138 seems rather unstable. Thanks to a bug report by Tjabo
3139 seems rather unstable. Thanks to a bug report by Tjabo
3139 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3140 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3140
3141
3141 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3142 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3142 this out soon because of the critical fixes in the inner loop for
3143 this out soon because of the critical fixes in the inner loop for
3143 generators.
3144 generators.
3144
3145
3145 * IPython/Magic.py (Magic.getargspec): removed. This (and
3146 * IPython/Magic.py (Magic.getargspec): removed. This (and
3146 _get_def) have been obsoleted by OInspect for a long time, I
3147 _get_def) have been obsoleted by OInspect for a long time, I
3147 hadn't noticed that they were dead code.
3148 hadn't noticed that they were dead code.
3148 (Magic._ofind): restored _ofind functionality for a few literals
3149 (Magic._ofind): restored _ofind functionality for a few literals
3149 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3150 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3150 for things like "hello".capitalize?, since that would require a
3151 for things like "hello".capitalize?, since that would require a
3151 potentially dangerous eval() again.
3152 potentially dangerous eval() again.
3152
3153
3153 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3154 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3154 logic a bit more to clean up the escapes handling and minimize the
3155 logic a bit more to clean up the escapes handling and minimize the
3155 use of _ofind to only necessary cases. The interactive 'feel' of
3156 use of _ofind to only necessary cases. The interactive 'feel' of
3156 IPython should have improved quite a bit with the changes in
3157 IPython should have improved quite a bit with the changes in
3157 _prefilter and _ofind (besides being far safer than before).
3158 _prefilter and _ofind (besides being far safer than before).
3158
3159
3159 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3160 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3160 obscure, never reported). Edit would fail to find the object to
3161 obscure, never reported). Edit would fail to find the object to
3161 edit under some circumstances.
3162 edit under some circumstances.
3162 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3163 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3163 which were causing double-calling of generators. Those eval calls
3164 which were causing double-calling of generators. Those eval calls
3164 were _very_ dangerous, since code with side effects could be
3165 were _very_ dangerous, since code with side effects could be
3165 triggered. As they say, 'eval is evil'... These were the
3166 triggered. As they say, 'eval is evil'... These were the
3166 nastiest evals in IPython. Besides, _ofind is now far simpler,
3167 nastiest evals in IPython. Besides, _ofind is now far simpler,
3167 and it should also be quite a bit faster. Its use of inspect is
3168 and it should also be quite a bit faster. Its use of inspect is
3168 also safer, so perhaps some of the inspect-related crashes I've
3169 also safer, so perhaps some of the inspect-related crashes I've
3169 seen lately with Python 2.3 might be taken care of. That will
3170 seen lately with Python 2.3 might be taken care of. That will
3170 need more testing.
3171 need more testing.
3171
3172
3172 2003-08-17 Fernando Perez <fperez@colorado.edu>
3173 2003-08-17 Fernando Perez <fperez@colorado.edu>
3173
3174
3174 * IPython/iplib.py (InteractiveShell._prefilter): significant
3175 * IPython/iplib.py (InteractiveShell._prefilter): significant
3175 simplifications to the logic for handling user escapes. Faster
3176 simplifications to the logic for handling user escapes. Faster
3176 and simpler code.
3177 and simpler code.
3177
3178
3178 2003-08-14 Fernando Perez <fperez@colorado.edu>
3179 2003-08-14 Fernando Perez <fperez@colorado.edu>
3179
3180
3180 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3181 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3181 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3182 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3182 but it should be quite a bit faster. And the recursive version
3183 but it should be quite a bit faster. And the recursive version
3183 generated O(log N) intermediate storage for all rank>1 arrays,
3184 generated O(log N) intermediate storage for all rank>1 arrays,
3184 even if they were contiguous.
3185 even if they were contiguous.
3185 (l1norm): Added this function.
3186 (l1norm): Added this function.
3186 (norm): Added this function for arbitrary norms (including
3187 (norm): Added this function for arbitrary norms (including
3187 l-infinity). l1 and l2 are still special cases for convenience
3188 l-infinity). l1 and l2 are still special cases for convenience
3188 and speed.
3189 and speed.
3189
3190
3190 2003-08-03 Fernando Perez <fperez@colorado.edu>
3191 2003-08-03 Fernando Perez <fperez@colorado.edu>
3191
3192
3192 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3193 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3193 exceptions, which now raise PendingDeprecationWarnings in Python
3194 exceptions, which now raise PendingDeprecationWarnings in Python
3194 2.3. There were some in Magic and some in Gnuplot2.
3195 2.3. There were some in Magic and some in Gnuplot2.
3195
3196
3196 2003-06-30 Fernando Perez <fperez@colorado.edu>
3197 2003-06-30 Fernando Perez <fperez@colorado.edu>
3197
3198
3198 * IPython/genutils.py (page): modified to call curses only for
3199 * IPython/genutils.py (page): modified to call curses only for
3199 terminals where TERM=='xterm'. After problems under many other
3200 terminals where TERM=='xterm'. After problems under many other
3200 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3201 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3201
3202
3202 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3203 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3203 would be triggered when readline was absent. This was just an old
3204 would be triggered when readline was absent. This was just an old
3204 debugging statement I'd forgotten to take out.
3205 debugging statement I'd forgotten to take out.
3205
3206
3206 2003-06-20 Fernando Perez <fperez@colorado.edu>
3207 2003-06-20 Fernando Perez <fperez@colorado.edu>
3207
3208
3208 * IPython/genutils.py (clock): modified to return only user time
3209 * IPython/genutils.py (clock): modified to return only user time
3209 (not counting system time), after a discussion on scipy. While
3210 (not counting system time), after a discussion on scipy. While
3210 system time may be a useful quantity occasionally, it may much
3211 system time may be a useful quantity occasionally, it may much
3211 more easily be skewed by occasional swapping or other similar
3212 more easily be skewed by occasional swapping or other similar
3212 activity.
3213 activity.
3213
3214
3214 2003-06-05 Fernando Perez <fperez@colorado.edu>
3215 2003-06-05 Fernando Perez <fperez@colorado.edu>
3215
3216
3216 * IPython/numutils.py (identity): new function, for building
3217 * IPython/numutils.py (identity): new function, for building
3217 arbitrary rank Kronecker deltas (mostly backwards compatible with
3218 arbitrary rank Kronecker deltas (mostly backwards compatible with
3218 Numeric.identity)
3219 Numeric.identity)
3219
3220
3220 2003-06-03 Fernando Perez <fperez@colorado.edu>
3221 2003-06-03 Fernando Perez <fperez@colorado.edu>
3221
3222
3222 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3223 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3223 arguments passed to magics with spaces, to allow trailing '\' to
3224 arguments passed to magics with spaces, to allow trailing '\' to
3224 work normally (mainly for Windows users).
3225 work normally (mainly for Windows users).
3225
3226
3226 2003-05-29 Fernando Perez <fperez@colorado.edu>
3227 2003-05-29 Fernando Perez <fperez@colorado.edu>
3227
3228
3228 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3229 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3229 instead of pydoc.help. This fixes a bizarre behavior where
3230 instead of pydoc.help. This fixes a bizarre behavior where
3230 printing '%s' % locals() would trigger the help system. Now
3231 printing '%s' % locals() would trigger the help system. Now
3231 ipython behaves like normal python does.
3232 ipython behaves like normal python does.
3232
3233
3233 Note that if one does 'from pydoc import help', the bizarre
3234 Note that if one does 'from pydoc import help', the bizarre
3234 behavior returns, but this will also happen in normal python, so
3235 behavior returns, but this will also happen in normal python, so
3235 it's not an ipython bug anymore (it has to do with how pydoc.help
3236 it's not an ipython bug anymore (it has to do with how pydoc.help
3236 is implemented).
3237 is implemented).
3237
3238
3238 2003-05-22 Fernando Perez <fperez@colorado.edu>
3239 2003-05-22 Fernando Perez <fperez@colorado.edu>
3239
3240
3240 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3241 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3241 return [] instead of None when nothing matches, also match to end
3242 return [] instead of None when nothing matches, also match to end
3242 of line. Patch by Gary Bishop.
3243 of line. Patch by Gary Bishop.
3243
3244
3244 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3245 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3245 protection as before, for files passed on the command line. This
3246 protection as before, for files passed on the command line. This
3246 prevents the CrashHandler from kicking in if user files call into
3247 prevents the CrashHandler from kicking in if user files call into
3247 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3248 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3248 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3249 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3249
3250
3250 2003-05-20 *** Released version 0.4.0
3251 2003-05-20 *** Released version 0.4.0
3251
3252
3252 2003-05-20 Fernando Perez <fperez@colorado.edu>
3253 2003-05-20 Fernando Perez <fperez@colorado.edu>
3253
3254
3254 * setup.py: added support for manpages. It's a bit hackish b/c of
3255 * setup.py: added support for manpages. It's a bit hackish b/c of
3255 a bug in the way the bdist_rpm distutils target handles gzipped
3256 a bug in the way the bdist_rpm distutils target handles gzipped
3256 manpages, but it works. After a patch by Jack.
3257 manpages, but it works. After a patch by Jack.
3257
3258
3258 2003-05-19 Fernando Perez <fperez@colorado.edu>
3259 2003-05-19 Fernando Perez <fperez@colorado.edu>
3259
3260
3260 * IPython/numutils.py: added a mockup of the kinds module, since
3261 * IPython/numutils.py: added a mockup of the kinds module, since
3261 it was recently removed from Numeric. This way, numutils will
3262 it was recently removed from Numeric. This way, numutils will
3262 work for all users even if they are missing kinds.
3263 work for all users even if they are missing kinds.
3263
3264
3264 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3265 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3265 failure, which can occur with SWIG-wrapped extensions. After a
3266 failure, which can occur with SWIG-wrapped extensions. After a
3266 crash report from Prabhu.
3267 crash report from Prabhu.
3267
3268
3268 2003-05-16 Fernando Perez <fperez@colorado.edu>
3269 2003-05-16 Fernando Perez <fperez@colorado.edu>
3269
3270
3270 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3271 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3271 protect ipython from user code which may call directly
3272 protect ipython from user code which may call directly
3272 sys.excepthook (this looks like an ipython crash to the user, even
3273 sys.excepthook (this looks like an ipython crash to the user, even
3273 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3274 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3274 This is especially important to help users of WxWindows, but may
3275 This is especially important to help users of WxWindows, but may
3275 also be useful in other cases.
3276 also be useful in other cases.
3276
3277
3277 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3278 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3278 an optional tb_offset to be specified, and to preserve exception
3279 an optional tb_offset to be specified, and to preserve exception
3279 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3280 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3280
3281
3281 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3282 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3282
3283
3283 2003-05-15 Fernando Perez <fperez@colorado.edu>
3284 2003-05-15 Fernando Perez <fperez@colorado.edu>
3284
3285
3285 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3286 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3286 installing for a new user under Windows.
3287 installing for a new user under Windows.
3287
3288
3288 2003-05-12 Fernando Perez <fperez@colorado.edu>
3289 2003-05-12 Fernando Perez <fperez@colorado.edu>
3289
3290
3290 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3291 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3291 handler for Emacs comint-based lines. Currently it doesn't do
3292 handler for Emacs comint-based lines. Currently it doesn't do
3292 much (but importantly, it doesn't update the history cache). In
3293 much (but importantly, it doesn't update the history cache). In
3293 the future it may be expanded if Alex needs more functionality
3294 the future it may be expanded if Alex needs more functionality
3294 there.
3295 there.
3295
3296
3296 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3297 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3297 info to crash reports.
3298 info to crash reports.
3298
3299
3299 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3300 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3300 just like Python's -c. Also fixed crash with invalid -color
3301 just like Python's -c. Also fixed crash with invalid -color
3301 option value at startup. Thanks to Will French
3302 option value at startup. Thanks to Will French
3302 <wfrench-AT-bestweb.net> for the bug report.
3303 <wfrench-AT-bestweb.net> for the bug report.
3303
3304
3304 2003-05-09 Fernando Perez <fperez@colorado.edu>
3305 2003-05-09 Fernando Perez <fperez@colorado.edu>
3305
3306
3306 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3307 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3307 to EvalDict (it's a mapping, after all) and simplified its code
3308 to EvalDict (it's a mapping, after all) and simplified its code
3308 quite a bit, after a nice discussion on c.l.py where Gustavo
3309 quite a bit, after a nice discussion on c.l.py where Gustavo
3309 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3310 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3310
3311
3311 2003-04-30 Fernando Perez <fperez@colorado.edu>
3312 2003-04-30 Fernando Perez <fperez@colorado.edu>
3312
3313
3313 * IPython/genutils.py (timings_out): modified it to reduce its
3314 * IPython/genutils.py (timings_out): modified it to reduce its
3314 overhead in the common reps==1 case.
3315 overhead in the common reps==1 case.
3315
3316
3316 2003-04-29 Fernando Perez <fperez@colorado.edu>
3317 2003-04-29 Fernando Perez <fperez@colorado.edu>
3317
3318
3318 * IPython/genutils.py (timings_out): Modified to use the resource
3319 * IPython/genutils.py (timings_out): Modified to use the resource
3319 module, which avoids the wraparound problems of time.clock().
3320 module, which avoids the wraparound problems of time.clock().
3320
3321
3321 2003-04-17 *** Released version 0.2.15pre4
3322 2003-04-17 *** Released version 0.2.15pre4
3322
3323
3323 2003-04-17 Fernando Perez <fperez@colorado.edu>
3324 2003-04-17 Fernando Perez <fperez@colorado.edu>
3324
3325
3325 * setup.py (scriptfiles): Split windows-specific stuff over to a
3326 * setup.py (scriptfiles): Split windows-specific stuff over to a
3326 separate file, in an attempt to have a Windows GUI installer.
3327 separate file, in an attempt to have a Windows GUI installer.
3327 That didn't work, but part of the groundwork is done.
3328 That didn't work, but part of the groundwork is done.
3328
3329
3329 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3330 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3330 indent/unindent with 4 spaces. Particularly useful in combination
3331 indent/unindent with 4 spaces. Particularly useful in combination
3331 with the new auto-indent option.
3332 with the new auto-indent option.
3332
3333
3333 2003-04-16 Fernando Perez <fperez@colorado.edu>
3334 2003-04-16 Fernando Perez <fperez@colorado.edu>
3334
3335
3335 * IPython/Magic.py: various replacements of self.rc for
3336 * IPython/Magic.py: various replacements of self.rc for
3336 self.shell.rc. A lot more remains to be done to fully disentangle
3337 self.shell.rc. A lot more remains to be done to fully disentangle
3337 this class from the main Shell class.
3338 this class from the main Shell class.
3338
3339
3339 * IPython/GnuplotRuntime.py: added checks for mouse support so
3340 * IPython/GnuplotRuntime.py: added checks for mouse support so
3340 that we don't try to enable it if the current gnuplot doesn't
3341 that we don't try to enable it if the current gnuplot doesn't
3341 really support it. Also added checks so that we don't try to
3342 really support it. Also added checks so that we don't try to
3342 enable persist under Windows (where Gnuplot doesn't recognize the
3343 enable persist under Windows (where Gnuplot doesn't recognize the
3343 option).
3344 option).
3344
3345
3345 * IPython/iplib.py (InteractiveShell.interact): Added optional
3346 * IPython/iplib.py (InteractiveShell.interact): Added optional
3346 auto-indenting code, after a patch by King C. Shu
3347 auto-indenting code, after a patch by King C. Shu
3347 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3348 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3348 get along well with pasting indented code. If I ever figure out
3349 get along well with pasting indented code. If I ever figure out
3349 how to make that part go well, it will become on by default.
3350 how to make that part go well, it will become on by default.
3350
3351
3351 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3352 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3352 crash ipython if there was an unmatched '%' in the user's prompt
3353 crash ipython if there was an unmatched '%' in the user's prompt
3353 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3354 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3354
3355
3355 * IPython/iplib.py (InteractiveShell.interact): removed the
3356 * IPython/iplib.py (InteractiveShell.interact): removed the
3356 ability to ask the user whether he wants to crash or not at the
3357 ability to ask the user whether he wants to crash or not at the
3357 'last line' exception handler. Calling functions at that point
3358 'last line' exception handler. Calling functions at that point
3358 changes the stack, and the error reports would have incorrect
3359 changes the stack, and the error reports would have incorrect
3359 tracebacks.
3360 tracebacks.
3360
3361
3361 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3362 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3362 pass through a peger a pretty-printed form of any object. After a
3363 pass through a peger a pretty-printed form of any object. After a
3363 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3364 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3364
3365
3365 2003-04-14 Fernando Perez <fperez@colorado.edu>
3366 2003-04-14 Fernando Perez <fperez@colorado.edu>
3366
3367
3367 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3368 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3368 all files in ~ would be modified at first install (instead of
3369 all files in ~ would be modified at first install (instead of
3369 ~/.ipython). This could be potentially disastrous, as the
3370 ~/.ipython). This could be potentially disastrous, as the
3370 modification (make line-endings native) could damage binary files.
3371 modification (make line-endings native) could damage binary files.
3371
3372
3372 2003-04-10 Fernando Perez <fperez@colorado.edu>
3373 2003-04-10 Fernando Perez <fperez@colorado.edu>
3373
3374
3374 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3375 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3375 handle only lines which are invalid python. This now means that
3376 handle only lines which are invalid python. This now means that
3376 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3377 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3377 for the bug report.
3378 for the bug report.
3378
3379
3379 2003-04-01 Fernando Perez <fperez@colorado.edu>
3380 2003-04-01 Fernando Perez <fperez@colorado.edu>
3380
3381
3381 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3382 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3382 where failing to set sys.last_traceback would crash pdb.pm().
3383 where failing to set sys.last_traceback would crash pdb.pm().
3383 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3384 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3384 report.
3385 report.
3385
3386
3386 2003-03-25 Fernando Perez <fperez@colorado.edu>
3387 2003-03-25 Fernando Perez <fperez@colorado.edu>
3387
3388
3388 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3389 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3389 before printing it (it had a lot of spurious blank lines at the
3390 before printing it (it had a lot of spurious blank lines at the
3390 end).
3391 end).
3391
3392
3392 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3393 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3393 output would be sent 21 times! Obviously people don't use this
3394 output would be sent 21 times! Obviously people don't use this
3394 too often, or I would have heard about it.
3395 too often, or I would have heard about it.
3395
3396
3396 2003-03-24 Fernando Perez <fperez@colorado.edu>
3397 2003-03-24 Fernando Perez <fperez@colorado.edu>
3397
3398
3398 * setup.py (scriptfiles): renamed the data_files parameter from
3399 * setup.py (scriptfiles): renamed the data_files parameter from
3399 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3400 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3400 for the patch.
3401 for the patch.
3401
3402
3402 2003-03-20 Fernando Perez <fperez@colorado.edu>
3403 2003-03-20 Fernando Perez <fperez@colorado.edu>
3403
3404
3404 * IPython/genutils.py (error): added error() and fatal()
3405 * IPython/genutils.py (error): added error() and fatal()
3405 functions.
3406 functions.
3406
3407
3407 2003-03-18 *** Released version 0.2.15pre3
3408 2003-03-18 *** Released version 0.2.15pre3
3408
3409
3409 2003-03-18 Fernando Perez <fperez@colorado.edu>
3410 2003-03-18 Fernando Perez <fperez@colorado.edu>
3410
3411
3411 * setupext/install_data_ext.py
3412 * setupext/install_data_ext.py
3412 (install_data_ext.initialize_options): Class contributed by Jack
3413 (install_data_ext.initialize_options): Class contributed by Jack
3413 Moffit for fixing the old distutils hack. He is sending this to
3414 Moffit for fixing the old distutils hack. He is sending this to
3414 the distutils folks so in the future we may not need it as a
3415 the distutils folks so in the future we may not need it as a
3415 private fix.
3416 private fix.
3416
3417
3417 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3418 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3418 changes for Debian packaging. See his patch for full details.
3419 changes for Debian packaging. See his patch for full details.
3419 The old distutils hack of making the ipythonrc* files carry a
3420 The old distutils hack of making the ipythonrc* files carry a
3420 bogus .py extension is gone, at last. Examples were moved to a
3421 bogus .py extension is gone, at last. Examples were moved to a
3421 separate subdir under doc/, and the separate executable scripts
3422 separate subdir under doc/, and the separate executable scripts
3422 now live in their own directory. Overall a great cleanup. The
3423 now live in their own directory. Overall a great cleanup. The
3423 manual was updated to use the new files, and setup.py has been
3424 manual was updated to use the new files, and setup.py has been
3424 fixed for this setup.
3425 fixed for this setup.
3425
3426
3426 * IPython/PyColorize.py (Parser.usage): made non-executable and
3427 * IPython/PyColorize.py (Parser.usage): made non-executable and
3427 created a pycolor wrapper around it to be included as a script.
3428 created a pycolor wrapper around it to be included as a script.
3428
3429
3429 2003-03-12 *** Released version 0.2.15pre2
3430 2003-03-12 *** Released version 0.2.15pre2
3430
3431
3431 2003-03-12 Fernando Perez <fperez@colorado.edu>
3432 2003-03-12 Fernando Perez <fperez@colorado.edu>
3432
3433
3433 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3434 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3434 long-standing problem with garbage characters in some terminals.
3435 long-standing problem with garbage characters in some terminals.
3435 The issue was really that the \001 and \002 escapes must _only_ be
3436 The issue was really that the \001 and \002 escapes must _only_ be
3436 passed to input prompts (which call readline), but _never_ to
3437 passed to input prompts (which call readline), but _never_ to
3437 normal text to be printed on screen. I changed ColorANSI to have
3438 normal text to be printed on screen. I changed ColorANSI to have
3438 two classes: TermColors and InputTermColors, each with the
3439 two classes: TermColors and InputTermColors, each with the
3439 appropriate escapes for input prompts or normal text. The code in
3440 appropriate escapes for input prompts or normal text. The code in
3440 Prompts.py got slightly more complicated, but this very old and
3441 Prompts.py got slightly more complicated, but this very old and
3441 annoying bug is finally fixed.
3442 annoying bug is finally fixed.
3442
3443
3443 All the credit for nailing down the real origin of this problem
3444 All the credit for nailing down the real origin of this problem
3444 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3445 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3445 *Many* thanks to him for spending quite a bit of effort on this.
3446 *Many* thanks to him for spending quite a bit of effort on this.
3446
3447
3447 2003-03-05 *** Released version 0.2.15pre1
3448 2003-03-05 *** Released version 0.2.15pre1
3448
3449
3449 2003-03-03 Fernando Perez <fperez@colorado.edu>
3450 2003-03-03 Fernando Perez <fperez@colorado.edu>
3450
3451
3451 * IPython/FakeModule.py: Moved the former _FakeModule to a
3452 * IPython/FakeModule.py: Moved the former _FakeModule to a
3452 separate file, because it's also needed by Magic (to fix a similar
3453 separate file, because it's also needed by Magic (to fix a similar
3453 pickle-related issue in @run).
3454 pickle-related issue in @run).
3454
3455
3455 2003-03-02 Fernando Perez <fperez@colorado.edu>
3456 2003-03-02 Fernando Perez <fperez@colorado.edu>
3456
3457
3457 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3458 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3458 the autocall option at runtime.
3459 the autocall option at runtime.
3459 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3460 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3460 across Magic.py to start separating Magic from InteractiveShell.
3461 across Magic.py to start separating Magic from InteractiveShell.
3461 (Magic._ofind): Fixed to return proper namespace for dotted
3462 (Magic._ofind): Fixed to return proper namespace for dotted
3462 names. Before, a dotted name would always return 'not currently
3463 names. Before, a dotted name would always return 'not currently
3463 defined', because it would find the 'parent'. s.x would be found,
3464 defined', because it would find the 'parent'. s.x would be found,
3464 but since 'x' isn't defined by itself, it would get confused.
3465 but since 'x' isn't defined by itself, it would get confused.
3465 (Magic.magic_run): Fixed pickling problems reported by Ralf
3466 (Magic.magic_run): Fixed pickling problems reported by Ralf
3466 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3467 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3467 that I'd used when Mike Heeter reported similar issues at the
3468 that I'd used when Mike Heeter reported similar issues at the
3468 top-level, but now for @run. It boils down to injecting the
3469 top-level, but now for @run. It boils down to injecting the
3469 namespace where code is being executed with something that looks
3470 namespace where code is being executed with something that looks
3470 enough like a module to fool pickle.dump(). Since a pickle stores
3471 enough like a module to fool pickle.dump(). Since a pickle stores
3471 a named reference to the importing module, we need this for
3472 a named reference to the importing module, we need this for
3472 pickles to save something sensible.
3473 pickles to save something sensible.
3473
3474
3474 * IPython/ipmaker.py (make_IPython): added an autocall option.
3475 * IPython/ipmaker.py (make_IPython): added an autocall option.
3475
3476
3476 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3477 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3477 the auto-eval code. Now autocalling is an option, and the code is
3478 the auto-eval code. Now autocalling is an option, and the code is
3478 also vastly safer. There is no more eval() involved at all.
3479 also vastly safer. There is no more eval() involved at all.
3479
3480
3480 2003-03-01 Fernando Perez <fperez@colorado.edu>
3481 2003-03-01 Fernando Perez <fperez@colorado.edu>
3481
3482
3482 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3483 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3483 dict with named keys instead of a tuple.
3484 dict with named keys instead of a tuple.
3484
3485
3485 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3486 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3486
3487
3487 * setup.py (make_shortcut): Fixed message about directories
3488 * setup.py (make_shortcut): Fixed message about directories
3488 created during Windows installation (the directories were ok, just
3489 created during Windows installation (the directories were ok, just
3489 the printed message was misleading). Thanks to Chris Liechti
3490 the printed message was misleading). Thanks to Chris Liechti
3490 <cliechti-AT-gmx.net> for the heads up.
3491 <cliechti-AT-gmx.net> for the heads up.
3491
3492
3492 2003-02-21 Fernando Perez <fperez@colorado.edu>
3493 2003-02-21 Fernando Perez <fperez@colorado.edu>
3493
3494
3494 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3495 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3495 of ValueError exception when checking for auto-execution. This
3496 of ValueError exception when checking for auto-execution. This
3496 one is raised by things like Numeric arrays arr.flat when the
3497 one is raised by things like Numeric arrays arr.flat when the
3497 array is non-contiguous.
3498 array is non-contiguous.
3498
3499
3499 2003-01-31 Fernando Perez <fperez@colorado.edu>
3500 2003-01-31 Fernando Perez <fperez@colorado.edu>
3500
3501
3501 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3502 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3502 not return any value at all (even though the command would get
3503 not return any value at all (even though the command would get
3503 executed).
3504 executed).
3504 (xsys): Flush stdout right after printing the command to ensure
3505 (xsys): Flush stdout right after printing the command to ensure
3505 proper ordering of commands and command output in the total
3506 proper ordering of commands and command output in the total
3506 output.
3507 output.
3507 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3508 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3508 system/getoutput as defaults. The old ones are kept for
3509 system/getoutput as defaults. The old ones are kept for
3509 compatibility reasons, so no code which uses this library needs
3510 compatibility reasons, so no code which uses this library needs
3510 changing.
3511 changing.
3511
3512
3512 2003-01-27 *** Released version 0.2.14
3513 2003-01-27 *** Released version 0.2.14
3513
3514
3514 2003-01-25 Fernando Perez <fperez@colorado.edu>
3515 2003-01-25 Fernando Perez <fperez@colorado.edu>
3515
3516
3516 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3517 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3517 functions defined in previous edit sessions could not be re-edited
3518 functions defined in previous edit sessions could not be re-edited
3518 (because the temp files were immediately removed). Now temp files
3519 (because the temp files were immediately removed). Now temp files
3519 are removed only at IPython's exit.
3520 are removed only at IPython's exit.
3520 (Magic.magic_run): Improved @run to perform shell-like expansions
3521 (Magic.magic_run): Improved @run to perform shell-like expansions
3521 on its arguments (~users and $VARS). With this, @run becomes more
3522 on its arguments (~users and $VARS). With this, @run becomes more
3522 like a normal command-line.
3523 like a normal command-line.
3523
3524
3524 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3525 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3525 bugs related to embedding and cleaned up that code. A fairly
3526 bugs related to embedding and cleaned up that code. A fairly
3526 important one was the impossibility to access the global namespace
3527 important one was the impossibility to access the global namespace
3527 through the embedded IPython (only local variables were visible).
3528 through the embedded IPython (only local variables were visible).
3528
3529
3529 2003-01-14 Fernando Perez <fperez@colorado.edu>
3530 2003-01-14 Fernando Perez <fperez@colorado.edu>
3530
3531
3531 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3532 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3532 auto-calling to be a bit more conservative. Now it doesn't get
3533 auto-calling to be a bit more conservative. Now it doesn't get
3533 triggered if any of '!=()<>' are in the rest of the input line, to
3534 triggered if any of '!=()<>' are in the rest of the input line, to
3534 allow comparing callables. Thanks to Alex for the heads up.
3535 allow comparing callables. Thanks to Alex for the heads up.
3535
3536
3536 2003-01-07 Fernando Perez <fperez@colorado.edu>
3537 2003-01-07 Fernando Perez <fperez@colorado.edu>
3537
3538
3538 * IPython/genutils.py (page): fixed estimation of the number of
3539 * IPython/genutils.py (page): fixed estimation of the number of
3539 lines in a string to be paged to simply count newlines. This
3540 lines in a string to be paged to simply count newlines. This
3540 prevents over-guessing due to embedded escape sequences. A better
3541 prevents over-guessing due to embedded escape sequences. A better
3541 long-term solution would involve stripping out the control chars
3542 long-term solution would involve stripping out the control chars
3542 for the count, but it's potentially so expensive I just don't
3543 for the count, but it's potentially so expensive I just don't
3543 think it's worth doing.
3544 think it's worth doing.
3544
3545
3545 2002-12-19 *** Released version 0.2.14pre50
3546 2002-12-19 *** Released version 0.2.14pre50
3546
3547
3547 2002-12-19 Fernando Perez <fperez@colorado.edu>
3548 2002-12-19 Fernando Perez <fperez@colorado.edu>
3548
3549
3549 * tools/release (version): Changed release scripts to inform
3550 * tools/release (version): Changed release scripts to inform
3550 Andrea and build a NEWS file with a list of recent changes.
3551 Andrea and build a NEWS file with a list of recent changes.
3551
3552
3552 * IPython/ColorANSI.py (__all__): changed terminal detection
3553 * IPython/ColorANSI.py (__all__): changed terminal detection
3553 code. Seems to work better for xterms without breaking
3554 code. Seems to work better for xterms without breaking
3554 konsole. Will need more testing to determine if WinXP and Mac OSX
3555 konsole. Will need more testing to determine if WinXP and Mac OSX
3555 also work ok.
3556 also work ok.
3556
3557
3557 2002-12-18 *** Released version 0.2.14pre49
3558 2002-12-18 *** Released version 0.2.14pre49
3558
3559
3559 2002-12-18 Fernando Perez <fperez@colorado.edu>
3560 2002-12-18 Fernando Perez <fperez@colorado.edu>
3560
3561
3561 * Docs: added new info about Mac OSX, from Andrea.
3562 * Docs: added new info about Mac OSX, from Andrea.
3562
3563
3563 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3564 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3564 allow direct plotting of python strings whose format is the same
3565 allow direct plotting of python strings whose format is the same
3565 of gnuplot data files.
3566 of gnuplot data files.
3566
3567
3567 2002-12-16 Fernando Perez <fperez@colorado.edu>
3568 2002-12-16 Fernando Perez <fperez@colorado.edu>
3568
3569
3569 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3570 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3570 value of exit question to be acknowledged.
3571 value of exit question to be acknowledged.
3571
3572
3572 2002-12-03 Fernando Perez <fperez@colorado.edu>
3573 2002-12-03 Fernando Perez <fperez@colorado.edu>
3573
3574
3574 * IPython/ipmaker.py: removed generators, which had been added
3575 * IPython/ipmaker.py: removed generators, which had been added
3575 by mistake in an earlier debugging run. This was causing trouble
3576 by mistake in an earlier debugging run. This was causing trouble
3576 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3577 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3577 for pointing this out.
3578 for pointing this out.
3578
3579
3579 2002-11-17 Fernando Perez <fperez@colorado.edu>
3580 2002-11-17 Fernando Perez <fperez@colorado.edu>
3580
3581
3581 * Manual: updated the Gnuplot section.
3582 * Manual: updated the Gnuplot section.
3582
3583
3583 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3584 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3584 a much better split of what goes in Runtime and what goes in
3585 a much better split of what goes in Runtime and what goes in
3585 Interactive.
3586 Interactive.
3586
3587
3587 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3588 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3588 being imported from iplib.
3589 being imported from iplib.
3589
3590
3590 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3591 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3591 for command-passing. Now the global Gnuplot instance is called
3592 for command-passing. Now the global Gnuplot instance is called
3592 'gp' instead of 'g', which was really a far too fragile and
3593 'gp' instead of 'g', which was really a far too fragile and
3593 common name.
3594 common name.
3594
3595
3595 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3596 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3596 bounding boxes generated by Gnuplot for square plots.
3597 bounding boxes generated by Gnuplot for square plots.
3597
3598
3598 * IPython/genutils.py (popkey): new function added. I should
3599 * IPython/genutils.py (popkey): new function added. I should
3599 suggest this on c.l.py as a dict method, it seems useful.
3600 suggest this on c.l.py as a dict method, it seems useful.
3600
3601
3601 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3602 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3602 to transparently handle PostScript generation. MUCH better than
3603 to transparently handle PostScript generation. MUCH better than
3603 the previous plot_eps/replot_eps (which I removed now). The code
3604 the previous plot_eps/replot_eps (which I removed now). The code
3604 is also fairly clean and well documented now (including
3605 is also fairly clean and well documented now (including
3605 docstrings).
3606 docstrings).
3606
3607
3607 2002-11-13 Fernando Perez <fperez@colorado.edu>
3608 2002-11-13 Fernando Perez <fperez@colorado.edu>
3608
3609
3609 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3610 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3610 (inconsistent with options).
3611 (inconsistent with options).
3611
3612
3612 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3613 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3613 manually disabled, I don't know why. Fixed it.
3614 manually disabled, I don't know why. Fixed it.
3614 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3615 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3615 eps output.
3616 eps output.
3616
3617
3617 2002-11-12 Fernando Perez <fperez@colorado.edu>
3618 2002-11-12 Fernando Perez <fperez@colorado.edu>
3618
3619
3619 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3620 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3620 don't propagate up to caller. Fixes crash reported by François
3621 don't propagate up to caller. Fixes crash reported by François
3621 Pinard.
3622 Pinard.
3622
3623
3623 2002-11-09 Fernando Perez <fperez@colorado.edu>
3624 2002-11-09 Fernando Perez <fperez@colorado.edu>
3624
3625
3625 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3626 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3626 history file for new users.
3627 history file for new users.
3627 (make_IPython): fixed bug where initial install would leave the
3628 (make_IPython): fixed bug where initial install would leave the
3628 user running in the .ipython dir.
3629 user running in the .ipython dir.
3629 (make_IPython): fixed bug where config dir .ipython would be
3630 (make_IPython): fixed bug where config dir .ipython would be
3630 created regardless of the given -ipythondir option. Thanks to Cory
3631 created regardless of the given -ipythondir option. Thanks to Cory
3631 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3632 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3632
3633
3633 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3634 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3634 type confirmations. Will need to use it in all of IPython's code
3635 type confirmations. Will need to use it in all of IPython's code
3635 consistently.
3636 consistently.
3636
3637
3637 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3638 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3638 context to print 31 lines instead of the default 5. This will make
3639 context to print 31 lines instead of the default 5. This will make
3639 the crash reports extremely detailed in case the problem is in
3640 the crash reports extremely detailed in case the problem is in
3640 libraries I don't have access to.
3641 libraries I don't have access to.
3641
3642
3642 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3643 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3643 line of defense' code to still crash, but giving users fair
3644 line of defense' code to still crash, but giving users fair
3644 warning. I don't want internal errors to go unreported: if there's
3645 warning. I don't want internal errors to go unreported: if there's
3645 an internal problem, IPython should crash and generate a full
3646 an internal problem, IPython should crash and generate a full
3646 report.
3647 report.
3647
3648
3648 2002-11-08 Fernando Perez <fperez@colorado.edu>
3649 2002-11-08 Fernando Perez <fperez@colorado.edu>
3649
3650
3650 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3651 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3651 otherwise uncaught exceptions which can appear if people set
3652 otherwise uncaught exceptions which can appear if people set
3652 sys.stdout to something badly broken. Thanks to a crash report
3653 sys.stdout to something badly broken. Thanks to a crash report
3653 from henni-AT-mail.brainbot.com.
3654 from henni-AT-mail.brainbot.com.
3654
3655
3655 2002-11-04 Fernando Perez <fperez@colorado.edu>
3656 2002-11-04 Fernando Perez <fperez@colorado.edu>
3656
3657
3657 * IPython/iplib.py (InteractiveShell.interact): added
3658 * IPython/iplib.py (InteractiveShell.interact): added
3658 __IPYTHON__active to the builtins. It's a flag which goes on when
3659 __IPYTHON__active to the builtins. It's a flag which goes on when
3659 the interaction starts and goes off again when it stops. This
3660 the interaction starts and goes off again when it stops. This
3660 allows embedding code to detect being inside IPython. Before this
3661 allows embedding code to detect being inside IPython. Before this
3661 was done via __IPYTHON__, but that only shows that an IPython
3662 was done via __IPYTHON__, but that only shows that an IPython
3662 instance has been created.
3663 instance has been created.
3663
3664
3664 * IPython/Magic.py (Magic.magic_env): I realized that in a
3665 * IPython/Magic.py (Magic.magic_env): I realized that in a
3665 UserDict, instance.data holds the data as a normal dict. So I
3666 UserDict, instance.data holds the data as a normal dict. So I
3666 modified @env to return os.environ.data instead of rebuilding a
3667 modified @env to return os.environ.data instead of rebuilding a
3667 dict by hand.
3668 dict by hand.
3668
3669
3669 2002-11-02 Fernando Perez <fperez@colorado.edu>
3670 2002-11-02 Fernando Perez <fperez@colorado.edu>
3670
3671
3671 * IPython/genutils.py (warn): changed so that level 1 prints no
3672 * IPython/genutils.py (warn): changed so that level 1 prints no
3672 header. Level 2 is now the default (with 'WARNING' header, as
3673 header. Level 2 is now the default (with 'WARNING' header, as
3673 before). I think I tracked all places where changes were needed in
3674 before). I think I tracked all places where changes were needed in
3674 IPython, but outside code using the old level numbering may have
3675 IPython, but outside code using the old level numbering may have
3675 broken.
3676 broken.
3676
3677
3677 * IPython/iplib.py (InteractiveShell.runcode): added this to
3678 * IPython/iplib.py (InteractiveShell.runcode): added this to
3678 handle the tracebacks in SystemExit traps correctly. The previous
3679 handle the tracebacks in SystemExit traps correctly. The previous
3679 code (through interact) was printing more of the stack than
3680 code (through interact) was printing more of the stack than
3680 necessary, showing IPython internal code to the user.
3681 necessary, showing IPython internal code to the user.
3681
3682
3682 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3683 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3683 default. Now that the default at the confirmation prompt is yes,
3684 default. Now that the default at the confirmation prompt is yes,
3684 it's not so intrusive. François' argument that ipython sessions
3685 it's not so intrusive. François' argument that ipython sessions
3685 tend to be complex enough not to lose them from an accidental C-d,
3686 tend to be complex enough not to lose them from an accidental C-d,
3686 is a valid one.
3687 is a valid one.
3687
3688
3688 * IPython/iplib.py (InteractiveShell.interact): added a
3689 * IPython/iplib.py (InteractiveShell.interact): added a
3689 showtraceback() call to the SystemExit trap, and modified the exit
3690 showtraceback() call to the SystemExit trap, and modified the exit
3690 confirmation to have yes as the default.
3691 confirmation to have yes as the default.
3691
3692
3692 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3693 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3693 this file. It's been gone from the code for a long time, this was
3694 this file. It's been gone from the code for a long time, this was
3694 simply leftover junk.
3695 simply leftover junk.
3695
3696
3696 2002-11-01 Fernando Perez <fperez@colorado.edu>
3697 2002-11-01 Fernando Perez <fperez@colorado.edu>
3697
3698
3698 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3699 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3699 added. If set, IPython now traps EOF and asks for
3700 added. If set, IPython now traps EOF and asks for
3700 confirmation. After a request by François Pinard.
3701 confirmation. After a request by François Pinard.
3701
3702
3702 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3703 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3703 of @abort, and with a new (better) mechanism for handling the
3704 of @abort, and with a new (better) mechanism for handling the
3704 exceptions.
3705 exceptions.
3705
3706
3706 2002-10-27 Fernando Perez <fperez@colorado.edu>
3707 2002-10-27 Fernando Perez <fperez@colorado.edu>
3707
3708
3708 * IPython/usage.py (__doc__): updated the --help information and
3709 * IPython/usage.py (__doc__): updated the --help information and
3709 the ipythonrc file to indicate that -log generates
3710 the ipythonrc file to indicate that -log generates
3710 ./ipython.log. Also fixed the corresponding info in @logstart.
3711 ./ipython.log. Also fixed the corresponding info in @logstart.
3711 This and several other fixes in the manuals thanks to reports by
3712 This and several other fixes in the manuals thanks to reports by
3712 François Pinard <pinard-AT-iro.umontreal.ca>.
3713 François Pinard <pinard-AT-iro.umontreal.ca>.
3713
3714
3714 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3715 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3715 refer to @logstart (instead of @log, which doesn't exist).
3716 refer to @logstart (instead of @log, which doesn't exist).
3716
3717
3717 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3718 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3718 AttributeError crash. Thanks to Christopher Armstrong
3719 AttributeError crash. Thanks to Christopher Armstrong
3719 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3720 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3720 introduced recently (in 0.2.14pre37) with the fix to the eval
3721 introduced recently (in 0.2.14pre37) with the fix to the eval
3721 problem mentioned below.
3722 problem mentioned below.
3722
3723
3723 2002-10-17 Fernando Perez <fperez@colorado.edu>
3724 2002-10-17 Fernando Perez <fperez@colorado.edu>
3724
3725
3725 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3726 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3726 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3727 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3727
3728
3728 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3729 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3729 this function to fix a problem reported by Alex Schmolck. He saw
3730 this function to fix a problem reported by Alex Schmolck. He saw
3730 it with list comprehensions and generators, which were getting
3731 it with list comprehensions and generators, which were getting
3731 called twice. The real problem was an 'eval' call in testing for
3732 called twice. The real problem was an 'eval' call in testing for
3732 automagic which was evaluating the input line silently.
3733 automagic which was evaluating the input line silently.
3733
3734
3734 This is a potentially very nasty bug, if the input has side
3735 This is a potentially very nasty bug, if the input has side
3735 effects which must not be repeated. The code is much cleaner now,
3736 effects which must not be repeated. The code is much cleaner now,
3736 without any blanket 'except' left and with a regexp test for
3737 without any blanket 'except' left and with a regexp test for
3737 actual function names.
3738 actual function names.
3738
3739
3739 But an eval remains, which I'm not fully comfortable with. I just
3740 But an eval remains, which I'm not fully comfortable with. I just
3740 don't know how to find out if an expression could be a callable in
3741 don't know how to find out if an expression could be a callable in
3741 the user's namespace without doing an eval on the string. However
3742 the user's namespace without doing an eval on the string. However
3742 that string is now much more strictly checked so that no code
3743 that string is now much more strictly checked so that no code
3743 slips by, so the eval should only happen for things that can
3744 slips by, so the eval should only happen for things that can
3744 really be only function/method names.
3745 really be only function/method names.
3745
3746
3746 2002-10-15 Fernando Perez <fperez@colorado.edu>
3747 2002-10-15 Fernando Perez <fperez@colorado.edu>
3747
3748
3748 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3749 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3749 OSX information to main manual, removed README_Mac_OSX file from
3750 OSX information to main manual, removed README_Mac_OSX file from
3750 distribution. Also updated credits for recent additions.
3751 distribution. Also updated credits for recent additions.
3751
3752
3752 2002-10-10 Fernando Perez <fperez@colorado.edu>
3753 2002-10-10 Fernando Perez <fperez@colorado.edu>
3753
3754
3754 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3755 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3755 terminal-related issues. Many thanks to Andrea Riciputi
3756 terminal-related issues. Many thanks to Andrea Riciputi
3756 <andrea.riciputi-AT-libero.it> for writing it.
3757 <andrea.riciputi-AT-libero.it> for writing it.
3757
3758
3758 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3759 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3759 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3760 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3760
3761
3761 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3762 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3762 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3763 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3763 <syver-en-AT-online.no> who both submitted patches for this problem.
3764 <syver-en-AT-online.no> who both submitted patches for this problem.
3764
3765
3765 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3766 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3766 global embedding to make sure that things don't overwrite user
3767 global embedding to make sure that things don't overwrite user
3767 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3768 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3768
3769
3769 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3770 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3770 compatibility. Thanks to Hayden Callow
3771 compatibility. Thanks to Hayden Callow
3771 <h.callow-AT-elec.canterbury.ac.nz>
3772 <h.callow-AT-elec.canterbury.ac.nz>
3772
3773
3773 2002-10-04 Fernando Perez <fperez@colorado.edu>
3774 2002-10-04 Fernando Perez <fperez@colorado.edu>
3774
3775
3775 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3776 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3776 Gnuplot.File objects.
3777 Gnuplot.File objects.
3777
3778
3778 2002-07-23 Fernando Perez <fperez@colorado.edu>
3779 2002-07-23 Fernando Perez <fperez@colorado.edu>
3779
3780
3780 * IPython/genutils.py (timing): Added timings() and timing() for
3781 * IPython/genutils.py (timing): Added timings() and timing() for
3781 quick access to the most commonly needed data, the execution
3782 quick access to the most commonly needed data, the execution
3782 times. Old timing() renamed to timings_out().
3783 times. Old timing() renamed to timings_out().
3783
3784
3784 2002-07-18 Fernando Perez <fperez@colorado.edu>
3785 2002-07-18 Fernando Perez <fperez@colorado.edu>
3785
3786
3786 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3787 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3787 bug with nested instances disrupting the parent's tab completion.
3788 bug with nested instances disrupting the parent's tab completion.
3788
3789
3789 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3790 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3790 all_completions code to begin the emacs integration.
3791 all_completions code to begin the emacs integration.
3791
3792
3792 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3793 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3793 argument to allow titling individual arrays when plotting.
3794 argument to allow titling individual arrays when plotting.
3794
3795
3795 2002-07-15 Fernando Perez <fperez@colorado.edu>
3796 2002-07-15 Fernando Perez <fperez@colorado.edu>
3796
3797
3797 * setup.py (make_shortcut): changed to retrieve the value of
3798 * setup.py (make_shortcut): changed to retrieve the value of
3798 'Program Files' directory from the registry (this value changes in
3799 'Program Files' directory from the registry (this value changes in
3799 non-english versions of Windows). Thanks to Thomas Fanslau
3800 non-english versions of Windows). Thanks to Thomas Fanslau
3800 <tfanslau-AT-gmx.de> for the report.
3801 <tfanslau-AT-gmx.de> for the report.
3801
3802
3802 2002-07-10 Fernando Perez <fperez@colorado.edu>
3803 2002-07-10 Fernando Perez <fperez@colorado.edu>
3803
3804
3804 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3805 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3805 a bug in pdb, which crashes if a line with only whitespace is
3806 a bug in pdb, which crashes if a line with only whitespace is
3806 entered. Bug report submitted to sourceforge.
3807 entered. Bug report submitted to sourceforge.
3807
3808
3808 2002-07-09 Fernando Perez <fperez@colorado.edu>
3809 2002-07-09 Fernando Perez <fperez@colorado.edu>
3809
3810
3810 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3811 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3811 reporting exceptions (it's a bug in inspect.py, I just set a
3812 reporting exceptions (it's a bug in inspect.py, I just set a
3812 workaround).
3813 workaround).
3813
3814
3814 2002-07-08 Fernando Perez <fperez@colorado.edu>
3815 2002-07-08 Fernando Perez <fperez@colorado.edu>
3815
3816
3816 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3817 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3817 __IPYTHON__ in __builtins__ to show up in user_ns.
3818 __IPYTHON__ in __builtins__ to show up in user_ns.
3818
3819
3819 2002-07-03 Fernando Perez <fperez@colorado.edu>
3820 2002-07-03 Fernando Perez <fperez@colorado.edu>
3820
3821
3821 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3822 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3822 name from @gp_set_instance to @gp_set_default.
3823 name from @gp_set_instance to @gp_set_default.
3823
3824
3824 * IPython/ipmaker.py (make_IPython): default editor value set to
3825 * IPython/ipmaker.py (make_IPython): default editor value set to
3825 '0' (a string), to match the rc file. Otherwise will crash when
3826 '0' (a string), to match the rc file. Otherwise will crash when
3826 .strip() is called on it.
3827 .strip() is called on it.
3827
3828
3828
3829
3829 2002-06-28 Fernando Perez <fperez@colorado.edu>
3830 2002-06-28 Fernando Perez <fperez@colorado.edu>
3830
3831
3831 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3832 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3832 of files in current directory when a file is executed via
3833 of files in current directory when a file is executed via
3833 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3834 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3834
3835
3835 * setup.py (manfiles): fix for rpm builds, submitted by RA
3836 * setup.py (manfiles): fix for rpm builds, submitted by RA
3836 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3837 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3837
3838
3838 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3839 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3839 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3840 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3840 string!). A. Schmolck caught this one.
3841 string!). A. Schmolck caught this one.
3841
3842
3842 2002-06-27 Fernando Perez <fperez@colorado.edu>
3843 2002-06-27 Fernando Perez <fperez@colorado.edu>
3843
3844
3844 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3845 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3845 defined files at the cmd line. __name__ wasn't being set to
3846 defined files at the cmd line. __name__ wasn't being set to
3846 __main__.
3847 __main__.
3847
3848
3848 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3849 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3849 regular lists and tuples besides Numeric arrays.
3850 regular lists and tuples besides Numeric arrays.
3850
3851
3851 * IPython/Prompts.py (CachedOutput.__call__): Added output
3852 * IPython/Prompts.py (CachedOutput.__call__): Added output
3852 supression for input ending with ';'. Similar to Mathematica and
3853 supression for input ending with ';'. Similar to Mathematica and
3853 Matlab. The _* vars and Out[] list are still updated, just like
3854 Matlab. The _* vars and Out[] list are still updated, just like
3854 Mathematica behaves.
3855 Mathematica behaves.
3855
3856
3856 2002-06-25 Fernando Perez <fperez@colorado.edu>
3857 2002-06-25 Fernando Perez <fperez@colorado.edu>
3857
3858
3858 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3859 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3859 .ini extensions for profiels under Windows.
3860 .ini extensions for profiels under Windows.
3860
3861
3861 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3862 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3862 string form. Fix contributed by Alexander Schmolck
3863 string form. Fix contributed by Alexander Schmolck
3863 <a.schmolck-AT-gmx.net>
3864 <a.schmolck-AT-gmx.net>
3864
3865
3865 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3866 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3866 pre-configured Gnuplot instance.
3867 pre-configured Gnuplot instance.
3867
3868
3868 2002-06-21 Fernando Perez <fperez@colorado.edu>
3869 2002-06-21 Fernando Perez <fperez@colorado.edu>
3869
3870
3870 * IPython/numutils.py (exp_safe): new function, works around the
3871 * IPython/numutils.py (exp_safe): new function, works around the
3871 underflow problems in Numeric.
3872 underflow problems in Numeric.
3872 (log2): New fn. Safe log in base 2: returns exact integer answer
3873 (log2): New fn. Safe log in base 2: returns exact integer answer
3873 for exact integer powers of 2.
3874 for exact integer powers of 2.
3874
3875
3875 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3876 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3876 properly.
3877 properly.
3877
3878
3878 2002-06-20 Fernando Perez <fperez@colorado.edu>
3879 2002-06-20 Fernando Perez <fperez@colorado.edu>
3879
3880
3880 * IPython/genutils.py (timing): new function like
3881 * IPython/genutils.py (timing): new function like
3881 Mathematica's. Similar to time_test, but returns more info.
3882 Mathematica's. Similar to time_test, but returns more info.
3882
3883
3883 2002-06-18 Fernando Perez <fperez@colorado.edu>
3884 2002-06-18 Fernando Perez <fperez@colorado.edu>
3884
3885
3885 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3886 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3886 according to Mike Heeter's suggestions.
3887 according to Mike Heeter's suggestions.
3887
3888
3888 2002-06-16 Fernando Perez <fperez@colorado.edu>
3889 2002-06-16 Fernando Perez <fperez@colorado.edu>
3889
3890
3890 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3891 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3891 system. GnuplotMagic is gone as a user-directory option. New files
3892 system. GnuplotMagic is gone as a user-directory option. New files
3892 make it easier to use all the gnuplot stuff both from external
3893 make it easier to use all the gnuplot stuff both from external
3893 programs as well as from IPython. Had to rewrite part of
3894 programs as well as from IPython. Had to rewrite part of
3894 hardcopy() b/c of a strange bug: often the ps files simply don't
3895 hardcopy() b/c of a strange bug: often the ps files simply don't
3895 get created, and require a repeat of the command (often several
3896 get created, and require a repeat of the command (often several
3896 times).
3897 times).
3897
3898
3898 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3899 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3899 resolve output channel at call time, so that if sys.stderr has
3900 resolve output channel at call time, so that if sys.stderr has
3900 been redirected by user this gets honored.
3901 been redirected by user this gets honored.
3901
3902
3902 2002-06-13 Fernando Perez <fperez@colorado.edu>
3903 2002-06-13 Fernando Perez <fperez@colorado.edu>
3903
3904
3904 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3905 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3905 IPShell. Kept a copy with the old names to avoid breaking people's
3906 IPShell. Kept a copy with the old names to avoid breaking people's
3906 embedded code.
3907 embedded code.
3907
3908
3908 * IPython/ipython: simplified it to the bare minimum after
3909 * IPython/ipython: simplified it to the bare minimum after
3909 Holger's suggestions. Added info about how to use it in
3910 Holger's suggestions. Added info about how to use it in
3910 PYTHONSTARTUP.
3911 PYTHONSTARTUP.
3911
3912
3912 * IPython/Shell.py (IPythonShell): changed the options passing
3913 * IPython/Shell.py (IPythonShell): changed the options passing
3913 from a string with funky %s replacements to a straight list. Maybe
3914 from a string with funky %s replacements to a straight list. Maybe
3914 a bit more typing, but it follows sys.argv conventions, so there's
3915 a bit more typing, but it follows sys.argv conventions, so there's
3915 less special-casing to remember.
3916 less special-casing to remember.
3916
3917
3917 2002-06-12 Fernando Perez <fperez@colorado.edu>
3918 2002-06-12 Fernando Perez <fperez@colorado.edu>
3918
3919
3919 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3920 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3920 command. Thanks to a suggestion by Mike Heeter.
3921 command. Thanks to a suggestion by Mike Heeter.
3921 (Magic.magic_pfile): added behavior to look at filenames if given
3922 (Magic.magic_pfile): added behavior to look at filenames if given
3922 arg is not a defined object.
3923 arg is not a defined object.
3923 (Magic.magic_save): New @save function to save code snippets. Also
3924 (Magic.magic_save): New @save function to save code snippets. Also
3924 a Mike Heeter idea.
3925 a Mike Heeter idea.
3925
3926
3926 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3927 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3927 plot() and replot(). Much more convenient now, especially for
3928 plot() and replot(). Much more convenient now, especially for
3928 interactive use.
3929 interactive use.
3929
3930
3930 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3931 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3931 filenames.
3932 filenames.
3932
3933
3933 2002-06-02 Fernando Perez <fperez@colorado.edu>
3934 2002-06-02 Fernando Perez <fperez@colorado.edu>
3934
3935
3935 * IPython/Struct.py (Struct.__init__): modified to admit
3936 * IPython/Struct.py (Struct.__init__): modified to admit
3936 initialization via another struct.
3937 initialization via another struct.
3937
3938
3938 * IPython/genutils.py (SystemExec.__init__): New stateful
3939 * IPython/genutils.py (SystemExec.__init__): New stateful
3939 interface to xsys and bq. Useful for writing system scripts.
3940 interface to xsys and bq. Useful for writing system scripts.
3940
3941
3941 2002-05-30 Fernando Perez <fperez@colorado.edu>
3942 2002-05-30 Fernando Perez <fperez@colorado.edu>
3942
3943
3943 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3944 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3944 documents. This will make the user download smaller (it's getting
3945 documents. This will make the user download smaller (it's getting
3945 too big).
3946 too big).
3946
3947
3947 2002-05-29 Fernando Perez <fperez@colorado.edu>
3948 2002-05-29 Fernando Perez <fperez@colorado.edu>
3948
3949
3949 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3950 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3950 fix problems with shelve and pickle. Seems to work, but I don't
3951 fix problems with shelve and pickle. Seems to work, but I don't
3951 know if corner cases break it. Thanks to Mike Heeter
3952 know if corner cases break it. Thanks to Mike Heeter
3952 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3953 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3953
3954
3954 2002-05-24 Fernando Perez <fperez@colorado.edu>
3955 2002-05-24 Fernando Perez <fperez@colorado.edu>
3955
3956
3956 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3957 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3957 macros having broken.
3958 macros having broken.
3958
3959
3959 2002-05-21 Fernando Perez <fperez@colorado.edu>
3960 2002-05-21 Fernando Perez <fperez@colorado.edu>
3960
3961
3961 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3962 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3962 introduced logging bug: all history before logging started was
3963 introduced logging bug: all history before logging started was
3963 being written one character per line! This came from the redesign
3964 being written one character per line! This came from the redesign
3964 of the input history as a special list which slices to strings,
3965 of the input history as a special list which slices to strings,
3965 not to lists.
3966 not to lists.
3966
3967
3967 2002-05-20 Fernando Perez <fperez@colorado.edu>
3968 2002-05-20 Fernando Perez <fperez@colorado.edu>
3968
3969
3969 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3970 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3970 be an attribute of all classes in this module. The design of these
3971 be an attribute of all classes in this module. The design of these
3971 classes needs some serious overhauling.
3972 classes needs some serious overhauling.
3972
3973
3973 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3974 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3974 which was ignoring '_' in option names.
3975 which was ignoring '_' in option names.
3975
3976
3976 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3977 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3977 'Verbose_novars' to 'Context' and made it the new default. It's a
3978 'Verbose_novars' to 'Context' and made it the new default. It's a
3978 bit more readable and also safer than verbose.
3979 bit more readable and also safer than verbose.
3979
3980
3980 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3981 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3981 triple-quoted strings.
3982 triple-quoted strings.
3982
3983
3983 * IPython/OInspect.py (__all__): new module exposing the object
3984 * IPython/OInspect.py (__all__): new module exposing the object
3984 introspection facilities. Now the corresponding magics are dummy
3985 introspection facilities. Now the corresponding magics are dummy
3985 wrappers around this. Having this module will make it much easier
3986 wrappers around this. Having this module will make it much easier
3986 to put these functions into our modified pdb.
3987 to put these functions into our modified pdb.
3987 This new object inspector system uses the new colorizing module,
3988 This new object inspector system uses the new colorizing module,
3988 so source code and other things are nicely syntax highlighted.
3989 so source code and other things are nicely syntax highlighted.
3989
3990
3990 2002-05-18 Fernando Perez <fperez@colorado.edu>
3991 2002-05-18 Fernando Perez <fperez@colorado.edu>
3991
3992
3992 * IPython/ColorANSI.py: Split the coloring tools into a separate
3993 * IPython/ColorANSI.py: Split the coloring tools into a separate
3993 module so I can use them in other code easier (they were part of
3994 module so I can use them in other code easier (they were part of
3994 ultraTB).
3995 ultraTB).
3995
3996
3996 2002-05-17 Fernando Perez <fperez@colorado.edu>
3997 2002-05-17 Fernando Perez <fperez@colorado.edu>
3997
3998
3998 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3999 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3999 fixed it to set the global 'g' also to the called instance, as
4000 fixed it to set the global 'g' also to the called instance, as
4000 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4001 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4001 user's 'g' variables).
4002 user's 'g' variables).
4002
4003
4003 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4004 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4004 global variables (aliases to _ih,_oh) so that users which expect
4005 global variables (aliases to _ih,_oh) so that users which expect
4005 In[5] or Out[7] to work aren't unpleasantly surprised.
4006 In[5] or Out[7] to work aren't unpleasantly surprised.
4006 (InputList.__getslice__): new class to allow executing slices of
4007 (InputList.__getslice__): new class to allow executing slices of
4007 input history directly. Very simple class, complements the use of
4008 input history directly. Very simple class, complements the use of
4008 macros.
4009 macros.
4009
4010
4010 2002-05-16 Fernando Perez <fperez@colorado.edu>
4011 2002-05-16 Fernando Perez <fperez@colorado.edu>
4011
4012
4012 * setup.py (docdirbase): make doc directory be just doc/IPython
4013 * setup.py (docdirbase): make doc directory be just doc/IPython
4013 without version numbers, it will reduce clutter for users.
4014 without version numbers, it will reduce clutter for users.
4014
4015
4015 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4016 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4016 execfile call to prevent possible memory leak. See for details:
4017 execfile call to prevent possible memory leak. See for details:
4017 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4018 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4018
4019
4019 2002-05-15 Fernando Perez <fperez@colorado.edu>
4020 2002-05-15 Fernando Perez <fperez@colorado.edu>
4020
4021
4021 * IPython/Magic.py (Magic.magic_psource): made the object
4022 * IPython/Magic.py (Magic.magic_psource): made the object
4022 introspection names be more standard: pdoc, pdef, pfile and
4023 introspection names be more standard: pdoc, pdef, pfile and
4023 psource. They all print/page their output, and it makes
4024 psource. They all print/page their output, and it makes
4024 remembering them easier. Kept old names for compatibility as
4025 remembering them easier. Kept old names for compatibility as
4025 aliases.
4026 aliases.
4026
4027
4027 2002-05-14 Fernando Perez <fperez@colorado.edu>
4028 2002-05-14 Fernando Perez <fperez@colorado.edu>
4028
4029
4029 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4030 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4030 what the mouse problem was. The trick is to use gnuplot with temp
4031 what the mouse problem was. The trick is to use gnuplot with temp
4031 files and NOT with pipes (for data communication), because having
4032 files and NOT with pipes (for data communication), because having
4032 both pipes and the mouse on is bad news.
4033 both pipes and the mouse on is bad news.
4033
4034
4034 2002-05-13 Fernando Perez <fperez@colorado.edu>
4035 2002-05-13 Fernando Perez <fperez@colorado.edu>
4035
4036
4036 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4037 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4037 bug. Information would be reported about builtins even when
4038 bug. Information would be reported about builtins even when
4038 user-defined functions overrode them.
4039 user-defined functions overrode them.
4039
4040
4040 2002-05-11 Fernando Perez <fperez@colorado.edu>
4041 2002-05-11 Fernando Perez <fperez@colorado.edu>
4041
4042
4042 * IPython/__init__.py (__all__): removed FlexCompleter from
4043 * IPython/__init__.py (__all__): removed FlexCompleter from
4043 __all__ so that things don't fail in platforms without readline.
4044 __all__ so that things don't fail in platforms without readline.
4044
4045
4045 2002-05-10 Fernando Perez <fperez@colorado.edu>
4046 2002-05-10 Fernando Perez <fperez@colorado.edu>
4046
4047
4047 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4048 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4048 it requires Numeric, effectively making Numeric a dependency for
4049 it requires Numeric, effectively making Numeric a dependency for
4049 IPython.
4050 IPython.
4050
4051
4051 * Released 0.2.13
4052 * Released 0.2.13
4052
4053
4053 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4054 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4054 profiler interface. Now all the major options from the profiler
4055 profiler interface. Now all the major options from the profiler
4055 module are directly supported in IPython, both for single
4056 module are directly supported in IPython, both for single
4056 expressions (@prun) and for full programs (@run -p).
4057 expressions (@prun) and for full programs (@run -p).
4057
4058
4058 2002-05-09 Fernando Perez <fperez@colorado.edu>
4059 2002-05-09 Fernando Perez <fperez@colorado.edu>
4059
4060
4060 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4061 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4061 magic properly formatted for screen.
4062 magic properly formatted for screen.
4062
4063
4063 * setup.py (make_shortcut): Changed things to put pdf version in
4064 * setup.py (make_shortcut): Changed things to put pdf version in
4064 doc/ instead of doc/manual (had to change lyxport a bit).
4065 doc/ instead of doc/manual (had to change lyxport a bit).
4065
4066
4066 * IPython/Magic.py (Profile.string_stats): made profile runs go
4067 * IPython/Magic.py (Profile.string_stats): made profile runs go
4067 through pager (they are long and a pager allows searching, saving,
4068 through pager (they are long and a pager allows searching, saving,
4068 etc.)
4069 etc.)
4069
4070
4070 2002-05-08 Fernando Perez <fperez@colorado.edu>
4071 2002-05-08 Fernando Perez <fperez@colorado.edu>
4071
4072
4072 * Released 0.2.12
4073 * Released 0.2.12
4073
4074
4074 2002-05-06 Fernando Perez <fperez@colorado.edu>
4075 2002-05-06 Fernando Perez <fperez@colorado.edu>
4075
4076
4076 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4077 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4077 introduced); 'hist n1 n2' was broken.
4078 introduced); 'hist n1 n2' was broken.
4078 (Magic.magic_pdb): added optional on/off arguments to @pdb
4079 (Magic.magic_pdb): added optional on/off arguments to @pdb
4079 (Magic.magic_run): added option -i to @run, which executes code in
4080 (Magic.magic_run): added option -i to @run, which executes code in
4080 the IPython namespace instead of a clean one. Also added @irun as
4081 the IPython namespace instead of a clean one. Also added @irun as
4081 an alias to @run -i.
4082 an alias to @run -i.
4082
4083
4083 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4084 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4084 fixed (it didn't really do anything, the namespaces were wrong).
4085 fixed (it didn't really do anything, the namespaces were wrong).
4085
4086
4086 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4087 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4087
4088
4088 * IPython/__init__.py (__all__): Fixed package namespace, now
4089 * IPython/__init__.py (__all__): Fixed package namespace, now
4089 'import IPython' does give access to IPython.<all> as
4090 'import IPython' does give access to IPython.<all> as
4090 expected. Also renamed __release__ to Release.
4091 expected. Also renamed __release__ to Release.
4091
4092
4092 * IPython/Debugger.py (__license__): created new Pdb class which
4093 * IPython/Debugger.py (__license__): created new Pdb class which
4093 functions like a drop-in for the normal pdb.Pdb but does NOT
4094 functions like a drop-in for the normal pdb.Pdb but does NOT
4094 import readline by default. This way it doesn't muck up IPython's
4095 import readline by default. This way it doesn't muck up IPython's
4095 readline handling, and now tab-completion finally works in the
4096 readline handling, and now tab-completion finally works in the
4096 debugger -- sort of. It completes things globally visible, but the
4097 debugger -- sort of. It completes things globally visible, but the
4097 completer doesn't track the stack as pdb walks it. That's a bit
4098 completer doesn't track the stack as pdb walks it. That's a bit
4098 tricky, and I'll have to implement it later.
4099 tricky, and I'll have to implement it later.
4099
4100
4100 2002-05-05 Fernando Perez <fperez@colorado.edu>
4101 2002-05-05 Fernando Perez <fperez@colorado.edu>
4101
4102
4102 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4103 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4103 magic docstrings when printed via ? (explicit \'s were being
4104 magic docstrings when printed via ? (explicit \'s were being
4104 printed).
4105 printed).
4105
4106
4106 * IPython/ipmaker.py (make_IPython): fixed namespace
4107 * IPython/ipmaker.py (make_IPython): fixed namespace
4107 identification bug. Now variables loaded via logs or command-line
4108 identification bug. Now variables loaded via logs or command-line
4108 files are recognized in the interactive namespace by @who.
4109 files are recognized in the interactive namespace by @who.
4109
4110
4110 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4111 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4111 log replay system stemming from the string form of Structs.
4112 log replay system stemming from the string form of Structs.
4112
4113
4113 * IPython/Magic.py (Macro.__init__): improved macros to properly
4114 * IPython/Magic.py (Macro.__init__): improved macros to properly
4114 handle magic commands in them.
4115 handle magic commands in them.
4115 (Magic.magic_logstart): usernames are now expanded so 'logstart
4116 (Magic.magic_logstart): usernames are now expanded so 'logstart
4116 ~/mylog' now works.
4117 ~/mylog' now works.
4117
4118
4118 * IPython/iplib.py (complete): fixed bug where paths starting with
4119 * IPython/iplib.py (complete): fixed bug where paths starting with
4119 '/' would be completed as magic names.
4120 '/' would be completed as magic names.
4120
4121
4121 2002-05-04 Fernando Perez <fperez@colorado.edu>
4122 2002-05-04 Fernando Perez <fperez@colorado.edu>
4122
4123
4123 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4124 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4124 allow running full programs under the profiler's control.
4125 allow running full programs under the profiler's control.
4125
4126
4126 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4127 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4127 mode to report exceptions verbosely but without formatting
4128 mode to report exceptions verbosely but without formatting
4128 variables. This addresses the issue of ipython 'freezing' (it's
4129 variables. This addresses the issue of ipython 'freezing' (it's
4129 not frozen, but caught in an expensive formatting loop) when huge
4130 not frozen, but caught in an expensive formatting loop) when huge
4130 variables are in the context of an exception.
4131 variables are in the context of an exception.
4131 (VerboseTB.text): Added '--->' markers at line where exception was
4132 (VerboseTB.text): Added '--->' markers at line where exception was
4132 triggered. Much clearer to read, especially in NoColor modes.
4133 triggered. Much clearer to read, especially in NoColor modes.
4133
4134
4134 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4135 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4135 implemented in reverse when changing to the new parse_options().
4136 implemented in reverse when changing to the new parse_options().
4136
4137
4137 2002-05-03 Fernando Perez <fperez@colorado.edu>
4138 2002-05-03 Fernando Perez <fperez@colorado.edu>
4138
4139
4139 * IPython/Magic.py (Magic.parse_options): new function so that
4140 * IPython/Magic.py (Magic.parse_options): new function so that
4140 magics can parse options easier.
4141 magics can parse options easier.
4141 (Magic.magic_prun): new function similar to profile.run(),
4142 (Magic.magic_prun): new function similar to profile.run(),
4142 suggested by Chris Hart.
4143 suggested by Chris Hart.
4143 (Magic.magic_cd): fixed behavior so that it only changes if
4144 (Magic.magic_cd): fixed behavior so that it only changes if
4144 directory actually is in history.
4145 directory actually is in history.
4145
4146
4146 * IPython/usage.py (__doc__): added information about potential
4147 * IPython/usage.py (__doc__): added information about potential
4147 slowness of Verbose exception mode when there are huge data
4148 slowness of Verbose exception mode when there are huge data
4148 structures to be formatted (thanks to Archie Paulson).
4149 structures to be formatted (thanks to Archie Paulson).
4149
4150
4150 * IPython/ipmaker.py (make_IPython): Changed default logging
4151 * IPython/ipmaker.py (make_IPython): Changed default logging
4151 (when simply called with -log) to use curr_dir/ipython.log in
4152 (when simply called with -log) to use curr_dir/ipython.log in
4152 rotate mode. Fixed crash which was occuring with -log before
4153 rotate mode. Fixed crash which was occuring with -log before
4153 (thanks to Jim Boyle).
4154 (thanks to Jim Boyle).
4154
4155
4155 2002-05-01 Fernando Perez <fperez@colorado.edu>
4156 2002-05-01 Fernando Perez <fperez@colorado.edu>
4156
4157
4157 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4158 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4158 was nasty -- though somewhat of a corner case).
4159 was nasty -- though somewhat of a corner case).
4159
4160
4160 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4161 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4161 text (was a bug).
4162 text (was a bug).
4162
4163
4163 2002-04-30 Fernando Perez <fperez@colorado.edu>
4164 2002-04-30 Fernando Perez <fperez@colorado.edu>
4164
4165
4165 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4166 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4166 a print after ^D or ^C from the user so that the In[] prompt
4167 a print after ^D or ^C from the user so that the In[] prompt
4167 doesn't over-run the gnuplot one.
4168 doesn't over-run the gnuplot one.
4168
4169
4169 2002-04-29 Fernando Perez <fperez@colorado.edu>
4170 2002-04-29 Fernando Perez <fperez@colorado.edu>
4170
4171
4171 * Released 0.2.10
4172 * Released 0.2.10
4172
4173
4173 * IPython/__release__.py (version): get date dynamically.
4174 * IPython/__release__.py (version): get date dynamically.
4174
4175
4175 * Misc. documentation updates thanks to Arnd's comments. Also ran
4176 * Misc. documentation updates thanks to Arnd's comments. Also ran
4176 a full spellcheck on the manual (hadn't been done in a while).
4177 a full spellcheck on the manual (hadn't been done in a while).
4177
4178
4178 2002-04-27 Fernando Perez <fperez@colorado.edu>
4179 2002-04-27 Fernando Perez <fperez@colorado.edu>
4179
4180
4180 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4181 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4181 starting a log in mid-session would reset the input history list.
4182 starting a log in mid-session would reset the input history list.
4182
4183
4183 2002-04-26 Fernando Perez <fperez@colorado.edu>
4184 2002-04-26 Fernando Perez <fperez@colorado.edu>
4184
4185
4185 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4186 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4186 all files were being included in an update. Now anything in
4187 all files were being included in an update. Now anything in
4187 UserConfig that matches [A-Za-z]*.py will go (this excludes
4188 UserConfig that matches [A-Za-z]*.py will go (this excludes
4188 __init__.py)
4189 __init__.py)
4189
4190
4190 2002-04-25 Fernando Perez <fperez@colorado.edu>
4191 2002-04-25 Fernando Perez <fperez@colorado.edu>
4191
4192
4192 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4193 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4193 to __builtins__ so that any form of embedded or imported code can
4194 to __builtins__ so that any form of embedded or imported code can
4194 test for being inside IPython.
4195 test for being inside IPython.
4195
4196
4196 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4197 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4197 changed to GnuplotMagic because it's now an importable module,
4198 changed to GnuplotMagic because it's now an importable module,
4198 this makes the name follow that of the standard Gnuplot module.
4199 this makes the name follow that of the standard Gnuplot module.
4199 GnuplotMagic can now be loaded at any time in mid-session.
4200 GnuplotMagic can now be loaded at any time in mid-session.
4200
4201
4201 2002-04-24 Fernando Perez <fperez@colorado.edu>
4202 2002-04-24 Fernando Perez <fperez@colorado.edu>
4202
4203
4203 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4204 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4204 the globals (IPython has its own namespace) and the
4205 the globals (IPython has its own namespace) and the
4205 PhysicalQuantity stuff is much better anyway.
4206 PhysicalQuantity stuff is much better anyway.
4206
4207
4207 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4208 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4208 embedding example to standard user directory for
4209 embedding example to standard user directory for
4209 distribution. Also put it in the manual.
4210 distribution. Also put it in the manual.
4210
4211
4211 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4212 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4212 instance as first argument (so it doesn't rely on some obscure
4213 instance as first argument (so it doesn't rely on some obscure
4213 hidden global).
4214 hidden global).
4214
4215
4215 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4216 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4216 delimiters. While it prevents ().TAB from working, it allows
4217 delimiters. While it prevents ().TAB from working, it allows
4217 completions in open (... expressions. This is by far a more common
4218 completions in open (... expressions. This is by far a more common
4218 case.
4219 case.
4219
4220
4220 2002-04-23 Fernando Perez <fperez@colorado.edu>
4221 2002-04-23 Fernando Perez <fperez@colorado.edu>
4221
4222
4222 * IPython/Extensions/InterpreterPasteInput.py: new
4223 * IPython/Extensions/InterpreterPasteInput.py: new
4223 syntax-processing module for pasting lines with >>> or ... at the
4224 syntax-processing module for pasting lines with >>> or ... at the
4224 start.
4225 start.
4225
4226
4226 * IPython/Extensions/PhysicalQ_Interactive.py
4227 * IPython/Extensions/PhysicalQ_Interactive.py
4227 (PhysicalQuantityInteractive.__int__): fixed to work with either
4228 (PhysicalQuantityInteractive.__int__): fixed to work with either
4228 Numeric or math.
4229 Numeric or math.
4229
4230
4230 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4231 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4231 provided profiles. Now we have:
4232 provided profiles. Now we have:
4232 -math -> math module as * and cmath with its own namespace.
4233 -math -> math module as * and cmath with its own namespace.
4233 -numeric -> Numeric as *, plus gnuplot & grace
4234 -numeric -> Numeric as *, plus gnuplot & grace
4234 -physics -> same as before
4235 -physics -> same as before
4235
4236
4236 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4237 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4237 user-defined magics wouldn't be found by @magic if they were
4238 user-defined magics wouldn't be found by @magic if they were
4238 defined as class methods. Also cleaned up the namespace search
4239 defined as class methods. Also cleaned up the namespace search
4239 logic and the string building (to use %s instead of many repeated
4240 logic and the string building (to use %s instead of many repeated
4240 string adds).
4241 string adds).
4241
4242
4242 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4243 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4243 of user-defined magics to operate with class methods (cleaner, in
4244 of user-defined magics to operate with class methods (cleaner, in
4244 line with the gnuplot code).
4245 line with the gnuplot code).
4245
4246
4246 2002-04-22 Fernando Perez <fperez@colorado.edu>
4247 2002-04-22 Fernando Perez <fperez@colorado.edu>
4247
4248
4248 * setup.py: updated dependency list so that manual is updated when
4249 * setup.py: updated dependency list so that manual is updated when
4249 all included files change.
4250 all included files change.
4250
4251
4251 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4252 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4252 the delimiter removal option (the fix is ugly right now).
4253 the delimiter removal option (the fix is ugly right now).
4253
4254
4254 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4255 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4255 all of the math profile (quicker loading, no conflict between
4256 all of the math profile (quicker loading, no conflict between
4256 g-9.8 and g-gnuplot).
4257 g-9.8 and g-gnuplot).
4257
4258
4258 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4259 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4259 name of post-mortem files to IPython_crash_report.txt.
4260 name of post-mortem files to IPython_crash_report.txt.
4260
4261
4261 * Cleanup/update of the docs. Added all the new readline info and
4262 * Cleanup/update of the docs. Added all the new readline info and
4262 formatted all lists as 'real lists'.
4263 formatted all lists as 'real lists'.
4263
4264
4264 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4265 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4265 tab-completion options, since the full readline parse_and_bind is
4266 tab-completion options, since the full readline parse_and_bind is
4266 now accessible.
4267 now accessible.
4267
4268
4268 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4269 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4269 handling of readline options. Now users can specify any string to
4270 handling of readline options. Now users can specify any string to
4270 be passed to parse_and_bind(), as well as the delimiters to be
4271 be passed to parse_and_bind(), as well as the delimiters to be
4271 removed.
4272 removed.
4272 (InteractiveShell.__init__): Added __name__ to the global
4273 (InteractiveShell.__init__): Added __name__ to the global
4273 namespace so that things like Itpl which rely on its existence
4274 namespace so that things like Itpl which rely on its existence
4274 don't crash.
4275 don't crash.
4275 (InteractiveShell._prefilter): Defined the default with a _ so
4276 (InteractiveShell._prefilter): Defined the default with a _ so
4276 that prefilter() is easier to override, while the default one
4277 that prefilter() is easier to override, while the default one
4277 remains available.
4278 remains available.
4278
4279
4279 2002-04-18 Fernando Perez <fperez@colorado.edu>
4280 2002-04-18 Fernando Perez <fperez@colorado.edu>
4280
4281
4281 * Added information about pdb in the docs.
4282 * Added information about pdb in the docs.
4282
4283
4283 2002-04-17 Fernando Perez <fperez@colorado.edu>
4284 2002-04-17 Fernando Perez <fperez@colorado.edu>
4284
4285
4285 * IPython/ipmaker.py (make_IPython): added rc_override option to
4286 * IPython/ipmaker.py (make_IPython): added rc_override option to
4286 allow passing config options at creation time which may override
4287 allow passing config options at creation time which may override
4287 anything set in the config files or command line. This is
4288 anything set in the config files or command line. This is
4288 particularly useful for configuring embedded instances.
4289 particularly useful for configuring embedded instances.
4289
4290
4290 2002-04-15 Fernando Perez <fperez@colorado.edu>
4291 2002-04-15 Fernando Perez <fperez@colorado.edu>
4291
4292
4292 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4293 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4293 crash embedded instances because of the input cache falling out of
4294 crash embedded instances because of the input cache falling out of
4294 sync with the output counter.
4295 sync with the output counter.
4295
4296
4296 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4297 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4297 mode which calls pdb after an uncaught exception in IPython itself.
4298 mode which calls pdb after an uncaught exception in IPython itself.
4298
4299
4299 2002-04-14 Fernando Perez <fperez@colorado.edu>
4300 2002-04-14 Fernando Perez <fperez@colorado.edu>
4300
4301
4301 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4302 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4302 readline, fix it back after each call.
4303 readline, fix it back after each call.
4303
4304
4304 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4305 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4305 method to force all access via __call__(), which guarantees that
4306 method to force all access via __call__(), which guarantees that
4306 traceback references are properly deleted.
4307 traceback references are properly deleted.
4307
4308
4308 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4309 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4309 improve printing when pprint is in use.
4310 improve printing when pprint is in use.
4310
4311
4311 2002-04-13 Fernando Perez <fperez@colorado.edu>
4312 2002-04-13 Fernando Perez <fperez@colorado.edu>
4312
4313
4313 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4314 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4314 exceptions aren't caught anymore. If the user triggers one, he
4315 exceptions aren't caught anymore. If the user triggers one, he
4315 should know why he's doing it and it should go all the way up,
4316 should know why he's doing it and it should go all the way up,
4316 just like any other exception. So now @abort will fully kill the
4317 just like any other exception. So now @abort will fully kill the
4317 embedded interpreter and the embedding code (unless that happens
4318 embedded interpreter and the embedding code (unless that happens
4318 to catch SystemExit).
4319 to catch SystemExit).
4319
4320
4320 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4321 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4321 and a debugger() method to invoke the interactive pdb debugger
4322 and a debugger() method to invoke the interactive pdb debugger
4322 after printing exception information. Also added the corresponding
4323 after printing exception information. Also added the corresponding
4323 -pdb option and @pdb magic to control this feature, and updated
4324 -pdb option and @pdb magic to control this feature, and updated
4324 the docs. After a suggestion from Christopher Hart
4325 the docs. After a suggestion from Christopher Hart
4325 (hart-AT-caltech.edu).
4326 (hart-AT-caltech.edu).
4326
4327
4327 2002-04-12 Fernando Perez <fperez@colorado.edu>
4328 2002-04-12 Fernando Perez <fperez@colorado.edu>
4328
4329
4329 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4330 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4330 the exception handlers defined by the user (not the CrashHandler)
4331 the exception handlers defined by the user (not the CrashHandler)
4331 so that user exceptions don't trigger an ipython bug report.
4332 so that user exceptions don't trigger an ipython bug report.
4332
4333
4333 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4334 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4334 configurable (it should have always been so).
4335 configurable (it should have always been so).
4335
4336
4336 2002-03-26 Fernando Perez <fperez@colorado.edu>
4337 2002-03-26 Fernando Perez <fperez@colorado.edu>
4337
4338
4338 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4339 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4339 and there to fix embedding namespace issues. This should all be
4340 and there to fix embedding namespace issues. This should all be
4340 done in a more elegant way.
4341 done in a more elegant way.
4341
4342
4342 2002-03-25 Fernando Perez <fperez@colorado.edu>
4343 2002-03-25 Fernando Perez <fperez@colorado.edu>
4343
4344
4344 * IPython/genutils.py (get_home_dir): Try to make it work under
4345 * IPython/genutils.py (get_home_dir): Try to make it work under
4345 win9x also.
4346 win9x also.
4346
4347
4347 2002-03-20 Fernando Perez <fperez@colorado.edu>
4348 2002-03-20 Fernando Perez <fperez@colorado.edu>
4348
4349
4349 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4350 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4350 sys.displayhook untouched upon __init__.
4351 sys.displayhook untouched upon __init__.
4351
4352
4352 2002-03-19 Fernando Perez <fperez@colorado.edu>
4353 2002-03-19 Fernando Perez <fperez@colorado.edu>
4353
4354
4354 * Released 0.2.9 (for embedding bug, basically).
4355 * Released 0.2.9 (for embedding bug, basically).
4355
4356
4356 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4357 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4357 exceptions so that enclosing shell's state can be restored.
4358 exceptions so that enclosing shell's state can be restored.
4358
4359
4359 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4360 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4360 naming conventions in the .ipython/ dir.
4361 naming conventions in the .ipython/ dir.
4361
4362
4362 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4363 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4363 from delimiters list so filenames with - in them get expanded.
4364 from delimiters list so filenames with - in them get expanded.
4364
4365
4365 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4366 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4366 sys.displayhook not being properly restored after an embedded call.
4367 sys.displayhook not being properly restored after an embedded call.
4367
4368
4368 2002-03-18 Fernando Perez <fperez@colorado.edu>
4369 2002-03-18 Fernando Perez <fperez@colorado.edu>
4369
4370
4370 * Released 0.2.8
4371 * Released 0.2.8
4371
4372
4372 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4373 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4373 some files weren't being included in a -upgrade.
4374 some files weren't being included in a -upgrade.
4374 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4375 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4375 on' so that the first tab completes.
4376 on' so that the first tab completes.
4376 (InteractiveShell.handle_magic): fixed bug with spaces around
4377 (InteractiveShell.handle_magic): fixed bug with spaces around
4377 quotes breaking many magic commands.
4378 quotes breaking many magic commands.
4378
4379
4379 * setup.py: added note about ignoring the syntax error messages at
4380 * setup.py: added note about ignoring the syntax error messages at
4380 installation.
4381 installation.
4381
4382
4382 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4383 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4383 streamlining the gnuplot interface, now there's only one magic @gp.
4384 streamlining the gnuplot interface, now there's only one magic @gp.
4384
4385
4385 2002-03-17 Fernando Perez <fperez@colorado.edu>
4386 2002-03-17 Fernando Perez <fperez@colorado.edu>
4386
4387
4387 * IPython/UserConfig/magic_gnuplot.py: new name for the
4388 * IPython/UserConfig/magic_gnuplot.py: new name for the
4388 example-magic_pm.py file. Much enhanced system, now with a shell
4389 example-magic_pm.py file. Much enhanced system, now with a shell
4389 for communicating directly with gnuplot, one command at a time.
4390 for communicating directly with gnuplot, one command at a time.
4390
4391
4391 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4392 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4392 setting __name__=='__main__'.
4393 setting __name__=='__main__'.
4393
4394
4394 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4395 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4395 mini-shell for accessing gnuplot from inside ipython. Should
4396 mini-shell for accessing gnuplot from inside ipython. Should
4396 extend it later for grace access too. Inspired by Arnd's
4397 extend it later for grace access too. Inspired by Arnd's
4397 suggestion.
4398 suggestion.
4398
4399
4399 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4400 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4400 calling magic functions with () in their arguments. Thanks to Arnd
4401 calling magic functions with () in their arguments. Thanks to Arnd
4401 Baecker for pointing this to me.
4402 Baecker for pointing this to me.
4402
4403
4403 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4404 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4404 infinitely for integer or complex arrays (only worked with floats).
4405 infinitely for integer or complex arrays (only worked with floats).
4405
4406
4406 2002-03-16 Fernando Perez <fperez@colorado.edu>
4407 2002-03-16 Fernando Perez <fperez@colorado.edu>
4407
4408
4408 * setup.py: Merged setup and setup_windows into a single script
4409 * setup.py: Merged setup and setup_windows into a single script
4409 which properly handles things for windows users.
4410 which properly handles things for windows users.
4410
4411
4411 2002-03-15 Fernando Perez <fperez@colorado.edu>
4412 2002-03-15 Fernando Perez <fperez@colorado.edu>
4412
4413
4413 * Big change to the manual: now the magics are all automatically
4414 * Big change to the manual: now the magics are all automatically
4414 documented. This information is generated from their docstrings
4415 documented. This information is generated from their docstrings
4415 and put in a latex file included by the manual lyx file. This way
4416 and put in a latex file included by the manual lyx file. This way
4416 we get always up to date information for the magics. The manual
4417 we get always up to date information for the magics. The manual
4417 now also has proper version information, also auto-synced.
4418 now also has proper version information, also auto-synced.
4418
4419
4419 For this to work, an undocumented --magic_docstrings option was added.
4420 For this to work, an undocumented --magic_docstrings option was added.
4420
4421
4421 2002-03-13 Fernando Perez <fperez@colorado.edu>
4422 2002-03-13 Fernando Perez <fperez@colorado.edu>
4422
4423
4423 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4424 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4424 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4425 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4425
4426
4426 2002-03-12 Fernando Perez <fperez@colorado.edu>
4427 2002-03-12 Fernando Perez <fperez@colorado.edu>
4427
4428
4428 * IPython/ultraTB.py (TermColors): changed color escapes again to
4429 * IPython/ultraTB.py (TermColors): changed color escapes again to
4429 fix the (old, reintroduced) line-wrapping bug. Basically, if
4430 fix the (old, reintroduced) line-wrapping bug. Basically, if
4430 \001..\002 aren't given in the color escapes, lines get wrapped
4431 \001..\002 aren't given in the color escapes, lines get wrapped
4431 weirdly. But giving those screws up old xterms and emacs terms. So
4432 weirdly. But giving those screws up old xterms and emacs terms. So
4432 I added some logic for emacs terms to be ok, but I can't identify old
4433 I added some logic for emacs terms to be ok, but I can't identify old
4433 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4434 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4434
4435
4435 2002-03-10 Fernando Perez <fperez@colorado.edu>
4436 2002-03-10 Fernando Perez <fperez@colorado.edu>
4436
4437
4437 * IPython/usage.py (__doc__): Various documentation cleanups and
4438 * IPython/usage.py (__doc__): Various documentation cleanups and
4438 updates, both in usage docstrings and in the manual.
4439 updates, both in usage docstrings and in the manual.
4439
4440
4440 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4441 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4441 handling of caching. Set minimum acceptabe value for having a
4442 handling of caching. Set minimum acceptabe value for having a
4442 cache at 20 values.
4443 cache at 20 values.
4443
4444
4444 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4445 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4445 install_first_time function to a method, renamed it and added an
4446 install_first_time function to a method, renamed it and added an
4446 'upgrade' mode. Now people can update their config directory with
4447 'upgrade' mode. Now people can update their config directory with
4447 a simple command line switch (-upgrade, also new).
4448 a simple command line switch (-upgrade, also new).
4448
4449
4449 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4450 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4450 @file (convenient for automagic users under Python >= 2.2).
4451 @file (convenient for automagic users under Python >= 2.2).
4451 Removed @files (it seemed more like a plural than an abbrev. of
4452 Removed @files (it seemed more like a plural than an abbrev. of
4452 'file show').
4453 'file show').
4453
4454
4454 * IPython/iplib.py (install_first_time): Fixed crash if there were
4455 * IPython/iplib.py (install_first_time): Fixed crash if there were
4455 backup files ('~') in .ipython/ install directory.
4456 backup files ('~') in .ipython/ install directory.
4456
4457
4457 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4458 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4458 system. Things look fine, but these changes are fairly
4459 system. Things look fine, but these changes are fairly
4459 intrusive. Test them for a few days.
4460 intrusive. Test them for a few days.
4460
4461
4461 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4462 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4462 the prompts system. Now all in/out prompt strings are user
4463 the prompts system. Now all in/out prompt strings are user
4463 controllable. This is particularly useful for embedding, as one
4464 controllable. This is particularly useful for embedding, as one
4464 can tag embedded instances with particular prompts.
4465 can tag embedded instances with particular prompts.
4465
4466
4466 Also removed global use of sys.ps1/2, which now allows nested
4467 Also removed global use of sys.ps1/2, which now allows nested
4467 embeddings without any problems. Added command-line options for
4468 embeddings without any problems. Added command-line options for
4468 the prompt strings.
4469 the prompt strings.
4469
4470
4470 2002-03-08 Fernando Perez <fperez@colorado.edu>
4471 2002-03-08 Fernando Perez <fperez@colorado.edu>
4471
4472
4472 * IPython/UserConfig/example-embed-short.py (ipshell): added
4473 * IPython/UserConfig/example-embed-short.py (ipshell): added
4473 example file with the bare minimum code for embedding.
4474 example file with the bare minimum code for embedding.
4474
4475
4475 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4476 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4476 functionality for the embeddable shell to be activated/deactivated
4477 functionality for the embeddable shell to be activated/deactivated
4477 either globally or at each call.
4478 either globally or at each call.
4478
4479
4479 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4480 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4480 rewriting the prompt with '--->' for auto-inputs with proper
4481 rewriting the prompt with '--->' for auto-inputs with proper
4481 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4482 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4482 this is handled by the prompts class itself, as it should.
4483 this is handled by the prompts class itself, as it should.
4483
4484
4484 2002-03-05 Fernando Perez <fperez@colorado.edu>
4485 2002-03-05 Fernando Perez <fperez@colorado.edu>
4485
4486
4486 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4487 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4487 @logstart to avoid name clashes with the math log function.
4488 @logstart to avoid name clashes with the math log function.
4488
4489
4489 * Big updates to X/Emacs section of the manual.
4490 * Big updates to X/Emacs section of the manual.
4490
4491
4491 * Removed ipython_emacs. Milan explained to me how to pass
4492 * Removed ipython_emacs. Milan explained to me how to pass
4492 arguments to ipython through Emacs. Some day I'm going to end up
4493 arguments to ipython through Emacs. Some day I'm going to end up
4493 learning some lisp...
4494 learning some lisp...
4494
4495
4495 2002-03-04 Fernando Perez <fperez@colorado.edu>
4496 2002-03-04 Fernando Perez <fperez@colorado.edu>
4496
4497
4497 * IPython/ipython_emacs: Created script to be used as the
4498 * IPython/ipython_emacs: Created script to be used as the
4498 py-python-command Emacs variable so we can pass IPython
4499 py-python-command Emacs variable so we can pass IPython
4499 parameters. I can't figure out how to tell Emacs directly to pass
4500 parameters. I can't figure out how to tell Emacs directly to pass
4500 parameters to IPython, so a dummy shell script will do it.
4501 parameters to IPython, so a dummy shell script will do it.
4501
4502
4502 Other enhancements made for things to work better under Emacs'
4503 Other enhancements made for things to work better under Emacs'
4503 various types of terminals. Many thanks to Milan Zamazal
4504 various types of terminals. Many thanks to Milan Zamazal
4504 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4505 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4505
4506
4506 2002-03-01 Fernando Perez <fperez@colorado.edu>
4507 2002-03-01 Fernando Perez <fperez@colorado.edu>
4507
4508
4508 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4509 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4509 that loading of readline is now optional. This gives better
4510 that loading of readline is now optional. This gives better
4510 control to emacs users.
4511 control to emacs users.
4511
4512
4512 * IPython/ultraTB.py (__date__): Modified color escape sequences
4513 * IPython/ultraTB.py (__date__): Modified color escape sequences
4513 and now things work fine under xterm and in Emacs' term buffers
4514 and now things work fine under xterm and in Emacs' term buffers
4514 (though not shell ones). Well, in emacs you get colors, but all
4515 (though not shell ones). Well, in emacs you get colors, but all
4515 seem to be 'light' colors (no difference between dark and light
4516 seem to be 'light' colors (no difference between dark and light
4516 ones). But the garbage chars are gone, and also in xterms. It
4517 ones). But the garbage chars are gone, and also in xterms. It
4517 seems that now I'm using 'cleaner' ansi sequences.
4518 seems that now I'm using 'cleaner' ansi sequences.
4518
4519
4519 2002-02-21 Fernando Perez <fperez@colorado.edu>
4520 2002-02-21 Fernando Perez <fperez@colorado.edu>
4520
4521
4521 * Released 0.2.7 (mainly to publish the scoping fix).
4522 * Released 0.2.7 (mainly to publish the scoping fix).
4522
4523
4523 * IPython/Logger.py (Logger.logstate): added. A corresponding
4524 * IPython/Logger.py (Logger.logstate): added. A corresponding
4524 @logstate magic was created.
4525 @logstate magic was created.
4525
4526
4526 * IPython/Magic.py: fixed nested scoping problem under Python
4527 * IPython/Magic.py: fixed nested scoping problem under Python
4527 2.1.x (automagic wasn't working).
4528 2.1.x (automagic wasn't working).
4528
4529
4529 2002-02-20 Fernando Perez <fperez@colorado.edu>
4530 2002-02-20 Fernando Perez <fperez@colorado.edu>
4530
4531
4531 * Released 0.2.6.
4532 * Released 0.2.6.
4532
4533
4533 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4534 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4534 option so that logs can come out without any headers at all.
4535 option so that logs can come out without any headers at all.
4535
4536
4536 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4537 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4537 SciPy.
4538 SciPy.
4538
4539
4539 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4540 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4540 that embedded IPython calls don't require vars() to be explicitly
4541 that embedded IPython calls don't require vars() to be explicitly
4541 passed. Now they are extracted from the caller's frame (code
4542 passed. Now they are extracted from the caller's frame (code
4542 snatched from Eric Jones' weave). Added better documentation to
4543 snatched from Eric Jones' weave). Added better documentation to
4543 the section on embedding and the example file.
4544 the section on embedding and the example file.
4544
4545
4545 * IPython/genutils.py (page): Changed so that under emacs, it just
4546 * IPython/genutils.py (page): Changed so that under emacs, it just
4546 prints the string. You can then page up and down in the emacs
4547 prints the string. You can then page up and down in the emacs
4547 buffer itself. This is how the builtin help() works.
4548 buffer itself. This is how the builtin help() works.
4548
4549
4549 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4550 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4550 macro scoping: macros need to be executed in the user's namespace
4551 macro scoping: macros need to be executed in the user's namespace
4551 to work as if they had been typed by the user.
4552 to work as if they had been typed by the user.
4552
4553
4553 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4554 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4554 execute automatically (no need to type 'exec...'). They then
4555 execute automatically (no need to type 'exec...'). They then
4555 behave like 'true macros'. The printing system was also modified
4556 behave like 'true macros'. The printing system was also modified
4556 for this to work.
4557 for this to work.
4557
4558
4558 2002-02-19 Fernando Perez <fperez@colorado.edu>
4559 2002-02-19 Fernando Perez <fperez@colorado.edu>
4559
4560
4560 * IPython/genutils.py (page_file): new function for paging files
4561 * IPython/genutils.py (page_file): new function for paging files
4561 in an OS-independent way. Also necessary for file viewing to work
4562 in an OS-independent way. Also necessary for file viewing to work
4562 well inside Emacs buffers.
4563 well inside Emacs buffers.
4563 (page): Added checks for being in an emacs buffer.
4564 (page): Added checks for being in an emacs buffer.
4564 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4565 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4565 same bug in iplib.
4566 same bug in iplib.
4566
4567
4567 2002-02-18 Fernando Perez <fperez@colorado.edu>
4568 2002-02-18 Fernando Perez <fperez@colorado.edu>
4568
4569
4569 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4570 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4570 of readline so that IPython can work inside an Emacs buffer.
4571 of readline so that IPython can work inside an Emacs buffer.
4571
4572
4572 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4573 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4573 method signatures (they weren't really bugs, but it looks cleaner
4574 method signatures (they weren't really bugs, but it looks cleaner
4574 and keeps PyChecker happy).
4575 and keeps PyChecker happy).
4575
4576
4576 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4577 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4577 for implementing various user-defined hooks. Currently only
4578 for implementing various user-defined hooks. Currently only
4578 display is done.
4579 display is done.
4579
4580
4580 * IPython/Prompts.py (CachedOutput._display): changed display
4581 * IPython/Prompts.py (CachedOutput._display): changed display
4581 functions so that they can be dynamically changed by users easily.
4582 functions so that they can be dynamically changed by users easily.
4582
4583
4583 * IPython/Extensions/numeric_formats.py (num_display): added an
4584 * IPython/Extensions/numeric_formats.py (num_display): added an
4584 extension for printing NumPy arrays in flexible manners. It
4585 extension for printing NumPy arrays in flexible manners. It
4585 doesn't do anything yet, but all the structure is in
4586 doesn't do anything yet, but all the structure is in
4586 place. Ultimately the plan is to implement output format control
4587 place. Ultimately the plan is to implement output format control
4587 like in Octave.
4588 like in Octave.
4588
4589
4589 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4590 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4590 methods are found at run-time by all the automatic machinery.
4591 methods are found at run-time by all the automatic machinery.
4591
4592
4592 2002-02-17 Fernando Perez <fperez@colorado.edu>
4593 2002-02-17 Fernando Perez <fperez@colorado.edu>
4593
4594
4594 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4595 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4595 whole file a little.
4596 whole file a little.
4596
4597
4597 * ToDo: closed this document. Now there's a new_design.lyx
4598 * ToDo: closed this document. Now there's a new_design.lyx
4598 document for all new ideas. Added making a pdf of it for the
4599 document for all new ideas. Added making a pdf of it for the
4599 end-user distro.
4600 end-user distro.
4600
4601
4601 * IPython/Logger.py (Logger.switch_log): Created this to replace
4602 * IPython/Logger.py (Logger.switch_log): Created this to replace
4602 logon() and logoff(). It also fixes a nasty crash reported by
4603 logon() and logoff(). It also fixes a nasty crash reported by
4603 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4604 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4604
4605
4605 * IPython/iplib.py (complete): got auto-completion to work with
4606 * IPython/iplib.py (complete): got auto-completion to work with
4606 automagic (I had wanted this for a long time).
4607 automagic (I had wanted this for a long time).
4607
4608
4608 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4609 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4609 to @file, since file() is now a builtin and clashes with automagic
4610 to @file, since file() is now a builtin and clashes with automagic
4610 for @file.
4611 for @file.
4611
4612
4612 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4613 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4613 of this was previously in iplib, which had grown to more than 2000
4614 of this was previously in iplib, which had grown to more than 2000
4614 lines, way too long. No new functionality, but it makes managing
4615 lines, way too long. No new functionality, but it makes managing
4615 the code a bit easier.
4616 the code a bit easier.
4616
4617
4617 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4618 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4618 information to crash reports.
4619 information to crash reports.
4619
4620
4620 2002-02-12 Fernando Perez <fperez@colorado.edu>
4621 2002-02-12 Fernando Perez <fperez@colorado.edu>
4621
4622
4622 * Released 0.2.5.
4623 * Released 0.2.5.
4623
4624
4624 2002-02-11 Fernando Perez <fperez@colorado.edu>
4625 2002-02-11 Fernando Perez <fperez@colorado.edu>
4625
4626
4626 * Wrote a relatively complete Windows installer. It puts
4627 * Wrote a relatively complete Windows installer. It puts
4627 everything in place, creates Start Menu entries and fixes the
4628 everything in place, creates Start Menu entries and fixes the
4628 color issues. Nothing fancy, but it works.
4629 color issues. Nothing fancy, but it works.
4629
4630
4630 2002-02-10 Fernando Perez <fperez@colorado.edu>
4631 2002-02-10 Fernando Perez <fperez@colorado.edu>
4631
4632
4632 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4633 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4633 os.path.expanduser() call so that we can type @run ~/myfile.py and
4634 os.path.expanduser() call so that we can type @run ~/myfile.py and
4634 have thigs work as expected.
4635 have thigs work as expected.
4635
4636
4636 * IPython/genutils.py (page): fixed exception handling so things
4637 * IPython/genutils.py (page): fixed exception handling so things
4637 work both in Unix and Windows correctly. Quitting a pager triggers
4638 work both in Unix and Windows correctly. Quitting a pager triggers
4638 an IOError/broken pipe in Unix, and in windows not finding a pager
4639 an IOError/broken pipe in Unix, and in windows not finding a pager
4639 is also an IOError, so I had to actually look at the return value
4640 is also an IOError, so I had to actually look at the return value
4640 of the exception, not just the exception itself. Should be ok now.
4641 of the exception, not just the exception itself. Should be ok now.
4641
4642
4642 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4643 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4643 modified to allow case-insensitive color scheme changes.
4644 modified to allow case-insensitive color scheme changes.
4644
4645
4645 2002-02-09 Fernando Perez <fperez@colorado.edu>
4646 2002-02-09 Fernando Perez <fperez@colorado.edu>
4646
4647
4647 * IPython/genutils.py (native_line_ends): new function to leave
4648 * IPython/genutils.py (native_line_ends): new function to leave
4648 user config files with os-native line-endings.
4649 user config files with os-native line-endings.
4649
4650
4650 * README and manual updates.
4651 * README and manual updates.
4651
4652
4652 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4653 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4653 instead of StringType to catch Unicode strings.
4654 instead of StringType to catch Unicode strings.
4654
4655
4655 * IPython/genutils.py (filefind): fixed bug for paths with
4656 * IPython/genutils.py (filefind): fixed bug for paths with
4656 embedded spaces (very common in Windows).
4657 embedded spaces (very common in Windows).
4657
4658
4658 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4659 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4659 files under Windows, so that they get automatically associated
4660 files under Windows, so that they get automatically associated
4660 with a text editor. Windows makes it a pain to handle
4661 with a text editor. Windows makes it a pain to handle
4661 extension-less files.
4662 extension-less files.
4662
4663
4663 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4664 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4664 warning about readline only occur for Posix. In Windows there's no
4665 warning about readline only occur for Posix. In Windows there's no
4665 way to get readline, so why bother with the warning.
4666 way to get readline, so why bother with the warning.
4666
4667
4667 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4668 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4668 for __str__ instead of dir(self), since dir() changed in 2.2.
4669 for __str__ instead of dir(self), since dir() changed in 2.2.
4669
4670
4670 * Ported to Windows! Tested on XP, I suspect it should work fine
4671 * Ported to Windows! Tested on XP, I suspect it should work fine
4671 on NT/2000, but I don't think it will work on 98 et al. That
4672 on NT/2000, but I don't think it will work on 98 et al. That
4672 series of Windows is such a piece of junk anyway that I won't try
4673 series of Windows is such a piece of junk anyway that I won't try
4673 porting it there. The XP port was straightforward, showed a few
4674 porting it there. The XP port was straightforward, showed a few
4674 bugs here and there (fixed all), in particular some string
4675 bugs here and there (fixed all), in particular some string
4675 handling stuff which required considering Unicode strings (which
4676 handling stuff which required considering Unicode strings (which
4676 Windows uses). This is good, but hasn't been too tested :) No
4677 Windows uses). This is good, but hasn't been too tested :) No
4677 fancy installer yet, I'll put a note in the manual so people at
4678 fancy installer yet, I'll put a note in the manual so people at
4678 least make manually a shortcut.
4679 least make manually a shortcut.
4679
4680
4680 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4681 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4681 into a single one, "colors". This now controls both prompt and
4682 into a single one, "colors". This now controls both prompt and
4682 exception color schemes, and can be changed both at startup
4683 exception color schemes, and can be changed both at startup
4683 (either via command-line switches or via ipythonrc files) and at
4684 (either via command-line switches or via ipythonrc files) and at
4684 runtime, with @colors.
4685 runtime, with @colors.
4685 (Magic.magic_run): renamed @prun to @run and removed the old
4686 (Magic.magic_run): renamed @prun to @run and removed the old
4686 @run. The two were too similar to warrant keeping both.
4687 @run. The two were too similar to warrant keeping both.
4687
4688
4688 2002-02-03 Fernando Perez <fperez@colorado.edu>
4689 2002-02-03 Fernando Perez <fperez@colorado.edu>
4689
4690
4690 * IPython/iplib.py (install_first_time): Added comment on how to
4691 * IPython/iplib.py (install_first_time): Added comment on how to
4691 configure the color options for first-time users. Put a <return>
4692 configure the color options for first-time users. Put a <return>
4692 request at the end so that small-terminal users get a chance to
4693 request at the end so that small-terminal users get a chance to
4693 read the startup info.
4694 read the startup info.
4694
4695
4695 2002-01-23 Fernando Perez <fperez@colorado.edu>
4696 2002-01-23 Fernando Perez <fperez@colorado.edu>
4696
4697
4697 * IPython/iplib.py (CachedOutput.update): Changed output memory
4698 * IPython/iplib.py (CachedOutput.update): Changed output memory
4698 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4699 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4699 input history we still use _i. Did this b/c these variable are
4700 input history we still use _i. Did this b/c these variable are
4700 very commonly used in interactive work, so the less we need to
4701 very commonly used in interactive work, so the less we need to
4701 type the better off we are.
4702 type the better off we are.
4702 (Magic.magic_prun): updated @prun to better handle the namespaces
4703 (Magic.magic_prun): updated @prun to better handle the namespaces
4703 the file will run in, including a fix for __name__ not being set
4704 the file will run in, including a fix for __name__ not being set
4704 before.
4705 before.
4705
4706
4706 2002-01-20 Fernando Perez <fperez@colorado.edu>
4707 2002-01-20 Fernando Perez <fperez@colorado.edu>
4707
4708
4708 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4709 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4709 extra garbage for Python 2.2. Need to look more carefully into
4710 extra garbage for Python 2.2. Need to look more carefully into
4710 this later.
4711 this later.
4711
4712
4712 2002-01-19 Fernando Perez <fperez@colorado.edu>
4713 2002-01-19 Fernando Perez <fperez@colorado.edu>
4713
4714
4714 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4715 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4715 display SyntaxError exceptions properly formatted when they occur
4716 display SyntaxError exceptions properly formatted when they occur
4716 (they can be triggered by imported code).
4717 (they can be triggered by imported code).
4717
4718
4718 2002-01-18 Fernando Perez <fperez@colorado.edu>
4719 2002-01-18 Fernando Perez <fperez@colorado.edu>
4719
4720
4720 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4721 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4721 SyntaxError exceptions are reported nicely formatted, instead of
4722 SyntaxError exceptions are reported nicely formatted, instead of
4722 spitting out only offset information as before.
4723 spitting out only offset information as before.
4723 (Magic.magic_prun): Added the @prun function for executing
4724 (Magic.magic_prun): Added the @prun function for executing
4724 programs with command line args inside IPython.
4725 programs with command line args inside IPython.
4725
4726
4726 2002-01-16 Fernando Perez <fperez@colorado.edu>
4727 2002-01-16 Fernando Perez <fperez@colorado.edu>
4727
4728
4728 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4729 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4729 to *not* include the last item given in a range. This brings their
4730 to *not* include the last item given in a range. This brings their
4730 behavior in line with Python's slicing:
4731 behavior in line with Python's slicing:
4731 a[n1:n2] -> a[n1]...a[n2-1]
4732 a[n1:n2] -> a[n1]...a[n2-1]
4732 It may be a bit less convenient, but I prefer to stick to Python's
4733 It may be a bit less convenient, but I prefer to stick to Python's
4733 conventions *everywhere*, so users never have to wonder.
4734 conventions *everywhere*, so users never have to wonder.
4734 (Magic.magic_macro): Added @macro function to ease the creation of
4735 (Magic.magic_macro): Added @macro function to ease the creation of
4735 macros.
4736 macros.
4736
4737
4737 2002-01-05 Fernando Perez <fperez@colorado.edu>
4738 2002-01-05 Fernando Perez <fperez@colorado.edu>
4738
4739
4739 * Released 0.2.4.
4740 * Released 0.2.4.
4740
4741
4741 * IPython/iplib.py (Magic.magic_pdef):
4742 * IPython/iplib.py (Magic.magic_pdef):
4742 (InteractiveShell.safe_execfile): report magic lines and error
4743 (InteractiveShell.safe_execfile): report magic lines and error
4743 lines without line numbers so one can easily copy/paste them for
4744 lines without line numbers so one can easily copy/paste them for
4744 re-execution.
4745 re-execution.
4745
4746
4746 * Updated manual with recent changes.
4747 * Updated manual with recent changes.
4747
4748
4748 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4749 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4749 docstring printing when class? is called. Very handy for knowing
4750 docstring printing when class? is called. Very handy for knowing
4750 how to create class instances (as long as __init__ is well
4751 how to create class instances (as long as __init__ is well
4751 documented, of course :)
4752 documented, of course :)
4752 (Magic.magic_doc): print both class and constructor docstrings.
4753 (Magic.magic_doc): print both class and constructor docstrings.
4753 (Magic.magic_pdef): give constructor info if passed a class and
4754 (Magic.magic_pdef): give constructor info if passed a class and
4754 __call__ info for callable object instances.
4755 __call__ info for callable object instances.
4755
4756
4756 2002-01-04 Fernando Perez <fperez@colorado.edu>
4757 2002-01-04 Fernando Perez <fperez@colorado.edu>
4757
4758
4758 * Made deep_reload() off by default. It doesn't always work
4759 * Made deep_reload() off by default. It doesn't always work
4759 exactly as intended, so it's probably safer to have it off. It's
4760 exactly as intended, so it's probably safer to have it off. It's
4760 still available as dreload() anyway, so nothing is lost.
4761 still available as dreload() anyway, so nothing is lost.
4761
4762
4762 2002-01-02 Fernando Perez <fperez@colorado.edu>
4763 2002-01-02 Fernando Perez <fperez@colorado.edu>
4763
4764
4764 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4765 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4765 so I wanted an updated release).
4766 so I wanted an updated release).
4766
4767
4767 2001-12-27 Fernando Perez <fperez@colorado.edu>
4768 2001-12-27 Fernando Perez <fperez@colorado.edu>
4768
4769
4769 * IPython/iplib.py (InteractiveShell.interact): Added the original
4770 * IPython/iplib.py (InteractiveShell.interact): Added the original
4770 code from 'code.py' for this module in order to change the
4771 code from 'code.py' for this module in order to change the
4771 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4772 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4772 the history cache would break when the user hit Ctrl-C, and
4773 the history cache would break when the user hit Ctrl-C, and
4773 interact() offers no way to add any hooks to it.
4774 interact() offers no way to add any hooks to it.
4774
4775
4775 2001-12-23 Fernando Perez <fperez@colorado.edu>
4776 2001-12-23 Fernando Perez <fperez@colorado.edu>
4776
4777
4777 * setup.py: added check for 'MANIFEST' before trying to remove
4778 * setup.py: added check for 'MANIFEST' before trying to remove
4778 it. Thanks to Sean Reifschneider.
4779 it. Thanks to Sean Reifschneider.
4779
4780
4780 2001-12-22 Fernando Perez <fperez@colorado.edu>
4781 2001-12-22 Fernando Perez <fperez@colorado.edu>
4781
4782
4782 * Released 0.2.2.
4783 * Released 0.2.2.
4783
4784
4784 * Finished (reasonably) writing the manual. Later will add the
4785 * Finished (reasonably) writing the manual. Later will add the
4785 python-standard navigation stylesheets, but for the time being
4786 python-standard navigation stylesheets, but for the time being
4786 it's fairly complete. Distribution will include html and pdf
4787 it's fairly complete. Distribution will include html and pdf
4787 versions.
4788 versions.
4788
4789
4789 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4790 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4790 (MayaVi author).
4791 (MayaVi author).
4791
4792
4792 2001-12-21 Fernando Perez <fperez@colorado.edu>
4793 2001-12-21 Fernando Perez <fperez@colorado.edu>
4793
4794
4794 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4795 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4795 good public release, I think (with the manual and the distutils
4796 good public release, I think (with the manual and the distutils
4796 installer). The manual can use some work, but that can go
4797 installer). The manual can use some work, but that can go
4797 slowly. Otherwise I think it's quite nice for end users. Next
4798 slowly. Otherwise I think it's quite nice for end users. Next
4798 summer, rewrite the guts of it...
4799 summer, rewrite the guts of it...
4799
4800
4800 * Changed format of ipythonrc files to use whitespace as the
4801 * Changed format of ipythonrc files to use whitespace as the
4801 separator instead of an explicit '='. Cleaner.
4802 separator instead of an explicit '='. Cleaner.
4802
4803
4803 2001-12-20 Fernando Perez <fperez@colorado.edu>
4804 2001-12-20 Fernando Perez <fperez@colorado.edu>
4804
4805
4805 * Started a manual in LyX. For now it's just a quick merge of the
4806 * Started a manual in LyX. For now it's just a quick merge of the
4806 various internal docstrings and READMEs. Later it may grow into a
4807 various internal docstrings and READMEs. Later it may grow into a
4807 nice, full-blown manual.
4808 nice, full-blown manual.
4808
4809
4809 * Set up a distutils based installer. Installation should now be
4810 * Set up a distutils based installer. Installation should now be
4810 trivially simple for end-users.
4811 trivially simple for end-users.
4811
4812
4812 2001-12-11 Fernando Perez <fperez@colorado.edu>
4813 2001-12-11 Fernando Perez <fperez@colorado.edu>
4813
4814
4814 * Released 0.2.0. First public release, announced it at
4815 * Released 0.2.0. First public release, announced it at
4815 comp.lang.python. From now on, just bugfixes...
4816 comp.lang.python. From now on, just bugfixes...
4816
4817
4817 * Went through all the files, set copyright/license notices and
4818 * Went through all the files, set copyright/license notices and
4818 cleaned up things. Ready for release.
4819 cleaned up things. Ready for release.
4819
4820
4820 2001-12-10 Fernando Perez <fperez@colorado.edu>
4821 2001-12-10 Fernando Perez <fperez@colorado.edu>
4821
4822
4822 * Changed the first-time installer not to use tarfiles. It's more
4823 * Changed the first-time installer not to use tarfiles. It's more
4823 robust now and less unix-dependent. Also makes it easier for
4824 robust now and less unix-dependent. Also makes it easier for
4824 people to later upgrade versions.
4825 people to later upgrade versions.
4825
4826
4826 * Changed @exit to @abort to reflect the fact that it's pretty
4827 * Changed @exit to @abort to reflect the fact that it's pretty
4827 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4828 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4828 becomes significant only when IPyhton is embedded: in that case,
4829 becomes significant only when IPyhton is embedded: in that case,
4829 C-D closes IPython only, but @abort kills the enclosing program
4830 C-D closes IPython only, but @abort kills the enclosing program
4830 too (unless it had called IPython inside a try catching
4831 too (unless it had called IPython inside a try catching
4831 SystemExit).
4832 SystemExit).
4832
4833
4833 * Created Shell module which exposes the actuall IPython Shell
4834 * Created Shell module which exposes the actuall IPython Shell
4834 classes, currently the normal and the embeddable one. This at
4835 classes, currently the normal and the embeddable one. This at
4835 least offers a stable interface we won't need to change when
4836 least offers a stable interface we won't need to change when
4836 (later) the internals are rewritten. That rewrite will be confined
4837 (later) the internals are rewritten. That rewrite will be confined
4837 to iplib and ipmaker, but the Shell interface should remain as is.
4838 to iplib and ipmaker, but the Shell interface should remain as is.
4838
4839
4839 * Added embed module which offers an embeddable IPShell object,
4840 * Added embed module which offers an embeddable IPShell object,
4840 useful to fire up IPython *inside* a running program. Great for
4841 useful to fire up IPython *inside* a running program. Great for
4841 debugging or dynamical data analysis.
4842 debugging or dynamical data analysis.
4842
4843
4843 2001-12-08 Fernando Perez <fperez@colorado.edu>
4844 2001-12-08 Fernando Perez <fperez@colorado.edu>
4844
4845
4845 * Fixed small bug preventing seeing info from methods of defined
4846 * Fixed small bug preventing seeing info from methods of defined
4846 objects (incorrect namespace in _ofind()).
4847 objects (incorrect namespace in _ofind()).
4847
4848
4848 * Documentation cleanup. Moved the main usage docstrings to a
4849 * Documentation cleanup. Moved the main usage docstrings to a
4849 separate file, usage.py (cleaner to maintain, and hopefully in the
4850 separate file, usage.py (cleaner to maintain, and hopefully in the
4850 future some perlpod-like way of producing interactive, man and
4851 future some perlpod-like way of producing interactive, man and
4851 html docs out of it will be found).
4852 html docs out of it will be found).
4852
4853
4853 * Added @profile to see your profile at any time.
4854 * Added @profile to see your profile at any time.
4854
4855
4855 * Added @p as an alias for 'print'. It's especially convenient if
4856 * Added @p as an alias for 'print'. It's especially convenient if
4856 using automagic ('p x' prints x).
4857 using automagic ('p x' prints x).
4857
4858
4858 * Small cleanups and fixes after a pychecker run.
4859 * Small cleanups and fixes after a pychecker run.
4859
4860
4860 * Changed the @cd command to handle @cd - and @cd -<n> for
4861 * Changed the @cd command to handle @cd - and @cd -<n> for
4861 visiting any directory in _dh.
4862 visiting any directory in _dh.
4862
4863
4863 * Introduced _dh, a history of visited directories. @dhist prints
4864 * Introduced _dh, a history of visited directories. @dhist prints
4864 it out with numbers.
4865 it out with numbers.
4865
4866
4866 2001-12-07 Fernando Perez <fperez@colorado.edu>
4867 2001-12-07 Fernando Perez <fperez@colorado.edu>
4867
4868
4868 * Released 0.1.22
4869 * Released 0.1.22
4869
4870
4870 * Made initialization a bit more robust against invalid color
4871 * Made initialization a bit more robust against invalid color
4871 options in user input (exit, not traceback-crash).
4872 options in user input (exit, not traceback-crash).
4872
4873
4873 * Changed the bug crash reporter to write the report only in the
4874 * Changed the bug crash reporter to write the report only in the
4874 user's .ipython directory. That way IPython won't litter people's
4875 user's .ipython directory. That way IPython won't litter people's
4875 hard disks with crash files all over the place. Also print on
4876 hard disks with crash files all over the place. Also print on
4876 screen the necessary mail command.
4877 screen the necessary mail command.
4877
4878
4878 * With the new ultraTB, implemented LightBG color scheme for light
4879 * With the new ultraTB, implemented LightBG color scheme for light
4879 background terminals. A lot of people like white backgrounds, so I
4880 background terminals. A lot of people like white backgrounds, so I
4880 guess we should at least give them something readable.
4881 guess we should at least give them something readable.
4881
4882
4882 2001-12-06 Fernando Perez <fperez@colorado.edu>
4883 2001-12-06 Fernando Perez <fperez@colorado.edu>
4883
4884
4884 * Modified the structure of ultraTB. Now there's a proper class
4885 * Modified the structure of ultraTB. Now there's a proper class
4885 for tables of color schemes which allow adding schemes easily and
4886 for tables of color schemes which allow adding schemes easily and
4886 switching the active scheme without creating a new instance every
4887 switching the active scheme without creating a new instance every
4887 time (which was ridiculous). The syntax for creating new schemes
4888 time (which was ridiculous). The syntax for creating new schemes
4888 is also cleaner. I think ultraTB is finally done, with a clean
4889 is also cleaner. I think ultraTB is finally done, with a clean
4889 class structure. Names are also much cleaner (now there's proper
4890 class structure. Names are also much cleaner (now there's proper
4890 color tables, no need for every variable to also have 'color' in
4891 color tables, no need for every variable to also have 'color' in
4891 its name).
4892 its name).
4892
4893
4893 * Broke down genutils into separate files. Now genutils only
4894 * Broke down genutils into separate files. Now genutils only
4894 contains utility functions, and classes have been moved to their
4895 contains utility functions, and classes have been moved to their
4895 own files (they had enough independent functionality to warrant
4896 own files (they had enough independent functionality to warrant
4896 it): ConfigLoader, OutputTrap, Struct.
4897 it): ConfigLoader, OutputTrap, Struct.
4897
4898
4898 2001-12-05 Fernando Perez <fperez@colorado.edu>
4899 2001-12-05 Fernando Perez <fperez@colorado.edu>
4899
4900
4900 * IPython turns 21! Released version 0.1.21, as a candidate for
4901 * IPython turns 21! Released version 0.1.21, as a candidate for
4901 public consumption. If all goes well, release in a few days.
4902 public consumption. If all goes well, release in a few days.
4902
4903
4903 * Fixed path bug (files in Extensions/ directory wouldn't be found
4904 * Fixed path bug (files in Extensions/ directory wouldn't be found
4904 unless IPython/ was explicitly in sys.path).
4905 unless IPython/ was explicitly in sys.path).
4905
4906
4906 * Extended the FlexCompleter class as MagicCompleter to allow
4907 * Extended the FlexCompleter class as MagicCompleter to allow
4907 completion of @-starting lines.
4908 completion of @-starting lines.
4908
4909
4909 * Created __release__.py file as a central repository for release
4910 * Created __release__.py file as a central repository for release
4910 info that other files can read from.
4911 info that other files can read from.
4911
4912
4912 * Fixed small bug in logging: when logging was turned on in
4913 * Fixed small bug in logging: when logging was turned on in
4913 mid-session, old lines with special meanings (!@?) were being
4914 mid-session, old lines with special meanings (!@?) were being
4914 logged without the prepended comment, which is necessary since
4915 logged without the prepended comment, which is necessary since
4915 they are not truly valid python syntax. This should make session
4916 they are not truly valid python syntax. This should make session
4916 restores produce less errors.
4917 restores produce less errors.
4917
4918
4918 * The namespace cleanup forced me to make a FlexCompleter class
4919 * The namespace cleanup forced me to make a FlexCompleter class
4919 which is nothing but a ripoff of rlcompleter, but with selectable
4920 which is nothing but a ripoff of rlcompleter, but with selectable
4920 namespace (rlcompleter only works in __main__.__dict__). I'll try
4921 namespace (rlcompleter only works in __main__.__dict__). I'll try
4921 to submit a note to the authors to see if this change can be
4922 to submit a note to the authors to see if this change can be
4922 incorporated in future rlcompleter releases (Dec.6: done)
4923 incorporated in future rlcompleter releases (Dec.6: done)
4923
4924
4924 * More fixes to namespace handling. It was a mess! Now all
4925 * More fixes to namespace handling. It was a mess! Now all
4925 explicit references to __main__.__dict__ are gone (except when
4926 explicit references to __main__.__dict__ are gone (except when
4926 really needed) and everything is handled through the namespace
4927 really needed) and everything is handled through the namespace
4927 dicts in the IPython instance. We seem to be getting somewhere
4928 dicts in the IPython instance. We seem to be getting somewhere
4928 with this, finally...
4929 with this, finally...
4929
4930
4930 * Small documentation updates.
4931 * Small documentation updates.
4931
4932
4932 * Created the Extensions directory under IPython (with an
4933 * Created the Extensions directory under IPython (with an
4933 __init__.py). Put the PhysicalQ stuff there. This directory should
4934 __init__.py). Put the PhysicalQ stuff there. This directory should
4934 be used for all special-purpose extensions.
4935 be used for all special-purpose extensions.
4935
4936
4936 * File renaming:
4937 * File renaming:
4937 ipythonlib --> ipmaker
4938 ipythonlib --> ipmaker
4938 ipplib --> iplib
4939 ipplib --> iplib
4939 This makes a bit more sense in terms of what these files actually do.
4940 This makes a bit more sense in terms of what these files actually do.
4940
4941
4941 * Moved all the classes and functions in ipythonlib to ipplib, so
4942 * Moved all the classes and functions in ipythonlib to ipplib, so
4942 now ipythonlib only has make_IPython(). This will ease up its
4943 now ipythonlib only has make_IPython(). This will ease up its
4943 splitting in smaller functional chunks later.
4944 splitting in smaller functional chunks later.
4944
4945
4945 * Cleaned up (done, I think) output of @whos. Better column
4946 * Cleaned up (done, I think) output of @whos. Better column
4946 formatting, and now shows str(var) for as much as it can, which is
4947 formatting, and now shows str(var) for as much as it can, which is
4947 typically what one gets with a 'print var'.
4948 typically what one gets with a 'print var'.
4948
4949
4949 2001-12-04 Fernando Perez <fperez@colorado.edu>
4950 2001-12-04 Fernando Perez <fperez@colorado.edu>
4950
4951
4951 * Fixed namespace problems. Now builtin/IPyhton/user names get
4952 * Fixed namespace problems. Now builtin/IPyhton/user names get
4952 properly reported in their namespace. Internal namespace handling
4953 properly reported in their namespace. Internal namespace handling
4953 is finally getting decent (not perfect yet, but much better than
4954 is finally getting decent (not perfect yet, but much better than
4954 the ad-hoc mess we had).
4955 the ad-hoc mess we had).
4955
4956
4956 * Removed -exit option. If people just want to run a python
4957 * Removed -exit option. If people just want to run a python
4957 script, that's what the normal interpreter is for. Less
4958 script, that's what the normal interpreter is for. Less
4958 unnecessary options, less chances for bugs.
4959 unnecessary options, less chances for bugs.
4959
4960
4960 * Added a crash handler which generates a complete post-mortem if
4961 * Added a crash handler which generates a complete post-mortem if
4961 IPython crashes. This will help a lot in tracking bugs down the
4962 IPython crashes. This will help a lot in tracking bugs down the
4962 road.
4963 road.
4963
4964
4964 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4965 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4965 which were boud to functions being reassigned would bypass the
4966 which were boud to functions being reassigned would bypass the
4966 logger, breaking the sync of _il with the prompt counter. This
4967 logger, breaking the sync of _il with the prompt counter. This
4967 would then crash IPython later when a new line was logged.
4968 would then crash IPython later when a new line was logged.
4968
4969
4969 2001-12-02 Fernando Perez <fperez@colorado.edu>
4970 2001-12-02 Fernando Perez <fperez@colorado.edu>
4970
4971
4971 * Made IPython a package. This means people don't have to clutter
4972 * Made IPython a package. This means people don't have to clutter
4972 their sys.path with yet another directory. Changed the INSTALL
4973 their sys.path with yet another directory. Changed the INSTALL
4973 file accordingly.
4974 file accordingly.
4974
4975
4975 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4976 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4976 sorts its output (so @who shows it sorted) and @whos formats the
4977 sorts its output (so @who shows it sorted) and @whos formats the
4977 table according to the width of the first column. Nicer, easier to
4978 table according to the width of the first column. Nicer, easier to
4978 read. Todo: write a generic table_format() which takes a list of
4979 read. Todo: write a generic table_format() which takes a list of
4979 lists and prints it nicely formatted, with optional row/column
4980 lists and prints it nicely formatted, with optional row/column
4980 separators and proper padding and justification.
4981 separators and proper padding and justification.
4981
4982
4982 * Released 0.1.20
4983 * Released 0.1.20
4983
4984
4984 * Fixed bug in @log which would reverse the inputcache list (a
4985 * Fixed bug in @log which would reverse the inputcache list (a
4985 copy operation was missing).
4986 copy operation was missing).
4986
4987
4987 * Code cleanup. @config was changed to use page(). Better, since
4988 * Code cleanup. @config was changed to use page(). Better, since
4988 its output is always quite long.
4989 its output is always quite long.
4989
4990
4990 * Itpl is back as a dependency. I was having too many problems
4991 * Itpl is back as a dependency. I was having too many problems
4991 getting the parametric aliases to work reliably, and it's just
4992 getting the parametric aliases to work reliably, and it's just
4992 easier to code weird string operations with it than playing %()s
4993 easier to code weird string operations with it than playing %()s
4993 games. It's only ~6k, so I don't think it's too big a deal.
4994 games. It's only ~6k, so I don't think it's too big a deal.
4994
4995
4995 * Found (and fixed) a very nasty bug with history. !lines weren't
4996 * Found (and fixed) a very nasty bug with history. !lines weren't
4996 getting cached, and the out of sync caches would crash
4997 getting cached, and the out of sync caches would crash
4997 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4998 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4998 division of labor a bit better. Bug fixed, cleaner structure.
4999 division of labor a bit better. Bug fixed, cleaner structure.
4999
5000
5000 2001-12-01 Fernando Perez <fperez@colorado.edu>
5001 2001-12-01 Fernando Perez <fperez@colorado.edu>
5001
5002
5002 * Released 0.1.19
5003 * Released 0.1.19
5003
5004
5004 * Added option -n to @hist to prevent line number printing. Much
5005 * Added option -n to @hist to prevent line number printing. Much
5005 easier to copy/paste code this way.
5006 easier to copy/paste code this way.
5006
5007
5007 * Created global _il to hold the input list. Allows easy
5008 * Created global _il to hold the input list. Allows easy
5008 re-execution of blocks of code by slicing it (inspired by Janko's
5009 re-execution of blocks of code by slicing it (inspired by Janko's
5009 comment on 'macros').
5010 comment on 'macros').
5010
5011
5011 * Small fixes and doc updates.
5012 * Small fixes and doc updates.
5012
5013
5013 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5014 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5014 much too fragile with automagic. Handles properly multi-line
5015 much too fragile with automagic. Handles properly multi-line
5015 statements and takes parameters.
5016 statements and takes parameters.
5016
5017
5017 2001-11-30 Fernando Perez <fperez@colorado.edu>
5018 2001-11-30 Fernando Perez <fperez@colorado.edu>
5018
5019
5019 * Version 0.1.18 released.
5020 * Version 0.1.18 released.
5020
5021
5021 * Fixed nasty namespace bug in initial module imports.
5022 * Fixed nasty namespace bug in initial module imports.
5022
5023
5023 * Added copyright/license notes to all code files (except
5024 * Added copyright/license notes to all code files (except
5024 DPyGetOpt). For the time being, LGPL. That could change.
5025 DPyGetOpt). For the time being, LGPL. That could change.
5025
5026
5026 * Rewrote a much nicer README, updated INSTALL, cleaned up
5027 * Rewrote a much nicer README, updated INSTALL, cleaned up
5027 ipythonrc-* samples.
5028 ipythonrc-* samples.
5028
5029
5029 * Overall code/documentation cleanup. Basically ready for
5030 * Overall code/documentation cleanup. Basically ready for
5030 release. Only remaining thing: licence decision (LGPL?).
5031 release. Only remaining thing: licence decision (LGPL?).
5031
5032
5032 * Converted load_config to a class, ConfigLoader. Now recursion
5033 * Converted load_config to a class, ConfigLoader. Now recursion
5033 control is better organized. Doesn't include the same file twice.
5034 control is better organized. Doesn't include the same file twice.
5034
5035
5035 2001-11-29 Fernando Perez <fperez@colorado.edu>
5036 2001-11-29 Fernando Perez <fperez@colorado.edu>
5036
5037
5037 * Got input history working. Changed output history variables from
5038 * Got input history working. Changed output history variables from
5038 _p to _o so that _i is for input and _o for output. Just cleaner
5039 _p to _o so that _i is for input and _o for output. Just cleaner
5039 convention.
5040 convention.
5040
5041
5041 * Implemented parametric aliases. This pretty much allows the
5042 * Implemented parametric aliases. This pretty much allows the
5042 alias system to offer full-blown shell convenience, I think.
5043 alias system to offer full-blown shell convenience, I think.
5043
5044
5044 * Version 0.1.17 released, 0.1.18 opened.
5045 * Version 0.1.17 released, 0.1.18 opened.
5045
5046
5046 * dot_ipython/ipythonrc (alias): added documentation.
5047 * dot_ipython/ipythonrc (alias): added documentation.
5047 (xcolor): Fixed small bug (xcolors -> xcolor)
5048 (xcolor): Fixed small bug (xcolors -> xcolor)
5048
5049
5049 * Changed the alias system. Now alias is a magic command to define
5050 * Changed the alias system. Now alias is a magic command to define
5050 aliases just like the shell. Rationale: the builtin magics should
5051 aliases just like the shell. Rationale: the builtin magics should
5051 be there for things deeply connected to IPython's
5052 be there for things deeply connected to IPython's
5052 architecture. And this is a much lighter system for what I think
5053 architecture. And this is a much lighter system for what I think
5053 is the really important feature: allowing users to define quickly
5054 is the really important feature: allowing users to define quickly
5054 magics that will do shell things for them, so they can customize
5055 magics that will do shell things for them, so they can customize
5055 IPython easily to match their work habits. If someone is really
5056 IPython easily to match their work habits. If someone is really
5056 desperate to have another name for a builtin alias, they can
5057 desperate to have another name for a builtin alias, they can
5057 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5058 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5058 works.
5059 works.
5059
5060
5060 2001-11-28 Fernando Perez <fperez@colorado.edu>
5061 2001-11-28 Fernando Perez <fperez@colorado.edu>
5061
5062
5062 * Changed @file so that it opens the source file at the proper
5063 * Changed @file so that it opens the source file at the proper
5063 line. Since it uses less, if your EDITOR environment is
5064 line. Since it uses less, if your EDITOR environment is
5064 configured, typing v will immediately open your editor of choice
5065 configured, typing v will immediately open your editor of choice
5065 right at the line where the object is defined. Not as quick as
5066 right at the line where the object is defined. Not as quick as
5066 having a direct @edit command, but for all intents and purposes it
5067 having a direct @edit command, but for all intents and purposes it
5067 works. And I don't have to worry about writing @edit to deal with
5068 works. And I don't have to worry about writing @edit to deal with
5068 all the editors, less does that.
5069 all the editors, less does that.
5069
5070
5070 * Version 0.1.16 released, 0.1.17 opened.
5071 * Version 0.1.16 released, 0.1.17 opened.
5071
5072
5072 * Fixed some nasty bugs in the page/page_dumb combo that could
5073 * Fixed some nasty bugs in the page/page_dumb combo that could
5073 crash IPython.
5074 crash IPython.
5074
5075
5075 2001-11-27 Fernando Perez <fperez@colorado.edu>
5076 2001-11-27 Fernando Perez <fperez@colorado.edu>
5076
5077
5077 * Version 0.1.15 released, 0.1.16 opened.
5078 * Version 0.1.15 released, 0.1.16 opened.
5078
5079
5079 * Finally got ? and ?? to work for undefined things: now it's
5080 * Finally got ? and ?? to work for undefined things: now it's
5080 possible to type {}.get? and get information about the get method
5081 possible to type {}.get? and get information about the get method
5081 of dicts, or os.path? even if only os is defined (so technically
5082 of dicts, or os.path? even if only os is defined (so technically
5082 os.path isn't). Works at any level. For example, after import os,
5083 os.path isn't). Works at any level. For example, after import os,
5083 os?, os.path?, os.path.abspath? all work. This is great, took some
5084 os?, os.path?, os.path.abspath? all work. This is great, took some
5084 work in _ofind.
5085 work in _ofind.
5085
5086
5086 * Fixed more bugs with logging. The sanest way to do it was to add
5087 * Fixed more bugs with logging. The sanest way to do it was to add
5087 to @log a 'mode' parameter. Killed two in one shot (this mode
5088 to @log a 'mode' parameter. Killed two in one shot (this mode
5088 option was a request of Janko's). I think it's finally clean
5089 option was a request of Janko's). I think it's finally clean
5089 (famous last words).
5090 (famous last words).
5090
5091
5091 * Added a page_dumb() pager which does a decent job of paging on
5092 * Added a page_dumb() pager which does a decent job of paging on
5092 screen, if better things (like less) aren't available. One less
5093 screen, if better things (like less) aren't available. One less
5093 unix dependency (someday maybe somebody will port this to
5094 unix dependency (someday maybe somebody will port this to
5094 windows).
5095 windows).
5095
5096
5096 * Fixed problem in magic_log: would lock of logging out if log
5097 * Fixed problem in magic_log: would lock of logging out if log
5097 creation failed (because it would still think it had succeeded).
5098 creation failed (because it would still think it had succeeded).
5098
5099
5099 * Improved the page() function using curses to auto-detect screen
5100 * Improved the page() function using curses to auto-detect screen
5100 size. Now it can make a much better decision on whether to print
5101 size. Now it can make a much better decision on whether to print
5101 or page a string. Option screen_length was modified: a value 0
5102 or page a string. Option screen_length was modified: a value 0
5102 means auto-detect, and that's the default now.
5103 means auto-detect, and that's the default now.
5103
5104
5104 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5105 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5105 go out. I'll test it for a few days, then talk to Janko about
5106 go out. I'll test it for a few days, then talk to Janko about
5106 licences and announce it.
5107 licences and announce it.
5107
5108
5108 * Fixed the length of the auto-generated ---> prompt which appears
5109 * Fixed the length of the auto-generated ---> prompt which appears
5109 for auto-parens and auto-quotes. Getting this right isn't trivial,
5110 for auto-parens and auto-quotes. Getting this right isn't trivial,
5110 with all the color escapes, different prompt types and optional
5111 with all the color escapes, different prompt types and optional
5111 separators. But it seems to be working in all the combinations.
5112 separators. But it seems to be working in all the combinations.
5112
5113
5113 2001-11-26 Fernando Perez <fperez@colorado.edu>
5114 2001-11-26 Fernando Perez <fperez@colorado.edu>
5114
5115
5115 * Wrote a regexp filter to get option types from the option names
5116 * Wrote a regexp filter to get option types from the option names
5116 string. This eliminates the need to manually keep two duplicate
5117 string. This eliminates the need to manually keep two duplicate
5117 lists.
5118 lists.
5118
5119
5119 * Removed the unneeded check_option_names. Now options are handled
5120 * Removed the unneeded check_option_names. Now options are handled
5120 in a much saner manner and it's easy to visually check that things
5121 in a much saner manner and it's easy to visually check that things
5121 are ok.
5122 are ok.
5122
5123
5123 * Updated version numbers on all files I modified to carry a
5124 * Updated version numbers on all files I modified to carry a
5124 notice so Janko and Nathan have clear version markers.
5125 notice so Janko and Nathan have clear version markers.
5125
5126
5126 * Updated docstring for ultraTB with my changes. I should send
5127 * Updated docstring for ultraTB with my changes. I should send
5127 this to Nathan.
5128 this to Nathan.
5128
5129
5129 * Lots of small fixes. Ran everything through pychecker again.
5130 * Lots of small fixes. Ran everything through pychecker again.
5130
5131
5131 * Made loading of deep_reload an cmd line option. If it's not too
5132 * Made loading of deep_reload an cmd line option. If it's not too
5132 kosher, now people can just disable it. With -nodeep_reload it's
5133 kosher, now people can just disable it. With -nodeep_reload it's
5133 still available as dreload(), it just won't overwrite reload().
5134 still available as dreload(), it just won't overwrite reload().
5134
5135
5135 * Moved many options to the no| form (-opt and -noopt
5136 * Moved many options to the no| form (-opt and -noopt
5136 accepted). Cleaner.
5137 accepted). Cleaner.
5137
5138
5138 * Changed magic_log so that if called with no parameters, it uses
5139 * Changed magic_log so that if called with no parameters, it uses
5139 'rotate' mode. That way auto-generated logs aren't automatically
5140 'rotate' mode. That way auto-generated logs aren't automatically
5140 over-written. For normal logs, now a backup is made if it exists
5141 over-written. For normal logs, now a backup is made if it exists
5141 (only 1 level of backups). A new 'backup' mode was added to the
5142 (only 1 level of backups). A new 'backup' mode was added to the
5142 Logger class to support this. This was a request by Janko.
5143 Logger class to support this. This was a request by Janko.
5143
5144
5144 * Added @logoff/@logon to stop/restart an active log.
5145 * Added @logoff/@logon to stop/restart an active log.
5145
5146
5146 * Fixed a lot of bugs in log saving/replay. It was pretty
5147 * Fixed a lot of bugs in log saving/replay. It was pretty
5147 broken. Now special lines (!@,/) appear properly in the command
5148 broken. Now special lines (!@,/) appear properly in the command
5148 history after a log replay.
5149 history after a log replay.
5149
5150
5150 * Tried and failed to implement full session saving via pickle. My
5151 * Tried and failed to implement full session saving via pickle. My
5151 idea was to pickle __main__.__dict__, but modules can't be
5152 idea was to pickle __main__.__dict__, but modules can't be
5152 pickled. This would be a better alternative to replaying logs, but
5153 pickled. This would be a better alternative to replaying logs, but
5153 seems quite tricky to get to work. Changed -session to be called
5154 seems quite tricky to get to work. Changed -session to be called
5154 -logplay, which more accurately reflects what it does. And if we
5155 -logplay, which more accurately reflects what it does. And if we
5155 ever get real session saving working, -session is now available.
5156 ever get real session saving working, -session is now available.
5156
5157
5157 * Implemented color schemes for prompts also. As for tracebacks,
5158 * Implemented color schemes for prompts also. As for tracebacks,
5158 currently only NoColor and Linux are supported. But now the
5159 currently only NoColor and Linux are supported. But now the
5159 infrastructure is in place, based on a generic ColorScheme
5160 infrastructure is in place, based on a generic ColorScheme
5160 class. So writing and activating new schemes both for the prompts
5161 class. So writing and activating new schemes both for the prompts
5161 and the tracebacks should be straightforward.
5162 and the tracebacks should be straightforward.
5162
5163
5163 * Version 0.1.13 released, 0.1.14 opened.
5164 * Version 0.1.13 released, 0.1.14 opened.
5164
5165
5165 * Changed handling of options for output cache. Now counter is
5166 * Changed handling of options for output cache. Now counter is
5166 hardwired starting at 1 and one specifies the maximum number of
5167 hardwired starting at 1 and one specifies the maximum number of
5167 entries *in the outcache* (not the max prompt counter). This is
5168 entries *in the outcache* (not the max prompt counter). This is
5168 much better, since many statements won't increase the cache
5169 much better, since many statements won't increase the cache
5169 count. It also eliminated some confusing options, now there's only
5170 count. It also eliminated some confusing options, now there's only
5170 one: cache_size.
5171 one: cache_size.
5171
5172
5172 * Added 'alias' magic function and magic_alias option in the
5173 * Added 'alias' magic function and magic_alias option in the
5173 ipythonrc file. Now the user can easily define whatever names he
5174 ipythonrc file. Now the user can easily define whatever names he
5174 wants for the magic functions without having to play weird
5175 wants for the magic functions without having to play weird
5175 namespace games. This gives IPython a real shell-like feel.
5176 namespace games. This gives IPython a real shell-like feel.
5176
5177
5177 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5178 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5178 @ or not).
5179 @ or not).
5179
5180
5180 This was one of the last remaining 'visible' bugs (that I know
5181 This was one of the last remaining 'visible' bugs (that I know
5181 of). I think if I can clean up the session loading so it works
5182 of). I think if I can clean up the session loading so it works
5182 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5183 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5183 about licensing).
5184 about licensing).
5184
5185
5185 2001-11-25 Fernando Perez <fperez@colorado.edu>
5186 2001-11-25 Fernando Perez <fperez@colorado.edu>
5186
5187
5187 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5188 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5188 there's a cleaner distinction between what ? and ?? show.
5189 there's a cleaner distinction between what ? and ?? show.
5189
5190
5190 * Added screen_length option. Now the user can define his own
5191 * Added screen_length option. Now the user can define his own
5191 screen size for page() operations.
5192 screen size for page() operations.
5192
5193
5193 * Implemented magic shell-like functions with automatic code
5194 * Implemented magic shell-like functions with automatic code
5194 generation. Now adding another function is just a matter of adding
5195 generation. Now adding another function is just a matter of adding
5195 an entry to a dict, and the function is dynamically generated at
5196 an entry to a dict, and the function is dynamically generated at
5196 run-time. Python has some really cool features!
5197 run-time. Python has some really cool features!
5197
5198
5198 * Renamed many options to cleanup conventions a little. Now all
5199 * Renamed many options to cleanup conventions a little. Now all
5199 are lowercase, and only underscores where needed. Also in the code
5200 are lowercase, and only underscores where needed. Also in the code
5200 option name tables are clearer.
5201 option name tables are clearer.
5201
5202
5202 * Changed prompts a little. Now input is 'In [n]:' instead of
5203 * Changed prompts a little. Now input is 'In [n]:' instead of
5203 'In[n]:='. This allows it the numbers to be aligned with the
5204 'In[n]:='. This allows it the numbers to be aligned with the
5204 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5205 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5205 Python (it was a Mathematica thing). The '...' continuation prompt
5206 Python (it was a Mathematica thing). The '...' continuation prompt
5206 was also changed a little to align better.
5207 was also changed a little to align better.
5207
5208
5208 * Fixed bug when flushing output cache. Not all _p<n> variables
5209 * Fixed bug when flushing output cache. Not all _p<n> variables
5209 exist, so their deletion needs to be wrapped in a try:
5210 exist, so their deletion needs to be wrapped in a try:
5210
5211
5211 * Figured out how to properly use inspect.formatargspec() (it
5212 * Figured out how to properly use inspect.formatargspec() (it
5212 requires the args preceded by *). So I removed all the code from
5213 requires the args preceded by *). So I removed all the code from
5213 _get_pdef in Magic, which was just replicating that.
5214 _get_pdef in Magic, which was just replicating that.
5214
5215
5215 * Added test to prefilter to allow redefining magic function names
5216 * Added test to prefilter to allow redefining magic function names
5216 as variables. This is ok, since the @ form is always available,
5217 as variables. This is ok, since the @ form is always available,
5217 but whe should allow the user to define a variable called 'ls' if
5218 but whe should allow the user to define a variable called 'ls' if
5218 he needs it.
5219 he needs it.
5219
5220
5220 * Moved the ToDo information from README into a separate ToDo.
5221 * Moved the ToDo information from README into a separate ToDo.
5221
5222
5222 * General code cleanup and small bugfixes. I think it's close to a
5223 * General code cleanup and small bugfixes. I think it's close to a
5223 state where it can be released, obviously with a big 'beta'
5224 state where it can be released, obviously with a big 'beta'
5224 warning on it.
5225 warning on it.
5225
5226
5226 * Got the magic function split to work. Now all magics are defined
5227 * Got the magic function split to work. Now all magics are defined
5227 in a separate class. It just organizes things a bit, and now
5228 in a separate class. It just organizes things a bit, and now
5228 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5229 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5229 was too long).
5230 was too long).
5230
5231
5231 * Changed @clear to @reset to avoid potential confusions with
5232 * Changed @clear to @reset to avoid potential confusions with
5232 the shell command clear. Also renamed @cl to @clear, which does
5233 the shell command clear. Also renamed @cl to @clear, which does
5233 exactly what people expect it to from their shell experience.
5234 exactly what people expect it to from their shell experience.
5234
5235
5235 Added a check to the @reset command (since it's so
5236 Added a check to the @reset command (since it's so
5236 destructive, it's probably a good idea to ask for confirmation).
5237 destructive, it's probably a good idea to ask for confirmation).
5237 But now reset only works for full namespace resetting. Since the
5238 But now reset only works for full namespace resetting. Since the
5238 del keyword is already there for deleting a few specific
5239 del keyword is already there for deleting a few specific
5239 variables, I don't see the point of having a redundant magic
5240 variables, I don't see the point of having a redundant magic
5240 function for the same task.
5241 function for the same task.
5241
5242
5242 2001-11-24 Fernando Perez <fperez@colorado.edu>
5243 2001-11-24 Fernando Perez <fperez@colorado.edu>
5243
5244
5244 * Updated the builtin docs (esp. the ? ones).
5245 * Updated the builtin docs (esp. the ? ones).
5245
5246
5246 * Ran all the code through pychecker. Not terribly impressed with
5247 * Ran all the code through pychecker. Not terribly impressed with
5247 it: lots of spurious warnings and didn't really find anything of
5248 it: lots of spurious warnings and didn't really find anything of
5248 substance (just a few modules being imported and not used).
5249 substance (just a few modules being imported and not used).
5249
5250
5250 * Implemented the new ultraTB functionality into IPython. New
5251 * Implemented the new ultraTB functionality into IPython. New
5251 option: xcolors. This chooses color scheme. xmode now only selects
5252 option: xcolors. This chooses color scheme. xmode now only selects
5252 between Plain and Verbose. Better orthogonality.
5253 between Plain and Verbose. Better orthogonality.
5253
5254
5254 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5255 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5255 mode and color scheme for the exception handlers. Now it's
5256 mode and color scheme for the exception handlers. Now it's
5256 possible to have the verbose traceback with no coloring.
5257 possible to have the verbose traceback with no coloring.
5257
5258
5258 2001-11-23 Fernando Perez <fperez@colorado.edu>
5259 2001-11-23 Fernando Perez <fperez@colorado.edu>
5259
5260
5260 * Version 0.1.12 released, 0.1.13 opened.
5261 * Version 0.1.12 released, 0.1.13 opened.
5261
5262
5262 * Removed option to set auto-quote and auto-paren escapes by
5263 * Removed option to set auto-quote and auto-paren escapes by
5263 user. The chances of breaking valid syntax are just too high. If
5264 user. The chances of breaking valid syntax are just too high. If
5264 someone *really* wants, they can always dig into the code.
5265 someone *really* wants, they can always dig into the code.
5265
5266
5266 * Made prompt separators configurable.
5267 * Made prompt separators configurable.
5267
5268
5268 2001-11-22 Fernando Perez <fperez@colorado.edu>
5269 2001-11-22 Fernando Perez <fperez@colorado.edu>
5269
5270
5270 * Small bugfixes in many places.
5271 * Small bugfixes in many places.
5271
5272
5272 * Removed the MyCompleter class from ipplib. It seemed redundant
5273 * Removed the MyCompleter class from ipplib. It seemed redundant
5273 with the C-p,C-n history search functionality. Less code to
5274 with the C-p,C-n history search functionality. Less code to
5274 maintain.
5275 maintain.
5275
5276
5276 * Moved all the original ipython.py code into ipythonlib.py. Right
5277 * Moved all the original ipython.py code into ipythonlib.py. Right
5277 now it's just one big dump into a function called make_IPython, so
5278 now it's just one big dump into a function called make_IPython, so
5278 no real modularity has been gained. But at least it makes the
5279 no real modularity has been gained. But at least it makes the
5279 wrapper script tiny, and since ipythonlib is a module, it gets
5280 wrapper script tiny, and since ipythonlib is a module, it gets
5280 compiled and startup is much faster.
5281 compiled and startup is much faster.
5281
5282
5282 This is a reasobably 'deep' change, so we should test it for a
5283 This is a reasobably 'deep' change, so we should test it for a
5283 while without messing too much more with the code.
5284 while without messing too much more with the code.
5284
5285
5285 2001-11-21 Fernando Perez <fperez@colorado.edu>
5286 2001-11-21 Fernando Perez <fperez@colorado.edu>
5286
5287
5287 * Version 0.1.11 released, 0.1.12 opened for further work.
5288 * Version 0.1.11 released, 0.1.12 opened for further work.
5288
5289
5289 * Removed dependency on Itpl. It was only needed in one place. It
5290 * Removed dependency on Itpl. It was only needed in one place. It
5290 would be nice if this became part of python, though. It makes life
5291 would be nice if this became part of python, though. It makes life
5291 *a lot* easier in some cases.
5292 *a lot* easier in some cases.
5292
5293
5293 * Simplified the prefilter code a bit. Now all handlers are
5294 * Simplified the prefilter code a bit. Now all handlers are
5294 expected to explicitly return a value (at least a blank string).
5295 expected to explicitly return a value (at least a blank string).
5295
5296
5296 * Heavy edits in ipplib. Removed the help system altogether. Now
5297 * Heavy edits in ipplib. Removed the help system altogether. Now
5297 obj?/?? is used for inspecting objects, a magic @doc prints
5298 obj?/?? is used for inspecting objects, a magic @doc prints
5298 docstrings, and full-blown Python help is accessed via the 'help'
5299 docstrings, and full-blown Python help is accessed via the 'help'
5299 keyword. This cleans up a lot of code (less to maintain) and does
5300 keyword. This cleans up a lot of code (less to maintain) and does
5300 the job. Since 'help' is now a standard Python component, might as
5301 the job. Since 'help' is now a standard Python component, might as
5301 well use it and remove duplicate functionality.
5302 well use it and remove duplicate functionality.
5302
5303
5303 Also removed the option to use ipplib as a standalone program. By
5304 Also removed the option to use ipplib as a standalone program. By
5304 now it's too dependent on other parts of IPython to function alone.
5305 now it's too dependent on other parts of IPython to function alone.
5305
5306
5306 * Fixed bug in genutils.pager. It would crash if the pager was
5307 * Fixed bug in genutils.pager. It would crash if the pager was
5307 exited immediately after opening (broken pipe).
5308 exited immediately after opening (broken pipe).
5308
5309
5309 * Trimmed down the VerboseTB reporting a little. The header is
5310 * Trimmed down the VerboseTB reporting a little. The header is
5310 much shorter now and the repeated exception arguments at the end
5311 much shorter now and the repeated exception arguments at the end
5311 have been removed. For interactive use the old header seemed a bit
5312 have been removed. For interactive use the old header seemed a bit
5312 excessive.
5313 excessive.
5313
5314
5314 * Fixed small bug in output of @whos for variables with multi-word
5315 * Fixed small bug in output of @whos for variables with multi-word
5315 types (only first word was displayed).
5316 types (only first word was displayed).
5316
5317
5317 2001-11-17 Fernando Perez <fperez@colorado.edu>
5318 2001-11-17 Fernando Perez <fperez@colorado.edu>
5318
5319
5319 * Version 0.1.10 released, 0.1.11 opened for further work.
5320 * Version 0.1.10 released, 0.1.11 opened for further work.
5320
5321
5321 * Modified dirs and friends. dirs now *returns* the stack (not
5322 * Modified dirs and friends. dirs now *returns* the stack (not
5322 prints), so one can manipulate it as a variable. Convenient to
5323 prints), so one can manipulate it as a variable. Convenient to
5323 travel along many directories.
5324 travel along many directories.
5324
5325
5325 * Fixed bug in magic_pdef: would only work with functions with
5326 * Fixed bug in magic_pdef: would only work with functions with
5326 arguments with default values.
5327 arguments with default values.
5327
5328
5328 2001-11-14 Fernando Perez <fperez@colorado.edu>
5329 2001-11-14 Fernando Perez <fperez@colorado.edu>
5329
5330
5330 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5331 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5331 example with IPython. Various other minor fixes and cleanups.
5332 example with IPython. Various other minor fixes and cleanups.
5332
5333
5333 * Version 0.1.9 released, 0.1.10 opened for further work.
5334 * Version 0.1.9 released, 0.1.10 opened for further work.
5334
5335
5335 * Added sys.path to the list of directories searched in the
5336 * Added sys.path to the list of directories searched in the
5336 execfile= option. It used to be the current directory and the
5337 execfile= option. It used to be the current directory and the
5337 user's IPYTHONDIR only.
5338 user's IPYTHONDIR only.
5338
5339
5339 2001-11-13 Fernando Perez <fperez@colorado.edu>
5340 2001-11-13 Fernando Perez <fperez@colorado.edu>
5340
5341
5341 * Reinstated the raw_input/prefilter separation that Janko had
5342 * Reinstated the raw_input/prefilter separation that Janko had
5342 initially. This gives a more convenient setup for extending the
5343 initially. This gives a more convenient setup for extending the
5343 pre-processor from the outside: raw_input always gets a string,
5344 pre-processor from the outside: raw_input always gets a string,
5344 and prefilter has to process it. We can then redefine prefilter
5345 and prefilter has to process it. We can then redefine prefilter
5345 from the outside and implement extensions for special
5346 from the outside and implement extensions for special
5346 purposes.
5347 purposes.
5347
5348
5348 Today I got one for inputting PhysicalQuantity objects
5349 Today I got one for inputting PhysicalQuantity objects
5349 (from Scientific) without needing any function calls at
5350 (from Scientific) without needing any function calls at
5350 all. Extremely convenient, and it's all done as a user-level
5351 all. Extremely convenient, and it's all done as a user-level
5351 extension (no IPython code was touched). Now instead of:
5352 extension (no IPython code was touched). Now instead of:
5352 a = PhysicalQuantity(4.2,'m/s**2')
5353 a = PhysicalQuantity(4.2,'m/s**2')
5353 one can simply say
5354 one can simply say
5354 a = 4.2 m/s**2
5355 a = 4.2 m/s**2
5355 or even
5356 or even
5356 a = 4.2 m/s^2
5357 a = 4.2 m/s^2
5357
5358
5358 I use this, but it's also a proof of concept: IPython really is
5359 I use this, but it's also a proof of concept: IPython really is
5359 fully user-extensible, even at the level of the parsing of the
5360 fully user-extensible, even at the level of the parsing of the
5360 command line. It's not trivial, but it's perfectly doable.
5361 command line. It's not trivial, but it's perfectly doable.
5361
5362
5362 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5363 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5363 the problem of modules being loaded in the inverse order in which
5364 the problem of modules being loaded in the inverse order in which
5364 they were defined in
5365 they were defined in
5365
5366
5366 * Version 0.1.8 released, 0.1.9 opened for further work.
5367 * Version 0.1.8 released, 0.1.9 opened for further work.
5367
5368
5368 * Added magics pdef, source and file. They respectively show the
5369 * Added magics pdef, source and file. They respectively show the
5369 definition line ('prototype' in C), source code and full python
5370 definition line ('prototype' in C), source code and full python
5370 file for any callable object. The object inspector oinfo uses
5371 file for any callable object. The object inspector oinfo uses
5371 these to show the same information.
5372 these to show the same information.
5372
5373
5373 * Version 0.1.7 released, 0.1.8 opened for further work.
5374 * Version 0.1.7 released, 0.1.8 opened for further work.
5374
5375
5375 * Separated all the magic functions into a class called Magic. The
5376 * Separated all the magic functions into a class called Magic. The
5376 InteractiveShell class was becoming too big for Xemacs to handle
5377 InteractiveShell class was becoming too big for Xemacs to handle
5377 (de-indenting a line would lock it up for 10 seconds while it
5378 (de-indenting a line would lock it up for 10 seconds while it
5378 backtracked on the whole class!)
5379 backtracked on the whole class!)
5379
5380
5380 FIXME: didn't work. It can be done, but right now namespaces are
5381 FIXME: didn't work. It can be done, but right now namespaces are
5381 all messed up. Do it later (reverted it for now, so at least
5382 all messed up. Do it later (reverted it for now, so at least
5382 everything works as before).
5383 everything works as before).
5383
5384
5384 * Got the object introspection system (magic_oinfo) working! I
5385 * Got the object introspection system (magic_oinfo) working! I
5385 think this is pretty much ready for release to Janko, so he can
5386 think this is pretty much ready for release to Janko, so he can
5386 test it for a while and then announce it. Pretty much 100% of what
5387 test it for a while and then announce it. Pretty much 100% of what
5387 I wanted for the 'phase 1' release is ready. Happy, tired.
5388 I wanted for the 'phase 1' release is ready. Happy, tired.
5388
5389
5389 2001-11-12 Fernando Perez <fperez@colorado.edu>
5390 2001-11-12 Fernando Perez <fperez@colorado.edu>
5390
5391
5391 * Version 0.1.6 released, 0.1.7 opened for further work.
5392 * Version 0.1.6 released, 0.1.7 opened for further work.
5392
5393
5393 * Fixed bug in printing: it used to test for truth before
5394 * Fixed bug in printing: it used to test for truth before
5394 printing, so 0 wouldn't print. Now checks for None.
5395 printing, so 0 wouldn't print. Now checks for None.
5395
5396
5396 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5397 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5397 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5398 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5398 reaches by hand into the outputcache. Think of a better way to do
5399 reaches by hand into the outputcache. Think of a better way to do
5399 this later.
5400 this later.
5400
5401
5401 * Various small fixes thanks to Nathan's comments.
5402 * Various small fixes thanks to Nathan's comments.
5402
5403
5403 * Changed magic_pprint to magic_Pprint. This way it doesn't
5404 * Changed magic_pprint to magic_Pprint. This way it doesn't
5404 collide with pprint() and the name is consistent with the command
5405 collide with pprint() and the name is consistent with the command
5405 line option.
5406 line option.
5406
5407
5407 * Changed prompt counter behavior to be fully like
5408 * Changed prompt counter behavior to be fully like
5408 Mathematica's. That is, even input that doesn't return a result
5409 Mathematica's. That is, even input that doesn't return a result
5409 raises the prompt counter. The old behavior was kind of confusing
5410 raises the prompt counter. The old behavior was kind of confusing
5410 (getting the same prompt number several times if the operation
5411 (getting the same prompt number several times if the operation
5411 didn't return a result).
5412 didn't return a result).
5412
5413
5413 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5414 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5414
5415
5415 * Fixed -Classic mode (wasn't working anymore).
5416 * Fixed -Classic mode (wasn't working anymore).
5416
5417
5417 * Added colored prompts using Nathan's new code. Colors are
5418 * Added colored prompts using Nathan's new code. Colors are
5418 currently hardwired, they can be user-configurable. For
5419 currently hardwired, they can be user-configurable. For
5419 developers, they can be chosen in file ipythonlib.py, at the
5420 developers, they can be chosen in file ipythonlib.py, at the
5420 beginning of the CachedOutput class def.
5421 beginning of the CachedOutput class def.
5421
5422
5422 2001-11-11 Fernando Perez <fperez@colorado.edu>
5423 2001-11-11 Fernando Perez <fperez@colorado.edu>
5423
5424
5424 * Version 0.1.5 released, 0.1.6 opened for further work.
5425 * Version 0.1.5 released, 0.1.6 opened for further work.
5425
5426
5426 * Changed magic_env to *return* the environment as a dict (not to
5427 * Changed magic_env to *return* the environment as a dict (not to
5427 print it). This way it prints, but it can also be processed.
5428 print it). This way it prints, but it can also be processed.
5428
5429
5429 * Added Verbose exception reporting to interactive
5430 * Added Verbose exception reporting to interactive
5430 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5431 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5431 traceback. Had to make some changes to the ultraTB file. This is
5432 traceback. Had to make some changes to the ultraTB file. This is
5432 probably the last 'big' thing in my mental todo list. This ties
5433 probably the last 'big' thing in my mental todo list. This ties
5433 in with the next entry:
5434 in with the next entry:
5434
5435
5435 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5436 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5436 has to specify is Plain, Color or Verbose for all exception
5437 has to specify is Plain, Color or Verbose for all exception
5437 handling.
5438 handling.
5438
5439
5439 * Removed ShellServices option. All this can really be done via
5440 * Removed ShellServices option. All this can really be done via
5440 the magic system. It's easier to extend, cleaner and has automatic
5441 the magic system. It's easier to extend, cleaner and has automatic
5441 namespace protection and documentation.
5442 namespace protection and documentation.
5442
5443
5443 2001-11-09 Fernando Perez <fperez@colorado.edu>
5444 2001-11-09 Fernando Perez <fperez@colorado.edu>
5444
5445
5445 * Fixed bug in output cache flushing (missing parameter to
5446 * Fixed bug in output cache flushing (missing parameter to
5446 __init__). Other small bugs fixed (found using pychecker).
5447 __init__). Other small bugs fixed (found using pychecker).
5447
5448
5448 * Version 0.1.4 opened for bugfixing.
5449 * Version 0.1.4 opened for bugfixing.
5449
5450
5450 2001-11-07 Fernando Perez <fperez@colorado.edu>
5451 2001-11-07 Fernando Perez <fperez@colorado.edu>
5451
5452
5452 * Version 0.1.3 released, mainly because of the raw_input bug.
5453 * Version 0.1.3 released, mainly because of the raw_input bug.
5453
5454
5454 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5455 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5455 and when testing for whether things were callable, a call could
5456 and when testing for whether things were callable, a call could
5456 actually be made to certain functions. They would get called again
5457 actually be made to certain functions. They would get called again
5457 once 'really' executed, with a resulting double call. A disaster
5458 once 'really' executed, with a resulting double call. A disaster
5458 in many cases (list.reverse() would never work!).
5459 in many cases (list.reverse() would never work!).
5459
5460
5460 * Removed prefilter() function, moved its code to raw_input (which
5461 * Removed prefilter() function, moved its code to raw_input (which
5461 after all was just a near-empty caller for prefilter). This saves
5462 after all was just a near-empty caller for prefilter). This saves
5462 a function call on every prompt, and simplifies the class a tiny bit.
5463 a function call on every prompt, and simplifies the class a tiny bit.
5463
5464
5464 * Fix _ip to __ip name in magic example file.
5465 * Fix _ip to __ip name in magic example file.
5465
5466
5466 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5467 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5467 work with non-gnu versions of tar.
5468 work with non-gnu versions of tar.
5468
5469
5469 2001-11-06 Fernando Perez <fperez@colorado.edu>
5470 2001-11-06 Fernando Perez <fperez@colorado.edu>
5470
5471
5471 * Version 0.1.2. Just to keep track of the recent changes.
5472 * Version 0.1.2. Just to keep track of the recent changes.
5472
5473
5473 * Fixed nasty bug in output prompt routine. It used to check 'if
5474 * Fixed nasty bug in output prompt routine. It used to check 'if
5474 arg != None...'. Problem is, this fails if arg implements a
5475 arg != None...'. Problem is, this fails if arg implements a
5475 special comparison (__cmp__) which disallows comparing to
5476 special comparison (__cmp__) which disallows comparing to
5476 None. Found it when trying to use the PhysicalQuantity module from
5477 None. Found it when trying to use the PhysicalQuantity module from
5477 ScientificPython.
5478 ScientificPython.
5478
5479
5479 2001-11-05 Fernando Perez <fperez@colorado.edu>
5480 2001-11-05 Fernando Perez <fperez@colorado.edu>
5480
5481
5481 * Also added dirs. Now the pushd/popd/dirs family functions
5482 * Also added dirs. Now the pushd/popd/dirs family functions
5482 basically like the shell, with the added convenience of going home
5483 basically like the shell, with the added convenience of going home
5483 when called with no args.
5484 when called with no args.
5484
5485
5485 * pushd/popd slightly modified to mimic shell behavior more
5486 * pushd/popd slightly modified to mimic shell behavior more
5486 closely.
5487 closely.
5487
5488
5488 * Added env,pushd,popd from ShellServices as magic functions. I
5489 * Added env,pushd,popd from ShellServices as magic functions. I
5489 think the cleanest will be to port all desired functions from
5490 think the cleanest will be to port all desired functions from
5490 ShellServices as magics and remove ShellServices altogether. This
5491 ShellServices as magics and remove ShellServices altogether. This
5491 will provide a single, clean way of adding functionality
5492 will provide a single, clean way of adding functionality
5492 (shell-type or otherwise) to IP.
5493 (shell-type or otherwise) to IP.
5493
5494
5494 2001-11-04 Fernando Perez <fperez@colorado.edu>
5495 2001-11-04 Fernando Perez <fperez@colorado.edu>
5495
5496
5496 * Added .ipython/ directory to sys.path. This way users can keep
5497 * Added .ipython/ directory to sys.path. This way users can keep
5497 customizations there and access them via import.
5498 customizations there and access them via import.
5498
5499
5499 2001-11-03 Fernando Perez <fperez@colorado.edu>
5500 2001-11-03 Fernando Perez <fperez@colorado.edu>
5500
5501
5501 * Opened version 0.1.1 for new changes.
5502 * Opened version 0.1.1 for new changes.
5502
5503
5503 * Changed version number to 0.1.0: first 'public' release, sent to
5504 * Changed version number to 0.1.0: first 'public' release, sent to
5504 Nathan and Janko.
5505 Nathan and Janko.
5505
5506
5506 * Lots of small fixes and tweaks.
5507 * Lots of small fixes and tweaks.
5507
5508
5508 * Minor changes to whos format. Now strings are shown, snipped if
5509 * Minor changes to whos format. Now strings are shown, snipped if
5509 too long.
5510 too long.
5510
5511
5511 * Changed ShellServices to work on __main__ so they show up in @who
5512 * Changed ShellServices to work on __main__ so they show up in @who
5512
5513
5513 * Help also works with ? at the end of a line:
5514 * Help also works with ? at the end of a line:
5514 ?sin and sin?
5515 ?sin and sin?
5515 both produce the same effect. This is nice, as often I use the
5516 both produce the same effect. This is nice, as often I use the
5516 tab-complete to find the name of a method, but I used to then have
5517 tab-complete to find the name of a method, but I used to then have
5517 to go to the beginning of the line to put a ? if I wanted more
5518 to go to the beginning of the line to put a ? if I wanted more
5518 info. Now I can just add the ? and hit return. Convenient.
5519 info. Now I can just add the ? and hit return. Convenient.
5519
5520
5520 2001-11-02 Fernando Perez <fperez@colorado.edu>
5521 2001-11-02 Fernando Perez <fperez@colorado.edu>
5521
5522
5522 * Python version check (>=2.1) added.
5523 * Python version check (>=2.1) added.
5523
5524
5524 * Added LazyPython documentation. At this point the docs are quite
5525 * Added LazyPython documentation. At this point the docs are quite
5525 a mess. A cleanup is in order.
5526 a mess. A cleanup is in order.
5526
5527
5527 * Auto-installer created. For some bizarre reason, the zipfiles
5528 * Auto-installer created. For some bizarre reason, the zipfiles
5528 module isn't working on my system. So I made a tar version
5529 module isn't working on my system. So I made a tar version
5529 (hopefully the command line options in various systems won't kill
5530 (hopefully the command line options in various systems won't kill
5530 me).
5531 me).
5531
5532
5532 * Fixes to Struct in genutils. Now all dictionary-like methods are
5533 * Fixes to Struct in genutils. Now all dictionary-like methods are
5533 protected (reasonably).
5534 protected (reasonably).
5534
5535
5535 * Added pager function to genutils and changed ? to print usage
5536 * Added pager function to genutils and changed ? to print usage
5536 note through it (it was too long).
5537 note through it (it was too long).
5537
5538
5538 * Added the LazyPython functionality. Works great! I changed the
5539 * Added the LazyPython functionality. Works great! I changed the
5539 auto-quote escape to ';', it's on home row and next to '. But
5540 auto-quote escape to ';', it's on home row and next to '. But
5540 both auto-quote and auto-paren (still /) escapes are command-line
5541 both auto-quote and auto-paren (still /) escapes are command-line
5541 parameters.
5542 parameters.
5542
5543
5543
5544
5544 2001-11-01 Fernando Perez <fperez@colorado.edu>
5545 2001-11-01 Fernando Perez <fperez@colorado.edu>
5545
5546
5546 * Version changed to 0.0.7. Fairly large change: configuration now
5547 * Version changed to 0.0.7. Fairly large change: configuration now
5547 is all stored in a directory, by default .ipython. There, all
5548 is all stored in a directory, by default .ipython. There, all
5548 config files have normal looking names (not .names)
5549 config files have normal looking names (not .names)
5549
5550
5550 * Version 0.0.6 Released first to Lucas and Archie as a test
5551 * Version 0.0.6 Released first to Lucas and Archie as a test
5551 run. Since it's the first 'semi-public' release, change version to
5552 run. Since it's the first 'semi-public' release, change version to
5552 > 0.0.6 for any changes now.
5553 > 0.0.6 for any changes now.
5553
5554
5554 * Stuff I had put in the ipplib.py changelog:
5555 * Stuff I had put in the ipplib.py changelog:
5555
5556
5556 Changes to InteractiveShell:
5557 Changes to InteractiveShell:
5557
5558
5558 - Made the usage message a parameter.
5559 - Made the usage message a parameter.
5559
5560
5560 - Require the name of the shell variable to be given. It's a bit
5561 - Require the name of the shell variable to be given. It's a bit
5561 of a hack, but allows the name 'shell' not to be hardwire in the
5562 of a hack, but allows the name 'shell' not to be hardwire in the
5562 magic (@) handler, which is problematic b/c it requires
5563 magic (@) handler, which is problematic b/c it requires
5563 polluting the global namespace with 'shell'. This in turn is
5564 polluting the global namespace with 'shell'. This in turn is
5564 fragile: if a user redefines a variable called shell, things
5565 fragile: if a user redefines a variable called shell, things
5565 break.
5566 break.
5566
5567
5567 - magic @: all functions available through @ need to be defined
5568 - magic @: all functions available through @ need to be defined
5568 as magic_<name>, even though they can be called simply as
5569 as magic_<name>, even though they can be called simply as
5569 @<name>. This allows the special command @magic to gather
5570 @<name>. This allows the special command @magic to gather
5570 information automatically about all existing magic functions,
5571 information automatically about all existing magic functions,
5571 even if they are run-time user extensions, by parsing the shell
5572 even if they are run-time user extensions, by parsing the shell
5572 instance __dict__ looking for special magic_ names.
5573 instance __dict__ looking for special magic_ names.
5573
5574
5574 - mainloop: added *two* local namespace parameters. This allows
5575 - mainloop: added *two* local namespace parameters. This allows
5575 the class to differentiate between parameters which were there
5576 the class to differentiate between parameters which were there
5576 before and after command line initialization was processed. This
5577 before and after command line initialization was processed. This
5577 way, later @who can show things loaded at startup by the
5578 way, later @who can show things loaded at startup by the
5578 user. This trick was necessary to make session saving/reloading
5579 user. This trick was necessary to make session saving/reloading
5579 really work: ideally after saving/exiting/reloading a session,
5580 really work: ideally after saving/exiting/reloading a session,
5580 *everythin* should look the same, including the output of @who. I
5581 *everythin* should look the same, including the output of @who. I
5581 was only able to make this work with this double namespace
5582 was only able to make this work with this double namespace
5582 trick.
5583 trick.
5583
5584
5584 - added a header to the logfile which allows (almost) full
5585 - added a header to the logfile which allows (almost) full
5585 session restoring.
5586 session restoring.
5586
5587
5587 - prepend lines beginning with @ or !, with a and log
5588 - prepend lines beginning with @ or !, with a and log
5588 them. Why? !lines: may be useful to know what you did @lines:
5589 them. Why? !lines: may be useful to know what you did @lines:
5589 they may affect session state. So when restoring a session, at
5590 they may affect session state. So when restoring a session, at
5590 least inform the user of their presence. I couldn't quite get
5591 least inform the user of their presence. I couldn't quite get
5591 them to properly re-execute, but at least the user is warned.
5592 them to properly re-execute, but at least the user is warned.
5592
5593
5593 * Started ChangeLog.
5594 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now