##// END OF EJS Templates
Add three new commands to the input mode for "find" and friends:...
walter.doerwald -
Show More
@@ -1,1565 +1,1599 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 1: "home",
472 curses.KEY_END: "end",
472 curses.KEY_END: "end",
473 5: "end",
473 5: "end",
474 # FIXME: What's happening here?
474 # FIXME: What's happening here?
475 8: "backspace",
475 8: "backspace",
476 127: "backspace",
476 127: "backspace",
477 curses.KEY_BACKSPACE: "backspace",
477 curses.KEY_BACKSPACE: "backspace",
478 curses.KEY_DC: "delete",
478 curses.KEY_DC: "delete",
479 ord("x"): "delete",
479 # CTRL-K
480 0x0B: "delend",
480 ord("\n"): "execute",
481 ord("\n"): "execute",
481 ord("\r"): "execute",
482 ord("\r"): "execute",
482 curses.KEY_UP: "up",
483 curses.KEY_UP: "up",
483 curses.KEY_DOWN: "down",
484 curses.KEY_DOWN: "down",
485 curses.KEY_PPAGE: "incsearchup",
486 curses.KEY_NPAGE: "incsearchdown",
484 # CTRL-X
487 # CTRL-X
485 0x18: "exit",
488 0x18: "exit",
486 }
489 }
487
490
488 def __init__(self, prompt):
491 def __init__(self, prompt):
489 self.prompt = prompt
492 self.prompt = prompt
490 self.history = []
493 self.history = []
491 self.maxhistory = 100
494 self.maxhistory = 100
492 self.input = ""
495 self.input = ""
493 self.curx = 0
496 self.curx = 0
494 self.cury = -1 # blank line
497 self.cury = -1 # blank line
495
498
496 def start(self):
499 def start(self):
497 self.input = ""
500 self.input = ""
498 self.curx = 0
501 self.curx = 0
499 self.cury = -1 # blank line
502 self.cury = -1 # blank line
500
503
501 def handlekey(self, browser, key):
504 def handlekey(self, browser, key):
502 cmdname = self.keymap.get(key, None)
505 cmdname = self.keymap.get(key, None)
503 if cmdname is not None:
506 if cmdname is not None:
504 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
507 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
505 if cmdfunc is not None:
508 if cmdfunc is not None:
506 return cmdfunc(browser)
509 return cmdfunc(browser)
507 curses.beep()
510 curses.beep()
508 elif key != -1:
511 elif key != -1:
509 try:
512 try:
510 char = chr(key)
513 char = chr(key)
511 except ValueError:
514 except ValueError:
512 curses.beep()
515 curses.beep()
513 else:
516 else:
514 return self.handlechar(browser, char)
517 return self.handlechar(browser, char)
515
518
516 def handlechar(self, browser, char):
519 def handlechar(self, browser, char):
517 self.input = self.input[:self.curx] + char + self.input[self.curx:]
520 self.input = self.input[:self.curx] + char + self.input[self.curx:]
518 self.curx += 1
521 self.curx += 1
519 return True
522 return True
520
523
521 def dohistory(self):
524 def dohistory(self):
522 self.history.insert(0, self.input)
525 self.history.insert(0, self.input)
523 del self.history[:-self.maxhistory]
526 del self.history[:-self.maxhistory]
524
527
525 def cmd_backspace(self, browser):
528 def cmd_backspace(self, browser):
526 if self.curx:
529 if self.curx:
527 self.input = self.input[:self.curx-1] + self.input[self.curx:]
530 self.input = self.input[:self.curx-1] + self.input[self.curx:]
528 self.curx -= 1
531 self.curx -= 1
529 return True
532 return True
530 else:
533 else:
531 curses.beep()
534 curses.beep()
532
535
533 def cmd_delete(self, browser):
536 def cmd_delete(self, browser):
534 if self.curx<len(self.input):
537 if self.curx<len(self.input):
535 self.input = self.input[:self.curx] + self.input[self.curx+1:]
538 self.input = self.input[:self.curx] + self.input[self.curx+1:]
536 return True
539 return True
537 else:
540 else:
538 curses.beep()
541 curses.beep()
539
542
543 def cmd_delend(self, browser):
544 if self.curx<len(self.input):
545 self.input = self.input[:self.curx]
546 return True
547
540 def cmd_left(self, browser):
548 def cmd_left(self, browser):
541 if self.curx:
549 if self.curx:
542 self.curx -= 1
550 self.curx -= 1
543 return True
551 return True
544 else:
552 else:
545 curses.beep()
553 curses.beep()
546
554
547 def cmd_right(self, browser):
555 def cmd_right(self, browser):
548 if self.curx < len(self.input):
556 if self.curx < len(self.input):
549 self.curx += 1
557 self.curx += 1
550 return True
558 return True
551 else:
559 else:
552 curses.beep()
560 curses.beep()
553
561
554 def cmd_home(self, browser):
562 def cmd_home(self, browser):
555 if self.curx:
563 if self.curx:
556 self.curx = 0
564 self.curx = 0
557 return True
565 return True
558 else:
566 else:
559 curses.beep()
567 curses.beep()
560
568
561 def cmd_end(self, browser):
569 def cmd_end(self, browser):
562 if self.curx < len(self.input):
570 if self.curx < len(self.input):
563 self.curx = len(self.input)
571 self.curx = len(self.input)
564 return True
572 return True
565 else:
573 else:
566 curses.beep()
574 curses.beep()
567
575
568 def cmd_up(self, browser):
576 def cmd_up(self, browser):
569 if self.cury < len(self.history)-1:
577 if self.cury < len(self.history)-1:
570 self.cury += 1
578 self.cury += 1
571 self.input = self.history[self.cury]
579 self.input = self.history[self.cury]
572 self.curx = len(self.input)
580 self.curx = len(self.input)
573 return True
581 return True
574 else:
582 else:
575 curses.beep()
583 curses.beep()
576
584
577 def cmd_down(self, browser):
585 def cmd_down(self, browser):
578 if self.cury >= 0:
586 if self.cury >= 0:
579 self.cury -= 1
587 self.cury -= 1
580 if self.cury>=0:
588 if self.cury>=0:
581 self.input = self.history[self.cury]
589 self.input = self.history[self.cury]
582 else:
590 else:
583 self.input = ""
591 self.input = ""
584 self.curx = len(self.input)
592 self.curx = len(self.input)
585 return True
593 return True
586 else:
594 else:
587 curses.beep()
595 curses.beep()
588
596
597 def cmd_incsearchup(self, browser):
598 prefix = self.input[:self.curx]
599 cury = self.cury
600 while True:
601 cury += 1
602 if cury >= len(self.history):
603 break
604 if self.history[cury].startswith(prefix):
605 self.input = self.history[cury]
606 self.cury = cury
607 return True
608 curses.beep()
609
610 def cmd_incsearchdown(self, browser):
611 prefix = self.input[:self.curx]
612 cury = self.cury
613 while True:
614 cury -= 1
615 if cury <= 0:
616 break
617 if self.history[cury].startswith(prefix):
618 self.input = self.history[self.cury]
619 self.cury = cury
620 return True
621 curses.beep()
622
589 def cmd_exit(self, browser):
623 def cmd_exit(self, browser):
590 browser.mode = "default"
624 browser.mode = "default"
591 return True
625 return True
592
626
593 def cmd_execute(self, browser):
627 def cmd_execute(self, browser):
594 raise NotImplementedError
628 raise NotImplementedError
595
629
596
630
597 class _CommandGoto(_CommandInput):
631 class _CommandGoto(_CommandInput):
598 def __init__(self):
632 def __init__(self):
599 _CommandInput.__init__(self, "goto object #")
633 _CommandInput.__init__(self, "goto object #")
600
634
601 def handlechar(self, browser, char):
635 def handlechar(self, browser, char):
602 # Only accept digits
636 # Only accept digits
603 if not "0" <= char <= "9":
637 if not "0" <= char <= "9":
604 curses.beep()
638 curses.beep()
605 else:
639 else:
606 return _CommandInput.handlechar(self, browser, char)
640 return _CommandInput.handlechar(self, browser, char)
607
641
608 def cmd_execute(self, browser):
642 def cmd_execute(self, browser):
609 level = browser.levels[-1]
643 level = browser.levels[-1]
610 if self.input:
644 if self.input:
611 self.dohistory()
645 self.dohistory()
612 level.moveto(level.curx, int(self.input))
646 level.moveto(level.curx, int(self.input))
613 browser.mode = "default"
647 browser.mode = "default"
614 return True
648 return True
615
649
616
650
617 class _CommandFind(_CommandInput):
651 class _CommandFind(_CommandInput):
618 def __init__(self):
652 def __init__(self):
619 _CommandInput.__init__(self, "find expression")
653 _CommandInput.__init__(self, "find expression")
620
654
621 def cmd_execute(self, browser):
655 def cmd_execute(self, browser):
622 level = browser.levels[-1]
656 level = browser.levels[-1]
623 if self.input:
657 if self.input:
624 self.dohistory()
658 self.dohistory()
625 while True:
659 while True:
626 cury = level.cury
660 cury = level.cury
627 level.moveto(level.curx, cury+1)
661 level.moveto(level.curx, cury+1)
628 if cury == level.cury:
662 if cury == level.cury:
629 curses.beep()
663 curses.beep()
630 break # hit end
664 break # hit end
631 item = level.items[level.cury].item
665 item = level.items[level.cury].item
632 try:
666 try:
633 globals = ipipe.getglobals(None)
667 globals = ipipe.getglobals(None)
634 if eval(self.input, globals, ipipe.AttrNamespace(item)):
668 if eval(self.input, globals, ipipe.AttrNamespace(item)):
635 break # found something
669 break # found something
636 except (KeyboardInterrupt, SystemExit):
670 except (KeyboardInterrupt, SystemExit):
637 raise
671 raise
638 except Exception, exc:
672 except Exception, exc:
639 browser.report(exc)
673 browser.report(exc)
640 curses.beep()
674 curses.beep()
641 break # break on error
675 break # break on error
642 browser.mode = "default"
676 browser.mode = "default"
643 return True
677 return True
644
678
645
679
646 class _CommandFindBackwards(_CommandInput):
680 class _CommandFindBackwards(_CommandInput):
647 def __init__(self):
681 def __init__(self):
648 _CommandInput.__init__(self, "find backwards expression")
682 _CommandInput.__init__(self, "find backwards expression")
649
683
650 def cmd_execute(self, browser):
684 def cmd_execute(self, browser):
651 level = browser.levels[-1]
685 level = browser.levels[-1]
652 if self.input:
686 if self.input:
653 self.dohistory()
687 self.dohistory()
654 while level.cury:
688 while level.cury:
655 level.moveto(level.curx, level.cury-1)
689 level.moveto(level.curx, level.cury-1)
656 item = level.items[level.cury].item
690 item = level.items[level.cury].item
657 try:
691 try:
658 globals = ipipe.getglobals(None)
692 globals = ipipe.getglobals(None)
659 if eval(self.input, globals, ipipe.AttrNamespace(item)):
693 if eval(self.input, globals, ipipe.AttrNamespace(item)):
660 break # found something
694 break # found something
661 except (KeyboardInterrupt, SystemExit):
695 except (KeyboardInterrupt, SystemExit):
662 raise
696 raise
663 except Exception, exc:
697 except Exception, exc:
664 browser.report(exc)
698 browser.report(exc)
665 curses.beep()
699 curses.beep()
666 break # break on error
700 break # break on error
667 else:
701 else:
668 curses.beep()
702 curses.beep()
669 browser.mode = "default"
703 browser.mode = "default"
670 return True
704 return True
671
705
672
706
673 class ibrowse(ipipe.Display):
707 class ibrowse(ipipe.Display):
674 # Show this many lines from the previous screen when paging horizontally
708 # Show this many lines from the previous screen when paging horizontally
675 pageoverlapx = 1
709 pageoverlapx = 1
676
710
677 # Show this many lines from the previous screen when paging vertically
711 # Show this many lines from the previous screen when paging vertically
678 pageoverlapy = 1
712 pageoverlapy = 1
679
713
680 # Start scrolling when the cursor is less than this number of columns
714 # Start scrolling when the cursor is less than this number of columns
681 # away from the left or right screen edge
715 # away from the left or right screen edge
682 scrollborderx = 10
716 scrollborderx = 10
683
717
684 # Start scrolling when the cursor is less than this number of lines
718 # Start scrolling when the cursor is less than this number of lines
685 # away from the top or bottom screen edge
719 # away from the top or bottom screen edge
686 scrollbordery = 5
720 scrollbordery = 5
687
721
688 # Accelerate by this factor when scrolling horizontally
722 # Accelerate by this factor when scrolling horizontally
689 acceleratex = 1.05
723 acceleratex = 1.05
690
724
691 # Accelerate by this factor when scrolling vertically
725 # Accelerate by this factor when scrolling vertically
692 acceleratey = 1.05
726 acceleratey = 1.05
693
727
694 # The maximum horizontal scroll speed
728 # The maximum horizontal scroll speed
695 # (as a factor of the screen width (i.e. 0.5 == half a screen width)
729 # (as a factor of the screen width (i.e. 0.5 == half a screen width)
696 maxspeedx = 0.5
730 maxspeedx = 0.5
697
731
698 # The maximum vertical scroll speed
732 # The maximum vertical scroll speed
699 # (as a factor of the screen height (i.e. 0.5 == half a screen height)
733 # (as a factor of the screen height (i.e. 0.5 == half a screen height)
700 maxspeedy = 0.5
734 maxspeedy = 0.5
701
735
702 # The maximum number of header lines for browser level
736 # The maximum number of header lines for browser level
703 # if the nesting is deeper, only the innermost levels are displayed
737 # if the nesting is deeper, only the innermost levels are displayed
704 maxheaders = 5
738 maxheaders = 5
705
739
706 # The approximate maximum length of a column entry
740 # The approximate maximum length of a column entry
707 maxattrlength = 200
741 maxattrlength = 200
708
742
709 # Styles for various parts of the GUI
743 # Styles for various parts of the GUI
710 style_objheadertext = astyle.Style.fromstr("white:black:bold|reverse")
744 style_objheadertext = astyle.Style.fromstr("white:black:bold|reverse")
711 style_objheadernumber = astyle.Style.fromstr("white:blue:bold|reverse")
745 style_objheadernumber = astyle.Style.fromstr("white:blue:bold|reverse")
712 style_objheaderobject = astyle.Style.fromstr("white:black:reverse")
746 style_objheaderobject = astyle.Style.fromstr("white:black:reverse")
713 style_colheader = astyle.Style.fromstr("blue:white:reverse")
747 style_colheader = astyle.Style.fromstr("blue:white:reverse")
714 style_colheaderhere = astyle.Style.fromstr("green:black:bold|reverse")
748 style_colheaderhere = astyle.Style.fromstr("green:black:bold|reverse")
715 style_colheadersep = astyle.Style.fromstr("blue:black:reverse")
749 style_colheadersep = astyle.Style.fromstr("blue:black:reverse")
716 style_number = astyle.Style.fromstr("blue:white:reverse")
750 style_number = astyle.Style.fromstr("blue:white:reverse")
717 style_numberhere = astyle.Style.fromstr("green:black:bold|reverse")
751 style_numberhere = astyle.Style.fromstr("green:black:bold|reverse")
718 style_sep = astyle.Style.fromstr("blue:black")
752 style_sep = astyle.Style.fromstr("blue:black")
719 style_data = astyle.Style.fromstr("white:black")
753 style_data = astyle.Style.fromstr("white:black")
720 style_datapad = astyle.Style.fromstr("blue:black:bold")
754 style_datapad = astyle.Style.fromstr("blue:black:bold")
721 style_footer = astyle.Style.fromstr("black:white")
755 style_footer = astyle.Style.fromstr("black:white")
722 style_report = astyle.Style.fromstr("white:black")
756 style_report = astyle.Style.fromstr("white:black")
723
757
724 # Column separator in header
758 # Column separator in header
725 headersepchar = "|"
759 headersepchar = "|"
726
760
727 # Character for padding data cell entries
761 # Character for padding data cell entries
728 datapadchar = "."
762 datapadchar = "."
729
763
730 # Column separator in data area
764 # Column separator in data area
731 datasepchar = "|"
765 datasepchar = "|"
732
766
733 # Character to use for "empty" cell (i.e. for non-existing attributes)
767 # Character to use for "empty" cell (i.e. for non-existing attributes)
734 nodatachar = "-"
768 nodatachar = "-"
735
769
736 # Prompts for modes that require keyboard input
770 # Prompts for modes that require keyboard input
737 prompts = {
771 prompts = {
738 "goto": _CommandGoto(),
772 "goto": _CommandGoto(),
739 "find": _CommandFind(),
773 "find": _CommandFind(),
740 "findbackwards": _CommandFindBackwards()
774 "findbackwards": _CommandFindBackwards()
741 }
775 }
742
776
743 # Maps curses key codes to "function" names
777 # Maps curses key codes to "function" names
744 keymap = {
778 keymap = {
745 ord("q"): "quit",
779 ord("q"): "quit",
746 curses.KEY_UP: "up",
780 curses.KEY_UP: "up",
747 curses.KEY_DOWN: "down",
781 curses.KEY_DOWN: "down",
748 curses.KEY_PPAGE: "pageup",
782 curses.KEY_PPAGE: "pageup",
749 curses.KEY_NPAGE: "pagedown",
783 curses.KEY_NPAGE: "pagedown",
750 curses.KEY_LEFT: "left",
784 curses.KEY_LEFT: "left",
751 curses.KEY_RIGHT: "right",
785 curses.KEY_RIGHT: "right",
752 curses.KEY_HOME: "home",
786 curses.KEY_HOME: "home",
753 1: "home",
787 1: "home",
754 curses.KEY_END: "end",
788 curses.KEY_END: "end",
755 5: "end",
789 5: "end",
756 ord("<"): "prevattr",
790 ord("<"): "prevattr",
757 0x1b: "prevattr", # SHIFT-TAB
791 0x1b: "prevattr", # SHIFT-TAB
758 ord(">"): "nextattr",
792 ord(">"): "nextattr",
759 ord("\t"):"nextattr", # TAB
793 ord("\t"):"nextattr", # TAB
760 ord("p"): "pick",
794 ord("p"): "pick",
761 ord("P"): "pickattr",
795 ord("P"): "pickattr",
762 ord("C"): "pickallattrs",
796 ord("C"): "pickallattrs",
763 ord("m"): "pickmarked",
797 ord("m"): "pickmarked",
764 ord("M"): "pickmarkedattr",
798 ord("M"): "pickmarkedattr",
765 ord("\n"): "enterdefault",
799 ord("\n"): "enterdefault",
766 ord("\r"): "enterdefault",
800 ord("\r"): "enterdefault",
767 # FIXME: What's happening here?
801 # FIXME: What's happening here?
768 8: "leave",
802 8: "leave",
769 127: "leave",
803 127: "leave",
770 curses.KEY_BACKSPACE: "leave",
804 curses.KEY_BACKSPACE: "leave",
771 ord("x"): "leave",
805 ord("x"): "leave",
772 ord("h"): "hideattr",
806 ord("h"): "hideattr",
773 ord("H"): "unhideattrs",
807 ord("H"): "unhideattrs",
774 ord("?"): "help",
808 ord("?"): "help",
775 ord("e"): "enter",
809 ord("e"): "enter",
776 ord("E"): "enterattr",
810 ord("E"): "enterattr",
777 ord("d"): "detail",
811 ord("d"): "detail",
778 ord("D"): "detailattr",
812 ord("D"): "detailattr",
779 ord(" "): "tooglemark",
813 ord(" "): "tooglemark",
780 ord("r"): "markrange",
814 ord("r"): "markrange",
781 ord("v"): "sortattrasc",
815 ord("v"): "sortattrasc",
782 ord("V"): "sortattrdesc",
816 ord("V"): "sortattrdesc",
783 ord("g"): "goto",
817 ord("g"): "goto",
784 ord("f"): "find",
818 ord("f"): "find",
785 ord("b"): "findbackwards",
819 ord("b"): "findbackwards",
786 }
820 }
787
821
788 def __init__(self, *attrs):
822 def __init__(self, *attrs):
789 """
823 """
790 Create a new browser. If ``attrs`` is not empty, it is the list
824 Create a new browser. If ``attrs`` is not empty, it is the list
791 of attributes that will be displayed in the browser, otherwise
825 of attributes that will be displayed in the browser, otherwise
792 these will be determined by the objects on screen.
826 these will be determined by the objects on screen.
793 """
827 """
794 self.attrs = attrs
828 self.attrs = attrs
795
829
796 # Stack of browser levels
830 # Stack of browser levels
797 self.levels = []
831 self.levels = []
798 # how many colums to scroll (Changes when accelerating)
832 # how many colums to scroll (Changes when accelerating)
799 self.stepx = 1.
833 self.stepx = 1.
800
834
801 # how many rows to scroll (Changes when accelerating)
835 # how many rows to scroll (Changes when accelerating)
802 self.stepy = 1.
836 self.stepy = 1.
803
837
804 # Beep on the edges of the data area? (Will be set to ``False``
838 # Beep on the edges of the data area? (Will be set to ``False``
805 # once the cursor hits the edge of the screen, so we don't get
839 # once the cursor hits the edge of the screen, so we don't get
806 # multiple beeps).
840 # multiple beeps).
807 self._dobeep = True
841 self._dobeep = True
808
842
809 # Cache for registered ``curses`` colors and styles.
843 # Cache for registered ``curses`` colors and styles.
810 self._styles = {}
844 self._styles = {}
811 self._colors = {}
845 self._colors = {}
812 self._maxcolor = 1
846 self._maxcolor = 1
813
847
814 # How many header lines do we want to paint (the numbers of levels
848 # How many header lines do we want to paint (the numbers of levels
815 # we have, but with an upper bound)
849 # we have, but with an upper bound)
816 self._headerlines = 1
850 self._headerlines = 1
817
851
818 # Index of first header line
852 # Index of first header line
819 self._firstheaderline = 0
853 self._firstheaderline = 0
820
854
821 # curses window
855 # curses window
822 self.scr = None
856 self.scr = None
823 # report in the footer line (error, executed command etc.)
857 # report in the footer line (error, executed command etc.)
824 self._report = None
858 self._report = None
825
859
826 # value to be returned to the caller (set by commands)
860 # value to be returned to the caller (set by commands)
827 self.returnvalue = None
861 self.returnvalue = None
828
862
829 # The mode the browser is in
863 # The mode the browser is in
830 # e.g. normal browsing or entering an argument for a command
864 # e.g. normal browsing or entering an argument for a command
831 self.mode = "default"
865 self.mode = "default"
832
866
833 def nextstepx(self, step):
867 def nextstepx(self, step):
834 """
868 """
835 Accelerate horizontally.
869 Accelerate horizontally.
836 """
870 """
837 return max(1., min(step*self.acceleratex,
871 return max(1., min(step*self.acceleratex,
838 self.maxspeedx*self.levels[-1].mainsizex))
872 self.maxspeedx*self.levels[-1].mainsizex))
839
873
840 def nextstepy(self, step):
874 def nextstepy(self, step):
841 """
875 """
842 Accelerate vertically.
876 Accelerate vertically.
843 """
877 """
844 return max(1., min(step*self.acceleratey,
878 return max(1., min(step*self.acceleratey,
845 self.maxspeedy*self.levels[-1].mainsizey))
879 self.maxspeedy*self.levels[-1].mainsizey))
846
880
847 def getstyle(self, style):
881 def getstyle(self, style):
848 """
882 """
849 Register the ``style`` with ``curses`` or get it from the cache,
883 Register the ``style`` with ``curses`` or get it from the cache,
850 if it has been registered before.
884 if it has been registered before.
851 """
885 """
852 try:
886 try:
853 return self._styles[style.fg, style.bg, style.attrs]
887 return self._styles[style.fg, style.bg, style.attrs]
854 except KeyError:
888 except KeyError:
855 attrs = 0
889 attrs = 0
856 for b in astyle.A2CURSES:
890 for b in astyle.A2CURSES:
857 if style.attrs & b:
891 if style.attrs & b:
858 attrs |= astyle.A2CURSES[b]
892 attrs |= astyle.A2CURSES[b]
859 try:
893 try:
860 color = self._colors[style.fg, style.bg]
894 color = self._colors[style.fg, style.bg]
861 except KeyError:
895 except KeyError:
862 curses.init_pair(
896 curses.init_pair(
863 self._maxcolor,
897 self._maxcolor,
864 astyle.COLOR2CURSES[style.fg],
898 astyle.COLOR2CURSES[style.fg],
865 astyle.COLOR2CURSES[style.bg]
899 astyle.COLOR2CURSES[style.bg]
866 )
900 )
867 color = curses.color_pair(self._maxcolor)
901 color = curses.color_pair(self._maxcolor)
868 self._colors[style.fg, style.bg] = color
902 self._colors[style.fg, style.bg] = color
869 self._maxcolor += 1
903 self._maxcolor += 1
870 c = color | attrs
904 c = color | attrs
871 self._styles[style.fg, style.bg, style.attrs] = c
905 self._styles[style.fg, style.bg, style.attrs] = c
872 return c
906 return c
873
907
874 def addstr(self, y, x, begx, endx, text, style):
908 def addstr(self, y, x, begx, endx, text, style):
875 """
909 """
876 A version of ``curses.addstr()`` that can handle ``x`` coordinates
910 A version of ``curses.addstr()`` that can handle ``x`` coordinates
877 that are outside the screen.
911 that are outside the screen.
878 """
912 """
879 text2 = text[max(0, begx-x):max(0, endx-x)]
913 text2 = text[max(0, begx-x):max(0, endx-x)]
880 if text2:
914 if text2:
881 self.scr.addstr(y, max(x, begx), text2, self.getstyle(style))
915 self.scr.addstr(y, max(x, begx), text2, self.getstyle(style))
882 return len(text)
916 return len(text)
883
917
884 def addchr(self, y, x, begx, endx, c, l, style):
918 def addchr(self, y, x, begx, endx, c, l, style):
885 x0 = max(x, begx)
919 x0 = max(x, begx)
886 x1 = min(x+l, endx)
920 x1 = min(x+l, endx)
887 if x1>x0:
921 if x1>x0:
888 self.scr.addstr(y, x0, c*(x1-x0), self.getstyle(style))
922 self.scr.addstr(y, x0, c*(x1-x0), self.getstyle(style))
889 return l
923 return l
890
924
891 def _calcheaderlines(self, levels):
925 def _calcheaderlines(self, levels):
892 # Calculate how many headerlines do we have to display, if we have
926 # Calculate how many headerlines do we have to display, if we have
893 # ``levels`` browser levels
927 # ``levels`` browser levels
894 if levels is None:
928 if levels is None:
895 levels = len(self.levels)
929 levels = len(self.levels)
896 self._headerlines = min(self.maxheaders, levels)
930 self._headerlines = min(self.maxheaders, levels)
897 self._firstheaderline = levels-self._headerlines
931 self._firstheaderline = levels-self._headerlines
898
932
899 def getstylehere(self, style):
933 def getstylehere(self, style):
900 """
934 """
901 Return a style for displaying the original style ``style``
935 Return a style for displaying the original style ``style``
902 in the row the cursor is on.
936 in the row the cursor is on.
903 """
937 """
904 return astyle.Style(style.fg, style.bg, style.attrs | astyle.A_BOLD)
938 return astyle.Style(style.fg, style.bg, style.attrs | astyle.A_BOLD)
905
939
906 def report(self, msg):
940 def report(self, msg):
907 """
941 """
908 Store the message ``msg`` for display below the footer line. This
942 Store the message ``msg`` for display below the footer line. This
909 will be displayed as soon as the screen is redrawn.
943 will be displayed as soon as the screen is redrawn.
910 """
944 """
911 self._report = msg
945 self._report = msg
912
946
913 def enter(self, item, mode, *attrs):
947 def enter(self, item, mode, *attrs):
914 """
948 """
915 Enter the object ``item`` in the mode ``mode``. If ``attrs`` is
949 Enter the object ``item`` in the mode ``mode``. If ``attrs`` is
916 specified, it will be used as a fixed list of attributes to display.
950 specified, it will be used as a fixed list of attributes to display.
917 """
951 """
918 try:
952 try:
919 iterator = ipipe.xiter(item, mode)
953 iterator = ipipe.xiter(item, mode)
920 except (KeyboardInterrupt, SystemExit):
954 except (KeyboardInterrupt, SystemExit):
921 raise
955 raise
922 except Exception, exc:
956 except Exception, exc:
923 curses.beep()
957 curses.beep()
924 self.report(exc)
958 self.report(exc)
925 else:
959 else:
926 self._calcheaderlines(len(self.levels)+1)
960 self._calcheaderlines(len(self.levels)+1)
927 level = _BrowserLevel(
961 level = _BrowserLevel(
928 self,
962 self,
929 item,
963 item,
930 iterator,
964 iterator,
931 self.scrsizey-1-self._headerlines-2,
965 self.scrsizey-1-self._headerlines-2,
932 *attrs
966 *attrs
933 )
967 )
934 self.levels.append(level)
968 self.levels.append(level)
935
969
936 def startkeyboardinput(self, mode):
970 def startkeyboardinput(self, mode):
937 """
971 """
938 Enter mode ``mode``, which requires keyboard input.
972 Enter mode ``mode``, which requires keyboard input.
939 """
973 """
940 self.mode = mode
974 self.mode = mode
941 self.prompts[mode].start()
975 self.prompts[mode].start()
942
976
943 def keylabel(self, keycode):
977 def keylabel(self, keycode):
944 """
978 """
945 Return a pretty name for the ``curses`` key ``keycode`` (used in the
979 Return a pretty name for the ``curses`` key ``keycode`` (used in the
946 help screen and in reports about unassigned keys).
980 help screen and in reports about unassigned keys).
947 """
981 """
948 if keycode <= 0xff:
982 if keycode <= 0xff:
949 specialsnames = {
983 specialsnames = {
950 ord("\n"): "RETURN",
984 ord("\n"): "RETURN",
951 ord(" "): "SPACE",
985 ord(" "): "SPACE",
952 ord("\t"): "TAB",
986 ord("\t"): "TAB",
953 ord("\x7f"): "DELETE",
987 ord("\x7f"): "DELETE",
954 ord("\x08"): "BACKSPACE",
988 ord("\x08"): "BACKSPACE",
955 }
989 }
956 if keycode in specialsnames:
990 if keycode in specialsnames:
957 return specialsnames[keycode]
991 return specialsnames[keycode]
958 elif 0x00 < keycode < 0x20:
992 elif 0x00 < keycode < 0x20:
959 return "CTRL-%s" % chr(keycode + 64)
993 return "CTRL-%s" % chr(keycode + 64)
960 return repr(chr(keycode))
994 return repr(chr(keycode))
961 for name in dir(curses):
995 for name in dir(curses):
962 if name.startswith("KEY_") and getattr(curses, name) == keycode:
996 if name.startswith("KEY_") and getattr(curses, name) == keycode:
963 return name
997 return name
964 return str(keycode)
998 return str(keycode)
965
999
966 def beep(self, force=False):
1000 def beep(self, force=False):
967 if force or self._dobeep:
1001 if force or self._dobeep:
968 curses.beep()
1002 curses.beep()
969 # don't beep again (as long as the same key is pressed)
1003 # don't beep again (as long as the same key is pressed)
970 self._dobeep = False
1004 self._dobeep = False
971
1005
972 def cmd_quit(self):
1006 def cmd_quit(self):
973 self.returnvalue = None
1007 self.returnvalue = None
974 return True
1008 return True
975
1009
976 def cmd_up(self):
1010 def cmd_up(self):
977 level = self.levels[-1]
1011 level = self.levels[-1]
978 self.report("up")
1012 self.report("up")
979 level.moveto(level.curx, level.cury-self.stepy)
1013 level.moveto(level.curx, level.cury-self.stepy)
980
1014
981 def cmd_down(self):
1015 def cmd_down(self):
982 level = self.levels[-1]
1016 level = self.levels[-1]
983 self.report("down")
1017 self.report("down")
984 level.moveto(level.curx, level.cury+self.stepy)
1018 level.moveto(level.curx, level.cury+self.stepy)
985
1019
986 def cmd_pageup(self):
1020 def cmd_pageup(self):
987 level = self.levels[-1]
1021 level = self.levels[-1]
988 self.report("page up")
1022 self.report("page up")
989 level.moveto(level.curx, level.cury-level.mainsizey+self.pageoverlapy)
1023 level.moveto(level.curx, level.cury-level.mainsizey+self.pageoverlapy)
990
1024
991 def cmd_pagedown(self):
1025 def cmd_pagedown(self):
992 level = self.levels[-1]
1026 level = self.levels[-1]
993 self.report("page down")
1027 self.report("page down")
994 level.moveto(level.curx, level.cury+level.mainsizey-self.pageoverlapy)
1028 level.moveto(level.curx, level.cury+level.mainsizey-self.pageoverlapy)
995
1029
996 def cmd_left(self):
1030 def cmd_left(self):
997 level = self.levels[-1]
1031 level = self.levels[-1]
998 self.report("left")
1032 self.report("left")
999 level.moveto(level.curx-self.stepx, level.cury)
1033 level.moveto(level.curx-self.stepx, level.cury)
1000
1034
1001 def cmd_right(self):
1035 def cmd_right(self):
1002 level = self.levels[-1]
1036 level = self.levels[-1]
1003 self.report("right")
1037 self.report("right")
1004 level.moveto(level.curx+self.stepx, level.cury)
1038 level.moveto(level.curx+self.stepx, level.cury)
1005
1039
1006 def cmd_home(self):
1040 def cmd_home(self):
1007 level = self.levels[-1]
1041 level = self.levels[-1]
1008 self.report("home")
1042 self.report("home")
1009 level.moveto(0, level.cury)
1043 level.moveto(0, level.cury)
1010
1044
1011 def cmd_end(self):
1045 def cmd_end(self):
1012 level = self.levels[-1]
1046 level = self.levels[-1]
1013 self.report("end")
1047 self.report("end")
1014 level.moveto(level.datasizex+level.mainsizey-self.pageoverlapx, level.cury)
1048 level.moveto(level.datasizex+level.mainsizey-self.pageoverlapx, level.cury)
1015
1049
1016 def cmd_prevattr(self):
1050 def cmd_prevattr(self):
1017 level = self.levels[-1]
1051 level = self.levels[-1]
1018 if level.displayattr[0] is None or level.displayattr[0] == 0:
1052 if level.displayattr[0] is None or level.displayattr[0] == 0:
1019 self.beep()
1053 self.beep()
1020 else:
1054 else:
1021 self.report("prevattr")
1055 self.report("prevattr")
1022 pos = 0
1056 pos = 0
1023 for (i, attrname) in enumerate(level.displayattrs):
1057 for (i, attrname) in enumerate(level.displayattrs):
1024 if i == level.displayattr[0]-1:
1058 if i == level.displayattr[0]-1:
1025 break
1059 break
1026 pos += level.colwidths[attrname] + 1
1060 pos += level.colwidths[attrname] + 1
1027 level.moveto(pos, level.cury)
1061 level.moveto(pos, level.cury)
1028
1062
1029 def cmd_nextattr(self):
1063 def cmd_nextattr(self):
1030 level = self.levels[-1]
1064 level = self.levels[-1]
1031 if level.displayattr[0] is None or level.displayattr[0] == len(level.displayattrs)-1:
1065 if level.displayattr[0] is None or level.displayattr[0] == len(level.displayattrs)-1:
1032 self.beep()
1066 self.beep()
1033 else:
1067 else:
1034 self.report("nextattr")
1068 self.report("nextattr")
1035 pos = 0
1069 pos = 0
1036 for (i, attrname) in enumerate(level.displayattrs):
1070 for (i, attrname) in enumerate(level.displayattrs):
1037 if i == level.displayattr[0]+1:
1071 if i == level.displayattr[0]+1:
1038 break
1072 break
1039 pos += level.colwidths[attrname] + 1
1073 pos += level.colwidths[attrname] + 1
1040 level.moveto(pos, level.cury)
1074 level.moveto(pos, level.cury)
1041
1075
1042 def cmd_pick(self):
1076 def cmd_pick(self):
1043 level = self.levels[-1]
1077 level = self.levels[-1]
1044 self.returnvalue = level.items[level.cury].item
1078 self.returnvalue = level.items[level.cury].item
1045 return True
1079 return True
1046
1080
1047 def cmd_pickattr(self):
1081 def cmd_pickattr(self):
1048 level = self.levels[-1]
1082 level = self.levels[-1]
1049 attrname = level.displayattr[1]
1083 attrname = level.displayattr[1]
1050 if attrname is ipipe.noitem:
1084 if attrname is ipipe.noitem:
1051 curses.beep()
1085 curses.beep()
1052 self.report(AttributeError(ipipe._attrname(attrname)))
1086 self.report(AttributeError(ipipe._attrname(attrname)))
1053 return
1087 return
1054 attr = ipipe._getattr(level.items[level.cury].item, attrname)
1088 attr = ipipe._getattr(level.items[level.cury].item, attrname)
1055 if attr is ipipe.noitem:
1089 if attr is ipipe.noitem:
1056 curses.beep()
1090 curses.beep()
1057 self.report(AttributeError(ipipe._attrname(attrname)))
1091 self.report(AttributeError(ipipe._attrname(attrname)))
1058 else:
1092 else:
1059 self.returnvalue = attr
1093 self.returnvalue = attr
1060 return True
1094 return True
1061
1095
1062 def cmd_pickallattrs(self):
1096 def cmd_pickallattrs(self):
1063 level = self.levels[-1]
1097 level = self.levels[-1]
1064 attrname = level.displayattr[1]
1098 attrname = level.displayattr[1]
1065 if attrname is ipipe.noitem:
1099 if attrname is ipipe.noitem:
1066 curses.beep()
1100 curses.beep()
1067 self.report(AttributeError(ipipe._attrname(attrname)))
1101 self.report(AttributeError(ipipe._attrname(attrname)))
1068 return
1102 return
1069 result = []
1103 result = []
1070 for cache in level.items:
1104 for cache in level.items:
1071 attr = ipipe._getattr(cache.item, attrname)
1105 attr = ipipe._getattr(cache.item, attrname)
1072 if attr is not ipipe.noitem:
1106 if attr is not ipipe.noitem:
1073 result.append(attr)
1107 result.append(attr)
1074 self.returnvalue = result
1108 self.returnvalue = result
1075 return True
1109 return True
1076
1110
1077 def cmd_pickmarked(self):
1111 def cmd_pickmarked(self):
1078 level = self.levels[-1]
1112 level = self.levels[-1]
1079 self.returnvalue = [cache.item for cache in level.items if cache.marked]
1113 self.returnvalue = [cache.item for cache in level.items if cache.marked]
1080 return True
1114 return True
1081
1115
1082 def cmd_pickmarkedattr(self):
1116 def cmd_pickmarkedattr(self):
1083 level = self.levels[-1]
1117 level = self.levels[-1]
1084 attrname = level.displayattr[1]
1118 attrname = level.displayattr[1]
1085 if attrname is ipipe.noitem:
1119 if attrname is ipipe.noitem:
1086 curses.beep()
1120 curses.beep()
1087 self.report(AttributeError(ipipe._attrname(attrname)))
1121 self.report(AttributeError(ipipe._attrname(attrname)))
1088 return
1122 return
1089 result = []
1123 result = []
1090 for cache in level.items:
1124 for cache in level.items:
1091 if cache.marked:
1125 if cache.marked:
1092 attr = ipipe._getattr(cache.item, attrname)
1126 attr = ipipe._getattr(cache.item, attrname)
1093 if attr is not ipipe.noitem:
1127 if attr is not ipipe.noitem:
1094 result.append(attr)
1128 result.append(attr)
1095 self.returnvalue = result
1129 self.returnvalue = result
1096 return True
1130 return True
1097
1131
1098 def cmd_markrange(self):
1132 def cmd_markrange(self):
1099 level = self.levels[-1]
1133 level = self.levels[-1]
1100 self.report("markrange")
1134 self.report("markrange")
1101 start = None
1135 start = None
1102 if level.items:
1136 if level.items:
1103 for i in xrange(level.cury, -1, -1):
1137 for i in xrange(level.cury, -1, -1):
1104 if level.items[i].marked:
1138 if level.items[i].marked:
1105 start = i
1139 start = i
1106 break
1140 break
1107 if start is None:
1141 if start is None:
1108 self.report(CommandError("no mark before cursor"))
1142 self.report(CommandError("no mark before cursor"))
1109 curses.beep()
1143 curses.beep()
1110 else:
1144 else:
1111 for i in xrange(start, level.cury+1):
1145 for i in xrange(start, level.cury+1):
1112 cache = level.items[i]
1146 cache = level.items[i]
1113 if not cache.marked:
1147 if not cache.marked:
1114 cache.marked = True
1148 cache.marked = True
1115 level.marked += 1
1149 level.marked += 1
1116
1150
1117 def cmd_enterdefault(self):
1151 def cmd_enterdefault(self):
1118 level = self.levels[-1]
1152 level = self.levels[-1]
1119 try:
1153 try:
1120 item = level.items[level.cury].item
1154 item = level.items[level.cury].item
1121 except IndexError:
1155 except IndexError:
1122 self.report(CommandError("No object"))
1156 self.report(CommandError("No object"))
1123 curses.beep()
1157 curses.beep()
1124 else:
1158 else:
1125 self.report("entering object (default mode)...")
1159 self.report("entering object (default mode)...")
1126 self.enter(item, "default")
1160 self.enter(item, "default")
1127
1161
1128 def cmd_leave(self):
1162 def cmd_leave(self):
1129 self.report("leave")
1163 self.report("leave")
1130 if len(self.levels) > 1:
1164 if len(self.levels) > 1:
1131 self._calcheaderlines(len(self.levels)-1)
1165 self._calcheaderlines(len(self.levels)-1)
1132 self.levels.pop(-1)
1166 self.levels.pop(-1)
1133 else:
1167 else:
1134 self.report(CommandError("This is the last level"))
1168 self.report(CommandError("This is the last level"))
1135 curses.beep()
1169 curses.beep()
1136
1170
1137 def cmd_enter(self):
1171 def cmd_enter(self):
1138 level = self.levels[-1]
1172 level = self.levels[-1]
1139 try:
1173 try:
1140 item = level.items[level.cury].item
1174 item = level.items[level.cury].item
1141 except IndexError:
1175 except IndexError:
1142 self.report(CommandError("No object"))
1176 self.report(CommandError("No object"))
1143 curses.beep()
1177 curses.beep()
1144 else:
1178 else:
1145 self.report("entering object...")
1179 self.report("entering object...")
1146 self.enter(item, None)
1180 self.enter(item, None)
1147
1181
1148 def cmd_enterattr(self):
1182 def cmd_enterattr(self):
1149 level = self.levels[-1]
1183 level = self.levels[-1]
1150 attrname = level.displayattr[1]
1184 attrname = level.displayattr[1]
1151 if attrname is ipipe.noitem:
1185 if attrname is ipipe.noitem:
1152 curses.beep()
1186 curses.beep()
1153 self.report(AttributeError(ipipe._attrname(attrname)))
1187 self.report(AttributeError(ipipe._attrname(attrname)))
1154 return
1188 return
1155 try:
1189 try:
1156 item = level.items[level.cury].item
1190 item = level.items[level.cury].item
1157 except IndexError:
1191 except IndexError:
1158 self.report(CommandError("No object"))
1192 self.report(CommandError("No object"))
1159 curses.beep()
1193 curses.beep()
1160 else:
1194 else:
1161 attr = ipipe._getattr(item, attrname)
1195 attr = ipipe._getattr(item, attrname)
1162 if attr is ipipe.noitem:
1196 if attr is ipipe.noitem:
1163 self.report(AttributeError(ipipe._attrname(attrname)))
1197 self.report(AttributeError(ipipe._attrname(attrname)))
1164 else:
1198 else:
1165 self.report("entering object attribute %s..." % ipipe._attrname(attrname))
1199 self.report("entering object attribute %s..." % ipipe._attrname(attrname))
1166 self.enter(attr, None)
1200 self.enter(attr, None)
1167
1201
1168 def cmd_detail(self):
1202 def cmd_detail(self):
1169 level = self.levels[-1]
1203 level = self.levels[-1]
1170 try:
1204 try:
1171 item = level.items[level.cury].item
1205 item = level.items[level.cury].item
1172 except IndexError:
1206 except IndexError:
1173 self.report(CommandError("No object"))
1207 self.report(CommandError("No object"))
1174 curses.beep()
1208 curses.beep()
1175 else:
1209 else:
1176 self.report("entering detail view for object...")
1210 self.report("entering detail view for object...")
1177 self.enter(item, "detail")
1211 self.enter(item, "detail")
1178
1212
1179 def cmd_detailattr(self):
1213 def cmd_detailattr(self):
1180 level = self.levels[-1]
1214 level = self.levels[-1]
1181 attrname = level.displayattr[1]
1215 attrname = level.displayattr[1]
1182 if attrname is ipipe.noitem:
1216 if attrname is ipipe.noitem:
1183 curses.beep()
1217 curses.beep()
1184 self.report(AttributeError(ipipe._attrname(attrname)))
1218 self.report(AttributeError(ipipe._attrname(attrname)))
1185 return
1219 return
1186 try:
1220 try:
1187 item = level.items[level.cury].item
1221 item = level.items[level.cury].item
1188 except IndexError:
1222 except IndexError:
1189 self.report(CommandError("No object"))
1223 self.report(CommandError("No object"))
1190 curses.beep()
1224 curses.beep()
1191 else:
1225 else:
1192 attr = ipipe._getattr(item, attrname)
1226 attr = ipipe._getattr(item, attrname)
1193 if attr is ipipe.noitem:
1227 if attr is ipipe.noitem:
1194 self.report(AttributeError(ipipe._attrname(attrname)))
1228 self.report(AttributeError(ipipe._attrname(attrname)))
1195 else:
1229 else:
1196 self.report("entering detail view for attribute...")
1230 self.report("entering detail view for attribute...")
1197 self.enter(attr, "detail")
1231 self.enter(attr, "detail")
1198
1232
1199 def cmd_tooglemark(self):
1233 def cmd_tooglemark(self):
1200 level = self.levels[-1]
1234 level = self.levels[-1]
1201 self.report("toggle mark")
1235 self.report("toggle mark")
1202 try:
1236 try:
1203 item = level.items[level.cury]
1237 item = level.items[level.cury]
1204 except IndexError: # no items?
1238 except IndexError: # no items?
1205 pass
1239 pass
1206 else:
1240 else:
1207 if item.marked:
1241 if item.marked:
1208 item.marked = False
1242 item.marked = False
1209 level.marked -= 1
1243 level.marked -= 1
1210 else:
1244 else:
1211 item.marked = True
1245 item.marked = True
1212 level.marked += 1
1246 level.marked += 1
1213
1247
1214 def cmd_sortattrasc(self):
1248 def cmd_sortattrasc(self):
1215 level = self.levels[-1]
1249 level = self.levels[-1]
1216 attrname = level.displayattr[1]
1250 attrname = level.displayattr[1]
1217 if attrname is ipipe.noitem:
1251 if attrname is ipipe.noitem:
1218 curses.beep()
1252 curses.beep()
1219 self.report(AttributeError(ipipe._attrname(attrname)))
1253 self.report(AttributeError(ipipe._attrname(attrname)))
1220 return
1254 return
1221 self.report("sort by %s (ascending)" % ipipe._attrname(attrname))
1255 self.report("sort by %s (ascending)" % ipipe._attrname(attrname))
1222 def key(item):
1256 def key(item):
1223 try:
1257 try:
1224 return ipipe._getattr(item, attrname, None)
1258 return ipipe._getattr(item, attrname, None)
1225 except (KeyboardInterrupt, SystemExit):
1259 except (KeyboardInterrupt, SystemExit):
1226 raise
1260 raise
1227 except Exception:
1261 except Exception:
1228 return None
1262 return None
1229 level.sort(key)
1263 level.sort(key)
1230
1264
1231 def cmd_sortattrdesc(self):
1265 def cmd_sortattrdesc(self):
1232 level = self.levels[-1]
1266 level = self.levels[-1]
1233 attrname = level.displayattr[1]
1267 attrname = level.displayattr[1]
1234 if attrname is ipipe.noitem:
1268 if attrname is ipipe.noitem:
1235 curses.beep()
1269 curses.beep()
1236 self.report(AttributeError(ipipe._attrname(attrname)))
1270 self.report(AttributeError(ipipe._attrname(attrname)))
1237 return
1271 return
1238 self.report("sort by %s (descending)" % ipipe._attrname(attrname))
1272 self.report("sort by %s (descending)" % ipipe._attrname(attrname))
1239 def key(item):
1273 def key(item):
1240 try:
1274 try:
1241 return ipipe._getattr(item, attrname, None)
1275 return ipipe._getattr(item, attrname, None)
1242 except (KeyboardInterrupt, SystemExit):
1276 except (KeyboardInterrupt, SystemExit):
1243 raise
1277 raise
1244 except Exception:
1278 except Exception:
1245 return None
1279 return None
1246 level.sort(key, reverse=True)
1280 level.sort(key, reverse=True)
1247
1281
1248 def cmd_goto(self):
1282 def cmd_goto(self):
1249 self.startkeyboardinput("goto")
1283 self.startkeyboardinput("goto")
1250
1284
1251 def cmd_find(self):
1285 def cmd_find(self):
1252 self.startkeyboardinput("find")
1286 self.startkeyboardinput("find")
1253
1287
1254 def cmd_findbackwards(self):
1288 def cmd_findbackwards(self):
1255 self.startkeyboardinput("findbackwards")
1289 self.startkeyboardinput("findbackwards")
1256
1290
1257 def cmd_help(self):
1291 def cmd_help(self):
1258 """
1292 """
1259 The help command
1293 The help command
1260 """
1294 """
1261 for level in self.levels:
1295 for level in self.levels:
1262 if isinstance(level.input, _BrowserHelp):
1296 if isinstance(level.input, _BrowserHelp):
1263 curses.beep()
1297 curses.beep()
1264 self.report(CommandError("help already active"))
1298 self.report(CommandError("help already active"))
1265 return
1299 return
1266
1300
1267 self.enter(_BrowserHelp(self), "default")
1301 self.enter(_BrowserHelp(self), "default")
1268
1302
1269 def cmd_hideattr(self):
1303 def cmd_hideattr(self):
1270 level = self.levels[-1]
1304 level = self.levels[-1]
1271 if level.displayattr[0] is None:
1305 if level.displayattr[0] is None:
1272 self.beep()
1306 self.beep()
1273 else:
1307 else:
1274 self.report("hideattr")
1308 self.report("hideattr")
1275 level.hiddenattrs.add(level.displayattr[1])
1309 level.hiddenattrs.add(level.displayattr[1])
1276 level.moveto(level.curx, level.cury, refresh=True)
1310 level.moveto(level.curx, level.cury, refresh=True)
1277
1311
1278 def cmd_unhideattrs(self):
1312 def cmd_unhideattrs(self):
1279 level = self.levels[-1]
1313 level = self.levels[-1]
1280 self.report("unhideattrs")
1314 self.report("unhideattrs")
1281 level.hiddenattrs.clear()
1315 level.hiddenattrs.clear()
1282 level.moveto(level.curx, level.cury, refresh=True)
1316 level.moveto(level.curx, level.cury, refresh=True)
1283
1317
1284 def _dodisplay(self, scr):
1318 def _dodisplay(self, scr):
1285 """
1319 """
1286 This method is the workhorse of the browser. It handles screen
1320 This method is the workhorse of the browser. It handles screen
1287 drawing and the keyboard.
1321 drawing and the keyboard.
1288 """
1322 """
1289 self.scr = scr
1323 self.scr = scr
1290 curses.halfdelay(1)
1324 curses.halfdelay(1)
1291 footery = 2
1325 footery = 2
1292
1326
1293 keys = []
1327 keys = []
1294 for (key, cmd) in self.keymap.iteritems():
1328 for (key, cmd) in self.keymap.iteritems():
1295 if cmd == "quit":
1329 if cmd == "quit":
1296 keys.append("%s=%s" % (self.keylabel(key), cmd))
1330 keys.append("%s=%s" % (self.keylabel(key), cmd))
1297 for (key, cmd) in self.keymap.iteritems():
1331 for (key, cmd) in self.keymap.iteritems():
1298 if cmd == "help":
1332 if cmd == "help":
1299 keys.append("%s=%s" % (self.keylabel(key), cmd))
1333 keys.append("%s=%s" % (self.keylabel(key), cmd))
1300 helpmsg = " | %s" % " ".join(keys)
1334 helpmsg = " | %s" % " ".join(keys)
1301
1335
1302 scr.clear()
1336 scr.clear()
1303 msg = "Fetching first batch of objects..."
1337 msg = "Fetching first batch of objects..."
1304 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1338 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1305 scr.addstr(self.scrsizey//2, (self.scrsizex-len(msg))//2, msg)
1339 scr.addstr(self.scrsizey//2, (self.scrsizex-len(msg))//2, msg)
1306 scr.refresh()
1340 scr.refresh()
1307
1341
1308 lastc = -1
1342 lastc = -1
1309
1343
1310 self.levels = []
1344 self.levels = []
1311 # enter the first level
1345 # enter the first level
1312 self.enter(self.input, ipipe.xiter(self.input, "default"), *self.attrs)
1346 self.enter(self.input, ipipe.xiter(self.input, "default"), *self.attrs)
1313
1347
1314 self._calcheaderlines(None)
1348 self._calcheaderlines(None)
1315
1349
1316 while True:
1350 while True:
1317 level = self.levels[-1]
1351 level = self.levels[-1]
1318 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1352 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1319 level.mainsizey = self.scrsizey-1-self._headerlines-footery
1353 level.mainsizey = self.scrsizey-1-self._headerlines-footery
1320
1354
1321 # Paint object header
1355 # Paint object header
1322 for i in xrange(self._firstheaderline, self._firstheaderline+self._headerlines):
1356 for i in xrange(self._firstheaderline, self._firstheaderline+self._headerlines):
1323 lv = self.levels[i]
1357 lv = self.levels[i]
1324 posx = 0
1358 posx = 0
1325 posy = i-self._firstheaderline
1359 posy = i-self._firstheaderline
1326 endx = self.scrsizex
1360 endx = self.scrsizex
1327 if i: # not the first level
1361 if i: # not the first level
1328 msg = " (%d/%d" % (self.levels[i-1].cury, len(self.levels[i-1].items))
1362 msg = " (%d/%d" % (self.levels[i-1].cury, len(self.levels[i-1].items))
1329 if not self.levels[i-1].exhausted:
1363 if not self.levels[i-1].exhausted:
1330 msg += "+"
1364 msg += "+"
1331 msg += ") "
1365 msg += ") "
1332 endx -= len(msg)+1
1366 endx -= len(msg)+1
1333 posx += self.addstr(posy, posx, 0, endx, " ibrowse #%d: " % i, self.style_objheadertext)
1367 posx += self.addstr(posy, posx, 0, endx, " ibrowse #%d: " % i, self.style_objheadertext)
1334 for (style, text) in lv.header:
1368 for (style, text) in lv.header:
1335 posx += self.addstr(posy, posx, 0, endx, text, self.style_objheaderobject)
1369 posx += self.addstr(posy, posx, 0, endx, text, self.style_objheaderobject)
1336 if posx >= endx:
1370 if posx >= endx:
1337 break
1371 break
1338 if i:
1372 if i:
1339 posx += self.addstr(posy, posx, 0, self.scrsizex, msg, self.style_objheadernumber)
1373 posx += self.addstr(posy, posx, 0, self.scrsizex, msg, self.style_objheadernumber)
1340 posx += self.addchr(posy, posx, 0, self.scrsizex, " ", self.scrsizex-posx, self.style_objheadernumber)
1374 posx += self.addchr(posy, posx, 0, self.scrsizex, " ", self.scrsizex-posx, self.style_objheadernumber)
1341
1375
1342 if not level.items:
1376 if not level.items:
1343 self.addchr(self._headerlines, 0, 0, self.scrsizex, " ", self.scrsizex, self.style_colheader)
1377 self.addchr(self._headerlines, 0, 0, self.scrsizex, " ", self.scrsizex, self.style_colheader)
1344 self.addstr(self._headerlines+1, 0, 0, self.scrsizex, " <empty>", astyle.style_error)
1378 self.addstr(self._headerlines+1, 0, 0, self.scrsizex, " <empty>", astyle.style_error)
1345 scr.clrtobot()
1379 scr.clrtobot()
1346 else:
1380 else:
1347 # Paint column headers
1381 # Paint column headers
1348 scr.move(self._headerlines, 0)
1382 scr.move(self._headerlines, 0)
1349 scr.addstr(" %*s " % (level.numbersizex, "#"), self.getstyle(self.style_colheader))
1383 scr.addstr(" %*s " % (level.numbersizex, "#"), self.getstyle(self.style_colheader))
1350 scr.addstr(self.headersepchar, self.getstyle(self.style_colheadersep))
1384 scr.addstr(self.headersepchar, self.getstyle(self.style_colheadersep))
1351 begx = level.numbersizex+3
1385 begx = level.numbersizex+3
1352 posx = begx-level.datastartx
1386 posx = begx-level.datastartx
1353 for attrname in level.displayattrs:
1387 for attrname in level.displayattrs:
1354 strattrname = ipipe._attrname(attrname)
1388 strattrname = ipipe._attrname(attrname)
1355 cwidth = level.colwidths[attrname]
1389 cwidth = level.colwidths[attrname]
1356 header = strattrname.ljust(cwidth)
1390 header = strattrname.ljust(cwidth)
1357 if attrname == level.displayattr[1]:
1391 if attrname == level.displayattr[1]:
1358 style = self.style_colheaderhere
1392 style = self.style_colheaderhere
1359 else:
1393 else:
1360 style = self.style_colheader
1394 style = self.style_colheader
1361 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, header, style)
1395 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, header, style)
1362 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, self.headersepchar, self.style_colheadersep)
1396 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, self.headersepchar, self.style_colheadersep)
1363 if posx >= self.scrsizex:
1397 if posx >= self.scrsizex:
1364 break
1398 break
1365 else:
1399 else:
1366 scr.addstr(" "*(self.scrsizex-posx), self.getstyle(self.style_colheader))
1400 scr.addstr(" "*(self.scrsizex-posx), self.getstyle(self.style_colheader))
1367
1401
1368 # Paint rows
1402 # Paint rows
1369 posy = self._headerlines+1+level.datastarty
1403 posy = self._headerlines+1+level.datastarty
1370 for i in xrange(level.datastarty, min(level.datastarty+level.mainsizey, len(level.items))):
1404 for i in xrange(level.datastarty, min(level.datastarty+level.mainsizey, len(level.items))):
1371 cache = level.items[i]
1405 cache = level.items[i]
1372 if i == level.cury:
1406 if i == level.cury:
1373 style = self.style_numberhere
1407 style = self.style_numberhere
1374 else:
1408 else:
1375 style = self.style_number
1409 style = self.style_number
1376
1410
1377 posy = self._headerlines+1+i-level.datastarty
1411 posy = self._headerlines+1+i-level.datastarty
1378 posx = begx-level.datastartx
1412 posx = begx-level.datastartx
1379
1413
1380 scr.move(posy, 0)
1414 scr.move(posy, 0)
1381 scr.addstr(" %*d%s" % (level.numbersizex, i, " !"[cache.marked]), self.getstyle(style))
1415 scr.addstr(" %*d%s" % (level.numbersizex, i, " !"[cache.marked]), self.getstyle(style))
1382 scr.addstr(self.headersepchar, self.getstyle(self.style_sep))
1416 scr.addstr(self.headersepchar, self.getstyle(self.style_sep))
1383
1417
1384 for attrname in level.displayattrs:
1418 for attrname in level.displayattrs:
1385 cwidth = level.colwidths[attrname]
1419 cwidth = level.colwidths[attrname]
1386 try:
1420 try:
1387 (align, length, parts) = level.displayrows[i-level.datastarty][attrname]
1421 (align, length, parts) = level.displayrows[i-level.datastarty][attrname]
1388 except KeyError:
1422 except KeyError:
1389 align = 2
1423 align = 2
1390 style = astyle.style_nodata
1424 style = astyle.style_nodata
1391 padstyle = self.style_datapad
1425 padstyle = self.style_datapad
1392 sepstyle = self.style_sep
1426 sepstyle = self.style_sep
1393 if i == level.cury:
1427 if i == level.cury:
1394 padstyle = self.getstylehere(padstyle)
1428 padstyle = self.getstylehere(padstyle)
1395 sepstyle = self.getstylehere(sepstyle)
1429 sepstyle = self.getstylehere(sepstyle)
1396 if align == 2:
1430 if align == 2:
1397 posx += self.addchr(posy, posx, begx, self.scrsizex, self.nodatachar, cwidth, style)
1431 posx += self.addchr(posy, posx, begx, self.scrsizex, self.nodatachar, cwidth, style)
1398 else:
1432 else:
1399 if align == 1:
1433 if align == 1:
1400 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1434 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1401 elif align == 0:
1435 elif align == 0:
1402 pad1 = (cwidth-length)//2
1436 pad1 = (cwidth-length)//2
1403 pad2 = cwidth-length-len(pad1)
1437 pad2 = cwidth-length-len(pad1)
1404 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad1, padstyle)
1438 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad1, padstyle)
1405 for (style, text) in parts:
1439 for (style, text) in parts:
1406 if i == level.cury:
1440 if i == level.cury:
1407 style = self.getstylehere(style)
1441 style = self.getstylehere(style)
1408 posx += self.addstr(posy, posx, begx, self.scrsizex, text, style)
1442 posx += self.addstr(posy, posx, begx, self.scrsizex, text, style)
1409 if posx >= self.scrsizex:
1443 if posx >= self.scrsizex:
1410 break
1444 break
1411 if align == -1:
1445 if align == -1:
1412 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1446 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1413 elif align == 0:
1447 elif align == 0:
1414 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad2, padstyle)
1448 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad2, padstyle)
1415 posx += self.addstr(posy, posx, begx, self.scrsizex, self.datasepchar, sepstyle)
1449 posx += self.addstr(posy, posx, begx, self.scrsizex, self.datasepchar, sepstyle)
1416 else:
1450 else:
1417 scr.clrtoeol()
1451 scr.clrtoeol()
1418
1452
1419 # Add blank row headers for the rest of the screen
1453 # Add blank row headers for the rest of the screen
1420 for posy in xrange(posy+1, self.scrsizey-2):
1454 for posy in xrange(posy+1, self.scrsizey-2):
1421 scr.addstr(posy, 0, " " * (level.numbersizex+2), self.getstyle(self.style_colheader))
1455 scr.addstr(posy, 0, " " * (level.numbersizex+2), self.getstyle(self.style_colheader))
1422 scr.clrtoeol()
1456 scr.clrtoeol()
1423
1457
1424 posy = self.scrsizey-footery
1458 posy = self.scrsizey-footery
1425 # Display footer
1459 # Display footer
1426 scr.addstr(posy, 0, " "*self.scrsizex, self.getstyle(self.style_footer))
1460 scr.addstr(posy, 0, " "*self.scrsizex, self.getstyle(self.style_footer))
1427
1461
1428 if level.exhausted:
1462 if level.exhausted:
1429 flag = ""
1463 flag = ""
1430 else:
1464 else:
1431 flag = "+"
1465 flag = "+"
1432
1466
1433 endx = self.scrsizex-len(helpmsg)-1
1467 endx = self.scrsizex-len(helpmsg)-1
1434 scr.addstr(posy, endx, helpmsg, self.getstyle(self.style_footer))
1468 scr.addstr(posy, endx, helpmsg, self.getstyle(self.style_footer))
1435
1469
1436 posx = 0
1470 posx = 0
1437 msg = " %d%s objects (%d marked): " % (len(level.items), flag, level.marked)
1471 msg = " %d%s objects (%d marked): " % (len(level.items), flag, level.marked)
1438 posx += self.addstr(posy, posx, 0, endx, msg, self.style_footer)
1472 posx += self.addstr(posy, posx, 0, endx, msg, self.style_footer)
1439 try:
1473 try:
1440 item = level.items[level.cury].item
1474 item = level.items[level.cury].item
1441 except IndexError: # empty
1475 except IndexError: # empty
1442 pass
1476 pass
1443 else:
1477 else:
1444 for (nostyle, text) in ipipe.xrepr(item, "footer"):
1478 for (nostyle, text) in ipipe.xrepr(item, "footer"):
1445 if not isinstance(nostyle, int):
1479 if not isinstance(nostyle, int):
1446 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1480 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1447 if posx >= endx:
1481 if posx >= endx:
1448 break
1482 break
1449
1483
1450 attrstyle = [(astyle.style_default, "no attribute")]
1484 attrstyle = [(astyle.style_default, "no attribute")]
1451 attrname = level.displayattr[1]
1485 attrname = level.displayattr[1]
1452 if attrname is not ipipe.noitem and attrname is not None:
1486 if attrname is not ipipe.noitem and attrname is not None:
1453 posx += self.addstr(posy, posx, 0, endx, " | ", self.style_footer)
1487 posx += self.addstr(posy, posx, 0, endx, " | ", self.style_footer)
1454 posx += self.addstr(posy, posx, 0, endx, ipipe._attrname(attrname), self.style_footer)
1488 posx += self.addstr(posy, posx, 0, endx, ipipe._attrname(attrname), self.style_footer)
1455 posx += self.addstr(posy, posx, 0, endx, ": ", self.style_footer)
1489 posx += self.addstr(posy, posx, 0, endx, ": ", self.style_footer)
1456 try:
1490 try:
1457 attr = ipipe._getattr(item, attrname)
1491 attr = ipipe._getattr(item, attrname)
1458 except (SystemExit, KeyboardInterrupt):
1492 except (SystemExit, KeyboardInterrupt):
1459 raise
1493 raise
1460 except Exception, exc:
1494 except Exception, exc:
1461 attr = exc
1495 attr = exc
1462 if attr is not ipipe.noitem:
1496 if attr is not ipipe.noitem:
1463 attrstyle = ipipe.xrepr(attr, "footer")
1497 attrstyle = ipipe.xrepr(attr, "footer")
1464 for (nostyle, text) in attrstyle:
1498 for (nostyle, text) in attrstyle:
1465 if not isinstance(nostyle, int):
1499 if not isinstance(nostyle, int):
1466 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1500 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1467 if posx >= endx:
1501 if posx >= endx:
1468 break
1502 break
1469
1503
1470 try:
1504 try:
1471 # Display input prompt
1505 # Display input prompt
1472 if self.mode in self.prompts:
1506 if self.mode in self.prompts:
1473 history = self.prompts[self.mode]
1507 history = self.prompts[self.mode]
1474 posx = 0
1508 posx = 0
1475 posy = self.scrsizey-1
1509 posy = self.scrsizey-1
1476 posx += self.addstr(posy, posx, 0, endx, history.prompt, astyle.style_default)
1510 posx += self.addstr(posy, posx, 0, endx, history.prompt, astyle.style_default)
1477 posx += self.addstr(posy, posx, 0, endx, " [", astyle.style_default)
1511 posx += self.addstr(posy, posx, 0, endx, " [", astyle.style_default)
1478 if history.cury==-1:
1512 if history.cury==-1:
1479 text = "new"
1513 text = "new"
1480 else:
1514 else:
1481 text = str(history.cury+1)
1515 text = str(history.cury+1)
1482 posx += self.addstr(posy, posx, 0, endx, text, astyle.style_type_number)
1516 posx += self.addstr(posy, posx, 0, endx, text, astyle.style_type_number)
1483 if history.history:
1517 if history.history:
1484 posx += self.addstr(posy, posx, 0, endx, "/", astyle.style_default)
1518 posx += self.addstr(posy, posx, 0, endx, "/", astyle.style_default)
1485 posx += self.addstr(posy, posx, 0, endx, str(len(history.history)), astyle.style_type_number)
1519 posx += self.addstr(posy, posx, 0, endx, str(len(history.history)), astyle.style_type_number)
1486 posx += self.addstr(posy, posx, 0, endx, "]: ", astyle.style_default)
1520 posx += self.addstr(posy, posx, 0, endx, "]: ", astyle.style_default)
1487 inputstartx = posx
1521 inputstartx = posx
1488 posx += self.addstr(posy, posx, 0, endx, history.input, astyle.style_default)
1522 posx += self.addstr(posy, posx, 0, endx, history.input, astyle.style_default)
1489 # Display report
1523 # Display report
1490 else:
1524 else:
1491 if self._report is not None:
1525 if self._report is not None:
1492 if isinstance(self._report, Exception):
1526 if isinstance(self._report, Exception):
1493 style = self.getstyle(astyle.style_error)
1527 style = self.getstyle(astyle.style_error)
1494 if self._report.__class__.__module__ == "exceptions":
1528 if self._report.__class__.__module__ == "exceptions":
1495 msg = "%s: %s" % \
1529 msg = "%s: %s" % \
1496 (self._report.__class__.__name__, self._report)
1530 (self._report.__class__.__name__, self._report)
1497 else:
1531 else:
1498 msg = "%s.%s: %s" % \
1532 msg = "%s.%s: %s" % \
1499 (self._report.__class__.__module__,
1533 (self._report.__class__.__module__,
1500 self._report.__class__.__name__, self._report)
1534 self._report.__class__.__name__, self._report)
1501 else:
1535 else:
1502 style = self.getstyle(self.style_report)
1536 style = self.getstyle(self.style_report)
1503 msg = self._report
1537 msg = self._report
1504 scr.addstr(self.scrsizey-1, 0, msg[:self.scrsizex], style)
1538 scr.addstr(self.scrsizey-1, 0, msg[:self.scrsizex], style)
1505 self._report = None
1539 self._report = None
1506 else:
1540 else:
1507 scr.move(self.scrsizey-1, 0)
1541 scr.move(self.scrsizey-1, 0)
1508 except curses.error:
1542 except curses.error:
1509 # Protect against errors from writing to the last line
1543 # Protect against errors from writing to the last line
1510 pass
1544 pass
1511 scr.clrtoeol()
1545 scr.clrtoeol()
1512
1546
1513 # Position cursor
1547 # Position cursor
1514 if self.mode in self.prompts:
1548 if self.mode in self.prompts:
1515 history = self.prompts[self.mode]
1549 history = self.prompts[self.mode]
1516 scr.move(self.scrsizey-1, inputstartx+history.curx)
1550 scr.move(self.scrsizey-1, inputstartx+history.curx)
1517 else:
1551 else:
1518 scr.move(
1552 scr.move(
1519 1+self._headerlines+level.cury-level.datastarty,
1553 1+self._headerlines+level.cury-level.datastarty,
1520 level.numbersizex+3+level.curx-level.datastartx
1554 level.numbersizex+3+level.curx-level.datastartx
1521 )
1555 )
1522 scr.refresh()
1556 scr.refresh()
1523
1557
1524 # Check keyboard
1558 # Check keyboard
1525 while True:
1559 while True:
1526 c = scr.getch()
1560 c = scr.getch()
1527 if self.mode in self.prompts:
1561 if self.mode in self.prompts:
1528 if self.prompts[self.mode].handlekey(self, c):
1562 if self.prompts[self.mode].handlekey(self, c):
1529 break # Redisplay
1563 break # Redisplay
1530 else:
1564 else:
1531 # if no key is pressed slow down and beep again
1565 # if no key is pressed slow down and beep again
1532 if c == -1:
1566 if c == -1:
1533 self.stepx = 1.
1567 self.stepx = 1.
1534 self.stepy = 1.
1568 self.stepy = 1.
1535 self._dobeep = True
1569 self._dobeep = True
1536 else:
1570 else:
1537 # if a different key was pressed slow down and beep too
1571 # if a different key was pressed slow down and beep too
1538 if c != lastc:
1572 if c != lastc:
1539 lastc = c
1573 lastc = c
1540 self.stepx = 1.
1574 self.stepx = 1.
1541 self.stepy = 1.
1575 self.stepy = 1.
1542 self._dobeep = True
1576 self._dobeep = True
1543 cmdname = self.keymap.get(c, None)
1577 cmdname = self.keymap.get(c, None)
1544 if cmdname is None:
1578 if cmdname is None:
1545 self.report(
1579 self.report(
1546 UnassignedKeyError("Unassigned key %s" %
1580 UnassignedKeyError("Unassigned key %s" %
1547 self.keylabel(c)))
1581 self.keylabel(c)))
1548 else:
1582 else:
1549 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
1583 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
1550 if cmdfunc is None:
1584 if cmdfunc is None:
1551 self.report(
1585 self.report(
1552 UnknownCommandError("Unknown command %r" %
1586 UnknownCommandError("Unknown command %r" %
1553 (cmdname,)))
1587 (cmdname,)))
1554 elif cmdfunc():
1588 elif cmdfunc():
1555 returnvalue = self.returnvalue
1589 returnvalue = self.returnvalue
1556 self.returnvalue = None
1590 self.returnvalue = None
1557 return returnvalue
1591 return returnvalue
1558 self.stepx = self.nextstepx(self.stepx)
1592 self.stepx = self.nextstepx(self.stepx)
1559 self.stepy = self.nextstepy(self.stepy)
1593 self.stepy = self.nextstepy(self.stepy)
1560 curses.flushinp() # get rid of type ahead
1594 curses.flushinp() # get rid of type ahead
1561 break # Redisplay
1595 break # Redisplay
1562 self.scr = None
1596 self.scr = None
1563
1597
1564 def display(self):
1598 def display(self):
1565 return curses.wrapper(self._dodisplay)
1599 return curses.wrapper(self._dodisplay)
@@ -1,5593 +1,5598 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 "?". Display
6 attributes again. Remapped the help command to "?". Display
7 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
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 as keys for the "home" and "end" commands. Add three new commands
9 to the input mode for "find" and friends: "delend" (CTRL-K)
10 deletes to the end of line. "incsearchup" searches upwards in the
11 command history for an input that starts with the text before the cursor.
12 "incsearchdown" does the same downwards. Removed a bogus mapping of
13 the x key to "delete".
9
14
10 2006-06-15 Ville Vainio <vivainio@gmail.com>
15 2006-06-15 Ville Vainio <vivainio@gmail.com>
11
16
12 * iplib.py, hooks.py: Added new generate_prompt hook that can be
17 * iplib.py, hooks.py: Added new generate_prompt hook that can be
13 used to create prompts dynamically, instead of the "old" way of
18 used to create prompts dynamically, instead of the "old" way of
14 assigning "magic" strings to prompt_in1 and prompt_in2. The old
19 assigning "magic" strings to prompt_in1 and prompt_in2. The old
15 way still works (it's invoked by the default hook), of course.
20 way still works (it's invoked by the default hook), of course.
16
21
17 * Prompts.py: added generate_output_prompt hook for altering output
22 * Prompts.py: added generate_output_prompt hook for altering output
18 prompt
23 prompt
19
24
20 * Release.py: Changed version string to 0.7.3.svn.
25 * Release.py: Changed version string to 0.7.3.svn.
21
26
22 2006-06-15 Walter Doerwald <walter@livinglogic.de>
27 2006-06-15 Walter Doerwald <walter@livinglogic.de>
23
28
24 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
29 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
25 the call to fetch() always tries to fetch enough data for at least one
30 the call to fetch() always tries to fetch enough data for at least one
26 full screen. This makes it possible to simply call moveto(0,0,True) in
31 full screen. This makes it possible to simply call moveto(0,0,True) in
27 the constructor. Fix typos and removed the obsolete goto attribute.
32 the constructor. Fix typos and removed the obsolete goto attribute.
28
33
29 2006-06-12 Ville Vainio <vivainio@gmail.com>
34 2006-06-12 Ville Vainio <vivainio@gmail.com>
30
35
31 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
36 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
32 allowing $variable interpolation within multiline statements,
37 allowing $variable interpolation within multiline statements,
33 though so far only with "sh" profile for a testing period.
38 though so far only with "sh" profile for a testing period.
34 The patch also enables splitting long commands with \ but it
39 The patch also enables splitting long commands with \ but it
35 doesn't work properly yet.
40 doesn't work properly yet.
36
41
37 2006-06-12 Walter Doerwald <walter@livinglogic.de>
42 2006-06-12 Walter Doerwald <walter@livinglogic.de>
38
43
39 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
44 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
40 input history and the position of the cursor in the input history for
45 input history and the position of the cursor in the input history for
41 the find, findbackwards and goto command.
46 the find, findbackwards and goto command.
42
47
43 2006-06-10 Walter Doerwald <walter@livinglogic.de>
48 2006-06-10 Walter Doerwald <walter@livinglogic.de>
44
49
45 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
50 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
46 implements the basic functionality of browser commands that require
51 implements the basic functionality of browser commands that require
47 input. Reimplement the goto, find and findbackwards commands as
52 input. Reimplement the goto, find and findbackwards commands as
48 subclasses of _CommandInput. Add an input history and keymaps to those
53 subclasses of _CommandInput. Add an input history and keymaps to those
49 commands. Add "\r" as a keyboard shortcut for the enterdefault and
54 commands. Add "\r" as a keyboard shortcut for the enterdefault and
50 execute commands.
55 execute commands.
51
56
52 2006-06-07 Ville Vainio <vivainio@gmail.com>
57 2006-06-07 Ville Vainio <vivainio@gmail.com>
53
58
54 * iplib.py: ipython mybatch.ipy exits ipython immediately after
59 * iplib.py: ipython mybatch.ipy exits ipython immediately after
55 running the batch files instead of leaving the session open.
60 running the batch files instead of leaving the session open.
56
61
57 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
62 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
58
63
59 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
64 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
60 the original fix was incomplete. Patch submitted by W. Maier.
65 the original fix was incomplete. Patch submitted by W. Maier.
61
66
62 2006-06-07 Ville Vainio <vivainio@gmail.com>
67 2006-06-07 Ville Vainio <vivainio@gmail.com>
63
68
64 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
69 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
65 Confirmation prompts can be supressed by 'quiet' option.
70 Confirmation prompts can be supressed by 'quiet' option.
66 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
71 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
67
72
68 2006-06-06 *** Released version 0.7.2
73 2006-06-06 *** Released version 0.7.2
69
74
70 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
75 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
71
76
72 * IPython/Release.py (version): Made 0.7.2 final for release.
77 * IPython/Release.py (version): Made 0.7.2 final for release.
73 Repo tagged and release cut.
78 Repo tagged and release cut.
74
79
75 2006-06-05 Ville Vainio <vivainio@gmail.com>
80 2006-06-05 Ville Vainio <vivainio@gmail.com>
76
81
77 * Magic.py (magic_rehashx): Honor no_alias list earlier in
82 * Magic.py (magic_rehashx): Honor no_alias list earlier in
78 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
83 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
79
84
80 * upgrade_dir.py: try import 'path' module a bit harder
85 * upgrade_dir.py: try import 'path' module a bit harder
81 (for %upgrade)
86 (for %upgrade)
82
87
83 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
88 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
84
89
85 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
90 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
86 instead of looping 20 times.
91 instead of looping 20 times.
87
92
88 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
93 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
89 correctly at initialization time. Bug reported by Krishna Mohan
94 correctly at initialization time. Bug reported by Krishna Mohan
90 Gundu <gkmohan-AT-gmail.com> on the user list.
95 Gundu <gkmohan-AT-gmail.com> on the user list.
91
96
92 * IPython/Release.py (version): Mark 0.7.2 version to start
97 * IPython/Release.py (version): Mark 0.7.2 version to start
93 testing for release on 06/06.
98 testing for release on 06/06.
94
99
95 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
100 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
96
101
97 * scripts/irunner: thin script interface so users don't have to
102 * scripts/irunner: thin script interface so users don't have to
98 find the module and call it as an executable, since modules rarely
103 find the module and call it as an executable, since modules rarely
99 live in people's PATH.
104 live in people's PATH.
100
105
101 * IPython/irunner.py (InteractiveRunner.__init__): added
106 * IPython/irunner.py (InteractiveRunner.__init__): added
102 delaybeforesend attribute to control delays with newer versions of
107 delaybeforesend attribute to control delays with newer versions of
103 pexpect. Thanks to detailed help from pexpect's author, Noah
108 pexpect. Thanks to detailed help from pexpect's author, Noah
104 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
109 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
105 correctly (it works in NoColor mode).
110 correctly (it works in NoColor mode).
106
111
107 * IPython/iplib.py (handle_normal): fix nasty crash reported on
112 * IPython/iplib.py (handle_normal): fix nasty crash reported on
108 SAGE list, from improper log() calls.
113 SAGE list, from improper log() calls.
109
114
110 2006-05-31 Ville Vainio <vivainio@gmail.com>
115 2006-05-31 Ville Vainio <vivainio@gmail.com>
111
116
112 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
117 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
113 with args in parens to work correctly with dirs that have spaces.
118 with args in parens to work correctly with dirs that have spaces.
114
119
115 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
120 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
116
121
117 * IPython/Logger.py (Logger.logstart): add option to log raw input
122 * IPython/Logger.py (Logger.logstart): add option to log raw input
118 instead of the processed one. A -r flag was added to the
123 instead of the processed one. A -r flag was added to the
119 %logstart magic used for controlling logging.
124 %logstart magic used for controlling logging.
120
125
121 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
126 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
122
127
123 * IPython/iplib.py (InteractiveShell.__init__): add check for the
128 * IPython/iplib.py (InteractiveShell.__init__): add check for the
124 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
129 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
125 recognize the option. After a bug report by Will Maier. This
130 recognize the option. After a bug report by Will Maier. This
126 closes #64 (will do it after confirmation from W. Maier).
131 closes #64 (will do it after confirmation from W. Maier).
127
132
128 * IPython/irunner.py: New module to run scripts as if manually
133 * IPython/irunner.py: New module to run scripts as if manually
129 typed into an interactive environment, based on pexpect. After a
134 typed into an interactive environment, based on pexpect. After a
130 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
135 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
131 ipython-user list. Simple unittests in the tests/ directory.
136 ipython-user list. Simple unittests in the tests/ directory.
132
137
133 * tools/release: add Will Maier, OpenBSD port maintainer, to
138 * tools/release: add Will Maier, OpenBSD port maintainer, to
134 recepients list. We are now officially part of the OpenBSD ports:
139 recepients list. We are now officially part of the OpenBSD ports:
135 http://www.openbsd.org/ports.html ! Many thanks to Will for the
140 http://www.openbsd.org/ports.html ! Many thanks to Will for the
136 work.
141 work.
137
142
138 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
143 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
139
144
140 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
145 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
141 so that it doesn't break tkinter apps.
146 so that it doesn't break tkinter apps.
142
147
143 * IPython/iplib.py (_prefilter): fix bug where aliases would
148 * IPython/iplib.py (_prefilter): fix bug where aliases would
144 shadow variables when autocall was fully off. Reported by SAGE
149 shadow variables when autocall was fully off. Reported by SAGE
145 author William Stein.
150 author William Stein.
146
151
147 * IPython/OInspect.py (Inspector.__init__): add a flag to control
152 * IPython/OInspect.py (Inspector.__init__): add a flag to control
148 at what detail level strings are computed when foo? is requested.
153 at what detail level strings are computed when foo? is requested.
149 This allows users to ask for example that the string form of an
154 This allows users to ask for example that the string form of an
150 object is only computed when foo?? is called, or even never, by
155 object is only computed when foo?? is called, or even never, by
151 setting the object_info_string_level >= 2 in the configuration
156 setting the object_info_string_level >= 2 in the configuration
152 file. This new option has been added and documented. After a
157 file. This new option has been added and documented. After a
153 request by SAGE to be able to control the printing of very large
158 request by SAGE to be able to control the printing of very large
154 objects more easily.
159 objects more easily.
155
160
156 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
161 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
157
162
158 * IPython/ipmaker.py (make_IPython): remove the ipython call path
163 * IPython/ipmaker.py (make_IPython): remove the ipython call path
159 from sys.argv, to be 100% consistent with how Python itself works
164 from sys.argv, to be 100% consistent with how Python itself works
160 (as seen for example with python -i file.py). After a bug report
165 (as seen for example with python -i file.py). After a bug report
161 by Jeffrey Collins.
166 by Jeffrey Collins.
162
167
163 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
168 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
164 nasty bug which was preventing custom namespaces with -pylab,
169 nasty bug which was preventing custom namespaces with -pylab,
165 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
170 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
166 compatibility (long gone from mpl).
171 compatibility (long gone from mpl).
167
172
168 * IPython/ipapi.py (make_session): name change: create->make. We
173 * IPython/ipapi.py (make_session): name change: create->make. We
169 use make in other places (ipmaker,...), it's shorter and easier to
174 use make in other places (ipmaker,...), it's shorter and easier to
170 type and say, etc. I'm trying to clean things before 0.7.2 so
175 type and say, etc. I'm trying to clean things before 0.7.2 so
171 that I can keep things stable wrt to ipapi in the chainsaw branch.
176 that I can keep things stable wrt to ipapi in the chainsaw branch.
172
177
173 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
178 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
174 python-mode recognizes our debugger mode. Add support for
179 python-mode recognizes our debugger mode. Add support for
175 autoindent inside (X)emacs. After a patch sent in by Jin Liu
180 autoindent inside (X)emacs. After a patch sent in by Jin Liu
176 <m.liu.jin-AT-gmail.com> originally written by
181 <m.liu.jin-AT-gmail.com> originally written by
177 doxgen-AT-newsmth.net (with minor modifications for xemacs
182 doxgen-AT-newsmth.net (with minor modifications for xemacs
178 compatibility)
183 compatibility)
179
184
180 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
185 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
181 tracebacks when walking the stack so that the stack tracking system
186 tracebacks when walking the stack so that the stack tracking system
182 in emacs' python-mode can identify the frames correctly.
187 in emacs' python-mode can identify the frames correctly.
183
188
184 * IPython/ipmaker.py (make_IPython): make the internal (and
189 * IPython/ipmaker.py (make_IPython): make the internal (and
185 default config) autoedit_syntax value false by default. Too many
190 default config) autoedit_syntax value false by default. Too many
186 users have complained to me (both on and off-list) about problems
191 users have complained to me (both on and off-list) about problems
187 with this option being on by default, so I'm making it default to
192 with this option being on by default, so I'm making it default to
188 off. It can still be enabled by anyone via the usual mechanisms.
193 off. It can still be enabled by anyone via the usual mechanisms.
189
194
190 * IPython/completer.py (Completer.attr_matches): add support for
195 * IPython/completer.py (Completer.attr_matches): add support for
191 PyCrust-style _getAttributeNames magic method. Patch contributed
196 PyCrust-style _getAttributeNames magic method. Patch contributed
192 by <mscott-AT-goldenspud.com>. Closes #50.
197 by <mscott-AT-goldenspud.com>. Closes #50.
193
198
194 * IPython/iplib.py (InteractiveShell.__init__): remove the
199 * IPython/iplib.py (InteractiveShell.__init__): remove the
195 deletion of exit/quit from __builtin__, which can break
200 deletion of exit/quit from __builtin__, which can break
196 third-party tools like the Zope debugging console. The
201 third-party tools like the Zope debugging console. The
197 %exit/%quit magics remain. In general, it's probably a good idea
202 %exit/%quit magics remain. In general, it's probably a good idea
198 not to delete anything from __builtin__, since we never know what
203 not to delete anything from __builtin__, since we never know what
199 that will break. In any case, python now (for 2.5) will support
204 that will break. In any case, python now (for 2.5) will support
200 'real' exit/quit, so this issue is moot. Closes #55.
205 'real' exit/quit, so this issue is moot. Closes #55.
201
206
202 * IPython/genutils.py (with_obj): rename the 'with' function to
207 * IPython/genutils.py (with_obj): rename the 'with' function to
203 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
208 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
204 becomes a language keyword. Closes #53.
209 becomes a language keyword. Closes #53.
205
210
206 * IPython/FakeModule.py (FakeModule.__init__): add a proper
211 * IPython/FakeModule.py (FakeModule.__init__): add a proper
207 __file__ attribute to this so it fools more things into thinking
212 __file__ attribute to this so it fools more things into thinking
208 it is a real module. Closes #59.
213 it is a real module. Closes #59.
209
214
210 * IPython/Magic.py (magic_edit): add -n option to open the editor
215 * IPython/Magic.py (magic_edit): add -n option to open the editor
211 at a specific line number. After a patch by Stefan van der Walt.
216 at a specific line number. After a patch by Stefan van der Walt.
212
217
213 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
218 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
214
219
215 * IPython/iplib.py (edit_syntax_error): fix crash when for some
220 * IPython/iplib.py (edit_syntax_error): fix crash when for some
216 reason the file could not be opened. After automatic crash
221 reason the file could not be opened. After automatic crash
217 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
222 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
218 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
223 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
219 (_should_recompile): Don't fire editor if using %bg, since there
224 (_should_recompile): Don't fire editor if using %bg, since there
220 is no file in the first place. From the same report as above.
225 is no file in the first place. From the same report as above.
221 (raw_input): protect against faulty third-party prefilters. After
226 (raw_input): protect against faulty third-party prefilters. After
222 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
227 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
223 while running under SAGE.
228 while running under SAGE.
224
229
225 2006-05-23 Ville Vainio <vivainio@gmail.com>
230 2006-05-23 Ville Vainio <vivainio@gmail.com>
226
231
227 * ipapi.py: Stripped down ip.to_user_ns() to work only as
232 * ipapi.py: Stripped down ip.to_user_ns() to work only as
228 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
233 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
229 now returns None (again), unless dummy is specifically allowed by
234 now returns None (again), unless dummy is specifically allowed by
230 ipapi.get(allow_dummy=True).
235 ipapi.get(allow_dummy=True).
231
236
232 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
237 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
233
238
234 * IPython: remove all 2.2-compatibility objects and hacks from
239 * IPython: remove all 2.2-compatibility objects and hacks from
235 everywhere, since we only support 2.3 at this point. Docs
240 everywhere, since we only support 2.3 at this point. Docs
236 updated.
241 updated.
237
242
238 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
243 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
239 Anything requiring extra validation can be turned into a Python
244 Anything requiring extra validation can be turned into a Python
240 property in the future. I used a property for the db one b/c
245 property in the future. I used a property for the db one b/c
241 there was a nasty circularity problem with the initialization
246 there was a nasty circularity problem with the initialization
242 order, which right now I don't have time to clean up.
247 order, which right now I don't have time to clean up.
243
248
244 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
249 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
245 another locking bug reported by Jorgen. I'm not 100% sure though,
250 another locking bug reported by Jorgen. I'm not 100% sure though,
246 so more testing is needed...
251 so more testing is needed...
247
252
248 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
253 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
249
254
250 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
255 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
251 local variables from any routine in user code (typically executed
256 local variables from any routine in user code (typically executed
252 with %run) directly into the interactive namespace. Very useful
257 with %run) directly into the interactive namespace. Very useful
253 when doing complex debugging.
258 when doing complex debugging.
254 (IPythonNotRunning): Changed the default None object to a dummy
259 (IPythonNotRunning): Changed the default None object to a dummy
255 whose attributes can be queried as well as called without
260 whose attributes can be queried as well as called without
256 exploding, to ease writing code which works transparently both in
261 exploding, to ease writing code which works transparently both in
257 and out of ipython and uses some of this API.
262 and out of ipython and uses some of this API.
258
263
259 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
264 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
260
265
261 * IPython/hooks.py (result_display): Fix the fact that our display
266 * IPython/hooks.py (result_display): Fix the fact that our display
262 hook was using str() instead of repr(), as the default python
267 hook was using str() instead of repr(), as the default python
263 console does. This had gone unnoticed b/c it only happened if
268 console does. This had gone unnoticed b/c it only happened if
264 %Pprint was off, but the inconsistency was there.
269 %Pprint was off, but the inconsistency was there.
265
270
266 2006-05-15 Ville Vainio <vivainio@gmail.com>
271 2006-05-15 Ville Vainio <vivainio@gmail.com>
267
272
268 * Oinspect.py: Only show docstring for nonexisting/binary files
273 * Oinspect.py: Only show docstring for nonexisting/binary files
269 when doing object??, closing ticket #62
274 when doing object??, closing ticket #62
270
275
271 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
276 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
272
277
273 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
278 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
274 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
279 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
275 was being released in a routine which hadn't checked if it had
280 was being released in a routine which hadn't checked if it had
276 been the one to acquire it.
281 been the one to acquire it.
277
282
278 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
283 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
279
284
280 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
285 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
281
286
282 2006-04-11 Ville Vainio <vivainio@gmail.com>
287 2006-04-11 Ville Vainio <vivainio@gmail.com>
283
288
284 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
289 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
285 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
290 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
286 prefilters, allowing stuff like magics and aliases in the file.
291 prefilters, allowing stuff like magics and aliases in the file.
287
292
288 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
293 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
289 added. Supported now are "%clear in" and "%clear out" (clear input and
294 added. Supported now are "%clear in" and "%clear out" (clear input and
290 output history, respectively). Also fixed CachedOutput.flush to
295 output history, respectively). Also fixed CachedOutput.flush to
291 properly flush the output cache.
296 properly flush the output cache.
292
297
293 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
298 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
294 half-success (and fail explicitly).
299 half-success (and fail explicitly).
295
300
296 2006-03-28 Ville Vainio <vivainio@gmail.com>
301 2006-03-28 Ville Vainio <vivainio@gmail.com>
297
302
298 * iplib.py: Fix quoting of aliases so that only argless ones
303 * iplib.py: Fix quoting of aliases so that only argless ones
299 are quoted
304 are quoted
300
305
301 2006-03-28 Ville Vainio <vivainio@gmail.com>
306 2006-03-28 Ville Vainio <vivainio@gmail.com>
302
307
303 * iplib.py: Quote aliases with spaces in the name.
308 * iplib.py: Quote aliases with spaces in the name.
304 "c:\program files\blah\bin" is now legal alias target.
309 "c:\program files\blah\bin" is now legal alias target.
305
310
306 * ext_rehashdir.py: Space no longer allowed as arg
311 * ext_rehashdir.py: Space no longer allowed as arg
307 separator, since space is legal in path names.
312 separator, since space is legal in path names.
308
313
309 2006-03-16 Ville Vainio <vivainio@gmail.com>
314 2006-03-16 Ville Vainio <vivainio@gmail.com>
310
315
311 * upgrade_dir.py: Take path.py from Extensions, correcting
316 * upgrade_dir.py: Take path.py from Extensions, correcting
312 %upgrade magic
317 %upgrade magic
313
318
314 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
319 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
315
320
316 * hooks.py: Only enclose editor binary in quotes if legal and
321 * hooks.py: Only enclose editor binary in quotes if legal and
317 necessary (space in the name, and is an existing file). Fixes a bug
322 necessary (space in the name, and is an existing file). Fixes a bug
318 reported by Zachary Pincus.
323 reported by Zachary Pincus.
319
324
320 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
325 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
321
326
322 * Manual: thanks to a tip on proper color handling for Emacs, by
327 * Manual: thanks to a tip on proper color handling for Emacs, by
323 Eric J Haywiser <ejh1-AT-MIT.EDU>.
328 Eric J Haywiser <ejh1-AT-MIT.EDU>.
324
329
325 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
330 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
326 by applying the provided patch. Thanks to Liu Jin
331 by applying the provided patch. Thanks to Liu Jin
327 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
332 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
328 XEmacs/Linux, I'm trusting the submitter that it actually helps
333 XEmacs/Linux, I'm trusting the submitter that it actually helps
329 under win32/GNU Emacs. Will revisit if any problems are reported.
334 under win32/GNU Emacs. Will revisit if any problems are reported.
330
335
331 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
336 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
332
337
333 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
338 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
334 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
339 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
335
340
336 2006-03-12 Ville Vainio <vivainio@gmail.com>
341 2006-03-12 Ville Vainio <vivainio@gmail.com>
337
342
338 * Magic.py (magic_timeit): Added %timeit magic, contributed by
343 * Magic.py (magic_timeit): Added %timeit magic, contributed by
339 Torsten Marek.
344 Torsten Marek.
340
345
341 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
346 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
342
347
343 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
348 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
344 line ranges works again.
349 line ranges works again.
345
350
346 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
351 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
347
352
348 * IPython/iplib.py (showtraceback): add back sys.last_traceback
353 * IPython/iplib.py (showtraceback): add back sys.last_traceback
349 and friends, after a discussion with Zach Pincus on ipython-user.
354 and friends, after a discussion with Zach Pincus on ipython-user.
350 I'm not 100% sure, but after thinking about it quite a bit, it may
355 I'm not 100% sure, but after thinking about it quite a bit, it may
351 be OK. Testing with the multithreaded shells didn't reveal any
356 be OK. Testing with the multithreaded shells didn't reveal any
352 problems, but let's keep an eye out.
357 problems, but let's keep an eye out.
353
358
354 In the process, I fixed a few things which were calling
359 In the process, I fixed a few things which were calling
355 self.InteractiveTB() directly (like safe_execfile), which is a
360 self.InteractiveTB() directly (like safe_execfile), which is a
356 mistake: ALL exception reporting should be done by calling
361 mistake: ALL exception reporting should be done by calling
357 self.showtraceback(), which handles state and tab-completion and
362 self.showtraceback(), which handles state and tab-completion and
358 more.
363 more.
359
364
360 2006-03-01 Ville Vainio <vivainio@gmail.com>
365 2006-03-01 Ville Vainio <vivainio@gmail.com>
361
366
362 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
367 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
363 To use, do "from ipipe import *".
368 To use, do "from ipipe import *".
364
369
365 2006-02-24 Ville Vainio <vivainio@gmail.com>
370 2006-02-24 Ville Vainio <vivainio@gmail.com>
366
371
367 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
372 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
368 "cleanly" and safely than the older upgrade mechanism.
373 "cleanly" and safely than the older upgrade mechanism.
369
374
370 2006-02-21 Ville Vainio <vivainio@gmail.com>
375 2006-02-21 Ville Vainio <vivainio@gmail.com>
371
376
372 * Magic.py: %save works again.
377 * Magic.py: %save works again.
373
378
374 2006-02-15 Ville Vainio <vivainio@gmail.com>
379 2006-02-15 Ville Vainio <vivainio@gmail.com>
375
380
376 * Magic.py: %Pprint works again
381 * Magic.py: %Pprint works again
377
382
378 * Extensions/ipy_sane_defaults.py: Provide everything provided
383 * Extensions/ipy_sane_defaults.py: Provide everything provided
379 in default ipythonrc, to make it possible to have a completely empty
384 in default ipythonrc, to make it possible to have a completely empty
380 ipythonrc (and thus completely rc-file free configuration)
385 ipythonrc (and thus completely rc-file free configuration)
381
386
382 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
387 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
383
388
384 * IPython/hooks.py (editor): quote the call to the editor command,
389 * IPython/hooks.py (editor): quote the call to the editor command,
385 to allow commands with spaces in them. Problem noted by watching
390 to allow commands with spaces in them. Problem noted by watching
386 Ian Oswald's video about textpad under win32 at
391 Ian Oswald's video about textpad under win32 at
387 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
392 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
388
393
389 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
394 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
390 describing magics (we haven't used @ for a loong time).
395 describing magics (we haven't used @ for a loong time).
391
396
392 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
397 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
393 contributed by marienz to close
398 contributed by marienz to close
394 http://www.scipy.net/roundup/ipython/issue53.
399 http://www.scipy.net/roundup/ipython/issue53.
395
400
396 2006-02-10 Ville Vainio <vivainio@gmail.com>
401 2006-02-10 Ville Vainio <vivainio@gmail.com>
397
402
398 * genutils.py: getoutput now works in win32 too
403 * genutils.py: getoutput now works in win32 too
399
404
400 * completer.py: alias and magic completion only invoked
405 * completer.py: alias and magic completion only invoked
401 at the first "item" in the line, to avoid "cd %store"
406 at the first "item" in the line, to avoid "cd %store"
402 nonsense.
407 nonsense.
403
408
404 2006-02-09 Ville Vainio <vivainio@gmail.com>
409 2006-02-09 Ville Vainio <vivainio@gmail.com>
405
410
406 * test/*: Added a unit testing framework (finally).
411 * test/*: Added a unit testing framework (finally).
407 '%run runtests.py' to run test_*.
412 '%run runtests.py' to run test_*.
408
413
409 * ipapi.py: Exposed runlines and set_custom_exc
414 * ipapi.py: Exposed runlines and set_custom_exc
410
415
411 2006-02-07 Ville Vainio <vivainio@gmail.com>
416 2006-02-07 Ville Vainio <vivainio@gmail.com>
412
417
413 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
418 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
414 instead use "f(1 2)" as before.
419 instead use "f(1 2)" as before.
415
420
416 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
421 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
417
422
418 * IPython/demo.py (IPythonDemo): Add new classes to the demo
423 * IPython/demo.py (IPythonDemo): Add new classes to the demo
419 facilities, for demos processed by the IPython input filter
424 facilities, for demos processed by the IPython input filter
420 (IPythonDemo), and for running a script one-line-at-a-time as a
425 (IPythonDemo), and for running a script one-line-at-a-time as a
421 demo, both for pure Python (LineDemo) and for IPython-processed
426 demo, both for pure Python (LineDemo) and for IPython-processed
422 input (IPythonLineDemo). After a request by Dave Kohel, from the
427 input (IPythonLineDemo). After a request by Dave Kohel, from the
423 SAGE team.
428 SAGE team.
424 (Demo.edit): added an edit() method to the demo objects, to edit
429 (Demo.edit): added an edit() method to the demo objects, to edit
425 the in-memory copy of the last executed block.
430 the in-memory copy of the last executed block.
426
431
427 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
432 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
428 processing to %edit, %macro and %save. These commands can now be
433 processing to %edit, %macro and %save. These commands can now be
429 invoked on the unprocessed input as it was typed by the user
434 invoked on the unprocessed input as it was typed by the user
430 (without any prefilters applied). After requests by the SAGE team
435 (without any prefilters applied). After requests by the SAGE team
431 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
436 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
432
437
433 2006-02-01 Ville Vainio <vivainio@gmail.com>
438 2006-02-01 Ville Vainio <vivainio@gmail.com>
434
439
435 * setup.py, eggsetup.py: easy_install ipython==dev works
440 * setup.py, eggsetup.py: easy_install ipython==dev works
436 correctly now (on Linux)
441 correctly now (on Linux)
437
442
438 * ipy_user_conf,ipmaker: user config changes, removed spurious
443 * ipy_user_conf,ipmaker: user config changes, removed spurious
439 warnings
444 warnings
440
445
441 * iplib: if rc.banner is string, use it as is.
446 * iplib: if rc.banner is string, use it as is.
442
447
443 * Magic: %pycat accepts a string argument and pages it's contents.
448 * Magic: %pycat accepts a string argument and pages it's contents.
444
449
445
450
446 2006-01-30 Ville Vainio <vivainio@gmail.com>
451 2006-01-30 Ville Vainio <vivainio@gmail.com>
447
452
448 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
453 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
449 Now %store and bookmarks work through PickleShare, meaning that
454 Now %store and bookmarks work through PickleShare, meaning that
450 concurrent access is possible and all ipython sessions see the
455 concurrent access is possible and all ipython sessions see the
451 same database situation all the time, instead of snapshot of
456 same database situation all the time, instead of snapshot of
452 the situation when the session was started. Hence, %bookmark
457 the situation when the session was started. Hence, %bookmark
453 results are immediately accessible from othes sessions. The database
458 results are immediately accessible from othes sessions. The database
454 is also available for use by user extensions. See:
459 is also available for use by user extensions. See:
455 http://www.python.org/pypi/pickleshare
460 http://www.python.org/pypi/pickleshare
456
461
457 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
462 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
458
463
459 * aliases can now be %store'd
464 * aliases can now be %store'd
460
465
461 * path.py moved to Extensions so that pickleshare does not need
466 * path.py moved to Extensions so that pickleshare does not need
462 IPython-specific import. Extensions added to pythonpath right
467 IPython-specific import. Extensions added to pythonpath right
463 at __init__.
468 at __init__.
464
469
465 * iplib.py: ipalias deprecated/redundant; aliases are converted and
470 * iplib.py: ipalias deprecated/redundant; aliases are converted and
466 called with _ip.system and the pre-transformed command string.
471 called with _ip.system and the pre-transformed command string.
467
472
468 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
473 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
469
474
470 * IPython/iplib.py (interact): Fix that we were not catching
475 * IPython/iplib.py (interact): Fix that we were not catching
471 KeyboardInterrupt exceptions properly. I'm not quite sure why the
476 KeyboardInterrupt exceptions properly. I'm not quite sure why the
472 logic here had to change, but it's fixed now.
477 logic here had to change, but it's fixed now.
473
478
474 2006-01-29 Ville Vainio <vivainio@gmail.com>
479 2006-01-29 Ville Vainio <vivainio@gmail.com>
475
480
476 * iplib.py: Try to import pyreadline on Windows.
481 * iplib.py: Try to import pyreadline on Windows.
477
482
478 2006-01-27 Ville Vainio <vivainio@gmail.com>
483 2006-01-27 Ville Vainio <vivainio@gmail.com>
479
484
480 * iplib.py: Expose ipapi as _ip in builtin namespace.
485 * iplib.py: Expose ipapi as _ip in builtin namespace.
481 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
486 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
482 and ip_set_hook (-> _ip.set_hook) redundant. % and !
487 and ip_set_hook (-> _ip.set_hook) redundant. % and !
483 syntax now produce _ip.* variant of the commands.
488 syntax now produce _ip.* variant of the commands.
484
489
485 * "_ip.options().autoedit_syntax = 2" automatically throws
490 * "_ip.options().autoedit_syntax = 2" automatically throws
486 user to editor for syntax error correction without prompting.
491 user to editor for syntax error correction without prompting.
487
492
488 2006-01-27 Ville Vainio <vivainio@gmail.com>
493 2006-01-27 Ville Vainio <vivainio@gmail.com>
489
494
490 * ipmaker.py: Give "realistic" sys.argv for scripts (without
495 * ipmaker.py: Give "realistic" sys.argv for scripts (without
491 'ipython' at argv[0]) executed through command line.
496 'ipython' at argv[0]) executed through command line.
492 NOTE: this DEPRECATES calling ipython with multiple scripts
497 NOTE: this DEPRECATES calling ipython with multiple scripts
493 ("ipython a.py b.py c.py")
498 ("ipython a.py b.py c.py")
494
499
495 * iplib.py, hooks.py: Added configurable input prefilter,
500 * iplib.py, hooks.py: Added configurable input prefilter,
496 named 'input_prefilter'. See ext_rescapture.py for example
501 named 'input_prefilter'. See ext_rescapture.py for example
497 usage.
502 usage.
498
503
499 * ext_rescapture.py, Magic.py: Better system command output capture
504 * ext_rescapture.py, Magic.py: Better system command output capture
500 through 'var = !ls' (deprecates user-visible %sc). Same notation
505 through 'var = !ls' (deprecates user-visible %sc). Same notation
501 applies for magics, 'var = %alias' assigns alias list to var.
506 applies for magics, 'var = %alias' assigns alias list to var.
502
507
503 * ipapi.py: added meta() for accessing extension-usable data store.
508 * ipapi.py: added meta() for accessing extension-usable data store.
504
509
505 * iplib.py: added InteractiveShell.getapi(). New magics should be
510 * iplib.py: added InteractiveShell.getapi(). New magics should be
506 written doing self.getapi() instead of using the shell directly.
511 written doing self.getapi() instead of using the shell directly.
507
512
508 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
513 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
509 %store foo >> ~/myfoo.txt to store variables to files (in clean
514 %store foo >> ~/myfoo.txt to store variables to files (in clean
510 textual form, not a restorable pickle).
515 textual form, not a restorable pickle).
511
516
512 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
517 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
513
518
514 * usage.py, Magic.py: added %quickref
519 * usage.py, Magic.py: added %quickref
515
520
516 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
521 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
517
522
518 * GetoptErrors when invoking magics etc. with wrong args
523 * GetoptErrors when invoking magics etc. with wrong args
519 are now more helpful:
524 are now more helpful:
520 GetoptError: option -l not recognized (allowed: "qb" )
525 GetoptError: option -l not recognized (allowed: "qb" )
521
526
522 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
527 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
523
528
524 * IPython/demo.py (Demo.show): Flush stdout after each block, so
529 * IPython/demo.py (Demo.show): Flush stdout after each block, so
525 computationally intensive blocks don't appear to stall the demo.
530 computationally intensive blocks don't appear to stall the demo.
526
531
527 2006-01-24 Ville Vainio <vivainio@gmail.com>
532 2006-01-24 Ville Vainio <vivainio@gmail.com>
528
533
529 * iplib.py, hooks.py: 'result_display' hook can return a non-None
534 * iplib.py, hooks.py: 'result_display' hook can return a non-None
530 value to manipulate resulting history entry.
535 value to manipulate resulting history entry.
531
536
532 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
537 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
533 to instance methods of IPApi class, to make extending an embedded
538 to instance methods of IPApi class, to make extending an embedded
534 IPython feasible. See ext_rehashdir.py for example usage.
539 IPython feasible. See ext_rehashdir.py for example usage.
535
540
536 * Merged 1071-1076 from branches/0.7.1
541 * Merged 1071-1076 from branches/0.7.1
537
542
538
543
539 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
544 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
540
545
541 * tools/release (daystamp): Fix build tools to use the new
546 * tools/release (daystamp): Fix build tools to use the new
542 eggsetup.py script to build lightweight eggs.
547 eggsetup.py script to build lightweight eggs.
543
548
544 * Applied changesets 1062 and 1064 before 0.7.1 release.
549 * Applied changesets 1062 and 1064 before 0.7.1 release.
545
550
546 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
551 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
547 see the raw input history (without conversions like %ls ->
552 see the raw input history (without conversions like %ls ->
548 ipmagic("ls")). After a request from W. Stein, SAGE
553 ipmagic("ls")). After a request from W. Stein, SAGE
549 (http://modular.ucsd.edu/sage) developer. This information is
554 (http://modular.ucsd.edu/sage) developer. This information is
550 stored in the input_hist_raw attribute of the IPython instance, so
555 stored in the input_hist_raw attribute of the IPython instance, so
551 developers can access it if needed (it's an InputList instance).
556 developers can access it if needed (it's an InputList instance).
552
557
553 * Versionstring = 0.7.2.svn
558 * Versionstring = 0.7.2.svn
554
559
555 * eggsetup.py: A separate script for constructing eggs, creates
560 * eggsetup.py: A separate script for constructing eggs, creates
556 proper launch scripts even on Windows (an .exe file in
561 proper launch scripts even on Windows (an .exe file in
557 \python24\scripts).
562 \python24\scripts).
558
563
559 * ipapi.py: launch_new_instance, launch entry point needed for the
564 * ipapi.py: launch_new_instance, launch entry point needed for the
560 egg.
565 egg.
561
566
562 2006-01-23 Ville Vainio <vivainio@gmail.com>
567 2006-01-23 Ville Vainio <vivainio@gmail.com>
563
568
564 * Added %cpaste magic for pasting python code
569 * Added %cpaste magic for pasting python code
565
570
566 2006-01-22 Ville Vainio <vivainio@gmail.com>
571 2006-01-22 Ville Vainio <vivainio@gmail.com>
567
572
568 * Merge from branches/0.7.1 into trunk, revs 1052-1057
573 * Merge from branches/0.7.1 into trunk, revs 1052-1057
569
574
570 * Versionstring = 0.7.2.svn
575 * Versionstring = 0.7.2.svn
571
576
572 * eggsetup.py: A separate script for constructing eggs, creates
577 * eggsetup.py: A separate script for constructing eggs, creates
573 proper launch scripts even on Windows (an .exe file in
578 proper launch scripts even on Windows (an .exe file in
574 \python24\scripts).
579 \python24\scripts).
575
580
576 * ipapi.py: launch_new_instance, launch entry point needed for the
581 * ipapi.py: launch_new_instance, launch entry point needed for the
577 egg.
582 egg.
578
583
579 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
584 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
580
585
581 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
586 * 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.
587 %pfile foo would print the file for foo even if it was a binary.
583 Now, extensions '.so' and '.dll' are skipped.
588 Now, extensions '.so' and '.dll' are skipped.
584
589
585 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
590 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
586 bug, where macros would fail in all threaded modes. I'm not 100%
591 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
592 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.
593 today, and wait for feedback for at least a few days.
589
594
590 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
595 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
591 it...) the handling of pasting external code with autoindent on.
596 it...) the handling of pasting external code with autoindent on.
592 To get out of a multiline input, the rule will appear for most
597 To get out of a multiline input, the rule will appear for most
593 users unchanged: two blank lines or change the indent level
598 users unchanged: two blank lines or change the indent level
594 proposed by IPython. But there is a twist now: you can
599 proposed by IPython. But there is a twist now: you can
595 add/subtract only *one or two spaces*. If you add/subtract three
600 add/subtract only *one or two spaces*. If you add/subtract three
596 or more (unless you completely delete the line), IPython will
601 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
602 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
603 whitespace. I know it sounds complicated, but I can't find a
599 different solution that covers all the cases, with the right
604 different solution that covers all the cases, with the right
600 heuristics. Hopefully in actual use, nobody will really notice
605 heuristics. Hopefully in actual use, nobody will really notice
601 all these strange rules and things will 'just work'.
606 all these strange rules and things will 'just work'.
602
607
603 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
608 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
604
609
605 * IPython/iplib.py (interact): catch exceptions which can be
610 * IPython/iplib.py (interact): catch exceptions which can be
606 triggered asynchronously by signal handlers. Thanks to an
611 triggered asynchronously by signal handlers. Thanks to an
607 automatic crash report, submitted by Colin Kingsley
612 automatic crash report, submitted by Colin Kingsley
608 <tercel-AT-gentoo.org>.
613 <tercel-AT-gentoo.org>.
609
614
610 2006-01-20 Ville Vainio <vivainio@gmail.com>
615 2006-01-20 Ville Vainio <vivainio@gmail.com>
611
616
612 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
617 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
613 (%rehashdir, very useful, try it out) of how to extend ipython
618 (%rehashdir, very useful, try it out) of how to extend ipython
614 with new magics. Also added Extensions dir to pythonpath to make
619 with new magics. Also added Extensions dir to pythonpath to make
615 importing extensions easy.
620 importing extensions easy.
616
621
617 * %store now complains when trying to store interactively declared
622 * %store now complains when trying to store interactively declared
618 classes / instances of those classes.
623 classes / instances of those classes.
619
624
620 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
625 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
621 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
626 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
627 if they exist, and ipy_user_conf.py with some defaults is created for
623 the user.
628 the user.
624
629
625 * Startup rehashing done by the config file, not InterpreterExec.
630 * Startup rehashing done by the config file, not InterpreterExec.
626 This means system commands are available even without selecting the
631 This means system commands are available even without selecting the
627 pysh profile. It's the sensible default after all.
632 pysh profile. It's the sensible default after all.
628
633
629 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
634 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
630
635
631 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
636 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
632 multiline code with autoindent on working. But I am really not
637 multiline code with autoindent on working. But I am really not
633 sure, so this needs more testing. Will commit a debug-enabled
638 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
639 version for now, while I test it some more, so that Ville and
635 others may also catch any problems. Also made
640 others may also catch any problems. Also made
636 self.indent_current_str() a method, to ensure that there's no
641 self.indent_current_str() a method, to ensure that there's no
637 chance of the indent space count and the corresponding string
642 chance of the indent space count and the corresponding string
638 falling out of sync. All code needing the string should just call
643 falling out of sync. All code needing the string should just call
639 the method.
644 the method.
640
645
641 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
646 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
642
647
643 * IPython/Magic.py (magic_edit): fix check for when users don't
648 * 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.
649 save their output files, the try/except was in the wrong section.
645
650
646 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
651 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
647
652
648 * IPython/Magic.py (magic_run): fix __file__ global missing from
653 * IPython/Magic.py (magic_run): fix __file__ global missing from
649 script's namespace when executed via %run. After a report by
654 script's namespace when executed via %run. After a report by
650 Vivian.
655 Vivian.
651
656
652 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
657 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
653 when using python 2.4. The parent constructor changed in 2.4, and
658 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
659 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).
660 readline and tab-completion inside our pdb would stop working).
656 After a bug report by R. Bernstein <rocky-AT-panix.com>.
661 After a bug report by R. Bernstein <rocky-AT-panix.com>.
657
662
658 2006-01-16 Ville Vainio <vivainio@gmail.com>
663 2006-01-16 Ville Vainio <vivainio@gmail.com>
659
664
660 * Ipython/magic.py: Reverted back to old %edit functionality
665 * Ipython/magic.py: Reverted back to old %edit functionality
661 that returns file contents on exit.
666 that returns file contents on exit.
662
667
663 * IPython/path.py: Added Jason Orendorff's "path" module to
668 * IPython/path.py: Added Jason Orendorff's "path" module to
664 IPython tree, http://www.jorendorff.com/articles/python/path/.
669 IPython tree, http://www.jorendorff.com/articles/python/path/.
665 You can get path objects conveniently through %sc, and !!, e.g.:
670 You can get path objects conveniently through %sc, and !!, e.g.:
666 sc files=ls
671 sc files=ls
667 for p in files.paths: # or files.p
672 for p in files.paths: # or files.p
668 print p,p.mtime
673 print p,p.mtime
669
674
670 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
675 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
671 now work again without considering the exclusion regexp -
676 now work again without considering the exclusion regexp -
672 hence, things like ',foo my/path' turn to 'foo("my/path")'
677 hence, things like ',foo my/path' turn to 'foo("my/path")'
673 instead of syntax error.
678 instead of syntax error.
674
679
675
680
676 2006-01-14 Ville Vainio <vivainio@gmail.com>
681 2006-01-14 Ville Vainio <vivainio@gmail.com>
677
682
678 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
683 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
679 ipapi decorators for python 2.4 users, options() provides access to rc
684 ipapi decorators for python 2.4 users, options() provides access to rc
680 data.
685 data.
681
686
682 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
687 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
683 as path separators (even on Linux ;-). Space character after
688 as path separators (even on Linux ;-). Space character after
684 backslash (as yielded by tab completer) is still space;
689 backslash (as yielded by tab completer) is still space;
685 "%cd long\ name" works as expected.
690 "%cd long\ name" works as expected.
686
691
687 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
692 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
688 as "chain of command", with priority. API stays the same,
693 as "chain of command", with priority. API stays the same,
689 TryNext exception raised by a hook function signals that
694 TryNext exception raised by a hook function signals that
690 current hook failed and next hook should try handling it, as
695 current hook failed and next hook should try handling it, as
691 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
696 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
692 requested configurable display hook, which is now implemented.
697 requested configurable display hook, which is now implemented.
693
698
694 2006-01-13 Ville Vainio <vivainio@gmail.com>
699 2006-01-13 Ville Vainio <vivainio@gmail.com>
695
700
696 * IPython/platutils*.py: platform specific utility functions,
701 * IPython/platutils*.py: platform specific utility functions,
697 so far only set_term_title is implemented (change terminal
702 so far only set_term_title is implemented (change terminal
698 label in windowing systems). %cd now changes the title to
703 label in windowing systems). %cd now changes the title to
699 current dir.
704 current dir.
700
705
701 * IPython/Release.py: Added myself to "authors" list,
706 * IPython/Release.py: Added myself to "authors" list,
702 had to create new files.
707 had to create new files.
703
708
704 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
709 * 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
710 shell escape; not a known bug but had potential to be one in the
706 future.
711 future.
707
712
708 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
713 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
709 extension API for IPython! See the module for usage example. Fix
714 extension API for IPython! See the module for usage example. Fix
710 OInspect for docstring-less magic functions.
715 OInspect for docstring-less magic functions.
711
716
712
717
713 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
718 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
714
719
715 * IPython/iplib.py (raw_input): temporarily deactivate all
720 * IPython/iplib.py (raw_input): temporarily deactivate all
716 attempts at allowing pasting of code with autoindent on. It
721 attempts at allowing pasting of code with autoindent on. It
717 introduced bugs (reported by Prabhu) and I can't seem to find a
722 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
723 robust combination which works in all cases. Will have to revisit
719 later.
724 later.
720
725
721 * IPython/genutils.py: remove isspace() function. We've dropped
726 * IPython/genutils.py: remove isspace() function. We've dropped
722 2.2 compatibility, so it's OK to use the string method.
727 2.2 compatibility, so it's OK to use the string method.
723
728
724 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
729 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
725
730
726 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
731 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
727 matching what NOT to autocall on, to include all python binary
732 matching what NOT to autocall on, to include all python binary
728 operators (including things like 'and', 'or', 'is' and 'in').
733 operators (including things like 'and', 'or', 'is' and 'in').
729 Prompted by a bug report on 'foo & bar', but I realized we had
734 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
735 many more potential bug cases with other operators. The regexp is
731 self.re_exclude_auto, it's fairly commented.
736 self.re_exclude_auto, it's fairly commented.
732
737
733 2006-01-12 Ville Vainio <vivainio@gmail.com>
738 2006-01-12 Ville Vainio <vivainio@gmail.com>
734
739
735 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
740 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
736 Prettified and hardened string/backslash quoting with ipsystem(),
741 Prettified and hardened string/backslash quoting with ipsystem(),
737 ipalias() and ipmagic(). Now even \ characters are passed to
742 ipalias() and ipmagic(). Now even \ characters are passed to
738 %magics, !shell escapes and aliases exactly as they are in the
743 %magics, !shell escapes and aliases exactly as they are in the
739 ipython command line. Should improve backslash experience,
744 ipython command line. Should improve backslash experience,
740 particularly in Windows (path delimiter for some commands that
745 particularly in Windows (path delimiter for some commands that
741 won't understand '/'), but Unix benefits as well (regexps). %cd
746 won't understand '/'), but Unix benefits as well (regexps). %cd
742 magic still doesn't support backslash path delimiters, though. Also
747 magic still doesn't support backslash path delimiters, though. Also
743 deleted all pretense of supporting multiline command strings in
748 deleted all pretense of supporting multiline command strings in
744 !system or %magic commands. Thanks to Jerry McRae for suggestions.
749 !system or %magic commands. Thanks to Jerry McRae for suggestions.
745
750
746 * doc/build_doc_instructions.txt added. Documentation on how to
751 * doc/build_doc_instructions.txt added. Documentation on how to
747 use doc/update_manual.py, added yesterday. Both files contributed
752 use doc/update_manual.py, added yesterday. Both files contributed
748 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
753 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
749 doc/*.sh for deprecation at a later date.
754 doc/*.sh for deprecation at a later date.
750
755
751 * /ipython.py Added ipython.py to root directory for
756 * /ipython.py Added ipython.py to root directory for
752 zero-installation (tar xzvf ipython.tgz; cd ipython; python
757 zero-installation (tar xzvf ipython.tgz; cd ipython; python
753 ipython.py) and development convenience (no need to keep doing
758 ipython.py) and development convenience (no need to keep doing
754 "setup.py install" between changes).
759 "setup.py install" between changes).
755
760
756 * Made ! and !! shell escapes work (again) in multiline expressions:
761 * Made ! and !! shell escapes work (again) in multiline expressions:
757 if 1:
762 if 1:
758 !ls
763 !ls
759 !!ls
764 !!ls
760
765
761 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
766 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
762
767
763 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
768 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
764 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
769 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
765 module in case-insensitive installation. Was causing crashes
770 module in case-insensitive installation. Was causing crashes
766 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
771 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
767
772
768 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
773 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
769 <marienz-AT-gentoo.org>, closes
774 <marienz-AT-gentoo.org>, closes
770 http://www.scipy.net/roundup/ipython/issue51.
775 http://www.scipy.net/roundup/ipython/issue51.
771
776
772 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
777 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
773
778
774 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
779 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
775 problem of excessive CPU usage under *nix and keyboard lag under
780 problem of excessive CPU usage under *nix and keyboard lag under
776 win32.
781 win32.
777
782
778 2006-01-10 *** Released version 0.7.0
783 2006-01-10 *** Released version 0.7.0
779
784
780 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
785 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
781
786
782 * IPython/Release.py (revision): tag version number to 0.7.0,
787 * IPython/Release.py (revision): tag version number to 0.7.0,
783 ready for release.
788 ready for release.
784
789
785 * IPython/Magic.py (magic_edit): Add print statement to %edit so
790 * 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
791 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
792 help if you decide later to reuse that same file, so you know
788 where to copy the info from.
793 where to copy the info from.
789
794
790 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
795 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
791
796
792 * setup_bdist_egg.py: little script to build an egg. Added
797 * setup_bdist_egg.py: little script to build an egg. Added
793 support in the release tools as well.
798 support in the release tools as well.
794
799
795 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
800 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
796
801
797 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
802 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
798 version selection (new -wxversion command line and ipythonrc
803 version selection (new -wxversion command line and ipythonrc
799 parameter). Patch contributed by Arnd Baecker
804 parameter). Patch contributed by Arnd Baecker
800 <arnd.baecker-AT-web.de>.
805 <arnd.baecker-AT-web.de>.
801
806
802 * IPython/iplib.py (embed_mainloop): fix tab-completion in
807 * IPython/iplib.py (embed_mainloop): fix tab-completion in
803 embedded instances, for variables defined at the interactive
808 embedded instances, for variables defined at the interactive
804 prompt of the embedded ipython. Reported by Arnd.
809 prompt of the embedded ipython. Reported by Arnd.
805
810
806 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
811 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
807 it can be used as a (stateful) toggle, or with a direct parameter.
812 it can be used as a (stateful) toggle, or with a direct parameter.
808
813
809 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
814 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
810 could be triggered in certain cases and cause the traceback
815 could be triggered in certain cases and cause the traceback
811 printer not to work.
816 printer not to work.
812
817
813 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
818 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
814
819
815 * IPython/iplib.py (_should_recompile): Small fix, closes
820 * IPython/iplib.py (_should_recompile): Small fix, closes
816 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
821 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
817
822
818 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
823 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
819
824
820 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
825 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
821 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
826 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
822 Moad for help with tracking it down.
827 Moad for help with tracking it down.
823
828
824 * IPython/iplib.py (handle_auto): fix autocall handling for
829 * IPython/iplib.py (handle_auto): fix autocall handling for
825 objects which support BOTH __getitem__ and __call__ (so that f [x]
830 objects which support BOTH __getitem__ and __call__ (so that f [x]
826 is left alone, instead of becoming f([x]) automatically).
831 is left alone, instead of becoming f([x]) automatically).
827
832
828 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
833 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
829 Ville's patch.
834 Ville's patch.
830
835
831 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
836 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
832
837
833 * IPython/iplib.py (handle_auto): changed autocall semantics to
838 * IPython/iplib.py (handle_auto): changed autocall semantics to
834 include 'smart' mode, where the autocall transformation is NOT
839 include 'smart' mode, where the autocall transformation is NOT
835 applied if there are no arguments on the line. This allows you to
840 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,
841 just type 'foo' if foo is a callable to see its internal form,
837 instead of having it called with no arguments (typically a
842 instead of having it called with no arguments (typically a
838 mistake). The old 'full' autocall still exists: for that, you
843 mistake). The old 'full' autocall still exists: for that, you
839 need to set the 'autocall' parameter to 2 in your ipythonrc file.
844 need to set the 'autocall' parameter to 2 in your ipythonrc file.
840
845
841 * IPython/completer.py (Completer.attr_matches): add
846 * IPython/completer.py (Completer.attr_matches): add
842 tab-completion support for Enthoughts' traits. After a report by
847 tab-completion support for Enthoughts' traits. After a report by
843 Arnd and a patch by Prabhu.
848 Arnd and a patch by Prabhu.
844
849
845 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
850 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
846
851
847 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
852 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
848 Schmolck's patch to fix inspect.getinnerframes().
853 Schmolck's patch to fix inspect.getinnerframes().
849
854
850 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
855 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
851 for embedded instances, regarding handling of namespaces and items
856 for embedded instances, regarding handling of namespaces and items
852 added to the __builtin__ one. Multiple embedded instances and
857 added to the __builtin__ one. Multiple embedded instances and
853 recursive embeddings should work better now (though I'm not sure
858 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
859 I've got all the corner cases fixed, that code is a bit of a brain
855 twister).
860 twister).
856
861
857 * IPython/Magic.py (magic_edit): added support to edit in-memory
862 * IPython/Magic.py (magic_edit): added support to edit in-memory
858 macros (automatically creates the necessary temp files). %edit
863 macros (automatically creates the necessary temp files). %edit
859 also doesn't return the file contents anymore, it's just noise.
864 also doesn't return the file contents anymore, it's just noise.
860
865
861 * IPython/completer.py (Completer.attr_matches): revert change to
866 * IPython/completer.py (Completer.attr_matches): revert change to
862 complete only on attributes listed in __all__. I realized it
867 complete only on attributes listed in __all__. I realized it
863 cripples the tab-completion system as a tool for exploring the
868 cripples the tab-completion system as a tool for exploring the
864 internals of unknown libraries (it renders any non-__all__
869 internals of unknown libraries (it renders any non-__all__
865 attribute off-limits). I got bit by this when trying to see
870 attribute off-limits). I got bit by this when trying to see
866 something inside the dis module.
871 something inside the dis module.
867
872
868 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
873 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
869
874
870 * IPython/iplib.py (InteractiveShell.__init__): add .meta
875 * IPython/iplib.py (InteractiveShell.__init__): add .meta
871 namespace for users and extension writers to hold data in. This
876 namespace for users and extension writers to hold data in. This
872 follows the discussion in
877 follows the discussion in
873 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
878 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
874
879
875 * IPython/completer.py (IPCompleter.complete): small patch to help
880 * IPython/completer.py (IPCompleter.complete): small patch to help
876 tab-completion under Emacs, after a suggestion by John Barnard
881 tab-completion under Emacs, after a suggestion by John Barnard
877 <barnarj-AT-ccf.org>.
882 <barnarj-AT-ccf.org>.
878
883
879 * IPython/Magic.py (Magic.extract_input_slices): added support for
884 * 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
885 the slice notation in magics to use N-M to represent numbers N...M
881 (closed endpoints). This is used by %macro and %save.
886 (closed endpoints). This is used by %macro and %save.
882
887
883 * IPython/completer.py (Completer.attr_matches): for modules which
888 * IPython/completer.py (Completer.attr_matches): for modules which
884 define __all__, complete only on those. After a patch by Jeffrey
889 define __all__, complete only on those. After a patch by Jeffrey
885 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
890 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
886 speed up this routine.
891 speed up this routine.
887
892
888 * IPython/Logger.py (Logger.log): fix a history handling bug. I
893 * 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
894 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,
895 certainly much more correct. Note that coupled with macros,
891 slightly surprising (at first) behavior may occur: a macro will in
896 slightly surprising (at first) behavior may occur: a macro will in
892 general expand to multiple lines of input, so upon exiting, the
897 general expand to multiple lines of input, so upon exiting, the
893 in/out counters will both be bumped by the corresponding amount
898 in/out counters will both be bumped by the corresponding amount
894 (as if the macro's contents had been typed interactively). Typing
899 (as if the macro's contents had been typed interactively). Typing
895 %hist will reveal the intermediate (silently processed) lines.
900 %hist will reveal the intermediate (silently processed) lines.
896
901
897 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
902 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
898 pickle to fail (%run was overwriting __main__ and not restoring
903 pickle to fail (%run was overwriting __main__ and not restoring
899 it, but pickle relies on __main__ to operate).
904 it, but pickle relies on __main__ to operate).
900
905
901 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
906 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
902 using properties, but forgot to make the main InteractiveShell
907 using properties, but forgot to make the main InteractiveShell
903 class a new-style class. Properties fail silently, and
908 class a new-style class. Properties fail silently, and
904 mysteriously, with old-style class (getters work, but
909 mysteriously, with old-style class (getters work, but
905 setters don't do anything).
910 setters don't do anything).
906
911
907 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
912 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
908
913
909 * IPython/Magic.py (magic_history): fix history reporting bug (I
914 * 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
915 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
916 reproducible test case to track them down; the input history is
912 falling out of sync...)
917 falling out of sync...)
913
918
914 * IPython/iplib.py (handle_shell_escape): fix bug where both
919 * IPython/iplib.py (handle_shell_escape): fix bug where both
915 aliases and system accesses where broken for indented code (such
920 aliases and system accesses where broken for indented code (such
916 as loops).
921 as loops).
917
922
918 * IPython/genutils.py (shell): fix small but critical bug for
923 * IPython/genutils.py (shell): fix small but critical bug for
919 win32 system access.
924 win32 system access.
920
925
921 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
926 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
922
927
923 * IPython/iplib.py (showtraceback): remove use of the
928 * IPython/iplib.py (showtraceback): remove use of the
924 sys.last_{type/value/traceback} structures, which are non
929 sys.last_{type/value/traceback} structures, which are non
925 thread-safe.
930 thread-safe.
926 (_prefilter): change control flow to ensure that we NEVER
931 (_prefilter): change control flow to ensure that we NEVER
927 introspect objects when autocall is off. This will guarantee that
932 introspect objects when autocall is off. This will guarantee that
928 having an input line of the form 'x.y', where access to attribute
933 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
934 'y' has side effects, doesn't trigger the side effect TWICE. It
930 is important to note that, with autocall on, these side effects
935 is important to note that, with autocall on, these side effects
931 can still happen.
936 can still happen.
932 (ipsystem): new builtin, to complete the ip{magic/alias/system}
937 (ipsystem): new builtin, to complete the ip{magic/alias/system}
933 trio. IPython offers these three kinds of special calls which are
938 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
939 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
940 be accessible as pure python functions (not just special syntax at
936 the command line). It gives us a better internal implementation
941 the command line). It gives us a better internal implementation
937 structure, as well as exposing these for user scripting more
942 structure, as well as exposing these for user scripting more
938 cleanly.
943 cleanly.
939
944
940 * IPython/macro.py (Macro.__init__): moved macros to a standalone
945 * IPython/macro.py (Macro.__init__): moved macros to a standalone
941 file. Now that they'll be more likely to be used with the
946 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
947 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
948 doesn't change in the future, so that we don't break things for
944 users' persisted data.
949 users' persisted data.
945
950
946 * IPython/iplib.py (autoindent_update): move indentation
951 * IPython/iplib.py (autoindent_update): move indentation
947 management into the _text_ processing loop, not the keyboard
952 management into the _text_ processing loop, not the keyboard
948 interactive one. This is necessary to correctly process non-typed
953 interactive one. This is necessary to correctly process non-typed
949 multiline input (such as macros).
954 multiline input (such as macros).
950
955
951 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
956 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
952 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
957 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
953 which was producing problems in the resulting manual.
958 which was producing problems in the resulting manual.
954 (magic_whos): improve reporting of instances (show their class,
959 (magic_whos): improve reporting of instances (show their class,
955 instead of simply printing 'instance' which isn't terribly
960 instead of simply printing 'instance' which isn't terribly
956 informative).
961 informative).
957
962
958 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
963 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
959 (minor mods) to support network shares under win32.
964 (minor mods) to support network shares under win32.
960
965
961 * IPython/winconsole.py (get_console_size): add new winconsole
966 * IPython/winconsole.py (get_console_size): add new winconsole
962 module and fixes to page_dumb() to improve its behavior under
967 module and fixes to page_dumb() to improve its behavior under
963 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
968 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
964
969
965 * IPython/Magic.py (Macro): simplified Macro class to just
970 * IPython/Magic.py (Macro): simplified Macro class to just
966 subclass list. We've had only 2.2 compatibility for a very long
971 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
972 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
973 more (I'm also starting to use properties, though I won't shift to
969 2.3-specific features quite yet).
974 2.3-specific features quite yet).
970 (magic_store): added Ville's patch for lightweight variable
975 (magic_store): added Ville's patch for lightweight variable
971 persistence, after a request on the user list by Matt Wilkie
976 persistence, after a request on the user list by Matt Wilkie
972 <maphew-AT-gmail.com>. The new %store magic's docstring has full
977 <maphew-AT-gmail.com>. The new %store magic's docstring has full
973 details.
978 details.
974
979
975 * IPython/iplib.py (InteractiveShell.post_config_initialization):
980 * IPython/iplib.py (InteractiveShell.post_config_initialization):
976 changed the default logfile name from 'ipython.log' to
981 changed the default logfile name from 'ipython.log' to
977 'ipython_log.py'. These logs are real python files, and now that
982 'ipython_log.py'. These logs are real python files, and now that
978 we have much better multiline support, people are more likely to
983 we have much better multiline support, people are more likely to
979 want to use them as such. Might as well name them correctly.
984 want to use them as such. Might as well name them correctly.
980
985
981 * IPython/Magic.py: substantial cleanup. While we can't stop
986 * IPython/Magic.py: substantial cleanup. While we can't stop
982 using magics as mixins, due to the existing customizations 'out
987 using magics as mixins, due to the existing customizations 'out
983 there' which rely on the mixin naming conventions, at least I
988 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
989 cleaned out all cross-class name usage. So once we are OK with
985 breaking compatibility, the two systems can be separated.
990 breaking compatibility, the two systems can be separated.
986
991
987 * IPython/Logger.py: major cleanup. This one is NOT a mixin
992 * 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
993 anymore, and the class is a fair bit less hideous as well. New
989 features were also introduced: timestamping of input, and logging
994 features were also introduced: timestamping of input, and logging
990 of output results. These are user-visible with the -t and -o
995 of output results. These are user-visible with the -t and -o
991 options to %logstart. Closes
996 options to %logstart. Closes
992 http://www.scipy.net/roundup/ipython/issue11 and a request by
997 http://www.scipy.net/roundup/ipython/issue11 and a request by
993 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
998 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
994
999
995 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1000 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
996
1001
997 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1002 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
998 better handle backslashes in paths. See the thread 'More Windows
1003 better handle backslashes in paths. See the thread 'More Windows
999 questions part 2 - \/ characters revisited' on the iypthon user
1004 questions part 2 - \/ characters revisited' on the iypthon user
1000 list:
1005 list:
1001 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1006 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1002
1007
1003 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1008 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1004
1009
1005 (InteractiveShell.__init__): change threaded shells to not use the
1010 (InteractiveShell.__init__): change threaded shells to not use the
1006 ipython crash handler. This was causing more problems than not,
1011 ipython crash handler. This was causing more problems than not,
1007 as exceptions in the main thread (GUI code, typically) would
1012 as exceptions in the main thread (GUI code, typically) would
1008 always show up as a 'crash', when they really weren't.
1013 always show up as a 'crash', when they really weren't.
1009
1014
1010 The colors and exception mode commands (%colors/%xmode) have been
1015 The colors and exception mode commands (%colors/%xmode) have been
1011 synchronized to also take this into account, so users can get
1016 synchronized to also take this into account, so users can get
1012 verbose exceptions for their threaded code as well. I also added
1017 verbose exceptions for their threaded code as well. I also added
1013 support for activating pdb inside this exception handler as well,
1018 support for activating pdb inside this exception handler as well,
1014 so now GUI authors can use IPython's enhanced pdb at runtime.
1019 so now GUI authors can use IPython's enhanced pdb at runtime.
1015
1020
1016 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1021 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1017 true by default, and add it to the shipped ipythonrc file. Since
1022 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
1023 this asks the user before proceeding, I think it's OK to make it
1019 true by default.
1024 true by default.
1020
1025
1021 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1026 * 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
1027 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
1028 this is cleaner, as they really are commands and shouldn't have
1024 a special role in the middle of the core code.
1029 a special role in the middle of the core code.
1025
1030
1026 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1031 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1027
1032
1028 * IPython/iplib.py (edit_syntax_error): added support for
1033 * IPython/iplib.py (edit_syntax_error): added support for
1029 automatically reopening the editor if the file had a syntax error
1034 automatically reopening the editor if the file had a syntax error
1030 in it. Thanks to scottt who provided the patch at:
1035 in it. Thanks to scottt who provided the patch at:
1031 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1036 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1032 version committed).
1037 version committed).
1033
1038
1034 * IPython/iplib.py (handle_normal): add suport for multi-line
1039 * IPython/iplib.py (handle_normal): add suport for multi-line
1035 input with emtpy lines. This fixes
1040 input with emtpy lines. This fixes
1036 http://www.scipy.net/roundup/ipython/issue43 and a similar
1041 http://www.scipy.net/roundup/ipython/issue43 and a similar
1037 discussion on the user list.
1042 discussion on the user list.
1038
1043
1039 WARNING: a behavior change is necessarily introduced to support
1044 WARNING: a behavior change is necessarily introduced to support
1040 blank lines: now a single blank line with whitespace does NOT
1045 blank lines: now a single blank line with whitespace does NOT
1041 break the input loop, which means that when autoindent is on, by
1046 break the input loop, which means that when autoindent is on, by
1042 default hitting return on the next (indented) line does NOT exit.
1047 default hitting return on the next (indented) line does NOT exit.
1043
1048
1044 Instead, to exit a multiline input you can either have:
1049 Instead, to exit a multiline input you can either have:
1045
1050
1046 - TWO whitespace lines (just hit return again), or
1051 - TWO whitespace lines (just hit return again), or
1047 - a single whitespace line of a different length than provided
1052 - a single whitespace line of a different length than provided
1048 by the autoindent (add or remove a space).
1053 by the autoindent (add or remove a space).
1049
1054
1050 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1055 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1051 module to better organize all readline-related functionality.
1056 module to better organize all readline-related functionality.
1052 I've deleted FlexCompleter and put all completion clases here.
1057 I've deleted FlexCompleter and put all completion clases here.
1053
1058
1054 * IPython/iplib.py (raw_input): improve indentation management.
1059 * IPython/iplib.py (raw_input): improve indentation management.
1055 It is now possible to paste indented code with autoindent on, and
1060 It is now possible to paste indented code with autoindent on, and
1056 the code is interpreted correctly (though it still looks bad on
1061 the code is interpreted correctly (though it still looks bad on
1057 screen, due to the line-oriented nature of ipython).
1062 screen, due to the line-oriented nature of ipython).
1058 (MagicCompleter.complete): change behavior so that a TAB key on an
1063 (MagicCompleter.complete): change behavior so that a TAB key on an
1059 otherwise empty line actually inserts a tab, instead of completing
1064 otherwise empty line actually inserts a tab, instead of completing
1060 on the entire global namespace. This makes it easier to use the
1065 on the entire global namespace. This makes it easier to use the
1061 TAB key for indentation. After a request by Hans Meine
1066 TAB key for indentation. After a request by Hans Meine
1062 <hans_meine-AT-gmx.net>
1067 <hans_meine-AT-gmx.net>
1063 (_prefilter): add support so that typing plain 'exit' or 'quit'
1068 (_prefilter): add support so that typing plain 'exit' or 'quit'
1064 does a sensible thing. Originally I tried to deviate as little as
1069 does a sensible thing. Originally I tried to deviate as little as
1065 possible from the default python behavior, but even that one may
1070 possible from the default python behavior, but even that one may
1066 change in this direction (thread on python-dev to that effect).
1071 change in this direction (thread on python-dev to that effect).
1067 Regardless, ipython should do the right thing even if CPython's
1072 Regardless, ipython should do the right thing even if CPython's
1068 '>>>' prompt doesn't.
1073 '>>>' prompt doesn't.
1069 (InteractiveShell): removed subclassing code.InteractiveConsole
1074 (InteractiveShell): removed subclassing code.InteractiveConsole
1070 class. By now we'd overridden just about all of its methods: I've
1075 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
1076 copied the remaining two over, and now ipython is a standalone
1072 class. This will provide a clearer picture for the chainsaw
1077 class. This will provide a clearer picture for the chainsaw
1073 branch refactoring.
1078 branch refactoring.
1074
1079
1075 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1080 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1076
1081
1077 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1082 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1078 failures for objects which break when dir() is called on them.
1083 failures for objects which break when dir() is called on them.
1079
1084
1080 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1085 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1081 distinct local and global namespaces in the completer API. This
1086 distinct local and global namespaces in the completer API. This
1082 change allows us to properly handle completion with distinct
1087 change allows us to properly handle completion with distinct
1083 scopes, including in embedded instances (this had never really
1088 scopes, including in embedded instances (this had never really
1084 worked correctly).
1089 worked correctly).
1085
1090
1086 Note: this introduces a change in the constructor for
1091 Note: this introduces a change in the constructor for
1087 MagicCompleter, as a new global_namespace parameter is now the
1092 MagicCompleter, as a new global_namespace parameter is now the
1088 second argument (the others were bumped one position).
1093 second argument (the others were bumped one position).
1089
1094
1090 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1095 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1091
1096
1092 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1097 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1093 embedded instances (which can be done now thanks to Vivian's
1098 embedded instances (which can be done now thanks to Vivian's
1094 frame-handling fixes for pdb).
1099 frame-handling fixes for pdb).
1095 (InteractiveShell.__init__): Fix namespace handling problem in
1100 (InteractiveShell.__init__): Fix namespace handling problem in
1096 embedded instances. We were overwriting __main__ unconditionally,
1101 embedded instances. We were overwriting __main__ unconditionally,
1097 and this should only be done for 'full' (non-embedded) IPython;
1102 and this should only be done for 'full' (non-embedded) IPython;
1098 embedded instances must respect the caller's __main__. Thanks to
1103 embedded instances must respect the caller's __main__. Thanks to
1099 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1104 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1100
1105
1101 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1106 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1102
1107
1103 * setup.py: added download_url to setup(). This registers the
1108 * setup.py: added download_url to setup(). This registers the
1104 download address at PyPI, which is not only useful to humans
1109 download address at PyPI, which is not only useful to humans
1105 browsing the site, but is also picked up by setuptools (the Eggs
1110 browsing the site, but is also picked up by setuptools (the Eggs
1106 machinery). Thanks to Ville and R. Kern for the info/discussion
1111 machinery). Thanks to Ville and R. Kern for the info/discussion
1107 on this.
1112 on this.
1108
1113
1109 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1114 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1110
1115
1111 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1116 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1112 This brings a lot of nice functionality to the pdb mode, which now
1117 This brings a lot of nice functionality to the pdb mode, which now
1113 has tab-completion, syntax highlighting, and better stack handling
1118 has tab-completion, syntax highlighting, and better stack handling
1114 than before. Many thanks to Vivian De Smedt
1119 than before. Many thanks to Vivian De Smedt
1115 <vivian-AT-vdesmedt.com> for the original patches.
1120 <vivian-AT-vdesmedt.com> for the original patches.
1116
1121
1117 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1122 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1118
1123
1119 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1124 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1120 sequence to consistently accept the banner argument. The
1125 sequence to consistently accept the banner argument. The
1121 inconsistency was tripping SAGE, thanks to Gary Zablackis
1126 inconsistency was tripping SAGE, thanks to Gary Zablackis
1122 <gzabl-AT-yahoo.com> for the report.
1127 <gzabl-AT-yahoo.com> for the report.
1123
1128
1124 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1129 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1125
1130
1126 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1131 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1127 Fix bug where a naked 'alias' call in the ipythonrc file would
1132 Fix bug where a naked 'alias' call in the ipythonrc file would
1128 cause a crash. Bug reported by Jorgen Stenarson.
1133 cause a crash. Bug reported by Jorgen Stenarson.
1129
1134
1130 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1135 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1131
1136
1132 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1137 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1133 startup time.
1138 startup time.
1134
1139
1135 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1140 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1136 instances had introduced a bug with globals in normal code. Now
1141 instances had introduced a bug with globals in normal code. Now
1137 it's working in all cases.
1142 it's working in all cases.
1138
1143
1139 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1144 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1140 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1145 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1141 has been introduced to set the default case sensitivity of the
1146 has been introduced to set the default case sensitivity of the
1142 searches. Users can still select either mode at runtime on a
1147 searches. Users can still select either mode at runtime on a
1143 per-search basis.
1148 per-search basis.
1144
1149
1145 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1150 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1146
1151
1147 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1152 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1148 attributes in wildcard searches for subclasses. Modified version
1153 attributes in wildcard searches for subclasses. Modified version
1149 of a patch by Jorgen.
1154 of a patch by Jorgen.
1150
1155
1151 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1156 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1152
1157
1153 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1158 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1154 embedded instances. I added a user_global_ns attribute to the
1159 embedded instances. I added a user_global_ns attribute to the
1155 InteractiveShell class to handle this.
1160 InteractiveShell class to handle this.
1156
1161
1157 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1162 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1158
1163
1159 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1164 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1160 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1165 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1161 (reported under win32, but may happen also in other platforms).
1166 (reported under win32, but may happen also in other platforms).
1162 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1167 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1163
1168
1164 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1169 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1165
1170
1166 * IPython/Magic.py (magic_psearch): new support for wildcard
1171 * IPython/Magic.py (magic_psearch): new support for wildcard
1167 patterns. Now, typing ?a*b will list all names which begin with a
1172 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
1173 and end in b, for example. The %psearch magic has full
1169 docstrings. Many thanks to JΓΆrgen Stenarson
1174 docstrings. Many thanks to JΓΆrgen Stenarson
1170 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1175 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1171 implementing this functionality.
1176 implementing this functionality.
1172
1177
1173 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1178 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1174
1179
1175 * Manual: fixed long-standing annoyance of double-dashes (as in
1180 * Manual: fixed long-standing annoyance of double-dashes (as in
1176 --prefix=~, for example) being stripped in the HTML version. This
1181 --prefix=~, for example) being stripped in the HTML version. This
1177 is a latex2html bug, but a workaround was provided. Many thanks
1182 is a latex2html bug, but a workaround was provided. Many thanks
1178 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1183 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1179 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1184 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1180 rolling. This seemingly small issue had tripped a number of users
1185 rolling. This seemingly small issue had tripped a number of users
1181 when first installing, so I'm glad to see it gone.
1186 when first installing, so I'm glad to see it gone.
1182
1187
1183 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1188 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1184
1189
1185 * IPython/Extensions/numeric_formats.py: fix missing import,
1190 * IPython/Extensions/numeric_formats.py: fix missing import,
1186 reported by Stephen Walton.
1191 reported by Stephen Walton.
1187
1192
1188 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1193 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1189
1194
1190 * IPython/demo.py: finish demo module, fully documented now.
1195 * IPython/demo.py: finish demo module, fully documented now.
1191
1196
1192 * IPython/genutils.py (file_read): simple little utility to read a
1197 * IPython/genutils.py (file_read): simple little utility to read a
1193 file and ensure it's closed afterwards.
1198 file and ensure it's closed afterwards.
1194
1199
1195 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1200 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1196
1201
1197 * IPython/demo.py (Demo.__init__): added support for individually
1202 * IPython/demo.py (Demo.__init__): added support for individually
1198 tagging blocks for automatic execution.
1203 tagging blocks for automatic execution.
1199
1204
1200 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1205 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1201 syntax-highlighted python sources, requested by John.
1206 syntax-highlighted python sources, requested by John.
1202
1207
1203 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1208 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1204
1209
1205 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1210 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1206 finishing.
1211 finishing.
1207
1212
1208 * IPython/genutils.py (shlex_split): moved from Magic to here,
1213 * IPython/genutils.py (shlex_split): moved from Magic to here,
1209 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1214 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1210
1215
1211 * IPython/demo.py (Demo.__init__): added support for silent
1216 * IPython/demo.py (Demo.__init__): added support for silent
1212 blocks, improved marks as regexps, docstrings written.
1217 blocks, improved marks as regexps, docstrings written.
1213 (Demo.__init__): better docstring, added support for sys.argv.
1218 (Demo.__init__): better docstring, added support for sys.argv.
1214
1219
1215 * IPython/genutils.py (marquee): little utility used by the demo
1220 * IPython/genutils.py (marquee): little utility used by the demo
1216 code, handy in general.
1221 code, handy in general.
1217
1222
1218 * IPython/demo.py (Demo.__init__): new class for interactive
1223 * IPython/demo.py (Demo.__init__): new class for interactive
1219 demos. Not documented yet, I just wrote it in a hurry for
1224 demos. Not documented yet, I just wrote it in a hurry for
1220 scipy'05. Will docstring later.
1225 scipy'05. Will docstring later.
1221
1226
1222 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1227 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1223
1228
1224 * IPython/Shell.py (sigint_handler): Drastic simplification which
1229 * IPython/Shell.py (sigint_handler): Drastic simplification which
1225 also seems to make Ctrl-C work correctly across threads! This is
1230 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
1231 so simple, that I can't beleive I'd missed it before. Needs more
1227 testing, though.
1232 testing, though.
1228 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1233 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1229 like this before...
1234 like this before...
1230
1235
1231 * IPython/genutils.py (get_home_dir): add protection against
1236 * IPython/genutils.py (get_home_dir): add protection against
1232 non-dirs in win32 registry.
1237 non-dirs in win32 registry.
1233
1238
1234 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1239 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1235 bug where dict was mutated while iterating (pysh crash).
1240 bug where dict was mutated while iterating (pysh crash).
1236
1241
1237 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1242 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1238
1243
1239 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1244 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1240 spurious newlines added by this routine. After a report by
1245 spurious newlines added by this routine. After a report by
1241 F. Mantegazza.
1246 F. Mantegazza.
1242
1247
1243 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1248 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1244
1249
1245 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1250 * 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
1251 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).
1252 problems in certain cases (after a report by John Hunter).
1248
1253
1249 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1254 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1250 os.getcwd() fails at init time. Thanks to patch from David Remahl
1255 os.getcwd() fails at init time. Thanks to patch from David Remahl
1251 <chmod007-AT-mac.com>.
1256 <chmod007-AT-mac.com>.
1252 (InteractiveShell.__init__): prevent certain special magics from
1257 (InteractiveShell.__init__): prevent certain special magics from
1253 being shadowed by aliases. Closes
1258 being shadowed by aliases. Closes
1254 http://www.scipy.net/roundup/ipython/issue41.
1259 http://www.scipy.net/roundup/ipython/issue41.
1255
1260
1256 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1261 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1257
1262
1258 * IPython/iplib.py (InteractiveShell.complete): Added new
1263 * IPython/iplib.py (InteractiveShell.complete): Added new
1259 top-level completion method to expose the completion mechanism
1264 top-level completion method to expose the completion mechanism
1260 beyond readline-based environments.
1265 beyond readline-based environments.
1261
1266
1262 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1267 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1263
1268
1264 * tools/ipsvnc (svnversion): fix svnversion capture.
1269 * tools/ipsvnc (svnversion): fix svnversion capture.
1265
1270
1266 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1271 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1267 attribute to self, which was missing. Before, it was set by a
1272 attribute to self, which was missing. Before, it was set by a
1268 routine which in certain cases wasn't being called, so the
1273 routine which in certain cases wasn't being called, so the
1269 instance could end up missing the attribute. This caused a crash.
1274 instance could end up missing the attribute. This caused a crash.
1270 Closes http://www.scipy.net/roundup/ipython/issue40.
1275 Closes http://www.scipy.net/roundup/ipython/issue40.
1271
1276
1272 2005-08-16 Fernando Perez <fperez@colorado.edu>
1277 2005-08-16 Fernando Perez <fperez@colorado.edu>
1273
1278
1274 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1279 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1275 contains non-string attribute. Closes
1280 contains non-string attribute. Closes
1276 http://www.scipy.net/roundup/ipython/issue38.
1281 http://www.scipy.net/roundup/ipython/issue38.
1277
1282
1278 2005-08-14 Fernando Perez <fperez@colorado.edu>
1283 2005-08-14 Fernando Perez <fperez@colorado.edu>
1279
1284
1280 * tools/ipsvnc: Minor improvements, to add changeset info.
1285 * tools/ipsvnc: Minor improvements, to add changeset info.
1281
1286
1282 2005-08-12 Fernando Perez <fperez@colorado.edu>
1287 2005-08-12 Fernando Perez <fperez@colorado.edu>
1283
1288
1284 * IPython/iplib.py (runsource): remove self.code_to_run_src
1289 * IPython/iplib.py (runsource): remove self.code_to_run_src
1285 attribute. I realized this is nothing more than
1290 attribute. I realized this is nothing more than
1286 '\n'.join(self.buffer), and having the same data in two different
1291 '\n'.join(self.buffer), and having the same data in two different
1287 places is just asking for synchronization bugs. This may impact
1292 places is just asking for synchronization bugs. This may impact
1288 people who have custom exception handlers, so I need to warn
1293 people who have custom exception handlers, so I need to warn
1289 ipython-dev about it (F. Mantegazza may use them).
1294 ipython-dev about it (F. Mantegazza may use them).
1290
1295
1291 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1296 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1292
1297
1293 * IPython/genutils.py: fix 2.2 compatibility (generators)
1298 * IPython/genutils.py: fix 2.2 compatibility (generators)
1294
1299
1295 2005-07-18 Fernando Perez <fperez@colorado.edu>
1300 2005-07-18 Fernando Perez <fperez@colorado.edu>
1296
1301
1297 * IPython/genutils.py (get_home_dir): fix to help users with
1302 * IPython/genutils.py (get_home_dir): fix to help users with
1298 invalid $HOME under win32.
1303 invalid $HOME under win32.
1299
1304
1300 2005-07-17 Fernando Perez <fperez@colorado.edu>
1305 2005-07-17 Fernando Perez <fperez@colorado.edu>
1301
1306
1302 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1307 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1303 some old hacks and clean up a bit other routines; code should be
1308 some old hacks and clean up a bit other routines; code should be
1304 simpler and a bit faster.
1309 simpler and a bit faster.
1305
1310
1306 * IPython/iplib.py (interact): removed some last-resort attempts
1311 * IPython/iplib.py (interact): removed some last-resort attempts
1307 to survive broken stdout/stderr. That code was only making it
1312 to survive broken stdout/stderr. That code was only making it
1308 harder to abstract out the i/o (necessary for gui integration),
1313 harder to abstract out the i/o (necessary for gui integration),
1309 and the crashes it could prevent were extremely rare in practice
1314 and the crashes it could prevent were extremely rare in practice
1310 (besides being fully user-induced in a pretty violent manner).
1315 (besides being fully user-induced in a pretty violent manner).
1311
1316
1312 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1317 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1313 Nothing major yet, but the code is simpler to read; this should
1318 Nothing major yet, but the code is simpler to read; this should
1314 make it easier to do more serious modifications in the future.
1319 make it easier to do more serious modifications in the future.
1315
1320
1316 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1321 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1317 which broke in .15 (thanks to a report by Ville).
1322 which broke in .15 (thanks to a report by Ville).
1318
1323
1319 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1324 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1320 be quite correct, I know next to nothing about unicode). This
1325 be quite correct, I know next to nothing about unicode). This
1321 will allow unicode strings to be used in prompts, amongst other
1326 will allow unicode strings to be used in prompts, amongst other
1322 cases. It also will prevent ipython from crashing when unicode
1327 cases. It also will prevent ipython from crashing when unicode
1323 shows up unexpectedly in many places. If ascii encoding fails, we
1328 shows up unexpectedly in many places. If ascii encoding fails, we
1324 assume utf_8. Currently the encoding is not a user-visible
1329 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.
1330 setting, though it could be made so if there is demand for it.
1326
1331
1327 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1332 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1328
1333
1329 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1334 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1330
1335
1331 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1336 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1332
1337
1333 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1338 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1334 code can work transparently for 2.2/2.3.
1339 code can work transparently for 2.2/2.3.
1335
1340
1336 2005-07-16 Fernando Perez <fperez@colorado.edu>
1341 2005-07-16 Fernando Perez <fperez@colorado.edu>
1337
1342
1338 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1343 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1339 out of the color scheme table used for coloring exception
1344 out of the color scheme table used for coloring exception
1340 tracebacks. This allows user code to add new schemes at runtime.
1345 tracebacks. This allows user code to add new schemes at runtime.
1341 This is a minimally modified version of the patch at
1346 This is a minimally modified version of the patch at
1342 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1347 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1343 for the contribution.
1348 for the contribution.
1344
1349
1345 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1350 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1346 slightly modified version of the patch in
1351 slightly modified version of the patch in
1347 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1352 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1348 to remove the previous try/except solution (which was costlier).
1353 to remove the previous try/except solution (which was costlier).
1349 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1354 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1350
1355
1351 2005-06-08 Fernando Perez <fperez@colorado.edu>
1356 2005-06-08 Fernando Perez <fperez@colorado.edu>
1352
1357
1353 * IPython/iplib.py (write/write_err): Add methods to abstract all
1358 * IPython/iplib.py (write/write_err): Add methods to abstract all
1354 I/O a bit more.
1359 I/O a bit more.
1355
1360
1356 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1361 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1357 warning, reported by Aric Hagberg, fix by JD Hunter.
1362 warning, reported by Aric Hagberg, fix by JD Hunter.
1358
1363
1359 2005-06-02 *** Released version 0.6.15
1364 2005-06-02 *** Released version 0.6.15
1360
1365
1361 2005-06-01 Fernando Perez <fperez@colorado.edu>
1366 2005-06-01 Fernando Perez <fperez@colorado.edu>
1362
1367
1363 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1368 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1364 tab-completion of filenames within open-quoted strings. Note that
1369 tab-completion of filenames within open-quoted strings. Note that
1365 this requires that in ~/.ipython/ipythonrc, users change the
1370 this requires that in ~/.ipython/ipythonrc, users change the
1366 readline delimiters configuration to read:
1371 readline delimiters configuration to read:
1367
1372
1368 readline_remove_delims -/~
1373 readline_remove_delims -/~
1369
1374
1370
1375
1371 2005-05-31 *** Released version 0.6.14
1376 2005-05-31 *** Released version 0.6.14
1372
1377
1373 2005-05-29 Fernando Perez <fperez@colorado.edu>
1378 2005-05-29 Fernando Perez <fperez@colorado.edu>
1374
1379
1375 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1380 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1376 with files not on the filesystem. Reported by Eliyahu Sandler
1381 with files not on the filesystem. Reported by Eliyahu Sandler
1377 <eli@gondolin.net>
1382 <eli@gondolin.net>
1378
1383
1379 2005-05-22 Fernando Perez <fperez@colorado.edu>
1384 2005-05-22 Fernando Perez <fperez@colorado.edu>
1380
1385
1381 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1386 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1382 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1387 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1383
1388
1384 2005-05-19 Fernando Perez <fperez@colorado.edu>
1389 2005-05-19 Fernando Perez <fperez@colorado.edu>
1385
1390
1386 * IPython/iplib.py (safe_execfile): close a file which could be
1391 * IPython/iplib.py (safe_execfile): close a file which could be
1387 left open (causing problems in win32, which locks open files).
1392 left open (causing problems in win32, which locks open files).
1388 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1393 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1389
1394
1390 2005-05-18 Fernando Perez <fperez@colorado.edu>
1395 2005-05-18 Fernando Perez <fperez@colorado.edu>
1391
1396
1392 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1397 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1393 keyword arguments correctly to safe_execfile().
1398 keyword arguments correctly to safe_execfile().
1394
1399
1395 2005-05-13 Fernando Perez <fperez@colorado.edu>
1400 2005-05-13 Fernando Perez <fperez@colorado.edu>
1396
1401
1397 * ipython.1: Added info about Qt to manpage, and threads warning
1402 * ipython.1: Added info about Qt to manpage, and threads warning
1398 to usage page (invoked with --help).
1403 to usage page (invoked with --help).
1399
1404
1400 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1405 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1401 new matcher (it goes at the end of the priority list) to do
1406 new matcher (it goes at the end of the priority list) to do
1402 tab-completion on named function arguments. Submitted by George
1407 tab-completion on named function arguments. Submitted by George
1403 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1408 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1404 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1409 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1405 for more details.
1410 for more details.
1406
1411
1407 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1412 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1408 SystemExit exceptions in the script being run. Thanks to a report
1413 SystemExit exceptions in the script being run. Thanks to a report
1409 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1414 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1410 producing very annoying behavior when running unit tests.
1415 producing very annoying behavior when running unit tests.
1411
1416
1412 2005-05-12 Fernando Perez <fperez@colorado.edu>
1417 2005-05-12 Fernando Perez <fperez@colorado.edu>
1413
1418
1414 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1419 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1415 which I'd broken (again) due to a changed regexp. In the process,
1420 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
1421 added ';' as an escape to auto-quote the whole line without
1417 splitting its arguments. Thanks to a report by Jerry McRae
1422 splitting its arguments. Thanks to a report by Jerry McRae
1418 <qrs0xyc02-AT-sneakemail.com>.
1423 <qrs0xyc02-AT-sneakemail.com>.
1419
1424
1420 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1425 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1421 possible crashes caused by a TokenError. Reported by Ed Schofield
1426 possible crashes caused by a TokenError. Reported by Ed Schofield
1422 <schofield-AT-ftw.at>.
1427 <schofield-AT-ftw.at>.
1423
1428
1424 2005-05-06 Fernando Perez <fperez@colorado.edu>
1429 2005-05-06 Fernando Perez <fperez@colorado.edu>
1425
1430
1426 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1431 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1427
1432
1428 2005-04-29 Fernando Perez <fperez@colorado.edu>
1433 2005-04-29 Fernando Perez <fperez@colorado.edu>
1429
1434
1430 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1435 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1431 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1436 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1432 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1437 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1433 which provides support for Qt interactive usage (similar to the
1438 which provides support for Qt interactive usage (similar to the
1434 existing one for WX and GTK). This had been often requested.
1439 existing one for WX and GTK). This had been often requested.
1435
1440
1436 2005-04-14 *** Released version 0.6.13
1441 2005-04-14 *** Released version 0.6.13
1437
1442
1438 2005-04-08 Fernando Perez <fperez@colorado.edu>
1443 2005-04-08 Fernando Perez <fperez@colorado.edu>
1439
1444
1440 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1445 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1441 from _ofind, which gets called on almost every input line. Now,
1446 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
1447 we only try to get docstrings if they are actually going to be
1443 used (the overhead of fetching unnecessary docstrings can be
1448 used (the overhead of fetching unnecessary docstrings can be
1444 noticeable for certain objects, such as Pyro proxies).
1449 noticeable for certain objects, such as Pyro proxies).
1445
1450
1446 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1451 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1447 for completers. For some reason I had been passing them the state
1452 for completers. For some reason I had been passing them the state
1448 variable, which completers never actually need, and was in
1453 variable, which completers never actually need, and was in
1449 conflict with the rlcompleter API. Custom completers ONLY need to
1454 conflict with the rlcompleter API. Custom completers ONLY need to
1450 take the text parameter.
1455 take the text parameter.
1451
1456
1452 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1457 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1453 work correctly in pysh. I've also moved all the logic which used
1458 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
1459 to be in pysh.py here, which will prevent problems with future
1455 upgrades. However, this time I must warn users to update their
1460 upgrades. However, this time I must warn users to update their
1456 pysh profile to include the line
1461 pysh profile to include the line
1457
1462
1458 import_all IPython.Extensions.InterpreterExec
1463 import_all IPython.Extensions.InterpreterExec
1459
1464
1460 because otherwise things won't work for them. They MUST also
1465 because otherwise things won't work for them. They MUST also
1461 delete pysh.py and the line
1466 delete pysh.py and the line
1462
1467
1463 execfile pysh.py
1468 execfile pysh.py
1464
1469
1465 from their ipythonrc-pysh.
1470 from their ipythonrc-pysh.
1466
1471
1467 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1472 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1468 robust in the face of objects whose dir() returns non-strings
1473 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
1474 (which it shouldn't, but some broken libs like ITK do). Thanks to
1470 a patch by John Hunter (implemented differently, though). Also
1475 a patch by John Hunter (implemented differently, though). Also
1471 minor improvements by using .extend instead of + on lists.
1476 minor improvements by using .extend instead of + on lists.
1472
1477
1473 * pysh.py:
1478 * pysh.py:
1474
1479
1475 2005-04-06 Fernando Perez <fperez@colorado.edu>
1480 2005-04-06 Fernando Perez <fperez@colorado.edu>
1476
1481
1477 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1482 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1478 by default, so that all users benefit from it. Those who don't
1483 by default, so that all users benefit from it. Those who don't
1479 want it can still turn it off.
1484 want it can still turn it off.
1480
1485
1481 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1486 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1482 config file, I'd forgotten about this, so users were getting it
1487 config file, I'd forgotten about this, so users were getting it
1483 off by default.
1488 off by default.
1484
1489
1485 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1490 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1486 consistency. Now magics can be called in multiline statements,
1491 consistency. Now magics can be called in multiline statements,
1487 and python variables can be expanded in magic calls via $var.
1492 and python variables can be expanded in magic calls via $var.
1488 This makes the magic system behave just like aliases or !system
1493 This makes the magic system behave just like aliases or !system
1489 calls.
1494 calls.
1490
1495
1491 2005-03-28 Fernando Perez <fperez@colorado.edu>
1496 2005-03-28 Fernando Perez <fperez@colorado.edu>
1492
1497
1493 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1498 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1494 expensive string additions for building command. Add support for
1499 expensive string additions for building command. Add support for
1495 trailing ';' when autocall is used.
1500 trailing ';' when autocall is used.
1496
1501
1497 2005-03-26 Fernando Perez <fperez@colorado.edu>
1502 2005-03-26 Fernando Perez <fperez@colorado.edu>
1498
1503
1499 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1504 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1500 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1505 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1501 ipython.el robust against prompts with any number of spaces
1506 ipython.el robust against prompts with any number of spaces
1502 (including 0) after the ':' character.
1507 (including 0) after the ':' character.
1503
1508
1504 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1509 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1505 continuation prompt, which misled users to think the line was
1510 continuation prompt, which misled users to think the line was
1506 already indented. Closes debian Bug#300847, reported to me by
1511 already indented. Closes debian Bug#300847, reported to me by
1507 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1512 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1508
1513
1509 2005-03-23 Fernando Perez <fperez@colorado.edu>
1514 2005-03-23 Fernando Perez <fperez@colorado.edu>
1510
1515
1511 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1516 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1512 properly aligned if they have embedded newlines.
1517 properly aligned if they have embedded newlines.
1513
1518
1514 * IPython/iplib.py (runlines): Add a public method to expose
1519 * IPython/iplib.py (runlines): Add a public method to expose
1515 IPython's code execution machinery, so that users can run strings
1520 IPython's code execution machinery, so that users can run strings
1516 as if they had been typed at the prompt interactively.
1521 as if they had been typed at the prompt interactively.
1517 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1522 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1518 methods which can call the system shell, but with python variable
1523 methods which can call the system shell, but with python variable
1519 expansion. The three such methods are: __IPYTHON__.system,
1524 expansion. The three such methods are: __IPYTHON__.system,
1520 .getoutput and .getoutputerror. These need to be documented in a
1525 .getoutput and .getoutputerror. These need to be documented in a
1521 'public API' section (to be written) of the manual.
1526 'public API' section (to be written) of the manual.
1522
1527
1523 2005-03-20 Fernando Perez <fperez@colorado.edu>
1528 2005-03-20 Fernando Perez <fperez@colorado.edu>
1524
1529
1525 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1530 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1526 for custom exception handling. This is quite powerful, and it
1531 for custom exception handling. This is quite powerful, and it
1527 allows for user-installable exception handlers which can trap
1532 allows for user-installable exception handlers which can trap
1528 custom exceptions at runtime and treat them separately from
1533 custom exceptions at runtime and treat them separately from
1529 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1534 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1530 Mantegazza <mantegazza-AT-ill.fr>.
1535 Mantegazza <mantegazza-AT-ill.fr>.
1531 (InteractiveShell.set_custom_completer): public API function to
1536 (InteractiveShell.set_custom_completer): public API function to
1532 add new completers at runtime.
1537 add new completers at runtime.
1533
1538
1534 2005-03-19 Fernando Perez <fperez@colorado.edu>
1539 2005-03-19 Fernando Perez <fperez@colorado.edu>
1535
1540
1536 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1541 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1537 allow objects which provide their docstrings via non-standard
1542 allow objects which provide their docstrings via non-standard
1538 mechanisms (like Pyro proxies) to still be inspected by ipython's
1543 mechanisms (like Pyro proxies) to still be inspected by ipython's
1539 ? system.
1544 ? system.
1540
1545
1541 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1546 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1542 automatic capture system. I tried quite hard to make it work
1547 automatic capture system. I tried quite hard to make it work
1543 reliably, and simply failed. I tried many combinations with the
1548 reliably, and simply failed. I tried many combinations with the
1544 subprocess module, but eventually nothing worked in all needed
1549 subprocess module, but eventually nothing worked in all needed
1545 cases (not blocking stdin for the child, duplicating stdout
1550 cases (not blocking stdin for the child, duplicating stdout
1546 without blocking, etc). The new %sc/%sx still do capture to these
1551 without blocking, etc). The new %sc/%sx still do capture to these
1547 magical list/string objects which make shell use much more
1552 magical list/string objects which make shell use much more
1548 conveninent, so not all is lost.
1553 conveninent, so not all is lost.
1549
1554
1550 XXX - FIX MANUAL for the change above!
1555 XXX - FIX MANUAL for the change above!
1551
1556
1552 (runsource): I copied code.py's runsource() into ipython to modify
1557 (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
1558 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
1559 stored in ipython. This makes this info accessible to third-party
1555 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1560 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1556 Mantegazza <mantegazza-AT-ill.fr>.
1561 Mantegazza <mantegazza-AT-ill.fr>.
1557
1562
1558 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1563 * 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
1564 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
1565 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
1566 who already have their ipythonrc files made and want this, just
1562 add:
1567 add:
1563
1568
1564 readline_parse_and_bind "\e[A": history-search-backward
1569 readline_parse_and_bind "\e[A": history-search-backward
1565 readline_parse_and_bind "\e[B": history-search-forward
1570 readline_parse_and_bind "\e[B": history-search-forward
1566
1571
1567 2005-03-18 Fernando Perez <fperez@colorado.edu>
1572 2005-03-18 Fernando Perez <fperez@colorado.edu>
1568
1573
1569 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1574 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1570 LSString and SList classes which allow transparent conversions
1575 LSString and SList classes which allow transparent conversions
1571 between list mode and whitespace-separated string.
1576 between list mode and whitespace-separated string.
1572 (magic_r): Fix recursion problem in %r.
1577 (magic_r): Fix recursion problem in %r.
1573
1578
1574 * IPython/genutils.py (LSString): New class to be used for
1579 * IPython/genutils.py (LSString): New class to be used for
1575 automatic storage of the results of all alias/system calls in _o
1580 automatic storage of the results of all alias/system calls in _o
1576 and _e (stdout/err). These provide a .l/.list attribute which
1581 and _e (stdout/err). These provide a .l/.list attribute which
1577 does automatic splitting on newlines. This means that for most
1582 does automatic splitting on newlines. This means that for most
1578 uses, you'll never need to do capturing of output with %sc/%sx
1583 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
1584 anymore, since ipython keeps this always done for you. Note that
1580 only the LAST results are stored, the _o/e variables are
1585 only the LAST results are stored, the _o/e variables are
1581 overwritten on each call. If you need to save their contents
1586 overwritten on each call. If you need to save their contents
1582 further, simply bind them to any other name.
1587 further, simply bind them to any other name.
1583
1588
1584 2005-03-17 Fernando Perez <fperez@colorado.edu>
1589 2005-03-17 Fernando Perez <fperez@colorado.edu>
1585
1590
1586 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1591 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1587 prompt namespace handling.
1592 prompt namespace handling.
1588
1593
1589 2005-03-16 Fernando Perez <fperez@colorado.edu>
1594 2005-03-16 Fernando Perez <fperez@colorado.edu>
1590
1595
1591 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1596 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1592 classic prompts to be '>>> ' (final space was missing, and it
1597 classic prompts to be '>>> ' (final space was missing, and it
1593 trips the emacs python mode).
1598 trips the emacs python mode).
1594 (BasePrompt.__str__): Added safe support for dynamic prompt
1599 (BasePrompt.__str__): Added safe support for dynamic prompt
1595 strings. Now you can set your prompt string to be '$x', and the
1600 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
1601 value of x will be printed from your interactive namespace. The
1597 interpolation syntax includes the full Itpl support, so
1602 interpolation syntax includes the full Itpl support, so
1598 ${foo()+x+bar()} is a valid prompt string now, and the function
1603 ${foo()+x+bar()} is a valid prompt string now, and the function
1599 calls will be made at runtime.
1604 calls will be made at runtime.
1600
1605
1601 2005-03-15 Fernando Perez <fperez@colorado.edu>
1606 2005-03-15 Fernando Perez <fperez@colorado.edu>
1602
1607
1603 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1608 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1604 avoid name clashes in pylab. %hist still works, it just forwards
1609 avoid name clashes in pylab. %hist still works, it just forwards
1605 the call to %history.
1610 the call to %history.
1606
1611
1607 2005-03-02 *** Released version 0.6.12
1612 2005-03-02 *** Released version 0.6.12
1608
1613
1609 2005-03-02 Fernando Perez <fperez@colorado.edu>
1614 2005-03-02 Fernando Perez <fperez@colorado.edu>
1610
1615
1611 * IPython/iplib.py (handle_magic): log magic calls properly as
1616 * IPython/iplib.py (handle_magic): log magic calls properly as
1612 ipmagic() function calls.
1617 ipmagic() function calls.
1613
1618
1614 * IPython/Magic.py (magic_time): Improved %time to support
1619 * IPython/Magic.py (magic_time): Improved %time to support
1615 statements and provide wall-clock as well as CPU time.
1620 statements and provide wall-clock as well as CPU time.
1616
1621
1617 2005-02-27 Fernando Perez <fperez@colorado.edu>
1622 2005-02-27 Fernando Perez <fperez@colorado.edu>
1618
1623
1619 * IPython/hooks.py: New hooks module, to expose user-modifiable
1624 * IPython/hooks.py: New hooks module, to expose user-modifiable
1620 IPython functionality in a clean manner. For now only the editor
1625 IPython functionality in a clean manner. For now only the editor
1621 hook is actually written, and other thigns which I intend to turn
1626 hook is actually written, and other thigns which I intend to turn
1622 into proper hooks aren't yet there. The display and prefilter
1627 into proper hooks aren't yet there. The display and prefilter
1623 stuff, for example, should be hooks. But at least now the
1628 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
1629 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
1630 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.
1631 this purpose, but I'd never actually used it for anything.
1627
1632
1628 2005-02-26 Fernando Perez <fperez@colorado.edu>
1633 2005-02-26 Fernando Perez <fperez@colorado.edu>
1629
1634
1630 * IPython/ipmaker.py (make_IPython): make the default ipython
1635 * IPython/ipmaker.py (make_IPython): make the default ipython
1631 directory be called _ipython under win32, to follow more the
1636 directory be called _ipython under win32, to follow more the
1632 naming peculiarities of that platform (where buggy software like
1637 naming peculiarities of that platform (where buggy software like
1633 Visual Sourcesafe breaks with .named directories). Reported by
1638 Visual Sourcesafe breaks with .named directories). Reported by
1634 Ville Vainio.
1639 Ville Vainio.
1635
1640
1636 2005-02-23 Fernando Perez <fperez@colorado.edu>
1641 2005-02-23 Fernando Perez <fperez@colorado.edu>
1637
1642
1638 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1643 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1639 auto_aliases for win32 which were causing problems. Users can
1644 auto_aliases for win32 which were causing problems. Users can
1640 define the ones they personally like.
1645 define the ones they personally like.
1641
1646
1642 2005-02-21 Fernando Perez <fperez@colorado.edu>
1647 2005-02-21 Fernando Perez <fperez@colorado.edu>
1643
1648
1644 * IPython/Magic.py (magic_time): new magic to time execution of
1649 * IPython/Magic.py (magic_time): new magic to time execution of
1645 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1650 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1646
1651
1647 2005-02-19 Fernando Perez <fperez@colorado.edu>
1652 2005-02-19 Fernando Perez <fperez@colorado.edu>
1648
1653
1649 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1654 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1650 into keys (for prompts, for example).
1655 into keys (for prompts, for example).
1651
1656
1652 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1657 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1653 prompts in case users want them. This introduces a small behavior
1658 prompts in case users want them. This introduces a small behavior
1654 change: ipython does not automatically add a space to all prompts
1659 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
1660 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
1661 manually to their ipythonrc file, so for example prompt_in1 should
1657 now read 'In [\#]: ' instead of 'In [\#]:'.
1662 now read 'In [\#]: ' instead of 'In [\#]:'.
1658 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1663 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1659 file) to control left-padding of secondary prompts.
1664 file) to control left-padding of secondary prompts.
1660
1665
1661 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1666 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1662 the profiler can't be imported. Fix for Debian, which removed
1667 the profiler can't be imported. Fix for Debian, which removed
1663 profile.py because of License issues. I applied a slightly
1668 profile.py because of License issues. I applied a slightly
1664 modified version of the original Debian patch at
1669 modified version of the original Debian patch at
1665 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1670 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1666
1671
1667 2005-02-17 Fernando Perez <fperez@colorado.edu>
1672 2005-02-17 Fernando Perez <fperez@colorado.edu>
1668
1673
1669 * IPython/genutils.py (native_line_ends): Fix bug which would
1674 * IPython/genutils.py (native_line_ends): Fix bug which would
1670 cause improper line-ends under win32 b/c I was not opening files
1675 cause improper line-ends under win32 b/c I was not opening files
1671 in binary mode. Bug report and fix thanks to Ville.
1676 in binary mode. Bug report and fix thanks to Ville.
1672
1677
1673 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1678 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1674 trying to catch spurious foo[1] autocalls. My fix actually broke
1679 trying to catch spurious foo[1] autocalls. My fix actually broke
1675 ',/' autoquote/call with explicit escape (bad regexp).
1680 ',/' autoquote/call with explicit escape (bad regexp).
1676
1681
1677 2005-02-15 *** Released version 0.6.11
1682 2005-02-15 *** Released version 0.6.11
1678
1683
1679 2005-02-14 Fernando Perez <fperez@colorado.edu>
1684 2005-02-14 Fernando Perez <fperez@colorado.edu>
1680
1685
1681 * IPython/background_jobs.py: New background job management
1686 * IPython/background_jobs.py: New background job management
1682 subsystem. This is implemented via a new set of classes, and
1687 subsystem. This is implemented via a new set of classes, and
1683 IPython now provides a builtin 'jobs' object for background job
1688 IPython now provides a builtin 'jobs' object for background job
1684 execution. A convenience %bg magic serves as a lightweight
1689 execution. A convenience %bg magic serves as a lightweight
1685 frontend for starting the more common type of calls. This was
1690 frontend for starting the more common type of calls. This was
1686 inspired by discussions with B. Granger and the BackgroundCommand
1691 inspired by discussions with B. Granger and the BackgroundCommand
1687 class described in the book Python Scripting for Computational
1692 class described in the book Python Scripting for Computational
1688 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1693 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1689 (although ultimately no code from this text was used, as IPython's
1694 (although ultimately no code from this text was used, as IPython's
1690 system is a separate implementation).
1695 system is a separate implementation).
1691
1696
1692 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1697 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1693 to control the completion of single/double underscore names
1698 to control the completion of single/double underscore names
1694 separately. As documented in the example ipytonrc file, the
1699 separately. As documented in the example ipytonrc file, the
1695 readline_omit__names variable can now be set to 2, to omit even
1700 readline_omit__names variable can now be set to 2, to omit even
1696 single underscore names. Thanks to a patch by Brian Wong
1701 single underscore names. Thanks to a patch by Brian Wong
1697 <BrianWong-AT-AirgoNetworks.Com>.
1702 <BrianWong-AT-AirgoNetworks.Com>.
1698 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1703 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1699 be autocalled as foo([1]) if foo were callable. A problem for
1704 be autocalled as foo([1]) if foo were callable. A problem for
1700 things which are both callable and implement __getitem__.
1705 things which are both callable and implement __getitem__.
1701 (init_readline): Fix autoindentation for win32. Thanks to a patch
1706 (init_readline): Fix autoindentation for win32. Thanks to a patch
1702 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1707 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1703
1708
1704 2005-02-12 Fernando Perez <fperez@colorado.edu>
1709 2005-02-12 Fernando Perez <fperez@colorado.edu>
1705
1710
1706 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1711 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1707 which I had written long ago to sort out user error messages which
1712 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,
1713 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
1714 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'
1715 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
1716 flag to true everywhere, whose only job was precisely to control
1712 this subsystem. This closes issue 28 (as well as avoiding all
1717 this subsystem. This closes issue 28 (as well as avoiding all
1713 sorts of strange hangups which occur from time to time).
1718 sorts of strange hangups which occur from time to time).
1714
1719
1715 2005-02-07 Fernando Perez <fperez@colorado.edu>
1720 2005-02-07 Fernando Perez <fperez@colorado.edu>
1716
1721
1717 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1722 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1718 previous call produced a syntax error.
1723 previous call produced a syntax error.
1719
1724
1720 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1725 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1721 classes without constructor.
1726 classes without constructor.
1722
1727
1723 2005-02-06 Fernando Perez <fperez@colorado.edu>
1728 2005-02-06 Fernando Perez <fperez@colorado.edu>
1724
1729
1725 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1730 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1726 completions with the results of each matcher, so we return results
1731 completions with the results of each matcher, so we return results
1727 to the user from all namespaces. This breaks with ipython
1732 to the user from all namespaces. This breaks with ipython
1728 tradition, but I think it's a nicer behavior. Now you get all
1733 tradition, but I think it's a nicer behavior. Now you get all
1729 possible completions listed, from all possible namespaces (python,
1734 possible completions listed, from all possible namespaces (python,
1730 filesystem, magics...) After a request by John Hunter
1735 filesystem, magics...) After a request by John Hunter
1731 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1736 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1732
1737
1733 2005-02-05 Fernando Perez <fperez@colorado.edu>
1738 2005-02-05 Fernando Perez <fperez@colorado.edu>
1734
1739
1735 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1740 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1736 the call had quote characters in it (the quotes were stripped).
1741 the call had quote characters in it (the quotes were stripped).
1737
1742
1738 2005-01-31 Fernando Perez <fperez@colorado.edu>
1743 2005-01-31 Fernando Perez <fperez@colorado.edu>
1739
1744
1740 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1745 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1741 Itpl.itpl() to make the code more robust against psyco
1746 Itpl.itpl() to make the code more robust against psyco
1742 optimizations.
1747 optimizations.
1743
1748
1744 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1749 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1745 of causing an exception. Quicker, cleaner.
1750 of causing an exception. Quicker, cleaner.
1746
1751
1747 2005-01-28 Fernando Perez <fperez@colorado.edu>
1752 2005-01-28 Fernando Perez <fperez@colorado.edu>
1748
1753
1749 * scripts/ipython_win_post_install.py (install): hardcode
1754 * scripts/ipython_win_post_install.py (install): hardcode
1750 sys.prefix+'python.exe' as the executable path. It turns out that
1755 sys.prefix+'python.exe' as the executable path. It turns out that
1751 during the post-installation run, sys.executable resolves to the
1756 during the post-installation run, sys.executable resolves to the
1752 name of the binary installer! I should report this as a distutils
1757 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
1758 bug, I think. I updated the .10 release with this tiny fix, to
1754 avoid annoying the lists further.
1759 avoid annoying the lists further.
1755
1760
1756 2005-01-27 *** Released version 0.6.10
1761 2005-01-27 *** Released version 0.6.10
1757
1762
1758 2005-01-27 Fernando Perez <fperez@colorado.edu>
1763 2005-01-27 Fernando Perez <fperez@colorado.edu>
1759
1764
1760 * IPython/numutils.py (norm): Added 'inf' as optional name for
1765 * IPython/numutils.py (norm): Added 'inf' as optional name for
1761 L-infinity norm, included references to mathworld.com for vector
1766 L-infinity norm, included references to mathworld.com for vector
1762 norm definitions.
1767 norm definitions.
1763 (amin/amax): added amin/amax for array min/max. Similar to what
1768 (amin/amax): added amin/amax for array min/max. Similar to what
1764 pylab ships with after the recent reorganization of names.
1769 pylab ships with after the recent reorganization of names.
1765 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1770 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1766
1771
1767 * ipython.el: committed Alex's recent fixes and improvements.
1772 * ipython.el: committed Alex's recent fixes and improvements.
1768 Tested with python-mode from CVS, and it looks excellent. Since
1773 Tested with python-mode from CVS, and it looks excellent. Since
1769 python-mode hasn't released anything in a while, I'm temporarily
1774 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:
1775 putting a copy of today's CVS (v 4.70) of python-mode in:
1771 http://ipython.scipy.org/tmp/python-mode.el
1776 http://ipython.scipy.org/tmp/python-mode.el
1772
1777
1773 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1778 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1774 sys.executable for the executable name, instead of assuming it's
1779 sys.executable for the executable name, instead of assuming it's
1775 called 'python.exe' (the post-installer would have produced broken
1780 called 'python.exe' (the post-installer would have produced broken
1776 setups on systems with a differently named python binary).
1781 setups on systems with a differently named python binary).
1777
1782
1778 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1783 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1779 references to os.linesep, to make the code more
1784 references to os.linesep, to make the code more
1780 platform-independent. This is also part of the win32 coloring
1785 platform-independent. This is also part of the win32 coloring
1781 fixes.
1786 fixes.
1782
1787
1783 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1788 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1784 lines, which actually cause coloring bugs because the length of
1789 lines, which actually cause coloring bugs because the length of
1785 the line is very difficult to correctly compute with embedded
1790 the line is very difficult to correctly compute with embedded
1786 escapes. This was the source of all the coloring problems under
1791 escapes. This was the source of all the coloring problems under
1787 Win32. I think that _finally_, Win32 users have a properly
1792 Win32. I think that _finally_, Win32 users have a properly
1788 working ipython in all respects. This would never have happened
1793 working ipython in all respects. This would never have happened
1789 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1794 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1790
1795
1791 2005-01-26 *** Released version 0.6.9
1796 2005-01-26 *** Released version 0.6.9
1792
1797
1793 2005-01-25 Fernando Perez <fperez@colorado.edu>
1798 2005-01-25 Fernando Perez <fperez@colorado.edu>
1794
1799
1795 * setup.py: finally, we have a true Windows installer, thanks to
1800 * setup.py: finally, we have a true Windows installer, thanks to
1796 the excellent work of Viktor Ransmayr
1801 the excellent work of Viktor Ransmayr
1797 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1802 <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
1803 Windows users. The setup routine is quite a bit cleaner thanks to
1799 this, and the post-install script uses the proper functions to
1804 this, and the post-install script uses the proper functions to
1800 allow a clean de-installation using the standard Windows Control
1805 allow a clean de-installation using the standard Windows Control
1801 Panel.
1806 Panel.
1802
1807
1803 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1808 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1804 environment variable under all OSes (including win32) if
1809 environment variable under all OSes (including win32) if
1805 available. This will give consistency to win32 users who have set
1810 available. This will give consistency to win32 users who have set
1806 this variable for any reason. If os.environ['HOME'] fails, the
1811 this variable for any reason. If os.environ['HOME'] fails, the
1807 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1812 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1808
1813
1809 2005-01-24 Fernando Perez <fperez@colorado.edu>
1814 2005-01-24 Fernando Perez <fperez@colorado.edu>
1810
1815
1811 * IPython/numutils.py (empty_like): add empty_like(), similar to
1816 * IPython/numutils.py (empty_like): add empty_like(), similar to
1812 zeros_like() but taking advantage of the new empty() Numeric routine.
1817 zeros_like() but taking advantage of the new empty() Numeric routine.
1813
1818
1814 2005-01-23 *** Released version 0.6.8
1819 2005-01-23 *** Released version 0.6.8
1815
1820
1816 2005-01-22 Fernando Perez <fperez@colorado.edu>
1821 2005-01-22 Fernando Perez <fperez@colorado.edu>
1817
1822
1818 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1823 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1819 automatic show() calls. After discussing things with JDH, it
1824 automatic show() calls. After discussing things with JDH, it
1820 turns out there are too many corner cases where this can go wrong.
1825 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
1826 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
1827 reproduce as much as possible the default behavior of a normal
1823 python shell.
1828 python shell.
1824
1829
1825 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1830 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1826 line-splitting regexp and _prefilter() to avoid calling getattr()
1831 line-splitting regexp and _prefilter() to avoid calling getattr()
1827 on assignments. This closes
1832 on assignments. This closes
1828 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1833 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1829 readline uses getattr(), so a simple <TAB> keypress is still
1834 readline uses getattr(), so a simple <TAB> keypress is still
1830 enough to trigger getattr() calls on an object.
1835 enough to trigger getattr() calls on an object.
1831
1836
1832 2005-01-21 Fernando Perez <fperez@colorado.edu>
1837 2005-01-21 Fernando Perez <fperez@colorado.edu>
1833
1838
1834 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1839 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1835 docstring under pylab so it doesn't mask the original.
1840 docstring under pylab so it doesn't mask the original.
1836
1841
1837 2005-01-21 *** Released version 0.6.7
1842 2005-01-21 *** Released version 0.6.7
1838
1843
1839 2005-01-21 Fernando Perez <fperez@colorado.edu>
1844 2005-01-21 Fernando Perez <fperez@colorado.edu>
1840
1845
1841 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1846 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1842 signal handling for win32 users in multithreaded mode.
1847 signal handling for win32 users in multithreaded mode.
1843
1848
1844 2005-01-17 Fernando Perez <fperez@colorado.edu>
1849 2005-01-17 Fernando Perez <fperez@colorado.edu>
1845
1850
1846 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1851 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1847 instances with no __init__. After a crash report by Norbert Nemec
1852 instances with no __init__. After a crash report by Norbert Nemec
1848 <Norbert-AT-nemec-online.de>.
1853 <Norbert-AT-nemec-online.de>.
1849
1854
1850 2005-01-14 Fernando Perez <fperez@colorado.edu>
1855 2005-01-14 Fernando Perez <fperez@colorado.edu>
1851
1856
1852 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1857 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1853 names for verbose exceptions, when multiple dotted names and the
1858 names for verbose exceptions, when multiple dotted names and the
1854 'parent' object were present on the same line.
1859 'parent' object were present on the same line.
1855
1860
1856 2005-01-11 Fernando Perez <fperez@colorado.edu>
1861 2005-01-11 Fernando Perez <fperez@colorado.edu>
1857
1862
1858 * IPython/genutils.py (flag_calls): new utility to trap and flag
1863 * IPython/genutils.py (flag_calls): new utility to trap and flag
1859 calls in functions. I need it to clean up matplotlib support.
1864 calls in functions. I need it to clean up matplotlib support.
1860 Also removed some deprecated code in genutils.
1865 Also removed some deprecated code in genutils.
1861
1866
1862 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1867 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1863 that matplotlib scripts called with %run, which don't call show()
1868 that matplotlib scripts called with %run, which don't call show()
1864 themselves, still have their plotting windows open.
1869 themselves, still have their plotting windows open.
1865
1870
1866 2005-01-05 Fernando Perez <fperez@colorado.edu>
1871 2005-01-05 Fernando Perez <fperez@colorado.edu>
1867
1872
1868 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1873 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1869 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1874 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1870
1875
1871 2004-12-19 Fernando Perez <fperez@colorado.edu>
1876 2004-12-19 Fernando Perez <fperez@colorado.edu>
1872
1877
1873 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1878 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1874 parent_runcode, which was an eyesore. The same result can be
1879 parent_runcode, which was an eyesore. The same result can be
1875 obtained with Python's regular superclass mechanisms.
1880 obtained with Python's regular superclass mechanisms.
1876
1881
1877 2004-12-17 Fernando Perez <fperez@colorado.edu>
1882 2004-12-17 Fernando Perez <fperez@colorado.edu>
1878
1883
1879 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1884 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1880 reported by Prabhu.
1885 reported by Prabhu.
1881 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1886 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1882 sys.stderr) instead of explicitly calling sys.stderr. This helps
1887 sys.stderr) instead of explicitly calling sys.stderr. This helps
1883 maintain our I/O abstractions clean, for future GUI embeddings.
1888 maintain our I/O abstractions clean, for future GUI embeddings.
1884
1889
1885 * IPython/genutils.py (info): added new utility for sys.stderr
1890 * IPython/genutils.py (info): added new utility for sys.stderr
1886 unified info message handling (thin wrapper around warn()).
1891 unified info message handling (thin wrapper around warn()).
1887
1892
1888 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1893 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1889 composite (dotted) names on verbose exceptions.
1894 composite (dotted) names on verbose exceptions.
1890 (VerboseTB.nullrepr): harden against another kind of errors which
1895 (VerboseTB.nullrepr): harden against another kind of errors which
1891 Python's inspect module can trigger, and which were crashing
1896 Python's inspect module can trigger, and which were crashing
1892 IPython. Thanks to a report by Marco Lombardi
1897 IPython. Thanks to a report by Marco Lombardi
1893 <mlombard-AT-ma010192.hq.eso.org>.
1898 <mlombard-AT-ma010192.hq.eso.org>.
1894
1899
1895 2004-12-13 *** Released version 0.6.6
1900 2004-12-13 *** Released version 0.6.6
1896
1901
1897 2004-12-12 Fernando Perez <fperez@colorado.edu>
1902 2004-12-12 Fernando Perez <fperez@colorado.edu>
1898
1903
1899 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1904 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1900 generated by pygtk upon initialization if it was built without
1905 generated by pygtk upon initialization if it was built without
1901 threads (for matplotlib users). After a crash reported by
1906 threads (for matplotlib users). After a crash reported by
1902 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1907 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1903
1908
1904 * IPython/ipmaker.py (make_IPython): fix small bug in the
1909 * IPython/ipmaker.py (make_IPython): fix small bug in the
1905 import_some parameter for multiple imports.
1910 import_some parameter for multiple imports.
1906
1911
1907 * IPython/iplib.py (ipmagic): simplified the interface of
1912 * IPython/iplib.py (ipmagic): simplified the interface of
1908 ipmagic() to take a single string argument, just as it would be
1913 ipmagic() to take a single string argument, just as it would be
1909 typed at the IPython cmd line.
1914 typed at the IPython cmd line.
1910 (ipalias): Added new ipalias() with an interface identical to
1915 (ipalias): Added new ipalias() with an interface identical to
1911 ipmagic(). This completes exposing a pure python interface to the
1916 ipmagic(). This completes exposing a pure python interface to the
1912 alias and magic system, which can be used in loops or more complex
1917 alias and magic system, which can be used in loops or more complex
1913 code where IPython's automatic line mangling is not active.
1918 code where IPython's automatic line mangling is not active.
1914
1919
1915 * IPython/genutils.py (timing): changed interface of timing to
1920 * IPython/genutils.py (timing): changed interface of timing to
1916 simply run code once, which is the most common case. timings()
1921 simply run code once, which is the most common case. timings()
1917 remains unchanged, for the cases where you want multiple runs.
1922 remains unchanged, for the cases where you want multiple runs.
1918
1923
1919 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1924 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1920 bug where Python2.2 crashes with exec'ing code which does not end
1925 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
1926 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1922 before.
1927 before.
1923
1928
1924 2004-12-10 Fernando Perez <fperez@colorado.edu>
1929 2004-12-10 Fernando Perez <fperez@colorado.edu>
1925
1930
1926 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1931 * 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
1932 -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
1933 %prun options are kind of intermixed, and it's not easy to change
1929 this with the limitations of python's getopt).
1934 this with the limitations of python's getopt).
1930
1935
1931 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1936 * 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,
1937 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
1938 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
1939 timeit.py). Optionally a number of runs > 1 can be given for
1935 timing very short-running code.
1940 timing very short-running code.
1936
1941
1937 * IPython/genutils.py (uniq_stable): new routine which returns a
1942 * IPython/genutils.py (uniq_stable): new routine which returns a
1938 list of unique elements in any iterable, but in stable order of
1943 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
1944 appearance. I needed this for the ultraTB fixes, and it's a handy
1940 utility.
1945 utility.
1941
1946
1942 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1947 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1943 dotted names in Verbose exceptions. This had been broken since
1948 dotted names in Verbose exceptions. This had been broken since
1944 the very start, now x.y will properly be printed in a Verbose
1949 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
1950 traceback, instead of x being shown and y appearing always as an
1946 'undefined global'. Getting this to work was a bit tricky,
1951 'undefined global'. Getting this to work was a bit tricky,
1947 because by default python tokenizers are stateless. Saved by
1952 because by default python tokenizers are stateless. Saved by
1948 python's ability to easily add a bit of state to an arbitrary
1953 python's ability to easily add a bit of state to an arbitrary
1949 function (without needing to build a full-blown callable object).
1954 function (without needing to build a full-blown callable object).
1950
1955
1951 Also big cleanup of this code, which had horrendous runtime
1956 Also big cleanup of this code, which had horrendous runtime
1952 lookups of zillions of attributes for colorization. Moved all
1957 lookups of zillions of attributes for colorization. Moved all
1953 this code into a few templates, which make it cleaner and quicker.
1958 this code into a few templates, which make it cleaner and quicker.
1954
1959
1955 Printout quality was also improved for Verbose exceptions: one
1960 Printout quality was also improved for Verbose exceptions: one
1956 variable per line, and memory addresses are printed (this can be
1961 variable per line, and memory addresses are printed (this can be
1957 quite handy in nasty debugging situations, which is what Verbose
1962 quite handy in nasty debugging situations, which is what Verbose
1958 is for).
1963 is for).
1959
1964
1960 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1965 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1961 the command line as scripts to be loaded by embedded instances.
1966 the command line as scripts to be loaded by embedded instances.
1962 Doing so has the potential for an infinite recursion if there are
1967 Doing so has the potential for an infinite recursion if there are
1963 exceptions thrown in the process. This fixes a strange crash
1968 exceptions thrown in the process. This fixes a strange crash
1964 reported by Philippe MULLER <muller-AT-irit.fr>.
1969 reported by Philippe MULLER <muller-AT-irit.fr>.
1965
1970
1966 2004-12-09 Fernando Perez <fperez@colorado.edu>
1971 2004-12-09 Fernando Perez <fperez@colorado.edu>
1967
1972
1968 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1973 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1969 to reflect new names in matplotlib, which now expose the
1974 to reflect new names in matplotlib, which now expose the
1970 matlab-compatible interface via a pylab module instead of the
1975 matlab-compatible interface via a pylab module instead of the
1971 'matlab' name. The new code is backwards compatible, so users of
1976 'matlab' name. The new code is backwards compatible, so users of
1972 all matplotlib versions are OK. Patch by J. Hunter.
1977 all matplotlib versions are OK. Patch by J. Hunter.
1973
1978
1974 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1979 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1975 of __init__ docstrings for instances (class docstrings are already
1980 of __init__ docstrings for instances (class docstrings are already
1976 automatically printed). Instances with customized docstrings
1981 automatically printed). Instances with customized docstrings
1977 (indep. of the class) are also recognized and all 3 separate
1982 (indep. of the class) are also recognized and all 3 separate
1978 docstrings are printed (instance, class, constructor). After some
1983 docstrings are printed (instance, class, constructor). After some
1979 comments/suggestions by J. Hunter.
1984 comments/suggestions by J. Hunter.
1980
1985
1981 2004-12-05 Fernando Perez <fperez@colorado.edu>
1986 2004-12-05 Fernando Perez <fperez@colorado.edu>
1982
1987
1983 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1988 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1984 warnings when tab-completion fails and triggers an exception.
1989 warnings when tab-completion fails and triggers an exception.
1985
1990
1986 2004-12-03 Fernando Perez <fperez@colorado.edu>
1991 2004-12-03 Fernando Perez <fperez@colorado.edu>
1987
1992
1988 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1993 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1989 be triggered when using 'run -p'. An incorrect option flag was
1994 be triggered when using 'run -p'. An incorrect option flag was
1990 being set ('d' instead of 'D').
1995 being set ('d' instead of 'D').
1991 (manpage): fix missing escaped \- sign.
1996 (manpage): fix missing escaped \- sign.
1992
1997
1993 2004-11-30 *** Released version 0.6.5
1998 2004-11-30 *** Released version 0.6.5
1994
1999
1995 2004-11-30 Fernando Perez <fperez@colorado.edu>
2000 2004-11-30 Fernando Perez <fperez@colorado.edu>
1996
2001
1997 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2002 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1998 setting with -d option.
2003 setting with -d option.
1999
2004
2000 * setup.py (docfiles): Fix problem where the doc glob I was using
2005 * setup.py (docfiles): Fix problem where the doc glob I was using
2001 was COMPLETELY BROKEN. It was giving the right files by pure
2006 was COMPLETELY BROKEN. It was giving the right files by pure
2002 accident, but failed once I tried to include ipython.el. Note:
2007 accident, but failed once I tried to include ipython.el. Note:
2003 glob() does NOT allow you to do exclusion on multiple endings!
2008 glob() does NOT allow you to do exclusion on multiple endings!
2004
2009
2005 2004-11-29 Fernando Perez <fperez@colorado.edu>
2010 2004-11-29 Fernando Perez <fperez@colorado.edu>
2006
2011
2007 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2012 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2008 the manpage as the source. Better formatting & consistency.
2013 the manpage as the source. Better formatting & consistency.
2009
2014
2010 * IPython/Magic.py (magic_run): Added new -d option, to run
2015 * IPython/Magic.py (magic_run): Added new -d option, to run
2011 scripts under the control of the python pdb debugger. Note that
2016 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
2017 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
2018 (since %run must pass options to %prun, and getopt is too dumb to
2014 handle options with string values with embedded spaces). Thanks
2019 handle options with string values with embedded spaces). Thanks
2015 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2020 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
2021 (magic_who_ls): added type matching to %who and %whos, so that one
2017 can filter their output to only include variables of certain
2022 can filter their output to only include variables of certain
2018 types. Another suggestion by Matthew.
2023 types. Another suggestion by Matthew.
2019 (magic_whos): Added memory summaries in kb and Mb for arrays.
2024 (magic_whos): Added memory summaries in kb and Mb for arrays.
2020 (magic_who): Improve formatting (break lines every 9 vars).
2025 (magic_who): Improve formatting (break lines every 9 vars).
2021
2026
2022 2004-11-28 Fernando Perez <fperez@colorado.edu>
2027 2004-11-28 Fernando Perez <fperez@colorado.edu>
2023
2028
2024 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2029 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2025 cache when empty lines were present.
2030 cache when empty lines were present.
2026
2031
2027 2004-11-24 Fernando Perez <fperez@colorado.edu>
2032 2004-11-24 Fernando Perez <fperez@colorado.edu>
2028
2033
2029 * IPython/usage.py (__doc__): document the re-activated threading
2034 * IPython/usage.py (__doc__): document the re-activated threading
2030 options for WX and GTK.
2035 options for WX and GTK.
2031
2036
2032 2004-11-23 Fernando Perez <fperez@colorado.edu>
2037 2004-11-23 Fernando Perez <fperez@colorado.edu>
2033
2038
2034 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2039 * 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
2040 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
2041 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
2042 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
2043 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
2044 Prabhu's Debian boxes it works OK). But even with some Tk
2040 limitations, this is a great improvement.
2045 limitations, this is a great improvement.
2041
2046
2042 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2047 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2043 info in user prompts. Patch by Prabhu.
2048 info in user prompts. Patch by Prabhu.
2044
2049
2045 2004-11-18 Fernando Perez <fperez@colorado.edu>
2050 2004-11-18 Fernando Perez <fperez@colorado.edu>
2046
2051
2047 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2052 * 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
2053 EOFErrors and bail, to avoid infinite loops if a non-terminating
2049 file is fed into ipython. Patch submitted in issue 19 by user,
2054 file is fed into ipython. Patch submitted in issue 19 by user,
2050 many thanks.
2055 many thanks.
2051
2056
2052 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2057 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2053 autoquote/parens in continuation prompts, which can cause lots of
2058 autoquote/parens in continuation prompts, which can cause lots of
2054 problems. Closes roundup issue 20.
2059 problems. Closes roundup issue 20.
2055
2060
2056 2004-11-17 Fernando Perez <fperez@colorado.edu>
2061 2004-11-17 Fernando Perez <fperez@colorado.edu>
2057
2062
2058 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2063 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2059 reported as debian bug #280505. I'm not sure my local changelog
2064 reported as debian bug #280505. I'm not sure my local changelog
2060 entry has the proper debian format (Jack?).
2065 entry has the proper debian format (Jack?).
2061
2066
2062 2004-11-08 *** Released version 0.6.4
2067 2004-11-08 *** Released version 0.6.4
2063
2068
2064 2004-11-08 Fernando Perez <fperez@colorado.edu>
2069 2004-11-08 Fernando Perez <fperez@colorado.edu>
2065
2070
2066 * IPython/iplib.py (init_readline): Fix exit message for Windows
2071 * IPython/iplib.py (init_readline): Fix exit message for Windows
2067 when readline is active. Thanks to a report by Eric Jones
2072 when readline is active. Thanks to a report by Eric Jones
2068 <eric-AT-enthought.com>.
2073 <eric-AT-enthought.com>.
2069
2074
2070 2004-11-07 Fernando Perez <fperez@colorado.edu>
2075 2004-11-07 Fernando Perez <fperez@colorado.edu>
2071
2076
2072 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2077 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2073 sometimes seen by win2k/cygwin users.
2078 sometimes seen by win2k/cygwin users.
2074
2079
2075 2004-11-06 Fernando Perez <fperez@colorado.edu>
2080 2004-11-06 Fernando Perez <fperez@colorado.edu>
2076
2081
2077 * IPython/iplib.py (interact): Change the handling of %Exit from
2082 * IPython/iplib.py (interact): Change the handling of %Exit from
2078 trying to propagate a SystemExit to an internal ipython flag.
2083 trying to propagate a SystemExit to an internal ipython flag.
2079 This is less elegant than using Python's exception mechanism, but
2084 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
2085 I can't get that to work reliably with threads, so under -pylab
2081 %Exit was hanging IPython. Cross-thread exception handling is
2086 %Exit was hanging IPython. Cross-thread exception handling is
2082 really a bitch. Thaks to a bug report by Stephen Walton
2087 really a bitch. Thaks to a bug report by Stephen Walton
2083 <stephen.walton-AT-csun.edu>.
2088 <stephen.walton-AT-csun.edu>.
2084
2089
2085 2004-11-04 Fernando Perez <fperez@colorado.edu>
2090 2004-11-04 Fernando Perez <fperez@colorado.edu>
2086
2091
2087 * IPython/iplib.py (raw_input_original): store a pointer to the
2092 * IPython/iplib.py (raw_input_original): store a pointer to the
2088 true raw_input to harden against code which can modify it
2093 true raw_input to harden against code which can modify it
2089 (wx.py.PyShell does this and would otherwise crash ipython).
2094 (wx.py.PyShell does this and would otherwise crash ipython).
2090 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2095 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2091
2096
2092 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2097 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2093 Ctrl-C problem, which does not mess up the input line.
2098 Ctrl-C problem, which does not mess up the input line.
2094
2099
2095 2004-11-03 Fernando Perez <fperez@colorado.edu>
2100 2004-11-03 Fernando Perez <fperez@colorado.edu>
2096
2101
2097 * IPython/Release.py: Changed licensing to BSD, in all files.
2102 * IPython/Release.py: Changed licensing to BSD, in all files.
2098 (name): lowercase name for tarball/RPM release.
2103 (name): lowercase name for tarball/RPM release.
2099
2104
2100 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2105 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2101 use throughout ipython.
2106 use throughout ipython.
2102
2107
2103 * IPython/Magic.py (Magic._ofind): Switch to using the new
2108 * IPython/Magic.py (Magic._ofind): Switch to using the new
2104 OInspect.getdoc() function.
2109 OInspect.getdoc() function.
2105
2110
2106 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2111 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2107 of the line currently being canceled via Ctrl-C. It's extremely
2112 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
2113 ugly, but I don't know how to do it better (the problem is one of
2109 handling cross-thread exceptions).
2114 handling cross-thread exceptions).
2110
2115
2111 2004-10-28 Fernando Perez <fperez@colorado.edu>
2116 2004-10-28 Fernando Perez <fperez@colorado.edu>
2112
2117
2113 * IPython/Shell.py (signal_handler): add signal handlers to trap
2118 * IPython/Shell.py (signal_handler): add signal handlers to trap
2114 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2119 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2115 report by Francesc Alted.
2120 report by Francesc Alted.
2116
2121
2117 2004-10-21 Fernando Perez <fperez@colorado.edu>
2122 2004-10-21 Fernando Perez <fperez@colorado.edu>
2118
2123
2119 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2124 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2120 to % for pysh syntax extensions.
2125 to % for pysh syntax extensions.
2121
2126
2122 2004-10-09 Fernando Perez <fperez@colorado.edu>
2127 2004-10-09 Fernando Perez <fperez@colorado.edu>
2123
2128
2124 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2129 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2125 arrays to print a more useful summary, without calling str(arr).
2130 arrays to print a more useful summary, without calling str(arr).
2126 This avoids the problem of extremely lengthy computations which
2131 This avoids the problem of extremely lengthy computations which
2127 occur if arr is large, and appear to the user as a system lockup
2132 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
2133 with 100% cpu activity. After a suggestion by Kristian Sandberg
2129 <Kristian.Sandberg@colorado.edu>.
2134 <Kristian.Sandberg@colorado.edu>.
2130 (Magic.__init__): fix bug in global magic escapes not being
2135 (Magic.__init__): fix bug in global magic escapes not being
2131 correctly set.
2136 correctly set.
2132
2137
2133 2004-10-08 Fernando Perez <fperez@colorado.edu>
2138 2004-10-08 Fernando Perez <fperez@colorado.edu>
2134
2139
2135 * IPython/Magic.py (__license__): change to absolute imports of
2140 * IPython/Magic.py (__license__): change to absolute imports of
2136 ipython's own internal packages, to start adapting to the absolute
2141 ipython's own internal packages, to start adapting to the absolute
2137 import requirement of PEP-328.
2142 import requirement of PEP-328.
2138
2143
2139 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2144 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2140 files, and standardize author/license marks through the Release
2145 files, and standardize author/license marks through the Release
2141 module instead of having per/file stuff (except for files with
2146 module instead of having per/file stuff (except for files with
2142 particular licenses, like the MIT/PSF-licensed codes).
2147 particular licenses, like the MIT/PSF-licensed codes).
2143
2148
2144 * IPython/Debugger.py: remove dead code for python 2.1
2149 * IPython/Debugger.py: remove dead code for python 2.1
2145
2150
2146 2004-10-04 Fernando Perez <fperez@colorado.edu>
2151 2004-10-04 Fernando Perez <fperez@colorado.edu>
2147
2152
2148 * IPython/iplib.py (ipmagic): New function for accessing magics
2153 * IPython/iplib.py (ipmagic): New function for accessing magics
2149 via a normal python function call.
2154 via a normal python function call.
2150
2155
2151 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2156 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2152 from '@' to '%', to accomodate the new @decorator syntax of python
2157 from '@' to '%', to accomodate the new @decorator syntax of python
2153 2.4.
2158 2.4.
2154
2159
2155 2004-09-29 Fernando Perez <fperez@colorado.edu>
2160 2004-09-29 Fernando Perez <fperez@colorado.edu>
2156
2161
2157 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2162 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2158 matplotlib.use to prevent running scripts which try to switch
2163 matplotlib.use to prevent running scripts which try to switch
2159 interactive backends from within ipython. This will just crash
2164 interactive backends from within ipython. This will just crash
2160 the python interpreter, so we can't allow it (but a detailed error
2165 the python interpreter, so we can't allow it (but a detailed error
2161 is given to the user).
2166 is given to the user).
2162
2167
2163 2004-09-28 Fernando Perez <fperez@colorado.edu>
2168 2004-09-28 Fernando Perez <fperez@colorado.edu>
2164
2169
2165 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2170 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2166 matplotlib-related fixes so that using @run with non-matplotlib
2171 matplotlib-related fixes so that using @run with non-matplotlib
2167 scripts doesn't pop up spurious plot windows. This requires
2172 scripts doesn't pop up spurious plot windows. This requires
2168 matplotlib >= 0.63, where I had to make some changes as well.
2173 matplotlib >= 0.63, where I had to make some changes as well.
2169
2174
2170 * IPython/ipmaker.py (make_IPython): update version requirement to
2175 * IPython/ipmaker.py (make_IPython): update version requirement to
2171 python 2.2.
2176 python 2.2.
2172
2177
2173 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2178 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2174 banner arg for embedded customization.
2179 banner arg for embedded customization.
2175
2180
2176 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2181 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2177 explicit uses of __IP as the IPython's instance name. Now things
2182 explicit uses of __IP as the IPython's instance name. Now things
2178 are properly handled via the shell.name value. The actual code
2183 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
2184 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
2185 is much better than before. I'll clean things completely when the
2181 magic stuff gets a real overhaul.
2186 magic stuff gets a real overhaul.
2182
2187
2183 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2188 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2184 minor changes to debian dir.
2189 minor changes to debian dir.
2185
2190
2186 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2191 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2187 pointer to the shell itself in the interactive namespace even when
2192 pointer to the shell itself in the interactive namespace even when
2188 a user-supplied dict is provided. This is needed for embedding
2193 a user-supplied dict is provided. This is needed for embedding
2189 purposes (found by tests with Michel Sanner).
2194 purposes (found by tests with Michel Sanner).
2190
2195
2191 2004-09-27 Fernando Perez <fperez@colorado.edu>
2196 2004-09-27 Fernando Perez <fperez@colorado.edu>
2192
2197
2193 * IPython/UserConfig/ipythonrc: remove []{} from
2198 * IPython/UserConfig/ipythonrc: remove []{} from
2194 readline_remove_delims, so that things like [modname.<TAB> do
2199 readline_remove_delims, so that things like [modname.<TAB> do
2195 proper completion. This disables [].TAB, but that's a less common
2200 proper completion. This disables [].TAB, but that's a less common
2196 case than module names in list comprehensions, for example.
2201 case than module names in list comprehensions, for example.
2197 Thanks to a report by Andrea Riciputi.
2202 Thanks to a report by Andrea Riciputi.
2198
2203
2199 2004-09-09 Fernando Perez <fperez@colorado.edu>
2204 2004-09-09 Fernando Perez <fperez@colorado.edu>
2200
2205
2201 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2206 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2202 blocking problems in win32 and osx. Fix by John.
2207 blocking problems in win32 and osx. Fix by John.
2203
2208
2204 2004-09-08 Fernando Perez <fperez@colorado.edu>
2209 2004-09-08 Fernando Perez <fperez@colorado.edu>
2205
2210
2206 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2211 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2207 for Win32 and OSX. Fix by John Hunter.
2212 for Win32 and OSX. Fix by John Hunter.
2208
2213
2209 2004-08-30 *** Released version 0.6.3
2214 2004-08-30 *** Released version 0.6.3
2210
2215
2211 2004-08-30 Fernando Perez <fperez@colorado.edu>
2216 2004-08-30 Fernando Perez <fperez@colorado.edu>
2212
2217
2213 * setup.py (isfile): Add manpages to list of dependent files to be
2218 * setup.py (isfile): Add manpages to list of dependent files to be
2214 updated.
2219 updated.
2215
2220
2216 2004-08-27 Fernando Perez <fperez@colorado.edu>
2221 2004-08-27 Fernando Perez <fperez@colorado.edu>
2217
2222
2218 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2223 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2219 for now. They don't really work with standalone WX/GTK code
2224 for now. They don't really work with standalone WX/GTK code
2220 (though matplotlib IS working fine with both of those backends).
2225 (though matplotlib IS working fine with both of those backends).
2221 This will neeed much more testing. I disabled most things with
2226 This will neeed much more testing. I disabled most things with
2222 comments, so turning it back on later should be pretty easy.
2227 comments, so turning it back on later should be pretty easy.
2223
2228
2224 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2229 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2225 autocalling of expressions like r'foo', by modifying the line
2230 autocalling of expressions like r'foo', by modifying the line
2226 split regexp. Closes
2231 split regexp. Closes
2227 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2232 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2228 Riley <ipythonbugs-AT-sabi.net>.
2233 Riley <ipythonbugs-AT-sabi.net>.
2229 (InteractiveShell.mainloop): honor --nobanner with banner
2234 (InteractiveShell.mainloop): honor --nobanner with banner
2230 extensions.
2235 extensions.
2231
2236
2232 * IPython/Shell.py: Significant refactoring of all classes, so
2237 * IPython/Shell.py: Significant refactoring of all classes, so
2233 that we can really support ALL matplotlib backends and threading
2238 that we can really support ALL matplotlib backends and threading
2234 models (John spotted a bug with Tk which required this). Now we
2239 models (John spotted a bug with Tk which required this). Now we
2235 should support single-threaded, WX-threads and GTK-threads, both
2240 should support single-threaded, WX-threads and GTK-threads, both
2236 for generic code and for matplotlib.
2241 for generic code and for matplotlib.
2237
2242
2238 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2243 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2239 -pylab, to simplify things for users. Will also remove the pylab
2244 -pylab, to simplify things for users. Will also remove the pylab
2240 profile, since now all of matplotlib configuration is directly
2245 profile, since now all of matplotlib configuration is directly
2241 handled here. This also reduces startup time.
2246 handled here. This also reduces startup time.
2242
2247
2243 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2248 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2244 shell wasn't being correctly called. Also in IPShellWX.
2249 shell wasn't being correctly called. Also in IPShellWX.
2245
2250
2246 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2251 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2247 fine-tune banner.
2252 fine-tune banner.
2248
2253
2249 * IPython/numutils.py (spike): Deprecate these spike functions,
2254 * IPython/numutils.py (spike): Deprecate these spike functions,
2250 delete (long deprecated) gnuplot_exec handler.
2255 delete (long deprecated) gnuplot_exec handler.
2251
2256
2252 2004-08-26 Fernando Perez <fperez@colorado.edu>
2257 2004-08-26 Fernando Perez <fperez@colorado.edu>
2253
2258
2254 * ipython.1: Update for threading options, plus some others which
2259 * ipython.1: Update for threading options, plus some others which
2255 were missing.
2260 were missing.
2256
2261
2257 * IPython/ipmaker.py (__call__): Added -wthread option for
2262 * IPython/ipmaker.py (__call__): Added -wthread option for
2258 wxpython thread handling. Make sure threading options are only
2263 wxpython thread handling. Make sure threading options are only
2259 valid at the command line.
2264 valid at the command line.
2260
2265
2261 * scripts/ipython: moved shell selection into a factory function
2266 * scripts/ipython: moved shell selection into a factory function
2262 in Shell.py, to keep the starter script to a minimum.
2267 in Shell.py, to keep the starter script to a minimum.
2263
2268
2264 2004-08-25 Fernando Perez <fperez@colorado.edu>
2269 2004-08-25 Fernando Perez <fperez@colorado.edu>
2265
2270
2266 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2271 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2267 John. Along with some recent changes he made to matplotlib, the
2272 John. Along with some recent changes he made to matplotlib, the
2268 next versions of both systems should work very well together.
2273 next versions of both systems should work very well together.
2269
2274
2270 2004-08-24 Fernando Perez <fperez@colorado.edu>
2275 2004-08-24 Fernando Perez <fperez@colorado.edu>
2271
2276
2272 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2277 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2273 tried to switch the profiling to using hotshot, but I'm getting
2278 tried to switch the profiling to using hotshot, but I'm getting
2274 strange errors from prof.runctx() there. I may be misreading the
2279 strange errors from prof.runctx() there. I may be misreading the
2275 docs, but it looks weird. For now the profiling code will
2280 docs, but it looks weird. For now the profiling code will
2276 continue to use the standard profiler.
2281 continue to use the standard profiler.
2277
2282
2278 2004-08-23 Fernando Perez <fperez@colorado.edu>
2283 2004-08-23 Fernando Perez <fperez@colorado.edu>
2279
2284
2280 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2285 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2281 threaded shell, by John Hunter. It's not quite ready yet, but
2286 threaded shell, by John Hunter. It's not quite ready yet, but
2282 close.
2287 close.
2283
2288
2284 2004-08-22 Fernando Perez <fperez@colorado.edu>
2289 2004-08-22 Fernando Perez <fperez@colorado.edu>
2285
2290
2286 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2291 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2287 in Magic and ultraTB.
2292 in Magic and ultraTB.
2288
2293
2289 * ipython.1: document threading options in manpage.
2294 * ipython.1: document threading options in manpage.
2290
2295
2291 * scripts/ipython: Changed name of -thread option to -gthread,
2296 * scripts/ipython: Changed name of -thread option to -gthread,
2292 since this is GTK specific. I want to leave the door open for a
2297 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
2298 -wthread option for WX, which will most likely be necessary. This
2294 change affects usage and ipmaker as well.
2299 change affects usage and ipmaker as well.
2295
2300
2296 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2301 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2297 handle the matplotlib shell issues. Code by John Hunter
2302 handle the matplotlib shell issues. Code by John Hunter
2298 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2303 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2299 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2304 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2300 broken (and disabled for end users) for now, but it puts the
2305 broken (and disabled for end users) for now, but it puts the
2301 infrastructure in place.
2306 infrastructure in place.
2302
2307
2303 2004-08-21 Fernando Perez <fperez@colorado.edu>
2308 2004-08-21 Fernando Perez <fperez@colorado.edu>
2304
2309
2305 * ipythonrc-pylab: Add matplotlib support.
2310 * ipythonrc-pylab: Add matplotlib support.
2306
2311
2307 * matplotlib_config.py: new files for matplotlib support, part of
2312 * matplotlib_config.py: new files for matplotlib support, part of
2308 the pylab profile.
2313 the pylab profile.
2309
2314
2310 * IPython/usage.py (__doc__): documented the threading options.
2315 * IPython/usage.py (__doc__): documented the threading options.
2311
2316
2312 2004-08-20 Fernando Perez <fperez@colorado.edu>
2317 2004-08-20 Fernando Perez <fperez@colorado.edu>
2313
2318
2314 * ipython: Modified the main calling routine to handle the -thread
2319 * ipython: Modified the main calling routine to handle the -thread
2315 and -mpthread options. This needs to be done as a top-level hack,
2320 and -mpthread options. This needs to be done as a top-level hack,
2316 because it determines which class to instantiate for IPython
2321 because it determines which class to instantiate for IPython
2317 itself.
2322 itself.
2318
2323
2319 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2324 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2320 classes to support multithreaded GTK operation without blocking,
2325 classes to support multithreaded GTK operation without blocking,
2321 and matplotlib with all backends. This is a lot of still very
2326 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
2327 experimental code, and threads are tricky. So it may still have a
2323 few rough edges... This code owes a lot to
2328 few rough edges... This code owes a lot to
2324 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2329 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2325 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2330 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2326 to John Hunter for all the matplotlib work.
2331 to John Hunter for all the matplotlib work.
2327
2332
2328 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2333 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2329 options for gtk thread and matplotlib support.
2334 options for gtk thread and matplotlib support.
2330
2335
2331 2004-08-16 Fernando Perez <fperez@colorado.edu>
2336 2004-08-16 Fernando Perez <fperez@colorado.edu>
2332
2337
2333 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2338 * 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
2339 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>.
2340 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2336
2341
2337 2004-08-11 Fernando Perez <fperez@colorado.edu>
2342 2004-08-11 Fernando Perez <fperez@colorado.edu>
2338
2343
2339 * setup.py (isfile): Fix build so documentation gets updated for
2344 * setup.py (isfile): Fix build so documentation gets updated for
2340 rpms (it was only done for .tgz builds).
2345 rpms (it was only done for .tgz builds).
2341
2346
2342 2004-08-10 Fernando Perez <fperez@colorado.edu>
2347 2004-08-10 Fernando Perez <fperez@colorado.edu>
2343
2348
2344 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2349 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2345
2350
2346 * iplib.py : Silence syntax error exceptions in tab-completion.
2351 * iplib.py : Silence syntax error exceptions in tab-completion.
2347
2352
2348 2004-08-05 Fernando Perez <fperez@colorado.edu>
2353 2004-08-05 Fernando Perez <fperez@colorado.edu>
2349
2354
2350 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2355 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2351 'color off' mark for continuation prompts. This was causing long
2356 'color off' mark for continuation prompts. This was causing long
2352 continuation lines to mis-wrap.
2357 continuation lines to mis-wrap.
2353
2358
2354 2004-08-01 Fernando Perez <fperez@colorado.edu>
2359 2004-08-01 Fernando Perez <fperez@colorado.edu>
2355
2360
2356 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2361 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2357 for building ipython to be a parameter. All this is necessary
2362 for building ipython to be a parameter. All this is necessary
2358 right now to have a multithreaded version, but this insane
2363 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
2364 non-design will be cleaned up soon. For now, it's a hack that
2360 works.
2365 works.
2361
2366
2362 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2367 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2363 args in various places. No bugs so far, but it's a dangerous
2368 args in various places. No bugs so far, but it's a dangerous
2364 practice.
2369 practice.
2365
2370
2366 2004-07-31 Fernando Perez <fperez@colorado.edu>
2371 2004-07-31 Fernando Perez <fperez@colorado.edu>
2367
2372
2368 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2373 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2369 fix completion of files with dots in their names under most
2374 fix completion of files with dots in their names under most
2370 profiles (pysh was OK because the completion order is different).
2375 profiles (pysh was OK because the completion order is different).
2371
2376
2372 2004-07-27 Fernando Perez <fperez@colorado.edu>
2377 2004-07-27 Fernando Perez <fperez@colorado.edu>
2373
2378
2374 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2379 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2375 keywords manually, b/c the one in keyword.py was removed in python
2380 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>.
2381 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2377 This is NOT a bug under python 2.3 and earlier.
2382 This is NOT a bug under python 2.3 and earlier.
2378
2383
2379 2004-07-26 Fernando Perez <fperez@colorado.edu>
2384 2004-07-26 Fernando Perez <fperez@colorado.edu>
2380
2385
2381 * IPython/ultraTB.py (VerboseTB.text): Add another
2386 * IPython/ultraTB.py (VerboseTB.text): Add another
2382 linecache.checkcache() call to try to prevent inspect.py from
2387 linecache.checkcache() call to try to prevent inspect.py from
2383 crashing under python 2.3. I think this fixes
2388 crashing under python 2.3. I think this fixes
2384 http://www.scipy.net/roundup/ipython/issue17.
2389 http://www.scipy.net/roundup/ipython/issue17.
2385
2390
2386 2004-07-26 *** Released version 0.6.2
2391 2004-07-26 *** Released version 0.6.2
2387
2392
2388 2004-07-26 Fernando Perez <fperez@colorado.edu>
2393 2004-07-26 Fernando Perez <fperez@colorado.edu>
2389
2394
2390 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2395 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2391 fail for any number.
2396 fail for any number.
2392 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2397 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2393 empty bookmarks.
2398 empty bookmarks.
2394
2399
2395 2004-07-26 *** Released version 0.6.1
2400 2004-07-26 *** Released version 0.6.1
2396
2401
2397 2004-07-26 Fernando Perez <fperez@colorado.edu>
2402 2004-07-26 Fernando Perez <fperez@colorado.edu>
2398
2403
2399 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2404 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2400
2405
2401 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2406 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2402 escaping '()[]{}' in filenames.
2407 escaping '()[]{}' in filenames.
2403
2408
2404 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2409 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2405 Python 2.2 users who lack a proper shlex.split.
2410 Python 2.2 users who lack a proper shlex.split.
2406
2411
2407 2004-07-19 Fernando Perez <fperez@colorado.edu>
2412 2004-07-19 Fernando Perez <fperez@colorado.edu>
2408
2413
2409 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2414 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2410 for reading readline's init file. I follow the normal chain:
2415 for reading readline's init file. I follow the normal chain:
2411 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2416 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2412 report by Mike Heeter. This closes
2417 report by Mike Heeter. This closes
2413 http://www.scipy.net/roundup/ipython/issue16.
2418 http://www.scipy.net/roundup/ipython/issue16.
2414
2419
2415 2004-07-18 Fernando Perez <fperez@colorado.edu>
2420 2004-07-18 Fernando Perez <fperez@colorado.edu>
2416
2421
2417 * IPython/iplib.py (__init__): Add better handling of '\' under
2422 * IPython/iplib.py (__init__): Add better handling of '\' under
2418 Win32 for filenames. After a patch by Ville.
2423 Win32 for filenames. After a patch by Ville.
2419
2424
2420 2004-07-17 Fernando Perez <fperez@colorado.edu>
2425 2004-07-17 Fernando Perez <fperez@colorado.edu>
2421
2426
2422 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2427 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2423 autocalling would be triggered for 'foo is bar' if foo is
2428 autocalling would be triggered for 'foo is bar' if foo is
2424 callable. I also cleaned up the autocall detection code to use a
2429 callable. I also cleaned up the autocall detection code to use a
2425 regexp, which is faster. Bug reported by Alexander Schmolck.
2430 regexp, which is faster. Bug reported by Alexander Schmolck.
2426
2431
2427 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2432 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2428 '?' in them would confuse the help system. Reported by Alex
2433 '?' in them would confuse the help system. Reported by Alex
2429 Schmolck.
2434 Schmolck.
2430
2435
2431 2004-07-16 Fernando Perez <fperez@colorado.edu>
2436 2004-07-16 Fernando Perez <fperez@colorado.edu>
2432
2437
2433 * IPython/GnuplotInteractive.py (__all__): added plot2.
2438 * IPython/GnuplotInteractive.py (__all__): added plot2.
2434
2439
2435 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2440 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2436 plotting dictionaries, lists or tuples of 1d arrays.
2441 plotting dictionaries, lists or tuples of 1d arrays.
2437
2442
2438 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2443 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2439 optimizations.
2444 optimizations.
2440
2445
2441 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2446 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2442 the information which was there from Janko's original IPP code:
2447 the information which was there from Janko's original IPP code:
2443
2448
2444 03.05.99 20:53 porto.ifm.uni-kiel.de
2449 03.05.99 20:53 porto.ifm.uni-kiel.de
2445 --Started changelog.
2450 --Started changelog.
2446 --make clear do what it say it does
2451 --make clear do what it say it does
2447 --added pretty output of lines from inputcache
2452 --added pretty output of lines from inputcache
2448 --Made Logger a mixin class, simplifies handling of switches
2453 --Made Logger a mixin class, simplifies handling of switches
2449 --Added own completer class. .string<TAB> expands to last history
2454 --Added own completer class. .string<TAB> expands to last history
2450 line which starts with string. The new expansion is also present
2455 line which starts with string. The new expansion is also present
2451 with Ctrl-r from the readline library. But this shows, who this
2456 with Ctrl-r from the readline library. But this shows, who this
2452 can be done for other cases.
2457 can be done for other cases.
2453 --Added convention that all shell functions should accept a
2458 --Added convention that all shell functions should accept a
2454 parameter_string This opens the door for different behaviour for
2459 parameter_string This opens the door for different behaviour for
2455 each function. @cd is a good example of this.
2460 each function. @cd is a good example of this.
2456
2461
2457 04.05.99 12:12 porto.ifm.uni-kiel.de
2462 04.05.99 12:12 porto.ifm.uni-kiel.de
2458 --added logfile rotation
2463 --added logfile rotation
2459 --added new mainloop method which freezes first the namespace
2464 --added new mainloop method which freezes first the namespace
2460
2465
2461 07.05.99 21:24 porto.ifm.uni-kiel.de
2466 07.05.99 21:24 porto.ifm.uni-kiel.de
2462 --added the docreader classes. Now there is a help system.
2467 --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
2468 -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
2469 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
2470 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.
2471 system installed and it's not so easy to change html-docs to info.
2467 --added global logfile option
2472 --added global logfile option
2468 --there is now a hook for object inspection method pinfo needs to
2473 --there is now a hook for object inspection method pinfo needs to
2469 be provided for this. Can be reached by two '??'.
2474 be provided for this. Can be reached by two '??'.
2470
2475
2471 08.05.99 20:51 porto.ifm.uni-kiel.de
2476 08.05.99 20:51 porto.ifm.uni-kiel.de
2472 --added a README
2477 --added a README
2473 --bug in rc file. Something has changed so functions in the rc
2478 --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
2479 file need to reference the shell and not self. Not clear if it's a
2475 bug or feature.
2480 bug or feature.
2476 --changed rc file for new behavior
2481 --changed rc file for new behavior
2477
2482
2478 2004-07-15 Fernando Perez <fperez@colorado.edu>
2483 2004-07-15 Fernando Perez <fperez@colorado.edu>
2479
2484
2480 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2485 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2481 cache was falling out of sync in bizarre manners when multi-line
2486 cache was falling out of sync in bizarre manners when multi-line
2482 input was present. Minor optimizations and cleanup.
2487 input was present. Minor optimizations and cleanup.
2483
2488
2484 (Logger): Remove old Changelog info for cleanup. This is the
2489 (Logger): Remove old Changelog info for cleanup. This is the
2485 information which was there from Janko's original code:
2490 information which was there from Janko's original code:
2486
2491
2487 Changes to Logger: - made the default log filename a parameter
2492 Changes to Logger: - made the default log filename a parameter
2488
2493
2489 - put a check for lines beginning with !@? in log(). Needed
2494 - put a check for lines beginning with !@? in log(). Needed
2490 (even if the handlers properly log their lines) for mid-session
2495 (even if the handlers properly log their lines) for mid-session
2491 logging activation to work properly. Without this, lines logged
2496 logging activation to work properly. Without this, lines logged
2492 in mid session, which get read from the cache, would end up
2497 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
2498 'bare' (with !@? in the open) in the log. Now they are caught
2494 and prepended with a #.
2499 and prepended with a #.
2495
2500
2496 * IPython/iplib.py (InteractiveShell.init_readline): added check
2501 * IPython/iplib.py (InteractiveShell.init_readline): added check
2497 in case MagicCompleter fails to be defined, so we don't crash.
2502 in case MagicCompleter fails to be defined, so we don't crash.
2498
2503
2499 2004-07-13 Fernando Perez <fperez@colorado.edu>
2504 2004-07-13 Fernando Perez <fperez@colorado.edu>
2500
2505
2501 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2506 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2502 of EPS if the requested filename ends in '.eps'.
2507 of EPS if the requested filename ends in '.eps'.
2503
2508
2504 2004-07-04 Fernando Perez <fperez@colorado.edu>
2509 2004-07-04 Fernando Perez <fperez@colorado.edu>
2505
2510
2506 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2511 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2507 escaping of quotes when calling the shell.
2512 escaping of quotes when calling the shell.
2508
2513
2509 2004-07-02 Fernando Perez <fperez@colorado.edu>
2514 2004-07-02 Fernando Perez <fperez@colorado.edu>
2510
2515
2511 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2516 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2512 gettext not working because we were clobbering '_'. Fixes
2517 gettext not working because we were clobbering '_'. Fixes
2513 http://www.scipy.net/roundup/ipython/issue6.
2518 http://www.scipy.net/roundup/ipython/issue6.
2514
2519
2515 2004-07-01 Fernando Perez <fperez@colorado.edu>
2520 2004-07-01 Fernando Perez <fperez@colorado.edu>
2516
2521
2517 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2522 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2518 into @cd. Patch by Ville.
2523 into @cd. Patch by Ville.
2519
2524
2520 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2525 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2521 new function to store things after ipmaker runs. Patch by Ville.
2526 new function to store things after ipmaker runs. Patch by Ville.
2522 Eventually this will go away once ipmaker is removed and the class
2527 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
2528 gets cleaned up, but for now it's ok. Key functionality here is
2524 the addition of the persistent storage mechanism, a dict for
2529 the addition of the persistent storage mechanism, a dict for
2525 keeping data across sessions (for now just bookmarks, but more can
2530 keeping data across sessions (for now just bookmarks, but more can
2526 be implemented later).
2531 be implemented later).
2527
2532
2528 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2533 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2529 persistent across sections. Patch by Ville, I modified it
2534 persistent across sections. Patch by Ville, I modified it
2530 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2535 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2531 added a '-l' option to list all bookmarks.
2536 added a '-l' option to list all bookmarks.
2532
2537
2533 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2538 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2534 center for cleanup. Registered with atexit.register(). I moved
2539 center for cleanup. Registered with atexit.register(). I moved
2535 here the old exit_cleanup(). After a patch by Ville.
2540 here the old exit_cleanup(). After a patch by Ville.
2536
2541
2537 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2542 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2538 characters in the hacked shlex_split for python 2.2.
2543 characters in the hacked shlex_split for python 2.2.
2539
2544
2540 * IPython/iplib.py (file_matches): more fixes to filenames with
2545 * IPython/iplib.py (file_matches): more fixes to filenames with
2541 whitespace in them. It's not perfect, but limitations in python's
2546 whitespace in them. It's not perfect, but limitations in python's
2542 readline make it impossible to go further.
2547 readline make it impossible to go further.
2543
2548
2544 2004-06-29 Fernando Perez <fperez@colorado.edu>
2549 2004-06-29 Fernando Perez <fperez@colorado.edu>
2545
2550
2546 * IPython/iplib.py (file_matches): escape whitespace correctly in
2551 * IPython/iplib.py (file_matches): escape whitespace correctly in
2547 filename completions. Bug reported by Ville.
2552 filename completions. Bug reported by Ville.
2548
2553
2549 2004-06-28 Fernando Perez <fperez@colorado.edu>
2554 2004-06-28 Fernando Perez <fperez@colorado.edu>
2550
2555
2551 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2556 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2552 the history file will be called 'history-PROFNAME' (or just
2557 the history file will be called 'history-PROFNAME' (or just
2553 'history' if no profile is loaded). I was getting annoyed at
2558 'history' if no profile is loaded). I was getting annoyed at
2554 getting my Numerical work history clobbered by pysh sessions.
2559 getting my Numerical work history clobbered by pysh sessions.
2555
2560
2556 * IPython/iplib.py (InteractiveShell.__init__): Internal
2561 * IPython/iplib.py (InteractiveShell.__init__): Internal
2557 getoutputerror() function so that we can honor the system_verbose
2562 getoutputerror() function so that we can honor the system_verbose
2558 flag for _all_ system calls. I also added escaping of #
2563 flag for _all_ system calls. I also added escaping of #
2559 characters here to avoid confusing Itpl.
2564 characters here to avoid confusing Itpl.
2560
2565
2561 * IPython/Magic.py (shlex_split): removed call to shell in
2566 * IPython/Magic.py (shlex_split): removed call to shell in
2562 parse_options and replaced it with shlex.split(). The annoying
2567 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
2568 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
2569 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
2570 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
2571 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2567 problem.
2572 problem.
2568
2573
2569 (Magic.magic_system_verbose): new toggle to print the actual
2574 (Magic.magic_system_verbose): new toggle to print the actual
2570 system calls made by ipython. Mainly for debugging purposes.
2575 system calls made by ipython. Mainly for debugging purposes.
2571
2576
2572 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2577 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2573 doesn't support persistence. Reported (and fix suggested) by
2578 doesn't support persistence. Reported (and fix suggested) by
2574 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2579 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2575
2580
2576 2004-06-26 Fernando Perez <fperez@colorado.edu>
2581 2004-06-26 Fernando Perez <fperez@colorado.edu>
2577
2582
2578 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2583 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2579 continue prompts.
2584 continue prompts.
2580
2585
2581 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2586 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2582 function (basically a big docstring) and a few more things here to
2587 function (basically a big docstring) and a few more things here to
2583 speedup startup. pysh.py is now very lightweight. We want because
2588 speedup startup. pysh.py is now very lightweight. We want because
2584 it gets execfile'd, while InterpreterExec gets imported, so
2589 it gets execfile'd, while InterpreterExec gets imported, so
2585 byte-compilation saves time.
2590 byte-compilation saves time.
2586
2591
2587 2004-06-25 Fernando Perez <fperez@colorado.edu>
2592 2004-06-25 Fernando Perez <fperez@colorado.edu>
2588
2593
2589 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2594 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2590 -NUM', which was recently broken.
2595 -NUM', which was recently broken.
2591
2596
2592 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2597 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2593 in multi-line input (but not !!, which doesn't make sense there).
2598 in multi-line input (but not !!, which doesn't make sense there).
2594
2599
2595 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2600 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2596 It's just too useful, and people can turn it off in the less
2601 It's just too useful, and people can turn it off in the less
2597 common cases where it's a problem.
2602 common cases where it's a problem.
2598
2603
2599 2004-06-24 Fernando Perez <fperez@colorado.edu>
2604 2004-06-24 Fernando Perez <fperez@colorado.edu>
2600
2605
2601 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2606 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2602 special syntaxes (like alias calling) is now allied in multi-line
2607 special syntaxes (like alias calling) is now allied in multi-line
2603 input. This is still _very_ experimental, but it's necessary for
2608 input. This is still _very_ experimental, but it's necessary for
2604 efficient shell usage combining python looping syntax with system
2609 efficient shell usage combining python looping syntax with system
2605 calls. For now it's restricted to aliases, I don't think it
2610 calls. For now it's restricted to aliases, I don't think it
2606 really even makes sense to have this for magics.
2611 really even makes sense to have this for magics.
2607
2612
2608 2004-06-23 Fernando Perez <fperez@colorado.edu>
2613 2004-06-23 Fernando Perez <fperez@colorado.edu>
2609
2614
2610 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2615 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2611 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2616 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2612
2617
2613 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2618 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2614 extensions under Windows (after code sent by Gary Bishop). The
2619 extensions under Windows (after code sent by Gary Bishop). The
2615 extensions considered 'executable' are stored in IPython's rc
2620 extensions considered 'executable' are stored in IPython's rc
2616 structure as win_exec_ext.
2621 structure as win_exec_ext.
2617
2622
2618 * IPython/genutils.py (shell): new function, like system() but
2623 * IPython/genutils.py (shell): new function, like system() but
2619 without return value. Very useful for interactive shell work.
2624 without return value. Very useful for interactive shell work.
2620
2625
2621 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2626 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2622 delete aliases.
2627 delete aliases.
2623
2628
2624 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2629 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2625 sure that the alias table doesn't contain python keywords.
2630 sure that the alias table doesn't contain python keywords.
2626
2631
2627 2004-06-21 Fernando Perez <fperez@colorado.edu>
2632 2004-06-21 Fernando Perez <fperez@colorado.edu>
2628
2633
2629 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2634 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2630 non-existent items are found in $PATH. Reported by Thorsten.
2635 non-existent items are found in $PATH. Reported by Thorsten.
2631
2636
2632 2004-06-20 Fernando Perez <fperez@colorado.edu>
2637 2004-06-20 Fernando Perez <fperez@colorado.edu>
2633
2638
2634 * IPython/iplib.py (complete): modified the completer so that the
2639 * IPython/iplib.py (complete): modified the completer so that the
2635 order of priorities can be easily changed at runtime.
2640 order of priorities can be easily changed at runtime.
2636
2641
2637 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2642 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2638 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2643 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2639
2644
2640 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2645 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2641 expand Python variables prepended with $ in all system calls. The
2646 expand Python variables prepended with $ in all system calls. The
2642 same was done to InteractiveShell.handle_shell_escape. Now all
2647 same was done to InteractiveShell.handle_shell_escape. Now all
2643 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2648 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2644 expansion of python variables and expressions according to the
2649 expansion of python variables and expressions according to the
2645 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2650 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2646
2651
2647 Though PEP-215 has been rejected, a similar (but simpler) one
2652 Though PEP-215 has been rejected, a similar (but simpler) one
2648 seems like it will go into Python 2.4, PEP-292 -
2653 seems like it will go into Python 2.4, PEP-292 -
2649 http://www.python.org/peps/pep-0292.html.
2654 http://www.python.org/peps/pep-0292.html.
2650
2655
2651 I'll keep the full syntax of PEP-215, since IPython has since the
2656 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
2657 start used Ka-Ping Yee's reference implementation discussed there
2653 (Itpl), and I actually like the powerful semantics it offers.
2658 (Itpl), and I actually like the powerful semantics it offers.
2654
2659
2655 In order to access normal shell variables, the $ has to be escaped
2660 In order to access normal shell variables, the $ has to be escaped
2656 via an extra $. For example:
2661 via an extra $. For example:
2657
2662
2658 In [7]: PATH='a python variable'
2663 In [7]: PATH='a python variable'
2659
2664
2660 In [8]: !echo $PATH
2665 In [8]: !echo $PATH
2661 a python variable
2666 a python variable
2662
2667
2663 In [9]: !echo $$PATH
2668 In [9]: !echo $$PATH
2664 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2669 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2665
2670
2666 (Magic.parse_options): escape $ so the shell doesn't evaluate
2671 (Magic.parse_options): escape $ so the shell doesn't evaluate
2667 things prematurely.
2672 things prematurely.
2668
2673
2669 * IPython/iplib.py (InteractiveShell.call_alias): added the
2674 * IPython/iplib.py (InteractiveShell.call_alias): added the
2670 ability for aliases to expand python variables via $.
2675 ability for aliases to expand python variables via $.
2671
2676
2672 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2677 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2673 system, now there's a @rehash/@rehashx pair of magics. These work
2678 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
2679 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
2680 build a table of aliases to everything in the user's $PATH
2676 (@rehash uses everything, @rehashx is slower but only adds
2681 (@rehash uses everything, @rehashx is slower but only adds
2677 executable files). With this, the pysh.py-based shell profile can
2682 executable files). With this, the pysh.py-based shell profile can
2678 now simply call rehash upon startup, and full access to all
2683 now simply call rehash upon startup, and full access to all
2679 programs in the user's path is obtained.
2684 programs in the user's path is obtained.
2680
2685
2681 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2686 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2682 functionality is now fully in place. I removed the old dynamic
2687 functionality is now fully in place. I removed the old dynamic
2683 code generation based approach, in favor of a much lighter one
2688 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
2689 based on a simple dict. The advantage is that this allows me to
2685 now have thousands of aliases with negligible cost (unthinkable
2690 now have thousands of aliases with negligible cost (unthinkable
2686 with the old system).
2691 with the old system).
2687
2692
2688 2004-06-19 Fernando Perez <fperez@colorado.edu>
2693 2004-06-19 Fernando Perez <fperez@colorado.edu>
2689
2694
2690 * IPython/iplib.py (__init__): extended MagicCompleter class to
2695 * IPython/iplib.py (__init__): extended MagicCompleter class to
2691 also complete (last in priority) on user aliases.
2696 also complete (last in priority) on user aliases.
2692
2697
2693 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2698 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2694 call to eval.
2699 call to eval.
2695 (ItplNS.__init__): Added a new class which functions like Itpl,
2700 (ItplNS.__init__): Added a new class which functions like Itpl,
2696 but allows configuring the namespace for the evaluation to occur
2701 but allows configuring the namespace for the evaluation to occur
2697 in.
2702 in.
2698
2703
2699 2004-06-18 Fernando Perez <fperez@colorado.edu>
2704 2004-06-18 Fernando Perez <fperez@colorado.edu>
2700
2705
2701 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2706 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2702 better message when 'exit' or 'quit' are typed (a common newbie
2707 better message when 'exit' or 'quit' are typed (a common newbie
2703 confusion).
2708 confusion).
2704
2709
2705 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2710 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2706 check for Windows users.
2711 check for Windows users.
2707
2712
2708 * IPython/iplib.py (InteractiveShell.user_setup): removed
2713 * IPython/iplib.py (InteractiveShell.user_setup): removed
2709 disabling of colors for Windows. I'll test at runtime and issue a
2714 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
2715 warning if Gary's readline isn't found, as to nudge users to
2711 download it.
2716 download it.
2712
2717
2713 2004-06-16 Fernando Perez <fperez@colorado.edu>
2718 2004-06-16 Fernando Perez <fperez@colorado.edu>
2714
2719
2715 * IPython/genutils.py (Stream.__init__): changed to print errors
2720 * IPython/genutils.py (Stream.__init__): changed to print errors
2716 to sys.stderr. I had a circular dependency here. Now it's
2721 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,
2722 possible to run ipython as IDLE's shell (consider this pre-alpha,
2718 since true stdout things end up in the starting terminal instead
2723 since true stdout things end up in the starting terminal instead
2719 of IDLE's out).
2724 of IDLE's out).
2720
2725
2721 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2726 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2722 users who haven't # updated their prompt_in2 definitions. Remove
2727 users who haven't # updated their prompt_in2 definitions. Remove
2723 eventually.
2728 eventually.
2724 (multiple_replace): added credit to original ASPN recipe.
2729 (multiple_replace): added credit to original ASPN recipe.
2725
2730
2726 2004-06-15 Fernando Perez <fperez@colorado.edu>
2731 2004-06-15 Fernando Perez <fperez@colorado.edu>
2727
2732
2728 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2733 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2729 list of auto-defined aliases.
2734 list of auto-defined aliases.
2730
2735
2731 2004-06-13 Fernando Perez <fperez@colorado.edu>
2736 2004-06-13 Fernando Perez <fperez@colorado.edu>
2732
2737
2733 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2738 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2734 install was really requested (so setup.py can be used for other
2739 install was really requested (so setup.py can be used for other
2735 things under Windows).
2740 things under Windows).
2736
2741
2737 2004-06-10 Fernando Perez <fperez@colorado.edu>
2742 2004-06-10 Fernando Perez <fperez@colorado.edu>
2738
2743
2739 * IPython/Logger.py (Logger.create_log): Manually remove any old
2744 * IPython/Logger.py (Logger.create_log): Manually remove any old
2740 backup, since os.remove may fail under Windows. Fixes bug
2745 backup, since os.remove may fail under Windows. Fixes bug
2741 reported by Thorsten.
2746 reported by Thorsten.
2742
2747
2743 2004-06-09 Fernando Perez <fperez@colorado.edu>
2748 2004-06-09 Fernando Perez <fperez@colorado.edu>
2744
2749
2745 * examples/example-embed.py: fixed all references to %n (replaced
2750 * examples/example-embed.py: fixed all references to %n (replaced
2746 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2751 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2747 for all examples and the manual as well.
2752 for all examples and the manual as well.
2748
2753
2749 2004-06-08 Fernando Perez <fperez@colorado.edu>
2754 2004-06-08 Fernando Perez <fperez@colorado.edu>
2750
2755
2751 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2756 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2752 alignment and color management. All 3 prompt subsystems now
2757 alignment and color management. All 3 prompt subsystems now
2753 inherit from BasePrompt.
2758 inherit from BasePrompt.
2754
2759
2755 * tools/release: updates for windows installer build and tag rpms
2760 * tools/release: updates for windows installer build and tag rpms
2756 with python version (since paths are fixed).
2761 with python version (since paths are fixed).
2757
2762
2758 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2763 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2759 which will become eventually obsolete. Also fixed the default
2764 which will become eventually obsolete. Also fixed the default
2760 prompt_in2 to use \D, so at least new users start with the correct
2765 prompt_in2 to use \D, so at least new users start with the correct
2761 defaults.
2766 defaults.
2762 WARNING: Users with existing ipythonrc files will need to apply
2767 WARNING: Users with existing ipythonrc files will need to apply
2763 this fix manually!
2768 this fix manually!
2764
2769
2765 * setup.py: make windows installer (.exe). This is finally the
2770 * 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>,
2771 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
2772 which I hadn't included because it required Python 2.3 (or recent
2768 distutils).
2773 distutils).
2769
2774
2770 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2775 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2771 usage of new '\D' escape.
2776 usage of new '\D' escape.
2772
2777
2773 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2778 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2774 lacks os.getuid())
2779 lacks os.getuid())
2775 (CachedOutput.set_colors): Added the ability to turn coloring
2780 (CachedOutput.set_colors): Added the ability to turn coloring
2776 on/off with @colors even for manually defined prompt colors. It
2781 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
2782 uses a nasty global, but it works safely and via the generic color
2778 handling mechanism.
2783 handling mechanism.
2779 (Prompt2.__init__): Introduced new escape '\D' for continuation
2784 (Prompt2.__init__): Introduced new escape '\D' for continuation
2780 prompts. It represents the counter ('\#') as dots.
2785 prompts. It represents the counter ('\#') as dots.
2781 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2786 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2782 need to update their ipythonrc files and replace '%n' with '\D' in
2787 need to update their ipythonrc files and replace '%n' with '\D' in
2783 their prompt_in2 settings everywhere. Sorry, but there's
2788 their prompt_in2 settings everywhere. Sorry, but there's
2784 otherwise no clean way to get all prompts to properly align. The
2789 otherwise no clean way to get all prompts to properly align. The
2785 ipythonrc shipped with IPython has been updated.
2790 ipythonrc shipped with IPython has been updated.
2786
2791
2787 2004-06-07 Fernando Perez <fperez@colorado.edu>
2792 2004-06-07 Fernando Perez <fperez@colorado.edu>
2788
2793
2789 * setup.py (isfile): Pass local_icons option to latex2html, so the
2794 * setup.py (isfile): Pass local_icons option to latex2html, so the
2790 resulting HTML file is self-contained. Thanks to
2795 resulting HTML file is self-contained. Thanks to
2791 dryice-AT-liu.com.cn for the tip.
2796 dryice-AT-liu.com.cn for the tip.
2792
2797
2793 * pysh.py: I created a new profile 'shell', which implements a
2798 * pysh.py: I created a new profile 'shell', which implements a
2794 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2799 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2795 system shell, nor will it become one anytime soon. It's mainly
2800 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.
2801 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,
2802 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'
2803 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2799 profile. This uses the InterpreterExec extension provided by
2804 profile. This uses the InterpreterExec extension provided by
2800 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2805 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2801
2806
2802 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2807 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2803 auto-align itself with the length of the previous input prompt
2808 auto-align itself with the length of the previous input prompt
2804 (taking into account the invisible color escapes).
2809 (taking into account the invisible color escapes).
2805 (CachedOutput.__init__): Large restructuring of this class. Now
2810 (CachedOutput.__init__): Large restructuring of this class. Now
2806 all three prompts (primary1, primary2, output) are proper objects,
2811 all three prompts (primary1, primary2, output) are proper objects,
2807 managed by the 'parent' CachedOutput class. The code is still a
2812 managed by the 'parent' CachedOutput class. The code is still a
2808 bit hackish (all prompts share state via a pointer to the cache),
2813 bit hackish (all prompts share state via a pointer to the cache),
2809 but it's overall far cleaner than before.
2814 but it's overall far cleaner than before.
2810
2815
2811 * IPython/genutils.py (getoutputerror): modified to add verbose,
2816 * IPython/genutils.py (getoutputerror): modified to add verbose,
2812 debug and header options. This makes the interface of all getout*
2817 debug and header options. This makes the interface of all getout*
2813 functions uniform.
2818 functions uniform.
2814 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2819 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2815
2820
2816 * IPython/Magic.py (Magic.default_option): added a function to
2821 * IPython/Magic.py (Magic.default_option): added a function to
2817 allow registering default options for any magic command. This
2822 allow registering default options for any magic command. This
2818 makes it easy to have profiles which customize the magics globally
2823 makes it easy to have profiles which customize the magics globally
2819 for a certain use. The values set through this function are
2824 for a certain use. The values set through this function are
2820 picked up by the parse_options() method, which all magics should
2825 picked up by the parse_options() method, which all magics should
2821 use to parse their options.
2826 use to parse their options.
2822
2827
2823 * IPython/genutils.py (warn): modified the warnings framework to
2828 * IPython/genutils.py (warn): modified the warnings framework to
2824 use the Term I/O class. I'm trying to slowly unify all of
2829 use the Term I/O class. I'm trying to slowly unify all of
2825 IPython's I/O operations to pass through Term.
2830 IPython's I/O operations to pass through Term.
2826
2831
2827 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2832 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2828 the secondary prompt to correctly match the length of the primary
2833 the secondary prompt to correctly match the length of the primary
2829 one for any prompt. Now multi-line code will properly line up
2834 one for any prompt. Now multi-line code will properly line up
2830 even for path dependent prompts, such as the new ones available
2835 even for path dependent prompts, such as the new ones available
2831 via the prompt_specials.
2836 via the prompt_specials.
2832
2837
2833 2004-06-06 Fernando Perez <fperez@colorado.edu>
2838 2004-06-06 Fernando Perez <fperez@colorado.edu>
2834
2839
2835 * IPython/Prompts.py (prompt_specials): Added the ability to have
2840 * IPython/Prompts.py (prompt_specials): Added the ability to have
2836 bash-like special sequences in the prompts, which get
2841 bash-like special sequences in the prompts, which get
2837 automatically expanded. Things like hostname, current working
2842 automatically expanded. Things like hostname, current working
2838 directory and username are implemented already, but it's easy to
2843 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
2844 add more in the future. Thanks to a patch by W.J. van der Laan
2840 <gnufnork-AT-hetdigitalegat.nl>
2845 <gnufnork-AT-hetdigitalegat.nl>
2841 (prompt_specials): Added color support for prompt strings, so
2846 (prompt_specials): Added color support for prompt strings, so
2842 users can define arbitrary color setups for their prompts.
2847 users can define arbitrary color setups for their prompts.
2843
2848
2844 2004-06-05 Fernando Perez <fperez@colorado.edu>
2849 2004-06-05 Fernando Perez <fperez@colorado.edu>
2845
2850
2846 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2851 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2847 code to load Gary Bishop's readline and configure it
2852 code to load Gary Bishop's readline and configure it
2848 automatically. Thanks to Gary for help on this.
2853 automatically. Thanks to Gary for help on this.
2849
2854
2850 2004-06-01 Fernando Perez <fperez@colorado.edu>
2855 2004-06-01 Fernando Perez <fperez@colorado.edu>
2851
2856
2852 * IPython/Logger.py (Logger.create_log): fix bug for logging
2857 * IPython/Logger.py (Logger.create_log): fix bug for logging
2853 with no filename (previous fix was incomplete).
2858 with no filename (previous fix was incomplete).
2854
2859
2855 2004-05-25 Fernando Perez <fperez@colorado.edu>
2860 2004-05-25 Fernando Perez <fperez@colorado.edu>
2856
2861
2857 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2862 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2858 parens would get passed to the shell.
2863 parens would get passed to the shell.
2859
2864
2860 2004-05-20 Fernando Perez <fperez@colorado.edu>
2865 2004-05-20 Fernando Perez <fperez@colorado.edu>
2861
2866
2862 * IPython/Magic.py (Magic.magic_prun): changed default profile
2867 * IPython/Magic.py (Magic.magic_prun): changed default profile
2863 sort order to 'time' (the more common profiling need).
2868 sort order to 'time' (the more common profiling need).
2864
2869
2865 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2870 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2866 so that source code shown is guaranteed in sync with the file on
2871 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
2872 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
2873 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2869 <yann.ledu-AT-noos.fr>.
2874 <yann.ledu-AT-noos.fr>.
2870
2875
2871 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2876 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2872 with a single option would not be correctly parsed. Closes
2877 with a single option would not be correctly parsed. Closes
2873 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2878 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2874 introduced in 0.6.0 (on 2004-05-06).
2879 introduced in 0.6.0 (on 2004-05-06).
2875
2880
2876 2004-05-13 *** Released version 0.6.0
2881 2004-05-13 *** Released version 0.6.0
2877
2882
2878 2004-05-13 Fernando Perez <fperez@colorado.edu>
2883 2004-05-13 Fernando Perez <fperez@colorado.edu>
2879
2884
2880 * debian/: Added debian/ directory to CVS, so that debian support
2885 * debian/: Added debian/ directory to CVS, so that debian support
2881 is publicly accessible. The debian package is maintained by Jack
2886 is publicly accessible. The debian package is maintained by Jack
2882 Moffit <jack-AT-xiph.org>.
2887 Moffit <jack-AT-xiph.org>.
2883
2888
2884 * Documentation: included the notes about an ipython-based system
2889 * Documentation: included the notes about an ipython-based system
2885 shell (the hypothetical 'pysh') into the new_design.pdf document,
2890 shell (the hypothetical 'pysh') into the new_design.pdf document,
2886 so that these ideas get distributed to users along with the
2891 so that these ideas get distributed to users along with the
2887 official documentation.
2892 official documentation.
2888
2893
2889 2004-05-10 Fernando Perez <fperez@colorado.edu>
2894 2004-05-10 Fernando Perez <fperez@colorado.edu>
2890
2895
2891 * IPython/Logger.py (Logger.create_log): fix recently introduced
2896 * IPython/Logger.py (Logger.create_log): fix recently introduced
2892 bug (misindented line) where logstart would fail when not given an
2897 bug (misindented line) where logstart would fail when not given an
2893 explicit filename.
2898 explicit filename.
2894
2899
2895 2004-05-09 Fernando Perez <fperez@colorado.edu>
2900 2004-05-09 Fernando Perez <fperez@colorado.edu>
2896
2901
2897 * IPython/Magic.py (Magic.parse_options): skip system call when
2902 * IPython/Magic.py (Magic.parse_options): skip system call when
2898 there are no options to look for. Faster, cleaner for the common
2903 there are no options to look for. Faster, cleaner for the common
2899 case.
2904 case.
2900
2905
2901 * Documentation: many updates to the manual: describing Windows
2906 * Documentation: many updates to the manual: describing Windows
2902 support better, Gnuplot updates, credits, misc small stuff. Also
2907 support better, Gnuplot updates, credits, misc small stuff. Also
2903 updated the new_design doc a bit.
2908 updated the new_design doc a bit.
2904
2909
2905 2004-05-06 *** Released version 0.6.0.rc1
2910 2004-05-06 *** Released version 0.6.0.rc1
2906
2911
2907 2004-05-06 Fernando Perez <fperez@colorado.edu>
2912 2004-05-06 Fernando Perez <fperez@colorado.edu>
2908
2913
2909 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2914 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2910 operations to use the vastly more efficient list/''.join() method.
2915 operations to use the vastly more efficient list/''.join() method.
2911 (FormattedTB.text): Fix
2916 (FormattedTB.text): Fix
2912 http://www.scipy.net/roundup/ipython/issue12 - exception source
2917 http://www.scipy.net/roundup/ipython/issue12 - exception source
2913 extract not updated after reload. Thanks to Mike Salib
2918 extract not updated after reload. Thanks to Mike Salib
2914 <msalib-AT-mit.edu> for pinning the source of the problem.
2919 <msalib-AT-mit.edu> for pinning the source of the problem.
2915 Fortunately, the solution works inside ipython and doesn't require
2920 Fortunately, the solution works inside ipython and doesn't require
2916 any changes to python proper.
2921 any changes to python proper.
2917
2922
2918 * IPython/Magic.py (Magic.parse_options): Improved to process the
2923 * IPython/Magic.py (Magic.parse_options): Improved to process the
2919 argument list as a true shell would (by actually using the
2924 argument list as a true shell would (by actually using the
2920 underlying system shell). This way, all @magics automatically get
2925 underlying system shell). This way, all @magics automatically get
2921 shell expansion for variables. Thanks to a comment by Alex
2926 shell expansion for variables. Thanks to a comment by Alex
2922 Schmolck.
2927 Schmolck.
2923
2928
2924 2004-04-04 Fernando Perez <fperez@colorado.edu>
2929 2004-04-04 Fernando Perez <fperez@colorado.edu>
2925
2930
2926 * IPython/iplib.py (InteractiveShell.interact): Added a special
2931 * IPython/iplib.py (InteractiveShell.interact): Added a special
2927 trap for a debugger quit exception, which is basically impossible
2932 trap for a debugger quit exception, which is basically impossible
2928 to handle by normal mechanisms, given what pdb does to the stack.
2933 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>.
2934 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2930
2935
2931 2004-04-03 Fernando Perez <fperez@colorado.edu>
2936 2004-04-03 Fernando Perez <fperez@colorado.edu>
2932
2937
2933 * IPython/genutils.py (Term): Standardized the names of the Term
2938 * IPython/genutils.py (Term): Standardized the names of the Term
2934 class streams to cin/cout/cerr, following C++ naming conventions
2939 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
2940 (I can't use in/out/err because 'in' is not a valid attribute
2936 name).
2941 name).
2937
2942
2938 * IPython/iplib.py (InteractiveShell.interact): don't increment
2943 * IPython/iplib.py (InteractiveShell.interact): don't increment
2939 the prompt if there's no user input. By Daniel 'Dang' Griffith
2944 the prompt if there's no user input. By Daniel 'Dang' Griffith
2940 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2945 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2941 Francois Pinard.
2946 Francois Pinard.
2942
2947
2943 2004-04-02 Fernando Perez <fperez@colorado.edu>
2948 2004-04-02 Fernando Perez <fperez@colorado.edu>
2944
2949
2945 * IPython/genutils.py (Stream.__init__): Modified to survive at
2950 * IPython/genutils.py (Stream.__init__): Modified to survive at
2946 least importing in contexts where stdin/out/err aren't true file
2951 least importing in contexts where stdin/out/err aren't true file
2947 objects, such as PyCrust (they lack fileno() and mode). However,
2952 objects, such as PyCrust (they lack fileno() and mode). However,
2948 the recovery facilities which rely on these things existing will
2953 the recovery facilities which rely on these things existing will
2949 not work.
2954 not work.
2950
2955
2951 2004-04-01 Fernando Perez <fperez@colorado.edu>
2956 2004-04-01 Fernando Perez <fperez@colorado.edu>
2952
2957
2953 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2958 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2954 use the new getoutputerror() function, so it properly
2959 use the new getoutputerror() function, so it properly
2955 distinguishes stdout/err.
2960 distinguishes stdout/err.
2956
2961
2957 * IPython/genutils.py (getoutputerror): added a function to
2962 * IPython/genutils.py (getoutputerror): added a function to
2958 capture separately the standard output and error of a command.
2963 capture separately the standard output and error of a command.
2959 After a comment from dang on the mailing lists. This code is
2964 After a comment from dang on the mailing lists. This code is
2960 basically a modified version of commands.getstatusoutput(), from
2965 basically a modified version of commands.getstatusoutput(), from
2961 the standard library.
2966 the standard library.
2962
2967
2963 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2968 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2964 '!!' as a special syntax (shorthand) to access @sx.
2969 '!!' as a special syntax (shorthand) to access @sx.
2965
2970
2966 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2971 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2967 command and return its output as a list split on '\n'.
2972 command and return its output as a list split on '\n'.
2968
2973
2969 2004-03-31 Fernando Perez <fperez@colorado.edu>
2974 2004-03-31 Fernando Perez <fperez@colorado.edu>
2970
2975
2971 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2976 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2972 method to dictionaries used as FakeModule instances if they lack
2977 method to dictionaries used as FakeModule instances if they lack
2973 it. At least pydoc in python2.3 breaks for runtime-defined
2978 it. At least pydoc in python2.3 breaks for runtime-defined
2974 functions without this hack. At some point I need to _really_
2979 functions without this hack. At some point I need to _really_
2975 understand what FakeModule is doing, because it's a gross hack.
2980 understand what FakeModule is doing, because it's a gross hack.
2976 But it solves Arnd's problem for now...
2981 But it solves Arnd's problem for now...
2977
2982
2978 2004-02-27 Fernando Perez <fperez@colorado.edu>
2983 2004-02-27 Fernando Perez <fperez@colorado.edu>
2979
2984
2980 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2985 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2981 mode would behave erratically. Also increased the number of
2986 mode would behave erratically. Also increased the number of
2982 possible logs in rotate mod to 999. Thanks to Rod Holland
2987 possible logs in rotate mod to 999. Thanks to Rod Holland
2983 <rhh@StructureLABS.com> for the report and fixes.
2988 <rhh@StructureLABS.com> for the report and fixes.
2984
2989
2985 2004-02-26 Fernando Perez <fperez@colorado.edu>
2990 2004-02-26 Fernando Perez <fperez@colorado.edu>
2986
2991
2987 * IPython/genutils.py (page): Check that the curses module really
2992 * IPython/genutils.py (page): Check that the curses module really
2988 has the initscr attribute before trying to use it. For some
2993 has the initscr attribute before trying to use it. For some
2989 reason, the Solaris curses module is missing this. I think this
2994 reason, the Solaris curses module is missing this. I think this
2990 should be considered a Solaris python bug, but I'm not sure.
2995 should be considered a Solaris python bug, but I'm not sure.
2991
2996
2992 2004-01-17 Fernando Perez <fperez@colorado.edu>
2997 2004-01-17 Fernando Perez <fperez@colorado.edu>
2993
2998
2994 * IPython/genutils.py (Stream.__init__): Changes to try to make
2999 * IPython/genutils.py (Stream.__init__): Changes to try to make
2995 ipython robust against stdin/out/err being closed by the user.
3000 ipython robust against stdin/out/err being closed by the user.
2996 This is 'user error' (and blocks a normal python session, at least
3001 This is 'user error' (and blocks a normal python session, at least
2997 the stdout case). However, Ipython should be able to survive such
3002 the stdout case). However, Ipython should be able to survive such
2998 instances of abuse as gracefully as possible. To simplify the
3003 instances of abuse as gracefully as possible. To simplify the
2999 coding and maintain compatibility with Gary Bishop's Term
3004 coding and maintain compatibility with Gary Bishop's Term
3000 contributions, I've made use of classmethods for this. I think
3005 contributions, I've made use of classmethods for this. I think
3001 this introduces a dependency on python 2.2.
3006 this introduces a dependency on python 2.2.
3002
3007
3003 2004-01-13 Fernando Perez <fperez@colorado.edu>
3008 2004-01-13 Fernando Perez <fperez@colorado.edu>
3004
3009
3005 * IPython/numutils.py (exp_safe): simplified the code a bit and
3010 * IPython/numutils.py (exp_safe): simplified the code a bit and
3006 removed the need for importing the kinds module altogether.
3011 removed the need for importing the kinds module altogether.
3007
3012
3008 2004-01-06 Fernando Perez <fperez@colorado.edu>
3013 2004-01-06 Fernando Perez <fperez@colorado.edu>
3009
3014
3010 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3015 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3011 a magic function instead, after some community feedback. No
3016 a magic function instead, after some community feedback. No
3012 special syntax will exist for it, but its name is deliberately
3017 special syntax will exist for it, but its name is deliberately
3013 very short.
3018 very short.
3014
3019
3015 2003-12-20 Fernando Perez <fperez@colorado.edu>
3020 2003-12-20 Fernando Perez <fperez@colorado.edu>
3016
3021
3017 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3022 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3018 new functionality, to automagically assign the result of a shell
3023 new functionality, to automagically assign the result of a shell
3019 command to a variable. I'll solicit some community feedback on
3024 command to a variable. I'll solicit some community feedback on
3020 this before making it permanent.
3025 this before making it permanent.
3021
3026
3022 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3027 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3023 requested about callables for which inspect couldn't obtain a
3028 requested about callables for which inspect couldn't obtain a
3024 proper argspec. Thanks to a crash report sent by Etienne
3029 proper argspec. Thanks to a crash report sent by Etienne
3025 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3030 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3026
3031
3027 2003-12-09 Fernando Perez <fperez@colorado.edu>
3032 2003-12-09 Fernando Perez <fperez@colorado.edu>
3028
3033
3029 * IPython/genutils.py (page): patch for the pager to work across
3034 * IPython/genutils.py (page): patch for the pager to work across
3030 various versions of Windows. By Gary Bishop.
3035 various versions of Windows. By Gary Bishop.
3031
3036
3032 2003-12-04 Fernando Perez <fperez@colorado.edu>
3037 2003-12-04 Fernando Perez <fperez@colorado.edu>
3033
3038
3034 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3039 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3035 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3040 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
3041 While I tested this and it looks ok, there may still be corner
3037 cases I've missed.
3042 cases I've missed.
3038
3043
3039 2003-12-01 Fernando Perez <fperez@colorado.edu>
3044 2003-12-01 Fernando Perez <fperez@colorado.edu>
3040
3045
3041 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3046 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3042 where a line like 'p,q=1,2' would fail because the automagic
3047 where a line like 'p,q=1,2' would fail because the automagic
3043 system would be triggered for @p.
3048 system would be triggered for @p.
3044
3049
3045 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3050 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3046 cleanups, code unmodified.
3051 cleanups, code unmodified.
3047
3052
3048 * IPython/genutils.py (Term): added a class for IPython to handle
3053 * 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
3054 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,
3055 having this allows modifications to be made for some platforms,
3051 such as handling color escapes under Windows. All of this code
3056 such as handling color escapes under Windows. All of this code
3052 was contributed by Gary Bishop, with minor modifications by me.
3057 was contributed by Gary Bishop, with minor modifications by me.
3053 The actual changes affect many files.
3058 The actual changes affect many files.
3054
3059
3055 2003-11-30 Fernando Perez <fperez@colorado.edu>
3060 2003-11-30 Fernando Perez <fperez@colorado.edu>
3056
3061
3057 * IPython/iplib.py (file_matches): new completion code, courtesy
3062 * IPython/iplib.py (file_matches): new completion code, courtesy
3058 of Jeff Collins. This enables filename completion again under
3063 of Jeff Collins. This enables filename completion again under
3059 python 2.3, which disabled it at the C level.
3064 python 2.3, which disabled it at the C level.
3060
3065
3061 2003-11-11 Fernando Perez <fperez@colorado.edu>
3066 2003-11-11 Fernando Perez <fperez@colorado.edu>
3062
3067
3063 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3068 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3064 for Numeric.array(map(...)), but often convenient.
3069 for Numeric.array(map(...)), but often convenient.
3065
3070
3066 2003-11-05 Fernando Perez <fperez@colorado.edu>
3071 2003-11-05 Fernando Perez <fperez@colorado.edu>
3067
3072
3068 * IPython/numutils.py (frange): Changed a call from int() to
3073 * IPython/numutils.py (frange): Changed a call from int() to
3069 int(round()) to prevent a problem reported with arange() in the
3074 int(round()) to prevent a problem reported with arange() in the
3070 numpy list.
3075 numpy list.
3071
3076
3072 2003-10-06 Fernando Perez <fperez@colorado.edu>
3077 2003-10-06 Fernando Perez <fperez@colorado.edu>
3073
3078
3074 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3079 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3075 prevent crashes if sys lacks an argv attribute (it happens with
3080 prevent crashes if sys lacks an argv attribute (it happens with
3076 embedded interpreters which build a bare-bones sys module).
3081 embedded interpreters which build a bare-bones sys module).
3077 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3082 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3078
3083
3079 2003-09-24 Fernando Perez <fperez@colorado.edu>
3084 2003-09-24 Fernando Perez <fperez@colorado.edu>
3080
3085
3081 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3086 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3082 to protect against poorly written user objects where __getattr__
3087 to protect against poorly written user objects where __getattr__
3083 raises exceptions other than AttributeError. Thanks to a bug
3088 raises exceptions other than AttributeError. Thanks to a bug
3084 report by Oliver Sander <osander-AT-gmx.de>.
3089 report by Oliver Sander <osander-AT-gmx.de>.
3085
3090
3086 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3091 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3087 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3092 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3088
3093
3089 2003-09-09 Fernando Perez <fperez@colorado.edu>
3094 2003-09-09 Fernando Perez <fperez@colorado.edu>
3090
3095
3091 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3096 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3092 unpacking a list whith a callable as first element would
3097 unpacking a list whith a callable as first element would
3093 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3098 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3094 Collins.
3099 Collins.
3095
3100
3096 2003-08-25 *** Released version 0.5.0
3101 2003-08-25 *** Released version 0.5.0
3097
3102
3098 2003-08-22 Fernando Perez <fperez@colorado.edu>
3103 2003-08-22 Fernando Perez <fperez@colorado.edu>
3099
3104
3100 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3105 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3101 improperly defined user exceptions. Thanks to feedback from Mark
3106 improperly defined user exceptions. Thanks to feedback from Mark
3102 Russell <mrussell-AT-verio.net>.
3107 Russell <mrussell-AT-verio.net>.
3103
3108
3104 2003-08-20 Fernando Perez <fperez@colorado.edu>
3109 2003-08-20 Fernando Perez <fperez@colorado.edu>
3105
3110
3106 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3111 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3107 printing so that it would print multi-line string forms starting
3112 printing so that it would print multi-line string forms starting
3108 with a new line. This way the formatting is better respected for
3113 with a new line. This way the formatting is better respected for
3109 objects which work hard to make nice string forms.
3114 objects which work hard to make nice string forms.
3110
3115
3111 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3116 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3112 autocall would overtake data access for objects with both
3117 autocall would overtake data access for objects with both
3113 __getitem__ and __call__.
3118 __getitem__ and __call__.
3114
3119
3115 2003-08-19 *** Released version 0.5.0-rc1
3120 2003-08-19 *** Released version 0.5.0-rc1
3116
3121
3117 2003-08-19 Fernando Perez <fperez@colorado.edu>
3122 2003-08-19 Fernando Perez <fperez@colorado.edu>
3118
3123
3119 * IPython/deep_reload.py (load_tail): single tiny change here
3124 * IPython/deep_reload.py (load_tail): single tiny change here
3120 seems to fix the long-standing bug of dreload() failing to work
3125 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
3126 for dotted names. But this module is pretty tricky, so I may have
3122 missed some subtlety. Needs more testing!.
3127 missed some subtlety. Needs more testing!.
3123
3128
3124 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3129 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3125 exceptions which have badly implemented __str__ methods.
3130 exceptions which have badly implemented __str__ methods.
3126 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3131 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3127 which I've been getting reports about from Python 2.3 users. I
3132 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
3133 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
3134 either write a cleaner workaround or file a bug report if
3130 necessary.
3135 necessary.
3131
3136
3132 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3137 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3133 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3138 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3134 a bug report by Tjabo Kloppenburg.
3139 a bug report by Tjabo Kloppenburg.
3135
3140
3136 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3141 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3137 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3142 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3138 seems rather unstable. Thanks to a bug report by Tjabo
3143 seems rather unstable. Thanks to a bug report by Tjabo
3139 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3144 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3140
3145
3141 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3146 * 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
3147 this out soon because of the critical fixes in the inner loop for
3143 generators.
3148 generators.
3144
3149
3145 * IPython/Magic.py (Magic.getargspec): removed. This (and
3150 * IPython/Magic.py (Magic.getargspec): removed. This (and
3146 _get_def) have been obsoleted by OInspect for a long time, I
3151 _get_def) have been obsoleted by OInspect for a long time, I
3147 hadn't noticed that they were dead code.
3152 hadn't noticed that they were dead code.
3148 (Magic._ofind): restored _ofind functionality for a few literals
3153 (Magic._ofind): restored _ofind functionality for a few literals
3149 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3154 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3150 for things like "hello".capitalize?, since that would require a
3155 for things like "hello".capitalize?, since that would require a
3151 potentially dangerous eval() again.
3156 potentially dangerous eval() again.
3152
3157
3153 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3158 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3154 logic a bit more to clean up the escapes handling and minimize the
3159 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
3160 use of _ofind to only necessary cases. The interactive 'feel' of
3156 IPython should have improved quite a bit with the changes in
3161 IPython should have improved quite a bit with the changes in
3157 _prefilter and _ofind (besides being far safer than before).
3162 _prefilter and _ofind (besides being far safer than before).
3158
3163
3159 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3164 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3160 obscure, never reported). Edit would fail to find the object to
3165 obscure, never reported). Edit would fail to find the object to
3161 edit under some circumstances.
3166 edit under some circumstances.
3162 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3167 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3163 which were causing double-calling of generators. Those eval calls
3168 which were causing double-calling of generators. Those eval calls
3164 were _very_ dangerous, since code with side effects could be
3169 were _very_ dangerous, since code with side effects could be
3165 triggered. As they say, 'eval is evil'... These were the
3170 triggered. As they say, 'eval is evil'... These were the
3166 nastiest evals in IPython. Besides, _ofind is now far simpler,
3171 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
3172 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
3173 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
3174 seen lately with Python 2.3 might be taken care of. That will
3170 need more testing.
3175 need more testing.
3171
3176
3172 2003-08-17 Fernando Perez <fperez@colorado.edu>
3177 2003-08-17 Fernando Perez <fperez@colorado.edu>
3173
3178
3174 * IPython/iplib.py (InteractiveShell._prefilter): significant
3179 * IPython/iplib.py (InteractiveShell._prefilter): significant
3175 simplifications to the logic for handling user escapes. Faster
3180 simplifications to the logic for handling user escapes. Faster
3176 and simpler code.
3181 and simpler code.
3177
3182
3178 2003-08-14 Fernando Perez <fperez@colorado.edu>
3183 2003-08-14 Fernando Perez <fperez@colorado.edu>
3179
3184
3180 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3185 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3181 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3186 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
3187 but it should be quite a bit faster. And the recursive version
3183 generated O(log N) intermediate storage for all rank>1 arrays,
3188 generated O(log N) intermediate storage for all rank>1 arrays,
3184 even if they were contiguous.
3189 even if they were contiguous.
3185 (l1norm): Added this function.
3190 (l1norm): Added this function.
3186 (norm): Added this function for arbitrary norms (including
3191 (norm): Added this function for arbitrary norms (including
3187 l-infinity). l1 and l2 are still special cases for convenience
3192 l-infinity). l1 and l2 are still special cases for convenience
3188 and speed.
3193 and speed.
3189
3194
3190 2003-08-03 Fernando Perez <fperez@colorado.edu>
3195 2003-08-03 Fernando Perez <fperez@colorado.edu>
3191
3196
3192 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3197 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3193 exceptions, which now raise PendingDeprecationWarnings in Python
3198 exceptions, which now raise PendingDeprecationWarnings in Python
3194 2.3. There were some in Magic and some in Gnuplot2.
3199 2.3. There were some in Magic and some in Gnuplot2.
3195
3200
3196 2003-06-30 Fernando Perez <fperez@colorado.edu>
3201 2003-06-30 Fernando Perez <fperez@colorado.edu>
3197
3202
3198 * IPython/genutils.py (page): modified to call curses only for
3203 * IPython/genutils.py (page): modified to call curses only for
3199 terminals where TERM=='xterm'. After problems under many other
3204 terminals where TERM=='xterm'. After problems under many other
3200 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3205 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3201
3206
3202 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3207 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3203 would be triggered when readline was absent. This was just an old
3208 would be triggered when readline was absent. This was just an old
3204 debugging statement I'd forgotten to take out.
3209 debugging statement I'd forgotten to take out.
3205
3210
3206 2003-06-20 Fernando Perez <fperez@colorado.edu>
3211 2003-06-20 Fernando Perez <fperez@colorado.edu>
3207
3212
3208 * IPython/genutils.py (clock): modified to return only user time
3213 * IPython/genutils.py (clock): modified to return only user time
3209 (not counting system time), after a discussion on scipy. While
3214 (not counting system time), after a discussion on scipy. While
3210 system time may be a useful quantity occasionally, it may much
3215 system time may be a useful quantity occasionally, it may much
3211 more easily be skewed by occasional swapping or other similar
3216 more easily be skewed by occasional swapping or other similar
3212 activity.
3217 activity.
3213
3218
3214 2003-06-05 Fernando Perez <fperez@colorado.edu>
3219 2003-06-05 Fernando Perez <fperez@colorado.edu>
3215
3220
3216 * IPython/numutils.py (identity): new function, for building
3221 * IPython/numutils.py (identity): new function, for building
3217 arbitrary rank Kronecker deltas (mostly backwards compatible with
3222 arbitrary rank Kronecker deltas (mostly backwards compatible with
3218 Numeric.identity)
3223 Numeric.identity)
3219
3224
3220 2003-06-03 Fernando Perez <fperez@colorado.edu>
3225 2003-06-03 Fernando Perez <fperez@colorado.edu>
3221
3226
3222 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3227 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3223 arguments passed to magics with spaces, to allow trailing '\' to
3228 arguments passed to magics with spaces, to allow trailing '\' to
3224 work normally (mainly for Windows users).
3229 work normally (mainly for Windows users).
3225
3230
3226 2003-05-29 Fernando Perez <fperez@colorado.edu>
3231 2003-05-29 Fernando Perez <fperez@colorado.edu>
3227
3232
3228 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3233 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3229 instead of pydoc.help. This fixes a bizarre behavior where
3234 instead of pydoc.help. This fixes a bizarre behavior where
3230 printing '%s' % locals() would trigger the help system. Now
3235 printing '%s' % locals() would trigger the help system. Now
3231 ipython behaves like normal python does.
3236 ipython behaves like normal python does.
3232
3237
3233 Note that if one does 'from pydoc import help', the bizarre
3238 Note that if one does 'from pydoc import help', the bizarre
3234 behavior returns, but this will also happen in normal python, so
3239 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
3240 it's not an ipython bug anymore (it has to do with how pydoc.help
3236 is implemented).
3241 is implemented).
3237
3242
3238 2003-05-22 Fernando Perez <fperez@colorado.edu>
3243 2003-05-22 Fernando Perez <fperez@colorado.edu>
3239
3244
3240 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3245 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3241 return [] instead of None when nothing matches, also match to end
3246 return [] instead of None when nothing matches, also match to end
3242 of line. Patch by Gary Bishop.
3247 of line. Patch by Gary Bishop.
3243
3248
3244 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3249 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3245 protection as before, for files passed on the command line. This
3250 protection as before, for files passed on the command line. This
3246 prevents the CrashHandler from kicking in if user files call into
3251 prevents the CrashHandler from kicking in if user files call into
3247 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3252 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>
3253 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3249
3254
3250 2003-05-20 *** Released version 0.4.0
3255 2003-05-20 *** Released version 0.4.0
3251
3256
3252 2003-05-20 Fernando Perez <fperez@colorado.edu>
3257 2003-05-20 Fernando Perez <fperez@colorado.edu>
3253
3258
3254 * setup.py: added support for manpages. It's a bit hackish b/c of
3259 * 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
3260 a bug in the way the bdist_rpm distutils target handles gzipped
3256 manpages, but it works. After a patch by Jack.
3261 manpages, but it works. After a patch by Jack.
3257
3262
3258 2003-05-19 Fernando Perez <fperez@colorado.edu>
3263 2003-05-19 Fernando Perez <fperez@colorado.edu>
3259
3264
3260 * IPython/numutils.py: added a mockup of the kinds module, since
3265 * IPython/numutils.py: added a mockup of the kinds module, since
3261 it was recently removed from Numeric. This way, numutils will
3266 it was recently removed from Numeric. This way, numutils will
3262 work for all users even if they are missing kinds.
3267 work for all users even if they are missing kinds.
3263
3268
3264 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3269 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3265 failure, which can occur with SWIG-wrapped extensions. After a
3270 failure, which can occur with SWIG-wrapped extensions. After a
3266 crash report from Prabhu.
3271 crash report from Prabhu.
3267
3272
3268 2003-05-16 Fernando Perez <fperez@colorado.edu>
3273 2003-05-16 Fernando Perez <fperez@colorado.edu>
3269
3274
3270 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3275 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3271 protect ipython from user code which may call directly
3276 protect ipython from user code which may call directly
3272 sys.excepthook (this looks like an ipython crash to the user, even
3277 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>.
3278 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
3279 This is especially important to help users of WxWindows, but may
3275 also be useful in other cases.
3280 also be useful in other cases.
3276
3281
3277 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3282 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3278 an optional tb_offset to be specified, and to preserve exception
3283 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>.
3284 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3280
3285
3281 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3286 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3282
3287
3283 2003-05-15 Fernando Perez <fperez@colorado.edu>
3288 2003-05-15 Fernando Perez <fperez@colorado.edu>
3284
3289
3285 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3290 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3286 installing for a new user under Windows.
3291 installing for a new user under Windows.
3287
3292
3288 2003-05-12 Fernando Perez <fperez@colorado.edu>
3293 2003-05-12 Fernando Perez <fperez@colorado.edu>
3289
3294
3290 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3295 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3291 handler for Emacs comint-based lines. Currently it doesn't do
3296 handler for Emacs comint-based lines. Currently it doesn't do
3292 much (but importantly, it doesn't update the history cache). In
3297 much (but importantly, it doesn't update the history cache). In
3293 the future it may be expanded if Alex needs more functionality
3298 the future it may be expanded if Alex needs more functionality
3294 there.
3299 there.
3295
3300
3296 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3301 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3297 info to crash reports.
3302 info to crash reports.
3298
3303
3299 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3304 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3300 just like Python's -c. Also fixed crash with invalid -color
3305 just like Python's -c. Also fixed crash with invalid -color
3301 option value at startup. Thanks to Will French
3306 option value at startup. Thanks to Will French
3302 <wfrench-AT-bestweb.net> for the bug report.
3307 <wfrench-AT-bestweb.net> for the bug report.
3303
3308
3304 2003-05-09 Fernando Perez <fperez@colorado.edu>
3309 2003-05-09 Fernando Perez <fperez@colorado.edu>
3305
3310
3306 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3311 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3307 to EvalDict (it's a mapping, after all) and simplified its code
3312 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
3313 quite a bit, after a nice discussion on c.l.py where Gustavo
3309 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3314 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3310
3315
3311 2003-04-30 Fernando Perez <fperez@colorado.edu>
3316 2003-04-30 Fernando Perez <fperez@colorado.edu>
3312
3317
3313 * IPython/genutils.py (timings_out): modified it to reduce its
3318 * IPython/genutils.py (timings_out): modified it to reduce its
3314 overhead in the common reps==1 case.
3319 overhead in the common reps==1 case.
3315
3320
3316 2003-04-29 Fernando Perez <fperez@colorado.edu>
3321 2003-04-29 Fernando Perez <fperez@colorado.edu>
3317
3322
3318 * IPython/genutils.py (timings_out): Modified to use the resource
3323 * IPython/genutils.py (timings_out): Modified to use the resource
3319 module, which avoids the wraparound problems of time.clock().
3324 module, which avoids the wraparound problems of time.clock().
3320
3325
3321 2003-04-17 *** Released version 0.2.15pre4
3326 2003-04-17 *** Released version 0.2.15pre4
3322
3327
3323 2003-04-17 Fernando Perez <fperez@colorado.edu>
3328 2003-04-17 Fernando Perez <fperez@colorado.edu>
3324
3329
3325 * setup.py (scriptfiles): Split windows-specific stuff over to a
3330 * setup.py (scriptfiles): Split windows-specific stuff over to a
3326 separate file, in an attempt to have a Windows GUI installer.
3331 separate file, in an attempt to have a Windows GUI installer.
3327 That didn't work, but part of the groundwork is done.
3332 That didn't work, but part of the groundwork is done.
3328
3333
3329 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3334 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3330 indent/unindent with 4 spaces. Particularly useful in combination
3335 indent/unindent with 4 spaces. Particularly useful in combination
3331 with the new auto-indent option.
3336 with the new auto-indent option.
3332
3337
3333 2003-04-16 Fernando Perez <fperez@colorado.edu>
3338 2003-04-16 Fernando Perez <fperez@colorado.edu>
3334
3339
3335 * IPython/Magic.py: various replacements of self.rc for
3340 * IPython/Magic.py: various replacements of self.rc for
3336 self.shell.rc. A lot more remains to be done to fully disentangle
3341 self.shell.rc. A lot more remains to be done to fully disentangle
3337 this class from the main Shell class.
3342 this class from the main Shell class.
3338
3343
3339 * IPython/GnuplotRuntime.py: added checks for mouse support so
3344 * IPython/GnuplotRuntime.py: added checks for mouse support so
3340 that we don't try to enable it if the current gnuplot doesn't
3345 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
3346 really support it. Also added checks so that we don't try to
3342 enable persist under Windows (where Gnuplot doesn't recognize the
3347 enable persist under Windows (where Gnuplot doesn't recognize the
3343 option).
3348 option).
3344
3349
3345 * IPython/iplib.py (InteractiveShell.interact): Added optional
3350 * IPython/iplib.py (InteractiveShell.interact): Added optional
3346 auto-indenting code, after a patch by King C. Shu
3351 auto-indenting code, after a patch by King C. Shu
3347 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3352 <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
3353 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.
3354 how to make that part go well, it will become on by default.
3350
3355
3351 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3356 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3352 crash ipython if there was an unmatched '%' in the user's prompt
3357 crash ipython if there was an unmatched '%' in the user's prompt
3353 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3358 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3354
3359
3355 * IPython/iplib.py (InteractiveShell.interact): removed the
3360 * IPython/iplib.py (InteractiveShell.interact): removed the
3356 ability to ask the user whether he wants to crash or not at the
3361 ability to ask the user whether he wants to crash or not at the
3357 'last line' exception handler. Calling functions at that point
3362 'last line' exception handler. Calling functions at that point
3358 changes the stack, and the error reports would have incorrect
3363 changes the stack, and the error reports would have incorrect
3359 tracebacks.
3364 tracebacks.
3360
3365
3361 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3366 * 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
3367 pass through a peger a pretty-printed form of any object. After a
3363 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3368 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3364
3369
3365 2003-04-14 Fernando Perez <fperez@colorado.edu>
3370 2003-04-14 Fernando Perez <fperez@colorado.edu>
3366
3371
3367 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3372 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3368 all files in ~ would be modified at first install (instead of
3373 all files in ~ would be modified at first install (instead of
3369 ~/.ipython). This could be potentially disastrous, as the
3374 ~/.ipython). This could be potentially disastrous, as the
3370 modification (make line-endings native) could damage binary files.
3375 modification (make line-endings native) could damage binary files.
3371
3376
3372 2003-04-10 Fernando Perez <fperez@colorado.edu>
3377 2003-04-10 Fernando Perez <fperez@colorado.edu>
3373
3378
3374 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3379 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3375 handle only lines which are invalid python. This now means that
3380 handle only lines which are invalid python. This now means that
3376 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3381 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3377 for the bug report.
3382 for the bug report.
3378
3383
3379 2003-04-01 Fernando Perez <fperez@colorado.edu>
3384 2003-04-01 Fernando Perez <fperez@colorado.edu>
3380
3385
3381 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3386 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3382 where failing to set sys.last_traceback would crash pdb.pm().
3387 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
3388 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3384 report.
3389 report.
3385
3390
3386 2003-03-25 Fernando Perez <fperez@colorado.edu>
3391 2003-03-25 Fernando Perez <fperez@colorado.edu>
3387
3392
3388 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3393 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3389 before printing it (it had a lot of spurious blank lines at the
3394 before printing it (it had a lot of spurious blank lines at the
3390 end).
3395 end).
3391
3396
3392 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3397 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3393 output would be sent 21 times! Obviously people don't use this
3398 output would be sent 21 times! Obviously people don't use this
3394 too often, or I would have heard about it.
3399 too often, or I would have heard about it.
3395
3400
3396 2003-03-24 Fernando Perez <fperez@colorado.edu>
3401 2003-03-24 Fernando Perez <fperez@colorado.edu>
3397
3402
3398 * setup.py (scriptfiles): renamed the data_files parameter from
3403 * setup.py (scriptfiles): renamed the data_files parameter from
3399 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3404 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3400 for the patch.
3405 for the patch.
3401
3406
3402 2003-03-20 Fernando Perez <fperez@colorado.edu>
3407 2003-03-20 Fernando Perez <fperez@colorado.edu>
3403
3408
3404 * IPython/genutils.py (error): added error() and fatal()
3409 * IPython/genutils.py (error): added error() and fatal()
3405 functions.
3410 functions.
3406
3411
3407 2003-03-18 *** Released version 0.2.15pre3
3412 2003-03-18 *** Released version 0.2.15pre3
3408
3413
3409 2003-03-18 Fernando Perez <fperez@colorado.edu>
3414 2003-03-18 Fernando Perez <fperez@colorado.edu>
3410
3415
3411 * setupext/install_data_ext.py
3416 * setupext/install_data_ext.py
3412 (install_data_ext.initialize_options): Class contributed by Jack
3417 (install_data_ext.initialize_options): Class contributed by Jack
3413 Moffit for fixing the old distutils hack. He is sending this to
3418 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
3419 the distutils folks so in the future we may not need it as a
3415 private fix.
3420 private fix.
3416
3421
3417 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3422 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3418 changes for Debian packaging. See his patch for full details.
3423 changes for Debian packaging. See his patch for full details.
3419 The old distutils hack of making the ipythonrc* files carry a
3424 The old distutils hack of making the ipythonrc* files carry a
3420 bogus .py extension is gone, at last. Examples were moved to a
3425 bogus .py extension is gone, at last. Examples were moved to a
3421 separate subdir under doc/, and the separate executable scripts
3426 separate subdir under doc/, and the separate executable scripts
3422 now live in their own directory. Overall a great cleanup. The
3427 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
3428 manual was updated to use the new files, and setup.py has been
3424 fixed for this setup.
3429 fixed for this setup.
3425
3430
3426 * IPython/PyColorize.py (Parser.usage): made non-executable and
3431 * IPython/PyColorize.py (Parser.usage): made non-executable and
3427 created a pycolor wrapper around it to be included as a script.
3432 created a pycolor wrapper around it to be included as a script.
3428
3433
3429 2003-03-12 *** Released version 0.2.15pre2
3434 2003-03-12 *** Released version 0.2.15pre2
3430
3435
3431 2003-03-12 Fernando Perez <fperez@colorado.edu>
3436 2003-03-12 Fernando Perez <fperez@colorado.edu>
3432
3437
3433 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3438 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3434 long-standing problem with garbage characters in some terminals.
3439 long-standing problem with garbage characters in some terminals.
3435 The issue was really that the \001 and \002 escapes must _only_ be
3440 The issue was really that the \001 and \002 escapes must _only_ be
3436 passed to input prompts (which call readline), but _never_ to
3441 passed to input prompts (which call readline), but _never_ to
3437 normal text to be printed on screen. I changed ColorANSI to have
3442 normal text to be printed on screen. I changed ColorANSI to have
3438 two classes: TermColors and InputTermColors, each with the
3443 two classes: TermColors and InputTermColors, each with the
3439 appropriate escapes for input prompts or normal text. The code in
3444 appropriate escapes for input prompts or normal text. The code in
3440 Prompts.py got slightly more complicated, but this very old and
3445 Prompts.py got slightly more complicated, but this very old and
3441 annoying bug is finally fixed.
3446 annoying bug is finally fixed.
3442
3447
3443 All the credit for nailing down the real origin of this problem
3448 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>.
3449 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.
3450 *Many* thanks to him for spending quite a bit of effort on this.
3446
3451
3447 2003-03-05 *** Released version 0.2.15pre1
3452 2003-03-05 *** Released version 0.2.15pre1
3448
3453
3449 2003-03-03 Fernando Perez <fperez@colorado.edu>
3454 2003-03-03 Fernando Perez <fperez@colorado.edu>
3450
3455
3451 * IPython/FakeModule.py: Moved the former _FakeModule to a
3456 * IPython/FakeModule.py: Moved the former _FakeModule to a
3452 separate file, because it's also needed by Magic (to fix a similar
3457 separate file, because it's also needed by Magic (to fix a similar
3453 pickle-related issue in @run).
3458 pickle-related issue in @run).
3454
3459
3455 2003-03-02 Fernando Perez <fperez@colorado.edu>
3460 2003-03-02 Fernando Perez <fperez@colorado.edu>
3456
3461
3457 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3462 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3458 the autocall option at runtime.
3463 the autocall option at runtime.
3459 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3464 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3460 across Magic.py to start separating Magic from InteractiveShell.
3465 across Magic.py to start separating Magic from InteractiveShell.
3461 (Magic._ofind): Fixed to return proper namespace for dotted
3466 (Magic._ofind): Fixed to return proper namespace for dotted
3462 names. Before, a dotted name would always return 'not currently
3467 names. Before, a dotted name would always return 'not currently
3463 defined', because it would find the 'parent'. s.x would be found,
3468 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.
3469 but since 'x' isn't defined by itself, it would get confused.
3465 (Magic.magic_run): Fixed pickling problems reported by Ralf
3470 (Magic.magic_run): Fixed pickling problems reported by Ralf
3466 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3471 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3467 that I'd used when Mike Heeter reported similar issues at the
3472 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
3473 top-level, but now for @run. It boils down to injecting the
3469 namespace where code is being executed with something that looks
3474 namespace where code is being executed with something that looks
3470 enough like a module to fool pickle.dump(). Since a pickle stores
3475 enough like a module to fool pickle.dump(). Since a pickle stores
3471 a named reference to the importing module, we need this for
3476 a named reference to the importing module, we need this for
3472 pickles to save something sensible.
3477 pickles to save something sensible.
3473
3478
3474 * IPython/ipmaker.py (make_IPython): added an autocall option.
3479 * IPython/ipmaker.py (make_IPython): added an autocall option.
3475
3480
3476 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3481 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3477 the auto-eval code. Now autocalling is an option, and the code is
3482 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.
3483 also vastly safer. There is no more eval() involved at all.
3479
3484
3480 2003-03-01 Fernando Perez <fperez@colorado.edu>
3485 2003-03-01 Fernando Perez <fperez@colorado.edu>
3481
3486
3482 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3487 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3483 dict with named keys instead of a tuple.
3488 dict with named keys instead of a tuple.
3484
3489
3485 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3490 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3486
3491
3487 * setup.py (make_shortcut): Fixed message about directories
3492 * setup.py (make_shortcut): Fixed message about directories
3488 created during Windows installation (the directories were ok, just
3493 created during Windows installation (the directories were ok, just
3489 the printed message was misleading). Thanks to Chris Liechti
3494 the printed message was misleading). Thanks to Chris Liechti
3490 <cliechti-AT-gmx.net> for the heads up.
3495 <cliechti-AT-gmx.net> for the heads up.
3491
3496
3492 2003-02-21 Fernando Perez <fperez@colorado.edu>
3497 2003-02-21 Fernando Perez <fperez@colorado.edu>
3493
3498
3494 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3499 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3495 of ValueError exception when checking for auto-execution. This
3500 of ValueError exception when checking for auto-execution. This
3496 one is raised by things like Numeric arrays arr.flat when the
3501 one is raised by things like Numeric arrays arr.flat when the
3497 array is non-contiguous.
3502 array is non-contiguous.
3498
3503
3499 2003-01-31 Fernando Perez <fperez@colorado.edu>
3504 2003-01-31 Fernando Perez <fperez@colorado.edu>
3500
3505
3501 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3506 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3502 not return any value at all (even though the command would get
3507 not return any value at all (even though the command would get
3503 executed).
3508 executed).
3504 (xsys): Flush stdout right after printing the command to ensure
3509 (xsys): Flush stdout right after printing the command to ensure
3505 proper ordering of commands and command output in the total
3510 proper ordering of commands and command output in the total
3506 output.
3511 output.
3507 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3512 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3508 system/getoutput as defaults. The old ones are kept for
3513 system/getoutput as defaults. The old ones are kept for
3509 compatibility reasons, so no code which uses this library needs
3514 compatibility reasons, so no code which uses this library needs
3510 changing.
3515 changing.
3511
3516
3512 2003-01-27 *** Released version 0.2.14
3517 2003-01-27 *** Released version 0.2.14
3513
3518
3514 2003-01-25 Fernando Perez <fperez@colorado.edu>
3519 2003-01-25 Fernando Perez <fperez@colorado.edu>
3515
3520
3516 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3521 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3517 functions defined in previous edit sessions could not be re-edited
3522 functions defined in previous edit sessions could not be re-edited
3518 (because the temp files were immediately removed). Now temp files
3523 (because the temp files were immediately removed). Now temp files
3519 are removed only at IPython's exit.
3524 are removed only at IPython's exit.
3520 (Magic.magic_run): Improved @run to perform shell-like expansions
3525 (Magic.magic_run): Improved @run to perform shell-like expansions
3521 on its arguments (~users and $VARS). With this, @run becomes more
3526 on its arguments (~users and $VARS). With this, @run becomes more
3522 like a normal command-line.
3527 like a normal command-line.
3523
3528
3524 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3529 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3525 bugs related to embedding and cleaned up that code. A fairly
3530 bugs related to embedding and cleaned up that code. A fairly
3526 important one was the impossibility to access the global namespace
3531 important one was the impossibility to access the global namespace
3527 through the embedded IPython (only local variables were visible).
3532 through the embedded IPython (only local variables were visible).
3528
3533
3529 2003-01-14 Fernando Perez <fperez@colorado.edu>
3534 2003-01-14 Fernando Perez <fperez@colorado.edu>
3530
3535
3531 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3536 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3532 auto-calling to be a bit more conservative. Now it doesn't get
3537 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
3538 triggered if any of '!=()<>' are in the rest of the input line, to
3534 allow comparing callables. Thanks to Alex for the heads up.
3539 allow comparing callables. Thanks to Alex for the heads up.
3535
3540
3536 2003-01-07 Fernando Perez <fperez@colorado.edu>
3541 2003-01-07 Fernando Perez <fperez@colorado.edu>
3537
3542
3538 * IPython/genutils.py (page): fixed estimation of the number of
3543 * IPython/genutils.py (page): fixed estimation of the number of
3539 lines in a string to be paged to simply count newlines. This
3544 lines in a string to be paged to simply count newlines. This
3540 prevents over-guessing due to embedded escape sequences. A better
3545 prevents over-guessing due to embedded escape sequences. A better
3541 long-term solution would involve stripping out the control chars
3546 long-term solution would involve stripping out the control chars
3542 for the count, but it's potentially so expensive I just don't
3547 for the count, but it's potentially so expensive I just don't
3543 think it's worth doing.
3548 think it's worth doing.
3544
3549
3545 2002-12-19 *** Released version 0.2.14pre50
3550 2002-12-19 *** Released version 0.2.14pre50
3546
3551
3547 2002-12-19 Fernando Perez <fperez@colorado.edu>
3552 2002-12-19 Fernando Perez <fperez@colorado.edu>
3548
3553
3549 * tools/release (version): Changed release scripts to inform
3554 * tools/release (version): Changed release scripts to inform
3550 Andrea and build a NEWS file with a list of recent changes.
3555 Andrea and build a NEWS file with a list of recent changes.
3551
3556
3552 * IPython/ColorANSI.py (__all__): changed terminal detection
3557 * IPython/ColorANSI.py (__all__): changed terminal detection
3553 code. Seems to work better for xterms without breaking
3558 code. Seems to work better for xterms without breaking
3554 konsole. Will need more testing to determine if WinXP and Mac OSX
3559 konsole. Will need more testing to determine if WinXP and Mac OSX
3555 also work ok.
3560 also work ok.
3556
3561
3557 2002-12-18 *** Released version 0.2.14pre49
3562 2002-12-18 *** Released version 0.2.14pre49
3558
3563
3559 2002-12-18 Fernando Perez <fperez@colorado.edu>
3564 2002-12-18 Fernando Perez <fperez@colorado.edu>
3560
3565
3561 * Docs: added new info about Mac OSX, from Andrea.
3566 * Docs: added new info about Mac OSX, from Andrea.
3562
3567
3563 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3568 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3564 allow direct plotting of python strings whose format is the same
3569 allow direct plotting of python strings whose format is the same
3565 of gnuplot data files.
3570 of gnuplot data files.
3566
3571
3567 2002-12-16 Fernando Perez <fperez@colorado.edu>
3572 2002-12-16 Fernando Perez <fperez@colorado.edu>
3568
3573
3569 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3574 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3570 value of exit question to be acknowledged.
3575 value of exit question to be acknowledged.
3571
3576
3572 2002-12-03 Fernando Perez <fperez@colorado.edu>
3577 2002-12-03 Fernando Perez <fperez@colorado.edu>
3573
3578
3574 * IPython/ipmaker.py: removed generators, which had been added
3579 * IPython/ipmaker.py: removed generators, which had been added
3575 by mistake in an earlier debugging run. This was causing trouble
3580 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>
3581 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3577 for pointing this out.
3582 for pointing this out.
3578
3583
3579 2002-11-17 Fernando Perez <fperez@colorado.edu>
3584 2002-11-17 Fernando Perez <fperez@colorado.edu>
3580
3585
3581 * Manual: updated the Gnuplot section.
3586 * Manual: updated the Gnuplot section.
3582
3587
3583 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3588 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3584 a much better split of what goes in Runtime and what goes in
3589 a much better split of what goes in Runtime and what goes in
3585 Interactive.
3590 Interactive.
3586
3591
3587 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3592 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3588 being imported from iplib.
3593 being imported from iplib.
3589
3594
3590 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3595 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3591 for command-passing. Now the global Gnuplot instance is called
3596 for command-passing. Now the global Gnuplot instance is called
3592 'gp' instead of 'g', which was really a far too fragile and
3597 'gp' instead of 'g', which was really a far too fragile and
3593 common name.
3598 common name.
3594
3599
3595 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3600 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3596 bounding boxes generated by Gnuplot for square plots.
3601 bounding boxes generated by Gnuplot for square plots.
3597
3602
3598 * IPython/genutils.py (popkey): new function added. I should
3603 * IPython/genutils.py (popkey): new function added. I should
3599 suggest this on c.l.py as a dict method, it seems useful.
3604 suggest this on c.l.py as a dict method, it seems useful.
3600
3605
3601 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3606 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3602 to transparently handle PostScript generation. MUCH better than
3607 to transparently handle PostScript generation. MUCH better than
3603 the previous plot_eps/replot_eps (which I removed now). The code
3608 the previous plot_eps/replot_eps (which I removed now). The code
3604 is also fairly clean and well documented now (including
3609 is also fairly clean and well documented now (including
3605 docstrings).
3610 docstrings).
3606
3611
3607 2002-11-13 Fernando Perez <fperez@colorado.edu>
3612 2002-11-13 Fernando Perez <fperez@colorado.edu>
3608
3613
3609 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3614 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3610 (inconsistent with options).
3615 (inconsistent with options).
3611
3616
3612 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3617 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3613 manually disabled, I don't know why. Fixed it.
3618 manually disabled, I don't know why. Fixed it.
3614 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3619 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3615 eps output.
3620 eps output.
3616
3621
3617 2002-11-12 Fernando Perez <fperez@colorado.edu>
3622 2002-11-12 Fernando Perez <fperez@colorado.edu>
3618
3623
3619 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3624 * 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
3625 don't propagate up to caller. Fixes crash reported by François
3621 Pinard.
3626 Pinard.
3622
3627
3623 2002-11-09 Fernando Perez <fperez@colorado.edu>
3628 2002-11-09 Fernando Perez <fperez@colorado.edu>
3624
3629
3625 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3630 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3626 history file for new users.
3631 history file for new users.
3627 (make_IPython): fixed bug where initial install would leave the
3632 (make_IPython): fixed bug where initial install would leave the
3628 user running in the .ipython dir.
3633 user running in the .ipython dir.
3629 (make_IPython): fixed bug where config dir .ipython would be
3634 (make_IPython): fixed bug where config dir .ipython would be
3630 created regardless of the given -ipythondir option. Thanks to Cory
3635 created regardless of the given -ipythondir option. Thanks to Cory
3631 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3636 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3632
3637
3633 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3638 * 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
3639 type confirmations. Will need to use it in all of IPython's code
3635 consistently.
3640 consistently.
3636
3641
3637 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3642 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3638 context to print 31 lines instead of the default 5. This will make
3643 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
3644 the crash reports extremely detailed in case the problem is in
3640 libraries I don't have access to.
3645 libraries I don't have access to.
3641
3646
3642 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3647 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3643 line of defense' code to still crash, but giving users fair
3648 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
3649 warning. I don't want internal errors to go unreported: if there's
3645 an internal problem, IPython should crash and generate a full
3650 an internal problem, IPython should crash and generate a full
3646 report.
3651 report.
3647
3652
3648 2002-11-08 Fernando Perez <fperez@colorado.edu>
3653 2002-11-08 Fernando Perez <fperez@colorado.edu>
3649
3654
3650 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3655 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3651 otherwise uncaught exceptions which can appear if people set
3656 otherwise uncaught exceptions which can appear if people set
3652 sys.stdout to something badly broken. Thanks to a crash report
3657 sys.stdout to something badly broken. Thanks to a crash report
3653 from henni-AT-mail.brainbot.com.
3658 from henni-AT-mail.brainbot.com.
3654
3659
3655 2002-11-04 Fernando Perez <fperez@colorado.edu>
3660 2002-11-04 Fernando Perez <fperez@colorado.edu>
3656
3661
3657 * IPython/iplib.py (InteractiveShell.interact): added
3662 * IPython/iplib.py (InteractiveShell.interact): added
3658 __IPYTHON__active to the builtins. It's a flag which goes on when
3663 __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
3664 the interaction starts and goes off again when it stops. This
3660 allows embedding code to detect being inside IPython. Before this
3665 allows embedding code to detect being inside IPython. Before this
3661 was done via __IPYTHON__, but that only shows that an IPython
3666 was done via __IPYTHON__, but that only shows that an IPython
3662 instance has been created.
3667 instance has been created.
3663
3668
3664 * IPython/Magic.py (Magic.magic_env): I realized that in a
3669 * IPython/Magic.py (Magic.magic_env): I realized that in a
3665 UserDict, instance.data holds the data as a normal dict. So I
3670 UserDict, instance.data holds the data as a normal dict. So I
3666 modified @env to return os.environ.data instead of rebuilding a
3671 modified @env to return os.environ.data instead of rebuilding a
3667 dict by hand.
3672 dict by hand.
3668
3673
3669 2002-11-02 Fernando Perez <fperez@colorado.edu>
3674 2002-11-02 Fernando Perez <fperez@colorado.edu>
3670
3675
3671 * IPython/genutils.py (warn): changed so that level 1 prints no
3676 * IPython/genutils.py (warn): changed so that level 1 prints no
3672 header. Level 2 is now the default (with 'WARNING' header, as
3677 header. Level 2 is now the default (with 'WARNING' header, as
3673 before). I think I tracked all places where changes were needed in
3678 before). I think I tracked all places where changes were needed in
3674 IPython, but outside code using the old level numbering may have
3679 IPython, but outside code using the old level numbering may have
3675 broken.
3680 broken.
3676
3681
3677 * IPython/iplib.py (InteractiveShell.runcode): added this to
3682 * IPython/iplib.py (InteractiveShell.runcode): added this to
3678 handle the tracebacks in SystemExit traps correctly. The previous
3683 handle the tracebacks in SystemExit traps correctly. The previous
3679 code (through interact) was printing more of the stack than
3684 code (through interact) was printing more of the stack than
3680 necessary, showing IPython internal code to the user.
3685 necessary, showing IPython internal code to the user.
3681
3686
3682 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3687 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3683 default. Now that the default at the confirmation prompt is yes,
3688 default. Now that the default at the confirmation prompt is yes,
3684 it's not so intrusive. François' argument that ipython sessions
3689 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,
3690 tend to be complex enough not to lose them from an accidental C-d,
3686 is a valid one.
3691 is a valid one.
3687
3692
3688 * IPython/iplib.py (InteractiveShell.interact): added a
3693 * IPython/iplib.py (InteractiveShell.interact): added a
3689 showtraceback() call to the SystemExit trap, and modified the exit
3694 showtraceback() call to the SystemExit trap, and modified the exit
3690 confirmation to have yes as the default.
3695 confirmation to have yes as the default.
3691
3696
3692 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3697 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3693 this file. It's been gone from the code for a long time, this was
3698 this file. It's been gone from the code for a long time, this was
3694 simply leftover junk.
3699 simply leftover junk.
3695
3700
3696 2002-11-01 Fernando Perez <fperez@colorado.edu>
3701 2002-11-01 Fernando Perez <fperez@colorado.edu>
3697
3702
3698 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3703 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3699 added. If set, IPython now traps EOF and asks for
3704 added. If set, IPython now traps EOF and asks for
3700 confirmation. After a request by François Pinard.
3705 confirmation. After a request by François Pinard.
3701
3706
3702 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3707 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3703 of @abort, and with a new (better) mechanism for handling the
3708 of @abort, and with a new (better) mechanism for handling the
3704 exceptions.
3709 exceptions.
3705
3710
3706 2002-10-27 Fernando Perez <fperez@colorado.edu>
3711 2002-10-27 Fernando Perez <fperez@colorado.edu>
3707
3712
3708 * IPython/usage.py (__doc__): updated the --help information and
3713 * IPython/usage.py (__doc__): updated the --help information and
3709 the ipythonrc file to indicate that -log generates
3714 the ipythonrc file to indicate that -log generates
3710 ./ipython.log. Also fixed the corresponding info in @logstart.
3715 ./ipython.log. Also fixed the corresponding info in @logstart.
3711 This and several other fixes in the manuals thanks to reports by
3716 This and several other fixes in the manuals thanks to reports by
3712 François Pinard <pinard-AT-iro.umontreal.ca>.
3717 François Pinard <pinard-AT-iro.umontreal.ca>.
3713
3718
3714 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3719 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3715 refer to @logstart (instead of @log, which doesn't exist).
3720 refer to @logstart (instead of @log, which doesn't exist).
3716
3721
3717 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3722 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3718 AttributeError crash. Thanks to Christopher Armstrong
3723 AttributeError crash. Thanks to Christopher Armstrong
3719 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3724 <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
3725 introduced recently (in 0.2.14pre37) with the fix to the eval
3721 problem mentioned below.
3726 problem mentioned below.
3722
3727
3723 2002-10-17 Fernando Perez <fperez@colorado.edu>
3728 2002-10-17 Fernando Perez <fperez@colorado.edu>
3724
3729
3725 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3730 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3726 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3731 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3727
3732
3728 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3733 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3729 this function to fix a problem reported by Alex Schmolck. He saw
3734 this function to fix a problem reported by Alex Schmolck. He saw
3730 it with list comprehensions and generators, which were getting
3735 it with list comprehensions and generators, which were getting
3731 called twice. The real problem was an 'eval' call in testing for
3736 called twice. The real problem was an 'eval' call in testing for
3732 automagic which was evaluating the input line silently.
3737 automagic which was evaluating the input line silently.
3733
3738
3734 This is a potentially very nasty bug, if the input has side
3739 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,
3740 effects which must not be repeated. The code is much cleaner now,
3736 without any blanket 'except' left and with a regexp test for
3741 without any blanket 'except' left and with a regexp test for
3737 actual function names.
3742 actual function names.
3738
3743
3739 But an eval remains, which I'm not fully comfortable with. I just
3744 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
3745 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
3746 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
3747 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
3748 slips by, so the eval should only happen for things that can
3744 really be only function/method names.
3749 really be only function/method names.
3745
3750
3746 2002-10-15 Fernando Perez <fperez@colorado.edu>
3751 2002-10-15 Fernando Perez <fperez@colorado.edu>
3747
3752
3748 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3753 * 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
3754 OSX information to main manual, removed README_Mac_OSX file from
3750 distribution. Also updated credits for recent additions.
3755 distribution. Also updated credits for recent additions.
3751
3756
3752 2002-10-10 Fernando Perez <fperez@colorado.edu>
3757 2002-10-10 Fernando Perez <fperez@colorado.edu>
3753
3758
3754 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3759 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3755 terminal-related issues. Many thanks to Andrea Riciputi
3760 terminal-related issues. Many thanks to Andrea Riciputi
3756 <andrea.riciputi-AT-libero.it> for writing it.
3761 <andrea.riciputi-AT-libero.it> for writing it.
3757
3762
3758 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3763 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3759 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3764 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3760
3765
3761 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3766 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3762 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3767 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3763 <syver-en-AT-online.no> who both submitted patches for this problem.
3768 <syver-en-AT-online.no> who both submitted patches for this problem.
3764
3769
3765 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3770 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3766 global embedding to make sure that things don't overwrite user
3771 global embedding to make sure that things don't overwrite user
3767 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3772 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3768
3773
3769 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3774 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3770 compatibility. Thanks to Hayden Callow
3775 compatibility. Thanks to Hayden Callow
3771 <h.callow-AT-elec.canterbury.ac.nz>
3776 <h.callow-AT-elec.canterbury.ac.nz>
3772
3777
3773 2002-10-04 Fernando Perez <fperez@colorado.edu>
3778 2002-10-04 Fernando Perez <fperez@colorado.edu>
3774
3779
3775 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3780 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3776 Gnuplot.File objects.
3781 Gnuplot.File objects.
3777
3782
3778 2002-07-23 Fernando Perez <fperez@colorado.edu>
3783 2002-07-23 Fernando Perez <fperez@colorado.edu>
3779
3784
3780 * IPython/genutils.py (timing): Added timings() and timing() for
3785 * IPython/genutils.py (timing): Added timings() and timing() for
3781 quick access to the most commonly needed data, the execution
3786 quick access to the most commonly needed data, the execution
3782 times. Old timing() renamed to timings_out().
3787 times. Old timing() renamed to timings_out().
3783
3788
3784 2002-07-18 Fernando Perez <fperez@colorado.edu>
3789 2002-07-18 Fernando Perez <fperez@colorado.edu>
3785
3790
3786 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3791 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3787 bug with nested instances disrupting the parent's tab completion.
3792 bug with nested instances disrupting the parent's tab completion.
3788
3793
3789 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3794 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3790 all_completions code to begin the emacs integration.
3795 all_completions code to begin the emacs integration.
3791
3796
3792 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3797 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3793 argument to allow titling individual arrays when plotting.
3798 argument to allow titling individual arrays when plotting.
3794
3799
3795 2002-07-15 Fernando Perez <fperez@colorado.edu>
3800 2002-07-15 Fernando Perez <fperez@colorado.edu>
3796
3801
3797 * setup.py (make_shortcut): changed to retrieve the value of
3802 * setup.py (make_shortcut): changed to retrieve the value of
3798 'Program Files' directory from the registry (this value changes in
3803 'Program Files' directory from the registry (this value changes in
3799 non-english versions of Windows). Thanks to Thomas Fanslau
3804 non-english versions of Windows). Thanks to Thomas Fanslau
3800 <tfanslau-AT-gmx.de> for the report.
3805 <tfanslau-AT-gmx.de> for the report.
3801
3806
3802 2002-07-10 Fernando Perez <fperez@colorado.edu>
3807 2002-07-10 Fernando Perez <fperez@colorado.edu>
3803
3808
3804 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3809 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3805 a bug in pdb, which crashes if a line with only whitespace is
3810 a bug in pdb, which crashes if a line with only whitespace is
3806 entered. Bug report submitted to sourceforge.
3811 entered. Bug report submitted to sourceforge.
3807
3812
3808 2002-07-09 Fernando Perez <fperez@colorado.edu>
3813 2002-07-09 Fernando Perez <fperez@colorado.edu>
3809
3814
3810 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3815 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3811 reporting exceptions (it's a bug in inspect.py, I just set a
3816 reporting exceptions (it's a bug in inspect.py, I just set a
3812 workaround).
3817 workaround).
3813
3818
3814 2002-07-08 Fernando Perez <fperez@colorado.edu>
3819 2002-07-08 Fernando Perez <fperez@colorado.edu>
3815
3820
3816 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3821 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3817 __IPYTHON__ in __builtins__ to show up in user_ns.
3822 __IPYTHON__ in __builtins__ to show up in user_ns.
3818
3823
3819 2002-07-03 Fernando Perez <fperez@colorado.edu>
3824 2002-07-03 Fernando Perez <fperez@colorado.edu>
3820
3825
3821 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3826 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3822 name from @gp_set_instance to @gp_set_default.
3827 name from @gp_set_instance to @gp_set_default.
3823
3828
3824 * IPython/ipmaker.py (make_IPython): default editor value set to
3829 * IPython/ipmaker.py (make_IPython): default editor value set to
3825 '0' (a string), to match the rc file. Otherwise will crash when
3830 '0' (a string), to match the rc file. Otherwise will crash when
3826 .strip() is called on it.
3831 .strip() is called on it.
3827
3832
3828
3833
3829 2002-06-28 Fernando Perez <fperez@colorado.edu>
3834 2002-06-28 Fernando Perez <fperez@colorado.edu>
3830
3835
3831 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3836 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3832 of files in current directory when a file is executed via
3837 of files in current directory when a file is executed via
3833 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3838 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3834
3839
3835 * setup.py (manfiles): fix for rpm builds, submitted by RA
3840 * setup.py (manfiles): fix for rpm builds, submitted by RA
3836 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3841 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3837
3842
3838 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3843 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3839 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3844 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3840 string!). A. Schmolck caught this one.
3845 string!). A. Schmolck caught this one.
3841
3846
3842 2002-06-27 Fernando Perez <fperez@colorado.edu>
3847 2002-06-27 Fernando Perez <fperez@colorado.edu>
3843
3848
3844 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3849 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3845 defined files at the cmd line. __name__ wasn't being set to
3850 defined files at the cmd line. __name__ wasn't being set to
3846 __main__.
3851 __main__.
3847
3852
3848 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3853 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3849 regular lists and tuples besides Numeric arrays.
3854 regular lists and tuples besides Numeric arrays.
3850
3855
3851 * IPython/Prompts.py (CachedOutput.__call__): Added output
3856 * IPython/Prompts.py (CachedOutput.__call__): Added output
3852 supression for input ending with ';'. Similar to Mathematica and
3857 supression for input ending with ';'. Similar to Mathematica and
3853 Matlab. The _* vars and Out[] list are still updated, just like
3858 Matlab. The _* vars and Out[] list are still updated, just like
3854 Mathematica behaves.
3859 Mathematica behaves.
3855
3860
3856 2002-06-25 Fernando Perez <fperez@colorado.edu>
3861 2002-06-25 Fernando Perez <fperez@colorado.edu>
3857
3862
3858 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3863 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3859 .ini extensions for profiels under Windows.
3864 .ini extensions for profiels under Windows.
3860
3865
3861 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3866 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3862 string form. Fix contributed by Alexander Schmolck
3867 string form. Fix contributed by Alexander Schmolck
3863 <a.schmolck-AT-gmx.net>
3868 <a.schmolck-AT-gmx.net>
3864
3869
3865 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3870 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3866 pre-configured Gnuplot instance.
3871 pre-configured Gnuplot instance.
3867
3872
3868 2002-06-21 Fernando Perez <fperez@colorado.edu>
3873 2002-06-21 Fernando Perez <fperez@colorado.edu>
3869
3874
3870 * IPython/numutils.py (exp_safe): new function, works around the
3875 * IPython/numutils.py (exp_safe): new function, works around the
3871 underflow problems in Numeric.
3876 underflow problems in Numeric.
3872 (log2): New fn. Safe log in base 2: returns exact integer answer
3877 (log2): New fn. Safe log in base 2: returns exact integer answer
3873 for exact integer powers of 2.
3878 for exact integer powers of 2.
3874
3879
3875 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3880 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3876 properly.
3881 properly.
3877
3882
3878 2002-06-20 Fernando Perez <fperez@colorado.edu>
3883 2002-06-20 Fernando Perez <fperez@colorado.edu>
3879
3884
3880 * IPython/genutils.py (timing): new function like
3885 * IPython/genutils.py (timing): new function like
3881 Mathematica's. Similar to time_test, but returns more info.
3886 Mathematica's. Similar to time_test, but returns more info.
3882
3887
3883 2002-06-18 Fernando Perez <fperez@colorado.edu>
3888 2002-06-18 Fernando Perez <fperez@colorado.edu>
3884
3889
3885 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3890 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3886 according to Mike Heeter's suggestions.
3891 according to Mike Heeter's suggestions.
3887
3892
3888 2002-06-16 Fernando Perez <fperez@colorado.edu>
3893 2002-06-16 Fernando Perez <fperez@colorado.edu>
3889
3894
3890 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3895 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3891 system. GnuplotMagic is gone as a user-directory option. New files
3896 system. GnuplotMagic is gone as a user-directory option. New files
3892 make it easier to use all the gnuplot stuff both from external
3897 make it easier to use all the gnuplot stuff both from external
3893 programs as well as from IPython. Had to rewrite part of
3898 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
3899 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
3900 get created, and require a repeat of the command (often several
3896 times).
3901 times).
3897
3902
3898 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3903 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3899 resolve output channel at call time, so that if sys.stderr has
3904 resolve output channel at call time, so that if sys.stderr has
3900 been redirected by user this gets honored.
3905 been redirected by user this gets honored.
3901
3906
3902 2002-06-13 Fernando Perez <fperez@colorado.edu>
3907 2002-06-13 Fernando Perez <fperez@colorado.edu>
3903
3908
3904 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3909 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3905 IPShell. Kept a copy with the old names to avoid breaking people's
3910 IPShell. Kept a copy with the old names to avoid breaking people's
3906 embedded code.
3911 embedded code.
3907
3912
3908 * IPython/ipython: simplified it to the bare minimum after
3913 * IPython/ipython: simplified it to the bare minimum after
3909 Holger's suggestions. Added info about how to use it in
3914 Holger's suggestions. Added info about how to use it in
3910 PYTHONSTARTUP.
3915 PYTHONSTARTUP.
3911
3916
3912 * IPython/Shell.py (IPythonShell): changed the options passing
3917 * IPython/Shell.py (IPythonShell): changed the options passing
3913 from a string with funky %s replacements to a straight list. Maybe
3918 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
3919 a bit more typing, but it follows sys.argv conventions, so there's
3915 less special-casing to remember.
3920 less special-casing to remember.
3916
3921
3917 2002-06-12 Fernando Perez <fperez@colorado.edu>
3922 2002-06-12 Fernando Perez <fperez@colorado.edu>
3918
3923
3919 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3924 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3920 command. Thanks to a suggestion by Mike Heeter.
3925 command. Thanks to a suggestion by Mike Heeter.
3921 (Magic.magic_pfile): added behavior to look at filenames if given
3926 (Magic.magic_pfile): added behavior to look at filenames if given
3922 arg is not a defined object.
3927 arg is not a defined object.
3923 (Magic.magic_save): New @save function to save code snippets. Also
3928 (Magic.magic_save): New @save function to save code snippets. Also
3924 a Mike Heeter idea.
3929 a Mike Heeter idea.
3925
3930
3926 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3931 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3927 plot() and replot(). Much more convenient now, especially for
3932 plot() and replot(). Much more convenient now, especially for
3928 interactive use.
3933 interactive use.
3929
3934
3930 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3935 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3931 filenames.
3936 filenames.
3932
3937
3933 2002-06-02 Fernando Perez <fperez@colorado.edu>
3938 2002-06-02 Fernando Perez <fperez@colorado.edu>
3934
3939
3935 * IPython/Struct.py (Struct.__init__): modified to admit
3940 * IPython/Struct.py (Struct.__init__): modified to admit
3936 initialization via another struct.
3941 initialization via another struct.
3937
3942
3938 * IPython/genutils.py (SystemExec.__init__): New stateful
3943 * IPython/genutils.py (SystemExec.__init__): New stateful
3939 interface to xsys and bq. Useful for writing system scripts.
3944 interface to xsys and bq. Useful for writing system scripts.
3940
3945
3941 2002-05-30 Fernando Perez <fperez@colorado.edu>
3946 2002-05-30 Fernando Perez <fperez@colorado.edu>
3942
3947
3943 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3948 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3944 documents. This will make the user download smaller (it's getting
3949 documents. This will make the user download smaller (it's getting
3945 too big).
3950 too big).
3946
3951
3947 2002-05-29 Fernando Perez <fperez@colorado.edu>
3952 2002-05-29 Fernando Perez <fperez@colorado.edu>
3948
3953
3949 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3954 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3950 fix problems with shelve and pickle. Seems to work, but I don't
3955 fix problems with shelve and pickle. Seems to work, but I don't
3951 know if corner cases break it. Thanks to Mike Heeter
3956 know if corner cases break it. Thanks to Mike Heeter
3952 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3957 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3953
3958
3954 2002-05-24 Fernando Perez <fperez@colorado.edu>
3959 2002-05-24 Fernando Perez <fperez@colorado.edu>
3955
3960
3956 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3961 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3957 macros having broken.
3962 macros having broken.
3958
3963
3959 2002-05-21 Fernando Perez <fperez@colorado.edu>
3964 2002-05-21 Fernando Perez <fperez@colorado.edu>
3960
3965
3961 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3966 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3962 introduced logging bug: all history before logging started was
3967 introduced logging bug: all history before logging started was
3963 being written one character per line! This came from the redesign
3968 being written one character per line! This came from the redesign
3964 of the input history as a special list which slices to strings,
3969 of the input history as a special list which slices to strings,
3965 not to lists.
3970 not to lists.
3966
3971
3967 2002-05-20 Fernando Perez <fperez@colorado.edu>
3972 2002-05-20 Fernando Perez <fperez@colorado.edu>
3968
3973
3969 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3974 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3970 be an attribute of all classes in this module. The design of these
3975 be an attribute of all classes in this module. The design of these
3971 classes needs some serious overhauling.
3976 classes needs some serious overhauling.
3972
3977
3973 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3978 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3974 which was ignoring '_' in option names.
3979 which was ignoring '_' in option names.
3975
3980
3976 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3981 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3977 'Verbose_novars' to 'Context' and made it the new default. It's a
3982 'Verbose_novars' to 'Context' and made it the new default. It's a
3978 bit more readable and also safer than verbose.
3983 bit more readable and also safer than verbose.
3979
3984
3980 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3985 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3981 triple-quoted strings.
3986 triple-quoted strings.
3982
3987
3983 * IPython/OInspect.py (__all__): new module exposing the object
3988 * IPython/OInspect.py (__all__): new module exposing the object
3984 introspection facilities. Now the corresponding magics are dummy
3989 introspection facilities. Now the corresponding magics are dummy
3985 wrappers around this. Having this module will make it much easier
3990 wrappers around this. Having this module will make it much easier
3986 to put these functions into our modified pdb.
3991 to put these functions into our modified pdb.
3987 This new object inspector system uses the new colorizing module,
3992 This new object inspector system uses the new colorizing module,
3988 so source code and other things are nicely syntax highlighted.
3993 so source code and other things are nicely syntax highlighted.
3989
3994
3990 2002-05-18 Fernando Perez <fperez@colorado.edu>
3995 2002-05-18 Fernando Perez <fperez@colorado.edu>
3991
3996
3992 * IPython/ColorANSI.py: Split the coloring tools into a separate
3997 * 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
3998 module so I can use them in other code easier (they were part of
3994 ultraTB).
3999 ultraTB).
3995
4000
3996 2002-05-17 Fernando Perez <fperez@colorado.edu>
4001 2002-05-17 Fernando Perez <fperez@colorado.edu>
3997
4002
3998 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4003 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3999 fixed it to set the global 'g' also to the called instance, as
4004 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
4005 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4001 user's 'g' variables).
4006 user's 'g' variables).
4002
4007
4003 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4008 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4004 global variables (aliases to _ih,_oh) so that users which expect
4009 global variables (aliases to _ih,_oh) so that users which expect
4005 In[5] or Out[7] to work aren't unpleasantly surprised.
4010 In[5] or Out[7] to work aren't unpleasantly surprised.
4006 (InputList.__getslice__): new class to allow executing slices of
4011 (InputList.__getslice__): new class to allow executing slices of
4007 input history directly. Very simple class, complements the use of
4012 input history directly. Very simple class, complements the use of
4008 macros.
4013 macros.
4009
4014
4010 2002-05-16 Fernando Perez <fperez@colorado.edu>
4015 2002-05-16 Fernando Perez <fperez@colorado.edu>
4011
4016
4012 * setup.py (docdirbase): make doc directory be just doc/IPython
4017 * setup.py (docdirbase): make doc directory be just doc/IPython
4013 without version numbers, it will reduce clutter for users.
4018 without version numbers, it will reduce clutter for users.
4014
4019
4015 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4020 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4016 execfile call to prevent possible memory leak. See for details:
4021 execfile call to prevent possible memory leak. See for details:
4017 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4022 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4018
4023
4019 2002-05-15 Fernando Perez <fperez@colorado.edu>
4024 2002-05-15 Fernando Perez <fperez@colorado.edu>
4020
4025
4021 * IPython/Magic.py (Magic.magic_psource): made the object
4026 * IPython/Magic.py (Magic.magic_psource): made the object
4022 introspection names be more standard: pdoc, pdef, pfile and
4027 introspection names be more standard: pdoc, pdef, pfile and
4023 psource. They all print/page their output, and it makes
4028 psource. They all print/page their output, and it makes
4024 remembering them easier. Kept old names for compatibility as
4029 remembering them easier. Kept old names for compatibility as
4025 aliases.
4030 aliases.
4026
4031
4027 2002-05-14 Fernando Perez <fperez@colorado.edu>
4032 2002-05-14 Fernando Perez <fperez@colorado.edu>
4028
4033
4029 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4034 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4030 what the mouse problem was. The trick is to use gnuplot with temp
4035 what the mouse problem was. The trick is to use gnuplot with temp
4031 files and NOT with pipes (for data communication), because having
4036 files and NOT with pipes (for data communication), because having
4032 both pipes and the mouse on is bad news.
4037 both pipes and the mouse on is bad news.
4033
4038
4034 2002-05-13 Fernando Perez <fperez@colorado.edu>
4039 2002-05-13 Fernando Perez <fperez@colorado.edu>
4035
4040
4036 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4041 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4037 bug. Information would be reported about builtins even when
4042 bug. Information would be reported about builtins even when
4038 user-defined functions overrode them.
4043 user-defined functions overrode them.
4039
4044
4040 2002-05-11 Fernando Perez <fperez@colorado.edu>
4045 2002-05-11 Fernando Perez <fperez@colorado.edu>
4041
4046
4042 * IPython/__init__.py (__all__): removed FlexCompleter from
4047 * IPython/__init__.py (__all__): removed FlexCompleter from
4043 __all__ so that things don't fail in platforms without readline.
4048 __all__ so that things don't fail in platforms without readline.
4044
4049
4045 2002-05-10 Fernando Perez <fperez@colorado.edu>
4050 2002-05-10 Fernando Perez <fperez@colorado.edu>
4046
4051
4047 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4052 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4048 it requires Numeric, effectively making Numeric a dependency for
4053 it requires Numeric, effectively making Numeric a dependency for
4049 IPython.
4054 IPython.
4050
4055
4051 * Released 0.2.13
4056 * Released 0.2.13
4052
4057
4053 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4058 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4054 profiler interface. Now all the major options from the profiler
4059 profiler interface. Now all the major options from the profiler
4055 module are directly supported in IPython, both for single
4060 module are directly supported in IPython, both for single
4056 expressions (@prun) and for full programs (@run -p).
4061 expressions (@prun) and for full programs (@run -p).
4057
4062
4058 2002-05-09 Fernando Perez <fperez@colorado.edu>
4063 2002-05-09 Fernando Perez <fperez@colorado.edu>
4059
4064
4060 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4065 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4061 magic properly formatted for screen.
4066 magic properly formatted for screen.
4062
4067
4063 * setup.py (make_shortcut): Changed things to put pdf version in
4068 * setup.py (make_shortcut): Changed things to put pdf version in
4064 doc/ instead of doc/manual (had to change lyxport a bit).
4069 doc/ instead of doc/manual (had to change lyxport a bit).
4065
4070
4066 * IPython/Magic.py (Profile.string_stats): made profile runs go
4071 * IPython/Magic.py (Profile.string_stats): made profile runs go
4067 through pager (they are long and a pager allows searching, saving,
4072 through pager (they are long and a pager allows searching, saving,
4068 etc.)
4073 etc.)
4069
4074
4070 2002-05-08 Fernando Perez <fperez@colorado.edu>
4075 2002-05-08 Fernando Perez <fperez@colorado.edu>
4071
4076
4072 * Released 0.2.12
4077 * Released 0.2.12
4073
4078
4074 2002-05-06 Fernando Perez <fperez@colorado.edu>
4079 2002-05-06 Fernando Perez <fperez@colorado.edu>
4075
4080
4076 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4081 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4077 introduced); 'hist n1 n2' was broken.
4082 introduced); 'hist n1 n2' was broken.
4078 (Magic.magic_pdb): added optional on/off arguments to @pdb
4083 (Magic.magic_pdb): added optional on/off arguments to @pdb
4079 (Magic.magic_run): added option -i to @run, which executes code in
4084 (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
4085 the IPython namespace instead of a clean one. Also added @irun as
4081 an alias to @run -i.
4086 an alias to @run -i.
4082
4087
4083 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4088 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4084 fixed (it didn't really do anything, the namespaces were wrong).
4089 fixed (it didn't really do anything, the namespaces were wrong).
4085
4090
4086 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4091 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4087
4092
4088 * IPython/__init__.py (__all__): Fixed package namespace, now
4093 * IPython/__init__.py (__all__): Fixed package namespace, now
4089 'import IPython' does give access to IPython.<all> as
4094 'import IPython' does give access to IPython.<all> as
4090 expected. Also renamed __release__ to Release.
4095 expected. Also renamed __release__ to Release.
4091
4096
4092 * IPython/Debugger.py (__license__): created new Pdb class which
4097 * IPython/Debugger.py (__license__): created new Pdb class which
4093 functions like a drop-in for the normal pdb.Pdb but does NOT
4098 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
4099 import readline by default. This way it doesn't muck up IPython's
4095 readline handling, and now tab-completion finally works in the
4100 readline handling, and now tab-completion finally works in the
4096 debugger -- sort of. It completes things globally visible, but the
4101 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
4102 completer doesn't track the stack as pdb walks it. That's a bit
4098 tricky, and I'll have to implement it later.
4103 tricky, and I'll have to implement it later.
4099
4104
4100 2002-05-05 Fernando Perez <fperez@colorado.edu>
4105 2002-05-05 Fernando Perez <fperez@colorado.edu>
4101
4106
4102 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4107 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4103 magic docstrings when printed via ? (explicit \'s were being
4108 magic docstrings when printed via ? (explicit \'s were being
4104 printed).
4109 printed).
4105
4110
4106 * IPython/ipmaker.py (make_IPython): fixed namespace
4111 * IPython/ipmaker.py (make_IPython): fixed namespace
4107 identification bug. Now variables loaded via logs or command-line
4112 identification bug. Now variables loaded via logs or command-line
4108 files are recognized in the interactive namespace by @who.
4113 files are recognized in the interactive namespace by @who.
4109
4114
4110 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4115 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4111 log replay system stemming from the string form of Structs.
4116 log replay system stemming from the string form of Structs.
4112
4117
4113 * IPython/Magic.py (Macro.__init__): improved macros to properly
4118 * IPython/Magic.py (Macro.__init__): improved macros to properly
4114 handle magic commands in them.
4119 handle magic commands in them.
4115 (Magic.magic_logstart): usernames are now expanded so 'logstart
4120 (Magic.magic_logstart): usernames are now expanded so 'logstart
4116 ~/mylog' now works.
4121 ~/mylog' now works.
4117
4122
4118 * IPython/iplib.py (complete): fixed bug where paths starting with
4123 * IPython/iplib.py (complete): fixed bug where paths starting with
4119 '/' would be completed as magic names.
4124 '/' would be completed as magic names.
4120
4125
4121 2002-05-04 Fernando Perez <fperez@colorado.edu>
4126 2002-05-04 Fernando Perez <fperez@colorado.edu>
4122
4127
4123 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4128 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4124 allow running full programs under the profiler's control.
4129 allow running full programs under the profiler's control.
4125
4130
4126 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4131 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4127 mode to report exceptions verbosely but without formatting
4132 mode to report exceptions verbosely but without formatting
4128 variables. This addresses the issue of ipython 'freezing' (it's
4133 variables. This addresses the issue of ipython 'freezing' (it's
4129 not frozen, but caught in an expensive formatting loop) when huge
4134 not frozen, but caught in an expensive formatting loop) when huge
4130 variables are in the context of an exception.
4135 variables are in the context of an exception.
4131 (VerboseTB.text): Added '--->' markers at line where exception was
4136 (VerboseTB.text): Added '--->' markers at line where exception was
4132 triggered. Much clearer to read, especially in NoColor modes.
4137 triggered. Much clearer to read, especially in NoColor modes.
4133
4138
4134 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4139 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4135 implemented in reverse when changing to the new parse_options().
4140 implemented in reverse when changing to the new parse_options().
4136
4141
4137 2002-05-03 Fernando Perez <fperez@colorado.edu>
4142 2002-05-03 Fernando Perez <fperez@colorado.edu>
4138
4143
4139 * IPython/Magic.py (Magic.parse_options): new function so that
4144 * IPython/Magic.py (Magic.parse_options): new function so that
4140 magics can parse options easier.
4145 magics can parse options easier.
4141 (Magic.magic_prun): new function similar to profile.run(),
4146 (Magic.magic_prun): new function similar to profile.run(),
4142 suggested by Chris Hart.
4147 suggested by Chris Hart.
4143 (Magic.magic_cd): fixed behavior so that it only changes if
4148 (Magic.magic_cd): fixed behavior so that it only changes if
4144 directory actually is in history.
4149 directory actually is in history.
4145
4150
4146 * IPython/usage.py (__doc__): added information about potential
4151 * IPython/usage.py (__doc__): added information about potential
4147 slowness of Verbose exception mode when there are huge data
4152 slowness of Verbose exception mode when there are huge data
4148 structures to be formatted (thanks to Archie Paulson).
4153 structures to be formatted (thanks to Archie Paulson).
4149
4154
4150 * IPython/ipmaker.py (make_IPython): Changed default logging
4155 * IPython/ipmaker.py (make_IPython): Changed default logging
4151 (when simply called with -log) to use curr_dir/ipython.log in
4156 (when simply called with -log) to use curr_dir/ipython.log in
4152 rotate mode. Fixed crash which was occuring with -log before
4157 rotate mode. Fixed crash which was occuring with -log before
4153 (thanks to Jim Boyle).
4158 (thanks to Jim Boyle).
4154
4159
4155 2002-05-01 Fernando Perez <fperez@colorado.edu>
4160 2002-05-01 Fernando Perez <fperez@colorado.edu>
4156
4161
4157 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4162 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4158 was nasty -- though somewhat of a corner case).
4163 was nasty -- though somewhat of a corner case).
4159
4164
4160 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4165 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4161 text (was a bug).
4166 text (was a bug).
4162
4167
4163 2002-04-30 Fernando Perez <fperez@colorado.edu>
4168 2002-04-30 Fernando Perez <fperez@colorado.edu>
4164
4169
4165 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4170 * 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
4171 a print after ^D or ^C from the user so that the In[] prompt
4167 doesn't over-run the gnuplot one.
4172 doesn't over-run the gnuplot one.
4168
4173
4169 2002-04-29 Fernando Perez <fperez@colorado.edu>
4174 2002-04-29 Fernando Perez <fperez@colorado.edu>
4170
4175
4171 * Released 0.2.10
4176 * Released 0.2.10
4172
4177
4173 * IPython/__release__.py (version): get date dynamically.
4178 * IPython/__release__.py (version): get date dynamically.
4174
4179
4175 * Misc. documentation updates thanks to Arnd's comments. Also ran
4180 * Misc. documentation updates thanks to Arnd's comments. Also ran
4176 a full spellcheck on the manual (hadn't been done in a while).
4181 a full spellcheck on the manual (hadn't been done in a while).
4177
4182
4178 2002-04-27 Fernando Perez <fperez@colorado.edu>
4183 2002-04-27 Fernando Perez <fperez@colorado.edu>
4179
4184
4180 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4185 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4181 starting a log in mid-session would reset the input history list.
4186 starting a log in mid-session would reset the input history list.
4182
4187
4183 2002-04-26 Fernando Perez <fperez@colorado.edu>
4188 2002-04-26 Fernando Perez <fperez@colorado.edu>
4184
4189
4185 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4190 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4186 all files were being included in an update. Now anything in
4191 all files were being included in an update. Now anything in
4187 UserConfig that matches [A-Za-z]*.py will go (this excludes
4192 UserConfig that matches [A-Za-z]*.py will go (this excludes
4188 __init__.py)
4193 __init__.py)
4189
4194
4190 2002-04-25 Fernando Perez <fperez@colorado.edu>
4195 2002-04-25 Fernando Perez <fperez@colorado.edu>
4191
4196
4192 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4197 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4193 to __builtins__ so that any form of embedded or imported code can
4198 to __builtins__ so that any form of embedded or imported code can
4194 test for being inside IPython.
4199 test for being inside IPython.
4195
4200
4196 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4201 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4197 changed to GnuplotMagic because it's now an importable module,
4202 changed to GnuplotMagic because it's now an importable module,
4198 this makes the name follow that of the standard Gnuplot module.
4203 this makes the name follow that of the standard Gnuplot module.
4199 GnuplotMagic can now be loaded at any time in mid-session.
4204 GnuplotMagic can now be loaded at any time in mid-session.
4200
4205
4201 2002-04-24 Fernando Perez <fperez@colorado.edu>
4206 2002-04-24 Fernando Perez <fperez@colorado.edu>
4202
4207
4203 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4208 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4204 the globals (IPython has its own namespace) and the
4209 the globals (IPython has its own namespace) and the
4205 PhysicalQuantity stuff is much better anyway.
4210 PhysicalQuantity stuff is much better anyway.
4206
4211
4207 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4212 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4208 embedding example to standard user directory for
4213 embedding example to standard user directory for
4209 distribution. Also put it in the manual.
4214 distribution. Also put it in the manual.
4210
4215
4211 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4216 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4212 instance as first argument (so it doesn't rely on some obscure
4217 instance as first argument (so it doesn't rely on some obscure
4213 hidden global).
4218 hidden global).
4214
4219
4215 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4220 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4216 delimiters. While it prevents ().TAB from working, it allows
4221 delimiters. While it prevents ().TAB from working, it allows
4217 completions in open (... expressions. This is by far a more common
4222 completions in open (... expressions. This is by far a more common
4218 case.
4223 case.
4219
4224
4220 2002-04-23 Fernando Perez <fperez@colorado.edu>
4225 2002-04-23 Fernando Perez <fperez@colorado.edu>
4221
4226
4222 * IPython/Extensions/InterpreterPasteInput.py: new
4227 * IPython/Extensions/InterpreterPasteInput.py: new
4223 syntax-processing module for pasting lines with >>> or ... at the
4228 syntax-processing module for pasting lines with >>> or ... at the
4224 start.
4229 start.
4225
4230
4226 * IPython/Extensions/PhysicalQ_Interactive.py
4231 * IPython/Extensions/PhysicalQ_Interactive.py
4227 (PhysicalQuantityInteractive.__int__): fixed to work with either
4232 (PhysicalQuantityInteractive.__int__): fixed to work with either
4228 Numeric or math.
4233 Numeric or math.
4229
4234
4230 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4235 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4231 provided profiles. Now we have:
4236 provided profiles. Now we have:
4232 -math -> math module as * and cmath with its own namespace.
4237 -math -> math module as * and cmath with its own namespace.
4233 -numeric -> Numeric as *, plus gnuplot & grace
4238 -numeric -> Numeric as *, plus gnuplot & grace
4234 -physics -> same as before
4239 -physics -> same as before
4235
4240
4236 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4241 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4237 user-defined magics wouldn't be found by @magic if they were
4242 user-defined magics wouldn't be found by @magic if they were
4238 defined as class methods. Also cleaned up the namespace search
4243 defined as class methods. Also cleaned up the namespace search
4239 logic and the string building (to use %s instead of many repeated
4244 logic and the string building (to use %s instead of many repeated
4240 string adds).
4245 string adds).
4241
4246
4242 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4247 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4243 of user-defined magics to operate with class methods (cleaner, in
4248 of user-defined magics to operate with class methods (cleaner, in
4244 line with the gnuplot code).
4249 line with the gnuplot code).
4245
4250
4246 2002-04-22 Fernando Perez <fperez@colorado.edu>
4251 2002-04-22 Fernando Perez <fperez@colorado.edu>
4247
4252
4248 * setup.py: updated dependency list so that manual is updated when
4253 * setup.py: updated dependency list so that manual is updated when
4249 all included files change.
4254 all included files change.
4250
4255
4251 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4256 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4252 the delimiter removal option (the fix is ugly right now).
4257 the delimiter removal option (the fix is ugly right now).
4253
4258
4254 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4259 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4255 all of the math profile (quicker loading, no conflict between
4260 all of the math profile (quicker loading, no conflict between
4256 g-9.8 and g-gnuplot).
4261 g-9.8 and g-gnuplot).
4257
4262
4258 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4263 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4259 name of post-mortem files to IPython_crash_report.txt.
4264 name of post-mortem files to IPython_crash_report.txt.
4260
4265
4261 * Cleanup/update of the docs. Added all the new readline info and
4266 * Cleanup/update of the docs. Added all the new readline info and
4262 formatted all lists as 'real lists'.
4267 formatted all lists as 'real lists'.
4263
4268
4264 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4269 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4265 tab-completion options, since the full readline parse_and_bind is
4270 tab-completion options, since the full readline parse_and_bind is
4266 now accessible.
4271 now accessible.
4267
4272
4268 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4273 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4269 handling of readline options. Now users can specify any string to
4274 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
4275 be passed to parse_and_bind(), as well as the delimiters to be
4271 removed.
4276 removed.
4272 (InteractiveShell.__init__): Added __name__ to the global
4277 (InteractiveShell.__init__): Added __name__ to the global
4273 namespace so that things like Itpl which rely on its existence
4278 namespace so that things like Itpl which rely on its existence
4274 don't crash.
4279 don't crash.
4275 (InteractiveShell._prefilter): Defined the default with a _ so
4280 (InteractiveShell._prefilter): Defined the default with a _ so
4276 that prefilter() is easier to override, while the default one
4281 that prefilter() is easier to override, while the default one
4277 remains available.
4282 remains available.
4278
4283
4279 2002-04-18 Fernando Perez <fperez@colorado.edu>
4284 2002-04-18 Fernando Perez <fperez@colorado.edu>
4280
4285
4281 * Added information about pdb in the docs.
4286 * Added information about pdb in the docs.
4282
4287
4283 2002-04-17 Fernando Perez <fperez@colorado.edu>
4288 2002-04-17 Fernando Perez <fperez@colorado.edu>
4284
4289
4285 * IPython/ipmaker.py (make_IPython): added rc_override option to
4290 * IPython/ipmaker.py (make_IPython): added rc_override option to
4286 allow passing config options at creation time which may override
4291 allow passing config options at creation time which may override
4287 anything set in the config files or command line. This is
4292 anything set in the config files or command line. This is
4288 particularly useful for configuring embedded instances.
4293 particularly useful for configuring embedded instances.
4289
4294
4290 2002-04-15 Fernando Perez <fperez@colorado.edu>
4295 2002-04-15 Fernando Perez <fperez@colorado.edu>
4291
4296
4292 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4297 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4293 crash embedded instances because of the input cache falling out of
4298 crash embedded instances because of the input cache falling out of
4294 sync with the output counter.
4299 sync with the output counter.
4295
4300
4296 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4301 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4297 mode which calls pdb after an uncaught exception in IPython itself.
4302 mode which calls pdb after an uncaught exception in IPython itself.
4298
4303
4299 2002-04-14 Fernando Perez <fperez@colorado.edu>
4304 2002-04-14 Fernando Perez <fperez@colorado.edu>
4300
4305
4301 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4306 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4302 readline, fix it back after each call.
4307 readline, fix it back after each call.
4303
4308
4304 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4309 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4305 method to force all access via __call__(), which guarantees that
4310 method to force all access via __call__(), which guarantees that
4306 traceback references are properly deleted.
4311 traceback references are properly deleted.
4307
4312
4308 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4313 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4309 improve printing when pprint is in use.
4314 improve printing when pprint is in use.
4310
4315
4311 2002-04-13 Fernando Perez <fperez@colorado.edu>
4316 2002-04-13 Fernando Perez <fperez@colorado.edu>
4312
4317
4313 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4318 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4314 exceptions aren't caught anymore. If the user triggers one, he
4319 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,
4320 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
4321 just like any other exception. So now @abort will fully kill the
4317 embedded interpreter and the embedding code (unless that happens
4322 embedded interpreter and the embedding code (unless that happens
4318 to catch SystemExit).
4323 to catch SystemExit).
4319
4324
4320 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4325 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4321 and a debugger() method to invoke the interactive pdb debugger
4326 and a debugger() method to invoke the interactive pdb debugger
4322 after printing exception information. Also added the corresponding
4327 after printing exception information. Also added the corresponding
4323 -pdb option and @pdb magic to control this feature, and updated
4328 -pdb option and @pdb magic to control this feature, and updated
4324 the docs. After a suggestion from Christopher Hart
4329 the docs. After a suggestion from Christopher Hart
4325 (hart-AT-caltech.edu).
4330 (hart-AT-caltech.edu).
4326
4331
4327 2002-04-12 Fernando Perez <fperez@colorado.edu>
4332 2002-04-12 Fernando Perez <fperez@colorado.edu>
4328
4333
4329 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4334 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4330 the exception handlers defined by the user (not the CrashHandler)
4335 the exception handlers defined by the user (not the CrashHandler)
4331 so that user exceptions don't trigger an ipython bug report.
4336 so that user exceptions don't trigger an ipython bug report.
4332
4337
4333 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4338 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4334 configurable (it should have always been so).
4339 configurable (it should have always been so).
4335
4340
4336 2002-03-26 Fernando Perez <fperez@colorado.edu>
4341 2002-03-26 Fernando Perez <fperez@colorado.edu>
4337
4342
4338 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4343 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4339 and there to fix embedding namespace issues. This should all be
4344 and there to fix embedding namespace issues. This should all be
4340 done in a more elegant way.
4345 done in a more elegant way.
4341
4346
4342 2002-03-25 Fernando Perez <fperez@colorado.edu>
4347 2002-03-25 Fernando Perez <fperez@colorado.edu>
4343
4348
4344 * IPython/genutils.py (get_home_dir): Try to make it work under
4349 * IPython/genutils.py (get_home_dir): Try to make it work under
4345 win9x also.
4350 win9x also.
4346
4351
4347 2002-03-20 Fernando Perez <fperez@colorado.edu>
4352 2002-03-20 Fernando Perez <fperez@colorado.edu>
4348
4353
4349 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4354 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4350 sys.displayhook untouched upon __init__.
4355 sys.displayhook untouched upon __init__.
4351
4356
4352 2002-03-19 Fernando Perez <fperez@colorado.edu>
4357 2002-03-19 Fernando Perez <fperez@colorado.edu>
4353
4358
4354 * Released 0.2.9 (for embedding bug, basically).
4359 * Released 0.2.9 (for embedding bug, basically).
4355
4360
4356 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4361 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4357 exceptions so that enclosing shell's state can be restored.
4362 exceptions so that enclosing shell's state can be restored.
4358
4363
4359 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4364 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4360 naming conventions in the .ipython/ dir.
4365 naming conventions in the .ipython/ dir.
4361
4366
4362 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4367 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4363 from delimiters list so filenames with - in them get expanded.
4368 from delimiters list so filenames with - in them get expanded.
4364
4369
4365 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4370 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4366 sys.displayhook not being properly restored after an embedded call.
4371 sys.displayhook not being properly restored after an embedded call.
4367
4372
4368 2002-03-18 Fernando Perez <fperez@colorado.edu>
4373 2002-03-18 Fernando Perez <fperez@colorado.edu>
4369
4374
4370 * Released 0.2.8
4375 * Released 0.2.8
4371
4376
4372 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4377 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4373 some files weren't being included in a -upgrade.
4378 some files weren't being included in a -upgrade.
4374 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4379 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4375 on' so that the first tab completes.
4380 on' so that the first tab completes.
4376 (InteractiveShell.handle_magic): fixed bug with spaces around
4381 (InteractiveShell.handle_magic): fixed bug with spaces around
4377 quotes breaking many magic commands.
4382 quotes breaking many magic commands.
4378
4383
4379 * setup.py: added note about ignoring the syntax error messages at
4384 * setup.py: added note about ignoring the syntax error messages at
4380 installation.
4385 installation.
4381
4386
4382 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4387 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4383 streamlining the gnuplot interface, now there's only one magic @gp.
4388 streamlining the gnuplot interface, now there's only one magic @gp.
4384
4389
4385 2002-03-17 Fernando Perez <fperez@colorado.edu>
4390 2002-03-17 Fernando Perez <fperez@colorado.edu>
4386
4391
4387 * IPython/UserConfig/magic_gnuplot.py: new name for the
4392 * IPython/UserConfig/magic_gnuplot.py: new name for the
4388 example-magic_pm.py file. Much enhanced system, now with a shell
4393 example-magic_pm.py file. Much enhanced system, now with a shell
4389 for communicating directly with gnuplot, one command at a time.
4394 for communicating directly with gnuplot, one command at a time.
4390
4395
4391 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4396 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4392 setting __name__=='__main__'.
4397 setting __name__=='__main__'.
4393
4398
4394 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4399 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4395 mini-shell for accessing gnuplot from inside ipython. Should
4400 mini-shell for accessing gnuplot from inside ipython. Should
4396 extend it later for grace access too. Inspired by Arnd's
4401 extend it later for grace access too. Inspired by Arnd's
4397 suggestion.
4402 suggestion.
4398
4403
4399 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4404 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4400 calling magic functions with () in their arguments. Thanks to Arnd
4405 calling magic functions with () in their arguments. Thanks to Arnd
4401 Baecker for pointing this to me.
4406 Baecker for pointing this to me.
4402
4407
4403 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4408 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4404 infinitely for integer or complex arrays (only worked with floats).
4409 infinitely for integer or complex arrays (only worked with floats).
4405
4410
4406 2002-03-16 Fernando Perez <fperez@colorado.edu>
4411 2002-03-16 Fernando Perez <fperez@colorado.edu>
4407
4412
4408 * setup.py: Merged setup and setup_windows into a single script
4413 * setup.py: Merged setup and setup_windows into a single script
4409 which properly handles things for windows users.
4414 which properly handles things for windows users.
4410
4415
4411 2002-03-15 Fernando Perez <fperez@colorado.edu>
4416 2002-03-15 Fernando Perez <fperez@colorado.edu>
4412
4417
4413 * Big change to the manual: now the magics are all automatically
4418 * Big change to the manual: now the magics are all automatically
4414 documented. This information is generated from their docstrings
4419 documented. This information is generated from their docstrings
4415 and put in a latex file included by the manual lyx file. This way
4420 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
4421 we get always up to date information for the magics. The manual
4417 now also has proper version information, also auto-synced.
4422 now also has proper version information, also auto-synced.
4418
4423
4419 For this to work, an undocumented --magic_docstrings option was added.
4424 For this to work, an undocumented --magic_docstrings option was added.
4420
4425
4421 2002-03-13 Fernando Perez <fperez@colorado.edu>
4426 2002-03-13 Fernando Perez <fperez@colorado.edu>
4422
4427
4423 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4428 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4424 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4429 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4425
4430
4426 2002-03-12 Fernando Perez <fperez@colorado.edu>
4431 2002-03-12 Fernando Perez <fperez@colorado.edu>
4427
4432
4428 * IPython/ultraTB.py (TermColors): changed color escapes again to
4433 * IPython/ultraTB.py (TermColors): changed color escapes again to
4429 fix the (old, reintroduced) line-wrapping bug. Basically, if
4434 fix the (old, reintroduced) line-wrapping bug. Basically, if
4430 \001..\002 aren't given in the color escapes, lines get wrapped
4435 \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
4436 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
4437 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).
4438 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4434
4439
4435 2002-03-10 Fernando Perez <fperez@colorado.edu>
4440 2002-03-10 Fernando Perez <fperez@colorado.edu>
4436
4441
4437 * IPython/usage.py (__doc__): Various documentation cleanups and
4442 * IPython/usage.py (__doc__): Various documentation cleanups and
4438 updates, both in usage docstrings and in the manual.
4443 updates, both in usage docstrings and in the manual.
4439
4444
4440 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4445 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4441 handling of caching. Set minimum acceptabe value for having a
4446 handling of caching. Set minimum acceptabe value for having a
4442 cache at 20 values.
4447 cache at 20 values.
4443
4448
4444 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4449 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4445 install_first_time function to a method, renamed it and added an
4450 install_first_time function to a method, renamed it and added an
4446 'upgrade' mode. Now people can update their config directory with
4451 'upgrade' mode. Now people can update their config directory with
4447 a simple command line switch (-upgrade, also new).
4452 a simple command line switch (-upgrade, also new).
4448
4453
4449 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4454 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4450 @file (convenient for automagic users under Python >= 2.2).
4455 @file (convenient for automagic users under Python >= 2.2).
4451 Removed @files (it seemed more like a plural than an abbrev. of
4456 Removed @files (it seemed more like a plural than an abbrev. of
4452 'file show').
4457 'file show').
4453
4458
4454 * IPython/iplib.py (install_first_time): Fixed crash if there were
4459 * IPython/iplib.py (install_first_time): Fixed crash if there were
4455 backup files ('~') in .ipython/ install directory.
4460 backup files ('~') in .ipython/ install directory.
4456
4461
4457 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4462 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4458 system. Things look fine, but these changes are fairly
4463 system. Things look fine, but these changes are fairly
4459 intrusive. Test them for a few days.
4464 intrusive. Test them for a few days.
4460
4465
4461 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4466 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4462 the prompts system. Now all in/out prompt strings are user
4467 the prompts system. Now all in/out prompt strings are user
4463 controllable. This is particularly useful for embedding, as one
4468 controllable. This is particularly useful for embedding, as one
4464 can tag embedded instances with particular prompts.
4469 can tag embedded instances with particular prompts.
4465
4470
4466 Also removed global use of sys.ps1/2, which now allows nested
4471 Also removed global use of sys.ps1/2, which now allows nested
4467 embeddings without any problems. Added command-line options for
4472 embeddings without any problems. Added command-line options for
4468 the prompt strings.
4473 the prompt strings.
4469
4474
4470 2002-03-08 Fernando Perez <fperez@colorado.edu>
4475 2002-03-08 Fernando Perez <fperez@colorado.edu>
4471
4476
4472 * IPython/UserConfig/example-embed-short.py (ipshell): added
4477 * IPython/UserConfig/example-embed-short.py (ipshell): added
4473 example file with the bare minimum code for embedding.
4478 example file with the bare minimum code for embedding.
4474
4479
4475 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4480 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4476 functionality for the embeddable shell to be activated/deactivated
4481 functionality for the embeddable shell to be activated/deactivated
4477 either globally or at each call.
4482 either globally or at each call.
4478
4483
4479 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4484 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4480 rewriting the prompt with '--->' for auto-inputs with proper
4485 rewriting the prompt with '--->' for auto-inputs with proper
4481 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4486 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4482 this is handled by the prompts class itself, as it should.
4487 this is handled by the prompts class itself, as it should.
4483
4488
4484 2002-03-05 Fernando Perez <fperez@colorado.edu>
4489 2002-03-05 Fernando Perez <fperez@colorado.edu>
4485
4490
4486 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4491 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4487 @logstart to avoid name clashes with the math log function.
4492 @logstart to avoid name clashes with the math log function.
4488
4493
4489 * Big updates to X/Emacs section of the manual.
4494 * Big updates to X/Emacs section of the manual.
4490
4495
4491 * Removed ipython_emacs. Milan explained to me how to pass
4496 * Removed ipython_emacs. Milan explained to me how to pass
4492 arguments to ipython through Emacs. Some day I'm going to end up
4497 arguments to ipython through Emacs. Some day I'm going to end up
4493 learning some lisp...
4498 learning some lisp...
4494
4499
4495 2002-03-04 Fernando Perez <fperez@colorado.edu>
4500 2002-03-04 Fernando Perez <fperez@colorado.edu>
4496
4501
4497 * IPython/ipython_emacs: Created script to be used as the
4502 * IPython/ipython_emacs: Created script to be used as the
4498 py-python-command Emacs variable so we can pass IPython
4503 py-python-command Emacs variable so we can pass IPython
4499 parameters. I can't figure out how to tell Emacs directly to pass
4504 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.
4505 parameters to IPython, so a dummy shell script will do it.
4501
4506
4502 Other enhancements made for things to work better under Emacs'
4507 Other enhancements made for things to work better under Emacs'
4503 various types of terminals. Many thanks to Milan Zamazal
4508 various types of terminals. Many thanks to Milan Zamazal
4504 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4509 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4505
4510
4506 2002-03-01 Fernando Perez <fperez@colorado.edu>
4511 2002-03-01 Fernando Perez <fperez@colorado.edu>
4507
4512
4508 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4513 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4509 that loading of readline is now optional. This gives better
4514 that loading of readline is now optional. This gives better
4510 control to emacs users.
4515 control to emacs users.
4511
4516
4512 * IPython/ultraTB.py (__date__): Modified color escape sequences
4517 * IPython/ultraTB.py (__date__): Modified color escape sequences
4513 and now things work fine under xterm and in Emacs' term buffers
4518 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
4519 (though not shell ones). Well, in emacs you get colors, but all
4515 seem to be 'light' colors (no difference between dark and light
4520 seem to be 'light' colors (no difference between dark and light
4516 ones). But the garbage chars are gone, and also in xterms. It
4521 ones). But the garbage chars are gone, and also in xterms. It
4517 seems that now I'm using 'cleaner' ansi sequences.
4522 seems that now I'm using 'cleaner' ansi sequences.
4518
4523
4519 2002-02-21 Fernando Perez <fperez@colorado.edu>
4524 2002-02-21 Fernando Perez <fperez@colorado.edu>
4520
4525
4521 * Released 0.2.7 (mainly to publish the scoping fix).
4526 * Released 0.2.7 (mainly to publish the scoping fix).
4522
4527
4523 * IPython/Logger.py (Logger.logstate): added. A corresponding
4528 * IPython/Logger.py (Logger.logstate): added. A corresponding
4524 @logstate magic was created.
4529 @logstate magic was created.
4525
4530
4526 * IPython/Magic.py: fixed nested scoping problem under Python
4531 * IPython/Magic.py: fixed nested scoping problem under Python
4527 2.1.x (automagic wasn't working).
4532 2.1.x (automagic wasn't working).
4528
4533
4529 2002-02-20 Fernando Perez <fperez@colorado.edu>
4534 2002-02-20 Fernando Perez <fperez@colorado.edu>
4530
4535
4531 * Released 0.2.6.
4536 * Released 0.2.6.
4532
4537
4533 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4538 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4534 option so that logs can come out without any headers at all.
4539 option so that logs can come out without any headers at all.
4535
4540
4536 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4541 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4537 SciPy.
4542 SciPy.
4538
4543
4539 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4544 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4540 that embedded IPython calls don't require vars() to be explicitly
4545 that embedded IPython calls don't require vars() to be explicitly
4541 passed. Now they are extracted from the caller's frame (code
4546 passed. Now they are extracted from the caller's frame (code
4542 snatched from Eric Jones' weave). Added better documentation to
4547 snatched from Eric Jones' weave). Added better documentation to
4543 the section on embedding and the example file.
4548 the section on embedding and the example file.
4544
4549
4545 * IPython/genutils.py (page): Changed so that under emacs, it just
4550 * 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
4551 prints the string. You can then page up and down in the emacs
4547 buffer itself. This is how the builtin help() works.
4552 buffer itself. This is how the builtin help() works.
4548
4553
4549 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4554 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4550 macro scoping: macros need to be executed in the user's namespace
4555 macro scoping: macros need to be executed in the user's namespace
4551 to work as if they had been typed by the user.
4556 to work as if they had been typed by the user.
4552
4557
4553 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4558 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4554 execute automatically (no need to type 'exec...'). They then
4559 execute automatically (no need to type 'exec...'). They then
4555 behave like 'true macros'. The printing system was also modified
4560 behave like 'true macros'. The printing system was also modified
4556 for this to work.
4561 for this to work.
4557
4562
4558 2002-02-19 Fernando Perez <fperez@colorado.edu>
4563 2002-02-19 Fernando Perez <fperez@colorado.edu>
4559
4564
4560 * IPython/genutils.py (page_file): new function for paging files
4565 * IPython/genutils.py (page_file): new function for paging files
4561 in an OS-independent way. Also necessary for file viewing to work
4566 in an OS-independent way. Also necessary for file viewing to work
4562 well inside Emacs buffers.
4567 well inside Emacs buffers.
4563 (page): Added checks for being in an emacs buffer.
4568 (page): Added checks for being in an emacs buffer.
4564 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4569 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4565 same bug in iplib.
4570 same bug in iplib.
4566
4571
4567 2002-02-18 Fernando Perez <fperez@colorado.edu>
4572 2002-02-18 Fernando Perez <fperez@colorado.edu>
4568
4573
4569 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4574 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4570 of readline so that IPython can work inside an Emacs buffer.
4575 of readline so that IPython can work inside an Emacs buffer.
4571
4576
4572 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4577 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4573 method signatures (they weren't really bugs, but it looks cleaner
4578 method signatures (they weren't really bugs, but it looks cleaner
4574 and keeps PyChecker happy).
4579 and keeps PyChecker happy).
4575
4580
4576 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4581 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4577 for implementing various user-defined hooks. Currently only
4582 for implementing various user-defined hooks. Currently only
4578 display is done.
4583 display is done.
4579
4584
4580 * IPython/Prompts.py (CachedOutput._display): changed display
4585 * IPython/Prompts.py (CachedOutput._display): changed display
4581 functions so that they can be dynamically changed by users easily.
4586 functions so that they can be dynamically changed by users easily.
4582
4587
4583 * IPython/Extensions/numeric_formats.py (num_display): added an
4588 * IPython/Extensions/numeric_formats.py (num_display): added an
4584 extension for printing NumPy arrays in flexible manners. It
4589 extension for printing NumPy arrays in flexible manners. It
4585 doesn't do anything yet, but all the structure is in
4590 doesn't do anything yet, but all the structure is in
4586 place. Ultimately the plan is to implement output format control
4591 place. Ultimately the plan is to implement output format control
4587 like in Octave.
4592 like in Octave.
4588
4593
4589 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4594 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4590 methods are found at run-time by all the automatic machinery.
4595 methods are found at run-time by all the automatic machinery.
4591
4596
4592 2002-02-17 Fernando Perez <fperez@colorado.edu>
4597 2002-02-17 Fernando Perez <fperez@colorado.edu>
4593
4598
4594 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4599 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4595 whole file a little.
4600 whole file a little.
4596
4601
4597 * ToDo: closed this document. Now there's a new_design.lyx
4602 * 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
4603 document for all new ideas. Added making a pdf of it for the
4599 end-user distro.
4604 end-user distro.
4600
4605
4601 * IPython/Logger.py (Logger.switch_log): Created this to replace
4606 * IPython/Logger.py (Logger.switch_log): Created this to replace
4602 logon() and logoff(). It also fixes a nasty crash reported by
4607 logon() and logoff(). It also fixes a nasty crash reported by
4603 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4608 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4604
4609
4605 * IPython/iplib.py (complete): got auto-completion to work with
4610 * IPython/iplib.py (complete): got auto-completion to work with
4606 automagic (I had wanted this for a long time).
4611 automagic (I had wanted this for a long time).
4607
4612
4608 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4613 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4609 to @file, since file() is now a builtin and clashes with automagic
4614 to @file, since file() is now a builtin and clashes with automagic
4610 for @file.
4615 for @file.
4611
4616
4612 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4617 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4613 of this was previously in iplib, which had grown to more than 2000
4618 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
4619 lines, way too long. No new functionality, but it makes managing
4615 the code a bit easier.
4620 the code a bit easier.
4616
4621
4617 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4622 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4618 information to crash reports.
4623 information to crash reports.
4619
4624
4620 2002-02-12 Fernando Perez <fperez@colorado.edu>
4625 2002-02-12 Fernando Perez <fperez@colorado.edu>
4621
4626
4622 * Released 0.2.5.
4627 * Released 0.2.5.
4623
4628
4624 2002-02-11 Fernando Perez <fperez@colorado.edu>
4629 2002-02-11 Fernando Perez <fperez@colorado.edu>
4625
4630
4626 * Wrote a relatively complete Windows installer. It puts
4631 * Wrote a relatively complete Windows installer. It puts
4627 everything in place, creates Start Menu entries and fixes the
4632 everything in place, creates Start Menu entries and fixes the
4628 color issues. Nothing fancy, but it works.
4633 color issues. Nothing fancy, but it works.
4629
4634
4630 2002-02-10 Fernando Perez <fperez@colorado.edu>
4635 2002-02-10 Fernando Perez <fperez@colorado.edu>
4631
4636
4632 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4637 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4633 os.path.expanduser() call so that we can type @run ~/myfile.py and
4638 os.path.expanduser() call so that we can type @run ~/myfile.py and
4634 have thigs work as expected.
4639 have thigs work as expected.
4635
4640
4636 * IPython/genutils.py (page): fixed exception handling so things
4641 * IPython/genutils.py (page): fixed exception handling so things
4637 work both in Unix and Windows correctly. Quitting a pager triggers
4642 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
4643 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
4644 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.
4645 of the exception, not just the exception itself. Should be ok now.
4641
4646
4642 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4647 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4643 modified to allow case-insensitive color scheme changes.
4648 modified to allow case-insensitive color scheme changes.
4644
4649
4645 2002-02-09 Fernando Perez <fperez@colorado.edu>
4650 2002-02-09 Fernando Perez <fperez@colorado.edu>
4646
4651
4647 * IPython/genutils.py (native_line_ends): new function to leave
4652 * IPython/genutils.py (native_line_ends): new function to leave
4648 user config files with os-native line-endings.
4653 user config files with os-native line-endings.
4649
4654
4650 * README and manual updates.
4655 * README and manual updates.
4651
4656
4652 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4657 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4653 instead of StringType to catch Unicode strings.
4658 instead of StringType to catch Unicode strings.
4654
4659
4655 * IPython/genutils.py (filefind): fixed bug for paths with
4660 * IPython/genutils.py (filefind): fixed bug for paths with
4656 embedded spaces (very common in Windows).
4661 embedded spaces (very common in Windows).
4657
4662
4658 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4663 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4659 files under Windows, so that they get automatically associated
4664 files under Windows, so that they get automatically associated
4660 with a text editor. Windows makes it a pain to handle
4665 with a text editor. Windows makes it a pain to handle
4661 extension-less files.
4666 extension-less files.
4662
4667
4663 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4668 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4664 warning about readline only occur for Posix. In Windows there's no
4669 warning about readline only occur for Posix. In Windows there's no
4665 way to get readline, so why bother with the warning.
4670 way to get readline, so why bother with the warning.
4666
4671
4667 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4672 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4668 for __str__ instead of dir(self), since dir() changed in 2.2.
4673 for __str__ instead of dir(self), since dir() changed in 2.2.
4669
4674
4670 * Ported to Windows! Tested on XP, I suspect it should work fine
4675 * 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
4676 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
4677 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
4678 porting it there. The XP port was straightforward, showed a few
4674 bugs here and there (fixed all), in particular some string
4679 bugs here and there (fixed all), in particular some string
4675 handling stuff which required considering Unicode strings (which
4680 handling stuff which required considering Unicode strings (which
4676 Windows uses). This is good, but hasn't been too tested :) No
4681 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
4682 fancy installer yet, I'll put a note in the manual so people at
4678 least make manually a shortcut.
4683 least make manually a shortcut.
4679
4684
4680 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4685 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4681 into a single one, "colors". This now controls both prompt and
4686 into a single one, "colors". This now controls both prompt and
4682 exception color schemes, and can be changed both at startup
4687 exception color schemes, and can be changed both at startup
4683 (either via command-line switches or via ipythonrc files) and at
4688 (either via command-line switches or via ipythonrc files) and at
4684 runtime, with @colors.
4689 runtime, with @colors.
4685 (Magic.magic_run): renamed @prun to @run and removed the old
4690 (Magic.magic_run): renamed @prun to @run and removed the old
4686 @run. The two were too similar to warrant keeping both.
4691 @run. The two were too similar to warrant keeping both.
4687
4692
4688 2002-02-03 Fernando Perez <fperez@colorado.edu>
4693 2002-02-03 Fernando Perez <fperez@colorado.edu>
4689
4694
4690 * IPython/iplib.py (install_first_time): Added comment on how to
4695 * IPython/iplib.py (install_first_time): Added comment on how to
4691 configure the color options for first-time users. Put a <return>
4696 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
4697 request at the end so that small-terminal users get a chance to
4693 read the startup info.
4698 read the startup info.
4694
4699
4695 2002-01-23 Fernando Perez <fperez@colorado.edu>
4700 2002-01-23 Fernando Perez <fperez@colorado.edu>
4696
4701
4697 * IPython/iplib.py (CachedOutput.update): Changed output memory
4702 * IPython/iplib.py (CachedOutput.update): Changed output memory
4698 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4703 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
4704 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
4705 very commonly used in interactive work, so the less we need to
4701 type the better off we are.
4706 type the better off we are.
4702 (Magic.magic_prun): updated @prun to better handle the namespaces
4707 (Magic.magic_prun): updated @prun to better handle the namespaces
4703 the file will run in, including a fix for __name__ not being set
4708 the file will run in, including a fix for __name__ not being set
4704 before.
4709 before.
4705
4710
4706 2002-01-20 Fernando Perez <fperez@colorado.edu>
4711 2002-01-20 Fernando Perez <fperez@colorado.edu>
4707
4712
4708 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4713 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4709 extra garbage for Python 2.2. Need to look more carefully into
4714 extra garbage for Python 2.2. Need to look more carefully into
4710 this later.
4715 this later.
4711
4716
4712 2002-01-19 Fernando Perez <fperez@colorado.edu>
4717 2002-01-19 Fernando Perez <fperez@colorado.edu>
4713
4718
4714 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4719 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4715 display SyntaxError exceptions properly formatted when they occur
4720 display SyntaxError exceptions properly formatted when they occur
4716 (they can be triggered by imported code).
4721 (they can be triggered by imported code).
4717
4722
4718 2002-01-18 Fernando Perez <fperez@colorado.edu>
4723 2002-01-18 Fernando Perez <fperez@colorado.edu>
4719
4724
4720 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4725 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4721 SyntaxError exceptions are reported nicely formatted, instead of
4726 SyntaxError exceptions are reported nicely formatted, instead of
4722 spitting out only offset information as before.
4727 spitting out only offset information as before.
4723 (Magic.magic_prun): Added the @prun function for executing
4728 (Magic.magic_prun): Added the @prun function for executing
4724 programs with command line args inside IPython.
4729 programs with command line args inside IPython.
4725
4730
4726 2002-01-16 Fernando Perez <fperez@colorado.edu>
4731 2002-01-16 Fernando Perez <fperez@colorado.edu>
4727
4732
4728 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4733 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4729 to *not* include the last item given in a range. This brings their
4734 to *not* include the last item given in a range. This brings their
4730 behavior in line with Python's slicing:
4735 behavior in line with Python's slicing:
4731 a[n1:n2] -> a[n1]...a[n2-1]
4736 a[n1:n2] -> a[n1]...a[n2-1]
4732 It may be a bit less convenient, but I prefer to stick to Python's
4737 It may be a bit less convenient, but I prefer to stick to Python's
4733 conventions *everywhere*, so users never have to wonder.
4738 conventions *everywhere*, so users never have to wonder.
4734 (Magic.magic_macro): Added @macro function to ease the creation of
4739 (Magic.magic_macro): Added @macro function to ease the creation of
4735 macros.
4740 macros.
4736
4741
4737 2002-01-05 Fernando Perez <fperez@colorado.edu>
4742 2002-01-05 Fernando Perez <fperez@colorado.edu>
4738
4743
4739 * Released 0.2.4.
4744 * Released 0.2.4.
4740
4745
4741 * IPython/iplib.py (Magic.magic_pdef):
4746 * IPython/iplib.py (Magic.magic_pdef):
4742 (InteractiveShell.safe_execfile): report magic lines and error
4747 (InteractiveShell.safe_execfile): report magic lines and error
4743 lines without line numbers so one can easily copy/paste them for
4748 lines without line numbers so one can easily copy/paste them for
4744 re-execution.
4749 re-execution.
4745
4750
4746 * Updated manual with recent changes.
4751 * Updated manual with recent changes.
4747
4752
4748 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4753 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4749 docstring printing when class? is called. Very handy for knowing
4754 docstring printing when class? is called. Very handy for knowing
4750 how to create class instances (as long as __init__ is well
4755 how to create class instances (as long as __init__ is well
4751 documented, of course :)
4756 documented, of course :)
4752 (Magic.magic_doc): print both class and constructor docstrings.
4757 (Magic.magic_doc): print both class and constructor docstrings.
4753 (Magic.magic_pdef): give constructor info if passed a class and
4758 (Magic.magic_pdef): give constructor info if passed a class and
4754 __call__ info for callable object instances.
4759 __call__ info for callable object instances.
4755
4760
4756 2002-01-04 Fernando Perez <fperez@colorado.edu>
4761 2002-01-04 Fernando Perez <fperez@colorado.edu>
4757
4762
4758 * Made deep_reload() off by default. It doesn't always work
4763 * 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
4764 exactly as intended, so it's probably safer to have it off. It's
4760 still available as dreload() anyway, so nothing is lost.
4765 still available as dreload() anyway, so nothing is lost.
4761
4766
4762 2002-01-02 Fernando Perez <fperez@colorado.edu>
4767 2002-01-02 Fernando Perez <fperez@colorado.edu>
4763
4768
4764 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4769 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4765 so I wanted an updated release).
4770 so I wanted an updated release).
4766
4771
4767 2001-12-27 Fernando Perez <fperez@colorado.edu>
4772 2001-12-27 Fernando Perez <fperez@colorado.edu>
4768
4773
4769 * IPython/iplib.py (InteractiveShell.interact): Added the original
4774 * IPython/iplib.py (InteractiveShell.interact): Added the original
4770 code from 'code.py' for this module in order to change the
4775 code from 'code.py' for this module in order to change the
4771 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4776 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4772 the history cache would break when the user hit Ctrl-C, and
4777 the history cache would break when the user hit Ctrl-C, and
4773 interact() offers no way to add any hooks to it.
4778 interact() offers no way to add any hooks to it.
4774
4779
4775 2001-12-23 Fernando Perez <fperez@colorado.edu>
4780 2001-12-23 Fernando Perez <fperez@colorado.edu>
4776
4781
4777 * setup.py: added check for 'MANIFEST' before trying to remove
4782 * setup.py: added check for 'MANIFEST' before trying to remove
4778 it. Thanks to Sean Reifschneider.
4783 it. Thanks to Sean Reifschneider.
4779
4784
4780 2001-12-22 Fernando Perez <fperez@colorado.edu>
4785 2001-12-22 Fernando Perez <fperez@colorado.edu>
4781
4786
4782 * Released 0.2.2.
4787 * Released 0.2.2.
4783
4788
4784 * Finished (reasonably) writing the manual. Later will add the
4789 * Finished (reasonably) writing the manual. Later will add the
4785 python-standard navigation stylesheets, but for the time being
4790 python-standard navigation stylesheets, but for the time being
4786 it's fairly complete. Distribution will include html and pdf
4791 it's fairly complete. Distribution will include html and pdf
4787 versions.
4792 versions.
4788
4793
4789 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4794 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4790 (MayaVi author).
4795 (MayaVi author).
4791
4796
4792 2001-12-21 Fernando Perez <fperez@colorado.edu>
4797 2001-12-21 Fernando Perez <fperez@colorado.edu>
4793
4798
4794 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4799 * 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
4800 good public release, I think (with the manual and the distutils
4796 installer). The manual can use some work, but that can go
4801 installer). The manual can use some work, but that can go
4797 slowly. Otherwise I think it's quite nice for end users. Next
4802 slowly. Otherwise I think it's quite nice for end users. Next
4798 summer, rewrite the guts of it...
4803 summer, rewrite the guts of it...
4799
4804
4800 * Changed format of ipythonrc files to use whitespace as the
4805 * Changed format of ipythonrc files to use whitespace as the
4801 separator instead of an explicit '='. Cleaner.
4806 separator instead of an explicit '='. Cleaner.
4802
4807
4803 2001-12-20 Fernando Perez <fperez@colorado.edu>
4808 2001-12-20 Fernando Perez <fperez@colorado.edu>
4804
4809
4805 * Started a manual in LyX. For now it's just a quick merge of the
4810 * 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
4811 various internal docstrings and READMEs. Later it may grow into a
4807 nice, full-blown manual.
4812 nice, full-blown manual.
4808
4813
4809 * Set up a distutils based installer. Installation should now be
4814 * Set up a distutils based installer. Installation should now be
4810 trivially simple for end-users.
4815 trivially simple for end-users.
4811
4816
4812 2001-12-11 Fernando Perez <fperez@colorado.edu>
4817 2001-12-11 Fernando Perez <fperez@colorado.edu>
4813
4818
4814 * Released 0.2.0. First public release, announced it at
4819 * Released 0.2.0. First public release, announced it at
4815 comp.lang.python. From now on, just bugfixes...
4820 comp.lang.python. From now on, just bugfixes...
4816
4821
4817 * Went through all the files, set copyright/license notices and
4822 * Went through all the files, set copyright/license notices and
4818 cleaned up things. Ready for release.
4823 cleaned up things. Ready for release.
4819
4824
4820 2001-12-10 Fernando Perez <fperez@colorado.edu>
4825 2001-12-10 Fernando Perez <fperez@colorado.edu>
4821
4826
4822 * Changed the first-time installer not to use tarfiles. It's more
4827 * Changed the first-time installer not to use tarfiles. It's more
4823 robust now and less unix-dependent. Also makes it easier for
4828 robust now and less unix-dependent. Also makes it easier for
4824 people to later upgrade versions.
4829 people to later upgrade versions.
4825
4830
4826 * Changed @exit to @abort to reflect the fact that it's pretty
4831 * Changed @exit to @abort to reflect the fact that it's pretty
4827 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4832 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4828 becomes significant only when IPyhton is embedded: in that case,
4833 becomes significant only when IPyhton is embedded: in that case,
4829 C-D closes IPython only, but @abort kills the enclosing program
4834 C-D closes IPython only, but @abort kills the enclosing program
4830 too (unless it had called IPython inside a try catching
4835 too (unless it had called IPython inside a try catching
4831 SystemExit).
4836 SystemExit).
4832
4837
4833 * Created Shell module which exposes the actuall IPython Shell
4838 * Created Shell module which exposes the actuall IPython Shell
4834 classes, currently the normal and the embeddable one. This at
4839 classes, currently the normal and the embeddable one. This at
4835 least offers a stable interface we won't need to change when
4840 least offers a stable interface we won't need to change when
4836 (later) the internals are rewritten. That rewrite will be confined
4841 (later) the internals are rewritten. That rewrite will be confined
4837 to iplib and ipmaker, but the Shell interface should remain as is.
4842 to iplib and ipmaker, but the Shell interface should remain as is.
4838
4843
4839 * Added embed module which offers an embeddable IPShell object,
4844 * Added embed module which offers an embeddable IPShell object,
4840 useful to fire up IPython *inside* a running program. Great for
4845 useful to fire up IPython *inside* a running program. Great for
4841 debugging or dynamical data analysis.
4846 debugging or dynamical data analysis.
4842
4847
4843 2001-12-08 Fernando Perez <fperez@colorado.edu>
4848 2001-12-08 Fernando Perez <fperez@colorado.edu>
4844
4849
4845 * Fixed small bug preventing seeing info from methods of defined
4850 * Fixed small bug preventing seeing info from methods of defined
4846 objects (incorrect namespace in _ofind()).
4851 objects (incorrect namespace in _ofind()).
4847
4852
4848 * Documentation cleanup. Moved the main usage docstrings to a
4853 * Documentation cleanup. Moved the main usage docstrings to a
4849 separate file, usage.py (cleaner to maintain, and hopefully in the
4854 separate file, usage.py (cleaner to maintain, and hopefully in the
4850 future some perlpod-like way of producing interactive, man and
4855 future some perlpod-like way of producing interactive, man and
4851 html docs out of it will be found).
4856 html docs out of it will be found).
4852
4857
4853 * Added @profile to see your profile at any time.
4858 * Added @profile to see your profile at any time.
4854
4859
4855 * Added @p as an alias for 'print'. It's especially convenient if
4860 * Added @p as an alias for 'print'. It's especially convenient if
4856 using automagic ('p x' prints x).
4861 using automagic ('p x' prints x).
4857
4862
4858 * Small cleanups and fixes after a pychecker run.
4863 * Small cleanups and fixes after a pychecker run.
4859
4864
4860 * Changed the @cd command to handle @cd - and @cd -<n> for
4865 * Changed the @cd command to handle @cd - and @cd -<n> for
4861 visiting any directory in _dh.
4866 visiting any directory in _dh.
4862
4867
4863 * Introduced _dh, a history of visited directories. @dhist prints
4868 * Introduced _dh, a history of visited directories. @dhist prints
4864 it out with numbers.
4869 it out with numbers.
4865
4870
4866 2001-12-07 Fernando Perez <fperez@colorado.edu>
4871 2001-12-07 Fernando Perez <fperez@colorado.edu>
4867
4872
4868 * Released 0.1.22
4873 * Released 0.1.22
4869
4874
4870 * Made initialization a bit more robust against invalid color
4875 * Made initialization a bit more robust against invalid color
4871 options in user input (exit, not traceback-crash).
4876 options in user input (exit, not traceback-crash).
4872
4877
4873 * Changed the bug crash reporter to write the report only in the
4878 * 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
4879 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
4880 hard disks with crash files all over the place. Also print on
4876 screen the necessary mail command.
4881 screen the necessary mail command.
4877
4882
4878 * With the new ultraTB, implemented LightBG color scheme for light
4883 * With the new ultraTB, implemented LightBG color scheme for light
4879 background terminals. A lot of people like white backgrounds, so I
4884 background terminals. A lot of people like white backgrounds, so I
4880 guess we should at least give them something readable.
4885 guess we should at least give them something readable.
4881
4886
4882 2001-12-06 Fernando Perez <fperez@colorado.edu>
4887 2001-12-06 Fernando Perez <fperez@colorado.edu>
4883
4888
4884 * Modified the structure of ultraTB. Now there's a proper class
4889 * Modified the structure of ultraTB. Now there's a proper class
4885 for tables of color schemes which allow adding schemes easily and
4890 for tables of color schemes which allow adding schemes easily and
4886 switching the active scheme without creating a new instance every
4891 switching the active scheme without creating a new instance every
4887 time (which was ridiculous). The syntax for creating new schemes
4892 time (which was ridiculous). The syntax for creating new schemes
4888 is also cleaner. I think ultraTB is finally done, with a clean
4893 is also cleaner. I think ultraTB is finally done, with a clean
4889 class structure. Names are also much cleaner (now there's proper
4894 class structure. Names are also much cleaner (now there's proper
4890 color tables, no need for every variable to also have 'color' in
4895 color tables, no need for every variable to also have 'color' in
4891 its name).
4896 its name).
4892
4897
4893 * Broke down genutils into separate files. Now genutils only
4898 * Broke down genutils into separate files. Now genutils only
4894 contains utility functions, and classes have been moved to their
4899 contains utility functions, and classes have been moved to their
4895 own files (they had enough independent functionality to warrant
4900 own files (they had enough independent functionality to warrant
4896 it): ConfigLoader, OutputTrap, Struct.
4901 it): ConfigLoader, OutputTrap, Struct.
4897
4902
4898 2001-12-05 Fernando Perez <fperez@colorado.edu>
4903 2001-12-05 Fernando Perez <fperez@colorado.edu>
4899
4904
4900 * IPython turns 21! Released version 0.1.21, as a candidate for
4905 * IPython turns 21! Released version 0.1.21, as a candidate for
4901 public consumption. If all goes well, release in a few days.
4906 public consumption. If all goes well, release in a few days.
4902
4907
4903 * Fixed path bug (files in Extensions/ directory wouldn't be found
4908 * Fixed path bug (files in Extensions/ directory wouldn't be found
4904 unless IPython/ was explicitly in sys.path).
4909 unless IPython/ was explicitly in sys.path).
4905
4910
4906 * Extended the FlexCompleter class as MagicCompleter to allow
4911 * Extended the FlexCompleter class as MagicCompleter to allow
4907 completion of @-starting lines.
4912 completion of @-starting lines.
4908
4913
4909 * Created __release__.py file as a central repository for release
4914 * Created __release__.py file as a central repository for release
4910 info that other files can read from.
4915 info that other files can read from.
4911
4916
4912 * Fixed small bug in logging: when logging was turned on in
4917 * Fixed small bug in logging: when logging was turned on in
4913 mid-session, old lines with special meanings (!@?) were being
4918 mid-session, old lines with special meanings (!@?) were being
4914 logged without the prepended comment, which is necessary since
4919 logged without the prepended comment, which is necessary since
4915 they are not truly valid python syntax. This should make session
4920 they are not truly valid python syntax. This should make session
4916 restores produce less errors.
4921 restores produce less errors.
4917
4922
4918 * The namespace cleanup forced me to make a FlexCompleter class
4923 * The namespace cleanup forced me to make a FlexCompleter class
4919 which is nothing but a ripoff of rlcompleter, but with selectable
4924 which is nothing but a ripoff of rlcompleter, but with selectable
4920 namespace (rlcompleter only works in __main__.__dict__). I'll try
4925 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
4926 to submit a note to the authors to see if this change can be
4922 incorporated in future rlcompleter releases (Dec.6: done)
4927 incorporated in future rlcompleter releases (Dec.6: done)
4923
4928
4924 * More fixes to namespace handling. It was a mess! Now all
4929 * More fixes to namespace handling. It was a mess! Now all
4925 explicit references to __main__.__dict__ are gone (except when
4930 explicit references to __main__.__dict__ are gone (except when
4926 really needed) and everything is handled through the namespace
4931 really needed) and everything is handled through the namespace
4927 dicts in the IPython instance. We seem to be getting somewhere
4932 dicts in the IPython instance. We seem to be getting somewhere
4928 with this, finally...
4933 with this, finally...
4929
4934
4930 * Small documentation updates.
4935 * Small documentation updates.
4931
4936
4932 * Created the Extensions directory under IPython (with an
4937 * Created the Extensions directory under IPython (with an
4933 __init__.py). Put the PhysicalQ stuff there. This directory should
4938 __init__.py). Put the PhysicalQ stuff there. This directory should
4934 be used for all special-purpose extensions.
4939 be used for all special-purpose extensions.
4935
4940
4936 * File renaming:
4941 * File renaming:
4937 ipythonlib --> ipmaker
4942 ipythonlib --> ipmaker
4938 ipplib --> iplib
4943 ipplib --> iplib
4939 This makes a bit more sense in terms of what these files actually do.
4944 This makes a bit more sense in terms of what these files actually do.
4940
4945
4941 * Moved all the classes and functions in ipythonlib to ipplib, so
4946 * Moved all the classes and functions in ipythonlib to ipplib, so
4942 now ipythonlib only has make_IPython(). This will ease up its
4947 now ipythonlib only has make_IPython(). This will ease up its
4943 splitting in smaller functional chunks later.
4948 splitting in smaller functional chunks later.
4944
4949
4945 * Cleaned up (done, I think) output of @whos. Better column
4950 * 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
4951 formatting, and now shows str(var) for as much as it can, which is
4947 typically what one gets with a 'print var'.
4952 typically what one gets with a 'print var'.
4948
4953
4949 2001-12-04 Fernando Perez <fperez@colorado.edu>
4954 2001-12-04 Fernando Perez <fperez@colorado.edu>
4950
4955
4951 * Fixed namespace problems. Now builtin/IPyhton/user names get
4956 * Fixed namespace problems. Now builtin/IPyhton/user names get
4952 properly reported in their namespace. Internal namespace handling
4957 properly reported in their namespace. Internal namespace handling
4953 is finally getting decent (not perfect yet, but much better than
4958 is finally getting decent (not perfect yet, but much better than
4954 the ad-hoc mess we had).
4959 the ad-hoc mess we had).
4955
4960
4956 * Removed -exit option. If people just want to run a python
4961 * Removed -exit option. If people just want to run a python
4957 script, that's what the normal interpreter is for. Less
4962 script, that's what the normal interpreter is for. Less
4958 unnecessary options, less chances for bugs.
4963 unnecessary options, less chances for bugs.
4959
4964
4960 * Added a crash handler which generates a complete post-mortem if
4965 * Added a crash handler which generates a complete post-mortem if
4961 IPython crashes. This will help a lot in tracking bugs down the
4966 IPython crashes. This will help a lot in tracking bugs down the
4962 road.
4967 road.
4963
4968
4964 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4969 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4965 which were boud to functions being reassigned would bypass the
4970 which were boud to functions being reassigned would bypass the
4966 logger, breaking the sync of _il with the prompt counter. This
4971 logger, breaking the sync of _il with the prompt counter. This
4967 would then crash IPython later when a new line was logged.
4972 would then crash IPython later when a new line was logged.
4968
4973
4969 2001-12-02 Fernando Perez <fperez@colorado.edu>
4974 2001-12-02 Fernando Perez <fperez@colorado.edu>
4970
4975
4971 * Made IPython a package. This means people don't have to clutter
4976 * Made IPython a package. This means people don't have to clutter
4972 their sys.path with yet another directory. Changed the INSTALL
4977 their sys.path with yet another directory. Changed the INSTALL
4973 file accordingly.
4978 file accordingly.
4974
4979
4975 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4980 * 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
4981 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
4982 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
4983 read. Todo: write a generic table_format() which takes a list of
4979 lists and prints it nicely formatted, with optional row/column
4984 lists and prints it nicely formatted, with optional row/column
4980 separators and proper padding and justification.
4985 separators and proper padding and justification.
4981
4986
4982 * Released 0.1.20
4987 * Released 0.1.20
4983
4988
4984 * Fixed bug in @log which would reverse the inputcache list (a
4989 * Fixed bug in @log which would reverse the inputcache list (a
4985 copy operation was missing).
4990 copy operation was missing).
4986
4991
4987 * Code cleanup. @config was changed to use page(). Better, since
4992 * Code cleanup. @config was changed to use page(). Better, since
4988 its output is always quite long.
4993 its output is always quite long.
4989
4994
4990 * Itpl is back as a dependency. I was having too many problems
4995 * Itpl is back as a dependency. I was having too many problems
4991 getting the parametric aliases to work reliably, and it's just
4996 getting the parametric aliases to work reliably, and it's just
4992 easier to code weird string operations with it than playing %()s
4997 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.
4998 games. It's only ~6k, so I don't think it's too big a deal.
4994
4999
4995 * Found (and fixed) a very nasty bug with history. !lines weren't
5000 * Found (and fixed) a very nasty bug with history. !lines weren't
4996 getting cached, and the out of sync caches would crash
5001 getting cached, and the out of sync caches would crash
4997 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5002 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4998 division of labor a bit better. Bug fixed, cleaner structure.
5003 division of labor a bit better. Bug fixed, cleaner structure.
4999
5004
5000 2001-12-01 Fernando Perez <fperez@colorado.edu>
5005 2001-12-01 Fernando Perez <fperez@colorado.edu>
5001
5006
5002 * Released 0.1.19
5007 * Released 0.1.19
5003
5008
5004 * Added option -n to @hist to prevent line number printing. Much
5009 * Added option -n to @hist to prevent line number printing. Much
5005 easier to copy/paste code this way.
5010 easier to copy/paste code this way.
5006
5011
5007 * Created global _il to hold the input list. Allows easy
5012 * Created global _il to hold the input list. Allows easy
5008 re-execution of blocks of code by slicing it (inspired by Janko's
5013 re-execution of blocks of code by slicing it (inspired by Janko's
5009 comment on 'macros').
5014 comment on 'macros').
5010
5015
5011 * Small fixes and doc updates.
5016 * Small fixes and doc updates.
5012
5017
5013 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5018 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5014 much too fragile with automagic. Handles properly multi-line
5019 much too fragile with automagic. Handles properly multi-line
5015 statements and takes parameters.
5020 statements and takes parameters.
5016
5021
5017 2001-11-30 Fernando Perez <fperez@colorado.edu>
5022 2001-11-30 Fernando Perez <fperez@colorado.edu>
5018
5023
5019 * Version 0.1.18 released.
5024 * Version 0.1.18 released.
5020
5025
5021 * Fixed nasty namespace bug in initial module imports.
5026 * Fixed nasty namespace bug in initial module imports.
5022
5027
5023 * Added copyright/license notes to all code files (except
5028 * Added copyright/license notes to all code files (except
5024 DPyGetOpt). For the time being, LGPL. That could change.
5029 DPyGetOpt). For the time being, LGPL. That could change.
5025
5030
5026 * Rewrote a much nicer README, updated INSTALL, cleaned up
5031 * Rewrote a much nicer README, updated INSTALL, cleaned up
5027 ipythonrc-* samples.
5032 ipythonrc-* samples.
5028
5033
5029 * Overall code/documentation cleanup. Basically ready for
5034 * Overall code/documentation cleanup. Basically ready for
5030 release. Only remaining thing: licence decision (LGPL?).
5035 release. Only remaining thing: licence decision (LGPL?).
5031
5036
5032 * Converted load_config to a class, ConfigLoader. Now recursion
5037 * Converted load_config to a class, ConfigLoader. Now recursion
5033 control is better organized. Doesn't include the same file twice.
5038 control is better organized. Doesn't include the same file twice.
5034
5039
5035 2001-11-29 Fernando Perez <fperez@colorado.edu>
5040 2001-11-29 Fernando Perez <fperez@colorado.edu>
5036
5041
5037 * Got input history working. Changed output history variables from
5042 * 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
5043 _p to _o so that _i is for input and _o for output. Just cleaner
5039 convention.
5044 convention.
5040
5045
5041 * Implemented parametric aliases. This pretty much allows the
5046 * Implemented parametric aliases. This pretty much allows the
5042 alias system to offer full-blown shell convenience, I think.
5047 alias system to offer full-blown shell convenience, I think.
5043
5048
5044 * Version 0.1.17 released, 0.1.18 opened.
5049 * Version 0.1.17 released, 0.1.18 opened.
5045
5050
5046 * dot_ipython/ipythonrc (alias): added documentation.
5051 * dot_ipython/ipythonrc (alias): added documentation.
5047 (xcolor): Fixed small bug (xcolors -> xcolor)
5052 (xcolor): Fixed small bug (xcolors -> xcolor)
5048
5053
5049 * Changed the alias system. Now alias is a magic command to define
5054 * Changed the alias system. Now alias is a magic command to define
5050 aliases just like the shell. Rationale: the builtin magics should
5055 aliases just like the shell. Rationale: the builtin magics should
5051 be there for things deeply connected to IPython's
5056 be there for things deeply connected to IPython's
5052 architecture. And this is a much lighter system for what I think
5057 architecture. And this is a much lighter system for what I think
5053 is the really important feature: allowing users to define quickly
5058 is the really important feature: allowing users to define quickly
5054 magics that will do shell things for them, so they can customize
5059 magics that will do shell things for them, so they can customize
5055 IPython easily to match their work habits. If someone is really
5060 IPython easily to match their work habits. If someone is really
5056 desperate to have another name for a builtin alias, they can
5061 desperate to have another name for a builtin alias, they can
5057 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5062 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5058 works.
5063 works.
5059
5064
5060 2001-11-28 Fernando Perez <fperez@colorado.edu>
5065 2001-11-28 Fernando Perez <fperez@colorado.edu>
5061
5066
5062 * Changed @file so that it opens the source file at the proper
5067 * Changed @file so that it opens the source file at the proper
5063 line. Since it uses less, if your EDITOR environment is
5068 line. Since it uses less, if your EDITOR environment is
5064 configured, typing v will immediately open your editor of choice
5069 configured, typing v will immediately open your editor of choice
5065 right at the line where the object is defined. Not as quick as
5070 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
5071 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
5072 works. And I don't have to worry about writing @edit to deal with
5068 all the editors, less does that.
5073 all the editors, less does that.
5069
5074
5070 * Version 0.1.16 released, 0.1.17 opened.
5075 * Version 0.1.16 released, 0.1.17 opened.
5071
5076
5072 * Fixed some nasty bugs in the page/page_dumb combo that could
5077 * Fixed some nasty bugs in the page/page_dumb combo that could
5073 crash IPython.
5078 crash IPython.
5074
5079
5075 2001-11-27 Fernando Perez <fperez@colorado.edu>
5080 2001-11-27 Fernando Perez <fperez@colorado.edu>
5076
5081
5077 * Version 0.1.15 released, 0.1.16 opened.
5082 * Version 0.1.15 released, 0.1.16 opened.
5078
5083
5079 * Finally got ? and ?? to work for undefined things: now it's
5084 * Finally got ? and ?? to work for undefined things: now it's
5080 possible to type {}.get? and get information about the get method
5085 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
5086 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,
5087 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
5088 os?, os.path?, os.path.abspath? all work. This is great, took some
5084 work in _ofind.
5089 work in _ofind.
5085
5090
5086 * Fixed more bugs with logging. The sanest way to do it was to add
5091 * 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
5092 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
5093 option was a request of Janko's). I think it's finally clean
5089 (famous last words).
5094 (famous last words).
5090
5095
5091 * Added a page_dumb() pager which does a decent job of paging on
5096 * 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
5097 screen, if better things (like less) aren't available. One less
5093 unix dependency (someday maybe somebody will port this to
5098 unix dependency (someday maybe somebody will port this to
5094 windows).
5099 windows).
5095
5100
5096 * Fixed problem in magic_log: would lock of logging out if log
5101 * Fixed problem in magic_log: would lock of logging out if log
5097 creation failed (because it would still think it had succeeded).
5102 creation failed (because it would still think it had succeeded).
5098
5103
5099 * Improved the page() function using curses to auto-detect screen
5104 * Improved the page() function using curses to auto-detect screen
5100 size. Now it can make a much better decision on whether to print
5105 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
5106 or page a string. Option screen_length was modified: a value 0
5102 means auto-detect, and that's the default now.
5107 means auto-detect, and that's the default now.
5103
5108
5104 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5109 * 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
5110 go out. I'll test it for a few days, then talk to Janko about
5106 licences and announce it.
5111 licences and announce it.
5107
5112
5108 * Fixed the length of the auto-generated ---> prompt which appears
5113 * Fixed the length of the auto-generated ---> prompt which appears
5109 for auto-parens and auto-quotes. Getting this right isn't trivial,
5114 for auto-parens and auto-quotes. Getting this right isn't trivial,
5110 with all the color escapes, different prompt types and optional
5115 with all the color escapes, different prompt types and optional
5111 separators. But it seems to be working in all the combinations.
5116 separators. But it seems to be working in all the combinations.
5112
5117
5113 2001-11-26 Fernando Perez <fperez@colorado.edu>
5118 2001-11-26 Fernando Perez <fperez@colorado.edu>
5114
5119
5115 * Wrote a regexp filter to get option types from the option names
5120 * Wrote a regexp filter to get option types from the option names
5116 string. This eliminates the need to manually keep two duplicate
5121 string. This eliminates the need to manually keep two duplicate
5117 lists.
5122 lists.
5118
5123
5119 * Removed the unneeded check_option_names. Now options are handled
5124 * 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
5125 in a much saner manner and it's easy to visually check that things
5121 are ok.
5126 are ok.
5122
5127
5123 * Updated version numbers on all files I modified to carry a
5128 * Updated version numbers on all files I modified to carry a
5124 notice so Janko and Nathan have clear version markers.
5129 notice so Janko and Nathan have clear version markers.
5125
5130
5126 * Updated docstring for ultraTB with my changes. I should send
5131 * Updated docstring for ultraTB with my changes. I should send
5127 this to Nathan.
5132 this to Nathan.
5128
5133
5129 * Lots of small fixes. Ran everything through pychecker again.
5134 * Lots of small fixes. Ran everything through pychecker again.
5130
5135
5131 * Made loading of deep_reload an cmd line option. If it's not too
5136 * 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
5137 kosher, now people can just disable it. With -nodeep_reload it's
5133 still available as dreload(), it just won't overwrite reload().
5138 still available as dreload(), it just won't overwrite reload().
5134
5139
5135 * Moved many options to the no| form (-opt and -noopt
5140 * Moved many options to the no| form (-opt and -noopt
5136 accepted). Cleaner.
5141 accepted). Cleaner.
5137
5142
5138 * Changed magic_log so that if called with no parameters, it uses
5143 * Changed magic_log so that if called with no parameters, it uses
5139 'rotate' mode. That way auto-generated logs aren't automatically
5144 'rotate' mode. That way auto-generated logs aren't automatically
5140 over-written. For normal logs, now a backup is made if it exists
5145 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
5146 (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.
5147 Logger class to support this. This was a request by Janko.
5143
5148
5144 * Added @logoff/@logon to stop/restart an active log.
5149 * Added @logoff/@logon to stop/restart an active log.
5145
5150
5146 * Fixed a lot of bugs in log saving/replay. It was pretty
5151 * Fixed a lot of bugs in log saving/replay. It was pretty
5147 broken. Now special lines (!@,/) appear properly in the command
5152 broken. Now special lines (!@,/) appear properly in the command
5148 history after a log replay.
5153 history after a log replay.
5149
5154
5150 * Tried and failed to implement full session saving via pickle. My
5155 * Tried and failed to implement full session saving via pickle. My
5151 idea was to pickle __main__.__dict__, but modules can't be
5156 idea was to pickle __main__.__dict__, but modules can't be
5152 pickled. This would be a better alternative to replaying logs, but
5157 pickled. This would be a better alternative to replaying logs, but
5153 seems quite tricky to get to work. Changed -session to be called
5158 seems quite tricky to get to work. Changed -session to be called
5154 -logplay, which more accurately reflects what it does. And if we
5159 -logplay, which more accurately reflects what it does. And if we
5155 ever get real session saving working, -session is now available.
5160 ever get real session saving working, -session is now available.
5156
5161
5157 * Implemented color schemes for prompts also. As for tracebacks,
5162 * Implemented color schemes for prompts also. As for tracebacks,
5158 currently only NoColor and Linux are supported. But now the
5163 currently only NoColor and Linux are supported. But now the
5159 infrastructure is in place, based on a generic ColorScheme
5164 infrastructure is in place, based on a generic ColorScheme
5160 class. So writing and activating new schemes both for the prompts
5165 class. So writing and activating new schemes both for the prompts
5161 and the tracebacks should be straightforward.
5166 and the tracebacks should be straightforward.
5162
5167
5163 * Version 0.1.13 released, 0.1.14 opened.
5168 * Version 0.1.13 released, 0.1.14 opened.
5164
5169
5165 * Changed handling of options for output cache. Now counter is
5170 * Changed handling of options for output cache. Now counter is
5166 hardwired starting at 1 and one specifies the maximum number of
5171 hardwired starting at 1 and one specifies the maximum number of
5167 entries *in the outcache* (not the max prompt counter). This is
5172 entries *in the outcache* (not the max prompt counter). This is
5168 much better, since many statements won't increase the cache
5173 much better, since many statements won't increase the cache
5169 count. It also eliminated some confusing options, now there's only
5174 count. It also eliminated some confusing options, now there's only
5170 one: cache_size.
5175 one: cache_size.
5171
5176
5172 * Added 'alias' magic function and magic_alias option in the
5177 * Added 'alias' magic function and magic_alias option in the
5173 ipythonrc file. Now the user can easily define whatever names he
5178 ipythonrc file. Now the user can easily define whatever names he
5174 wants for the magic functions without having to play weird
5179 wants for the magic functions without having to play weird
5175 namespace games. This gives IPython a real shell-like feel.
5180 namespace games. This gives IPython a real shell-like feel.
5176
5181
5177 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5182 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5178 @ or not).
5183 @ or not).
5179
5184
5180 This was one of the last remaining 'visible' bugs (that I know
5185 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
5186 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
5187 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5183 about licensing).
5188 about licensing).
5184
5189
5185 2001-11-25 Fernando Perez <fperez@colorado.edu>
5190 2001-11-25 Fernando Perez <fperez@colorado.edu>
5186
5191
5187 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5192 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5188 there's a cleaner distinction between what ? and ?? show.
5193 there's a cleaner distinction between what ? and ?? show.
5189
5194
5190 * Added screen_length option. Now the user can define his own
5195 * Added screen_length option. Now the user can define his own
5191 screen size for page() operations.
5196 screen size for page() operations.
5192
5197
5193 * Implemented magic shell-like functions with automatic code
5198 * Implemented magic shell-like functions with automatic code
5194 generation. Now adding another function is just a matter of adding
5199 generation. Now adding another function is just a matter of adding
5195 an entry to a dict, and the function is dynamically generated at
5200 an entry to a dict, and the function is dynamically generated at
5196 run-time. Python has some really cool features!
5201 run-time. Python has some really cool features!
5197
5202
5198 * Renamed many options to cleanup conventions a little. Now all
5203 * Renamed many options to cleanup conventions a little. Now all
5199 are lowercase, and only underscores where needed. Also in the code
5204 are lowercase, and only underscores where needed. Also in the code
5200 option name tables are clearer.
5205 option name tables are clearer.
5201
5206
5202 * Changed prompts a little. Now input is 'In [n]:' instead of
5207 * Changed prompts a little. Now input is 'In [n]:' instead of
5203 'In[n]:='. This allows it the numbers to be aligned with the
5208 '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
5209 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5205 Python (it was a Mathematica thing). The '...' continuation prompt
5210 Python (it was a Mathematica thing). The '...' continuation prompt
5206 was also changed a little to align better.
5211 was also changed a little to align better.
5207
5212
5208 * Fixed bug when flushing output cache. Not all _p<n> variables
5213 * Fixed bug when flushing output cache. Not all _p<n> variables
5209 exist, so their deletion needs to be wrapped in a try:
5214 exist, so their deletion needs to be wrapped in a try:
5210
5215
5211 * Figured out how to properly use inspect.formatargspec() (it
5216 * Figured out how to properly use inspect.formatargspec() (it
5212 requires the args preceded by *). So I removed all the code from
5217 requires the args preceded by *). So I removed all the code from
5213 _get_pdef in Magic, which was just replicating that.
5218 _get_pdef in Magic, which was just replicating that.
5214
5219
5215 * Added test to prefilter to allow redefining magic function names
5220 * Added test to prefilter to allow redefining magic function names
5216 as variables. This is ok, since the @ form is always available,
5221 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
5222 but whe should allow the user to define a variable called 'ls' if
5218 he needs it.
5223 he needs it.
5219
5224
5220 * Moved the ToDo information from README into a separate ToDo.
5225 * Moved the ToDo information from README into a separate ToDo.
5221
5226
5222 * General code cleanup and small bugfixes. I think it's close to a
5227 * 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'
5228 state where it can be released, obviously with a big 'beta'
5224 warning on it.
5229 warning on it.
5225
5230
5226 * Got the magic function split to work. Now all magics are defined
5231 * 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
5232 in a separate class. It just organizes things a bit, and now
5228 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5233 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5229 was too long).
5234 was too long).
5230
5235
5231 * Changed @clear to @reset to avoid potential confusions with
5236 * Changed @clear to @reset to avoid potential confusions with
5232 the shell command clear. Also renamed @cl to @clear, which does
5237 the shell command clear. Also renamed @cl to @clear, which does
5233 exactly what people expect it to from their shell experience.
5238 exactly what people expect it to from their shell experience.
5234
5239
5235 Added a check to the @reset command (since it's so
5240 Added a check to the @reset command (since it's so
5236 destructive, it's probably a good idea to ask for confirmation).
5241 destructive, it's probably a good idea to ask for confirmation).
5237 But now reset only works for full namespace resetting. Since the
5242 But now reset only works for full namespace resetting. Since the
5238 del keyword is already there for deleting a few specific
5243 del keyword is already there for deleting a few specific
5239 variables, I don't see the point of having a redundant magic
5244 variables, I don't see the point of having a redundant magic
5240 function for the same task.
5245 function for the same task.
5241
5246
5242 2001-11-24 Fernando Perez <fperez@colorado.edu>
5247 2001-11-24 Fernando Perez <fperez@colorado.edu>
5243
5248
5244 * Updated the builtin docs (esp. the ? ones).
5249 * Updated the builtin docs (esp. the ? ones).
5245
5250
5246 * Ran all the code through pychecker. Not terribly impressed with
5251 * Ran all the code through pychecker. Not terribly impressed with
5247 it: lots of spurious warnings and didn't really find anything of
5252 it: lots of spurious warnings and didn't really find anything of
5248 substance (just a few modules being imported and not used).
5253 substance (just a few modules being imported and not used).
5249
5254
5250 * Implemented the new ultraTB functionality into IPython. New
5255 * Implemented the new ultraTB functionality into IPython. New
5251 option: xcolors. This chooses color scheme. xmode now only selects
5256 option: xcolors. This chooses color scheme. xmode now only selects
5252 between Plain and Verbose. Better orthogonality.
5257 between Plain and Verbose. Better orthogonality.
5253
5258
5254 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5259 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5255 mode and color scheme for the exception handlers. Now it's
5260 mode and color scheme for the exception handlers. Now it's
5256 possible to have the verbose traceback with no coloring.
5261 possible to have the verbose traceback with no coloring.
5257
5262
5258 2001-11-23 Fernando Perez <fperez@colorado.edu>
5263 2001-11-23 Fernando Perez <fperez@colorado.edu>
5259
5264
5260 * Version 0.1.12 released, 0.1.13 opened.
5265 * Version 0.1.12 released, 0.1.13 opened.
5261
5266
5262 * Removed option to set auto-quote and auto-paren escapes by
5267 * Removed option to set auto-quote and auto-paren escapes by
5263 user. The chances of breaking valid syntax are just too high. If
5268 user. The chances of breaking valid syntax are just too high. If
5264 someone *really* wants, they can always dig into the code.
5269 someone *really* wants, they can always dig into the code.
5265
5270
5266 * Made prompt separators configurable.
5271 * Made prompt separators configurable.
5267
5272
5268 2001-11-22 Fernando Perez <fperez@colorado.edu>
5273 2001-11-22 Fernando Perez <fperez@colorado.edu>
5269
5274
5270 * Small bugfixes in many places.
5275 * Small bugfixes in many places.
5271
5276
5272 * Removed the MyCompleter class from ipplib. It seemed redundant
5277 * Removed the MyCompleter class from ipplib. It seemed redundant
5273 with the C-p,C-n history search functionality. Less code to
5278 with the C-p,C-n history search functionality. Less code to
5274 maintain.
5279 maintain.
5275
5280
5276 * Moved all the original ipython.py code into ipythonlib.py. Right
5281 * 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
5282 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
5283 no real modularity has been gained. But at least it makes the
5279 wrapper script tiny, and since ipythonlib is a module, it gets
5284 wrapper script tiny, and since ipythonlib is a module, it gets
5280 compiled and startup is much faster.
5285 compiled and startup is much faster.
5281
5286
5282 This is a reasobably 'deep' change, so we should test it for a
5287 This is a reasobably 'deep' change, so we should test it for a
5283 while without messing too much more with the code.
5288 while without messing too much more with the code.
5284
5289
5285 2001-11-21 Fernando Perez <fperez@colorado.edu>
5290 2001-11-21 Fernando Perez <fperez@colorado.edu>
5286
5291
5287 * Version 0.1.11 released, 0.1.12 opened for further work.
5292 * Version 0.1.11 released, 0.1.12 opened for further work.
5288
5293
5289 * Removed dependency on Itpl. It was only needed in one place. It
5294 * 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
5295 would be nice if this became part of python, though. It makes life
5291 *a lot* easier in some cases.
5296 *a lot* easier in some cases.
5292
5297
5293 * Simplified the prefilter code a bit. Now all handlers are
5298 * Simplified the prefilter code a bit. Now all handlers are
5294 expected to explicitly return a value (at least a blank string).
5299 expected to explicitly return a value (at least a blank string).
5295
5300
5296 * Heavy edits in ipplib. Removed the help system altogether. Now
5301 * Heavy edits in ipplib. Removed the help system altogether. Now
5297 obj?/?? is used for inspecting objects, a magic @doc prints
5302 obj?/?? is used for inspecting objects, a magic @doc prints
5298 docstrings, and full-blown Python help is accessed via the 'help'
5303 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
5304 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
5305 the job. Since 'help' is now a standard Python component, might as
5301 well use it and remove duplicate functionality.
5306 well use it and remove duplicate functionality.
5302
5307
5303 Also removed the option to use ipplib as a standalone program. By
5308 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.
5309 now it's too dependent on other parts of IPython to function alone.
5305
5310
5306 * Fixed bug in genutils.pager. It would crash if the pager was
5311 * Fixed bug in genutils.pager. It would crash if the pager was
5307 exited immediately after opening (broken pipe).
5312 exited immediately after opening (broken pipe).
5308
5313
5309 * Trimmed down the VerboseTB reporting a little. The header is
5314 * Trimmed down the VerboseTB reporting a little. The header is
5310 much shorter now and the repeated exception arguments at the end
5315 much shorter now and the repeated exception arguments at the end
5311 have been removed. For interactive use the old header seemed a bit
5316 have been removed. For interactive use the old header seemed a bit
5312 excessive.
5317 excessive.
5313
5318
5314 * Fixed small bug in output of @whos for variables with multi-word
5319 * Fixed small bug in output of @whos for variables with multi-word
5315 types (only first word was displayed).
5320 types (only first word was displayed).
5316
5321
5317 2001-11-17 Fernando Perez <fperez@colorado.edu>
5322 2001-11-17 Fernando Perez <fperez@colorado.edu>
5318
5323
5319 * Version 0.1.10 released, 0.1.11 opened for further work.
5324 * Version 0.1.10 released, 0.1.11 opened for further work.
5320
5325
5321 * Modified dirs and friends. dirs now *returns* the stack (not
5326 * Modified dirs and friends. dirs now *returns* the stack (not
5322 prints), so one can manipulate it as a variable. Convenient to
5327 prints), so one can manipulate it as a variable. Convenient to
5323 travel along many directories.
5328 travel along many directories.
5324
5329
5325 * Fixed bug in magic_pdef: would only work with functions with
5330 * Fixed bug in magic_pdef: would only work with functions with
5326 arguments with default values.
5331 arguments with default values.
5327
5332
5328 2001-11-14 Fernando Perez <fperez@colorado.edu>
5333 2001-11-14 Fernando Perez <fperez@colorado.edu>
5329
5334
5330 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5335 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5331 example with IPython. Various other minor fixes and cleanups.
5336 example with IPython. Various other minor fixes and cleanups.
5332
5337
5333 * Version 0.1.9 released, 0.1.10 opened for further work.
5338 * Version 0.1.9 released, 0.1.10 opened for further work.
5334
5339
5335 * Added sys.path to the list of directories searched in the
5340 * Added sys.path to the list of directories searched in the
5336 execfile= option. It used to be the current directory and the
5341 execfile= option. It used to be the current directory and the
5337 user's IPYTHONDIR only.
5342 user's IPYTHONDIR only.
5338
5343
5339 2001-11-13 Fernando Perez <fperez@colorado.edu>
5344 2001-11-13 Fernando Perez <fperez@colorado.edu>
5340
5345
5341 * Reinstated the raw_input/prefilter separation that Janko had
5346 * Reinstated the raw_input/prefilter separation that Janko had
5342 initially. This gives a more convenient setup for extending the
5347 initially. This gives a more convenient setup for extending the
5343 pre-processor from the outside: raw_input always gets a string,
5348 pre-processor from the outside: raw_input always gets a string,
5344 and prefilter has to process it. We can then redefine prefilter
5349 and prefilter has to process it. We can then redefine prefilter
5345 from the outside and implement extensions for special
5350 from the outside and implement extensions for special
5346 purposes.
5351 purposes.
5347
5352
5348 Today I got one for inputting PhysicalQuantity objects
5353 Today I got one for inputting PhysicalQuantity objects
5349 (from Scientific) without needing any function calls at
5354 (from Scientific) without needing any function calls at
5350 all. Extremely convenient, and it's all done as a user-level
5355 all. Extremely convenient, and it's all done as a user-level
5351 extension (no IPython code was touched). Now instead of:
5356 extension (no IPython code was touched). Now instead of:
5352 a = PhysicalQuantity(4.2,'m/s**2')
5357 a = PhysicalQuantity(4.2,'m/s**2')
5353 one can simply say
5358 one can simply say
5354 a = 4.2 m/s**2
5359 a = 4.2 m/s**2
5355 or even
5360 or even
5356 a = 4.2 m/s^2
5361 a = 4.2 m/s^2
5357
5362
5358 I use this, but it's also a proof of concept: IPython really is
5363 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
5364 fully user-extensible, even at the level of the parsing of the
5360 command line. It's not trivial, but it's perfectly doable.
5365 command line. It's not trivial, but it's perfectly doable.
5361
5366
5362 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5367 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5363 the problem of modules being loaded in the inverse order in which
5368 the problem of modules being loaded in the inverse order in which
5364 they were defined in
5369 they were defined in
5365
5370
5366 * Version 0.1.8 released, 0.1.9 opened for further work.
5371 * Version 0.1.8 released, 0.1.9 opened for further work.
5367
5372
5368 * Added magics pdef, source and file. They respectively show the
5373 * Added magics pdef, source and file. They respectively show the
5369 definition line ('prototype' in C), source code and full python
5374 definition line ('prototype' in C), source code and full python
5370 file for any callable object. The object inspector oinfo uses
5375 file for any callable object. The object inspector oinfo uses
5371 these to show the same information.
5376 these to show the same information.
5372
5377
5373 * Version 0.1.7 released, 0.1.8 opened for further work.
5378 * Version 0.1.7 released, 0.1.8 opened for further work.
5374
5379
5375 * Separated all the magic functions into a class called Magic. The
5380 * Separated all the magic functions into a class called Magic. The
5376 InteractiveShell class was becoming too big for Xemacs to handle
5381 InteractiveShell class was becoming too big for Xemacs to handle
5377 (de-indenting a line would lock it up for 10 seconds while it
5382 (de-indenting a line would lock it up for 10 seconds while it
5378 backtracked on the whole class!)
5383 backtracked on the whole class!)
5379
5384
5380 FIXME: didn't work. It can be done, but right now namespaces are
5385 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
5386 all messed up. Do it later (reverted it for now, so at least
5382 everything works as before).
5387 everything works as before).
5383
5388
5384 * Got the object introspection system (magic_oinfo) working! I
5389 * Got the object introspection system (magic_oinfo) working! I
5385 think this is pretty much ready for release to Janko, so he can
5390 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
5391 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.
5392 I wanted for the 'phase 1' release is ready. Happy, tired.
5388
5393
5389 2001-11-12 Fernando Perez <fperez@colorado.edu>
5394 2001-11-12 Fernando Perez <fperez@colorado.edu>
5390
5395
5391 * Version 0.1.6 released, 0.1.7 opened for further work.
5396 * Version 0.1.6 released, 0.1.7 opened for further work.
5392
5397
5393 * Fixed bug in printing: it used to test for truth before
5398 * Fixed bug in printing: it used to test for truth before
5394 printing, so 0 wouldn't print. Now checks for None.
5399 printing, so 0 wouldn't print. Now checks for None.
5395
5400
5396 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5401 * 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
5402 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
5403 reaches by hand into the outputcache. Think of a better way to do
5399 this later.
5404 this later.
5400
5405
5401 * Various small fixes thanks to Nathan's comments.
5406 * Various small fixes thanks to Nathan's comments.
5402
5407
5403 * Changed magic_pprint to magic_Pprint. This way it doesn't
5408 * Changed magic_pprint to magic_Pprint. This way it doesn't
5404 collide with pprint() and the name is consistent with the command
5409 collide with pprint() and the name is consistent with the command
5405 line option.
5410 line option.
5406
5411
5407 * Changed prompt counter behavior to be fully like
5412 * Changed prompt counter behavior to be fully like
5408 Mathematica's. That is, even input that doesn't return a result
5413 Mathematica's. That is, even input that doesn't return a result
5409 raises the prompt counter. The old behavior was kind of confusing
5414 raises the prompt counter. The old behavior was kind of confusing
5410 (getting the same prompt number several times if the operation
5415 (getting the same prompt number several times if the operation
5411 didn't return a result).
5416 didn't return a result).
5412
5417
5413 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5418 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5414
5419
5415 * Fixed -Classic mode (wasn't working anymore).
5420 * Fixed -Classic mode (wasn't working anymore).
5416
5421
5417 * Added colored prompts using Nathan's new code. Colors are
5422 * Added colored prompts using Nathan's new code. Colors are
5418 currently hardwired, they can be user-configurable. For
5423 currently hardwired, they can be user-configurable. For
5419 developers, they can be chosen in file ipythonlib.py, at the
5424 developers, they can be chosen in file ipythonlib.py, at the
5420 beginning of the CachedOutput class def.
5425 beginning of the CachedOutput class def.
5421
5426
5422 2001-11-11 Fernando Perez <fperez@colorado.edu>
5427 2001-11-11 Fernando Perez <fperez@colorado.edu>
5423
5428
5424 * Version 0.1.5 released, 0.1.6 opened for further work.
5429 * Version 0.1.5 released, 0.1.6 opened for further work.
5425
5430
5426 * Changed magic_env to *return* the environment as a dict (not to
5431 * 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.
5432 print it). This way it prints, but it can also be processed.
5428
5433
5429 * Added Verbose exception reporting to interactive
5434 * Added Verbose exception reporting to interactive
5430 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5435 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
5436 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
5437 probably the last 'big' thing in my mental todo list. This ties
5433 in with the next entry:
5438 in with the next entry:
5434
5439
5435 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5440 * 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
5441 has to specify is Plain, Color or Verbose for all exception
5437 handling.
5442 handling.
5438
5443
5439 * Removed ShellServices option. All this can really be done via
5444 * Removed ShellServices option. All this can really be done via
5440 the magic system. It's easier to extend, cleaner and has automatic
5445 the magic system. It's easier to extend, cleaner and has automatic
5441 namespace protection and documentation.
5446 namespace protection and documentation.
5442
5447
5443 2001-11-09 Fernando Perez <fperez@colorado.edu>
5448 2001-11-09 Fernando Perez <fperez@colorado.edu>
5444
5449
5445 * Fixed bug in output cache flushing (missing parameter to
5450 * Fixed bug in output cache flushing (missing parameter to
5446 __init__). Other small bugs fixed (found using pychecker).
5451 __init__). Other small bugs fixed (found using pychecker).
5447
5452
5448 * Version 0.1.4 opened for bugfixing.
5453 * Version 0.1.4 opened for bugfixing.
5449
5454
5450 2001-11-07 Fernando Perez <fperez@colorado.edu>
5455 2001-11-07 Fernando Perez <fperez@colorado.edu>
5451
5456
5452 * Version 0.1.3 released, mainly because of the raw_input bug.
5457 * Version 0.1.3 released, mainly because of the raw_input bug.
5453
5458
5454 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5459 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5455 and when testing for whether things were callable, a call could
5460 and when testing for whether things were callable, a call could
5456 actually be made to certain functions. They would get called again
5461 actually be made to certain functions. They would get called again
5457 once 'really' executed, with a resulting double call. A disaster
5462 once 'really' executed, with a resulting double call. A disaster
5458 in many cases (list.reverse() would never work!).
5463 in many cases (list.reverse() would never work!).
5459
5464
5460 * Removed prefilter() function, moved its code to raw_input (which
5465 * Removed prefilter() function, moved its code to raw_input (which
5461 after all was just a near-empty caller for prefilter). This saves
5466 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.
5467 a function call on every prompt, and simplifies the class a tiny bit.
5463
5468
5464 * Fix _ip to __ip name in magic example file.
5469 * Fix _ip to __ip name in magic example file.
5465
5470
5466 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5471 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5467 work with non-gnu versions of tar.
5472 work with non-gnu versions of tar.
5468
5473
5469 2001-11-06 Fernando Perez <fperez@colorado.edu>
5474 2001-11-06 Fernando Perez <fperez@colorado.edu>
5470
5475
5471 * Version 0.1.2. Just to keep track of the recent changes.
5476 * Version 0.1.2. Just to keep track of the recent changes.
5472
5477
5473 * Fixed nasty bug in output prompt routine. It used to check 'if
5478 * Fixed nasty bug in output prompt routine. It used to check 'if
5474 arg != None...'. Problem is, this fails if arg implements a
5479 arg != None...'. Problem is, this fails if arg implements a
5475 special comparison (__cmp__) which disallows comparing to
5480 special comparison (__cmp__) which disallows comparing to
5476 None. Found it when trying to use the PhysicalQuantity module from
5481 None. Found it when trying to use the PhysicalQuantity module from
5477 ScientificPython.
5482 ScientificPython.
5478
5483
5479 2001-11-05 Fernando Perez <fperez@colorado.edu>
5484 2001-11-05 Fernando Perez <fperez@colorado.edu>
5480
5485
5481 * Also added dirs. Now the pushd/popd/dirs family functions
5486 * Also added dirs. Now the pushd/popd/dirs family functions
5482 basically like the shell, with the added convenience of going home
5487 basically like the shell, with the added convenience of going home
5483 when called with no args.
5488 when called with no args.
5484
5489
5485 * pushd/popd slightly modified to mimic shell behavior more
5490 * pushd/popd slightly modified to mimic shell behavior more
5486 closely.
5491 closely.
5487
5492
5488 * Added env,pushd,popd from ShellServices as magic functions. I
5493 * Added env,pushd,popd from ShellServices as magic functions. I
5489 think the cleanest will be to port all desired functions from
5494 think the cleanest will be to port all desired functions from
5490 ShellServices as magics and remove ShellServices altogether. This
5495 ShellServices as magics and remove ShellServices altogether. This
5491 will provide a single, clean way of adding functionality
5496 will provide a single, clean way of adding functionality
5492 (shell-type or otherwise) to IP.
5497 (shell-type or otherwise) to IP.
5493
5498
5494 2001-11-04 Fernando Perez <fperez@colorado.edu>
5499 2001-11-04 Fernando Perez <fperez@colorado.edu>
5495
5500
5496 * Added .ipython/ directory to sys.path. This way users can keep
5501 * Added .ipython/ directory to sys.path. This way users can keep
5497 customizations there and access them via import.
5502 customizations there and access them via import.
5498
5503
5499 2001-11-03 Fernando Perez <fperez@colorado.edu>
5504 2001-11-03 Fernando Perez <fperez@colorado.edu>
5500
5505
5501 * Opened version 0.1.1 for new changes.
5506 * Opened version 0.1.1 for new changes.
5502
5507
5503 * Changed version number to 0.1.0: first 'public' release, sent to
5508 * Changed version number to 0.1.0: first 'public' release, sent to
5504 Nathan and Janko.
5509 Nathan and Janko.
5505
5510
5506 * Lots of small fixes and tweaks.
5511 * Lots of small fixes and tweaks.
5507
5512
5508 * Minor changes to whos format. Now strings are shown, snipped if
5513 * Minor changes to whos format. Now strings are shown, snipped if
5509 too long.
5514 too long.
5510
5515
5511 * Changed ShellServices to work on __main__ so they show up in @who
5516 * Changed ShellServices to work on __main__ so they show up in @who
5512
5517
5513 * Help also works with ? at the end of a line:
5518 * Help also works with ? at the end of a line:
5514 ?sin and sin?
5519 ?sin and sin?
5515 both produce the same effect. This is nice, as often I use the
5520 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
5521 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
5522 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.
5523 info. Now I can just add the ? and hit return. Convenient.
5519
5524
5520 2001-11-02 Fernando Perez <fperez@colorado.edu>
5525 2001-11-02 Fernando Perez <fperez@colorado.edu>
5521
5526
5522 * Python version check (>=2.1) added.
5527 * Python version check (>=2.1) added.
5523
5528
5524 * Added LazyPython documentation. At this point the docs are quite
5529 * Added LazyPython documentation. At this point the docs are quite
5525 a mess. A cleanup is in order.
5530 a mess. A cleanup is in order.
5526
5531
5527 * Auto-installer created. For some bizarre reason, the zipfiles
5532 * Auto-installer created. For some bizarre reason, the zipfiles
5528 module isn't working on my system. So I made a tar version
5533 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
5534 (hopefully the command line options in various systems won't kill
5530 me).
5535 me).
5531
5536
5532 * Fixes to Struct in genutils. Now all dictionary-like methods are
5537 * Fixes to Struct in genutils. Now all dictionary-like methods are
5533 protected (reasonably).
5538 protected (reasonably).
5534
5539
5535 * Added pager function to genutils and changed ? to print usage
5540 * Added pager function to genutils and changed ? to print usage
5536 note through it (it was too long).
5541 note through it (it was too long).
5537
5542
5538 * Added the LazyPython functionality. Works great! I changed the
5543 * Added the LazyPython functionality. Works great! I changed the
5539 auto-quote escape to ';', it's on home row and next to '. But
5544 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
5545 both auto-quote and auto-paren (still /) escapes are command-line
5541 parameters.
5546 parameters.
5542
5547
5543
5548
5544 2001-11-01 Fernando Perez <fperez@colorado.edu>
5549 2001-11-01 Fernando Perez <fperez@colorado.edu>
5545
5550
5546 * Version changed to 0.0.7. Fairly large change: configuration now
5551 * Version changed to 0.0.7. Fairly large change: configuration now
5547 is all stored in a directory, by default .ipython. There, all
5552 is all stored in a directory, by default .ipython. There, all
5548 config files have normal looking names (not .names)
5553 config files have normal looking names (not .names)
5549
5554
5550 * Version 0.0.6 Released first to Lucas and Archie as a test
5555 * 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
5556 run. Since it's the first 'semi-public' release, change version to
5552 > 0.0.6 for any changes now.
5557 > 0.0.6 for any changes now.
5553
5558
5554 * Stuff I had put in the ipplib.py changelog:
5559 * Stuff I had put in the ipplib.py changelog:
5555
5560
5556 Changes to InteractiveShell:
5561 Changes to InteractiveShell:
5557
5562
5558 - Made the usage message a parameter.
5563 - Made the usage message a parameter.
5559
5564
5560 - Require the name of the shell variable to be given. It's a bit
5565 - 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 hardwired in the
5566 of a hack, but allows the name 'shell' not to be hardwired in the
5562 magic (@) handler, which is problematic b/c it requires
5567 magic (@) handler, which is problematic b/c it requires
5563 polluting the global namespace with 'shell'. This in turn is
5568 polluting the global namespace with 'shell'. This in turn is
5564 fragile: if a user redefines a variable called shell, things
5569 fragile: if a user redefines a variable called shell, things
5565 break.
5570 break.
5566
5571
5567 - magic @: all functions available through @ need to be defined
5572 - magic @: all functions available through @ need to be defined
5568 as magic_<name>, even though they can be called simply as
5573 as magic_<name>, even though they can be called simply as
5569 @<name>. This allows the special command @magic to gather
5574 @<name>. This allows the special command @magic to gather
5570 information automatically about all existing magic functions,
5575 information automatically about all existing magic functions,
5571 even if they are run-time user extensions, by parsing the shell
5576 even if they are run-time user extensions, by parsing the shell
5572 instance __dict__ looking for special magic_ names.
5577 instance __dict__ looking for special magic_ names.
5573
5578
5574 - mainloop: added *two* local namespace parameters. This allows
5579 - mainloop: added *two* local namespace parameters. This allows
5575 the class to differentiate between parameters which were there
5580 the class to differentiate between parameters which were there
5576 before and after command line initialization was processed. This
5581 before and after command line initialization was processed. This
5577 way, later @who can show things loaded at startup by the
5582 way, later @who can show things loaded at startup by the
5578 user. This trick was necessary to make session saving/reloading
5583 user. This trick was necessary to make session saving/reloading
5579 really work: ideally after saving/exiting/reloading a session,
5584 really work: ideally after saving/exiting/reloading a session,
5580 *everything* should look the same, including the output of @who. I
5585 *everything* should look the same, including the output of @who. I
5581 was only able to make this work with this double namespace
5586 was only able to make this work with this double namespace
5582 trick.
5587 trick.
5583
5588
5584 - added a header to the logfile which allows (almost) full
5589 - added a header to the logfile which allows (almost) full
5585 session restoring.
5590 session restoring.
5586
5591
5587 - prepend lines beginning with @ or !, with a and log
5592 - prepend lines beginning with @ or !, with a and log
5588 them. Why? !lines: may be useful to know what you did @lines:
5593 them. Why? !lines: may be useful to know what you did @lines:
5589 they may affect session state. So when restoring a session, at
5594 they may affect session state. So when restoring a session, at
5590 least inform the user of their presence. I couldn't quite get
5595 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.
5596 them to properly re-execute, but at least the user is warned.
5592
5597
5593 * Started ChangeLog.
5598 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now