##// END OF EJS Templates
Display the length of the input history and the position of the...
walter.doerwald -
Show More
@@ -1,1516 +1,1528 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 _ibrowse_help = """
8 _ibrowse_help = """
9 down
9 down
10 Move the cursor to the next line.
10 Move the cursor to the next line.
11
11
12 up
12 up
13 Move the cursor to the previous line.
13 Move the cursor to the previous line.
14
14
15 pagedown
15 pagedown
16 Move the cursor down one page (minus overlap).
16 Move the cursor down one page (minus overlap).
17
17
18 pageup
18 pageup
19 Move the cursor up one page (minus overlap).
19 Move the cursor up one page (minus overlap).
20
20
21 left
21 left
22 Move the cursor left.
22 Move the cursor left.
23
23
24 right
24 right
25 Move the cursor right.
25 Move the cursor right.
26
26
27 home
27 home
28 Move the cursor to the first column.
28 Move the cursor to the first column.
29
29
30 end
30 end
31 Move the cursor to the last column.
31 Move the cursor to the last column.
32
32
33 prevattr
33 prevattr
34 Move the cursor one attribute column to the left.
34 Move the cursor one attribute column to the left.
35
35
36 nextattr
36 nextattr
37 Move the cursor one attribute column to the right.
37 Move the cursor one attribute column to the right.
38
38
39 pick
39 pick
40 'Pick' the object under the cursor (i.e. the row the cursor is on). This
40 'Pick' the object under the cursor (i.e. the row the cursor is on). This
41 leaves the browser and returns the picked object to the caller. (In IPython
41 leaves the browser and returns the picked object to the caller. (In IPython
42 this object will be available as the '_' variable.)
42 this object will be available as the '_' variable.)
43
43
44 pickattr
44 pickattr
45 'Pick' the attribute under the cursor (i.e. the row/column the cursor is on).
45 'Pick' the attribute under the cursor (i.e. the row/column the cursor is on).
46
46
47 pickallattrs
47 pickallattrs
48 Pick' the complete column under the cursor (i.e. the attribute under the
48 Pick' the complete column under the cursor (i.e. the attribute under the
49 cursor) from all currently fetched objects. These attributes will be returned
49 cursor) from all currently fetched objects. These attributes will be returned
50 as a list.
50 as a list.
51
51
52 tooglemark
52 tooglemark
53 Mark/unmark the object under the cursor. Marked objects have a '!' after the
53 Mark/unmark the object under the cursor. Marked objects have a '!' after the
54 row number).
54 row number).
55
55
56 pickmarked
56 pickmarked
57 'Pick' marked objects. Marked objects will be returned as a list.
57 'Pick' marked objects. Marked objects will be returned as a list.
58
58
59 pickmarkedattr
59 pickmarkedattr
60 'Pick' the attribute under the cursor from all marked objects (This returns a
60 'Pick' the attribute under the cursor from all marked objects (This returns a
61 list).
61 list).
62
62
63 enterdefault
63 enterdefault
64 Enter the object under the cursor. (what this mean depends on the object
64 Enter the object under the cursor. (what this mean depends on the object
65 itself (i.e. how it implements the '__xiter__' method). This opens a new
65 itself (i.e. how it implements the '__xiter__' method). This opens a new
66 browser 'level'.
66 browser 'level'.
67
67
68 enter
68 enter
69 Enter the object under the cursor. If the object provides different enter
69 Enter the object under the cursor. If the object provides different enter
70 modes a menu of all modes will be presented; choose one and enter it (via the
70 modes a menu of all modes will be presented; choose one and enter it (via the
71 'enter' or 'enterdefault' command).
71 'enter' or 'enterdefault' command).
72
72
73 enterattr
73 enterattr
74 Enter the attribute under the cursor.
74 Enter the attribute under the cursor.
75
75
76 leave
76 leave
77 Leave the current browser level and go back to the previous one.
77 Leave the current browser level and go back to the previous one.
78
78
79 detail
79 detail
80 Show a detail view of the object under the cursor. This shows the name, type,
80 Show a detail view of the object under the cursor. This shows the name, type,
81 doc string and value of the object attributes (and it might show more
81 doc string and value of the object attributes (and it might show more
82 attributes than in the list view, depending on the object).
82 attributes than in the list view, depending on the object).
83
83
84 detailattr
84 detailattr
85 Show a detail view of the attribute under the cursor.
85 Show a detail view of the attribute under the cursor.
86
86
87 markrange
87 markrange
88 Mark all objects from the last marked object before the current cursor
88 Mark all objects from the last marked object before the current cursor
89 position to the cursor position.
89 position to the cursor position.
90
90
91 sortattrasc
91 sortattrasc
92 Sort the objects (in ascending order) using the attribute under the cursor as
92 Sort the objects (in ascending order) using the attribute under the cursor as
93 the sort key.
93 the sort key.
94
94
95 sortattrdesc
95 sortattrdesc
96 Sort the objects (in descending order) using the attribute under the cursor as
96 Sort the objects (in descending order) using the attribute under the cursor as
97 the sort key.
97 the sort key.
98
98
99 goto
99 goto
100 Jump to a row. The row number can be entered at the bottom of the screen.
100 Jump to a row. The row number can be entered at the bottom of the screen.
101
101
102 find
102 find
103 Search forward for a row. At the bottom of the screen the condition can be
103 Search forward for a row. At the bottom of the screen the condition can be
104 entered.
104 entered.
105
105
106 findbackwards
106 findbackwards
107 Search backward for a row. At the bottom of the screen the condition can be
107 Search backward for a row. At the bottom of the screen the condition can be
108 entered.
108 entered.
109
109
110 help
110 help
111 This screen.
111 This screen.
112 """
112 """
113
113
114
114
115 class UnassignedKeyError(Exception):
115 class UnassignedKeyError(Exception):
116 """
116 """
117 Exception that is used for reporting unassigned keys.
117 Exception that is used for reporting unassigned keys.
118 """
118 """
119
119
120
120
121 class UnknownCommandError(Exception):
121 class UnknownCommandError(Exception):
122 """
122 """
123 Exception that is used for reporting unknown command (this should never
123 Exception that is used for reporting unknown command (this should never
124 happen).
124 happen).
125 """
125 """
126
126
127
127
128 class CommandError(Exception):
128 class CommandError(Exception):
129 """
129 """
130 Exception that is used for reporting that a command can't be executed.
130 Exception that is used for reporting that a command can't be executed.
131 """
131 """
132
132
133
133
134 class _BrowserCachedItem(object):
134 class _BrowserCachedItem(object):
135 # This is used internally by ``ibrowse`` to store a item together with its
135 # This is used internally by ``ibrowse`` to store a item together with its
136 # marked status.
136 # marked status.
137 __slots__ = ("item", "marked")
137 __slots__ = ("item", "marked")
138
138
139 def __init__(self, item):
139 def __init__(self, item):
140 self.item = item
140 self.item = item
141 self.marked = False
141 self.marked = False
142
142
143
143
144 class _BrowserHelp(object):
144 class _BrowserHelp(object):
145 style_header = astyle.Style.fromstr("red:blacK")
145 style_header = astyle.Style.fromstr("red:blacK")
146 # This is used internally by ``ibrowse`` for displaying the help screen.
146 # This is used internally by ``ibrowse`` for displaying the help screen.
147 def __init__(self, browser):
147 def __init__(self, browser):
148 self.browser = browser
148 self.browser = browser
149
149
150 def __xrepr__(self, mode):
150 def __xrepr__(self, mode):
151 yield (-1, True)
151 yield (-1, True)
152 if mode == "header" or mode == "footer":
152 if mode == "header" or mode == "footer":
153 yield (astyle.style_default, "ibrowse help screen")
153 yield (astyle.style_default, "ibrowse help screen")
154 else:
154 else:
155 yield (astyle.style_default, repr(self))
155 yield (astyle.style_default, repr(self))
156
156
157 def __xiter__(self, mode):
157 def __xiter__(self, mode):
158 # Get reverse key mapping
158 # Get reverse key mapping
159 allkeys = {}
159 allkeys = {}
160 for (key, cmd) in self.browser.keymap.iteritems():
160 for (key, cmd) in self.browser.keymap.iteritems():
161 allkeys.setdefault(cmd, []).append(key)
161 allkeys.setdefault(cmd, []).append(key)
162
162
163 fields = ("key", "description")
163 fields = ("key", "description")
164
164
165 for (i, command) in enumerate(_ibrowse_help.strip().split("\n\n")):
165 for (i, command) in enumerate(_ibrowse_help.strip().split("\n\n")):
166 if i:
166 if i:
167 yield ipipe.Fields(fields, key="", description="")
167 yield ipipe.Fields(fields, key="", description="")
168
168
169 (name, description) = command.split("\n", 1)
169 (name, description) = command.split("\n", 1)
170 keys = allkeys.get(name, [])
170 keys = allkeys.get(name, [])
171 lines = textwrap.wrap(description, 60)
171 lines = textwrap.wrap(description, 60)
172
172
173 yield ipipe.Fields(fields, description=astyle.Text((self.style_header, name)))
173 yield ipipe.Fields(fields, description=astyle.Text((self.style_header, name)))
174 for i in xrange(max(len(keys), len(lines))):
174 for i in xrange(max(len(keys), len(lines))):
175 try:
175 try:
176 key = self.browser.keylabel(keys[i])
176 key = self.browser.keylabel(keys[i])
177 except IndexError:
177 except IndexError:
178 key = ""
178 key = ""
179 try:
179 try:
180 line = lines[i]
180 line = lines[i]
181 except IndexError:
181 except IndexError:
182 line = ""
182 line = ""
183 yield ipipe.Fields(fields, key=key, description=line)
183 yield ipipe.Fields(fields, key=key, description=line)
184
184
185
185
186 class _BrowserLevel(object):
186 class _BrowserLevel(object):
187 # This is used internally to store the state (iterator, fetch items,
187 # This is used internally to store the state (iterator, fetch items,
188 # position of cursor and screen, etc.) of one browser level
188 # position of cursor and screen, etc.) of one browser level
189 # An ``ibrowse`` object keeps multiple ``_BrowserLevel`` objects in
189 # An ``ibrowse`` object keeps multiple ``_BrowserLevel`` objects in
190 # a stack.
190 # a stack.
191 def __init__(self, browser, input, iterator, mainsizey, *attrs):
191 def __init__(self, browser, input, iterator, mainsizey, *attrs):
192 self.browser = browser
192 self.browser = browser
193 self.input = input
193 self.input = input
194 self.header = [x for x in ipipe.xrepr(input, "header") if not isinstance(x[0], int)]
194 self.header = [x for x in ipipe.xrepr(input, "header") if not isinstance(x[0], int)]
195 # iterator for the input
195 # iterator for the input
196 self.iterator = iterator
196 self.iterator = iterator
197
197
198 # is the iterator exhausted?
198 # is the iterator exhausted?
199 self.exhausted = False
199 self.exhausted = False
200
200
201 # attributes to be display (autodetected if empty)
201 # attributes to be display (autodetected if empty)
202 self.attrs = attrs
202 self.attrs = attrs
203
203
204 # fetched items (+ marked flag)
204 # fetched items (+ marked flag)
205 self.items = ipipe.deque()
205 self.items = ipipe.deque()
206
206
207 # Number of marked objects
207 # Number of marked objects
208 self.marked = 0
208 self.marked = 0
209
209
210 # Vertical cursor position
210 # Vertical cursor position
211 self.cury = 0
211 self.cury = 0
212
212
213 # Horizontal cursor position
213 # Horizontal cursor position
214 self.curx = 0
214 self.curx = 0
215
215
216 # Index of first data column
216 # Index of first data column
217 self.datastartx = 0
217 self.datastartx = 0
218
218
219 # Index of first data line
219 # Index of first data line
220 self.datastarty = 0
220 self.datastarty = 0
221
221
222 # height of the data display area
222 # height of the data display area
223 self.mainsizey = mainsizey
223 self.mainsizey = mainsizey
224
224
225 # width of the data display area (changes when scrolling)
225 # width of the data display area (changes when scrolling)
226 self.mainsizex = 0
226 self.mainsizex = 0
227
227
228 # Size of row number (changes when scrolling)
228 # Size of row number (changes when scrolling)
229 self.numbersizex = 0
229 self.numbersizex = 0
230
230
231 # Attribute names to display (in this order)
231 # Attribute names to display (in this order)
232 self.displayattrs = []
232 self.displayattrs = []
233
233
234 # index and name of attribute under the cursor
234 # index and name of attribute under the cursor
235 self.displayattr = (None, ipipe.noitem)
235 self.displayattr = (None, ipipe.noitem)
236
236
237 # Maps attribute names to column widths
237 # Maps attribute names to column widths
238 self.colwidths = {}
238 self.colwidths = {}
239
239
240 self.fetch(mainsizey)
240 self.fetch(mainsizey)
241 self.calcdisplayattrs()
241 self.calcdisplayattrs()
242 # formatted attributes for the items on screen
242 # formatted attributes for the items on screen
243 # (i.e. self.items[self.datastarty:self.datastarty+self.mainsizey])
243 # (i.e. self.items[self.datastarty:self.datastarty+self.mainsizey])
244 self.displayrows = [self.getrow(i) for i in xrange(len(self.items))]
244 self.displayrows = [self.getrow(i) for i in xrange(len(self.items))]
245 self.calcwidths()
245 self.calcwidths()
246 self.calcdisplayattr()
246 self.calcdisplayattr()
247
247
248 def fetch(self, count):
248 def fetch(self, count):
249 # Try to fill ``self.items`` with at least ``count`` objects.
249 # Try to fill ``self.items`` with at least ``count`` objects.
250 have = len(self.items)
250 have = len(self.items)
251 while not self.exhausted and have < count:
251 while not self.exhausted and have < count:
252 try:
252 try:
253 item = self.iterator.next()
253 item = self.iterator.next()
254 except StopIteration:
254 except StopIteration:
255 self.exhausted = True
255 self.exhausted = True
256 break
256 break
257 else:
257 else:
258 have += 1
258 have += 1
259 self.items.append(_BrowserCachedItem(item))
259 self.items.append(_BrowserCachedItem(item))
260
260
261 def calcdisplayattrs(self):
261 def calcdisplayattrs(self):
262 # Calculate which attributes are available from the objects that are
262 # Calculate which attributes are available from the objects that are
263 # currently visible on screen (and store it in ``self.displayattrs``)
263 # currently visible on screen (and store it in ``self.displayattrs``)
264 attrnames = set()
264 attrnames = set()
265 # If the browser object specifies a fixed list of attributes,
265 # If the browser object specifies a fixed list of attributes,
266 # simply use it.
266 # simply use it.
267 if self.attrs:
267 if self.attrs:
268 self.displayattrs = self.attrs
268 self.displayattrs = self.attrs
269 else:
269 else:
270 self.displayattrs = []
270 self.displayattrs = []
271 endy = min(self.datastarty+self.mainsizey, len(self.items))
271 endy = min(self.datastarty+self.mainsizey, len(self.items))
272 for i in xrange(self.datastarty, endy):
272 for i in xrange(self.datastarty, endy):
273 for attrname in ipipe.xattrs(self.items[i].item, "default"):
273 for attrname in ipipe.xattrs(self.items[i].item, "default"):
274 if attrname not in attrnames:
274 if attrname not in attrnames:
275 self.displayattrs.append(attrname)
275 self.displayattrs.append(attrname)
276 attrnames.add(attrname)
276 attrnames.add(attrname)
277
277
278 def getrow(self, i):
278 def getrow(self, i):
279 # Return a dictinary with the attributes for the object
279 # Return a dictinary with the attributes for the object
280 # ``self.items[i]``. Attribute names are taken from
280 # ``self.items[i]``. Attribute names are taken from
281 # ``self.displayattrs`` so ``calcdisplayattrs()`` must have been
281 # ``self.displayattrs`` so ``calcdisplayattrs()`` must have been
282 # called before.
282 # called before.
283 row = {}
283 row = {}
284 item = self.items[i].item
284 item = self.items[i].item
285 for attrname in self.displayattrs:
285 for attrname in self.displayattrs:
286 try:
286 try:
287 value = ipipe._getattr(item, attrname, ipipe.noitem)
287 value = ipipe._getattr(item, attrname, ipipe.noitem)
288 except (KeyboardInterrupt, SystemExit):
288 except (KeyboardInterrupt, SystemExit):
289 raise
289 raise
290 except Exception, exc:
290 except Exception, exc:
291 value = exc
291 value = exc
292 # only store attribute if it exists (or we got an exception)
292 # only store attribute if it exists (or we got an exception)
293 if value is not ipipe.noitem:
293 if value is not ipipe.noitem:
294 # remember alignment, length and colored text
294 # remember alignment, length and colored text
295 row[attrname] = ipipe.xformat(value, "cell", self.browser.maxattrlength)
295 row[attrname] = ipipe.xformat(value, "cell", self.browser.maxattrlength)
296 return row
296 return row
297
297
298 def calcwidths(self):
298 def calcwidths(self):
299 # Recalculate the displayed fields and their width.
299 # Recalculate the displayed fields and their width.
300 # ``calcdisplayattrs()'' must have been called and the cache
300 # ``calcdisplayattrs()'' must have been called and the cache
301 # for attributes of the objects on screen (``self.displayrows``)
301 # for attributes of the objects on screen (``self.displayrows``)
302 # must have been filled. This returns a dictionary mapping
302 # must have been filled. This returns a dictionary mapping
303 # colmn names to width.
303 # colmn names to width.
304 self.colwidths = {}
304 self.colwidths = {}
305 for row in self.displayrows:
305 for row in self.displayrows:
306 for attrname in self.displayattrs:
306 for attrname in self.displayattrs:
307 try:
307 try:
308 length = row[attrname][1]
308 length = row[attrname][1]
309 except KeyError:
309 except KeyError:
310 length = 0
310 length = 0
311 # always add attribute to colwidths, even if it doesn't exist
311 # always add attribute to colwidths, even if it doesn't exist
312 if attrname not in self.colwidths:
312 if attrname not in self.colwidths:
313 self.colwidths[attrname] = len(ipipe._attrname(attrname))
313 self.colwidths[attrname] = len(ipipe._attrname(attrname))
314 newwidth = max(self.colwidths[attrname], length)
314 newwidth = max(self.colwidths[attrname], length)
315 self.colwidths[attrname] = newwidth
315 self.colwidths[attrname] = newwidth
316
316
317 # How many characters do we need to paint the item number?
317 # How many characters do we need to paint the item number?
318 self.numbersizex = len(str(self.datastarty+self.mainsizey-1))
318 self.numbersizex = len(str(self.datastarty+self.mainsizey-1))
319 # How must space have we got to display data?
319 # How must space have we got to display data?
320 self.mainsizex = self.browser.scrsizex-self.numbersizex-3
320 self.mainsizex = self.browser.scrsizex-self.numbersizex-3
321 # width of all columns
321 # width of all columns
322 self.datasizex = sum(self.colwidths.itervalues()) + len(self.colwidths)
322 self.datasizex = sum(self.colwidths.itervalues()) + len(self.colwidths)
323
323
324 def calcdisplayattr(self):
324 def calcdisplayattr(self):
325 # Find out on which attribute the cursor is on and store this
325 # Find out on which attribute the cursor is on and store this
326 # information in ``self.displayattr``.
326 # information in ``self.displayattr``.
327 pos = 0
327 pos = 0
328 for (i, attrname) in enumerate(self.displayattrs):
328 for (i, attrname) in enumerate(self.displayattrs):
329 if pos+self.colwidths[attrname] >= self.curx:
329 if pos+self.colwidths[attrname] >= self.curx:
330 self.displayattr = (i, attrname)
330 self.displayattr = (i, attrname)
331 break
331 break
332 pos += self.colwidths[attrname]+1
332 pos += self.colwidths[attrname]+1
333 else:
333 else:
334 self.displayattr = (None, ipipe.noitem)
334 self.displayattr = (None, ipipe.noitem)
335
335
336 def moveto(self, x, y, refresh=False):
336 def moveto(self, x, y, refresh=False):
337 # Move the cursor to the position ``(x,y)`` (in data coordinates,
337 # Move the cursor to the position ``(x,y)`` (in data coordinates,
338 # not in screen coordinates). If ``refresh`` is true, all cached
338 # not in screen coordinates). If ``refresh`` is true, all cached
339 # values will be recalculated (e.g. because the list has been
339 # values will be recalculated (e.g. because the list has been
340 # resorted, so screen positions etc. are no longer valid).
340 # resorted, so screen positions etc. are no longer valid).
341 olddatastarty = self.datastarty
341 olddatastarty = self.datastarty
342 oldx = self.curx
342 oldx = self.curx
343 oldy = self.cury
343 oldy = self.cury
344 x = int(x+0.5)
344 x = int(x+0.5)
345 y = int(y+0.5)
345 y = int(y+0.5)
346 newx = x # remember where we wanted to move
346 newx = x # remember where we wanted to move
347 newy = y # remember where we wanted to move
347 newy = y # remember where we wanted to move
348
348
349 scrollbordery = min(self.browser.scrollbordery, self.mainsizey//2)
349 scrollbordery = min(self.browser.scrollbordery, self.mainsizey//2)
350 scrollborderx = min(self.browser.scrollborderx, self.mainsizex//2)
350 scrollborderx = min(self.browser.scrollborderx, self.mainsizex//2)
351
351
352 # Make sure that the cursor didn't leave the main area vertically
352 # Make sure that the cursor didn't leave the main area vertically
353 if y < 0:
353 if y < 0:
354 y = 0
354 y = 0
355 self.fetch(y+scrollbordery+1) # try to get more items
355 self.fetch(y+scrollbordery+1) # try to get more items
356 if y >= len(self.items):
356 if y >= len(self.items):
357 y = max(0, len(self.items)-1)
357 y = max(0, len(self.items)-1)
358
358
359 # Make sure that the cursor stays on screen vertically
359 # Make sure that the cursor stays on screen vertically
360 if y < self.datastarty+scrollbordery:
360 if y < self.datastarty+scrollbordery:
361 self.datastarty = max(0, y-scrollbordery)
361 self.datastarty = max(0, y-scrollbordery)
362 elif y >= self.datastarty+self.mainsizey-scrollbordery:
362 elif y >= self.datastarty+self.mainsizey-scrollbordery:
363 self.datastarty = max(0, min(y-self.mainsizey+scrollbordery+1,
363 self.datastarty = max(0, min(y-self.mainsizey+scrollbordery+1,
364 len(self.items)-self.mainsizey))
364 len(self.items)-self.mainsizey))
365
365
366 if refresh: # Do we need to refresh the complete display?
366 if refresh: # Do we need to refresh the complete display?
367 self.calcdisplayattrs()
367 self.calcdisplayattrs()
368 endy = min(self.datastarty+self.mainsizey, len(self.items))
368 endy = min(self.datastarty+self.mainsizey, len(self.items))
369 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
369 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
370 self.calcwidths()
370 self.calcwidths()
371 # Did we scroll vertically => update displayrows
371 # Did we scroll vertically => update displayrows
372 # and various other attributes
372 # and various other attributes
373 elif self.datastarty != olddatastarty:
373 elif self.datastarty != olddatastarty:
374 # Recalculate which attributes we have to display
374 # Recalculate which attributes we have to display
375 olddisplayattrs = self.displayattrs
375 olddisplayattrs = self.displayattrs
376 self.calcdisplayattrs()
376 self.calcdisplayattrs()
377 # If there are new attributes, recreate the cache
377 # If there are new attributes, recreate the cache
378 if self.displayattrs != olddisplayattrs:
378 if self.displayattrs != olddisplayattrs:
379 endy = min(self.datastarty+self.mainsizey, len(self.items))
379 endy = min(self.datastarty+self.mainsizey, len(self.items))
380 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
380 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
381 elif self.datastarty<olddatastarty: # we did scroll up
381 elif self.datastarty<olddatastarty: # we did scroll up
382 # drop rows from the end
382 # drop rows from the end
383 del self.displayrows[self.datastarty-olddatastarty:]
383 del self.displayrows[self.datastarty-olddatastarty:]
384 # fetch new items
384 # fetch new items
385 for i in xrange(olddatastarty-1,
385 for i in xrange(olddatastarty-1,
386 self.datastarty-1, -1):
386 self.datastarty-1, -1):
387 try:
387 try:
388 row = self.getrow(i)
388 row = self.getrow(i)
389 except IndexError:
389 except IndexError:
390 # we didn't have enough objects to fill the screen
390 # we didn't have enough objects to fill the screen
391 break
391 break
392 self.displayrows.insert(0, row)
392 self.displayrows.insert(0, row)
393 else: # we did scroll down
393 else: # we did scroll down
394 # drop rows from the start
394 # drop rows from the start
395 del self.displayrows[:self.datastarty-olddatastarty]
395 del self.displayrows[:self.datastarty-olddatastarty]
396 # fetch new items
396 # fetch new items
397 for i in xrange(olddatastarty+self.mainsizey,
397 for i in xrange(olddatastarty+self.mainsizey,
398 self.datastarty+self.mainsizey):
398 self.datastarty+self.mainsizey):
399 try:
399 try:
400 row = self.getrow(i)
400 row = self.getrow(i)
401 except IndexError:
401 except IndexError:
402 # we didn't have enough objects to fill the screen
402 # we didn't have enough objects to fill the screen
403 break
403 break
404 self.displayrows.append(row)
404 self.displayrows.append(row)
405 self.calcwidths()
405 self.calcwidths()
406
406
407 # Make sure that the cursor didn't leave the data area horizontally
407 # Make sure that the cursor didn't leave the data area horizontally
408 if x < 0:
408 if x < 0:
409 x = 0
409 x = 0
410 elif x >= self.datasizex:
410 elif x >= self.datasizex:
411 x = max(0, self.datasizex-1)
411 x = max(0, self.datasizex-1)
412
412
413 # Make sure that the cursor stays on screen horizontally
413 # Make sure that the cursor stays on screen horizontally
414 if x < self.datastartx+scrollborderx:
414 if x < self.datastartx+scrollborderx:
415 self.datastartx = max(0, x-scrollborderx)
415 self.datastartx = max(0, x-scrollborderx)
416 elif x >= self.datastartx+self.mainsizex-scrollborderx:
416 elif x >= self.datastartx+self.mainsizex-scrollborderx:
417 self.datastartx = max(0, min(x-self.mainsizex+scrollborderx+1,
417 self.datastartx = max(0, min(x-self.mainsizex+scrollborderx+1,
418 self.datasizex-self.mainsizex))
418 self.datasizex-self.mainsizex))
419
419
420 if x == oldx and y == oldy and (x != newx or y != newy): # couldn't move
420 if x == oldx and y == oldy and (x != newx or y != newy): # couldn't move
421 self.browser.beep()
421 self.browser.beep()
422 else:
422 else:
423 self.curx = x
423 self.curx = x
424 self.cury = y
424 self.cury = y
425 self.calcdisplayattr()
425 self.calcdisplayattr()
426
426
427 def sort(self, key, reverse=False):
427 def sort(self, key, reverse=False):
428 """
428 """
429 Sort the currently list of items using the key function ``key``. If
429 Sort the currently list of items using the key function ``key``. If
430 ``reverse`` is true the sort order is reversed.
430 ``reverse`` is true the sort order is reversed.
431 """
431 """
432 curitem = self.items[self.cury] # Remember where the cursor is now
432 curitem = self.items[self.cury] # Remember where the cursor is now
433
433
434 # Sort items
434 # Sort items
435 def realkey(item):
435 def realkey(item):
436 return key(item.item)
436 return key(item.item)
437 self.items = ipipe.deque(sorted(self.items, key=realkey, reverse=reverse))
437 self.items = ipipe.deque(sorted(self.items, key=realkey, reverse=reverse))
438
438
439 # Find out where the object under the cursor went
439 # Find out where the object under the cursor went
440 cury = self.cury
440 cury = self.cury
441 for (i, item) in enumerate(self.items):
441 for (i, item) in enumerate(self.items):
442 if item is curitem:
442 if item is curitem:
443 cury = i
443 cury = i
444 break
444 break
445
445
446 self.moveto(self.curx, cury, refresh=True)
446 self.moveto(self.curx, cury, refresh=True)
447
447
448
448
449 class _CommandInput(object):
449 class _CommandInput(object):
450 keymap = {
450 keymap = {
451 curses.KEY_LEFT: "left",
451 curses.KEY_LEFT: "left",
452 curses.KEY_RIGHT: "right",
452 curses.KEY_RIGHT: "right",
453 curses.KEY_HOME: "home",
453 curses.KEY_HOME: "home",
454 curses.KEY_END: "end",
454 curses.KEY_END: "end",
455 # FIXME: What's happening here?
455 # FIXME: What's happening here?
456 8: "backspace",
456 8: "backspace",
457 127: "backspace",
457 127: "backspace",
458 curses.KEY_BACKSPACE: "backspace",
458 curses.KEY_BACKSPACE: "backspace",
459 curses.KEY_DC: "delete",
459 curses.KEY_DC: "delete",
460 ord("x"): "delete",
460 ord("x"): "delete",
461 ord("\n"): "execute",
461 ord("\n"): "execute",
462 ord("\r"): "execute",
462 ord("\r"): "execute",
463 curses.KEY_UP: "up",
463 curses.KEY_UP: "up",
464 curses.KEY_DOWN: "down",
464 curses.KEY_DOWN: "down",
465 # CTRL-X
465 # CTRL-X
466 0x18: "exit",
466 0x18: "exit",
467 }
467 }
468
468
469 def __init__(self, prompt):
469 def __init__(self, prompt):
470 self.prompt = prompt
470 self.prompt = prompt
471 self.history = []
471 self.history = []
472 self.maxhistory = 100
472 self.maxhistory = 100
473 self.input = ""
473 self.input = ""
474 self.curx = 0
474 self.curx = 0
475 self.cury = -1 # blank line
475 self.cury = -1 # blank line
476
476
477 def start(self):
477 def start(self):
478 self.input = ""
478 self.input = ""
479 self.curx = 0
479 self.curx = 0
480 self.cury = -1 # blank line
480 self.cury = -1 # blank line
481
481
482 def handlekey(self, browser, key):
482 def handlekey(self, browser, key):
483 cmdname = self.keymap.get(key, None)
483 cmdname = self.keymap.get(key, None)
484 if cmdname is not None:
484 if cmdname is not None:
485 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
485 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
486 if cmdfunc is not None:
486 if cmdfunc is not None:
487 return cmdfunc(browser)
487 return cmdfunc(browser)
488 curses.beep()
488 curses.beep()
489 elif key != -1:
489 elif key != -1:
490 try:
490 try:
491 char = chr(key)
491 char = chr(key)
492 except ValueError:
492 except ValueError:
493 curses.beep()
493 curses.beep()
494 else:
494 else:
495 return self.handlechar(browser, char)
495 return self.handlechar(browser, char)
496
496
497 def handlechar(self, browser, char):
497 def handlechar(self, browser, char):
498 self.input = self.input[:self.curx] + char + self.input[self.curx:]
498 self.input = self.input[:self.curx] + char + self.input[self.curx:]
499 self.curx += 1
499 self.curx += 1
500 return True
500 return True
501
501
502 def dohistory(self):
502 def dohistory(self):
503 self.history.insert(0, self.input)
503 self.history.insert(0, self.input)
504 del self.history[:-self.maxhistory]
504 del self.history[:-self.maxhistory]
505
505
506 def cmd_backspace(self, browser):
506 def cmd_backspace(self, browser):
507 if self.curx:
507 if self.curx:
508 self.input = self.input[:self.curx-1] + self.input[self.curx:]
508 self.input = self.input[:self.curx-1] + self.input[self.curx:]
509 self.curx -= 1
509 self.curx -= 1
510 return True
510 return True
511 else:
511 else:
512 curses.beep()
512 curses.beep()
513
513
514 def cmd_delete(self, browser):
514 def cmd_delete(self, browser):
515 if self.curx<len(self.input):
515 if self.curx<len(self.input):
516 self.input = self.input[:self.curx] + self.input[self.curx+1:]
516 self.input = self.input[:self.curx] + self.input[self.curx+1:]
517 return True
517 return True
518 else:
518 else:
519 curses.beep()
519 curses.beep()
520
520
521 def cmd_left(self, browser):
521 def cmd_left(self, browser):
522 if self.curx:
522 if self.curx:
523 self.curx -= 1
523 self.curx -= 1
524 return True
524 return True
525 else:
525 else:
526 curses.beep()
526 curses.beep()
527
527
528 def cmd_right(self, browser):
528 def cmd_right(self, browser):
529 if self.curx < len(self.input):
529 if self.curx < len(self.input):
530 self.curx += 1
530 self.curx += 1
531 return True
531 return True
532 else:
532 else:
533 curses.beep()
533 curses.beep()
534
534
535 def cmd_home(self, browser):
535 def cmd_home(self, browser):
536 if self.curx:
536 if self.curx:
537 self.curx = 0
537 self.curx = 0
538 return True
538 return True
539 else:
539 else:
540 curses.beep()
540 curses.beep()
541
541
542 def cmd_end(self, browser):
542 def cmd_end(self, browser):
543 if self.curx < len(self.input):
543 if self.curx < len(self.input):
544 self.curx = len(self.input)
544 self.curx = len(self.input)
545 return True
545 return True
546 else:
546 else:
547 curses.beep()
547 curses.beep()
548
548
549 def cmd_up(self, browser):
549 def cmd_up(self, browser):
550 if self.cury < len(self.history)-1:
550 if self.cury < len(self.history)-1:
551 self.cury += 1
551 self.cury += 1
552 self.input = self.history[self.cury]
552 self.input = self.history[self.cury]
553 self.curx = len(self.input)
553 self.curx = len(self.input)
554 return True
554 return True
555 else:
555 else:
556 curses.beep()
556 curses.beep()
557
557
558 def cmd_down(self, browser):
558 def cmd_down(self, browser):
559 if self.cury >= 0:
559 if self.cury >= 0:
560 self.cury -= 1
560 self.cury -= 1
561 if self.cury>=0:
561 if self.cury>=0:
562 self.input = self.history[self.cury]
562 self.input = self.history[self.cury]
563 else:
563 else:
564 self.input = ""
564 self.input = ""
565 self.curx = len(self.input)
565 self.curx = len(self.input)
566 return True
566 return True
567 else:
567 else:
568 curses.beep()
568 curses.beep()
569
569
570 def cmd_exit(self, browser):
570 def cmd_exit(self, browser):
571 browser.mode = "default"
571 browser.mode = "default"
572 return True
572 return True
573
573
574 def cmd_execute(self, browser):
574 def cmd_execute(self, browser):
575 raise NotImplementedError
575 raise NotImplementedError
576
576
577
577
578 class _CommandGoto(_CommandInput):
578 class _CommandGoto(_CommandInput):
579 def __init__(self):
579 def __init__(self):
580 _CommandInput.__init__(self, "goto object #")
580 _CommandInput.__init__(self, "goto object #")
581
581
582 def handlechar(self, browser, char):
582 def handlechar(self, browser, char):
583 # Only accept digits
583 # Only accept digits
584 if not "0" <= char <= "9":
584 if not "0" <= char <= "9":
585 curses.beep()
585 curses.beep()
586 else:
586 else:
587 return _CommandInput.handlechar(self, browser, char)
587 return _CommandInput.handlechar(self, browser, char)
588
588
589 def cmd_execute(self, browser):
589 def cmd_execute(self, browser):
590 level = browser.levels[-1]
590 level = browser.levels[-1]
591 if self.input:
591 if self.input:
592 self.dohistory()
592 self.dohistory()
593 level.moveto(level.curx, int(self.input))
593 level.moveto(level.curx, int(self.input))
594 browser.mode = "default"
594 browser.mode = "default"
595 return True
595 return True
596
596
597
597
598 class _CommandFind(_CommandInput):
598 class _CommandFind(_CommandInput):
599 def __init__(self):
599 def __init__(self):
600 _CommandInput.__init__(self, "find expression")
600 _CommandInput.__init__(self, "find expression")
601
601
602 def cmd_execute(self, browser):
602 def cmd_execute(self, browser):
603 level = browser.levels[-1]
603 level = browser.levels[-1]
604 if self.input:
604 if self.input:
605 self.dohistory()
605 self.dohistory()
606 while True:
606 while True:
607 cury = level.cury
607 cury = level.cury
608 level.moveto(level.curx, cury+1)
608 level.moveto(level.curx, cury+1)
609 if cury == level.cury:
609 if cury == level.cury:
610 curses.beep()
610 curses.beep()
611 break # hit end
611 break # hit end
612 item = level.items[level.cury].item
612 item = level.items[level.cury].item
613 try:
613 try:
614 globals = ipipe.getglobals(None)
614 globals = ipipe.getglobals(None)
615 if eval(self.input, globals, ipipe.AttrNamespace(item)):
615 if eval(self.input, globals, ipipe.AttrNamespace(item)):
616 break # found something
616 break # found something
617 except (KeyboardInterrupt, SystemExit):
617 except (KeyboardInterrupt, SystemExit):
618 raise
618 raise
619 except Exception, exc:
619 except Exception, exc:
620 browser.report(exc)
620 browser.report(exc)
621 curses.beep()
621 curses.beep()
622 break # break on error
622 break # break on error
623 browser.mode = "default"
623 browser.mode = "default"
624 return True
624 return True
625
625
626
626
627 class _CommandFindBackwards(_CommandInput):
627 class _CommandFindBackwards(_CommandInput):
628 def __init__(self):
628 def __init__(self):
629 _CommandInput.__init__(self, "find backwards expression")
629 _CommandInput.__init__(self, "find backwards expression")
630
630
631 def cmd_execute(self, browser):
631 def cmd_execute(self, browser):
632 level = browser.levels[-1]
632 level = browser.levels[-1]
633 if self.input:
633 if self.input:
634 self.dohistory()
634 self.dohistory()
635 while level.cury:
635 while level.cury:
636 level.moveto(level.curx, level.cury-1)
636 level.moveto(level.curx, level.cury-1)
637 item = level.items[level.cury].item
637 item = level.items[level.cury].item
638 try:
638 try:
639 globals = ipipe.getglobals(None)
639 globals = ipipe.getglobals(None)
640 if eval(self.input, globals, ipipe.AttrNamespace(item)):
640 if eval(self.input, globals, ipipe.AttrNamespace(item)):
641 break # found something
641 break # found something
642 except (KeyboardInterrupt, SystemExit):
642 except (KeyboardInterrupt, SystemExit):
643 raise
643 raise
644 except Exception, exc:
644 except Exception, exc:
645 browser.report(exc)
645 browser.report(exc)
646 curses.beep()
646 curses.beep()
647 break # break on error
647 break # break on error
648 else:
648 else:
649 curses.beep()
649 curses.beep()
650 browser.mode = "default"
650 browser.mode = "default"
651 return True
651 return True
652
652
653
653
654 class ibrowse(ipipe.Display):
654 class ibrowse(ipipe.Display):
655 # Show this many lines from the previous screen when paging horizontally
655 # Show this many lines from the previous screen when paging horizontally
656 pageoverlapx = 1
656 pageoverlapx = 1
657
657
658 # Show this many lines from the previous screen when paging vertically
658 # Show this many lines from the previous screen when paging vertically
659 pageoverlapy = 1
659 pageoverlapy = 1
660
660
661 # Start scrolling when the cursor is less than this number of columns
661 # Start scrolling when the cursor is less than this number of columns
662 # away from the left or right screen edge
662 # away from the left or right screen edge
663 scrollborderx = 10
663 scrollborderx = 10
664
664
665 # Start scrolling when the cursor is less than this number of lines
665 # Start scrolling when the cursor is less than this number of lines
666 # away from the top or bottom screen edge
666 # away from the top or bottom screen edge
667 scrollbordery = 5
667 scrollbordery = 5
668
668
669 # Accelerate by this factor when scrolling horizontally
669 # Accelerate by this factor when scrolling horizontally
670 acceleratex = 1.05
670 acceleratex = 1.05
671
671
672 # Accelerate by this factor when scrolling vertically
672 # Accelerate by this factor when scrolling vertically
673 acceleratey = 1.05
673 acceleratey = 1.05
674
674
675 # The maximum horizontal scroll speed
675 # The maximum horizontal scroll speed
676 # (as a factor of the screen width (i.e. 0.5 == half a screen width)
676 # (as a factor of the screen width (i.e. 0.5 == half a screen width)
677 maxspeedx = 0.5
677 maxspeedx = 0.5
678
678
679 # The maximum vertical scroll speed
679 # The maximum vertical scroll speed
680 # (as a factor of the screen height (i.e. 0.5 == half a screen height)
680 # (as a factor of the screen height (i.e. 0.5 == half a screen height)
681 maxspeedy = 0.5
681 maxspeedy = 0.5
682
682
683 # The maximum number of header lines for browser level
683 # The maximum number of header lines for browser level
684 # if the nesting is deeper, only the innermost levels are displayed
684 # if the nesting is deeper, only the innermost levels are displayed
685 maxheaders = 5
685 maxheaders = 5
686
686
687 # The approximate maximum length of a column entry
687 # The approximate maximum length of a column entry
688 maxattrlength = 200
688 maxattrlength = 200
689
689
690 # Styles for various parts of the GUI
690 # Styles for various parts of the GUI
691 style_objheadertext = astyle.Style.fromstr("white:black:bold|reverse")
691 style_objheadertext = astyle.Style.fromstr("white:black:bold|reverse")
692 style_objheadernumber = astyle.Style.fromstr("white:blue:bold|reverse")
692 style_objheadernumber = astyle.Style.fromstr("white:blue:bold|reverse")
693 style_objheaderobject = astyle.Style.fromstr("white:black:reverse")
693 style_objheaderobject = astyle.Style.fromstr("white:black:reverse")
694 style_colheader = astyle.Style.fromstr("blue:white:reverse")
694 style_colheader = astyle.Style.fromstr("blue:white:reverse")
695 style_colheaderhere = astyle.Style.fromstr("green:black:bold|reverse")
695 style_colheaderhere = astyle.Style.fromstr("green:black:bold|reverse")
696 style_colheadersep = astyle.Style.fromstr("blue:black:reverse")
696 style_colheadersep = astyle.Style.fromstr("blue:black:reverse")
697 style_number = astyle.Style.fromstr("blue:white:reverse")
697 style_number = astyle.Style.fromstr("blue:white:reverse")
698 style_numberhere = astyle.Style.fromstr("green:black:bold|reverse")
698 style_numberhere = astyle.Style.fromstr("green:black:bold|reverse")
699 style_sep = astyle.Style.fromstr("blue:black")
699 style_sep = astyle.Style.fromstr("blue:black")
700 style_data = astyle.Style.fromstr("white:black")
700 style_data = astyle.Style.fromstr("white:black")
701 style_datapad = astyle.Style.fromstr("blue:black:bold")
701 style_datapad = astyle.Style.fromstr("blue:black:bold")
702 style_footer = astyle.Style.fromstr("black:white")
702 style_footer = astyle.Style.fromstr("black:white")
703 style_report = astyle.Style.fromstr("white:black")
703 style_report = astyle.Style.fromstr("white:black")
704
704
705 # Column separator in header
705 # Column separator in header
706 headersepchar = "|"
706 headersepchar = "|"
707
707
708 # Character for padding data cell entries
708 # Character for padding data cell entries
709 datapadchar = "."
709 datapadchar = "."
710
710
711 # Column separator in data area
711 # Column separator in data area
712 datasepchar = "|"
712 datasepchar = "|"
713
713
714 # Character to use for "empty" cell (i.e. for non-existing attributes)
714 # Character to use for "empty" cell (i.e. for non-existing attributes)
715 nodatachar = "-"
715 nodatachar = "-"
716
716
717 # Prompts for modes that require keyboard input
717 # Prompts for modes that require keyboard input
718 prompts = {
718 prompts = {
719 "goto": _CommandGoto(),
719 "goto": _CommandGoto(),
720 "find": _CommandFind(),
720 "find": _CommandFind(),
721 "findbackwards": _CommandFindBackwards()
721 "findbackwards": _CommandFindBackwards()
722 }
722 }
723
723
724 # Maps curses key codes to "function" names
724 # Maps curses key codes to "function" names
725 keymap = {
725 keymap = {
726 ord("q"): "quit",
726 ord("q"): "quit",
727 curses.KEY_UP: "up",
727 curses.KEY_UP: "up",
728 curses.KEY_DOWN: "down",
728 curses.KEY_DOWN: "down",
729 curses.KEY_PPAGE: "pageup",
729 curses.KEY_PPAGE: "pageup",
730 curses.KEY_NPAGE: "pagedown",
730 curses.KEY_NPAGE: "pagedown",
731 curses.KEY_LEFT: "left",
731 curses.KEY_LEFT: "left",
732 curses.KEY_RIGHT: "right",
732 curses.KEY_RIGHT: "right",
733 curses.KEY_HOME: "home",
733 curses.KEY_HOME: "home",
734 curses.KEY_END: "end",
734 curses.KEY_END: "end",
735 ord("<"): "prevattr",
735 ord("<"): "prevattr",
736 0x1b: "prevattr", # SHIFT-TAB
736 0x1b: "prevattr", # SHIFT-TAB
737 ord(">"): "nextattr",
737 ord(">"): "nextattr",
738 ord("\t"):"nextattr", # TAB
738 ord("\t"):"nextattr", # TAB
739 ord("p"): "pick",
739 ord("p"): "pick",
740 ord("P"): "pickattr",
740 ord("P"): "pickattr",
741 ord("C"): "pickallattrs",
741 ord("C"): "pickallattrs",
742 ord("m"): "pickmarked",
742 ord("m"): "pickmarked",
743 ord("M"): "pickmarkedattr",
743 ord("M"): "pickmarkedattr",
744 ord("\n"): "enterdefault",
744 ord("\n"): "enterdefault",
745 ord("\r"): "enterdefault",
745 ord("\r"): "enterdefault",
746 # FIXME: What's happening here?
746 # FIXME: What's happening here?
747 8: "leave",
747 8: "leave",
748 127: "leave",
748 127: "leave",
749 curses.KEY_BACKSPACE: "leave",
749 curses.KEY_BACKSPACE: "leave",
750 ord("x"): "leave",
750 ord("x"): "leave",
751 ord("h"): "help",
751 ord("h"): "help",
752 ord("e"): "enter",
752 ord("e"): "enter",
753 ord("E"): "enterattr",
753 ord("E"): "enterattr",
754 ord("d"): "detail",
754 ord("d"): "detail",
755 ord("D"): "detailattr",
755 ord("D"): "detailattr",
756 ord(" "): "tooglemark",
756 ord(" "): "tooglemark",
757 ord("r"): "markrange",
757 ord("r"): "markrange",
758 ord("v"): "sortattrasc",
758 ord("v"): "sortattrasc",
759 ord("V"): "sortattrdesc",
759 ord("V"): "sortattrdesc",
760 ord("g"): "goto",
760 ord("g"): "goto",
761 ord("f"): "find",
761 ord("f"): "find",
762 ord("b"): "findbackwards",
762 ord("b"): "findbackwards",
763 }
763 }
764
764
765 def __init__(self, *attrs):
765 def __init__(self, *attrs):
766 """
766 """
767 Create a new browser. If ``attrs`` is not empty, it is the list
767 Create a new browser. If ``attrs`` is not empty, it is the list
768 of attributes that will be displayed in the browser, otherwise
768 of attributes that will be displayed in the browser, otherwise
769 these will be determined by the objects on screen.
769 these will be determined by the objects on screen.
770 """
770 """
771 self.attrs = attrs
771 self.attrs = attrs
772
772
773 # Stack of browser levels
773 # Stack of browser levels
774 self.levels = []
774 self.levels = []
775 # how many colums to scroll (Changes when accelerating)
775 # how many colums to scroll (Changes when accelerating)
776 self.stepx = 1.
776 self.stepx = 1.
777
777
778 # how many rows to scroll (Changes when accelerating)
778 # how many rows to scroll (Changes when accelerating)
779 self.stepy = 1.
779 self.stepy = 1.
780
780
781 # Beep on the edges of the data area? (Will be set to ``False``
781 # Beep on the edges of the data area? (Will be set to ``False``
782 # once the cursor hits the edge of the screen, so we don't get
782 # once the cursor hits the edge of the screen, so we don't get
783 # multiple beeps).
783 # multiple beeps).
784 self._dobeep = True
784 self._dobeep = True
785
785
786 # Cache for registered ``curses`` colors and styles.
786 # Cache for registered ``curses`` colors and styles.
787 self._styles = {}
787 self._styles = {}
788 self._colors = {}
788 self._colors = {}
789 self._maxcolor = 1
789 self._maxcolor = 1
790
790
791 # How many header lines do we want to paint (the numbers of levels
791 # How many header lines do we want to paint (the numbers of levels
792 # we have, but with an upper bound)
792 # we have, but with an upper bound)
793 self._headerlines = 1
793 self._headerlines = 1
794
794
795 # Index of first header line
795 # Index of first header line
796 self._firstheaderline = 0
796 self._firstheaderline = 0
797
797
798 # curses window
798 # curses window
799 self.scr = None
799 self.scr = None
800 # report in the footer line (error, executed command etc.)
800 # report in the footer line (error, executed command etc.)
801 self._report = None
801 self._report = None
802
802
803 # value to be returned to the caller (set by commands)
803 # value to be returned to the caller (set by commands)
804 self.returnvalue = None
804 self.returnvalue = None
805
805
806 # The mode the browser is in
806 # The mode the browser is in
807 # e.g. normal browsing or entering an argument for a command
807 # e.g. normal browsing or entering an argument for a command
808 self.mode = "default"
808 self.mode = "default"
809
809
810 # The partially entered row number for the goto command
810 # The partially entered row number for the goto command
811 self.goto = ""
811 self.goto = ""
812
812
813 def nextstepx(self, step):
813 def nextstepx(self, step):
814 """
814 """
815 Accelerate horizontally.
815 Accelerate horizontally.
816 """
816 """
817 return max(1., min(step*self.acceleratex,
817 return max(1., min(step*self.acceleratex,
818 self.maxspeedx*self.levels[-1].mainsizex))
818 self.maxspeedx*self.levels[-1].mainsizex))
819
819
820 def nextstepy(self, step):
820 def nextstepy(self, step):
821 """
821 """
822 Accelerate vertically.
822 Accelerate vertically.
823 """
823 """
824 return max(1., min(step*self.acceleratey,
824 return max(1., min(step*self.acceleratey,
825 self.maxspeedy*self.levels[-1].mainsizey))
825 self.maxspeedy*self.levels[-1].mainsizey))
826
826
827 def getstyle(self, style):
827 def getstyle(self, style):
828 """
828 """
829 Register the ``style`` with ``curses`` or get it from the cache,
829 Register the ``style`` with ``curses`` or get it from the cache,
830 if it has been registered before.
830 if it has been registered before.
831 """
831 """
832 try:
832 try:
833 return self._styles[style.fg, style.bg, style.attrs]
833 return self._styles[style.fg, style.bg, style.attrs]
834 except KeyError:
834 except KeyError:
835 attrs = 0
835 attrs = 0
836 for b in astyle.A2CURSES:
836 for b in astyle.A2CURSES:
837 if style.attrs & b:
837 if style.attrs & b:
838 attrs |= astyle.A2CURSES[b]
838 attrs |= astyle.A2CURSES[b]
839 try:
839 try:
840 color = self._colors[style.fg, style.bg]
840 color = self._colors[style.fg, style.bg]
841 except KeyError:
841 except KeyError:
842 curses.init_pair(
842 curses.init_pair(
843 self._maxcolor,
843 self._maxcolor,
844 astyle.COLOR2CURSES[style.fg],
844 astyle.COLOR2CURSES[style.fg],
845 astyle.COLOR2CURSES[style.bg]
845 astyle.COLOR2CURSES[style.bg]
846 )
846 )
847 color = curses.color_pair(self._maxcolor)
847 color = curses.color_pair(self._maxcolor)
848 self._colors[style.fg, style.bg] = color
848 self._colors[style.fg, style.bg] = color
849 self._maxcolor += 1
849 self._maxcolor += 1
850 c = color | attrs
850 c = color | attrs
851 self._styles[style.fg, style.bg, style.attrs] = c
851 self._styles[style.fg, style.bg, style.attrs] = c
852 return c
852 return c
853
853
854 def addstr(self, y, x, begx, endx, text, style):
854 def addstr(self, y, x, begx, endx, text, style):
855 """
855 """
856 A version of ``curses.addstr()`` that can handle ``x`` coordinates
856 A version of ``curses.addstr()`` that can handle ``x`` coordinates
857 that are outside the screen.
857 that are outside the screen.
858 """
858 """
859 text2 = text[max(0, begx-x):max(0, endx-x)]
859 text2 = text[max(0, begx-x):max(0, endx-x)]
860 if text2:
860 if text2:
861 self.scr.addstr(y, max(x, begx), text2, self.getstyle(style))
861 self.scr.addstr(y, max(x, begx), text2, self.getstyle(style))
862 return len(text)
862 return len(text)
863
863
864 def addchr(self, y, x, begx, endx, c, l, style):
864 def addchr(self, y, x, begx, endx, c, l, style):
865 x0 = max(x, begx)
865 x0 = max(x, begx)
866 x1 = min(x+l, endx)
866 x1 = min(x+l, endx)
867 if x1>x0:
867 if x1>x0:
868 self.scr.addstr(y, x0, c*(x1-x0), self.getstyle(style))
868 self.scr.addstr(y, x0, c*(x1-x0), self.getstyle(style))
869 return l
869 return l
870
870
871 def _calcheaderlines(self, levels):
871 def _calcheaderlines(self, levels):
872 # Calculate how many headerlines do we have to display, if we have
872 # Calculate how many headerlines do we have to display, if we have
873 # ``levels`` browser levels
873 # ``levels`` browser levels
874 if levels is None:
874 if levels is None:
875 levels = len(self.levels)
875 levels = len(self.levels)
876 self._headerlines = min(self.maxheaders, levels)
876 self._headerlines = min(self.maxheaders, levels)
877 self._firstheaderline = levels-self._headerlines
877 self._firstheaderline = levels-self._headerlines
878
878
879 def getstylehere(self, style):
879 def getstylehere(self, style):
880 """
880 """
881 Return a style for displaying the original style ``style``
881 Return a style for displaying the original style ``style``
882 in the row the cursor is on.
882 in the row the cursor is on.
883 """
883 """
884 return astyle.Style(style.fg, style.bg, style.attrs | astyle.A_BOLD)
884 return astyle.Style(style.fg, style.bg, style.attrs | astyle.A_BOLD)
885
885
886 def report(self, msg):
886 def report(self, msg):
887 """
887 """
888 Store the message ``msg`` for display below the footer line. This
888 Store the message ``msg`` for display below the footer line. This
889 will be displayed as soon as the screen is redrawn.
889 will be displayed as soon as the screen is redrawn.
890 """
890 """
891 self._report = msg
891 self._report = msg
892
892
893 def enter(self, item, mode, *attrs):
893 def enter(self, item, mode, *attrs):
894 """
894 """
895 Enter the object ``item`` in the mode ``mode``. If ``attrs`` is
895 Enter the object ``item`` in the mode ``mode``. If ``attrs`` is
896 specified, it will be used as a fixed list of attributes to display.
896 specified, it will be used as a fixed list of attributes to display.
897 """
897 """
898 try:
898 try:
899 iterator = ipipe.xiter(item, mode)
899 iterator = ipipe.xiter(item, mode)
900 except (KeyboardInterrupt, SystemExit):
900 except (KeyboardInterrupt, SystemExit):
901 raise
901 raise
902 except Exception, exc:
902 except Exception, exc:
903 curses.beep()
903 curses.beep()
904 self.report(exc)
904 self.report(exc)
905 else:
905 else:
906 self._calcheaderlines(len(self.levels)+1)
906 self._calcheaderlines(len(self.levels)+1)
907 level = _BrowserLevel(
907 level = _BrowserLevel(
908 self,
908 self,
909 item,
909 item,
910 iterator,
910 iterator,
911 self.scrsizey-1-self._headerlines-2,
911 self.scrsizey-1-self._headerlines-2,
912 *attrs
912 *attrs
913 )
913 )
914 self.levels.append(level)
914 self.levels.append(level)
915
915
916 def startkeyboardinput(self, mode):
916 def startkeyboardinput(self, mode):
917 """
917 """
918 Enter mode ``mode``, which requires keyboard input.
918 Enter mode ``mode``, which requires keyboard input.
919 """
919 """
920 self.mode = mode
920 self.mode = mode
921 self.prompts[mode].start()
921 self.prompts[mode].start()
922
922
923 def keylabel(self, keycode):
923 def keylabel(self, keycode):
924 """
924 """
925 Return a pretty name for the ``curses`` key ``keycode`` (used in the
925 Return a pretty name for the ``curses`` key ``keycode`` (used in the
926 help screen and in reports about unassigned keys).
926 help screen and in reports about unassigned keys).
927 """
927 """
928 if keycode <= 0xff:
928 if keycode <= 0xff:
929 specialsnames = {
929 specialsnames = {
930 ord("\n"): "RETURN",
930 ord("\n"): "RETURN",
931 ord(" "): "SPACE",
931 ord(" "): "SPACE",
932 ord("\t"): "TAB",
932 ord("\t"): "TAB",
933 ord("\x7f"): "DELETE",
933 ord("\x7f"): "DELETE",
934 ord("\x08"): "BACKSPACE",
934 ord("\x08"): "BACKSPACE",
935 }
935 }
936 if keycode in specialsnames:
936 if keycode in specialsnames:
937 return specialsnames[keycode]
937 return specialsnames[keycode]
938 return repr(chr(keycode))
938 return repr(chr(keycode))
939 for name in dir(curses):
939 for name in dir(curses):
940 if name.startswith("KEY_") and getattr(curses, name) == keycode:
940 if name.startswith("KEY_") and getattr(curses, name) == keycode:
941 return name
941 return name
942 return str(keycode)
942 return str(keycode)
943
943
944 def beep(self, force=False):
944 def beep(self, force=False):
945 if force or self._dobeep:
945 if force or self._dobeep:
946 curses.beep()
946 curses.beep()
947 # don't beep again (as long as the same key is pressed)
947 # don't beep again (as long as the same key is pressed)
948 self._dobeep = False
948 self._dobeep = False
949
949
950 def cmd_quit(self):
950 def cmd_quit(self):
951 self.returnvalue = None
951 self.returnvalue = None
952 return True
952 return True
953
953
954 def cmd_up(self):
954 def cmd_up(self):
955 level = self.levels[-1]
955 level = self.levels[-1]
956 self.report("up")
956 self.report("up")
957 level.moveto(level.curx, level.cury-self.stepy)
957 level.moveto(level.curx, level.cury-self.stepy)
958
958
959 def cmd_down(self):
959 def cmd_down(self):
960 level = self.levels[-1]
960 level = self.levels[-1]
961 self.report("down")
961 self.report("down")
962 level.moveto(level.curx, level.cury+self.stepy)
962 level.moveto(level.curx, level.cury+self.stepy)
963
963
964 def cmd_pageup(self):
964 def cmd_pageup(self):
965 level = self.levels[-1]
965 level = self.levels[-1]
966 self.report("page up")
966 self.report("page up")
967 level.moveto(level.curx, level.cury-level.mainsizey+self.pageoverlapy)
967 level.moveto(level.curx, level.cury-level.mainsizey+self.pageoverlapy)
968
968
969 def cmd_pagedown(self):
969 def cmd_pagedown(self):
970 level = self.levels[-1]
970 level = self.levels[-1]
971 self.report("page down")
971 self.report("page down")
972 level.moveto(level.curx, level.cury+level.mainsizey-self.pageoverlapy)
972 level.moveto(level.curx, level.cury+level.mainsizey-self.pageoverlapy)
973
973
974 def cmd_left(self):
974 def cmd_left(self):
975 level = self.levels[-1]
975 level = self.levels[-1]
976 self.report("left")
976 self.report("left")
977 level.moveto(level.curx-self.stepx, level.cury)
977 level.moveto(level.curx-self.stepx, level.cury)
978
978
979 def cmd_right(self):
979 def cmd_right(self):
980 level = self.levels[-1]
980 level = self.levels[-1]
981 self.report("right")
981 self.report("right")
982 level.moveto(level.curx+self.stepx, level.cury)
982 level.moveto(level.curx+self.stepx, level.cury)
983
983
984 def cmd_home(self):
984 def cmd_home(self):
985 level = self.levels[-1]
985 level = self.levels[-1]
986 self.report("home")
986 self.report("home")
987 level.moveto(0, level.cury)
987 level.moveto(0, level.cury)
988
988
989 def cmd_end(self):
989 def cmd_end(self):
990 level = self.levels[-1]
990 level = self.levels[-1]
991 self.report("end")
991 self.report("end")
992 level.moveto(level.datasizex+level.mainsizey-self.pageoverlapx, level.cury)
992 level.moveto(level.datasizex+level.mainsizey-self.pageoverlapx, level.cury)
993
993
994 def cmd_prevattr(self):
994 def cmd_prevattr(self):
995 level = self.levels[-1]
995 level = self.levels[-1]
996 if level.displayattr[0] is None or level.displayattr[0] == 0:
996 if level.displayattr[0] is None or level.displayattr[0] == 0:
997 self.beep()
997 self.beep()
998 else:
998 else:
999 self.report("prevattr")
999 self.report("prevattr")
1000 pos = 0
1000 pos = 0
1001 for (i, attrname) in enumerate(level.displayattrs):
1001 for (i, attrname) in enumerate(level.displayattrs):
1002 if i == level.displayattr[0]-1:
1002 if i == level.displayattr[0]-1:
1003 break
1003 break
1004 pos += level.colwidths[attrname] + 1
1004 pos += level.colwidths[attrname] + 1
1005 level.moveto(pos, level.cury)
1005 level.moveto(pos, level.cury)
1006
1006
1007 def cmd_nextattr(self):
1007 def cmd_nextattr(self):
1008 level = self.levels[-1]
1008 level = self.levels[-1]
1009 if level.displayattr[0] is None or level.displayattr[0] == len(level.displayattrs)-1:
1009 if level.displayattr[0] is None or level.displayattr[0] == len(level.displayattrs)-1:
1010 self.beep()
1010 self.beep()
1011 else:
1011 else:
1012 self.report("nextattr")
1012 self.report("nextattr")
1013 pos = 0
1013 pos = 0
1014 for (i, attrname) in enumerate(level.displayattrs):
1014 for (i, attrname) in enumerate(level.displayattrs):
1015 if i == level.displayattr[0]+1:
1015 if i == level.displayattr[0]+1:
1016 break
1016 break
1017 pos += level.colwidths[attrname] + 1
1017 pos += level.colwidths[attrname] + 1
1018 level.moveto(pos, level.cury)
1018 level.moveto(pos, level.cury)
1019
1019
1020 def cmd_pick(self):
1020 def cmd_pick(self):
1021 level = self.levels[-1]
1021 level = self.levels[-1]
1022 self.returnvalue = level.items[level.cury].item
1022 self.returnvalue = level.items[level.cury].item
1023 return True
1023 return True
1024
1024
1025 def cmd_pickattr(self):
1025 def cmd_pickattr(self):
1026 level = self.levels[-1]
1026 level = self.levels[-1]
1027 attrname = level.displayattr[1]
1027 attrname = level.displayattr[1]
1028 if attrname is ipipe.noitem:
1028 if attrname is ipipe.noitem:
1029 curses.beep()
1029 curses.beep()
1030 self.report(AttributeError(ipipe._attrname(attrname)))
1030 self.report(AttributeError(ipipe._attrname(attrname)))
1031 return
1031 return
1032 attr = ipipe._getattr(level.items[level.cury].item, attrname)
1032 attr = ipipe._getattr(level.items[level.cury].item, attrname)
1033 if attr is ipipe.noitem:
1033 if attr is ipipe.noitem:
1034 curses.beep()
1034 curses.beep()
1035 self.report(AttributeError(ipipe._attrname(attrname)))
1035 self.report(AttributeError(ipipe._attrname(attrname)))
1036 else:
1036 else:
1037 self.returnvalue = attr
1037 self.returnvalue = attr
1038 return True
1038 return True
1039
1039
1040 def cmd_pickallattrs(self):
1040 def cmd_pickallattrs(self):
1041 level = self.levels[-1]
1041 level = self.levels[-1]
1042 attrname = level.displayattr[1]
1042 attrname = level.displayattr[1]
1043 if attrname is ipipe.noitem:
1043 if attrname is ipipe.noitem:
1044 curses.beep()
1044 curses.beep()
1045 self.report(AttributeError(ipipe._attrname(attrname)))
1045 self.report(AttributeError(ipipe._attrname(attrname)))
1046 return
1046 return
1047 result = []
1047 result = []
1048 for cache in level.items:
1048 for cache in level.items:
1049 attr = ipipe._getattr(cache.item, attrname)
1049 attr = ipipe._getattr(cache.item, attrname)
1050 if attr is not ipipe.noitem:
1050 if attr is not ipipe.noitem:
1051 result.append(attr)
1051 result.append(attr)
1052 self.returnvalue = result
1052 self.returnvalue = result
1053 return True
1053 return True
1054
1054
1055 def cmd_pickmarked(self):
1055 def cmd_pickmarked(self):
1056 level = self.levels[-1]
1056 level = self.levels[-1]
1057 self.returnvalue = [cache.item for cache in level.items if cache.marked]
1057 self.returnvalue = [cache.item for cache in level.items if cache.marked]
1058 return True
1058 return True
1059
1059
1060 def cmd_pickmarkedattr(self):
1060 def cmd_pickmarkedattr(self):
1061 level = self.levels[-1]
1061 level = self.levels[-1]
1062 attrname = level.displayattr[1]
1062 attrname = level.displayattr[1]
1063 if attrname is ipipe.noitem:
1063 if attrname is ipipe.noitem:
1064 curses.beep()
1064 curses.beep()
1065 self.report(AttributeError(ipipe._attrname(attrname)))
1065 self.report(AttributeError(ipipe._attrname(attrname)))
1066 return
1066 return
1067 result = []
1067 result = []
1068 for cache in level.items:
1068 for cache in level.items:
1069 if cache.marked:
1069 if cache.marked:
1070 attr = ipipe._getattr(cache.item, attrname)
1070 attr = ipipe._getattr(cache.item, attrname)
1071 if attr is not ipipe.noitem:
1071 if attr is not ipipe.noitem:
1072 result.append(attr)
1072 result.append(attr)
1073 self.returnvalue = result
1073 self.returnvalue = result
1074 return True
1074 return True
1075
1075
1076 def cmd_markrange(self):
1076 def cmd_markrange(self):
1077 level = self.levels[-1]
1077 level = self.levels[-1]
1078 self.report("markrange")
1078 self.report("markrange")
1079 start = None
1079 start = None
1080 if level.items:
1080 if level.items:
1081 for i in xrange(level.cury, -1, -1):
1081 for i in xrange(level.cury, -1, -1):
1082 if level.items[i].marked:
1082 if level.items[i].marked:
1083 start = i
1083 start = i
1084 break
1084 break
1085 if start is None:
1085 if start is None:
1086 self.report(CommandError("no mark before cursor"))
1086 self.report(CommandError("no mark before cursor"))
1087 curses.beep()
1087 curses.beep()
1088 else:
1088 else:
1089 for i in xrange(start, level.cury+1):
1089 for i in xrange(start, level.cury+1):
1090 cache = level.items[i]
1090 cache = level.items[i]
1091 if not cache.marked:
1091 if not cache.marked:
1092 cache.marked = True
1092 cache.marked = True
1093 level.marked += 1
1093 level.marked += 1
1094
1094
1095 def cmd_enterdefault(self):
1095 def cmd_enterdefault(self):
1096 level = self.levels[-1]
1096 level = self.levels[-1]
1097 try:
1097 try:
1098 item = level.items[level.cury].item
1098 item = level.items[level.cury].item
1099 except IndexError:
1099 except IndexError:
1100 self.report(CommandError("No object"))
1100 self.report(CommandError("No object"))
1101 curses.beep()
1101 curses.beep()
1102 else:
1102 else:
1103 self.report("entering object (default mode)...")
1103 self.report("entering object (default mode)...")
1104 self.enter(item, "default")
1104 self.enter(item, "default")
1105
1105
1106 def cmd_leave(self):
1106 def cmd_leave(self):
1107 self.report("leave")
1107 self.report("leave")
1108 if len(self.levels) > 1:
1108 if len(self.levels) > 1:
1109 self._calcheaderlines(len(self.levels)-1)
1109 self._calcheaderlines(len(self.levels)-1)
1110 self.levels.pop(-1)
1110 self.levels.pop(-1)
1111 else:
1111 else:
1112 self.report(CommandError("This is the last level"))
1112 self.report(CommandError("This is the last level"))
1113 curses.beep()
1113 curses.beep()
1114
1114
1115 def cmd_enter(self):
1115 def cmd_enter(self):
1116 level = self.levels[-1]
1116 level = self.levels[-1]
1117 try:
1117 try:
1118 item = level.items[level.cury].item
1118 item = level.items[level.cury].item
1119 except IndexError:
1119 except IndexError:
1120 self.report(CommandError("No object"))
1120 self.report(CommandError("No object"))
1121 curses.beep()
1121 curses.beep()
1122 else:
1122 else:
1123 self.report("entering object...")
1123 self.report("entering object...")
1124 self.enter(item, None)
1124 self.enter(item, None)
1125
1125
1126 def cmd_enterattr(self):
1126 def cmd_enterattr(self):
1127 level = self.levels[-1]
1127 level = self.levels[-1]
1128 attrname = level.displayattr[1]
1128 attrname = level.displayattr[1]
1129 if attrname is ipipe.noitem:
1129 if attrname is ipipe.noitem:
1130 curses.beep()
1130 curses.beep()
1131 self.report(AttributeError(ipipe._attrname(attrname)))
1131 self.report(AttributeError(ipipe._attrname(attrname)))
1132 return
1132 return
1133 try:
1133 try:
1134 item = level.items[level.cury].item
1134 item = level.items[level.cury].item
1135 except IndexError:
1135 except IndexError:
1136 self.report(CommandError("No object"))
1136 self.report(CommandError("No object"))
1137 curses.beep()
1137 curses.beep()
1138 else:
1138 else:
1139 attr = ipipe._getattr(item, attrname)
1139 attr = ipipe._getattr(item, attrname)
1140 if attr is ipipe.noitem:
1140 if attr is ipipe.noitem:
1141 self.report(AttributeError(ipipe._attrname(attrname)))
1141 self.report(AttributeError(ipipe._attrname(attrname)))
1142 else:
1142 else:
1143 self.report("entering object attribute %s..." % ipipe._attrname(attrname))
1143 self.report("entering object attribute %s..." % ipipe._attrname(attrname))
1144 self.enter(attr, None)
1144 self.enter(attr, None)
1145
1145
1146 def cmd_detail(self):
1146 def cmd_detail(self):
1147 level = self.levels[-1]
1147 level = self.levels[-1]
1148 try:
1148 try:
1149 item = level.items[level.cury].item
1149 item = level.items[level.cury].item
1150 except IndexError:
1150 except IndexError:
1151 self.report(CommandError("No object"))
1151 self.report(CommandError("No object"))
1152 curses.beep()
1152 curses.beep()
1153 else:
1153 else:
1154 self.report("entering detail view for object...")
1154 self.report("entering detail view for object...")
1155 self.enter(item, "detail")
1155 self.enter(item, "detail")
1156
1156
1157 def cmd_detailattr(self):
1157 def cmd_detailattr(self):
1158 level = self.levels[-1]
1158 level = self.levels[-1]
1159 attrname = level.displayattr[1]
1159 attrname = level.displayattr[1]
1160 if attrname is ipipe.noitem:
1160 if attrname is ipipe.noitem:
1161 curses.beep()
1161 curses.beep()
1162 self.report(AttributeError(ipipe._attrname(attrname)))
1162 self.report(AttributeError(ipipe._attrname(attrname)))
1163 return
1163 return
1164 try:
1164 try:
1165 item = level.items[level.cury].item
1165 item = level.items[level.cury].item
1166 except IndexError:
1166 except IndexError:
1167 self.report(CommandError("No object"))
1167 self.report(CommandError("No object"))
1168 curses.beep()
1168 curses.beep()
1169 else:
1169 else:
1170 attr = ipipe._getattr(item, attrname)
1170 attr = ipipe._getattr(item, attrname)
1171 if attr is ipipe.noitem:
1171 if attr is ipipe.noitem:
1172 self.report(AttributeError(ipipe._attrname(attrname)))
1172 self.report(AttributeError(ipipe._attrname(attrname)))
1173 else:
1173 else:
1174 self.report("entering detail view for attribute...")
1174 self.report("entering detail view for attribute...")
1175 self.enter(attr, "detail")
1175 self.enter(attr, "detail")
1176
1176
1177 def cmd_tooglemark(self):
1177 def cmd_tooglemark(self):
1178 level = self.levels[-1]
1178 level = self.levels[-1]
1179 self.report("toggle mark")
1179 self.report("toggle mark")
1180 try:
1180 try:
1181 item = level.items[level.cury]
1181 item = level.items[level.cury]
1182 except IndexError: # no items?
1182 except IndexError: # no items?
1183 pass
1183 pass
1184 else:
1184 else:
1185 if item.marked:
1185 if item.marked:
1186 item.marked = False
1186 item.marked = False
1187 level.marked -= 1
1187 level.marked -= 1
1188 else:
1188 else:
1189 item.marked = True
1189 item.marked = True
1190 level.marked += 1
1190 level.marked += 1
1191
1191
1192 def cmd_sortattrasc(self):
1192 def cmd_sortattrasc(self):
1193 level = self.levels[-1]
1193 level = self.levels[-1]
1194 attrname = level.displayattr[1]
1194 attrname = level.displayattr[1]
1195 if attrname is ipipe.noitem:
1195 if attrname is ipipe.noitem:
1196 curses.beep()
1196 curses.beep()
1197 self.report(AttributeError(ipipe._attrname(attrname)))
1197 self.report(AttributeError(ipipe._attrname(attrname)))
1198 return
1198 return
1199 self.report("sort by %s (ascending)" % ipipe._attrname(attrname))
1199 self.report("sort by %s (ascending)" % ipipe._attrname(attrname))
1200 def key(item):
1200 def key(item):
1201 try:
1201 try:
1202 return ipipe._getattr(item, attrname, None)
1202 return ipipe._getattr(item, attrname, None)
1203 except (KeyboardInterrupt, SystemExit):
1203 except (KeyboardInterrupt, SystemExit):
1204 raise
1204 raise
1205 except Exception:
1205 except Exception:
1206 return None
1206 return None
1207 level.sort(key)
1207 level.sort(key)
1208
1208
1209 def cmd_sortattrdesc(self):
1209 def cmd_sortattrdesc(self):
1210 level = self.levels[-1]
1210 level = self.levels[-1]
1211 attrname = level.displayattr[1]
1211 attrname = level.displayattr[1]
1212 if attrname is ipipe.noitem:
1212 if attrname is ipipe.noitem:
1213 curses.beep()
1213 curses.beep()
1214 self.report(AttributeError(ipipe._attrname(attrname)))
1214 self.report(AttributeError(ipipe._attrname(attrname)))
1215 return
1215 return
1216 self.report("sort by %s (descending)" % ipipe._attrname(attrname))
1216 self.report("sort by %s (descending)" % ipipe._attrname(attrname))
1217 def key(item):
1217 def key(item):
1218 try:
1218 try:
1219 return ipipe._getattr(item, attrname, None)
1219 return ipipe._getattr(item, attrname, None)
1220 except (KeyboardInterrupt, SystemExit):
1220 except (KeyboardInterrupt, SystemExit):
1221 raise
1221 raise
1222 except Exception:
1222 except Exception:
1223 return None
1223 return None
1224 level.sort(key, reverse=True)
1224 level.sort(key, reverse=True)
1225
1225
1226 def cmd_goto(self):
1226 def cmd_goto(self):
1227 self.startkeyboardinput("goto")
1227 self.startkeyboardinput("goto")
1228
1228
1229 def cmd_find(self):
1229 def cmd_find(self):
1230 self.startkeyboardinput("find")
1230 self.startkeyboardinput("find")
1231
1231
1232 def cmd_findbackwards(self):
1232 def cmd_findbackwards(self):
1233 self.startkeyboardinput("findbackwards")
1233 self.startkeyboardinput("findbackwards")
1234
1234
1235 def cmd_help(self):
1235 def cmd_help(self):
1236 """
1236 """
1237 The help command
1237 The help command
1238 """
1238 """
1239 for level in self.levels:
1239 for level in self.levels:
1240 if isinstance(level.input, _BrowserHelp):
1240 if isinstance(level.input, _BrowserHelp):
1241 curses.beep()
1241 curses.beep()
1242 self.report(CommandError("help already active"))
1242 self.report(CommandError("help already active"))
1243 return
1243 return
1244
1244
1245 self.enter(_BrowserHelp(self), "default")
1245 self.enter(_BrowserHelp(self), "default")
1246
1246
1247 def _dodisplay(self, scr):
1247 def _dodisplay(self, scr):
1248 """
1248 """
1249 This method is the workhorse of the browser. It handles screen
1249 This method is the workhorse of the browser. It handles screen
1250 drawing and the keyboard.
1250 drawing and the keyboard.
1251 """
1251 """
1252 self.scr = scr
1252 self.scr = scr
1253 curses.halfdelay(1)
1253 curses.halfdelay(1)
1254 footery = 2
1254 footery = 2
1255
1255
1256 keys = []
1256 keys = []
1257 for (key, cmd) in self.keymap.iteritems():
1257 for (key, cmd) in self.keymap.iteritems():
1258 if cmd == "quit":
1258 if cmd == "quit":
1259 keys.append("%s=%s" % (self.keylabel(key), cmd))
1259 keys.append("%s=%s" % (self.keylabel(key), cmd))
1260 for (key, cmd) in self.keymap.iteritems():
1260 for (key, cmd) in self.keymap.iteritems():
1261 if cmd == "help":
1261 if cmd == "help":
1262 keys.append("%s=%s" % (self.keylabel(key), cmd))
1262 keys.append("%s=%s" % (self.keylabel(key), cmd))
1263 helpmsg = " | %s" % " ".join(keys)
1263 helpmsg = " | %s" % " ".join(keys)
1264
1264
1265 scr.clear()
1265 scr.clear()
1266 msg = "Fetching first batch of objects..."
1266 msg = "Fetching first batch of objects..."
1267 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1267 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1268 scr.addstr(self.scrsizey//2, (self.scrsizex-len(msg))//2, msg)
1268 scr.addstr(self.scrsizey//2, (self.scrsizex-len(msg))//2, msg)
1269 scr.refresh()
1269 scr.refresh()
1270
1270
1271 lastc = -1
1271 lastc = -1
1272
1272
1273 self.levels = []
1273 self.levels = []
1274 # enter the first level
1274 # enter the first level
1275 self.enter(self.input, ipipe.xiter(self.input, "default"), *self.attrs)
1275 self.enter(self.input, ipipe.xiter(self.input, "default"), *self.attrs)
1276
1276
1277 self._calcheaderlines(None)
1277 self._calcheaderlines(None)
1278
1278
1279 while True:
1279 while True:
1280 level = self.levels[-1]
1280 level = self.levels[-1]
1281 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1281 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1282 level.mainsizey = self.scrsizey-1-self._headerlines-footery
1282 level.mainsizey = self.scrsizey-1-self._headerlines-footery
1283
1283
1284 # Paint object header
1284 # Paint object header
1285 for i in xrange(self._firstheaderline, self._firstheaderline+self._headerlines):
1285 for i in xrange(self._firstheaderline, self._firstheaderline+self._headerlines):
1286 lv = self.levels[i]
1286 lv = self.levels[i]
1287 posx = 0
1287 posx = 0
1288 posy = i-self._firstheaderline
1288 posy = i-self._firstheaderline
1289 endx = self.scrsizex
1289 endx = self.scrsizex
1290 if i: # not the first level
1290 if i: # not the first level
1291 msg = " (%d/%d" % (self.levels[i-1].cury, len(self.levels[i-1].items))
1291 msg = " (%d/%d" % (self.levels[i-1].cury, len(self.levels[i-1].items))
1292 if not self.levels[i-1].exhausted:
1292 if not self.levels[i-1].exhausted:
1293 msg += "+"
1293 msg += "+"
1294 msg += ") "
1294 msg += ") "
1295 endx -= len(msg)+1
1295 endx -= len(msg)+1
1296 posx += self.addstr(posy, posx, 0, endx, " ibrowse #%d: " % i, self.style_objheadertext)
1296 posx += self.addstr(posy, posx, 0, endx, " ibrowse #%d: " % i, self.style_objheadertext)
1297 for (style, text) in lv.header:
1297 for (style, text) in lv.header:
1298 posx += self.addstr(posy, posx, 0, endx, text, self.style_objheaderobject)
1298 posx += self.addstr(posy, posx, 0, endx, text, self.style_objheaderobject)
1299 if posx >= endx:
1299 if posx >= endx:
1300 break
1300 break
1301 if i:
1301 if i:
1302 posx += self.addstr(posy, posx, 0, self.scrsizex, msg, self.style_objheadernumber)
1302 posx += self.addstr(posy, posx, 0, self.scrsizex, msg, self.style_objheadernumber)
1303 posx += self.addchr(posy, posx, 0, self.scrsizex, " ", self.scrsizex-posx, self.style_objheadernumber)
1303 posx += self.addchr(posy, posx, 0, self.scrsizex, " ", self.scrsizex-posx, self.style_objheadernumber)
1304
1304
1305 if not level.items:
1305 if not level.items:
1306 self.addchr(self._headerlines, 0, 0, self.scrsizex, " ", self.scrsizex, self.style_colheader)
1306 self.addchr(self._headerlines, 0, 0, self.scrsizex, " ", self.scrsizex, self.style_colheader)
1307 self.addstr(self._headerlines+1, 0, 0, self.scrsizex, " <empty>", astyle.style_error)
1307 self.addstr(self._headerlines+1, 0, 0, self.scrsizex, " <empty>", astyle.style_error)
1308 scr.clrtobot()
1308 scr.clrtobot()
1309 else:
1309 else:
1310 # Paint column headers
1310 # Paint column headers
1311 scr.move(self._headerlines, 0)
1311 scr.move(self._headerlines, 0)
1312 scr.addstr(" %*s " % (level.numbersizex, "#"), self.getstyle(self.style_colheader))
1312 scr.addstr(" %*s " % (level.numbersizex, "#"), self.getstyle(self.style_colheader))
1313 scr.addstr(self.headersepchar, self.getstyle(self.style_colheadersep))
1313 scr.addstr(self.headersepchar, self.getstyle(self.style_colheadersep))
1314 begx = level.numbersizex+3
1314 begx = level.numbersizex+3
1315 posx = begx-level.datastartx
1315 posx = begx-level.datastartx
1316 for attrname in level.displayattrs:
1316 for attrname in level.displayattrs:
1317 strattrname = ipipe._attrname(attrname)
1317 strattrname = ipipe._attrname(attrname)
1318 cwidth = level.colwidths[attrname]
1318 cwidth = level.colwidths[attrname]
1319 header = strattrname.ljust(cwidth)
1319 header = strattrname.ljust(cwidth)
1320 if attrname == level.displayattr[1]:
1320 if attrname == level.displayattr[1]:
1321 style = self.style_colheaderhere
1321 style = self.style_colheaderhere
1322 else:
1322 else:
1323 style = self.style_colheader
1323 style = self.style_colheader
1324 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, header, style)
1324 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, header, style)
1325 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, self.headersepchar, self.style_colheadersep)
1325 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, self.headersepchar, self.style_colheadersep)
1326 if posx >= self.scrsizex:
1326 if posx >= self.scrsizex:
1327 break
1327 break
1328 else:
1328 else:
1329 scr.addstr(" "*(self.scrsizex-posx), self.getstyle(self.style_colheader))
1329 scr.addstr(" "*(self.scrsizex-posx), self.getstyle(self.style_colheader))
1330
1330
1331 # Paint rows
1331 # Paint rows
1332 posy = self._headerlines+1+level.datastarty
1332 posy = self._headerlines+1+level.datastarty
1333 for i in xrange(level.datastarty, min(level.datastarty+level.mainsizey, len(level.items))):
1333 for i in xrange(level.datastarty, min(level.datastarty+level.mainsizey, len(level.items))):
1334 cache = level.items[i]
1334 cache = level.items[i]
1335 if i == level.cury:
1335 if i == level.cury:
1336 style = self.style_numberhere
1336 style = self.style_numberhere
1337 else:
1337 else:
1338 style = self.style_number
1338 style = self.style_number
1339
1339
1340 posy = self._headerlines+1+i-level.datastarty
1340 posy = self._headerlines+1+i-level.datastarty
1341 posx = begx-level.datastartx
1341 posx = begx-level.datastartx
1342
1342
1343 scr.move(posy, 0)
1343 scr.move(posy, 0)
1344 scr.addstr(" %*d%s" % (level.numbersizex, i, " !"[cache.marked]), self.getstyle(style))
1344 scr.addstr(" %*d%s" % (level.numbersizex, i, " !"[cache.marked]), self.getstyle(style))
1345 scr.addstr(self.headersepchar, self.getstyle(self.style_sep))
1345 scr.addstr(self.headersepchar, self.getstyle(self.style_sep))
1346
1346
1347 for attrname in level.displayattrs:
1347 for attrname in level.displayattrs:
1348 cwidth = level.colwidths[attrname]
1348 cwidth = level.colwidths[attrname]
1349 try:
1349 try:
1350 (align, length, parts) = level.displayrows[i-level.datastarty][attrname]
1350 (align, length, parts) = level.displayrows[i-level.datastarty][attrname]
1351 except KeyError:
1351 except KeyError:
1352 align = 2
1352 align = 2
1353 style = astyle.style_nodata
1353 style = astyle.style_nodata
1354 padstyle = self.style_datapad
1354 padstyle = self.style_datapad
1355 sepstyle = self.style_sep
1355 sepstyle = self.style_sep
1356 if i == level.cury:
1356 if i == level.cury:
1357 padstyle = self.getstylehere(padstyle)
1357 padstyle = self.getstylehere(padstyle)
1358 sepstyle = self.getstylehere(sepstyle)
1358 sepstyle = self.getstylehere(sepstyle)
1359 if align == 2:
1359 if align == 2:
1360 posx += self.addchr(posy, posx, begx, self.scrsizex, self.nodatachar, cwidth, style)
1360 posx += self.addchr(posy, posx, begx, self.scrsizex, self.nodatachar, cwidth, style)
1361 else:
1361 else:
1362 if align == 1:
1362 if align == 1:
1363 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1363 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1364 elif align == 0:
1364 elif align == 0:
1365 pad1 = (cwidth-length)//2
1365 pad1 = (cwidth-length)//2
1366 pad2 = cwidth-length-len(pad1)
1366 pad2 = cwidth-length-len(pad1)
1367 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad1, padstyle)
1367 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad1, padstyle)
1368 for (style, text) in parts:
1368 for (style, text) in parts:
1369 if i == level.cury:
1369 if i == level.cury:
1370 style = self.getstylehere(style)
1370 style = self.getstylehere(style)
1371 posx += self.addstr(posy, posx, begx, self.scrsizex, text, style)
1371 posx += self.addstr(posy, posx, begx, self.scrsizex, text, style)
1372 if posx >= self.scrsizex:
1372 if posx >= self.scrsizex:
1373 break
1373 break
1374 if align == -1:
1374 if align == -1:
1375 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1375 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1376 elif align == 0:
1376 elif align == 0:
1377 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad2, padstyle)
1377 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad2, padstyle)
1378 posx += self.addstr(posy, posx, begx, self.scrsizex, self.datasepchar, sepstyle)
1378 posx += self.addstr(posy, posx, begx, self.scrsizex, self.datasepchar, sepstyle)
1379 else:
1379 else:
1380 scr.clrtoeol()
1380 scr.clrtoeol()
1381
1381
1382 # Add blank row headers for the rest of the screen
1382 # Add blank row headers for the rest of the screen
1383 for posy in xrange(posy+1, self.scrsizey-2):
1383 for posy in xrange(posy+1, self.scrsizey-2):
1384 scr.addstr(posy, 0, " " * (level.numbersizex+2), self.getstyle(self.style_colheader))
1384 scr.addstr(posy, 0, " " * (level.numbersizex+2), self.getstyle(self.style_colheader))
1385 scr.clrtoeol()
1385 scr.clrtoeol()
1386
1386
1387 posy = self.scrsizey-footery
1387 posy = self.scrsizey-footery
1388 # Display footer
1388 # Display footer
1389 scr.addstr(posy, 0, " "*self.scrsizex, self.getstyle(self.style_footer))
1389 scr.addstr(posy, 0, " "*self.scrsizex, self.getstyle(self.style_footer))
1390
1390
1391 if level.exhausted:
1391 if level.exhausted:
1392 flag = ""
1392 flag = ""
1393 else:
1393 else:
1394 flag = "+"
1394 flag = "+"
1395
1395
1396 endx = self.scrsizex-len(helpmsg)-1
1396 endx = self.scrsizex-len(helpmsg)-1
1397 scr.addstr(posy, endx, helpmsg, self.getstyle(self.style_footer))
1397 scr.addstr(posy, endx, helpmsg, self.getstyle(self.style_footer))
1398
1398
1399 posx = 0
1399 posx = 0
1400 msg = " %d%s objects (%d marked): " % (len(level.items), flag, level.marked)
1400 msg = " %d%s objects (%d marked): " % (len(level.items), flag, level.marked)
1401 posx += self.addstr(posy, posx, 0, endx, msg, self.style_footer)
1401 posx += self.addstr(posy, posx, 0, endx, msg, self.style_footer)
1402 try:
1402 try:
1403 item = level.items[level.cury].item
1403 item = level.items[level.cury].item
1404 except IndexError: # empty
1404 except IndexError: # empty
1405 pass
1405 pass
1406 else:
1406 else:
1407 for (nostyle, text) in ipipe.xrepr(item, "footer"):
1407 for (nostyle, text) in ipipe.xrepr(item, "footer"):
1408 if not isinstance(nostyle, int):
1408 if not isinstance(nostyle, int):
1409 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1409 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1410 if posx >= endx:
1410 if posx >= endx:
1411 break
1411 break
1412
1412
1413 attrstyle = [(astyle.style_default, "no attribute")]
1413 attrstyle = [(astyle.style_default, "no attribute")]
1414 attrname = level.displayattr[1]
1414 attrname = level.displayattr[1]
1415 if attrname is not ipipe.noitem and attrname is not None:
1415 if attrname is not ipipe.noitem and attrname is not None:
1416 posx += self.addstr(posy, posx, 0, endx, " | ", self.style_footer)
1416 posx += self.addstr(posy, posx, 0, endx, " | ", self.style_footer)
1417 posx += self.addstr(posy, posx, 0, endx, ipipe._attrname(attrname), self.style_footer)
1417 posx += self.addstr(posy, posx, 0, endx, ipipe._attrname(attrname), self.style_footer)
1418 posx += self.addstr(posy, posx, 0, endx, ": ", self.style_footer)
1418 posx += self.addstr(posy, posx, 0, endx, ": ", self.style_footer)
1419 try:
1419 try:
1420 attr = ipipe._getattr(item, attrname)
1420 attr = ipipe._getattr(item, attrname)
1421 except (SystemExit, KeyboardInterrupt):
1421 except (SystemExit, KeyboardInterrupt):
1422 raise
1422 raise
1423 except Exception, exc:
1423 except Exception, exc:
1424 attr = exc
1424 attr = exc
1425 if attr is not ipipe.noitem:
1425 if attr is not ipipe.noitem:
1426 attrstyle = ipipe.xrepr(attr, "footer")
1426 attrstyle = ipipe.xrepr(attr, "footer")
1427 for (nostyle, text) in attrstyle:
1427 for (nostyle, text) in attrstyle:
1428 if not isinstance(nostyle, int):
1428 if not isinstance(nostyle, int):
1429 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1429 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1430 if posx >= endx:
1430 if posx >= endx:
1431 break
1431 break
1432
1432
1433 try:
1433 try:
1434 # Display input prompt
1434 # Display input prompt
1435 if self.mode in self.prompts:
1435 if self.mode in self.prompts:
1436 history = self.prompts[self.mode]
1436 history = self.prompts[self.mode]
1437 scr.addstr(self.scrsizey-1, 0,
1437 posx = 0
1438 history.prompt + ": " + history.input,
1438 posy = self.scrsizey-1
1439 self.getstyle(astyle.style_default))
1439 posx += self.addstr(posy, posx, 0, endx, history.prompt, astyle.style_default)
1440 posx += self.addstr(posy, posx, 0, endx, " [", astyle.style_default)
1441 if history.cury==-1:
1442 text = "new"
1443 else:
1444 text = str(history.cury+1)
1445 posx += self.addstr(posy, posx, 0, endx, text, astyle.style_type_number)
1446 if history.history:
1447 posx += self.addstr(posy, posx, 0, endx, "/", astyle.style_default)
1448 posx += self.addstr(posy, posx, 0, endx, str(len(history.history)), astyle.style_type_number)
1449 posx += self.addstr(posy, posx, 0, endx, "]: ", astyle.style_default)
1450 inputstartx = posx
1451 posx += self.addstr(posy, posx, 0, endx, history.input, astyle.style_default)
1440 # Display report
1452 # Display report
1441 else:
1453 else:
1442 if self._report is not None:
1454 if self._report is not None:
1443 if isinstance(self._report, Exception):
1455 if isinstance(self._report, Exception):
1444 style = self.getstyle(astyle.style_error)
1456 style = self.getstyle(astyle.style_error)
1445 if self._report.__class__.__module__ == "exceptions":
1457 if self._report.__class__.__module__ == "exceptions":
1446 msg = "%s: %s" % \
1458 msg = "%s: %s" % \
1447 (self._report.__class__.__name__, self._report)
1459 (self._report.__class__.__name__, self._report)
1448 else:
1460 else:
1449 msg = "%s.%s: %s" % \
1461 msg = "%s.%s: %s" % \
1450 (self._report.__class__.__module__,
1462 (self._report.__class__.__module__,
1451 self._report.__class__.__name__, self._report)
1463 self._report.__class__.__name__, self._report)
1452 else:
1464 else:
1453 style = self.getstyle(self.style_report)
1465 style = self.getstyle(self.style_report)
1454 msg = self._report
1466 msg = self._report
1455 scr.addstr(self.scrsizey-1, 0, msg[:self.scrsizex], style)
1467 scr.addstr(self.scrsizey-1, 0, msg[:self.scrsizex], style)
1456 self._report = None
1468 self._report = None
1457 else:
1469 else:
1458 scr.move(self.scrsizey-1, 0)
1470 scr.move(self.scrsizey-1, 0)
1459 except curses.error:
1471 except curses.error:
1460 # Protect against error from writing to the last line
1472 # Protect against error from writing to the last line
1461 pass
1473 pass
1462 scr.clrtoeol()
1474 scr.clrtoeol()
1463
1475
1464 # Position cursor
1476 # Position cursor
1465 if self.mode in self.prompts:
1477 if self.mode in self.prompts:
1466 history = self.prompts[self.mode]
1478 history = self.prompts[self.mode]
1467 scr.move(self.scrsizey-1, len(history.prompt)+2+history.curx)
1479 scr.move(self.scrsizey-1, inputstartx+history.curx)
1468 else:
1480 else:
1469 scr.move(
1481 scr.move(
1470 1+self._headerlines+level.cury-level.datastarty,
1482 1+self._headerlines+level.cury-level.datastarty,
1471 level.numbersizex+3+level.curx-level.datastartx
1483 level.numbersizex+3+level.curx-level.datastartx
1472 )
1484 )
1473 scr.refresh()
1485 scr.refresh()
1474
1486
1475 # Check keyboard
1487 # Check keyboard
1476 while True:
1488 while True:
1477 c = scr.getch()
1489 c = scr.getch()
1478 if self.mode in self.prompts:
1490 if self.mode in self.prompts:
1479 if self.prompts[self.mode].handlekey(self, c):
1491 if self.prompts[self.mode].handlekey(self, c):
1480 break # Redisplay
1492 break # Redisplay
1481 else:
1493 else:
1482 # if no key is pressed slow down and beep again
1494 # if no key is pressed slow down and beep again
1483 if c == -1:
1495 if c == -1:
1484 self.stepx = 1.
1496 self.stepx = 1.
1485 self.stepy = 1.
1497 self.stepy = 1.
1486 self._dobeep = True
1498 self._dobeep = True
1487 else:
1499 else:
1488 # if a different key was pressed slow down and beep too
1500 # if a different key was pressed slow down and beep too
1489 if c != lastc:
1501 if c != lastc:
1490 lastc = c
1502 lastc = c
1491 self.stepx = 1.
1503 self.stepx = 1.
1492 self.stepy = 1.
1504 self.stepy = 1.
1493 self._dobeep = True
1505 self._dobeep = True
1494 cmdname = self.keymap.get(c, None)
1506 cmdname = self.keymap.get(c, None)
1495 if cmdname is None:
1507 if cmdname is None:
1496 self.report(
1508 self.report(
1497 UnassignedKeyError("Unassigned key %s" %
1509 UnassignedKeyError("Unassigned key %s" %
1498 self.keylabel(c)))
1510 self.keylabel(c)))
1499 else:
1511 else:
1500 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
1512 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
1501 if cmdfunc is None:
1513 if cmdfunc is None:
1502 self.report(
1514 self.report(
1503 UnknownCommandError("Unknown command %r" %
1515 UnknownCommandError("Unknown command %r" %
1504 (cmdname,)))
1516 (cmdname,)))
1505 elif cmdfunc():
1517 elif cmdfunc():
1506 returnvalue = self.returnvalue
1518 returnvalue = self.returnvalue
1507 self.returnvalue = None
1519 self.returnvalue = None
1508 return returnvalue
1520 return returnvalue
1509 self.stepx = self.nextstepx(self.stepx)
1521 self.stepx = self.nextstepx(self.stepx)
1510 self.stepy = self.nextstepy(self.stepy)
1522 self.stepy = self.nextstepy(self.stepy)
1511 curses.flushinp() # get rid of type ahead
1523 curses.flushinp() # get rid of type ahead
1512 break # Redisplay
1524 break # Redisplay
1513 self.scr = None
1525 self.scr = None
1514
1526
1515 def display(self):
1527 def display(self):
1516 return curses.wrapper(self._dodisplay)
1528 return curses.wrapper(self._dodisplay)
@@ -1,5552 +1,5558 b''
1 2006-06-12 Walter Doerwald <walter@livinglogic.de>
2
3 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
4 input history and the position of the cursor in the input history for
5 the find, findbackwards and goto command.
6
1 2006-06-10 Walter Doerwald <walter@livinglogic.de>
7 2006-06-10 Walter Doerwald <walter@livinglogic.de>
2
8
3 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
9 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
4 implements the basic functionality of browser commands that require
10 implements the basic functionality of browser commands that require
5 input. Reimplement the goto, find and findbackwards commands as
11 input. Reimplement the goto, find and findbackwards commands as
6 subclasses of _CommandInput. Add an input history and keymaps to those
12 subclasses of _CommandInput. Add an input history and keymaps to those
7 commands. Add "\r" as a keyboard shortcut for the enterdefault and
13 commands. Add "\r" as a keyboard shortcut for the enterdefault and
8 execute commands.
14 execute commands.
9
15
10 2006-06-07 Ville Vainio <vivainio@gmail.com>
16 2006-06-07 Ville Vainio <vivainio@gmail.com>
11
17
12 * iplib.py: ipython mybatch.ipy exits ipython immediately after
18 * iplib.py: ipython mybatch.ipy exits ipython immediately after
13 running the batch files instead of leaving the session open.
19 running the batch files instead of leaving the session open.
14
20
15 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
21 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
16
22
17 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
23 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
18 the original fix was incomplete. Patch submitted by W. Maier.
24 the original fix was incomplete. Patch submitted by W. Maier.
19
25
20 2006-06-07 Ville Vainio <vivainio@gmail.com>
26 2006-06-07 Ville Vainio <vivainio@gmail.com>
21
27
22 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
28 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
23 Confirmation prompts can be supressed by 'quiet' option.
29 Confirmation prompts can be supressed by 'quiet' option.
24 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
30 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
25
31
26 2006-06-06 *** Released version 0.7.2
32 2006-06-06 *** Released version 0.7.2
27
33
28 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
34 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
29
35
30 * IPython/Release.py (version): Made 0.7.2 final for release.
36 * IPython/Release.py (version): Made 0.7.2 final for release.
31 Repo tagged and release cut.
37 Repo tagged and release cut.
32
38
33 2006-06-05 Ville Vainio <vivainio@gmail.com>
39 2006-06-05 Ville Vainio <vivainio@gmail.com>
34
40
35 * Magic.py (magic_rehashx): Honor no_alias list earlier in
41 * Magic.py (magic_rehashx): Honor no_alias list earlier in
36 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
42 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
37
43
38 * upgrade_dir.py: try import 'path' module a bit harder
44 * upgrade_dir.py: try import 'path' module a bit harder
39 (for %upgrade)
45 (for %upgrade)
40
46
41 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
47 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
42
48
43 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
49 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
44 instead of looping 20 times.
50 instead of looping 20 times.
45
51
46 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
52 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
47 correctly at initialization time. Bug reported by Krishna Mohan
53 correctly at initialization time. Bug reported by Krishna Mohan
48 Gundu <gkmohan-AT-gmail.com> on the user list.
54 Gundu <gkmohan-AT-gmail.com> on the user list.
49
55
50 * IPython/Release.py (version): Mark 0.7.2 version to start
56 * IPython/Release.py (version): Mark 0.7.2 version to start
51 testing for release on 06/06.
57 testing for release on 06/06.
52
58
53 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
59 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
54
60
55 * scripts/irunner: thin script interface so users don't have to
61 * scripts/irunner: thin script interface so users don't have to
56 find the module and call it as an executable, since modules rarely
62 find the module and call it as an executable, since modules rarely
57 live in people's PATH.
63 live in people's PATH.
58
64
59 * IPython/irunner.py (InteractiveRunner.__init__): added
65 * IPython/irunner.py (InteractiveRunner.__init__): added
60 delaybeforesend attribute to control delays with newer versions of
66 delaybeforesend attribute to control delays with newer versions of
61 pexpect. Thanks to detailed help from pexpect's author, Noah
67 pexpect. Thanks to detailed help from pexpect's author, Noah
62 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
68 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
63 correctly (it works in NoColor mode).
69 correctly (it works in NoColor mode).
64
70
65 * IPython/iplib.py (handle_normal): fix nasty crash reported on
71 * IPython/iplib.py (handle_normal): fix nasty crash reported on
66 SAGE list, from improper log() calls.
72 SAGE list, from improper log() calls.
67
73
68 2006-05-31 Ville Vainio <vivainio@gmail.com>
74 2006-05-31 Ville Vainio <vivainio@gmail.com>
69
75
70 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
76 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
71 with args in parens to work correctly with dirs that have spaces.
77 with args in parens to work correctly with dirs that have spaces.
72
78
73 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
79 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
74
80
75 * IPython/Logger.py (Logger.logstart): add option to log raw input
81 * IPython/Logger.py (Logger.logstart): add option to log raw input
76 instead of the processed one. A -r flag was added to the
82 instead of the processed one. A -r flag was added to the
77 %logstart magic used for controlling logging.
83 %logstart magic used for controlling logging.
78
84
79 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
85 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
80
86
81 * IPython/iplib.py (InteractiveShell.__init__): add check for the
87 * IPython/iplib.py (InteractiveShell.__init__): add check for the
82 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
88 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
83 recognize the option. After a bug report by Will Maier. This
89 recognize the option. After a bug report by Will Maier. This
84 closes #64 (will do it after confirmation from W. Maier).
90 closes #64 (will do it after confirmation from W. Maier).
85
91
86 * IPython/irunner.py: New module to run scripts as if manually
92 * IPython/irunner.py: New module to run scripts as if manually
87 typed into an interactive environment, based on pexpect. After a
93 typed into an interactive environment, based on pexpect. After a
88 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
94 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
89 ipython-user list. Simple unittests in the tests/ directory.
95 ipython-user list. Simple unittests in the tests/ directory.
90
96
91 * tools/release: add Will Maier, OpenBSD port maintainer, to
97 * tools/release: add Will Maier, OpenBSD port maintainer, to
92 recepients list. We are now officially part of the OpenBSD ports:
98 recepients list. We are now officially part of the OpenBSD ports:
93 http://www.openbsd.org/ports.html ! Many thanks to Will for the
99 http://www.openbsd.org/ports.html ! Many thanks to Will for the
94 work.
100 work.
95
101
96 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
102 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
97
103
98 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
104 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
99 so that it doesn't break tkinter apps.
105 so that it doesn't break tkinter apps.
100
106
101 * IPython/iplib.py (_prefilter): fix bug where aliases would
107 * IPython/iplib.py (_prefilter): fix bug where aliases would
102 shadow variables when autocall was fully off. Reported by SAGE
108 shadow variables when autocall was fully off. Reported by SAGE
103 author William Stein.
109 author William Stein.
104
110
105 * IPython/OInspect.py (Inspector.__init__): add a flag to control
111 * IPython/OInspect.py (Inspector.__init__): add a flag to control
106 at what detail level strings are computed when foo? is requested.
112 at what detail level strings are computed when foo? is requested.
107 This allows users to ask for example that the string form of an
113 This allows users to ask for example that the string form of an
108 object is only computed when foo?? is called, or even never, by
114 object is only computed when foo?? is called, or even never, by
109 setting the object_info_string_level >= 2 in the configuration
115 setting the object_info_string_level >= 2 in the configuration
110 file. This new option has been added and documented. After a
116 file. This new option has been added and documented. After a
111 request by SAGE to be able to control the printing of very large
117 request by SAGE to be able to control the printing of very large
112 objects more easily.
118 objects more easily.
113
119
114 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
120 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
115
121
116 * IPython/ipmaker.py (make_IPython): remove the ipython call path
122 * IPython/ipmaker.py (make_IPython): remove the ipython call path
117 from sys.argv, to be 100% consistent with how Python itself works
123 from sys.argv, to be 100% consistent with how Python itself works
118 (as seen for example with python -i file.py). After a bug report
124 (as seen for example with python -i file.py). After a bug report
119 by Jeffrey Collins.
125 by Jeffrey Collins.
120
126
121 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
127 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
122 nasty bug which was preventing custom namespaces with -pylab,
128 nasty bug which was preventing custom namespaces with -pylab,
123 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
129 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
124 compatibility (long gone from mpl).
130 compatibility (long gone from mpl).
125
131
126 * IPython/ipapi.py (make_session): name change: create->make. We
132 * IPython/ipapi.py (make_session): name change: create->make. We
127 use make in other places (ipmaker,...), it's shorter and easier to
133 use make in other places (ipmaker,...), it's shorter and easier to
128 type and say, etc. I'm trying to clean things before 0.7.2 so
134 type and say, etc. I'm trying to clean things before 0.7.2 so
129 that I can keep things stable wrt to ipapi in the chainsaw branch.
135 that I can keep things stable wrt to ipapi in the chainsaw branch.
130
136
131 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
137 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
132 python-mode recognizes our debugger mode. Add support for
138 python-mode recognizes our debugger mode. Add support for
133 autoindent inside (X)emacs. After a patch sent in by Jin Liu
139 autoindent inside (X)emacs. After a patch sent in by Jin Liu
134 <m.liu.jin-AT-gmail.com> originally written by
140 <m.liu.jin-AT-gmail.com> originally written by
135 doxgen-AT-newsmth.net (with minor modifications for xemacs
141 doxgen-AT-newsmth.net (with minor modifications for xemacs
136 compatibility)
142 compatibility)
137
143
138 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
144 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
139 tracebacks when walking the stack so that the stack tracking system
145 tracebacks when walking the stack so that the stack tracking system
140 in emacs' python-mode can identify the frames correctly.
146 in emacs' python-mode can identify the frames correctly.
141
147
142 * IPython/ipmaker.py (make_IPython): make the internal (and
148 * IPython/ipmaker.py (make_IPython): make the internal (and
143 default config) autoedit_syntax value false by default. Too many
149 default config) autoedit_syntax value false by default. Too many
144 users have complained to me (both on and off-list) about problems
150 users have complained to me (both on and off-list) about problems
145 with this option being on by default, so I'm making it default to
151 with this option being on by default, so I'm making it default to
146 off. It can still be enabled by anyone via the usual mechanisms.
152 off. It can still be enabled by anyone via the usual mechanisms.
147
153
148 * IPython/completer.py (Completer.attr_matches): add support for
154 * IPython/completer.py (Completer.attr_matches): add support for
149 PyCrust-style _getAttributeNames magic method. Patch contributed
155 PyCrust-style _getAttributeNames magic method. Patch contributed
150 by <mscott-AT-goldenspud.com>. Closes #50.
156 by <mscott-AT-goldenspud.com>. Closes #50.
151
157
152 * IPython/iplib.py (InteractiveShell.__init__): remove the
158 * IPython/iplib.py (InteractiveShell.__init__): remove the
153 deletion of exit/quit from __builtin__, which can break
159 deletion of exit/quit from __builtin__, which can break
154 third-party tools like the Zope debugging console. The
160 third-party tools like the Zope debugging console. The
155 %exit/%quit magics remain. In general, it's probably a good idea
161 %exit/%quit magics remain. In general, it's probably a good idea
156 not to delete anything from __builtin__, since we never know what
162 not to delete anything from __builtin__, since we never know what
157 that will break. In any case, python now (for 2.5) will support
163 that will break. In any case, python now (for 2.5) will support
158 'real' exit/quit, so this issue is moot. Closes #55.
164 'real' exit/quit, so this issue is moot. Closes #55.
159
165
160 * IPython/genutils.py (with_obj): rename the 'with' function to
166 * IPython/genutils.py (with_obj): rename the 'with' function to
161 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
167 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
162 becomes a language keyword. Closes #53.
168 becomes a language keyword. Closes #53.
163
169
164 * IPython/FakeModule.py (FakeModule.__init__): add a proper
170 * IPython/FakeModule.py (FakeModule.__init__): add a proper
165 __file__ attribute to this so it fools more things into thinking
171 __file__ attribute to this so it fools more things into thinking
166 it is a real module. Closes #59.
172 it is a real module. Closes #59.
167
173
168 * IPython/Magic.py (magic_edit): add -n option to open the editor
174 * IPython/Magic.py (magic_edit): add -n option to open the editor
169 at a specific line number. After a patch by Stefan van der Walt.
175 at a specific line number. After a patch by Stefan van der Walt.
170
176
171 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
177 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
172
178
173 * IPython/iplib.py (edit_syntax_error): fix crash when for some
179 * IPython/iplib.py (edit_syntax_error): fix crash when for some
174 reason the file could not be opened. After automatic crash
180 reason the file could not be opened. After automatic crash
175 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
181 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
176 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
182 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
177 (_should_recompile): Don't fire editor if using %bg, since there
183 (_should_recompile): Don't fire editor if using %bg, since there
178 is no file in the first place. From the same report as above.
184 is no file in the first place. From the same report as above.
179 (raw_input): protect against faulty third-party prefilters. After
185 (raw_input): protect against faulty third-party prefilters. After
180 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
186 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
181 while running under SAGE.
187 while running under SAGE.
182
188
183 2006-05-23 Ville Vainio <vivainio@gmail.com>
189 2006-05-23 Ville Vainio <vivainio@gmail.com>
184
190
185 * ipapi.py: Stripped down ip.to_user_ns() to work only as
191 * ipapi.py: Stripped down ip.to_user_ns() to work only as
186 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
192 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
187 now returns None (again), unless dummy is specifically allowed by
193 now returns None (again), unless dummy is specifically allowed by
188 ipapi.get(allow_dummy=True).
194 ipapi.get(allow_dummy=True).
189
195
190 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
196 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
191
197
192 * IPython: remove all 2.2-compatibility objects and hacks from
198 * IPython: remove all 2.2-compatibility objects and hacks from
193 everywhere, since we only support 2.3 at this point. Docs
199 everywhere, since we only support 2.3 at this point. Docs
194 updated.
200 updated.
195
201
196 * IPython/ipapi.py (IPApi.__init__): Clean up of all getters.
202 * IPython/ipapi.py (IPApi.__init__): Clean up of all getters.
197 Anything requiring extra validation can be turned into a Python
203 Anything requiring extra validation can be turned into a Python
198 property in the future. I used a property for the db one b/c
204 property in the future. I used a property for the db one b/c
199 there was a nasty circularity problem with the initialization
205 there was a nasty circularity problem with the initialization
200 order, which right now I don't have time to clean up.
206 order, which right now I don't have time to clean up.
201
207
202 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
208 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
203 another locking bug reported by Jorgen. I'm not 100% sure though,
209 another locking bug reported by Jorgen. I'm not 100% sure though,
204 so more testing is needed...
210 so more testing is needed...
205
211
206 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
212 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
207
213
208 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
214 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
209 local variables from any routine in user code (typically executed
215 local variables from any routine in user code (typically executed
210 with %run) directly into the interactive namespace. Very useful
216 with %run) directly into the interactive namespace. Very useful
211 when doing complex debugging.
217 when doing complex debugging.
212 (IPythonNotRunning): Changed the default None object to a dummy
218 (IPythonNotRunning): Changed the default None object to a dummy
213 whose attributes can be queried as well as called without
219 whose attributes can be queried as well as called without
214 exploding, to ease writing code which works transparently both in
220 exploding, to ease writing code which works transparently both in
215 and out of ipython and uses some of this API.
221 and out of ipython and uses some of this API.
216
222
217 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
223 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
218
224
219 * IPython/hooks.py (result_display): Fix the fact that our display
225 * IPython/hooks.py (result_display): Fix the fact that our display
220 hook was using str() instead of repr(), as the default python
226 hook was using str() instead of repr(), as the default python
221 console does. This had gone unnoticed b/c it only happened if
227 console does. This had gone unnoticed b/c it only happened if
222 %Pprint was off, but the inconsistency was there.
228 %Pprint was off, but the inconsistency was there.
223
229
224 2006-05-15 Ville Vainio <vivainio@gmail.com>
230 2006-05-15 Ville Vainio <vivainio@gmail.com>
225
231
226 * Oinspect.py: Only show docstring for nonexisting/binary files
232 * Oinspect.py: Only show docstring for nonexisting/binary files
227 when doing object??, closing ticket #62
233 when doing object??, closing ticket #62
228
234
229 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
235 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
230
236
231 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
237 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
232 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
238 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
233 was being released in a routine which hadn't checked if it had
239 was being released in a routine which hadn't checked if it had
234 been the one to acquire it.
240 been the one to acquire it.
235
241
236 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
242 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
237
243
238 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
244 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
239
245
240 2006-04-11 Ville Vainio <vivainio@gmail.com>
246 2006-04-11 Ville Vainio <vivainio@gmail.com>
241
247
242 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
248 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
243 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
249 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
244 prefilters, allowing stuff like magics and aliases in the file.
250 prefilters, allowing stuff like magics and aliases in the file.
245
251
246 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
252 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
247 added. Supported now are "%clear in" and "%clear out" (clear input and
253 added. Supported now are "%clear in" and "%clear out" (clear input and
248 output history, respectively). Also fixed CachedOutput.flush to
254 output history, respectively). Also fixed CachedOutput.flush to
249 properly flush the output cache.
255 properly flush the output cache.
250
256
251 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
257 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
252 half-success (and fail explicitly).
258 half-success (and fail explicitly).
253
259
254 2006-03-28 Ville Vainio <vivainio@gmail.com>
260 2006-03-28 Ville Vainio <vivainio@gmail.com>
255
261
256 * iplib.py: Fix quoting of aliases so that only argless ones
262 * iplib.py: Fix quoting of aliases so that only argless ones
257 are quoted
263 are quoted
258
264
259 2006-03-28 Ville Vainio <vivainio@gmail.com>
265 2006-03-28 Ville Vainio <vivainio@gmail.com>
260
266
261 * iplib.py: Quote aliases with spaces in the name.
267 * iplib.py: Quote aliases with spaces in the name.
262 "c:\program files\blah\bin" is now legal alias target.
268 "c:\program files\blah\bin" is now legal alias target.
263
269
264 * ext_rehashdir.py: Space no longer allowed as arg
270 * ext_rehashdir.py: Space no longer allowed as arg
265 separator, since space is legal in path names.
271 separator, since space is legal in path names.
266
272
267 2006-03-16 Ville Vainio <vivainio@gmail.com>
273 2006-03-16 Ville Vainio <vivainio@gmail.com>
268
274
269 * upgrade_dir.py: Take path.py from Extensions, correcting
275 * upgrade_dir.py: Take path.py from Extensions, correcting
270 %upgrade magic
276 %upgrade magic
271
277
272 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
278 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
273
279
274 * hooks.py: Only enclose editor binary in quotes if legal and
280 * hooks.py: Only enclose editor binary in quotes if legal and
275 necessary (space in the name, and is an existing file). Fixes a bug
281 necessary (space in the name, and is an existing file). Fixes a bug
276 reported by Zachary Pincus.
282 reported by Zachary Pincus.
277
283
278 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
284 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
279
285
280 * Manual: thanks to a tip on proper color handling for Emacs, by
286 * Manual: thanks to a tip on proper color handling for Emacs, by
281 Eric J Haywiser <ejh1-AT-MIT.EDU>.
287 Eric J Haywiser <ejh1-AT-MIT.EDU>.
282
288
283 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
289 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
284 by applying the provided patch. Thanks to Liu Jin
290 by applying the provided patch. Thanks to Liu Jin
285 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
291 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
286 XEmacs/Linux, I'm trusting the submitter that it actually helps
292 XEmacs/Linux, I'm trusting the submitter that it actually helps
287 under win32/GNU Emacs. Will revisit if any problems are reported.
293 under win32/GNU Emacs. Will revisit if any problems are reported.
288
294
289 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
295 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
290
296
291 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
297 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
292 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
298 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
293
299
294 2006-03-12 Ville Vainio <vivainio@gmail.com>
300 2006-03-12 Ville Vainio <vivainio@gmail.com>
295
301
296 * Magic.py (magic_timeit): Added %timeit magic, contributed by
302 * Magic.py (magic_timeit): Added %timeit magic, contributed by
297 Torsten Marek.
303 Torsten Marek.
298
304
299 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
305 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
300
306
301 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
307 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
302 line ranges works again.
308 line ranges works again.
303
309
304 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
310 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
305
311
306 * IPython/iplib.py (showtraceback): add back sys.last_traceback
312 * IPython/iplib.py (showtraceback): add back sys.last_traceback
307 and friends, after a discussion with Zach Pincus on ipython-user.
313 and friends, after a discussion with Zach Pincus on ipython-user.
308 I'm not 100% sure, but after thinking aobut it quite a bit, it may
314 I'm not 100% sure, but after thinking aobut it quite a bit, it may
309 be OK. Testing with the multithreaded shells didn't reveal any
315 be OK. Testing with the multithreaded shells didn't reveal any
310 problems, but let's keep an eye out.
316 problems, but let's keep an eye out.
311
317
312 In the process, I fixed a few things which were calling
318 In the process, I fixed a few things which were calling
313 self.InteractiveTB() directly (like safe_execfile), which is a
319 self.InteractiveTB() directly (like safe_execfile), which is a
314 mistake: ALL exception reporting should be done by calling
320 mistake: ALL exception reporting should be done by calling
315 self.showtraceback(), which handles state and tab-completion and
321 self.showtraceback(), which handles state and tab-completion and
316 more.
322 more.
317
323
318 2006-03-01 Ville Vainio <vivainio@gmail.com>
324 2006-03-01 Ville Vainio <vivainio@gmail.com>
319
325
320 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
326 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
321 To use, do "from ipipe import *".
327 To use, do "from ipipe import *".
322
328
323 2006-02-24 Ville Vainio <vivainio@gmail.com>
329 2006-02-24 Ville Vainio <vivainio@gmail.com>
324
330
325 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
331 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
326 "cleanly" and safely than the older upgrade mechanism.
332 "cleanly" and safely than the older upgrade mechanism.
327
333
328 2006-02-21 Ville Vainio <vivainio@gmail.com>
334 2006-02-21 Ville Vainio <vivainio@gmail.com>
329
335
330 * Magic.py: %save works again.
336 * Magic.py: %save works again.
331
337
332 2006-02-15 Ville Vainio <vivainio@gmail.com>
338 2006-02-15 Ville Vainio <vivainio@gmail.com>
333
339
334 * Magic.py: %Pprint works again
340 * Magic.py: %Pprint works again
335
341
336 * Extensions/ipy_sane_defaults.py: Provide everything provided
342 * Extensions/ipy_sane_defaults.py: Provide everything provided
337 in default ipythonrc, to make it possible to have a completely empty
343 in default ipythonrc, to make it possible to have a completely empty
338 ipythonrc (and thus completely rc-file free configuration)
344 ipythonrc (and thus completely rc-file free configuration)
339
345
340
346
341 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
347 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
342
348
343 * IPython/hooks.py (editor): quote the call to the editor command,
349 * IPython/hooks.py (editor): quote the call to the editor command,
344 to allow commands with spaces in them. Problem noted by watching
350 to allow commands with spaces in them. Problem noted by watching
345 Ian Oswald's video about textpad under win32 at
351 Ian Oswald's video about textpad under win32 at
346 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
352 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
347
353
348 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
354 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
349 describing magics (we haven't used @ for a loong time).
355 describing magics (we haven't used @ for a loong time).
350
356
351 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
357 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
352 contributed by marienz to close
358 contributed by marienz to close
353 http://www.scipy.net/roundup/ipython/issue53.
359 http://www.scipy.net/roundup/ipython/issue53.
354
360
355 2006-02-10 Ville Vainio <vivainio@gmail.com>
361 2006-02-10 Ville Vainio <vivainio@gmail.com>
356
362
357 * genutils.py: getoutput now works in win32 too
363 * genutils.py: getoutput now works in win32 too
358
364
359 * completer.py: alias and magic completion only invoked
365 * completer.py: alias and magic completion only invoked
360 at the first "item" in the line, to avoid "cd %store"
366 at the first "item" in the line, to avoid "cd %store"
361 nonsense.
367 nonsense.
362
368
363 2006-02-09 Ville Vainio <vivainio@gmail.com>
369 2006-02-09 Ville Vainio <vivainio@gmail.com>
364
370
365 * test/*: Added a unit testing framework (finally).
371 * test/*: Added a unit testing framework (finally).
366 '%run runtests.py' to run test_*.
372 '%run runtests.py' to run test_*.
367
373
368 * ipapi.py: Exposed runlines and set_custom_exc
374 * ipapi.py: Exposed runlines and set_custom_exc
369
375
370 2006-02-07 Ville Vainio <vivainio@gmail.com>
376 2006-02-07 Ville Vainio <vivainio@gmail.com>
371
377
372 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
378 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
373 instead use "f(1 2)" as before.
379 instead use "f(1 2)" as before.
374
380
375 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
381 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
376
382
377 * IPython/demo.py (IPythonDemo): Add new classes to the demo
383 * IPython/demo.py (IPythonDemo): Add new classes to the demo
378 facilities, for demos processed by the IPython input filter
384 facilities, for demos processed by the IPython input filter
379 (IPythonDemo), and for running a script one-line-at-a-time as a
385 (IPythonDemo), and for running a script one-line-at-a-time as a
380 demo, both for pure Python (LineDemo) and for IPython-processed
386 demo, both for pure Python (LineDemo) and for IPython-processed
381 input (IPythonLineDemo). After a request by Dave Kohel, from the
387 input (IPythonLineDemo). After a request by Dave Kohel, from the
382 SAGE team.
388 SAGE team.
383 (Demo.edit): added and edit() method to the demo objects, to edit
389 (Demo.edit): added and edit() method to the demo objects, to edit
384 the in-memory copy of the last executed block.
390 the in-memory copy of the last executed block.
385
391
386 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
392 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
387 processing to %edit, %macro and %save. These commands can now be
393 processing to %edit, %macro and %save. These commands can now be
388 invoked on the unprocessed input as it was typed by the user
394 invoked on the unprocessed input as it was typed by the user
389 (without any prefilters applied). After requests by the SAGE team
395 (without any prefilters applied). After requests by the SAGE team
390 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
396 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
391
397
392 2006-02-01 Ville Vainio <vivainio@gmail.com>
398 2006-02-01 Ville Vainio <vivainio@gmail.com>
393
399
394 * setup.py, eggsetup.py: easy_install ipython==dev works
400 * setup.py, eggsetup.py: easy_install ipython==dev works
395 correctly now (on Linux)
401 correctly now (on Linux)
396
402
397 * ipy_user_conf,ipmaker: user config changes, removed spurious
403 * ipy_user_conf,ipmaker: user config changes, removed spurious
398 warnings
404 warnings
399
405
400 * iplib: if rc.banner is string, use it as is.
406 * iplib: if rc.banner is string, use it as is.
401
407
402 * Magic: %pycat accepts a string argument and pages it's contents.
408 * Magic: %pycat accepts a string argument and pages it's contents.
403
409
404
410
405 2006-01-30 Ville Vainio <vivainio@gmail.com>
411 2006-01-30 Ville Vainio <vivainio@gmail.com>
406
412
407 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
413 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
408 Now %store and bookmarks work through PickleShare, meaning that
414 Now %store and bookmarks work through PickleShare, meaning that
409 concurrent access is possible and all ipython sessions see the
415 concurrent access is possible and all ipython sessions see the
410 same database situation all the time, instead of snapshot of
416 same database situation all the time, instead of snapshot of
411 the situation when the session was started. Hence, %bookmark
417 the situation when the session was started. Hence, %bookmark
412 results are immediately accessible from othes sessions. The database
418 results are immediately accessible from othes sessions. The database
413 is also available for use by user extensions. See:
419 is also available for use by user extensions. See:
414 http://www.python.org/pypi/pickleshare
420 http://www.python.org/pypi/pickleshare
415
421
416 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
422 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
417
423
418 * aliases can now be %store'd
424 * aliases can now be %store'd
419
425
420 * path.py move to Extensions so that pickleshare does not need
426 * path.py move to Extensions so that pickleshare does not need
421 IPython-specific import. Extensions added to pythonpath right
427 IPython-specific import. Extensions added to pythonpath right
422 at __init__.
428 at __init__.
423
429
424 * iplib.py: ipalias deprecated/redundant; aliases are converted and
430 * iplib.py: ipalias deprecated/redundant; aliases are converted and
425 called with _ip.system and the pre-transformed command string.
431 called with _ip.system and the pre-transformed command string.
426
432
427 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
433 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
428
434
429 * IPython/iplib.py (interact): Fix that we were not catching
435 * IPython/iplib.py (interact): Fix that we were not catching
430 KeyboardInterrupt exceptions properly. I'm not quite sure why the
436 KeyboardInterrupt exceptions properly. I'm not quite sure why the
431 logic here had to change, but it's fixed now.
437 logic here had to change, but it's fixed now.
432
438
433 2006-01-29 Ville Vainio <vivainio@gmail.com>
439 2006-01-29 Ville Vainio <vivainio@gmail.com>
434
440
435 * iplib.py: Try to import pyreadline on Windows.
441 * iplib.py: Try to import pyreadline on Windows.
436
442
437 2006-01-27 Ville Vainio <vivainio@gmail.com>
443 2006-01-27 Ville Vainio <vivainio@gmail.com>
438
444
439 * iplib.py: Expose ipapi as _ip in builtin namespace.
445 * iplib.py: Expose ipapi as _ip in builtin namespace.
440 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
446 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
441 and ip_set_hook (-> _ip.set_hook) redundant. % and !
447 and ip_set_hook (-> _ip.set_hook) redundant. % and !
442 syntax now produce _ip.* variant of the commands.
448 syntax now produce _ip.* variant of the commands.
443
449
444 * "_ip.options().autoedit_syntax = 2" automatically throws
450 * "_ip.options().autoedit_syntax = 2" automatically throws
445 user to editor for syntax error correction without prompting.
451 user to editor for syntax error correction without prompting.
446
452
447 2006-01-27 Ville Vainio <vivainio@gmail.com>
453 2006-01-27 Ville Vainio <vivainio@gmail.com>
448
454
449 * ipmaker.py: Give "realistic" sys.argv for scripts (without
455 * ipmaker.py: Give "realistic" sys.argv for scripts (without
450 'ipython' at argv[0]) executed through command line.
456 'ipython' at argv[0]) executed through command line.
451 NOTE: this DEPRECATES calling ipython with multiple scripts
457 NOTE: this DEPRECATES calling ipython with multiple scripts
452 ("ipython a.py b.py c.py")
458 ("ipython a.py b.py c.py")
453
459
454 * iplib.py, hooks.py: Added configurable input prefilter,
460 * iplib.py, hooks.py: Added configurable input prefilter,
455 named 'input_prefilter'. See ext_rescapture.py for example
461 named 'input_prefilter'. See ext_rescapture.py for example
456 usage.
462 usage.
457
463
458 * ext_rescapture.py, Magic.py: Better system command output capture
464 * ext_rescapture.py, Magic.py: Better system command output capture
459 through 'var = !ls' (deprecates user-visible %sc). Same notation
465 through 'var = !ls' (deprecates user-visible %sc). Same notation
460 applies for magics, 'var = %alias' assigns alias list to var.
466 applies for magics, 'var = %alias' assigns alias list to var.
461
467
462 * ipapi.py: added meta() for accessing extension-usable data store.
468 * ipapi.py: added meta() for accessing extension-usable data store.
463
469
464 * iplib.py: added InteractiveShell.getapi(). New magics should be
470 * iplib.py: added InteractiveShell.getapi(). New magics should be
465 written doing self.getapi() instead of using the shell directly.
471 written doing self.getapi() instead of using the shell directly.
466
472
467 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
473 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
468 %store foo >> ~/myfoo.txt to store variables to files (in clean
474 %store foo >> ~/myfoo.txt to store variables to files (in clean
469 textual form, not a restorable pickle).
475 textual form, not a restorable pickle).
470
476
471 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
477 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
472
478
473 * usage.py, Magic.py: added %quickref
479 * usage.py, Magic.py: added %quickref
474
480
475 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
481 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
476
482
477 * GetoptErrors when invoking magics etc. with wrong args
483 * GetoptErrors when invoking magics etc. with wrong args
478 are now more helpful:
484 are now more helpful:
479 GetoptError: option -l not recognized (allowed: "qb" )
485 GetoptError: option -l not recognized (allowed: "qb" )
480
486
481 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
487 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
482
488
483 * IPython/demo.py (Demo.show): Flush stdout after each block, so
489 * IPython/demo.py (Demo.show): Flush stdout after each block, so
484 computationally intensive blocks don't appear to stall the demo.
490 computationally intensive blocks don't appear to stall the demo.
485
491
486 2006-01-24 Ville Vainio <vivainio@gmail.com>
492 2006-01-24 Ville Vainio <vivainio@gmail.com>
487
493
488 * iplib.py, hooks.py: 'result_display' hook can return a non-None
494 * iplib.py, hooks.py: 'result_display' hook can return a non-None
489 value to manipulate resulting history entry.
495 value to manipulate resulting history entry.
490
496
491 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
497 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
492 to instance methods of IPApi class, to make extending an embedded
498 to instance methods of IPApi class, to make extending an embedded
493 IPython feasible. See ext_rehashdir.py for example usage.
499 IPython feasible. See ext_rehashdir.py for example usage.
494
500
495 * Merged 1071-1076 from banches/0.7.1
501 * Merged 1071-1076 from banches/0.7.1
496
502
497
503
498 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
504 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
499
505
500 * tools/release (daystamp): Fix build tools to use the new
506 * tools/release (daystamp): Fix build tools to use the new
501 eggsetup.py script to build lightweight eggs.
507 eggsetup.py script to build lightweight eggs.
502
508
503 * Applied changesets 1062 and 1064 before 0.7.1 release.
509 * Applied changesets 1062 and 1064 before 0.7.1 release.
504
510
505 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
511 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
506 see the raw input history (without conversions like %ls ->
512 see the raw input history (without conversions like %ls ->
507 ipmagic("ls")). After a request from W. Stein, SAGE
513 ipmagic("ls")). After a request from W. Stein, SAGE
508 (http://modular.ucsd.edu/sage) developer. This information is
514 (http://modular.ucsd.edu/sage) developer. This information is
509 stored in the input_hist_raw attribute of the IPython instance, so
515 stored in the input_hist_raw attribute of the IPython instance, so
510 developers can access it if needed (it's an InputList instance).
516 developers can access it if needed (it's an InputList instance).
511
517
512 * Versionstring = 0.7.2.svn
518 * Versionstring = 0.7.2.svn
513
519
514 * eggsetup.py: A separate script for constructing eggs, creates
520 * eggsetup.py: A separate script for constructing eggs, creates
515 proper launch scripts even on Windows (an .exe file in
521 proper launch scripts even on Windows (an .exe file in
516 \python24\scripts).
522 \python24\scripts).
517
523
518 * ipapi.py: launch_new_instance, launch entry point needed for the
524 * ipapi.py: launch_new_instance, launch entry point needed for the
519 egg.
525 egg.
520
526
521 2006-01-23 Ville Vainio <vivainio@gmail.com>
527 2006-01-23 Ville Vainio <vivainio@gmail.com>
522
528
523 * Added %cpaste magic for pasting python code
529 * Added %cpaste magic for pasting python code
524
530
525 2006-01-22 Ville Vainio <vivainio@gmail.com>
531 2006-01-22 Ville Vainio <vivainio@gmail.com>
526
532
527 * Merge from branches/0.7.1 into trunk, revs 1052-1057
533 * Merge from branches/0.7.1 into trunk, revs 1052-1057
528
534
529 * Versionstring = 0.7.2.svn
535 * Versionstring = 0.7.2.svn
530
536
531 * eggsetup.py: A separate script for constructing eggs, creates
537 * eggsetup.py: A separate script for constructing eggs, creates
532 proper launch scripts even on Windows (an .exe file in
538 proper launch scripts even on Windows (an .exe file in
533 \python24\scripts).
539 \python24\scripts).
534
540
535 * ipapi.py: launch_new_instance, launch entry point needed for the
541 * ipapi.py: launch_new_instance, launch entry point needed for the
536 egg.
542 egg.
537
543
538 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
544 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
539
545
540 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
546 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
541 %pfile foo would print the file for foo even if it was a binary.
547 %pfile foo would print the file for foo even if it was a binary.
542 Now, extensions '.so' and '.dll' are skipped.
548 Now, extensions '.so' and '.dll' are skipped.
543
549
544 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
550 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
545 bug, where macros would fail in all threaded modes. I'm not 100%
551 bug, where macros would fail in all threaded modes. I'm not 100%
546 sure, so I'm going to put out an rc instead of making a release
552 sure, so I'm going to put out an rc instead of making a release
547 today, and wait for feedback for at least a few days.
553 today, and wait for feedback for at least a few days.
548
554
549 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
555 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
550 it...) the handling of pasting external code with autoindent on.
556 it...) the handling of pasting external code with autoindent on.
551 To get out of a multiline input, the rule will appear for most
557 To get out of a multiline input, the rule will appear for most
552 users unchanged: two blank lines or change the indent level
558 users unchanged: two blank lines or change the indent level
553 proposed by IPython. But there is a twist now: you can
559 proposed by IPython. But there is a twist now: you can
554 add/subtract only *one or two spaces*. If you add/subtract three
560 add/subtract only *one or two spaces*. If you add/subtract three
555 or more (unless you completely delete the line), IPython will
561 or more (unless you completely delete the line), IPython will
556 accept that line, and you'll need to enter a second one of pure
562 accept that line, and you'll need to enter a second one of pure
557 whitespace. I know it sounds complicated, but I can't find a
563 whitespace. I know it sounds complicated, but I can't find a
558 different solution that covers all the cases, with the right
564 different solution that covers all the cases, with the right
559 heuristics. Hopefully in actual use, nobody will really notice
565 heuristics. Hopefully in actual use, nobody will really notice
560 all these strange rules and things will 'just work'.
566 all these strange rules and things will 'just work'.
561
567
562 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
568 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
563
569
564 * IPython/iplib.py (interact): catch exceptions which can be
570 * IPython/iplib.py (interact): catch exceptions which can be
565 triggered asynchronously by signal handlers. Thanks to an
571 triggered asynchronously by signal handlers. Thanks to an
566 automatic crash report, submitted by Colin Kingsley
572 automatic crash report, submitted by Colin Kingsley
567 <tercel-AT-gentoo.org>.
573 <tercel-AT-gentoo.org>.
568
574
569 2006-01-20 Ville Vainio <vivainio@gmail.com>
575 2006-01-20 Ville Vainio <vivainio@gmail.com>
570
576
571 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
577 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
572 (%rehashdir, very useful, try it out) of how to extend ipython
578 (%rehashdir, very useful, try it out) of how to extend ipython
573 with new magics. Also added Extensions dir to pythonpath to make
579 with new magics. Also added Extensions dir to pythonpath to make
574 importing extensions easy.
580 importing extensions easy.
575
581
576 * %store now complains when trying to store interactively declared
582 * %store now complains when trying to store interactively declared
577 classes / instances of those classes.
583 classes / instances of those classes.
578
584
579 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
585 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
580 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
586 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
581 if they exist, and ipy_user_conf.py with some defaults is created for
587 if they exist, and ipy_user_conf.py with some defaults is created for
582 the user.
588 the user.
583
589
584 * Startup rehashing done by the config file, not InterpreterExec.
590 * Startup rehashing done by the config file, not InterpreterExec.
585 This means system commands are available even without selecting the
591 This means system commands are available even without selecting the
586 pysh profile. It's the sensible default after all.
592 pysh profile. It's the sensible default after all.
587
593
588 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
594 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
589
595
590 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
596 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
591 multiline code with autoindent on working. But I am really not
597 multiline code with autoindent on working. But I am really not
592 sure, so this needs more testing. Will commit a debug-enabled
598 sure, so this needs more testing. Will commit a debug-enabled
593 version for now, while I test it some more, so that Ville and
599 version for now, while I test it some more, so that Ville and
594 others may also catch any problems. Also made
600 others may also catch any problems. Also made
595 self.indent_current_str() a method, to ensure that there's no
601 self.indent_current_str() a method, to ensure that there's no
596 chance of the indent space count and the corresponding string
602 chance of the indent space count and the corresponding string
597 falling out of sync. All code needing the string should just call
603 falling out of sync. All code needing the string should just call
598 the method.
604 the method.
599
605
600 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
606 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
601
607
602 * IPython/Magic.py (magic_edit): fix check for when users don't
608 * IPython/Magic.py (magic_edit): fix check for when users don't
603 save their output files, the try/except was in the wrong section.
609 save their output files, the try/except was in the wrong section.
604
610
605 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
611 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
606
612
607 * IPython/Magic.py (magic_run): fix __file__ global missing from
613 * IPython/Magic.py (magic_run): fix __file__ global missing from
608 script's namespace when executed via %run. After a report by
614 script's namespace when executed via %run. After a report by
609 Vivian.
615 Vivian.
610
616
611 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
617 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
612 when using python 2.4. The parent constructor changed in 2.4, and
618 when using python 2.4. The parent constructor changed in 2.4, and
613 we need to track it directly (we can't call it, as it messes up
619 we need to track it directly (we can't call it, as it messes up
614 readline and tab-completion inside our pdb would stop working).
620 readline and tab-completion inside our pdb would stop working).
615 After a bug report by R. Bernstein <rocky-AT-panix.com>.
621 After a bug report by R. Bernstein <rocky-AT-panix.com>.
616
622
617 2006-01-16 Ville Vainio <vivainio@gmail.com>
623 2006-01-16 Ville Vainio <vivainio@gmail.com>
618
624
619 * Ipython/magic.py:Reverted back to old %edit functionality
625 * Ipython/magic.py:Reverted back to old %edit functionality
620 that returns file contents on exit.
626 that returns file contents on exit.
621
627
622 * IPython/path.py: Added Jason Orendorff's "path" module to
628 * IPython/path.py: Added Jason Orendorff's "path" module to
623 IPython tree, http://www.jorendorff.com/articles/python/path/.
629 IPython tree, http://www.jorendorff.com/articles/python/path/.
624 You can get path objects conveniently through %sc, and !!, e.g.:
630 You can get path objects conveniently through %sc, and !!, e.g.:
625 sc files=ls
631 sc files=ls
626 for p in files.paths: # or files.p
632 for p in files.paths: # or files.p
627 print p,p.mtime
633 print p,p.mtime
628
634
629 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
635 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
630 now work again without considering the exclusion regexp -
636 now work again without considering the exclusion regexp -
631 hence, things like ',foo my/path' turn to 'foo("my/path")'
637 hence, things like ',foo my/path' turn to 'foo("my/path")'
632 instead of syntax error.
638 instead of syntax error.
633
639
634
640
635 2006-01-14 Ville Vainio <vivainio@gmail.com>
641 2006-01-14 Ville Vainio <vivainio@gmail.com>
636
642
637 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
643 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
638 ipapi decorators for python 2.4 users, options() provides access to rc
644 ipapi decorators for python 2.4 users, options() provides access to rc
639 data.
645 data.
640
646
641 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
647 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
642 as path separators (even on Linux ;-). Space character after
648 as path separators (even on Linux ;-). Space character after
643 backslash (as yielded by tab completer) is still space;
649 backslash (as yielded by tab completer) is still space;
644 "%cd long\ name" works as expected.
650 "%cd long\ name" works as expected.
645
651
646 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
652 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
647 as "chain of command", with priority. API stays the same,
653 as "chain of command", with priority. API stays the same,
648 TryNext exception raised by a hook function signals that
654 TryNext exception raised by a hook function signals that
649 current hook failed and next hook should try handling it, as
655 current hook failed and next hook should try handling it, as
650 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
656 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
651 requested configurable display hook, which is now implemented.
657 requested configurable display hook, which is now implemented.
652
658
653 2006-01-13 Ville Vainio <vivainio@gmail.com>
659 2006-01-13 Ville Vainio <vivainio@gmail.com>
654
660
655 * IPython/platutils*.py: platform specific utility functions,
661 * IPython/platutils*.py: platform specific utility functions,
656 so far only set_term_title is implemented (change terminal
662 so far only set_term_title is implemented (change terminal
657 label in windowing systems). %cd now changes the title to
663 label in windowing systems). %cd now changes the title to
658 current dir.
664 current dir.
659
665
660 * IPython/Release.py: Added myself to "authors" list,
666 * IPython/Release.py: Added myself to "authors" list,
661 had to create new files.
667 had to create new files.
662
668
663 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
669 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
664 shell escape; not a known bug but had potential to be one in the
670 shell escape; not a known bug but had potential to be one in the
665 future.
671 future.
666
672
667 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
673 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
668 extension API for IPython! See the module for usage example. Fix
674 extension API for IPython! See the module for usage example. Fix
669 OInspect for docstring-less magic functions.
675 OInspect for docstring-less magic functions.
670
676
671
677
672 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
678 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
673
679
674 * IPython/iplib.py (raw_input): temporarily deactivate all
680 * IPython/iplib.py (raw_input): temporarily deactivate all
675 attempts at allowing pasting of code with autoindent on. It
681 attempts at allowing pasting of code with autoindent on. It
676 introduced bugs (reported by Prabhu) and I can't seem to find a
682 introduced bugs (reported by Prabhu) and I can't seem to find a
677 robust combination which works in all cases. Will have to revisit
683 robust combination which works in all cases. Will have to revisit
678 later.
684 later.
679
685
680 * IPython/genutils.py: remove isspace() function. We've dropped
686 * IPython/genutils.py: remove isspace() function. We've dropped
681 2.2 compatibility, so it's OK to use the string method.
687 2.2 compatibility, so it's OK to use the string method.
682
688
683 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
689 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
684
690
685 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
691 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
686 matching what NOT to autocall on, to include all python binary
692 matching what NOT to autocall on, to include all python binary
687 operators (including things like 'and', 'or', 'is' and 'in').
693 operators (including things like 'and', 'or', 'is' and 'in').
688 Prompted by a bug report on 'foo & bar', but I realized we had
694 Prompted by a bug report on 'foo & bar', but I realized we had
689 many more potential bug cases with other operators. The regexp is
695 many more potential bug cases with other operators. The regexp is
690 self.re_exclude_auto, it's fairly commented.
696 self.re_exclude_auto, it's fairly commented.
691
697
692 2006-01-12 Ville Vainio <vivainio@gmail.com>
698 2006-01-12 Ville Vainio <vivainio@gmail.com>
693
699
694 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
700 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
695 Prettified and hardened string/backslash quoting with ipsystem(),
701 Prettified and hardened string/backslash quoting with ipsystem(),
696 ipalias() and ipmagic(). Now even \ characters are passed to
702 ipalias() and ipmagic(). Now even \ characters are passed to
697 %magics, !shell escapes and aliases exactly as they are in the
703 %magics, !shell escapes and aliases exactly as they are in the
698 ipython command line. Should improve backslash experience,
704 ipython command line. Should improve backslash experience,
699 particularly in Windows (path delimiter for some commands that
705 particularly in Windows (path delimiter for some commands that
700 won't understand '/'), but Unix benefits as well (regexps). %cd
706 won't understand '/'), but Unix benefits as well (regexps). %cd
701 magic still doesn't support backslash path delimiters, though. Also
707 magic still doesn't support backslash path delimiters, though. Also
702 deleted all pretense of supporting multiline command strings in
708 deleted all pretense of supporting multiline command strings in
703 !system or %magic commands. Thanks to Jerry McRae for suggestions.
709 !system or %magic commands. Thanks to Jerry McRae for suggestions.
704
710
705 * doc/build_doc_instructions.txt added. Documentation on how to
711 * doc/build_doc_instructions.txt added. Documentation on how to
706 use doc/update_manual.py, added yesterday. Both files contributed
712 use doc/update_manual.py, added yesterday. Both files contributed
707 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
713 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
708 doc/*.sh for deprecation at a later date.
714 doc/*.sh for deprecation at a later date.
709
715
710 * /ipython.py Added ipython.py to root directory for
716 * /ipython.py Added ipython.py to root directory for
711 zero-installation (tar xzvf ipython.tgz; cd ipython; python
717 zero-installation (tar xzvf ipython.tgz; cd ipython; python
712 ipython.py) and development convenience (no need to kee doing
718 ipython.py) and development convenience (no need to kee doing
713 "setup.py install" between changes).
719 "setup.py install" between changes).
714
720
715 * Made ! and !! shell escapes work (again) in multiline expressions:
721 * Made ! and !! shell escapes work (again) in multiline expressions:
716 if 1:
722 if 1:
717 !ls
723 !ls
718 !!ls
724 !!ls
719
725
720 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
726 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
721
727
722 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
728 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
723 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
729 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
724 module in case-insensitive installation. Was causing crashes
730 module in case-insensitive installation. Was causing crashes
725 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
731 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
726
732
727 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
733 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
728 <marienz-AT-gentoo.org>, closes
734 <marienz-AT-gentoo.org>, closes
729 http://www.scipy.net/roundup/ipython/issue51.
735 http://www.scipy.net/roundup/ipython/issue51.
730
736
731 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
737 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
732
738
733 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
739 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
734 problem of excessive CPU usage under *nix and keyboard lag under
740 problem of excessive CPU usage under *nix and keyboard lag under
735 win32.
741 win32.
736
742
737 2006-01-10 *** Released version 0.7.0
743 2006-01-10 *** Released version 0.7.0
738
744
739 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
745 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
740
746
741 * IPython/Release.py (revision): tag version number to 0.7.0,
747 * IPython/Release.py (revision): tag version number to 0.7.0,
742 ready for release.
748 ready for release.
743
749
744 * IPython/Magic.py (magic_edit): Add print statement to %edit so
750 * IPython/Magic.py (magic_edit): Add print statement to %edit so
745 it informs the user of the name of the temp. file used. This can
751 it informs the user of the name of the temp. file used. This can
746 help if you decide later to reuse that same file, so you know
752 help if you decide later to reuse that same file, so you know
747 where to copy the info from.
753 where to copy the info from.
748
754
749 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
755 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
750
756
751 * setup_bdist_egg.py: little script to build an egg. Added
757 * setup_bdist_egg.py: little script to build an egg. Added
752 support in the release tools as well.
758 support in the release tools as well.
753
759
754 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
760 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
755
761
756 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
762 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
757 version selection (new -wxversion command line and ipythonrc
763 version selection (new -wxversion command line and ipythonrc
758 parameter). Patch contributed by Arnd Baecker
764 parameter). Patch contributed by Arnd Baecker
759 <arnd.baecker-AT-web.de>.
765 <arnd.baecker-AT-web.de>.
760
766
761 * IPython/iplib.py (embed_mainloop): fix tab-completion in
767 * IPython/iplib.py (embed_mainloop): fix tab-completion in
762 embedded instances, for variables defined at the interactive
768 embedded instances, for variables defined at the interactive
763 prompt of the embedded ipython. Reported by Arnd.
769 prompt of the embedded ipython. Reported by Arnd.
764
770
765 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
771 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
766 it can be used as a (stateful) toggle, or with a direct parameter.
772 it can be used as a (stateful) toggle, or with a direct parameter.
767
773
768 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
774 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
769 could be triggered in certain cases and cause the traceback
775 could be triggered in certain cases and cause the traceback
770 printer not to work.
776 printer not to work.
771
777
772 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
778 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
773
779
774 * IPython/iplib.py (_should_recompile): Small fix, closes
780 * IPython/iplib.py (_should_recompile): Small fix, closes
775 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
781 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
776
782
777 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
783 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
778
784
779 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
785 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
780 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
786 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
781 Moad for help with tracking it down.
787 Moad for help with tracking it down.
782
788
783 * IPython/iplib.py (handle_auto): fix autocall handling for
789 * IPython/iplib.py (handle_auto): fix autocall handling for
784 objects which support BOTH __getitem__ and __call__ (so that f [x]
790 objects which support BOTH __getitem__ and __call__ (so that f [x]
785 is left alone, instead of becoming f([x]) automatically).
791 is left alone, instead of becoming f([x]) automatically).
786
792
787 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
793 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
788 Ville's patch.
794 Ville's patch.
789
795
790 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
796 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
791
797
792 * IPython/iplib.py (handle_auto): changed autocall semantics to
798 * IPython/iplib.py (handle_auto): changed autocall semantics to
793 include 'smart' mode, where the autocall transformation is NOT
799 include 'smart' mode, where the autocall transformation is NOT
794 applied if there are no arguments on the line. This allows you to
800 applied if there are no arguments on the line. This allows you to
795 just type 'foo' if foo is a callable to see its internal form,
801 just type 'foo' if foo is a callable to see its internal form,
796 instead of having it called with no arguments (typically a
802 instead of having it called with no arguments (typically a
797 mistake). The old 'full' autocall still exists: for that, you
803 mistake). The old 'full' autocall still exists: for that, you
798 need to set the 'autocall' parameter to 2 in your ipythonrc file.
804 need to set the 'autocall' parameter to 2 in your ipythonrc file.
799
805
800 * IPython/completer.py (Completer.attr_matches): add
806 * IPython/completer.py (Completer.attr_matches): add
801 tab-completion support for Enthoughts' traits. After a report by
807 tab-completion support for Enthoughts' traits. After a report by
802 Arnd and a patch by Prabhu.
808 Arnd and a patch by Prabhu.
803
809
804 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
810 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
805
811
806 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
812 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
807 Schmolck's patch to fix inspect.getinnerframes().
813 Schmolck's patch to fix inspect.getinnerframes().
808
814
809 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
815 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
810 for embedded instances, regarding handling of namespaces and items
816 for embedded instances, regarding handling of namespaces and items
811 added to the __builtin__ one. Multiple embedded instances and
817 added to the __builtin__ one. Multiple embedded instances and
812 recursive embeddings should work better now (though I'm not sure
818 recursive embeddings should work better now (though I'm not sure
813 I've got all the corner cases fixed, that code is a bit of a brain
819 I've got all the corner cases fixed, that code is a bit of a brain
814 twister).
820 twister).
815
821
816 * IPython/Magic.py (magic_edit): added support to edit in-memory
822 * IPython/Magic.py (magic_edit): added support to edit in-memory
817 macros (automatically creates the necessary temp files). %edit
823 macros (automatically creates the necessary temp files). %edit
818 also doesn't return the file contents anymore, it's just noise.
824 also doesn't return the file contents anymore, it's just noise.
819
825
820 * IPython/completer.py (Completer.attr_matches): revert change to
826 * IPython/completer.py (Completer.attr_matches): revert change to
821 complete only on attributes listed in __all__. I realized it
827 complete only on attributes listed in __all__. I realized it
822 cripples the tab-completion system as a tool for exploring the
828 cripples the tab-completion system as a tool for exploring the
823 internals of unknown libraries (it renders any non-__all__
829 internals of unknown libraries (it renders any non-__all__
824 attribute off-limits). I got bit by this when trying to see
830 attribute off-limits). I got bit by this when trying to see
825 something inside the dis module.
831 something inside the dis module.
826
832
827 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
833 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
828
834
829 * IPython/iplib.py (InteractiveShell.__init__): add .meta
835 * IPython/iplib.py (InteractiveShell.__init__): add .meta
830 namespace for users and extension writers to hold data in. This
836 namespace for users and extension writers to hold data in. This
831 follows the discussion in
837 follows the discussion in
832 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
838 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
833
839
834 * IPython/completer.py (IPCompleter.complete): small patch to help
840 * IPython/completer.py (IPCompleter.complete): small patch to help
835 tab-completion under Emacs, after a suggestion by John Barnard
841 tab-completion under Emacs, after a suggestion by John Barnard
836 <barnarj-AT-ccf.org>.
842 <barnarj-AT-ccf.org>.
837
843
838 * IPython/Magic.py (Magic.extract_input_slices): added support for
844 * IPython/Magic.py (Magic.extract_input_slices): added support for
839 the slice notation in magics to use N-M to represent numbers N...M
845 the slice notation in magics to use N-M to represent numbers N...M
840 (closed endpoints). This is used by %macro and %save.
846 (closed endpoints). This is used by %macro and %save.
841
847
842 * IPython/completer.py (Completer.attr_matches): for modules which
848 * IPython/completer.py (Completer.attr_matches): for modules which
843 define __all__, complete only on those. After a patch by Jeffrey
849 define __all__, complete only on those. After a patch by Jeffrey
844 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
850 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
845 speed up this routine.
851 speed up this routine.
846
852
847 * IPython/Logger.py (Logger.log): fix a history handling bug. I
853 * IPython/Logger.py (Logger.log): fix a history handling bug. I
848 don't know if this is the end of it, but the behavior now is
854 don't know if this is the end of it, but the behavior now is
849 certainly much more correct. Note that coupled with macros,
855 certainly much more correct. Note that coupled with macros,
850 slightly surprising (at first) behavior may occur: a macro will in
856 slightly surprising (at first) behavior may occur: a macro will in
851 general expand to multiple lines of input, so upon exiting, the
857 general expand to multiple lines of input, so upon exiting, the
852 in/out counters will both be bumped by the corresponding amount
858 in/out counters will both be bumped by the corresponding amount
853 (as if the macro's contents had been typed interactively). Typing
859 (as if the macro's contents had been typed interactively). Typing
854 %hist will reveal the intermediate (silently processed) lines.
860 %hist will reveal the intermediate (silently processed) lines.
855
861
856 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
862 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
857 pickle to fail (%run was overwriting __main__ and not restoring
863 pickle to fail (%run was overwriting __main__ and not restoring
858 it, but pickle relies on __main__ to operate).
864 it, but pickle relies on __main__ to operate).
859
865
860 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
866 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
861 using properties, but forgot to make the main InteractiveShell
867 using properties, but forgot to make the main InteractiveShell
862 class a new-style class. Properties fail silently, and
868 class a new-style class. Properties fail silently, and
863 misteriously, with old-style class (getters work, but
869 misteriously, with old-style class (getters work, but
864 setters don't do anything).
870 setters don't do anything).
865
871
866 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
872 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
867
873
868 * IPython/Magic.py (magic_history): fix history reporting bug (I
874 * IPython/Magic.py (magic_history): fix history reporting bug (I
869 know some nasties are still there, I just can't seem to find a
875 know some nasties are still there, I just can't seem to find a
870 reproducible test case to track them down; the input history is
876 reproducible test case to track them down; the input history is
871 falling out of sync...)
877 falling out of sync...)
872
878
873 * IPython/iplib.py (handle_shell_escape): fix bug where both
879 * IPython/iplib.py (handle_shell_escape): fix bug where both
874 aliases and system accesses where broken for indented code (such
880 aliases and system accesses where broken for indented code (such
875 as loops).
881 as loops).
876
882
877 * IPython/genutils.py (shell): fix small but critical bug for
883 * IPython/genutils.py (shell): fix small but critical bug for
878 win32 system access.
884 win32 system access.
879
885
880 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
886 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
881
887
882 * IPython/iplib.py (showtraceback): remove use of the
888 * IPython/iplib.py (showtraceback): remove use of the
883 sys.last_{type/value/traceback} structures, which are non
889 sys.last_{type/value/traceback} structures, which are non
884 thread-safe.
890 thread-safe.
885 (_prefilter): change control flow to ensure that we NEVER
891 (_prefilter): change control flow to ensure that we NEVER
886 introspect objects when autocall is off. This will guarantee that
892 introspect objects when autocall is off. This will guarantee that
887 having an input line of the form 'x.y', where access to attribute
893 having an input line of the form 'x.y', where access to attribute
888 'y' has side effects, doesn't trigger the side effect TWICE. It
894 'y' has side effects, doesn't trigger the side effect TWICE. It
889 is important to note that, with autocall on, these side effects
895 is important to note that, with autocall on, these side effects
890 can still happen.
896 can still happen.
891 (ipsystem): new builtin, to complete the ip{magic/alias/system}
897 (ipsystem): new builtin, to complete the ip{magic/alias/system}
892 trio. IPython offers these three kinds of special calls which are
898 trio. IPython offers these three kinds of special calls which are
893 not python code, and it's a good thing to have their call method
899 not python code, and it's a good thing to have their call method
894 be accessible as pure python functions (not just special syntax at
900 be accessible as pure python functions (not just special syntax at
895 the command line). It gives us a better internal implementation
901 the command line). It gives us a better internal implementation
896 structure, as well as exposing these for user scripting more
902 structure, as well as exposing these for user scripting more
897 cleanly.
903 cleanly.
898
904
899 * IPython/macro.py (Macro.__init__): moved macros to a standalone
905 * IPython/macro.py (Macro.__init__): moved macros to a standalone
900 file. Now that they'll be more likely to be used with the
906 file. Now that they'll be more likely to be used with the
901 persistance system (%store), I want to make sure their module path
907 persistance system (%store), I want to make sure their module path
902 doesn't change in the future, so that we don't break things for
908 doesn't change in the future, so that we don't break things for
903 users' persisted data.
909 users' persisted data.
904
910
905 * IPython/iplib.py (autoindent_update): move indentation
911 * IPython/iplib.py (autoindent_update): move indentation
906 management into the _text_ processing loop, not the keyboard
912 management into the _text_ processing loop, not the keyboard
907 interactive one. This is necessary to correctly process non-typed
913 interactive one. This is necessary to correctly process non-typed
908 multiline input (such as macros).
914 multiline input (such as macros).
909
915
910 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
916 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
911 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
917 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
912 which was producing problems in the resulting manual.
918 which was producing problems in the resulting manual.
913 (magic_whos): improve reporting of instances (show their class,
919 (magic_whos): improve reporting of instances (show their class,
914 instead of simply printing 'instance' which isn't terribly
920 instead of simply printing 'instance' which isn't terribly
915 informative).
921 informative).
916
922
917 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
923 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
918 (minor mods) to support network shares under win32.
924 (minor mods) to support network shares under win32.
919
925
920 * IPython/winconsole.py (get_console_size): add new winconsole
926 * IPython/winconsole.py (get_console_size): add new winconsole
921 module and fixes to page_dumb() to improve its behavior under
927 module and fixes to page_dumb() to improve its behavior under
922 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
928 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
923
929
924 * IPython/Magic.py (Macro): simplified Macro class to just
930 * IPython/Magic.py (Macro): simplified Macro class to just
925 subclass list. We've had only 2.2 compatibility for a very long
931 subclass list. We've had only 2.2 compatibility for a very long
926 time, yet I was still avoiding subclassing the builtin types. No
932 time, yet I was still avoiding subclassing the builtin types. No
927 more (I'm also starting to use properties, though I won't shift to
933 more (I'm also starting to use properties, though I won't shift to
928 2.3-specific features quite yet).
934 2.3-specific features quite yet).
929 (magic_store): added Ville's patch for lightweight variable
935 (magic_store): added Ville's patch for lightweight variable
930 persistence, after a request on the user list by Matt Wilkie
936 persistence, after a request on the user list by Matt Wilkie
931 <maphew-AT-gmail.com>. The new %store magic's docstring has full
937 <maphew-AT-gmail.com>. The new %store magic's docstring has full
932 details.
938 details.
933
939
934 * IPython/iplib.py (InteractiveShell.post_config_initialization):
940 * IPython/iplib.py (InteractiveShell.post_config_initialization):
935 changed the default logfile name from 'ipython.log' to
941 changed the default logfile name from 'ipython.log' to
936 'ipython_log.py'. These logs are real python files, and now that
942 'ipython_log.py'. These logs are real python files, and now that
937 we have much better multiline support, people are more likely to
943 we have much better multiline support, people are more likely to
938 want to use them as such. Might as well name them correctly.
944 want to use them as such. Might as well name them correctly.
939
945
940 * IPython/Magic.py: substantial cleanup. While we can't stop
946 * IPython/Magic.py: substantial cleanup. While we can't stop
941 using magics as mixins, due to the existing customizations 'out
947 using magics as mixins, due to the existing customizations 'out
942 there' which rely on the mixin naming conventions, at least I
948 there' which rely on the mixin naming conventions, at least I
943 cleaned out all cross-class name usage. So once we are OK with
949 cleaned out all cross-class name usage. So once we are OK with
944 breaking compatibility, the two systems can be separated.
950 breaking compatibility, the two systems can be separated.
945
951
946 * IPython/Logger.py: major cleanup. This one is NOT a mixin
952 * IPython/Logger.py: major cleanup. This one is NOT a mixin
947 anymore, and the class is a fair bit less hideous as well. New
953 anymore, and the class is a fair bit less hideous as well. New
948 features were also introduced: timestamping of input, and logging
954 features were also introduced: timestamping of input, and logging
949 of output results. These are user-visible with the -t and -o
955 of output results. These are user-visible with the -t and -o
950 options to %logstart. Closes
956 options to %logstart. Closes
951 http://www.scipy.net/roundup/ipython/issue11 and a request by
957 http://www.scipy.net/roundup/ipython/issue11 and a request by
952 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
958 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
953
959
954 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
960 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
955
961
956 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
962 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
957 better hadnle backslashes in paths. See the thread 'More Windows
963 better hadnle backslashes in paths. See the thread 'More Windows
958 questions part 2 - \/ characters revisited' on the iypthon user
964 questions part 2 - \/ characters revisited' on the iypthon user
959 list:
965 list:
960 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
966 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
961
967
962 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
968 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
963
969
964 (InteractiveShell.__init__): change threaded shells to not use the
970 (InteractiveShell.__init__): change threaded shells to not use the
965 ipython crash handler. This was causing more problems than not,
971 ipython crash handler. This was causing more problems than not,
966 as exceptions in the main thread (GUI code, typically) would
972 as exceptions in the main thread (GUI code, typically) would
967 always show up as a 'crash', when they really weren't.
973 always show up as a 'crash', when they really weren't.
968
974
969 The colors and exception mode commands (%colors/%xmode) have been
975 The colors and exception mode commands (%colors/%xmode) have been
970 synchronized to also take this into account, so users can get
976 synchronized to also take this into account, so users can get
971 verbose exceptions for their threaded code as well. I also added
977 verbose exceptions for their threaded code as well. I also added
972 support for activating pdb inside this exception handler as well,
978 support for activating pdb inside this exception handler as well,
973 so now GUI authors can use IPython's enhanced pdb at runtime.
979 so now GUI authors can use IPython's enhanced pdb at runtime.
974
980
975 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
981 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
976 true by default, and add it to the shipped ipythonrc file. Since
982 true by default, and add it to the shipped ipythonrc file. Since
977 this asks the user before proceeding, I think it's OK to make it
983 this asks the user before proceeding, I think it's OK to make it
978 true by default.
984 true by default.
979
985
980 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
986 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
981 of the previous special-casing of input in the eval loop. I think
987 of the previous special-casing of input in the eval loop. I think
982 this is cleaner, as they really are commands and shouldn't have
988 this is cleaner, as they really are commands and shouldn't have
983 a special role in the middle of the core code.
989 a special role in the middle of the core code.
984
990
985 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
991 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
986
992
987 * IPython/iplib.py (edit_syntax_error): added support for
993 * IPython/iplib.py (edit_syntax_error): added support for
988 automatically reopening the editor if the file had a syntax error
994 automatically reopening the editor if the file had a syntax error
989 in it. Thanks to scottt who provided the patch at:
995 in it. Thanks to scottt who provided the patch at:
990 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
996 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
991 version committed).
997 version committed).
992
998
993 * IPython/iplib.py (handle_normal): add suport for multi-line
999 * IPython/iplib.py (handle_normal): add suport for multi-line
994 input with emtpy lines. This fixes
1000 input with emtpy lines. This fixes
995 http://www.scipy.net/roundup/ipython/issue43 and a similar
1001 http://www.scipy.net/roundup/ipython/issue43 and a similar
996 discussion on the user list.
1002 discussion on the user list.
997
1003
998 WARNING: a behavior change is necessarily introduced to support
1004 WARNING: a behavior change is necessarily introduced to support
999 blank lines: now a single blank line with whitespace does NOT
1005 blank lines: now a single blank line with whitespace does NOT
1000 break the input loop, which means that when autoindent is on, by
1006 break the input loop, which means that when autoindent is on, by
1001 default hitting return on the next (indented) line does NOT exit.
1007 default hitting return on the next (indented) line does NOT exit.
1002
1008
1003 Instead, to exit a multiline input you can either have:
1009 Instead, to exit a multiline input you can either have:
1004
1010
1005 - TWO whitespace lines (just hit return again), or
1011 - TWO whitespace lines (just hit return again), or
1006 - a single whitespace line of a different length than provided
1012 - a single whitespace line of a different length than provided
1007 by the autoindent (add or remove a space).
1013 by the autoindent (add or remove a space).
1008
1014
1009 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1015 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1010 module to better organize all readline-related functionality.
1016 module to better organize all readline-related functionality.
1011 I've deleted FlexCompleter and put all completion clases here.
1017 I've deleted FlexCompleter and put all completion clases here.
1012
1018
1013 * IPython/iplib.py (raw_input): improve indentation management.
1019 * IPython/iplib.py (raw_input): improve indentation management.
1014 It is now possible to paste indented code with autoindent on, and
1020 It is now possible to paste indented code with autoindent on, and
1015 the code is interpreted correctly (though it still looks bad on
1021 the code is interpreted correctly (though it still looks bad on
1016 screen, due to the line-oriented nature of ipython).
1022 screen, due to the line-oriented nature of ipython).
1017 (MagicCompleter.complete): change behavior so that a TAB key on an
1023 (MagicCompleter.complete): change behavior so that a TAB key on an
1018 otherwise empty line actually inserts a tab, instead of completing
1024 otherwise empty line actually inserts a tab, instead of completing
1019 on the entire global namespace. This makes it easier to use the
1025 on the entire global namespace. This makes it easier to use the
1020 TAB key for indentation. After a request by Hans Meine
1026 TAB key for indentation. After a request by Hans Meine
1021 <hans_meine-AT-gmx.net>
1027 <hans_meine-AT-gmx.net>
1022 (_prefilter): add support so that typing plain 'exit' or 'quit'
1028 (_prefilter): add support so that typing plain 'exit' or 'quit'
1023 does a sensible thing. Originally I tried to deviate as little as
1029 does a sensible thing. Originally I tried to deviate as little as
1024 possible from the default python behavior, but even that one may
1030 possible from the default python behavior, but even that one may
1025 change in this direction (thread on python-dev to that effect).
1031 change in this direction (thread on python-dev to that effect).
1026 Regardless, ipython should do the right thing even if CPython's
1032 Regardless, ipython should do the right thing even if CPython's
1027 '>>>' prompt doesn't.
1033 '>>>' prompt doesn't.
1028 (InteractiveShell): removed subclassing code.InteractiveConsole
1034 (InteractiveShell): removed subclassing code.InteractiveConsole
1029 class. By now we'd overridden just about all of its methods: I've
1035 class. By now we'd overridden just about all of its methods: I've
1030 copied the remaining two over, and now ipython is a standalone
1036 copied the remaining two over, and now ipython is a standalone
1031 class. This will provide a clearer picture for the chainsaw
1037 class. This will provide a clearer picture for the chainsaw
1032 branch refactoring.
1038 branch refactoring.
1033
1039
1034 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1040 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1035
1041
1036 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1042 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1037 failures for objects which break when dir() is called on them.
1043 failures for objects which break when dir() is called on them.
1038
1044
1039 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1045 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1040 distinct local and global namespaces in the completer API. This
1046 distinct local and global namespaces in the completer API. This
1041 change allows us top properly handle completion with distinct
1047 change allows us top properly handle completion with distinct
1042 scopes, including in embedded instances (this had never really
1048 scopes, including in embedded instances (this had never really
1043 worked correctly).
1049 worked correctly).
1044
1050
1045 Note: this introduces a change in the constructor for
1051 Note: this introduces a change in the constructor for
1046 MagicCompleter, as a new global_namespace parameter is now the
1052 MagicCompleter, as a new global_namespace parameter is now the
1047 second argument (the others were bumped one position).
1053 second argument (the others were bumped one position).
1048
1054
1049 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1055 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1050
1056
1051 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1057 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1052 embedded instances (which can be done now thanks to Vivian's
1058 embedded instances (which can be done now thanks to Vivian's
1053 frame-handling fixes for pdb).
1059 frame-handling fixes for pdb).
1054 (InteractiveShell.__init__): Fix namespace handling problem in
1060 (InteractiveShell.__init__): Fix namespace handling problem in
1055 embedded instances. We were overwriting __main__ unconditionally,
1061 embedded instances. We were overwriting __main__ unconditionally,
1056 and this should only be done for 'full' (non-embedded) IPython;
1062 and this should only be done for 'full' (non-embedded) IPython;
1057 embedded instances must respect the caller's __main__. Thanks to
1063 embedded instances must respect the caller's __main__. Thanks to
1058 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1064 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1059
1065
1060 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1066 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1061
1067
1062 * setup.py: added download_url to setup(). This registers the
1068 * setup.py: added download_url to setup(). This registers the
1063 download address at PyPI, which is not only useful to humans
1069 download address at PyPI, which is not only useful to humans
1064 browsing the site, but is also picked up by setuptools (the Eggs
1070 browsing the site, but is also picked up by setuptools (the Eggs
1065 machinery). Thanks to Ville and R. Kern for the info/discussion
1071 machinery). Thanks to Ville and R. Kern for the info/discussion
1066 on this.
1072 on this.
1067
1073
1068 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1074 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1069
1075
1070 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1076 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1071 This brings a lot of nice functionality to the pdb mode, which now
1077 This brings a lot of nice functionality to the pdb mode, which now
1072 has tab-completion, syntax highlighting, and better stack handling
1078 has tab-completion, syntax highlighting, and better stack handling
1073 than before. Many thanks to Vivian De Smedt
1079 than before. Many thanks to Vivian De Smedt
1074 <vivian-AT-vdesmedt.com> for the original patches.
1080 <vivian-AT-vdesmedt.com> for the original patches.
1075
1081
1076 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1082 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1077
1083
1078 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1084 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1079 sequence to consistently accept the banner argument. The
1085 sequence to consistently accept the banner argument. The
1080 inconsistency was tripping SAGE, thanks to Gary Zablackis
1086 inconsistency was tripping SAGE, thanks to Gary Zablackis
1081 <gzabl-AT-yahoo.com> for the report.
1087 <gzabl-AT-yahoo.com> for the report.
1082
1088
1083 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1089 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1084
1090
1085 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1091 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1086 Fix bug where a naked 'alias' call in the ipythonrc file would
1092 Fix bug where a naked 'alias' call in the ipythonrc file would
1087 cause a crash. Bug reported by Jorgen Stenarson.
1093 cause a crash. Bug reported by Jorgen Stenarson.
1088
1094
1089 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1095 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1090
1096
1091 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1097 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1092 startup time.
1098 startup time.
1093
1099
1094 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1100 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1095 instances had introduced a bug with globals in normal code. Now
1101 instances had introduced a bug with globals in normal code. Now
1096 it's working in all cases.
1102 it's working in all cases.
1097
1103
1098 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1104 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1099 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1105 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1100 has been introduced to set the default case sensitivity of the
1106 has been introduced to set the default case sensitivity of the
1101 searches. Users can still select either mode at runtime on a
1107 searches. Users can still select either mode at runtime on a
1102 per-search basis.
1108 per-search basis.
1103
1109
1104 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1110 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1105
1111
1106 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1112 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1107 attributes in wildcard searches for subclasses. Modified version
1113 attributes in wildcard searches for subclasses. Modified version
1108 of a patch by Jorgen.
1114 of a patch by Jorgen.
1109
1115
1110 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1116 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1111
1117
1112 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1118 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1113 embedded instances. I added a user_global_ns attribute to the
1119 embedded instances. I added a user_global_ns attribute to the
1114 InteractiveShell class to handle this.
1120 InteractiveShell class to handle this.
1115
1121
1116 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1122 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1117
1123
1118 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1124 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1119 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1125 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1120 (reported under win32, but may happen also in other platforms).
1126 (reported under win32, but may happen also in other platforms).
1121 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1127 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1122
1128
1123 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1129 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1124
1130
1125 * IPython/Magic.py (magic_psearch): new support for wildcard
1131 * IPython/Magic.py (magic_psearch): new support for wildcard
1126 patterns. Now, typing ?a*b will list all names which begin with a
1132 patterns. Now, typing ?a*b will list all names which begin with a
1127 and end in b, for example. The %psearch magic has full
1133 and end in b, for example. The %psearch magic has full
1128 docstrings. Many thanks to JΓΆrgen Stenarson
1134 docstrings. Many thanks to JΓΆrgen Stenarson
1129 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1135 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1130 implementing this functionality.
1136 implementing this functionality.
1131
1137
1132 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1138 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1133
1139
1134 * Manual: fixed long-standing annoyance of double-dashes (as in
1140 * Manual: fixed long-standing annoyance of double-dashes (as in
1135 --prefix=~, for example) being stripped in the HTML version. This
1141 --prefix=~, for example) being stripped in the HTML version. This
1136 is a latex2html bug, but a workaround was provided. Many thanks
1142 is a latex2html bug, but a workaround was provided. Many thanks
1137 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1143 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1138 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1144 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1139 rolling. This seemingly small issue had tripped a number of users
1145 rolling. This seemingly small issue had tripped a number of users
1140 when first installing, so I'm glad to see it gone.
1146 when first installing, so I'm glad to see it gone.
1141
1147
1142 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1148 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1143
1149
1144 * IPython/Extensions/numeric_formats.py: fix missing import,
1150 * IPython/Extensions/numeric_formats.py: fix missing import,
1145 reported by Stephen Walton.
1151 reported by Stephen Walton.
1146
1152
1147 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1153 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1148
1154
1149 * IPython/demo.py: finish demo module, fully documented now.
1155 * IPython/demo.py: finish demo module, fully documented now.
1150
1156
1151 * IPython/genutils.py (file_read): simple little utility to read a
1157 * IPython/genutils.py (file_read): simple little utility to read a
1152 file and ensure it's closed afterwards.
1158 file and ensure it's closed afterwards.
1153
1159
1154 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1160 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1155
1161
1156 * IPython/demo.py (Demo.__init__): added support for individually
1162 * IPython/demo.py (Demo.__init__): added support for individually
1157 tagging blocks for automatic execution.
1163 tagging blocks for automatic execution.
1158
1164
1159 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1165 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1160 syntax-highlighted python sources, requested by John.
1166 syntax-highlighted python sources, requested by John.
1161
1167
1162 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1168 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1163
1169
1164 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1170 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1165 finishing.
1171 finishing.
1166
1172
1167 * IPython/genutils.py (shlex_split): moved from Magic to here,
1173 * IPython/genutils.py (shlex_split): moved from Magic to here,
1168 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1174 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1169
1175
1170 * IPython/demo.py (Demo.__init__): added support for silent
1176 * IPython/demo.py (Demo.__init__): added support for silent
1171 blocks, improved marks as regexps, docstrings written.
1177 blocks, improved marks as regexps, docstrings written.
1172 (Demo.__init__): better docstring, added support for sys.argv.
1178 (Demo.__init__): better docstring, added support for sys.argv.
1173
1179
1174 * IPython/genutils.py (marquee): little utility used by the demo
1180 * IPython/genutils.py (marquee): little utility used by the demo
1175 code, handy in general.
1181 code, handy in general.
1176
1182
1177 * IPython/demo.py (Demo.__init__): new class for interactive
1183 * IPython/demo.py (Demo.__init__): new class for interactive
1178 demos. Not documented yet, I just wrote it in a hurry for
1184 demos. Not documented yet, I just wrote it in a hurry for
1179 scipy'05. Will docstring later.
1185 scipy'05. Will docstring later.
1180
1186
1181 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1187 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1182
1188
1183 * IPython/Shell.py (sigint_handler): Drastic simplification which
1189 * IPython/Shell.py (sigint_handler): Drastic simplification which
1184 also seems to make Ctrl-C work correctly across threads! This is
1190 also seems to make Ctrl-C work correctly across threads! This is
1185 so simple, that I can't beleive I'd missed it before. Needs more
1191 so simple, that I can't beleive I'd missed it before. Needs more
1186 testing, though.
1192 testing, though.
1187 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1193 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1188 like this before...
1194 like this before...
1189
1195
1190 * IPython/genutils.py (get_home_dir): add protection against
1196 * IPython/genutils.py (get_home_dir): add protection against
1191 non-dirs in win32 registry.
1197 non-dirs in win32 registry.
1192
1198
1193 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1199 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1194 bug where dict was mutated while iterating (pysh crash).
1200 bug where dict was mutated while iterating (pysh crash).
1195
1201
1196 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1202 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1197
1203
1198 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1204 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1199 spurious newlines added by this routine. After a report by
1205 spurious newlines added by this routine. After a report by
1200 F. Mantegazza.
1206 F. Mantegazza.
1201
1207
1202 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1208 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1203
1209
1204 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1210 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1205 calls. These were a leftover from the GTK 1.x days, and can cause
1211 calls. These were a leftover from the GTK 1.x days, and can cause
1206 problems in certain cases (after a report by John Hunter).
1212 problems in certain cases (after a report by John Hunter).
1207
1213
1208 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1214 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1209 os.getcwd() fails at init time. Thanks to patch from David Remahl
1215 os.getcwd() fails at init time. Thanks to patch from David Remahl
1210 <chmod007-AT-mac.com>.
1216 <chmod007-AT-mac.com>.
1211 (InteractiveShell.__init__): prevent certain special magics from
1217 (InteractiveShell.__init__): prevent certain special magics from
1212 being shadowed by aliases. Closes
1218 being shadowed by aliases. Closes
1213 http://www.scipy.net/roundup/ipython/issue41.
1219 http://www.scipy.net/roundup/ipython/issue41.
1214
1220
1215 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1221 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1216
1222
1217 * IPython/iplib.py (InteractiveShell.complete): Added new
1223 * IPython/iplib.py (InteractiveShell.complete): Added new
1218 top-level completion method to expose the completion mechanism
1224 top-level completion method to expose the completion mechanism
1219 beyond readline-based environments.
1225 beyond readline-based environments.
1220
1226
1221 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1227 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1222
1228
1223 * tools/ipsvnc (svnversion): fix svnversion capture.
1229 * tools/ipsvnc (svnversion): fix svnversion capture.
1224
1230
1225 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1231 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1226 attribute to self, which was missing. Before, it was set by a
1232 attribute to self, which was missing. Before, it was set by a
1227 routine which in certain cases wasn't being called, so the
1233 routine which in certain cases wasn't being called, so the
1228 instance could end up missing the attribute. This caused a crash.
1234 instance could end up missing the attribute. This caused a crash.
1229 Closes http://www.scipy.net/roundup/ipython/issue40.
1235 Closes http://www.scipy.net/roundup/ipython/issue40.
1230
1236
1231 2005-08-16 Fernando Perez <fperez@colorado.edu>
1237 2005-08-16 Fernando Perez <fperez@colorado.edu>
1232
1238
1233 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1239 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1234 contains non-string attribute. Closes
1240 contains non-string attribute. Closes
1235 http://www.scipy.net/roundup/ipython/issue38.
1241 http://www.scipy.net/roundup/ipython/issue38.
1236
1242
1237 2005-08-14 Fernando Perez <fperez@colorado.edu>
1243 2005-08-14 Fernando Perez <fperez@colorado.edu>
1238
1244
1239 * tools/ipsvnc: Minor improvements, to add changeset info.
1245 * tools/ipsvnc: Minor improvements, to add changeset info.
1240
1246
1241 2005-08-12 Fernando Perez <fperez@colorado.edu>
1247 2005-08-12 Fernando Perez <fperez@colorado.edu>
1242
1248
1243 * IPython/iplib.py (runsource): remove self.code_to_run_src
1249 * IPython/iplib.py (runsource): remove self.code_to_run_src
1244 attribute. I realized this is nothing more than
1250 attribute. I realized this is nothing more than
1245 '\n'.join(self.buffer), and having the same data in two different
1251 '\n'.join(self.buffer), and having the same data in two different
1246 places is just asking for synchronization bugs. This may impact
1252 places is just asking for synchronization bugs. This may impact
1247 people who have custom exception handlers, so I need to warn
1253 people who have custom exception handlers, so I need to warn
1248 ipython-dev about it (F. Mantegazza may use them).
1254 ipython-dev about it (F. Mantegazza may use them).
1249
1255
1250 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1256 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1251
1257
1252 * IPython/genutils.py: fix 2.2 compatibility (generators)
1258 * IPython/genutils.py: fix 2.2 compatibility (generators)
1253
1259
1254 2005-07-18 Fernando Perez <fperez@colorado.edu>
1260 2005-07-18 Fernando Perez <fperez@colorado.edu>
1255
1261
1256 * IPython/genutils.py (get_home_dir): fix to help users with
1262 * IPython/genutils.py (get_home_dir): fix to help users with
1257 invalid $HOME under win32.
1263 invalid $HOME under win32.
1258
1264
1259 2005-07-17 Fernando Perez <fperez@colorado.edu>
1265 2005-07-17 Fernando Perez <fperez@colorado.edu>
1260
1266
1261 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1267 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1262 some old hacks and clean up a bit other routines; code should be
1268 some old hacks and clean up a bit other routines; code should be
1263 simpler and a bit faster.
1269 simpler and a bit faster.
1264
1270
1265 * IPython/iplib.py (interact): removed some last-resort attempts
1271 * IPython/iplib.py (interact): removed some last-resort attempts
1266 to survive broken stdout/stderr. That code was only making it
1272 to survive broken stdout/stderr. That code was only making it
1267 harder to abstract out the i/o (necessary for gui integration),
1273 harder to abstract out the i/o (necessary for gui integration),
1268 and the crashes it could prevent were extremely rare in practice
1274 and the crashes it could prevent were extremely rare in practice
1269 (besides being fully user-induced in a pretty violent manner).
1275 (besides being fully user-induced in a pretty violent manner).
1270
1276
1271 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1277 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1272 Nothing major yet, but the code is simpler to read; this should
1278 Nothing major yet, but the code is simpler to read; this should
1273 make it easier to do more serious modifications in the future.
1279 make it easier to do more serious modifications in the future.
1274
1280
1275 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1281 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1276 which broke in .15 (thanks to a report by Ville).
1282 which broke in .15 (thanks to a report by Ville).
1277
1283
1278 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1284 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1279 be quite correct, I know next to nothing about unicode). This
1285 be quite correct, I know next to nothing about unicode). This
1280 will allow unicode strings to be used in prompts, amongst other
1286 will allow unicode strings to be used in prompts, amongst other
1281 cases. It also will prevent ipython from crashing when unicode
1287 cases. It also will prevent ipython from crashing when unicode
1282 shows up unexpectedly in many places. If ascii encoding fails, we
1288 shows up unexpectedly in many places. If ascii encoding fails, we
1283 assume utf_8. Currently the encoding is not a user-visible
1289 assume utf_8. Currently the encoding is not a user-visible
1284 setting, though it could be made so if there is demand for it.
1290 setting, though it could be made so if there is demand for it.
1285
1291
1286 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1292 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1287
1293
1288 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1294 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1289
1295
1290 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1296 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1291
1297
1292 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1298 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1293 code can work transparently for 2.2/2.3.
1299 code can work transparently for 2.2/2.3.
1294
1300
1295 2005-07-16 Fernando Perez <fperez@colorado.edu>
1301 2005-07-16 Fernando Perez <fperez@colorado.edu>
1296
1302
1297 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1303 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1298 out of the color scheme table used for coloring exception
1304 out of the color scheme table used for coloring exception
1299 tracebacks. This allows user code to add new schemes at runtime.
1305 tracebacks. This allows user code to add new schemes at runtime.
1300 This is a minimally modified version of the patch at
1306 This is a minimally modified version of the patch at
1301 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1307 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1302 for the contribution.
1308 for the contribution.
1303
1309
1304 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1310 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1305 slightly modified version of the patch in
1311 slightly modified version of the patch in
1306 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1312 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1307 to remove the previous try/except solution (which was costlier).
1313 to remove the previous try/except solution (which was costlier).
1308 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1314 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1309
1315
1310 2005-06-08 Fernando Perez <fperez@colorado.edu>
1316 2005-06-08 Fernando Perez <fperez@colorado.edu>
1311
1317
1312 * IPython/iplib.py (write/write_err): Add methods to abstract all
1318 * IPython/iplib.py (write/write_err): Add methods to abstract all
1313 I/O a bit more.
1319 I/O a bit more.
1314
1320
1315 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1321 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1316 warning, reported by Aric Hagberg, fix by JD Hunter.
1322 warning, reported by Aric Hagberg, fix by JD Hunter.
1317
1323
1318 2005-06-02 *** Released version 0.6.15
1324 2005-06-02 *** Released version 0.6.15
1319
1325
1320 2005-06-01 Fernando Perez <fperez@colorado.edu>
1326 2005-06-01 Fernando Perez <fperez@colorado.edu>
1321
1327
1322 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1328 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1323 tab-completion of filenames within open-quoted strings. Note that
1329 tab-completion of filenames within open-quoted strings. Note that
1324 this requires that in ~/.ipython/ipythonrc, users change the
1330 this requires that in ~/.ipython/ipythonrc, users change the
1325 readline delimiters configuration to read:
1331 readline delimiters configuration to read:
1326
1332
1327 readline_remove_delims -/~
1333 readline_remove_delims -/~
1328
1334
1329
1335
1330 2005-05-31 *** Released version 0.6.14
1336 2005-05-31 *** Released version 0.6.14
1331
1337
1332 2005-05-29 Fernando Perez <fperez@colorado.edu>
1338 2005-05-29 Fernando Perez <fperez@colorado.edu>
1333
1339
1334 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1340 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1335 with files not on the filesystem. Reported by Eliyahu Sandler
1341 with files not on the filesystem. Reported by Eliyahu Sandler
1336 <eli@gondolin.net>
1342 <eli@gondolin.net>
1337
1343
1338 2005-05-22 Fernando Perez <fperez@colorado.edu>
1344 2005-05-22 Fernando Perez <fperez@colorado.edu>
1339
1345
1340 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1346 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1341 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1347 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1342
1348
1343 2005-05-19 Fernando Perez <fperez@colorado.edu>
1349 2005-05-19 Fernando Perez <fperez@colorado.edu>
1344
1350
1345 * IPython/iplib.py (safe_execfile): close a file which could be
1351 * IPython/iplib.py (safe_execfile): close a file which could be
1346 left open (causing problems in win32, which locks open files).
1352 left open (causing problems in win32, which locks open files).
1347 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1353 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1348
1354
1349 2005-05-18 Fernando Perez <fperez@colorado.edu>
1355 2005-05-18 Fernando Perez <fperez@colorado.edu>
1350
1356
1351 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1357 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1352 keyword arguments correctly to safe_execfile().
1358 keyword arguments correctly to safe_execfile().
1353
1359
1354 2005-05-13 Fernando Perez <fperez@colorado.edu>
1360 2005-05-13 Fernando Perez <fperez@colorado.edu>
1355
1361
1356 * ipython.1: Added info about Qt to manpage, and threads warning
1362 * ipython.1: Added info about Qt to manpage, and threads warning
1357 to usage page (invoked with --help).
1363 to usage page (invoked with --help).
1358
1364
1359 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1365 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1360 new matcher (it goes at the end of the priority list) to do
1366 new matcher (it goes at the end of the priority list) to do
1361 tab-completion on named function arguments. Submitted by George
1367 tab-completion on named function arguments. Submitted by George
1362 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1368 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1363 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1369 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1364 for more details.
1370 for more details.
1365
1371
1366 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1372 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1367 SystemExit exceptions in the script being run. Thanks to a report
1373 SystemExit exceptions in the script being run. Thanks to a report
1368 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1374 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1369 producing very annoying behavior when running unit tests.
1375 producing very annoying behavior when running unit tests.
1370
1376
1371 2005-05-12 Fernando Perez <fperez@colorado.edu>
1377 2005-05-12 Fernando Perez <fperez@colorado.edu>
1372
1378
1373 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1379 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1374 which I'd broken (again) due to a changed regexp. In the process,
1380 which I'd broken (again) due to a changed regexp. In the process,
1375 added ';' as an escape to auto-quote the whole line without
1381 added ';' as an escape to auto-quote the whole line without
1376 splitting its arguments. Thanks to a report by Jerry McRae
1382 splitting its arguments. Thanks to a report by Jerry McRae
1377 <qrs0xyc02-AT-sneakemail.com>.
1383 <qrs0xyc02-AT-sneakemail.com>.
1378
1384
1379 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1385 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1380 possible crashes caused by a TokenError. Reported by Ed Schofield
1386 possible crashes caused by a TokenError. Reported by Ed Schofield
1381 <schofield-AT-ftw.at>.
1387 <schofield-AT-ftw.at>.
1382
1388
1383 2005-05-06 Fernando Perez <fperez@colorado.edu>
1389 2005-05-06 Fernando Perez <fperez@colorado.edu>
1384
1390
1385 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1391 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1386
1392
1387 2005-04-29 Fernando Perez <fperez@colorado.edu>
1393 2005-04-29 Fernando Perez <fperez@colorado.edu>
1388
1394
1389 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1395 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1390 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1396 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1391 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1397 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1392 which provides support for Qt interactive usage (similar to the
1398 which provides support for Qt interactive usage (similar to the
1393 existing one for WX and GTK). This had been often requested.
1399 existing one for WX and GTK). This had been often requested.
1394
1400
1395 2005-04-14 *** Released version 0.6.13
1401 2005-04-14 *** Released version 0.6.13
1396
1402
1397 2005-04-08 Fernando Perez <fperez@colorado.edu>
1403 2005-04-08 Fernando Perez <fperez@colorado.edu>
1398
1404
1399 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1405 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1400 from _ofind, which gets called on almost every input line. Now,
1406 from _ofind, which gets called on almost every input line. Now,
1401 we only try to get docstrings if they are actually going to be
1407 we only try to get docstrings if they are actually going to be
1402 used (the overhead of fetching unnecessary docstrings can be
1408 used (the overhead of fetching unnecessary docstrings can be
1403 noticeable for certain objects, such as Pyro proxies).
1409 noticeable for certain objects, such as Pyro proxies).
1404
1410
1405 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1411 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1406 for completers. For some reason I had been passing them the state
1412 for completers. For some reason I had been passing them the state
1407 variable, which completers never actually need, and was in
1413 variable, which completers never actually need, and was in
1408 conflict with the rlcompleter API. Custom completers ONLY need to
1414 conflict with the rlcompleter API. Custom completers ONLY need to
1409 take the text parameter.
1415 take the text parameter.
1410
1416
1411 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1417 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1412 work correctly in pysh. I've also moved all the logic which used
1418 work correctly in pysh. I've also moved all the logic which used
1413 to be in pysh.py here, which will prevent problems with future
1419 to be in pysh.py here, which will prevent problems with future
1414 upgrades. However, this time I must warn users to update their
1420 upgrades. However, this time I must warn users to update their
1415 pysh profile to include the line
1421 pysh profile to include the line
1416
1422
1417 import_all IPython.Extensions.InterpreterExec
1423 import_all IPython.Extensions.InterpreterExec
1418
1424
1419 because otherwise things won't work for them. They MUST also
1425 because otherwise things won't work for them. They MUST also
1420 delete pysh.py and the line
1426 delete pysh.py and the line
1421
1427
1422 execfile pysh.py
1428 execfile pysh.py
1423
1429
1424 from their ipythonrc-pysh.
1430 from their ipythonrc-pysh.
1425
1431
1426 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1432 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1427 robust in the face of objects whose dir() returns non-strings
1433 robust in the face of objects whose dir() returns non-strings
1428 (which it shouldn't, but some broken libs like ITK do). Thanks to
1434 (which it shouldn't, but some broken libs like ITK do). Thanks to
1429 a patch by John Hunter (implemented differently, though). Also
1435 a patch by John Hunter (implemented differently, though). Also
1430 minor improvements by using .extend instead of + on lists.
1436 minor improvements by using .extend instead of + on lists.
1431
1437
1432 * pysh.py:
1438 * pysh.py:
1433
1439
1434 2005-04-06 Fernando Perez <fperez@colorado.edu>
1440 2005-04-06 Fernando Perez <fperez@colorado.edu>
1435
1441
1436 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1442 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1437 by default, so that all users benefit from it. Those who don't
1443 by default, so that all users benefit from it. Those who don't
1438 want it can still turn it off.
1444 want it can still turn it off.
1439
1445
1440 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1446 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1441 config file, I'd forgotten about this, so users were getting it
1447 config file, I'd forgotten about this, so users were getting it
1442 off by default.
1448 off by default.
1443
1449
1444 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1450 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1445 consistency. Now magics can be called in multiline statements,
1451 consistency. Now magics can be called in multiline statements,
1446 and python variables can be expanded in magic calls via $var.
1452 and python variables can be expanded in magic calls via $var.
1447 This makes the magic system behave just like aliases or !system
1453 This makes the magic system behave just like aliases or !system
1448 calls.
1454 calls.
1449
1455
1450 2005-03-28 Fernando Perez <fperez@colorado.edu>
1456 2005-03-28 Fernando Perez <fperez@colorado.edu>
1451
1457
1452 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1458 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1453 expensive string additions for building command. Add support for
1459 expensive string additions for building command. Add support for
1454 trailing ';' when autocall is used.
1460 trailing ';' when autocall is used.
1455
1461
1456 2005-03-26 Fernando Perez <fperez@colorado.edu>
1462 2005-03-26 Fernando Perez <fperez@colorado.edu>
1457
1463
1458 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1464 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1459 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1465 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1460 ipython.el robust against prompts with any number of spaces
1466 ipython.el robust against prompts with any number of spaces
1461 (including 0) after the ':' character.
1467 (including 0) after the ':' character.
1462
1468
1463 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1469 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1464 continuation prompt, which misled users to think the line was
1470 continuation prompt, which misled users to think the line was
1465 already indented. Closes debian Bug#300847, reported to me by
1471 already indented. Closes debian Bug#300847, reported to me by
1466 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1472 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1467
1473
1468 2005-03-23 Fernando Perez <fperez@colorado.edu>
1474 2005-03-23 Fernando Perez <fperez@colorado.edu>
1469
1475
1470 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1476 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1471 properly aligned if they have embedded newlines.
1477 properly aligned if they have embedded newlines.
1472
1478
1473 * IPython/iplib.py (runlines): Add a public method to expose
1479 * IPython/iplib.py (runlines): Add a public method to expose
1474 IPython's code execution machinery, so that users can run strings
1480 IPython's code execution machinery, so that users can run strings
1475 as if they had been typed at the prompt interactively.
1481 as if they had been typed at the prompt interactively.
1476 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1482 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1477 methods which can call the system shell, but with python variable
1483 methods which can call the system shell, but with python variable
1478 expansion. The three such methods are: __IPYTHON__.system,
1484 expansion. The three such methods are: __IPYTHON__.system,
1479 .getoutput and .getoutputerror. These need to be documented in a
1485 .getoutput and .getoutputerror. These need to be documented in a
1480 'public API' section (to be written) of the manual.
1486 'public API' section (to be written) of the manual.
1481
1487
1482 2005-03-20 Fernando Perez <fperez@colorado.edu>
1488 2005-03-20 Fernando Perez <fperez@colorado.edu>
1483
1489
1484 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1490 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1485 for custom exception handling. This is quite powerful, and it
1491 for custom exception handling. This is quite powerful, and it
1486 allows for user-installable exception handlers which can trap
1492 allows for user-installable exception handlers which can trap
1487 custom exceptions at runtime and treat them separately from
1493 custom exceptions at runtime and treat them separately from
1488 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1494 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1489 Mantegazza <mantegazza-AT-ill.fr>.
1495 Mantegazza <mantegazza-AT-ill.fr>.
1490 (InteractiveShell.set_custom_completer): public API function to
1496 (InteractiveShell.set_custom_completer): public API function to
1491 add new completers at runtime.
1497 add new completers at runtime.
1492
1498
1493 2005-03-19 Fernando Perez <fperez@colorado.edu>
1499 2005-03-19 Fernando Perez <fperez@colorado.edu>
1494
1500
1495 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1501 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1496 allow objects which provide their docstrings via non-standard
1502 allow objects which provide their docstrings via non-standard
1497 mechanisms (like Pyro proxies) to still be inspected by ipython's
1503 mechanisms (like Pyro proxies) to still be inspected by ipython's
1498 ? system.
1504 ? system.
1499
1505
1500 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1506 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1501 automatic capture system. I tried quite hard to make it work
1507 automatic capture system. I tried quite hard to make it work
1502 reliably, and simply failed. I tried many combinations with the
1508 reliably, and simply failed. I tried many combinations with the
1503 subprocess module, but eventually nothing worked in all needed
1509 subprocess module, but eventually nothing worked in all needed
1504 cases (not blocking stdin for the child, duplicating stdout
1510 cases (not blocking stdin for the child, duplicating stdout
1505 without blocking, etc). The new %sc/%sx still do capture to these
1511 without blocking, etc). The new %sc/%sx still do capture to these
1506 magical list/string objects which make shell use much more
1512 magical list/string objects which make shell use much more
1507 conveninent, so not all is lost.
1513 conveninent, so not all is lost.
1508
1514
1509 XXX - FIX MANUAL for the change above!
1515 XXX - FIX MANUAL for the change above!
1510
1516
1511 (runsource): I copied code.py's runsource() into ipython to modify
1517 (runsource): I copied code.py's runsource() into ipython to modify
1512 it a bit. Now the code object and source to be executed are
1518 it a bit. Now the code object and source to be executed are
1513 stored in ipython. This makes this info accessible to third-party
1519 stored in ipython. This makes this info accessible to third-party
1514 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1520 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1515 Mantegazza <mantegazza-AT-ill.fr>.
1521 Mantegazza <mantegazza-AT-ill.fr>.
1516
1522
1517 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1523 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1518 history-search via readline (like C-p/C-n). I'd wanted this for a
1524 history-search via readline (like C-p/C-n). I'd wanted this for a
1519 long time, but only recently found out how to do it. For users
1525 long time, but only recently found out how to do it. For users
1520 who already have their ipythonrc files made and want this, just
1526 who already have their ipythonrc files made and want this, just
1521 add:
1527 add:
1522
1528
1523 readline_parse_and_bind "\e[A": history-search-backward
1529 readline_parse_and_bind "\e[A": history-search-backward
1524 readline_parse_and_bind "\e[B": history-search-forward
1530 readline_parse_and_bind "\e[B": history-search-forward
1525
1531
1526 2005-03-18 Fernando Perez <fperez@colorado.edu>
1532 2005-03-18 Fernando Perez <fperez@colorado.edu>
1527
1533
1528 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1534 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1529 LSString and SList classes which allow transparent conversions
1535 LSString and SList classes which allow transparent conversions
1530 between list mode and whitespace-separated string.
1536 between list mode and whitespace-separated string.
1531 (magic_r): Fix recursion problem in %r.
1537 (magic_r): Fix recursion problem in %r.
1532
1538
1533 * IPython/genutils.py (LSString): New class to be used for
1539 * IPython/genutils.py (LSString): New class to be used for
1534 automatic storage of the results of all alias/system calls in _o
1540 automatic storage of the results of all alias/system calls in _o
1535 and _e (stdout/err). These provide a .l/.list attribute which
1541 and _e (stdout/err). These provide a .l/.list attribute which
1536 does automatic splitting on newlines. This means that for most
1542 does automatic splitting on newlines. This means that for most
1537 uses, you'll never need to do capturing of output with %sc/%sx
1543 uses, you'll never need to do capturing of output with %sc/%sx
1538 anymore, since ipython keeps this always done for you. Note that
1544 anymore, since ipython keeps this always done for you. Note that
1539 only the LAST results are stored, the _o/e variables are
1545 only the LAST results are stored, the _o/e variables are
1540 overwritten on each call. If you need to save their contents
1546 overwritten on each call. If you need to save their contents
1541 further, simply bind them to any other name.
1547 further, simply bind them to any other name.
1542
1548
1543 2005-03-17 Fernando Perez <fperez@colorado.edu>
1549 2005-03-17 Fernando Perez <fperez@colorado.edu>
1544
1550
1545 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1551 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1546 prompt namespace handling.
1552 prompt namespace handling.
1547
1553
1548 2005-03-16 Fernando Perez <fperez@colorado.edu>
1554 2005-03-16 Fernando Perez <fperez@colorado.edu>
1549
1555
1550 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1556 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1551 classic prompts to be '>>> ' (final space was missing, and it
1557 classic prompts to be '>>> ' (final space was missing, and it
1552 trips the emacs python mode).
1558 trips the emacs python mode).
1553 (BasePrompt.__str__): Added safe support for dynamic prompt
1559 (BasePrompt.__str__): Added safe support for dynamic prompt
1554 strings. Now you can set your prompt string to be '$x', and the
1560 strings. Now you can set your prompt string to be '$x', and the
1555 value of x will be printed from your interactive namespace. The
1561 value of x will be printed from your interactive namespace. The
1556 interpolation syntax includes the full Itpl support, so
1562 interpolation syntax includes the full Itpl support, so
1557 ${foo()+x+bar()} is a valid prompt string now, and the function
1563 ${foo()+x+bar()} is a valid prompt string now, and the function
1558 calls will be made at runtime.
1564 calls will be made at runtime.
1559
1565
1560 2005-03-15 Fernando Perez <fperez@colorado.edu>
1566 2005-03-15 Fernando Perez <fperez@colorado.edu>
1561
1567
1562 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1568 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1563 avoid name clashes in pylab. %hist still works, it just forwards
1569 avoid name clashes in pylab. %hist still works, it just forwards
1564 the call to %history.
1570 the call to %history.
1565
1571
1566 2005-03-02 *** Released version 0.6.12
1572 2005-03-02 *** Released version 0.6.12
1567
1573
1568 2005-03-02 Fernando Perez <fperez@colorado.edu>
1574 2005-03-02 Fernando Perez <fperez@colorado.edu>
1569
1575
1570 * IPython/iplib.py (handle_magic): log magic calls properly as
1576 * IPython/iplib.py (handle_magic): log magic calls properly as
1571 ipmagic() function calls.
1577 ipmagic() function calls.
1572
1578
1573 * IPython/Magic.py (magic_time): Improved %time to support
1579 * IPython/Magic.py (magic_time): Improved %time to support
1574 statements and provide wall-clock as well as CPU time.
1580 statements and provide wall-clock as well as CPU time.
1575
1581
1576 2005-02-27 Fernando Perez <fperez@colorado.edu>
1582 2005-02-27 Fernando Perez <fperez@colorado.edu>
1577
1583
1578 * IPython/hooks.py: New hooks module, to expose user-modifiable
1584 * IPython/hooks.py: New hooks module, to expose user-modifiable
1579 IPython functionality in a clean manner. For now only the editor
1585 IPython functionality in a clean manner. For now only the editor
1580 hook is actually written, and other thigns which I intend to turn
1586 hook is actually written, and other thigns which I intend to turn
1581 into proper hooks aren't yet there. The display and prefilter
1587 into proper hooks aren't yet there. The display and prefilter
1582 stuff, for example, should be hooks. But at least now the
1588 stuff, for example, should be hooks. But at least now the
1583 framework is in place, and the rest can be moved here with more
1589 framework is in place, and the rest can be moved here with more
1584 time later. IPython had had a .hooks variable for a long time for
1590 time later. IPython had had a .hooks variable for a long time for
1585 this purpose, but I'd never actually used it for anything.
1591 this purpose, but I'd never actually used it for anything.
1586
1592
1587 2005-02-26 Fernando Perez <fperez@colorado.edu>
1593 2005-02-26 Fernando Perez <fperez@colorado.edu>
1588
1594
1589 * IPython/ipmaker.py (make_IPython): make the default ipython
1595 * IPython/ipmaker.py (make_IPython): make the default ipython
1590 directory be called _ipython under win32, to follow more the
1596 directory be called _ipython under win32, to follow more the
1591 naming peculiarities of that platform (where buggy software like
1597 naming peculiarities of that platform (where buggy software like
1592 Visual Sourcesafe breaks with .named directories). Reported by
1598 Visual Sourcesafe breaks with .named directories). Reported by
1593 Ville Vainio.
1599 Ville Vainio.
1594
1600
1595 2005-02-23 Fernando Perez <fperez@colorado.edu>
1601 2005-02-23 Fernando Perez <fperez@colorado.edu>
1596
1602
1597 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1603 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1598 auto_aliases for win32 which were causing problems. Users can
1604 auto_aliases for win32 which were causing problems. Users can
1599 define the ones they personally like.
1605 define the ones they personally like.
1600
1606
1601 2005-02-21 Fernando Perez <fperez@colorado.edu>
1607 2005-02-21 Fernando Perez <fperez@colorado.edu>
1602
1608
1603 * IPython/Magic.py (magic_time): new magic to time execution of
1609 * IPython/Magic.py (magic_time): new magic to time execution of
1604 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1610 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1605
1611
1606 2005-02-19 Fernando Perez <fperez@colorado.edu>
1612 2005-02-19 Fernando Perez <fperez@colorado.edu>
1607
1613
1608 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1614 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1609 into keys (for prompts, for example).
1615 into keys (for prompts, for example).
1610
1616
1611 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1617 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1612 prompts in case users want them. This introduces a small behavior
1618 prompts in case users want them. This introduces a small behavior
1613 change: ipython does not automatically add a space to all prompts
1619 change: ipython does not automatically add a space to all prompts
1614 anymore. To get the old prompts with a space, users should add it
1620 anymore. To get the old prompts with a space, users should add it
1615 manually to their ipythonrc file, so for example prompt_in1 should
1621 manually to their ipythonrc file, so for example prompt_in1 should
1616 now read 'In [\#]: ' instead of 'In [\#]:'.
1622 now read 'In [\#]: ' instead of 'In [\#]:'.
1617 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1623 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1618 file) to control left-padding of secondary prompts.
1624 file) to control left-padding of secondary prompts.
1619
1625
1620 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1626 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1621 the profiler can't be imported. Fix for Debian, which removed
1627 the profiler can't be imported. Fix for Debian, which removed
1622 profile.py because of License issues. I applied a slightly
1628 profile.py because of License issues. I applied a slightly
1623 modified version of the original Debian patch at
1629 modified version of the original Debian patch at
1624 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1630 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1625
1631
1626 2005-02-17 Fernando Perez <fperez@colorado.edu>
1632 2005-02-17 Fernando Perez <fperez@colorado.edu>
1627
1633
1628 * IPython/genutils.py (native_line_ends): Fix bug which would
1634 * IPython/genutils.py (native_line_ends): Fix bug which would
1629 cause improper line-ends under win32 b/c I was not opening files
1635 cause improper line-ends under win32 b/c I was not opening files
1630 in binary mode. Bug report and fix thanks to Ville.
1636 in binary mode. Bug report and fix thanks to Ville.
1631
1637
1632 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1638 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1633 trying to catch spurious foo[1] autocalls. My fix actually broke
1639 trying to catch spurious foo[1] autocalls. My fix actually broke
1634 ',/' autoquote/call with explicit escape (bad regexp).
1640 ',/' autoquote/call with explicit escape (bad regexp).
1635
1641
1636 2005-02-15 *** Released version 0.6.11
1642 2005-02-15 *** Released version 0.6.11
1637
1643
1638 2005-02-14 Fernando Perez <fperez@colorado.edu>
1644 2005-02-14 Fernando Perez <fperez@colorado.edu>
1639
1645
1640 * IPython/background_jobs.py: New background job management
1646 * IPython/background_jobs.py: New background job management
1641 subsystem. This is implemented via a new set of classes, and
1647 subsystem. This is implemented via a new set of classes, and
1642 IPython now provides a builtin 'jobs' object for background job
1648 IPython now provides a builtin 'jobs' object for background job
1643 execution. A convenience %bg magic serves as a lightweight
1649 execution. A convenience %bg magic serves as a lightweight
1644 frontend for starting the more common type of calls. This was
1650 frontend for starting the more common type of calls. This was
1645 inspired by discussions with B. Granger and the BackgroundCommand
1651 inspired by discussions with B. Granger and the BackgroundCommand
1646 class described in the book Python Scripting for Computational
1652 class described in the book Python Scripting for Computational
1647 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1653 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1648 (although ultimately no code from this text was used, as IPython's
1654 (although ultimately no code from this text was used, as IPython's
1649 system is a separate implementation).
1655 system is a separate implementation).
1650
1656
1651 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1657 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1652 to control the completion of single/double underscore names
1658 to control the completion of single/double underscore names
1653 separately. As documented in the example ipytonrc file, the
1659 separately. As documented in the example ipytonrc file, the
1654 readline_omit__names variable can now be set to 2, to omit even
1660 readline_omit__names variable can now be set to 2, to omit even
1655 single underscore names. Thanks to a patch by Brian Wong
1661 single underscore names. Thanks to a patch by Brian Wong
1656 <BrianWong-AT-AirgoNetworks.Com>.
1662 <BrianWong-AT-AirgoNetworks.Com>.
1657 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1663 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1658 be autocalled as foo([1]) if foo were callable. A problem for
1664 be autocalled as foo([1]) if foo were callable. A problem for
1659 things which are both callable and implement __getitem__.
1665 things which are both callable and implement __getitem__.
1660 (init_readline): Fix autoindentation for win32. Thanks to a patch
1666 (init_readline): Fix autoindentation for win32. Thanks to a patch
1661 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1667 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1662
1668
1663 2005-02-12 Fernando Perez <fperez@colorado.edu>
1669 2005-02-12 Fernando Perez <fperez@colorado.edu>
1664
1670
1665 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1671 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1666 which I had written long ago to sort out user error messages which
1672 which I had written long ago to sort out user error messages which
1667 may occur during startup. This seemed like a good idea initially,
1673 may occur during startup. This seemed like a good idea initially,
1668 but it has proven a disaster in retrospect. I don't want to
1674 but it has proven a disaster in retrospect. I don't want to
1669 change much code for now, so my fix is to set the internal 'debug'
1675 change much code for now, so my fix is to set the internal 'debug'
1670 flag to true everywhere, whose only job was precisely to control
1676 flag to true everywhere, whose only job was precisely to control
1671 this subsystem. This closes issue 28 (as well as avoiding all
1677 this subsystem. This closes issue 28 (as well as avoiding all
1672 sorts of strange hangups which occur from time to time).
1678 sorts of strange hangups which occur from time to time).
1673
1679
1674 2005-02-07 Fernando Perez <fperez@colorado.edu>
1680 2005-02-07 Fernando Perez <fperez@colorado.edu>
1675
1681
1676 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1682 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1677 previous call produced a syntax error.
1683 previous call produced a syntax error.
1678
1684
1679 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1685 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1680 classes without constructor.
1686 classes without constructor.
1681
1687
1682 2005-02-06 Fernando Perez <fperez@colorado.edu>
1688 2005-02-06 Fernando Perez <fperez@colorado.edu>
1683
1689
1684 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1690 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1685 completions with the results of each matcher, so we return results
1691 completions with the results of each matcher, so we return results
1686 to the user from all namespaces. This breaks with ipython
1692 to the user from all namespaces. This breaks with ipython
1687 tradition, but I think it's a nicer behavior. Now you get all
1693 tradition, but I think it's a nicer behavior. Now you get all
1688 possible completions listed, from all possible namespaces (python,
1694 possible completions listed, from all possible namespaces (python,
1689 filesystem, magics...) After a request by John Hunter
1695 filesystem, magics...) After a request by John Hunter
1690 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1696 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1691
1697
1692 2005-02-05 Fernando Perez <fperez@colorado.edu>
1698 2005-02-05 Fernando Perez <fperez@colorado.edu>
1693
1699
1694 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1700 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1695 the call had quote characters in it (the quotes were stripped).
1701 the call had quote characters in it (the quotes were stripped).
1696
1702
1697 2005-01-31 Fernando Perez <fperez@colorado.edu>
1703 2005-01-31 Fernando Perez <fperez@colorado.edu>
1698
1704
1699 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1705 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1700 Itpl.itpl() to make the code more robust against psyco
1706 Itpl.itpl() to make the code more robust against psyco
1701 optimizations.
1707 optimizations.
1702
1708
1703 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1709 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1704 of causing an exception. Quicker, cleaner.
1710 of causing an exception. Quicker, cleaner.
1705
1711
1706 2005-01-28 Fernando Perez <fperez@colorado.edu>
1712 2005-01-28 Fernando Perez <fperez@colorado.edu>
1707
1713
1708 * scripts/ipython_win_post_install.py (install): hardcode
1714 * scripts/ipython_win_post_install.py (install): hardcode
1709 sys.prefix+'python.exe' as the executable path. It turns out that
1715 sys.prefix+'python.exe' as the executable path. It turns out that
1710 during the post-installation run, sys.executable resolves to the
1716 during the post-installation run, sys.executable resolves to the
1711 name of the binary installer! I should report this as a distutils
1717 name of the binary installer! I should report this as a distutils
1712 bug, I think. I updated the .10 release with this tiny fix, to
1718 bug, I think. I updated the .10 release with this tiny fix, to
1713 avoid annoying the lists further.
1719 avoid annoying the lists further.
1714
1720
1715 2005-01-27 *** Released version 0.6.10
1721 2005-01-27 *** Released version 0.6.10
1716
1722
1717 2005-01-27 Fernando Perez <fperez@colorado.edu>
1723 2005-01-27 Fernando Perez <fperez@colorado.edu>
1718
1724
1719 * IPython/numutils.py (norm): Added 'inf' as optional name for
1725 * IPython/numutils.py (norm): Added 'inf' as optional name for
1720 L-infinity norm, included references to mathworld.com for vector
1726 L-infinity norm, included references to mathworld.com for vector
1721 norm definitions.
1727 norm definitions.
1722 (amin/amax): added amin/amax for array min/max. Similar to what
1728 (amin/amax): added amin/amax for array min/max. Similar to what
1723 pylab ships with after the recent reorganization of names.
1729 pylab ships with after the recent reorganization of names.
1724 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1730 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1725
1731
1726 * ipython.el: committed Alex's recent fixes and improvements.
1732 * ipython.el: committed Alex's recent fixes and improvements.
1727 Tested with python-mode from CVS, and it looks excellent. Since
1733 Tested with python-mode from CVS, and it looks excellent. Since
1728 python-mode hasn't released anything in a while, I'm temporarily
1734 python-mode hasn't released anything in a while, I'm temporarily
1729 putting a copy of today's CVS (v 4.70) of python-mode in:
1735 putting a copy of today's CVS (v 4.70) of python-mode in:
1730 http://ipython.scipy.org/tmp/python-mode.el
1736 http://ipython.scipy.org/tmp/python-mode.el
1731
1737
1732 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1738 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1733 sys.executable for the executable name, instead of assuming it's
1739 sys.executable for the executable name, instead of assuming it's
1734 called 'python.exe' (the post-installer would have produced broken
1740 called 'python.exe' (the post-installer would have produced broken
1735 setups on systems with a differently named python binary).
1741 setups on systems with a differently named python binary).
1736
1742
1737 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1743 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1738 references to os.linesep, to make the code more
1744 references to os.linesep, to make the code more
1739 platform-independent. This is also part of the win32 coloring
1745 platform-independent. This is also part of the win32 coloring
1740 fixes.
1746 fixes.
1741
1747
1742 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1748 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1743 lines, which actually cause coloring bugs because the length of
1749 lines, which actually cause coloring bugs because the length of
1744 the line is very difficult to correctly compute with embedded
1750 the line is very difficult to correctly compute with embedded
1745 escapes. This was the source of all the coloring problems under
1751 escapes. This was the source of all the coloring problems under
1746 Win32. I think that _finally_, Win32 users have a properly
1752 Win32. I think that _finally_, Win32 users have a properly
1747 working ipython in all respects. This would never have happened
1753 working ipython in all respects. This would never have happened
1748 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1754 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1749
1755
1750 2005-01-26 *** Released version 0.6.9
1756 2005-01-26 *** Released version 0.6.9
1751
1757
1752 2005-01-25 Fernando Perez <fperez@colorado.edu>
1758 2005-01-25 Fernando Perez <fperez@colorado.edu>
1753
1759
1754 * setup.py: finally, we have a true Windows installer, thanks to
1760 * setup.py: finally, we have a true Windows installer, thanks to
1755 the excellent work of Viktor Ransmayr
1761 the excellent work of Viktor Ransmayr
1756 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1762 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1757 Windows users. The setup routine is quite a bit cleaner thanks to
1763 Windows users. The setup routine is quite a bit cleaner thanks to
1758 this, and the post-install script uses the proper functions to
1764 this, and the post-install script uses the proper functions to
1759 allow a clean de-installation using the standard Windows Control
1765 allow a clean de-installation using the standard Windows Control
1760 Panel.
1766 Panel.
1761
1767
1762 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1768 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1763 environment variable under all OSes (including win32) if
1769 environment variable under all OSes (including win32) if
1764 available. This will give consistency to win32 users who have set
1770 available. This will give consistency to win32 users who have set
1765 this variable for any reason. If os.environ['HOME'] fails, the
1771 this variable for any reason. If os.environ['HOME'] fails, the
1766 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1772 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1767
1773
1768 2005-01-24 Fernando Perez <fperez@colorado.edu>
1774 2005-01-24 Fernando Perez <fperez@colorado.edu>
1769
1775
1770 * IPython/numutils.py (empty_like): add empty_like(), similar to
1776 * IPython/numutils.py (empty_like): add empty_like(), similar to
1771 zeros_like() but taking advantage of the new empty() Numeric routine.
1777 zeros_like() but taking advantage of the new empty() Numeric routine.
1772
1778
1773 2005-01-23 *** Released version 0.6.8
1779 2005-01-23 *** Released version 0.6.8
1774
1780
1775 2005-01-22 Fernando Perez <fperez@colorado.edu>
1781 2005-01-22 Fernando Perez <fperez@colorado.edu>
1776
1782
1777 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1783 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1778 automatic show() calls. After discussing things with JDH, it
1784 automatic show() calls. After discussing things with JDH, it
1779 turns out there are too many corner cases where this can go wrong.
1785 turns out there are too many corner cases where this can go wrong.
1780 It's best not to try to be 'too smart', and simply have ipython
1786 It's best not to try to be 'too smart', and simply have ipython
1781 reproduce as much as possible the default behavior of a normal
1787 reproduce as much as possible the default behavior of a normal
1782 python shell.
1788 python shell.
1783
1789
1784 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1790 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1785 line-splitting regexp and _prefilter() to avoid calling getattr()
1791 line-splitting regexp and _prefilter() to avoid calling getattr()
1786 on assignments. This closes
1792 on assignments. This closes
1787 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1793 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1788 readline uses getattr(), so a simple <TAB> keypress is still
1794 readline uses getattr(), so a simple <TAB> keypress is still
1789 enough to trigger getattr() calls on an object.
1795 enough to trigger getattr() calls on an object.
1790
1796
1791 2005-01-21 Fernando Perez <fperez@colorado.edu>
1797 2005-01-21 Fernando Perez <fperez@colorado.edu>
1792
1798
1793 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1799 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1794 docstring under pylab so it doesn't mask the original.
1800 docstring under pylab so it doesn't mask the original.
1795
1801
1796 2005-01-21 *** Released version 0.6.7
1802 2005-01-21 *** Released version 0.6.7
1797
1803
1798 2005-01-21 Fernando Perez <fperez@colorado.edu>
1804 2005-01-21 Fernando Perez <fperez@colorado.edu>
1799
1805
1800 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1806 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1801 signal handling for win32 users in multithreaded mode.
1807 signal handling for win32 users in multithreaded mode.
1802
1808
1803 2005-01-17 Fernando Perez <fperez@colorado.edu>
1809 2005-01-17 Fernando Perez <fperez@colorado.edu>
1804
1810
1805 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1811 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1806 instances with no __init__. After a crash report by Norbert Nemec
1812 instances with no __init__. After a crash report by Norbert Nemec
1807 <Norbert-AT-nemec-online.de>.
1813 <Norbert-AT-nemec-online.de>.
1808
1814
1809 2005-01-14 Fernando Perez <fperez@colorado.edu>
1815 2005-01-14 Fernando Perez <fperez@colorado.edu>
1810
1816
1811 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1817 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1812 names for verbose exceptions, when multiple dotted names and the
1818 names for verbose exceptions, when multiple dotted names and the
1813 'parent' object were present on the same line.
1819 'parent' object were present on the same line.
1814
1820
1815 2005-01-11 Fernando Perez <fperez@colorado.edu>
1821 2005-01-11 Fernando Perez <fperez@colorado.edu>
1816
1822
1817 * IPython/genutils.py (flag_calls): new utility to trap and flag
1823 * IPython/genutils.py (flag_calls): new utility to trap and flag
1818 calls in functions. I need it to clean up matplotlib support.
1824 calls in functions. I need it to clean up matplotlib support.
1819 Also removed some deprecated code in genutils.
1825 Also removed some deprecated code in genutils.
1820
1826
1821 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1827 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1822 that matplotlib scripts called with %run, which don't call show()
1828 that matplotlib scripts called with %run, which don't call show()
1823 themselves, still have their plotting windows open.
1829 themselves, still have their plotting windows open.
1824
1830
1825 2005-01-05 Fernando Perez <fperez@colorado.edu>
1831 2005-01-05 Fernando Perez <fperez@colorado.edu>
1826
1832
1827 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1833 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1828 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1834 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1829
1835
1830 2004-12-19 Fernando Perez <fperez@colorado.edu>
1836 2004-12-19 Fernando Perez <fperez@colorado.edu>
1831
1837
1832 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1838 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1833 parent_runcode, which was an eyesore. The same result can be
1839 parent_runcode, which was an eyesore. The same result can be
1834 obtained with Python's regular superclass mechanisms.
1840 obtained with Python's regular superclass mechanisms.
1835
1841
1836 2004-12-17 Fernando Perez <fperez@colorado.edu>
1842 2004-12-17 Fernando Perez <fperez@colorado.edu>
1837
1843
1838 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1844 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1839 reported by Prabhu.
1845 reported by Prabhu.
1840 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1846 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1841 sys.stderr) instead of explicitly calling sys.stderr. This helps
1847 sys.stderr) instead of explicitly calling sys.stderr. This helps
1842 maintain our I/O abstractions clean, for future GUI embeddings.
1848 maintain our I/O abstractions clean, for future GUI embeddings.
1843
1849
1844 * IPython/genutils.py (info): added new utility for sys.stderr
1850 * IPython/genutils.py (info): added new utility for sys.stderr
1845 unified info message handling (thin wrapper around warn()).
1851 unified info message handling (thin wrapper around warn()).
1846
1852
1847 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1853 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1848 composite (dotted) names on verbose exceptions.
1854 composite (dotted) names on verbose exceptions.
1849 (VerboseTB.nullrepr): harden against another kind of errors which
1855 (VerboseTB.nullrepr): harden against another kind of errors which
1850 Python's inspect module can trigger, and which were crashing
1856 Python's inspect module can trigger, and which were crashing
1851 IPython. Thanks to a report by Marco Lombardi
1857 IPython. Thanks to a report by Marco Lombardi
1852 <mlombard-AT-ma010192.hq.eso.org>.
1858 <mlombard-AT-ma010192.hq.eso.org>.
1853
1859
1854 2004-12-13 *** Released version 0.6.6
1860 2004-12-13 *** Released version 0.6.6
1855
1861
1856 2004-12-12 Fernando Perez <fperez@colorado.edu>
1862 2004-12-12 Fernando Perez <fperez@colorado.edu>
1857
1863
1858 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1864 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1859 generated by pygtk upon initialization if it was built without
1865 generated by pygtk upon initialization if it was built without
1860 threads (for matplotlib users). After a crash reported by
1866 threads (for matplotlib users). After a crash reported by
1861 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1867 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1862
1868
1863 * IPython/ipmaker.py (make_IPython): fix small bug in the
1869 * IPython/ipmaker.py (make_IPython): fix small bug in the
1864 import_some parameter for multiple imports.
1870 import_some parameter for multiple imports.
1865
1871
1866 * IPython/iplib.py (ipmagic): simplified the interface of
1872 * IPython/iplib.py (ipmagic): simplified the interface of
1867 ipmagic() to take a single string argument, just as it would be
1873 ipmagic() to take a single string argument, just as it would be
1868 typed at the IPython cmd line.
1874 typed at the IPython cmd line.
1869 (ipalias): Added new ipalias() with an interface identical to
1875 (ipalias): Added new ipalias() with an interface identical to
1870 ipmagic(). This completes exposing a pure python interface to the
1876 ipmagic(). This completes exposing a pure python interface to the
1871 alias and magic system, which can be used in loops or more complex
1877 alias and magic system, which can be used in loops or more complex
1872 code where IPython's automatic line mangling is not active.
1878 code where IPython's automatic line mangling is not active.
1873
1879
1874 * IPython/genutils.py (timing): changed interface of timing to
1880 * IPython/genutils.py (timing): changed interface of timing to
1875 simply run code once, which is the most common case. timings()
1881 simply run code once, which is the most common case. timings()
1876 remains unchanged, for the cases where you want multiple runs.
1882 remains unchanged, for the cases where you want multiple runs.
1877
1883
1878 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1884 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1879 bug where Python2.2 crashes with exec'ing code which does not end
1885 bug where Python2.2 crashes with exec'ing code which does not end
1880 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1886 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1881 before.
1887 before.
1882
1888
1883 2004-12-10 Fernando Perez <fperez@colorado.edu>
1889 2004-12-10 Fernando Perez <fperez@colorado.edu>
1884
1890
1885 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1891 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1886 -t to -T, to accomodate the new -t flag in %run (the %run and
1892 -t to -T, to accomodate the new -t flag in %run (the %run and
1887 %prun options are kind of intermixed, and it's not easy to change
1893 %prun options are kind of intermixed, and it's not easy to change
1888 this with the limitations of python's getopt).
1894 this with the limitations of python's getopt).
1889
1895
1890 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1896 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1891 the execution of scripts. It's not as fine-tuned as timeit.py,
1897 the execution of scripts. It's not as fine-tuned as timeit.py,
1892 but it works from inside ipython (and under 2.2, which lacks
1898 but it works from inside ipython (and under 2.2, which lacks
1893 timeit.py). Optionally a number of runs > 1 can be given for
1899 timeit.py). Optionally a number of runs > 1 can be given for
1894 timing very short-running code.
1900 timing very short-running code.
1895
1901
1896 * IPython/genutils.py (uniq_stable): new routine which returns a
1902 * IPython/genutils.py (uniq_stable): new routine which returns a
1897 list of unique elements in any iterable, but in stable order of
1903 list of unique elements in any iterable, but in stable order of
1898 appearance. I needed this for the ultraTB fixes, and it's a handy
1904 appearance. I needed this for the ultraTB fixes, and it's a handy
1899 utility.
1905 utility.
1900
1906
1901 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1907 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1902 dotted names in Verbose exceptions. This had been broken since
1908 dotted names in Verbose exceptions. This had been broken since
1903 the very start, now x.y will properly be printed in a Verbose
1909 the very start, now x.y will properly be printed in a Verbose
1904 traceback, instead of x being shown and y appearing always as an
1910 traceback, instead of x being shown and y appearing always as an
1905 'undefined global'. Getting this to work was a bit tricky,
1911 'undefined global'. Getting this to work was a bit tricky,
1906 because by default python tokenizers are stateless. Saved by
1912 because by default python tokenizers are stateless. Saved by
1907 python's ability to easily add a bit of state to an arbitrary
1913 python's ability to easily add a bit of state to an arbitrary
1908 function (without needing to build a full-blown callable object).
1914 function (without needing to build a full-blown callable object).
1909
1915
1910 Also big cleanup of this code, which had horrendous runtime
1916 Also big cleanup of this code, which had horrendous runtime
1911 lookups of zillions of attributes for colorization. Moved all
1917 lookups of zillions of attributes for colorization. Moved all
1912 this code into a few templates, which make it cleaner and quicker.
1918 this code into a few templates, which make it cleaner and quicker.
1913
1919
1914 Printout quality was also improved for Verbose exceptions: one
1920 Printout quality was also improved for Verbose exceptions: one
1915 variable per line, and memory addresses are printed (this can be
1921 variable per line, and memory addresses are printed (this can be
1916 quite handy in nasty debugging situations, which is what Verbose
1922 quite handy in nasty debugging situations, which is what Verbose
1917 is for).
1923 is for).
1918
1924
1919 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1925 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1920 the command line as scripts to be loaded by embedded instances.
1926 the command line as scripts to be loaded by embedded instances.
1921 Doing so has the potential for an infinite recursion if there are
1927 Doing so has the potential for an infinite recursion if there are
1922 exceptions thrown in the process. This fixes a strange crash
1928 exceptions thrown in the process. This fixes a strange crash
1923 reported by Philippe MULLER <muller-AT-irit.fr>.
1929 reported by Philippe MULLER <muller-AT-irit.fr>.
1924
1930
1925 2004-12-09 Fernando Perez <fperez@colorado.edu>
1931 2004-12-09 Fernando Perez <fperez@colorado.edu>
1926
1932
1927 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1933 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1928 to reflect new names in matplotlib, which now expose the
1934 to reflect new names in matplotlib, which now expose the
1929 matlab-compatible interface via a pylab module instead of the
1935 matlab-compatible interface via a pylab module instead of the
1930 'matlab' name. The new code is backwards compatible, so users of
1936 'matlab' name. The new code is backwards compatible, so users of
1931 all matplotlib versions are OK. Patch by J. Hunter.
1937 all matplotlib versions are OK. Patch by J. Hunter.
1932
1938
1933 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1939 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1934 of __init__ docstrings for instances (class docstrings are already
1940 of __init__ docstrings for instances (class docstrings are already
1935 automatically printed). Instances with customized docstrings
1941 automatically printed). Instances with customized docstrings
1936 (indep. of the class) are also recognized and all 3 separate
1942 (indep. of the class) are also recognized and all 3 separate
1937 docstrings are printed (instance, class, constructor). After some
1943 docstrings are printed (instance, class, constructor). After some
1938 comments/suggestions by J. Hunter.
1944 comments/suggestions by J. Hunter.
1939
1945
1940 2004-12-05 Fernando Perez <fperez@colorado.edu>
1946 2004-12-05 Fernando Perez <fperez@colorado.edu>
1941
1947
1942 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1948 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1943 warnings when tab-completion fails and triggers an exception.
1949 warnings when tab-completion fails and triggers an exception.
1944
1950
1945 2004-12-03 Fernando Perez <fperez@colorado.edu>
1951 2004-12-03 Fernando Perez <fperez@colorado.edu>
1946
1952
1947 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1953 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1948 be triggered when using 'run -p'. An incorrect option flag was
1954 be triggered when using 'run -p'. An incorrect option flag was
1949 being set ('d' instead of 'D').
1955 being set ('d' instead of 'D').
1950 (manpage): fix missing escaped \- sign.
1956 (manpage): fix missing escaped \- sign.
1951
1957
1952 2004-11-30 *** Released version 0.6.5
1958 2004-11-30 *** Released version 0.6.5
1953
1959
1954 2004-11-30 Fernando Perez <fperez@colorado.edu>
1960 2004-11-30 Fernando Perez <fperez@colorado.edu>
1955
1961
1956 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1962 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1957 setting with -d option.
1963 setting with -d option.
1958
1964
1959 * setup.py (docfiles): Fix problem where the doc glob I was using
1965 * setup.py (docfiles): Fix problem where the doc glob I was using
1960 was COMPLETELY BROKEN. It was giving the right files by pure
1966 was COMPLETELY BROKEN. It was giving the right files by pure
1961 accident, but failed once I tried to include ipython.el. Note:
1967 accident, but failed once I tried to include ipython.el. Note:
1962 glob() does NOT allow you to do exclusion on multiple endings!
1968 glob() does NOT allow you to do exclusion on multiple endings!
1963
1969
1964 2004-11-29 Fernando Perez <fperez@colorado.edu>
1970 2004-11-29 Fernando Perez <fperez@colorado.edu>
1965
1971
1966 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1972 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1967 the manpage as the source. Better formatting & consistency.
1973 the manpage as the source. Better formatting & consistency.
1968
1974
1969 * IPython/Magic.py (magic_run): Added new -d option, to run
1975 * IPython/Magic.py (magic_run): Added new -d option, to run
1970 scripts under the control of the python pdb debugger. Note that
1976 scripts under the control of the python pdb debugger. Note that
1971 this required changing the %prun option -d to -D, to avoid a clash
1977 this required changing the %prun option -d to -D, to avoid a clash
1972 (since %run must pass options to %prun, and getopt is too dumb to
1978 (since %run must pass options to %prun, and getopt is too dumb to
1973 handle options with string values with embedded spaces). Thanks
1979 handle options with string values with embedded spaces). Thanks
1974 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1980 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1975 (magic_who_ls): added type matching to %who and %whos, so that one
1981 (magic_who_ls): added type matching to %who and %whos, so that one
1976 can filter their output to only include variables of certain
1982 can filter their output to only include variables of certain
1977 types. Another suggestion by Matthew.
1983 types. Another suggestion by Matthew.
1978 (magic_whos): Added memory summaries in kb and Mb for arrays.
1984 (magic_whos): Added memory summaries in kb and Mb for arrays.
1979 (magic_who): Improve formatting (break lines every 9 vars).
1985 (magic_who): Improve formatting (break lines every 9 vars).
1980
1986
1981 2004-11-28 Fernando Perez <fperez@colorado.edu>
1987 2004-11-28 Fernando Perez <fperez@colorado.edu>
1982
1988
1983 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1989 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1984 cache when empty lines were present.
1990 cache when empty lines were present.
1985
1991
1986 2004-11-24 Fernando Perez <fperez@colorado.edu>
1992 2004-11-24 Fernando Perez <fperez@colorado.edu>
1987
1993
1988 * IPython/usage.py (__doc__): document the re-activated threading
1994 * IPython/usage.py (__doc__): document the re-activated threading
1989 options for WX and GTK.
1995 options for WX and GTK.
1990
1996
1991 2004-11-23 Fernando Perez <fperez@colorado.edu>
1997 2004-11-23 Fernando Perez <fperez@colorado.edu>
1992
1998
1993 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1999 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1994 the -wthread and -gthread options, along with a new -tk one to try
2000 the -wthread and -gthread options, along with a new -tk one to try
1995 and coordinate Tk threading with wx/gtk. The tk support is very
2001 and coordinate Tk threading with wx/gtk. The tk support is very
1996 platform dependent, since it seems to require Tcl and Tk to be
2002 platform dependent, since it seems to require Tcl and Tk to be
1997 built with threads (Fedora1/2 appears NOT to have it, but in
2003 built with threads (Fedora1/2 appears NOT to have it, but in
1998 Prabhu's Debian boxes it works OK). But even with some Tk
2004 Prabhu's Debian boxes it works OK). But even with some Tk
1999 limitations, this is a great improvement.
2005 limitations, this is a great improvement.
2000
2006
2001 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2007 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2002 info in user prompts. Patch by Prabhu.
2008 info in user prompts. Patch by Prabhu.
2003
2009
2004 2004-11-18 Fernando Perez <fperez@colorado.edu>
2010 2004-11-18 Fernando Perez <fperez@colorado.edu>
2005
2011
2006 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2012 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2007 EOFErrors and bail, to avoid infinite loops if a non-terminating
2013 EOFErrors and bail, to avoid infinite loops if a non-terminating
2008 file is fed into ipython. Patch submitted in issue 19 by user,
2014 file is fed into ipython. Patch submitted in issue 19 by user,
2009 many thanks.
2015 many thanks.
2010
2016
2011 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2017 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2012 autoquote/parens in continuation prompts, which can cause lots of
2018 autoquote/parens in continuation prompts, which can cause lots of
2013 problems. Closes roundup issue 20.
2019 problems. Closes roundup issue 20.
2014
2020
2015 2004-11-17 Fernando Perez <fperez@colorado.edu>
2021 2004-11-17 Fernando Perez <fperez@colorado.edu>
2016
2022
2017 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2023 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2018 reported as debian bug #280505. I'm not sure my local changelog
2024 reported as debian bug #280505. I'm not sure my local changelog
2019 entry has the proper debian format (Jack?).
2025 entry has the proper debian format (Jack?).
2020
2026
2021 2004-11-08 *** Released version 0.6.4
2027 2004-11-08 *** Released version 0.6.4
2022
2028
2023 2004-11-08 Fernando Perez <fperez@colorado.edu>
2029 2004-11-08 Fernando Perez <fperez@colorado.edu>
2024
2030
2025 * IPython/iplib.py (init_readline): Fix exit message for Windows
2031 * IPython/iplib.py (init_readline): Fix exit message for Windows
2026 when readline is active. Thanks to a report by Eric Jones
2032 when readline is active. Thanks to a report by Eric Jones
2027 <eric-AT-enthought.com>.
2033 <eric-AT-enthought.com>.
2028
2034
2029 2004-11-07 Fernando Perez <fperez@colorado.edu>
2035 2004-11-07 Fernando Perez <fperez@colorado.edu>
2030
2036
2031 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2037 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2032 sometimes seen by win2k/cygwin users.
2038 sometimes seen by win2k/cygwin users.
2033
2039
2034 2004-11-06 Fernando Perez <fperez@colorado.edu>
2040 2004-11-06 Fernando Perez <fperez@colorado.edu>
2035
2041
2036 * IPython/iplib.py (interact): Change the handling of %Exit from
2042 * IPython/iplib.py (interact): Change the handling of %Exit from
2037 trying to propagate a SystemExit to an internal ipython flag.
2043 trying to propagate a SystemExit to an internal ipython flag.
2038 This is less elegant than using Python's exception mechanism, but
2044 This is less elegant than using Python's exception mechanism, but
2039 I can't get that to work reliably with threads, so under -pylab
2045 I can't get that to work reliably with threads, so under -pylab
2040 %Exit was hanging IPython. Cross-thread exception handling is
2046 %Exit was hanging IPython. Cross-thread exception handling is
2041 really a bitch. Thaks to a bug report by Stephen Walton
2047 really a bitch. Thaks to a bug report by Stephen Walton
2042 <stephen.walton-AT-csun.edu>.
2048 <stephen.walton-AT-csun.edu>.
2043
2049
2044 2004-11-04 Fernando Perez <fperez@colorado.edu>
2050 2004-11-04 Fernando Perez <fperez@colorado.edu>
2045
2051
2046 * IPython/iplib.py (raw_input_original): store a pointer to the
2052 * IPython/iplib.py (raw_input_original): store a pointer to the
2047 true raw_input to harden against code which can modify it
2053 true raw_input to harden against code which can modify it
2048 (wx.py.PyShell does this and would otherwise crash ipython).
2054 (wx.py.PyShell does this and would otherwise crash ipython).
2049 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2055 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2050
2056
2051 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2057 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2052 Ctrl-C problem, which does not mess up the input line.
2058 Ctrl-C problem, which does not mess up the input line.
2053
2059
2054 2004-11-03 Fernando Perez <fperez@colorado.edu>
2060 2004-11-03 Fernando Perez <fperez@colorado.edu>
2055
2061
2056 * IPython/Release.py: Changed licensing to BSD, in all files.
2062 * IPython/Release.py: Changed licensing to BSD, in all files.
2057 (name): lowercase name for tarball/RPM release.
2063 (name): lowercase name for tarball/RPM release.
2058
2064
2059 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2065 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2060 use throughout ipython.
2066 use throughout ipython.
2061
2067
2062 * IPython/Magic.py (Magic._ofind): Switch to using the new
2068 * IPython/Magic.py (Magic._ofind): Switch to using the new
2063 OInspect.getdoc() function.
2069 OInspect.getdoc() function.
2064
2070
2065 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2071 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2066 of the line currently being canceled via Ctrl-C. It's extremely
2072 of the line currently being canceled via Ctrl-C. It's extremely
2067 ugly, but I don't know how to do it better (the problem is one of
2073 ugly, but I don't know how to do it better (the problem is one of
2068 handling cross-thread exceptions).
2074 handling cross-thread exceptions).
2069
2075
2070 2004-10-28 Fernando Perez <fperez@colorado.edu>
2076 2004-10-28 Fernando Perez <fperez@colorado.edu>
2071
2077
2072 * IPython/Shell.py (signal_handler): add signal handlers to trap
2078 * IPython/Shell.py (signal_handler): add signal handlers to trap
2073 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2079 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2074 report by Francesc Alted.
2080 report by Francesc Alted.
2075
2081
2076 2004-10-21 Fernando Perez <fperez@colorado.edu>
2082 2004-10-21 Fernando Perez <fperez@colorado.edu>
2077
2083
2078 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2084 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2079 to % for pysh syntax extensions.
2085 to % for pysh syntax extensions.
2080
2086
2081 2004-10-09 Fernando Perez <fperez@colorado.edu>
2087 2004-10-09 Fernando Perez <fperez@colorado.edu>
2082
2088
2083 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2089 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2084 arrays to print a more useful summary, without calling str(arr).
2090 arrays to print a more useful summary, without calling str(arr).
2085 This avoids the problem of extremely lengthy computations which
2091 This avoids the problem of extremely lengthy computations which
2086 occur if arr is large, and appear to the user as a system lockup
2092 occur if arr is large, and appear to the user as a system lockup
2087 with 100% cpu activity. After a suggestion by Kristian Sandberg
2093 with 100% cpu activity. After a suggestion by Kristian Sandberg
2088 <Kristian.Sandberg@colorado.edu>.
2094 <Kristian.Sandberg@colorado.edu>.
2089 (Magic.__init__): fix bug in global magic escapes not being
2095 (Magic.__init__): fix bug in global magic escapes not being
2090 correctly set.
2096 correctly set.
2091
2097
2092 2004-10-08 Fernando Perez <fperez@colorado.edu>
2098 2004-10-08 Fernando Perez <fperez@colorado.edu>
2093
2099
2094 * IPython/Magic.py (__license__): change to absolute imports of
2100 * IPython/Magic.py (__license__): change to absolute imports of
2095 ipython's own internal packages, to start adapting to the absolute
2101 ipython's own internal packages, to start adapting to the absolute
2096 import requirement of PEP-328.
2102 import requirement of PEP-328.
2097
2103
2098 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2104 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2099 files, and standardize author/license marks through the Release
2105 files, and standardize author/license marks through the Release
2100 module instead of having per/file stuff (except for files with
2106 module instead of having per/file stuff (except for files with
2101 particular licenses, like the MIT/PSF-licensed codes).
2107 particular licenses, like the MIT/PSF-licensed codes).
2102
2108
2103 * IPython/Debugger.py: remove dead code for python 2.1
2109 * IPython/Debugger.py: remove dead code for python 2.1
2104
2110
2105 2004-10-04 Fernando Perez <fperez@colorado.edu>
2111 2004-10-04 Fernando Perez <fperez@colorado.edu>
2106
2112
2107 * IPython/iplib.py (ipmagic): New function for accessing magics
2113 * IPython/iplib.py (ipmagic): New function for accessing magics
2108 via a normal python function call.
2114 via a normal python function call.
2109
2115
2110 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2116 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2111 from '@' to '%', to accomodate the new @decorator syntax of python
2117 from '@' to '%', to accomodate the new @decorator syntax of python
2112 2.4.
2118 2.4.
2113
2119
2114 2004-09-29 Fernando Perez <fperez@colorado.edu>
2120 2004-09-29 Fernando Perez <fperez@colorado.edu>
2115
2121
2116 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2122 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2117 matplotlib.use to prevent running scripts which try to switch
2123 matplotlib.use to prevent running scripts which try to switch
2118 interactive backends from within ipython. This will just crash
2124 interactive backends from within ipython. This will just crash
2119 the python interpreter, so we can't allow it (but a detailed error
2125 the python interpreter, so we can't allow it (but a detailed error
2120 is given to the user).
2126 is given to the user).
2121
2127
2122 2004-09-28 Fernando Perez <fperez@colorado.edu>
2128 2004-09-28 Fernando Perez <fperez@colorado.edu>
2123
2129
2124 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2130 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2125 matplotlib-related fixes so that using @run with non-matplotlib
2131 matplotlib-related fixes so that using @run with non-matplotlib
2126 scripts doesn't pop up spurious plot windows. This requires
2132 scripts doesn't pop up spurious plot windows. This requires
2127 matplotlib >= 0.63, where I had to make some changes as well.
2133 matplotlib >= 0.63, where I had to make some changes as well.
2128
2134
2129 * IPython/ipmaker.py (make_IPython): update version requirement to
2135 * IPython/ipmaker.py (make_IPython): update version requirement to
2130 python 2.2.
2136 python 2.2.
2131
2137
2132 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2138 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2133 banner arg for embedded customization.
2139 banner arg for embedded customization.
2134
2140
2135 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2141 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2136 explicit uses of __IP as the IPython's instance name. Now things
2142 explicit uses of __IP as the IPython's instance name. Now things
2137 are properly handled via the shell.name value. The actual code
2143 are properly handled via the shell.name value. The actual code
2138 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2144 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2139 is much better than before. I'll clean things completely when the
2145 is much better than before. I'll clean things completely when the
2140 magic stuff gets a real overhaul.
2146 magic stuff gets a real overhaul.
2141
2147
2142 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2148 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2143 minor changes to debian dir.
2149 minor changes to debian dir.
2144
2150
2145 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2151 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2146 pointer to the shell itself in the interactive namespace even when
2152 pointer to the shell itself in the interactive namespace even when
2147 a user-supplied dict is provided. This is needed for embedding
2153 a user-supplied dict is provided. This is needed for embedding
2148 purposes (found by tests with Michel Sanner).
2154 purposes (found by tests with Michel Sanner).
2149
2155
2150 2004-09-27 Fernando Perez <fperez@colorado.edu>
2156 2004-09-27 Fernando Perez <fperez@colorado.edu>
2151
2157
2152 * IPython/UserConfig/ipythonrc: remove []{} from
2158 * IPython/UserConfig/ipythonrc: remove []{} from
2153 readline_remove_delims, so that things like [modname.<TAB> do
2159 readline_remove_delims, so that things like [modname.<TAB> do
2154 proper completion. This disables [].TAB, but that's a less common
2160 proper completion. This disables [].TAB, but that's a less common
2155 case than module names in list comprehensions, for example.
2161 case than module names in list comprehensions, for example.
2156 Thanks to a report by Andrea Riciputi.
2162 Thanks to a report by Andrea Riciputi.
2157
2163
2158 2004-09-09 Fernando Perez <fperez@colorado.edu>
2164 2004-09-09 Fernando Perez <fperez@colorado.edu>
2159
2165
2160 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2166 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2161 blocking problems in win32 and osx. Fix by John.
2167 blocking problems in win32 and osx. Fix by John.
2162
2168
2163 2004-09-08 Fernando Perez <fperez@colorado.edu>
2169 2004-09-08 Fernando Perez <fperez@colorado.edu>
2164
2170
2165 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2171 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2166 for Win32 and OSX. Fix by John Hunter.
2172 for Win32 and OSX. Fix by John Hunter.
2167
2173
2168 2004-08-30 *** Released version 0.6.3
2174 2004-08-30 *** Released version 0.6.3
2169
2175
2170 2004-08-30 Fernando Perez <fperez@colorado.edu>
2176 2004-08-30 Fernando Perez <fperez@colorado.edu>
2171
2177
2172 * setup.py (isfile): Add manpages to list of dependent files to be
2178 * setup.py (isfile): Add manpages to list of dependent files to be
2173 updated.
2179 updated.
2174
2180
2175 2004-08-27 Fernando Perez <fperez@colorado.edu>
2181 2004-08-27 Fernando Perez <fperez@colorado.edu>
2176
2182
2177 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2183 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2178 for now. They don't really work with standalone WX/GTK code
2184 for now. They don't really work with standalone WX/GTK code
2179 (though matplotlib IS working fine with both of those backends).
2185 (though matplotlib IS working fine with both of those backends).
2180 This will neeed much more testing. I disabled most things with
2186 This will neeed much more testing. I disabled most things with
2181 comments, so turning it back on later should be pretty easy.
2187 comments, so turning it back on later should be pretty easy.
2182
2188
2183 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2189 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2184 autocalling of expressions like r'foo', by modifying the line
2190 autocalling of expressions like r'foo', by modifying the line
2185 split regexp. Closes
2191 split regexp. Closes
2186 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2192 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2187 Riley <ipythonbugs-AT-sabi.net>.
2193 Riley <ipythonbugs-AT-sabi.net>.
2188 (InteractiveShell.mainloop): honor --nobanner with banner
2194 (InteractiveShell.mainloop): honor --nobanner with banner
2189 extensions.
2195 extensions.
2190
2196
2191 * IPython/Shell.py: Significant refactoring of all classes, so
2197 * IPython/Shell.py: Significant refactoring of all classes, so
2192 that we can really support ALL matplotlib backends and threading
2198 that we can really support ALL matplotlib backends and threading
2193 models (John spotted a bug with Tk which required this). Now we
2199 models (John spotted a bug with Tk which required this). Now we
2194 should support single-threaded, WX-threads and GTK-threads, both
2200 should support single-threaded, WX-threads and GTK-threads, both
2195 for generic code and for matplotlib.
2201 for generic code and for matplotlib.
2196
2202
2197 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2203 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2198 -pylab, to simplify things for users. Will also remove the pylab
2204 -pylab, to simplify things for users. Will also remove the pylab
2199 profile, since now all of matplotlib configuration is directly
2205 profile, since now all of matplotlib configuration is directly
2200 handled here. This also reduces startup time.
2206 handled here. This also reduces startup time.
2201
2207
2202 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2208 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2203 shell wasn't being correctly called. Also in IPShellWX.
2209 shell wasn't being correctly called. Also in IPShellWX.
2204
2210
2205 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2211 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2206 fine-tune banner.
2212 fine-tune banner.
2207
2213
2208 * IPython/numutils.py (spike): Deprecate these spike functions,
2214 * IPython/numutils.py (spike): Deprecate these spike functions,
2209 delete (long deprecated) gnuplot_exec handler.
2215 delete (long deprecated) gnuplot_exec handler.
2210
2216
2211 2004-08-26 Fernando Perez <fperez@colorado.edu>
2217 2004-08-26 Fernando Perez <fperez@colorado.edu>
2212
2218
2213 * ipython.1: Update for threading options, plus some others which
2219 * ipython.1: Update for threading options, plus some others which
2214 were missing.
2220 were missing.
2215
2221
2216 * IPython/ipmaker.py (__call__): Added -wthread option for
2222 * IPython/ipmaker.py (__call__): Added -wthread option for
2217 wxpython thread handling. Make sure threading options are only
2223 wxpython thread handling. Make sure threading options are only
2218 valid at the command line.
2224 valid at the command line.
2219
2225
2220 * scripts/ipython: moved shell selection into a factory function
2226 * scripts/ipython: moved shell selection into a factory function
2221 in Shell.py, to keep the starter script to a minimum.
2227 in Shell.py, to keep the starter script to a minimum.
2222
2228
2223 2004-08-25 Fernando Perez <fperez@colorado.edu>
2229 2004-08-25 Fernando Perez <fperez@colorado.edu>
2224
2230
2225 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2231 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2226 John. Along with some recent changes he made to matplotlib, the
2232 John. Along with some recent changes he made to matplotlib, the
2227 next versions of both systems should work very well together.
2233 next versions of both systems should work very well together.
2228
2234
2229 2004-08-24 Fernando Perez <fperez@colorado.edu>
2235 2004-08-24 Fernando Perez <fperez@colorado.edu>
2230
2236
2231 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2237 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2232 tried to switch the profiling to using hotshot, but I'm getting
2238 tried to switch the profiling to using hotshot, but I'm getting
2233 strange errors from prof.runctx() there. I may be misreading the
2239 strange errors from prof.runctx() there. I may be misreading the
2234 docs, but it looks weird. For now the profiling code will
2240 docs, but it looks weird. For now the profiling code will
2235 continue to use the standard profiler.
2241 continue to use the standard profiler.
2236
2242
2237 2004-08-23 Fernando Perez <fperez@colorado.edu>
2243 2004-08-23 Fernando Perez <fperez@colorado.edu>
2238
2244
2239 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2245 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2240 threaded shell, by John Hunter. It's not quite ready yet, but
2246 threaded shell, by John Hunter. It's not quite ready yet, but
2241 close.
2247 close.
2242
2248
2243 2004-08-22 Fernando Perez <fperez@colorado.edu>
2249 2004-08-22 Fernando Perez <fperez@colorado.edu>
2244
2250
2245 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2251 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2246 in Magic and ultraTB.
2252 in Magic and ultraTB.
2247
2253
2248 * ipython.1: document threading options in manpage.
2254 * ipython.1: document threading options in manpage.
2249
2255
2250 * scripts/ipython: Changed name of -thread option to -gthread,
2256 * scripts/ipython: Changed name of -thread option to -gthread,
2251 since this is GTK specific. I want to leave the door open for a
2257 since this is GTK specific. I want to leave the door open for a
2252 -wthread option for WX, which will most likely be necessary. This
2258 -wthread option for WX, which will most likely be necessary. This
2253 change affects usage and ipmaker as well.
2259 change affects usage and ipmaker as well.
2254
2260
2255 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2261 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2256 handle the matplotlib shell issues. Code by John Hunter
2262 handle the matplotlib shell issues. Code by John Hunter
2257 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2263 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2258 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2264 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2259 broken (and disabled for end users) for now, but it puts the
2265 broken (and disabled for end users) for now, but it puts the
2260 infrastructure in place.
2266 infrastructure in place.
2261
2267
2262 2004-08-21 Fernando Perez <fperez@colorado.edu>
2268 2004-08-21 Fernando Perez <fperez@colorado.edu>
2263
2269
2264 * ipythonrc-pylab: Add matplotlib support.
2270 * ipythonrc-pylab: Add matplotlib support.
2265
2271
2266 * matplotlib_config.py: new files for matplotlib support, part of
2272 * matplotlib_config.py: new files for matplotlib support, part of
2267 the pylab profile.
2273 the pylab profile.
2268
2274
2269 * IPython/usage.py (__doc__): documented the threading options.
2275 * IPython/usage.py (__doc__): documented the threading options.
2270
2276
2271 2004-08-20 Fernando Perez <fperez@colorado.edu>
2277 2004-08-20 Fernando Perez <fperez@colorado.edu>
2272
2278
2273 * ipython: Modified the main calling routine to handle the -thread
2279 * ipython: Modified the main calling routine to handle the -thread
2274 and -mpthread options. This needs to be done as a top-level hack,
2280 and -mpthread options. This needs to be done as a top-level hack,
2275 because it determines which class to instantiate for IPython
2281 because it determines which class to instantiate for IPython
2276 itself.
2282 itself.
2277
2283
2278 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2284 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2279 classes to support multithreaded GTK operation without blocking,
2285 classes to support multithreaded GTK operation without blocking,
2280 and matplotlib with all backends. This is a lot of still very
2286 and matplotlib with all backends. This is a lot of still very
2281 experimental code, and threads are tricky. So it may still have a
2287 experimental code, and threads are tricky. So it may still have a
2282 few rough edges... This code owes a lot to
2288 few rough edges... This code owes a lot to
2283 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2289 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2284 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2290 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2285 to John Hunter for all the matplotlib work.
2291 to John Hunter for all the matplotlib work.
2286
2292
2287 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2293 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2288 options for gtk thread and matplotlib support.
2294 options for gtk thread and matplotlib support.
2289
2295
2290 2004-08-16 Fernando Perez <fperez@colorado.edu>
2296 2004-08-16 Fernando Perez <fperez@colorado.edu>
2291
2297
2292 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2298 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2293 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2299 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2294 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2300 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2295
2301
2296 2004-08-11 Fernando Perez <fperez@colorado.edu>
2302 2004-08-11 Fernando Perez <fperez@colorado.edu>
2297
2303
2298 * setup.py (isfile): Fix build so documentation gets updated for
2304 * setup.py (isfile): Fix build so documentation gets updated for
2299 rpms (it was only done for .tgz builds).
2305 rpms (it was only done for .tgz builds).
2300
2306
2301 2004-08-10 Fernando Perez <fperez@colorado.edu>
2307 2004-08-10 Fernando Perez <fperez@colorado.edu>
2302
2308
2303 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2309 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2304
2310
2305 * iplib.py : Silence syntax error exceptions in tab-completion.
2311 * iplib.py : Silence syntax error exceptions in tab-completion.
2306
2312
2307 2004-08-05 Fernando Perez <fperez@colorado.edu>
2313 2004-08-05 Fernando Perez <fperez@colorado.edu>
2308
2314
2309 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2315 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2310 'color off' mark for continuation prompts. This was causing long
2316 'color off' mark for continuation prompts. This was causing long
2311 continuation lines to mis-wrap.
2317 continuation lines to mis-wrap.
2312
2318
2313 2004-08-01 Fernando Perez <fperez@colorado.edu>
2319 2004-08-01 Fernando Perez <fperez@colorado.edu>
2314
2320
2315 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2321 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2316 for building ipython to be a parameter. All this is necessary
2322 for building ipython to be a parameter. All this is necessary
2317 right now to have a multithreaded version, but this insane
2323 right now to have a multithreaded version, but this insane
2318 non-design will be cleaned up soon. For now, it's a hack that
2324 non-design will be cleaned up soon. For now, it's a hack that
2319 works.
2325 works.
2320
2326
2321 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2327 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2322 args in various places. No bugs so far, but it's a dangerous
2328 args in various places. No bugs so far, but it's a dangerous
2323 practice.
2329 practice.
2324
2330
2325 2004-07-31 Fernando Perez <fperez@colorado.edu>
2331 2004-07-31 Fernando Perez <fperez@colorado.edu>
2326
2332
2327 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2333 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2328 fix completion of files with dots in their names under most
2334 fix completion of files with dots in their names under most
2329 profiles (pysh was OK because the completion order is different).
2335 profiles (pysh was OK because the completion order is different).
2330
2336
2331 2004-07-27 Fernando Perez <fperez@colorado.edu>
2337 2004-07-27 Fernando Perez <fperez@colorado.edu>
2332
2338
2333 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2339 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2334 keywords manually, b/c the one in keyword.py was removed in python
2340 keywords manually, b/c the one in keyword.py was removed in python
2335 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2341 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2336 This is NOT a bug under python 2.3 and earlier.
2342 This is NOT a bug under python 2.3 and earlier.
2337
2343
2338 2004-07-26 Fernando Perez <fperez@colorado.edu>
2344 2004-07-26 Fernando Perez <fperez@colorado.edu>
2339
2345
2340 * IPython/ultraTB.py (VerboseTB.text): Add another
2346 * IPython/ultraTB.py (VerboseTB.text): Add another
2341 linecache.checkcache() call to try to prevent inspect.py from
2347 linecache.checkcache() call to try to prevent inspect.py from
2342 crashing under python 2.3. I think this fixes
2348 crashing under python 2.3. I think this fixes
2343 http://www.scipy.net/roundup/ipython/issue17.
2349 http://www.scipy.net/roundup/ipython/issue17.
2344
2350
2345 2004-07-26 *** Released version 0.6.2
2351 2004-07-26 *** Released version 0.6.2
2346
2352
2347 2004-07-26 Fernando Perez <fperez@colorado.edu>
2353 2004-07-26 Fernando Perez <fperez@colorado.edu>
2348
2354
2349 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2355 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2350 fail for any number.
2356 fail for any number.
2351 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2357 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2352 empty bookmarks.
2358 empty bookmarks.
2353
2359
2354 2004-07-26 *** Released version 0.6.1
2360 2004-07-26 *** Released version 0.6.1
2355
2361
2356 2004-07-26 Fernando Perez <fperez@colorado.edu>
2362 2004-07-26 Fernando Perez <fperez@colorado.edu>
2357
2363
2358 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2364 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2359
2365
2360 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2366 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2361 escaping '()[]{}' in filenames.
2367 escaping '()[]{}' in filenames.
2362
2368
2363 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2369 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2364 Python 2.2 users who lack a proper shlex.split.
2370 Python 2.2 users who lack a proper shlex.split.
2365
2371
2366 2004-07-19 Fernando Perez <fperez@colorado.edu>
2372 2004-07-19 Fernando Perez <fperez@colorado.edu>
2367
2373
2368 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2374 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2369 for reading readline's init file. I follow the normal chain:
2375 for reading readline's init file. I follow the normal chain:
2370 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2376 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2371 report by Mike Heeter. This closes
2377 report by Mike Heeter. This closes
2372 http://www.scipy.net/roundup/ipython/issue16.
2378 http://www.scipy.net/roundup/ipython/issue16.
2373
2379
2374 2004-07-18 Fernando Perez <fperez@colorado.edu>
2380 2004-07-18 Fernando Perez <fperez@colorado.edu>
2375
2381
2376 * IPython/iplib.py (__init__): Add better handling of '\' under
2382 * IPython/iplib.py (__init__): Add better handling of '\' under
2377 Win32 for filenames. After a patch by Ville.
2383 Win32 for filenames. After a patch by Ville.
2378
2384
2379 2004-07-17 Fernando Perez <fperez@colorado.edu>
2385 2004-07-17 Fernando Perez <fperez@colorado.edu>
2380
2386
2381 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2387 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2382 autocalling would be triggered for 'foo is bar' if foo is
2388 autocalling would be triggered for 'foo is bar' if foo is
2383 callable. I also cleaned up the autocall detection code to use a
2389 callable. I also cleaned up the autocall detection code to use a
2384 regexp, which is faster. Bug reported by Alexander Schmolck.
2390 regexp, which is faster. Bug reported by Alexander Schmolck.
2385
2391
2386 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2392 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2387 '?' in them would confuse the help system. Reported by Alex
2393 '?' in them would confuse the help system. Reported by Alex
2388 Schmolck.
2394 Schmolck.
2389
2395
2390 2004-07-16 Fernando Perez <fperez@colorado.edu>
2396 2004-07-16 Fernando Perez <fperez@colorado.edu>
2391
2397
2392 * IPython/GnuplotInteractive.py (__all__): added plot2.
2398 * IPython/GnuplotInteractive.py (__all__): added plot2.
2393
2399
2394 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2400 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2395 plotting dictionaries, lists or tuples of 1d arrays.
2401 plotting dictionaries, lists or tuples of 1d arrays.
2396
2402
2397 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2403 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2398 optimizations.
2404 optimizations.
2399
2405
2400 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2406 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2401 the information which was there from Janko's original IPP code:
2407 the information which was there from Janko's original IPP code:
2402
2408
2403 03.05.99 20:53 porto.ifm.uni-kiel.de
2409 03.05.99 20:53 porto.ifm.uni-kiel.de
2404 --Started changelog.
2410 --Started changelog.
2405 --make clear do what it say it does
2411 --make clear do what it say it does
2406 --added pretty output of lines from inputcache
2412 --added pretty output of lines from inputcache
2407 --Made Logger a mixin class, simplifies handling of switches
2413 --Made Logger a mixin class, simplifies handling of switches
2408 --Added own completer class. .string<TAB> expands to last history
2414 --Added own completer class. .string<TAB> expands to last history
2409 line which starts with string. The new expansion is also present
2415 line which starts with string. The new expansion is also present
2410 with Ctrl-r from the readline library. But this shows, who this
2416 with Ctrl-r from the readline library. But this shows, who this
2411 can be done for other cases.
2417 can be done for other cases.
2412 --Added convention that all shell functions should accept a
2418 --Added convention that all shell functions should accept a
2413 parameter_string This opens the door for different behaviour for
2419 parameter_string This opens the door for different behaviour for
2414 each function. @cd is a good example of this.
2420 each function. @cd is a good example of this.
2415
2421
2416 04.05.99 12:12 porto.ifm.uni-kiel.de
2422 04.05.99 12:12 porto.ifm.uni-kiel.de
2417 --added logfile rotation
2423 --added logfile rotation
2418 --added new mainloop method which freezes first the namespace
2424 --added new mainloop method which freezes first the namespace
2419
2425
2420 07.05.99 21:24 porto.ifm.uni-kiel.de
2426 07.05.99 21:24 porto.ifm.uni-kiel.de
2421 --added the docreader classes. Now there is a help system.
2427 --added the docreader classes. Now there is a help system.
2422 -This is only a first try. Currently it's not easy to put new
2428 -This is only a first try. Currently it's not easy to put new
2423 stuff in the indices. But this is the way to go. Info would be
2429 stuff in the indices. But this is the way to go. Info would be
2424 better, but HTML is every where and not everybody has an info
2430 better, but HTML is every where and not everybody has an info
2425 system installed and it's not so easy to change html-docs to info.
2431 system installed and it's not so easy to change html-docs to info.
2426 --added global logfile option
2432 --added global logfile option
2427 --there is now a hook for object inspection method pinfo needs to
2433 --there is now a hook for object inspection method pinfo needs to
2428 be provided for this. Can be reached by two '??'.
2434 be provided for this. Can be reached by two '??'.
2429
2435
2430 08.05.99 20:51 porto.ifm.uni-kiel.de
2436 08.05.99 20:51 porto.ifm.uni-kiel.de
2431 --added a README
2437 --added a README
2432 --bug in rc file. Something has changed so functions in the rc
2438 --bug in rc file. Something has changed so functions in the rc
2433 file need to reference the shell and not self. Not clear if it's a
2439 file need to reference the shell and not self. Not clear if it's a
2434 bug or feature.
2440 bug or feature.
2435 --changed rc file for new behavior
2441 --changed rc file for new behavior
2436
2442
2437 2004-07-15 Fernando Perez <fperez@colorado.edu>
2443 2004-07-15 Fernando Perez <fperez@colorado.edu>
2438
2444
2439 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2445 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2440 cache was falling out of sync in bizarre manners when multi-line
2446 cache was falling out of sync in bizarre manners when multi-line
2441 input was present. Minor optimizations and cleanup.
2447 input was present. Minor optimizations and cleanup.
2442
2448
2443 (Logger): Remove old Changelog info for cleanup. This is the
2449 (Logger): Remove old Changelog info for cleanup. This is the
2444 information which was there from Janko's original code:
2450 information which was there from Janko's original code:
2445
2451
2446 Changes to Logger: - made the default log filename a parameter
2452 Changes to Logger: - made the default log filename a parameter
2447
2453
2448 - put a check for lines beginning with !@? in log(). Needed
2454 - put a check for lines beginning with !@? in log(). Needed
2449 (even if the handlers properly log their lines) for mid-session
2455 (even if the handlers properly log their lines) for mid-session
2450 logging activation to work properly. Without this, lines logged
2456 logging activation to work properly. Without this, lines logged
2451 in mid session, which get read from the cache, would end up
2457 in mid session, which get read from the cache, would end up
2452 'bare' (with !@? in the open) in the log. Now they are caught
2458 'bare' (with !@? in the open) in the log. Now they are caught
2453 and prepended with a #.
2459 and prepended with a #.
2454
2460
2455 * IPython/iplib.py (InteractiveShell.init_readline): added check
2461 * IPython/iplib.py (InteractiveShell.init_readline): added check
2456 in case MagicCompleter fails to be defined, so we don't crash.
2462 in case MagicCompleter fails to be defined, so we don't crash.
2457
2463
2458 2004-07-13 Fernando Perez <fperez@colorado.edu>
2464 2004-07-13 Fernando Perez <fperez@colorado.edu>
2459
2465
2460 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2466 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2461 of EPS if the requested filename ends in '.eps'.
2467 of EPS if the requested filename ends in '.eps'.
2462
2468
2463 2004-07-04 Fernando Perez <fperez@colorado.edu>
2469 2004-07-04 Fernando Perez <fperez@colorado.edu>
2464
2470
2465 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2471 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2466 escaping of quotes when calling the shell.
2472 escaping of quotes when calling the shell.
2467
2473
2468 2004-07-02 Fernando Perez <fperez@colorado.edu>
2474 2004-07-02 Fernando Perez <fperez@colorado.edu>
2469
2475
2470 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2476 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2471 gettext not working because we were clobbering '_'. Fixes
2477 gettext not working because we were clobbering '_'. Fixes
2472 http://www.scipy.net/roundup/ipython/issue6.
2478 http://www.scipy.net/roundup/ipython/issue6.
2473
2479
2474 2004-07-01 Fernando Perez <fperez@colorado.edu>
2480 2004-07-01 Fernando Perez <fperez@colorado.edu>
2475
2481
2476 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2482 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2477 into @cd. Patch by Ville.
2483 into @cd. Patch by Ville.
2478
2484
2479 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2485 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2480 new function to store things after ipmaker runs. Patch by Ville.
2486 new function to store things after ipmaker runs. Patch by Ville.
2481 Eventually this will go away once ipmaker is removed and the class
2487 Eventually this will go away once ipmaker is removed and the class
2482 gets cleaned up, but for now it's ok. Key functionality here is
2488 gets cleaned up, but for now it's ok. Key functionality here is
2483 the addition of the persistent storage mechanism, a dict for
2489 the addition of the persistent storage mechanism, a dict for
2484 keeping data across sessions (for now just bookmarks, but more can
2490 keeping data across sessions (for now just bookmarks, but more can
2485 be implemented later).
2491 be implemented later).
2486
2492
2487 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2493 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2488 persistent across sections. Patch by Ville, I modified it
2494 persistent across sections. Patch by Ville, I modified it
2489 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2495 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2490 added a '-l' option to list all bookmarks.
2496 added a '-l' option to list all bookmarks.
2491
2497
2492 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2498 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2493 center for cleanup. Registered with atexit.register(). I moved
2499 center for cleanup. Registered with atexit.register(). I moved
2494 here the old exit_cleanup(). After a patch by Ville.
2500 here the old exit_cleanup(). After a patch by Ville.
2495
2501
2496 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2502 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2497 characters in the hacked shlex_split for python 2.2.
2503 characters in the hacked shlex_split for python 2.2.
2498
2504
2499 * IPython/iplib.py (file_matches): more fixes to filenames with
2505 * IPython/iplib.py (file_matches): more fixes to filenames with
2500 whitespace in them. It's not perfect, but limitations in python's
2506 whitespace in them. It's not perfect, but limitations in python's
2501 readline make it impossible to go further.
2507 readline make it impossible to go further.
2502
2508
2503 2004-06-29 Fernando Perez <fperez@colorado.edu>
2509 2004-06-29 Fernando Perez <fperez@colorado.edu>
2504
2510
2505 * IPython/iplib.py (file_matches): escape whitespace correctly in
2511 * IPython/iplib.py (file_matches): escape whitespace correctly in
2506 filename completions. Bug reported by Ville.
2512 filename completions. Bug reported by Ville.
2507
2513
2508 2004-06-28 Fernando Perez <fperez@colorado.edu>
2514 2004-06-28 Fernando Perez <fperez@colorado.edu>
2509
2515
2510 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2516 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2511 the history file will be called 'history-PROFNAME' (or just
2517 the history file will be called 'history-PROFNAME' (or just
2512 'history' if no profile is loaded). I was getting annoyed at
2518 'history' if no profile is loaded). I was getting annoyed at
2513 getting my Numerical work history clobbered by pysh sessions.
2519 getting my Numerical work history clobbered by pysh sessions.
2514
2520
2515 * IPython/iplib.py (InteractiveShell.__init__): Internal
2521 * IPython/iplib.py (InteractiveShell.__init__): Internal
2516 getoutputerror() function so that we can honor the system_verbose
2522 getoutputerror() function so that we can honor the system_verbose
2517 flag for _all_ system calls. I also added escaping of #
2523 flag for _all_ system calls. I also added escaping of #
2518 characters here to avoid confusing Itpl.
2524 characters here to avoid confusing Itpl.
2519
2525
2520 * IPython/Magic.py (shlex_split): removed call to shell in
2526 * IPython/Magic.py (shlex_split): removed call to shell in
2521 parse_options and replaced it with shlex.split(). The annoying
2527 parse_options and replaced it with shlex.split(). The annoying
2522 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2528 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2523 to backport it from 2.3, with several frail hacks (the shlex
2529 to backport it from 2.3, with several frail hacks (the shlex
2524 module is rather limited in 2.2). Thanks to a suggestion by Ville
2530 module is rather limited in 2.2). Thanks to a suggestion by Ville
2525 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2531 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2526 problem.
2532 problem.
2527
2533
2528 (Magic.magic_system_verbose): new toggle to print the actual
2534 (Magic.magic_system_verbose): new toggle to print the actual
2529 system calls made by ipython. Mainly for debugging purposes.
2535 system calls made by ipython. Mainly for debugging purposes.
2530
2536
2531 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2537 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2532 doesn't support persistence. Reported (and fix suggested) by
2538 doesn't support persistence. Reported (and fix suggested) by
2533 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2539 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2534
2540
2535 2004-06-26 Fernando Perez <fperez@colorado.edu>
2541 2004-06-26 Fernando Perez <fperez@colorado.edu>
2536
2542
2537 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2543 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2538 continue prompts.
2544 continue prompts.
2539
2545
2540 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2546 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2541 function (basically a big docstring) and a few more things here to
2547 function (basically a big docstring) and a few more things here to
2542 speedup startup. pysh.py is now very lightweight. We want because
2548 speedup startup. pysh.py is now very lightweight. We want because
2543 it gets execfile'd, while InterpreterExec gets imported, so
2549 it gets execfile'd, while InterpreterExec gets imported, so
2544 byte-compilation saves time.
2550 byte-compilation saves time.
2545
2551
2546 2004-06-25 Fernando Perez <fperez@colorado.edu>
2552 2004-06-25 Fernando Perez <fperez@colorado.edu>
2547
2553
2548 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2554 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2549 -NUM', which was recently broken.
2555 -NUM', which was recently broken.
2550
2556
2551 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2557 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2552 in multi-line input (but not !!, which doesn't make sense there).
2558 in multi-line input (but not !!, which doesn't make sense there).
2553
2559
2554 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2560 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2555 It's just too useful, and people can turn it off in the less
2561 It's just too useful, and people can turn it off in the less
2556 common cases where it's a problem.
2562 common cases where it's a problem.
2557
2563
2558 2004-06-24 Fernando Perez <fperez@colorado.edu>
2564 2004-06-24 Fernando Perez <fperez@colorado.edu>
2559
2565
2560 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2566 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2561 special syntaxes (like alias calling) is now allied in multi-line
2567 special syntaxes (like alias calling) is now allied in multi-line
2562 input. This is still _very_ experimental, but it's necessary for
2568 input. This is still _very_ experimental, but it's necessary for
2563 efficient shell usage combining python looping syntax with system
2569 efficient shell usage combining python looping syntax with system
2564 calls. For now it's restricted to aliases, I don't think it
2570 calls. For now it's restricted to aliases, I don't think it
2565 really even makes sense to have this for magics.
2571 really even makes sense to have this for magics.
2566
2572
2567 2004-06-23 Fernando Perez <fperez@colorado.edu>
2573 2004-06-23 Fernando Perez <fperez@colorado.edu>
2568
2574
2569 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2575 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2570 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2576 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2571
2577
2572 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2578 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2573 extensions under Windows (after code sent by Gary Bishop). The
2579 extensions under Windows (after code sent by Gary Bishop). The
2574 extensions considered 'executable' are stored in IPython's rc
2580 extensions considered 'executable' are stored in IPython's rc
2575 structure as win_exec_ext.
2581 structure as win_exec_ext.
2576
2582
2577 * IPython/genutils.py (shell): new function, like system() but
2583 * IPython/genutils.py (shell): new function, like system() but
2578 without return value. Very useful for interactive shell work.
2584 without return value. Very useful for interactive shell work.
2579
2585
2580 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2586 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2581 delete aliases.
2587 delete aliases.
2582
2588
2583 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2589 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2584 sure that the alias table doesn't contain python keywords.
2590 sure that the alias table doesn't contain python keywords.
2585
2591
2586 2004-06-21 Fernando Perez <fperez@colorado.edu>
2592 2004-06-21 Fernando Perez <fperez@colorado.edu>
2587
2593
2588 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2594 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2589 non-existent items are found in $PATH. Reported by Thorsten.
2595 non-existent items are found in $PATH. Reported by Thorsten.
2590
2596
2591 2004-06-20 Fernando Perez <fperez@colorado.edu>
2597 2004-06-20 Fernando Perez <fperez@colorado.edu>
2592
2598
2593 * IPython/iplib.py (complete): modified the completer so that the
2599 * IPython/iplib.py (complete): modified the completer so that the
2594 order of priorities can be easily changed at runtime.
2600 order of priorities can be easily changed at runtime.
2595
2601
2596 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2602 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2597 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2603 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2598
2604
2599 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2605 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2600 expand Python variables prepended with $ in all system calls. The
2606 expand Python variables prepended with $ in all system calls. The
2601 same was done to InteractiveShell.handle_shell_escape. Now all
2607 same was done to InteractiveShell.handle_shell_escape. Now all
2602 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2608 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2603 expansion of python variables and expressions according to the
2609 expansion of python variables and expressions according to the
2604 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2610 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2605
2611
2606 Though PEP-215 has been rejected, a similar (but simpler) one
2612 Though PEP-215 has been rejected, a similar (but simpler) one
2607 seems like it will go into Python 2.4, PEP-292 -
2613 seems like it will go into Python 2.4, PEP-292 -
2608 http://www.python.org/peps/pep-0292.html.
2614 http://www.python.org/peps/pep-0292.html.
2609
2615
2610 I'll keep the full syntax of PEP-215, since IPython has since the
2616 I'll keep the full syntax of PEP-215, since IPython has since the
2611 start used Ka-Ping Yee's reference implementation discussed there
2617 start used Ka-Ping Yee's reference implementation discussed there
2612 (Itpl), and I actually like the powerful semantics it offers.
2618 (Itpl), and I actually like the powerful semantics it offers.
2613
2619
2614 In order to access normal shell variables, the $ has to be escaped
2620 In order to access normal shell variables, the $ has to be escaped
2615 via an extra $. For example:
2621 via an extra $. For example:
2616
2622
2617 In [7]: PATH='a python variable'
2623 In [7]: PATH='a python variable'
2618
2624
2619 In [8]: !echo $PATH
2625 In [8]: !echo $PATH
2620 a python variable
2626 a python variable
2621
2627
2622 In [9]: !echo $$PATH
2628 In [9]: !echo $$PATH
2623 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2629 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2624
2630
2625 (Magic.parse_options): escape $ so the shell doesn't evaluate
2631 (Magic.parse_options): escape $ so the shell doesn't evaluate
2626 things prematurely.
2632 things prematurely.
2627
2633
2628 * IPython/iplib.py (InteractiveShell.call_alias): added the
2634 * IPython/iplib.py (InteractiveShell.call_alias): added the
2629 ability for aliases to expand python variables via $.
2635 ability for aliases to expand python variables via $.
2630
2636
2631 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2637 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2632 system, now there's a @rehash/@rehashx pair of magics. These work
2638 system, now there's a @rehash/@rehashx pair of magics. These work
2633 like the csh rehash command, and can be invoked at any time. They
2639 like the csh rehash command, and can be invoked at any time. They
2634 build a table of aliases to everything in the user's $PATH
2640 build a table of aliases to everything in the user's $PATH
2635 (@rehash uses everything, @rehashx is slower but only adds
2641 (@rehash uses everything, @rehashx is slower but only adds
2636 executable files). With this, the pysh.py-based shell profile can
2642 executable files). With this, the pysh.py-based shell profile can
2637 now simply call rehash upon startup, and full access to all
2643 now simply call rehash upon startup, and full access to all
2638 programs in the user's path is obtained.
2644 programs in the user's path is obtained.
2639
2645
2640 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2646 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2641 functionality is now fully in place. I removed the old dynamic
2647 functionality is now fully in place. I removed the old dynamic
2642 code generation based approach, in favor of a much lighter one
2648 code generation based approach, in favor of a much lighter one
2643 based on a simple dict. The advantage is that this allows me to
2649 based on a simple dict. The advantage is that this allows me to
2644 now have thousands of aliases with negligible cost (unthinkable
2650 now have thousands of aliases with negligible cost (unthinkable
2645 with the old system).
2651 with the old system).
2646
2652
2647 2004-06-19 Fernando Perez <fperez@colorado.edu>
2653 2004-06-19 Fernando Perez <fperez@colorado.edu>
2648
2654
2649 * IPython/iplib.py (__init__): extended MagicCompleter class to
2655 * IPython/iplib.py (__init__): extended MagicCompleter class to
2650 also complete (last in priority) on user aliases.
2656 also complete (last in priority) on user aliases.
2651
2657
2652 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2658 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2653 call to eval.
2659 call to eval.
2654 (ItplNS.__init__): Added a new class which functions like Itpl,
2660 (ItplNS.__init__): Added a new class which functions like Itpl,
2655 but allows configuring the namespace for the evaluation to occur
2661 but allows configuring the namespace for the evaluation to occur
2656 in.
2662 in.
2657
2663
2658 2004-06-18 Fernando Perez <fperez@colorado.edu>
2664 2004-06-18 Fernando Perez <fperez@colorado.edu>
2659
2665
2660 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2666 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2661 better message when 'exit' or 'quit' are typed (a common newbie
2667 better message when 'exit' or 'quit' are typed (a common newbie
2662 confusion).
2668 confusion).
2663
2669
2664 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2670 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2665 check for Windows users.
2671 check for Windows users.
2666
2672
2667 * IPython/iplib.py (InteractiveShell.user_setup): removed
2673 * IPython/iplib.py (InteractiveShell.user_setup): removed
2668 disabling of colors for Windows. I'll test at runtime and issue a
2674 disabling of colors for Windows. I'll test at runtime and issue a
2669 warning if Gary's readline isn't found, as to nudge users to
2675 warning if Gary's readline isn't found, as to nudge users to
2670 download it.
2676 download it.
2671
2677
2672 2004-06-16 Fernando Perez <fperez@colorado.edu>
2678 2004-06-16 Fernando Perez <fperez@colorado.edu>
2673
2679
2674 * IPython/genutils.py (Stream.__init__): changed to print errors
2680 * IPython/genutils.py (Stream.__init__): changed to print errors
2675 to sys.stderr. I had a circular dependency here. Now it's
2681 to sys.stderr. I had a circular dependency here. Now it's
2676 possible to run ipython as IDLE's shell (consider this pre-alpha,
2682 possible to run ipython as IDLE's shell (consider this pre-alpha,
2677 since true stdout things end up in the starting terminal instead
2683 since true stdout things end up in the starting terminal instead
2678 of IDLE's out).
2684 of IDLE's out).
2679
2685
2680 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2686 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2681 users who haven't # updated their prompt_in2 definitions. Remove
2687 users who haven't # updated their prompt_in2 definitions. Remove
2682 eventually.
2688 eventually.
2683 (multiple_replace): added credit to original ASPN recipe.
2689 (multiple_replace): added credit to original ASPN recipe.
2684
2690
2685 2004-06-15 Fernando Perez <fperez@colorado.edu>
2691 2004-06-15 Fernando Perez <fperez@colorado.edu>
2686
2692
2687 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2693 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2688 list of auto-defined aliases.
2694 list of auto-defined aliases.
2689
2695
2690 2004-06-13 Fernando Perez <fperez@colorado.edu>
2696 2004-06-13 Fernando Perez <fperez@colorado.edu>
2691
2697
2692 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2698 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2693 install was really requested (so setup.py can be used for other
2699 install was really requested (so setup.py can be used for other
2694 things under Windows).
2700 things under Windows).
2695
2701
2696 2004-06-10 Fernando Perez <fperez@colorado.edu>
2702 2004-06-10 Fernando Perez <fperez@colorado.edu>
2697
2703
2698 * IPython/Logger.py (Logger.create_log): Manually remove any old
2704 * IPython/Logger.py (Logger.create_log): Manually remove any old
2699 backup, since os.remove may fail under Windows. Fixes bug
2705 backup, since os.remove may fail under Windows. Fixes bug
2700 reported by Thorsten.
2706 reported by Thorsten.
2701
2707
2702 2004-06-09 Fernando Perez <fperez@colorado.edu>
2708 2004-06-09 Fernando Perez <fperez@colorado.edu>
2703
2709
2704 * examples/example-embed.py: fixed all references to %n (replaced
2710 * examples/example-embed.py: fixed all references to %n (replaced
2705 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2711 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2706 for all examples and the manual as well.
2712 for all examples and the manual as well.
2707
2713
2708 2004-06-08 Fernando Perez <fperez@colorado.edu>
2714 2004-06-08 Fernando Perez <fperez@colorado.edu>
2709
2715
2710 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2716 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2711 alignment and color management. All 3 prompt subsystems now
2717 alignment and color management. All 3 prompt subsystems now
2712 inherit from BasePrompt.
2718 inherit from BasePrompt.
2713
2719
2714 * tools/release: updates for windows installer build and tag rpms
2720 * tools/release: updates for windows installer build and tag rpms
2715 with python version (since paths are fixed).
2721 with python version (since paths are fixed).
2716
2722
2717 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2723 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2718 which will become eventually obsolete. Also fixed the default
2724 which will become eventually obsolete. Also fixed the default
2719 prompt_in2 to use \D, so at least new users start with the correct
2725 prompt_in2 to use \D, so at least new users start with the correct
2720 defaults.
2726 defaults.
2721 WARNING: Users with existing ipythonrc files will need to apply
2727 WARNING: Users with existing ipythonrc files will need to apply
2722 this fix manually!
2728 this fix manually!
2723
2729
2724 * setup.py: make windows installer (.exe). This is finally the
2730 * setup.py: make windows installer (.exe). This is finally the
2725 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2731 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2726 which I hadn't included because it required Python 2.3 (or recent
2732 which I hadn't included because it required Python 2.3 (or recent
2727 distutils).
2733 distutils).
2728
2734
2729 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2735 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2730 usage of new '\D' escape.
2736 usage of new '\D' escape.
2731
2737
2732 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2738 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2733 lacks os.getuid())
2739 lacks os.getuid())
2734 (CachedOutput.set_colors): Added the ability to turn coloring
2740 (CachedOutput.set_colors): Added the ability to turn coloring
2735 on/off with @colors even for manually defined prompt colors. It
2741 on/off with @colors even for manually defined prompt colors. It
2736 uses a nasty global, but it works safely and via the generic color
2742 uses a nasty global, but it works safely and via the generic color
2737 handling mechanism.
2743 handling mechanism.
2738 (Prompt2.__init__): Introduced new escape '\D' for continuation
2744 (Prompt2.__init__): Introduced new escape '\D' for continuation
2739 prompts. It represents the counter ('\#') as dots.
2745 prompts. It represents the counter ('\#') as dots.
2740 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2746 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2741 need to update their ipythonrc files and replace '%n' with '\D' in
2747 need to update their ipythonrc files and replace '%n' with '\D' in
2742 their prompt_in2 settings everywhere. Sorry, but there's
2748 their prompt_in2 settings everywhere. Sorry, but there's
2743 otherwise no clean way to get all prompts to properly align. The
2749 otherwise no clean way to get all prompts to properly align. The
2744 ipythonrc shipped with IPython has been updated.
2750 ipythonrc shipped with IPython has been updated.
2745
2751
2746 2004-06-07 Fernando Perez <fperez@colorado.edu>
2752 2004-06-07 Fernando Perez <fperez@colorado.edu>
2747
2753
2748 * setup.py (isfile): Pass local_icons option to latex2html, so the
2754 * setup.py (isfile): Pass local_icons option to latex2html, so the
2749 resulting HTML file is self-contained. Thanks to
2755 resulting HTML file is self-contained. Thanks to
2750 dryice-AT-liu.com.cn for the tip.
2756 dryice-AT-liu.com.cn for the tip.
2751
2757
2752 * pysh.py: I created a new profile 'shell', which implements a
2758 * pysh.py: I created a new profile 'shell', which implements a
2753 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2759 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2754 system shell, nor will it become one anytime soon. It's mainly
2760 system shell, nor will it become one anytime soon. It's mainly
2755 meant to illustrate the use of the new flexible bash-like prompts.
2761 meant to illustrate the use of the new flexible bash-like prompts.
2756 I guess it could be used by hardy souls for true shell management,
2762 I guess it could be used by hardy souls for true shell management,
2757 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2763 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2758 profile. This uses the InterpreterExec extension provided by
2764 profile. This uses the InterpreterExec extension provided by
2759 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2765 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2760
2766
2761 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2767 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2762 auto-align itself with the length of the previous input prompt
2768 auto-align itself with the length of the previous input prompt
2763 (taking into account the invisible color escapes).
2769 (taking into account the invisible color escapes).
2764 (CachedOutput.__init__): Large restructuring of this class. Now
2770 (CachedOutput.__init__): Large restructuring of this class. Now
2765 all three prompts (primary1, primary2, output) are proper objects,
2771 all three prompts (primary1, primary2, output) are proper objects,
2766 managed by the 'parent' CachedOutput class. The code is still a
2772 managed by the 'parent' CachedOutput class. The code is still a
2767 bit hackish (all prompts share state via a pointer to the cache),
2773 bit hackish (all prompts share state via a pointer to the cache),
2768 but it's overall far cleaner than before.
2774 but it's overall far cleaner than before.
2769
2775
2770 * IPython/genutils.py (getoutputerror): modified to add verbose,
2776 * IPython/genutils.py (getoutputerror): modified to add verbose,
2771 debug and header options. This makes the interface of all getout*
2777 debug and header options. This makes the interface of all getout*
2772 functions uniform.
2778 functions uniform.
2773 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2779 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2774
2780
2775 * IPython/Magic.py (Magic.default_option): added a function to
2781 * IPython/Magic.py (Magic.default_option): added a function to
2776 allow registering default options for any magic command. This
2782 allow registering default options for any magic command. This
2777 makes it easy to have profiles which customize the magics globally
2783 makes it easy to have profiles which customize the magics globally
2778 for a certain use. The values set through this function are
2784 for a certain use. The values set through this function are
2779 picked up by the parse_options() method, which all magics should
2785 picked up by the parse_options() method, which all magics should
2780 use to parse their options.
2786 use to parse their options.
2781
2787
2782 * IPython/genutils.py (warn): modified the warnings framework to
2788 * IPython/genutils.py (warn): modified the warnings framework to
2783 use the Term I/O class. I'm trying to slowly unify all of
2789 use the Term I/O class. I'm trying to slowly unify all of
2784 IPython's I/O operations to pass through Term.
2790 IPython's I/O operations to pass through Term.
2785
2791
2786 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2792 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2787 the secondary prompt to correctly match the length of the primary
2793 the secondary prompt to correctly match the length of the primary
2788 one for any prompt. Now multi-line code will properly line up
2794 one for any prompt. Now multi-line code will properly line up
2789 even for path dependent prompts, such as the new ones available
2795 even for path dependent prompts, such as the new ones available
2790 via the prompt_specials.
2796 via the prompt_specials.
2791
2797
2792 2004-06-06 Fernando Perez <fperez@colorado.edu>
2798 2004-06-06 Fernando Perez <fperez@colorado.edu>
2793
2799
2794 * IPython/Prompts.py (prompt_specials): Added the ability to have
2800 * IPython/Prompts.py (prompt_specials): Added the ability to have
2795 bash-like special sequences in the prompts, which get
2801 bash-like special sequences in the prompts, which get
2796 automatically expanded. Things like hostname, current working
2802 automatically expanded. Things like hostname, current working
2797 directory and username are implemented already, but it's easy to
2803 directory and username are implemented already, but it's easy to
2798 add more in the future. Thanks to a patch by W.J. van der Laan
2804 add more in the future. Thanks to a patch by W.J. van der Laan
2799 <gnufnork-AT-hetdigitalegat.nl>
2805 <gnufnork-AT-hetdigitalegat.nl>
2800 (prompt_specials): Added color support for prompt strings, so
2806 (prompt_specials): Added color support for prompt strings, so
2801 users can define arbitrary color setups for their prompts.
2807 users can define arbitrary color setups for their prompts.
2802
2808
2803 2004-06-05 Fernando Perez <fperez@colorado.edu>
2809 2004-06-05 Fernando Perez <fperez@colorado.edu>
2804
2810
2805 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2811 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2806 code to load Gary Bishop's readline and configure it
2812 code to load Gary Bishop's readline and configure it
2807 automatically. Thanks to Gary for help on this.
2813 automatically. Thanks to Gary for help on this.
2808
2814
2809 2004-06-01 Fernando Perez <fperez@colorado.edu>
2815 2004-06-01 Fernando Perez <fperez@colorado.edu>
2810
2816
2811 * IPython/Logger.py (Logger.create_log): fix bug for logging
2817 * IPython/Logger.py (Logger.create_log): fix bug for logging
2812 with no filename (previous fix was incomplete).
2818 with no filename (previous fix was incomplete).
2813
2819
2814 2004-05-25 Fernando Perez <fperez@colorado.edu>
2820 2004-05-25 Fernando Perez <fperez@colorado.edu>
2815
2821
2816 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2822 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2817 parens would get passed to the shell.
2823 parens would get passed to the shell.
2818
2824
2819 2004-05-20 Fernando Perez <fperez@colorado.edu>
2825 2004-05-20 Fernando Perez <fperez@colorado.edu>
2820
2826
2821 * IPython/Magic.py (Magic.magic_prun): changed default profile
2827 * IPython/Magic.py (Magic.magic_prun): changed default profile
2822 sort order to 'time' (the more common profiling need).
2828 sort order to 'time' (the more common profiling need).
2823
2829
2824 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2830 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2825 so that source code shown is guaranteed in sync with the file on
2831 so that source code shown is guaranteed in sync with the file on
2826 disk (also changed in psource). Similar fix to the one for
2832 disk (also changed in psource). Similar fix to the one for
2827 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2833 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2828 <yann.ledu-AT-noos.fr>.
2834 <yann.ledu-AT-noos.fr>.
2829
2835
2830 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2836 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2831 with a single option would not be correctly parsed. Closes
2837 with a single option would not be correctly parsed. Closes
2832 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2838 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2833 introduced in 0.6.0 (on 2004-05-06).
2839 introduced in 0.6.0 (on 2004-05-06).
2834
2840
2835 2004-05-13 *** Released version 0.6.0
2841 2004-05-13 *** Released version 0.6.0
2836
2842
2837 2004-05-13 Fernando Perez <fperez@colorado.edu>
2843 2004-05-13 Fernando Perez <fperez@colorado.edu>
2838
2844
2839 * debian/: Added debian/ directory to CVS, so that debian support
2845 * debian/: Added debian/ directory to CVS, so that debian support
2840 is publicly accessible. The debian package is maintained by Jack
2846 is publicly accessible. The debian package is maintained by Jack
2841 Moffit <jack-AT-xiph.org>.
2847 Moffit <jack-AT-xiph.org>.
2842
2848
2843 * Documentation: included the notes about an ipython-based system
2849 * Documentation: included the notes about an ipython-based system
2844 shell (the hypothetical 'pysh') into the new_design.pdf document,
2850 shell (the hypothetical 'pysh') into the new_design.pdf document,
2845 so that these ideas get distributed to users along with the
2851 so that these ideas get distributed to users along with the
2846 official documentation.
2852 official documentation.
2847
2853
2848 2004-05-10 Fernando Perez <fperez@colorado.edu>
2854 2004-05-10 Fernando Perez <fperez@colorado.edu>
2849
2855
2850 * IPython/Logger.py (Logger.create_log): fix recently introduced
2856 * IPython/Logger.py (Logger.create_log): fix recently introduced
2851 bug (misindented line) where logstart would fail when not given an
2857 bug (misindented line) where logstart would fail when not given an
2852 explicit filename.
2858 explicit filename.
2853
2859
2854 2004-05-09 Fernando Perez <fperez@colorado.edu>
2860 2004-05-09 Fernando Perez <fperez@colorado.edu>
2855
2861
2856 * IPython/Magic.py (Magic.parse_options): skip system call when
2862 * IPython/Magic.py (Magic.parse_options): skip system call when
2857 there are no options to look for. Faster, cleaner for the common
2863 there are no options to look for. Faster, cleaner for the common
2858 case.
2864 case.
2859
2865
2860 * Documentation: many updates to the manual: describing Windows
2866 * Documentation: many updates to the manual: describing Windows
2861 support better, Gnuplot updates, credits, misc small stuff. Also
2867 support better, Gnuplot updates, credits, misc small stuff. Also
2862 updated the new_design doc a bit.
2868 updated the new_design doc a bit.
2863
2869
2864 2004-05-06 *** Released version 0.6.0.rc1
2870 2004-05-06 *** Released version 0.6.0.rc1
2865
2871
2866 2004-05-06 Fernando Perez <fperez@colorado.edu>
2872 2004-05-06 Fernando Perez <fperez@colorado.edu>
2867
2873
2868 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2874 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2869 operations to use the vastly more efficient list/''.join() method.
2875 operations to use the vastly more efficient list/''.join() method.
2870 (FormattedTB.text): Fix
2876 (FormattedTB.text): Fix
2871 http://www.scipy.net/roundup/ipython/issue12 - exception source
2877 http://www.scipy.net/roundup/ipython/issue12 - exception source
2872 extract not updated after reload. Thanks to Mike Salib
2878 extract not updated after reload. Thanks to Mike Salib
2873 <msalib-AT-mit.edu> for pinning the source of the problem.
2879 <msalib-AT-mit.edu> for pinning the source of the problem.
2874 Fortunately, the solution works inside ipython and doesn't require
2880 Fortunately, the solution works inside ipython and doesn't require
2875 any changes to python proper.
2881 any changes to python proper.
2876
2882
2877 * IPython/Magic.py (Magic.parse_options): Improved to process the
2883 * IPython/Magic.py (Magic.parse_options): Improved to process the
2878 argument list as a true shell would (by actually using the
2884 argument list as a true shell would (by actually using the
2879 underlying system shell). This way, all @magics automatically get
2885 underlying system shell). This way, all @magics automatically get
2880 shell expansion for variables. Thanks to a comment by Alex
2886 shell expansion for variables. Thanks to a comment by Alex
2881 Schmolck.
2887 Schmolck.
2882
2888
2883 2004-04-04 Fernando Perez <fperez@colorado.edu>
2889 2004-04-04 Fernando Perez <fperez@colorado.edu>
2884
2890
2885 * IPython/iplib.py (InteractiveShell.interact): Added a special
2891 * IPython/iplib.py (InteractiveShell.interact): Added a special
2886 trap for a debugger quit exception, which is basically impossible
2892 trap for a debugger quit exception, which is basically impossible
2887 to handle by normal mechanisms, given what pdb does to the stack.
2893 to handle by normal mechanisms, given what pdb does to the stack.
2888 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2894 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2889
2895
2890 2004-04-03 Fernando Perez <fperez@colorado.edu>
2896 2004-04-03 Fernando Perez <fperez@colorado.edu>
2891
2897
2892 * IPython/genutils.py (Term): Standardized the names of the Term
2898 * IPython/genutils.py (Term): Standardized the names of the Term
2893 class streams to cin/cout/cerr, following C++ naming conventions
2899 class streams to cin/cout/cerr, following C++ naming conventions
2894 (I can't use in/out/err because 'in' is not a valid attribute
2900 (I can't use in/out/err because 'in' is not a valid attribute
2895 name).
2901 name).
2896
2902
2897 * IPython/iplib.py (InteractiveShell.interact): don't increment
2903 * IPython/iplib.py (InteractiveShell.interact): don't increment
2898 the prompt if there's no user input. By Daniel 'Dang' Griffith
2904 the prompt if there's no user input. By Daniel 'Dang' Griffith
2899 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2905 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2900 Francois Pinard.
2906 Francois Pinard.
2901
2907
2902 2004-04-02 Fernando Perez <fperez@colorado.edu>
2908 2004-04-02 Fernando Perez <fperez@colorado.edu>
2903
2909
2904 * IPython/genutils.py (Stream.__init__): Modified to survive at
2910 * IPython/genutils.py (Stream.__init__): Modified to survive at
2905 least importing in contexts where stdin/out/err aren't true file
2911 least importing in contexts where stdin/out/err aren't true file
2906 objects, such as PyCrust (they lack fileno() and mode). However,
2912 objects, such as PyCrust (they lack fileno() and mode). However,
2907 the recovery facilities which rely on these things existing will
2913 the recovery facilities which rely on these things existing will
2908 not work.
2914 not work.
2909
2915
2910 2004-04-01 Fernando Perez <fperez@colorado.edu>
2916 2004-04-01 Fernando Perez <fperez@colorado.edu>
2911
2917
2912 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2918 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2913 use the new getoutputerror() function, so it properly
2919 use the new getoutputerror() function, so it properly
2914 distinguishes stdout/err.
2920 distinguishes stdout/err.
2915
2921
2916 * IPython/genutils.py (getoutputerror): added a function to
2922 * IPython/genutils.py (getoutputerror): added a function to
2917 capture separately the standard output and error of a command.
2923 capture separately the standard output and error of a command.
2918 After a comment from dang on the mailing lists. This code is
2924 After a comment from dang on the mailing lists. This code is
2919 basically a modified version of commands.getstatusoutput(), from
2925 basically a modified version of commands.getstatusoutput(), from
2920 the standard library.
2926 the standard library.
2921
2927
2922 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2928 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2923 '!!' as a special syntax (shorthand) to access @sx.
2929 '!!' as a special syntax (shorthand) to access @sx.
2924
2930
2925 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2931 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2926 command and return its output as a list split on '\n'.
2932 command and return its output as a list split on '\n'.
2927
2933
2928 2004-03-31 Fernando Perez <fperez@colorado.edu>
2934 2004-03-31 Fernando Perez <fperez@colorado.edu>
2929
2935
2930 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2936 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2931 method to dictionaries used as FakeModule instances if they lack
2937 method to dictionaries used as FakeModule instances if they lack
2932 it. At least pydoc in python2.3 breaks for runtime-defined
2938 it. At least pydoc in python2.3 breaks for runtime-defined
2933 functions without this hack. At some point I need to _really_
2939 functions without this hack. At some point I need to _really_
2934 understand what FakeModule is doing, because it's a gross hack.
2940 understand what FakeModule is doing, because it's a gross hack.
2935 But it solves Arnd's problem for now...
2941 But it solves Arnd's problem for now...
2936
2942
2937 2004-02-27 Fernando Perez <fperez@colorado.edu>
2943 2004-02-27 Fernando Perez <fperez@colorado.edu>
2938
2944
2939 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2945 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2940 mode would behave erratically. Also increased the number of
2946 mode would behave erratically. Also increased the number of
2941 possible logs in rotate mod to 999. Thanks to Rod Holland
2947 possible logs in rotate mod to 999. Thanks to Rod Holland
2942 <rhh@StructureLABS.com> for the report and fixes.
2948 <rhh@StructureLABS.com> for the report and fixes.
2943
2949
2944 2004-02-26 Fernando Perez <fperez@colorado.edu>
2950 2004-02-26 Fernando Perez <fperez@colorado.edu>
2945
2951
2946 * IPython/genutils.py (page): Check that the curses module really
2952 * IPython/genutils.py (page): Check that the curses module really
2947 has the initscr attribute before trying to use it. For some
2953 has the initscr attribute before trying to use it. For some
2948 reason, the Solaris curses module is missing this. I think this
2954 reason, the Solaris curses module is missing this. I think this
2949 should be considered a Solaris python bug, but I'm not sure.
2955 should be considered a Solaris python bug, but I'm not sure.
2950
2956
2951 2004-01-17 Fernando Perez <fperez@colorado.edu>
2957 2004-01-17 Fernando Perez <fperez@colorado.edu>
2952
2958
2953 * IPython/genutils.py (Stream.__init__): Changes to try to make
2959 * IPython/genutils.py (Stream.__init__): Changes to try to make
2954 ipython robust against stdin/out/err being closed by the user.
2960 ipython robust against stdin/out/err being closed by the user.
2955 This is 'user error' (and blocks a normal python session, at least
2961 This is 'user error' (and blocks a normal python session, at least
2956 the stdout case). However, Ipython should be able to survive such
2962 the stdout case). However, Ipython should be able to survive such
2957 instances of abuse as gracefully as possible. To simplify the
2963 instances of abuse as gracefully as possible. To simplify the
2958 coding and maintain compatibility with Gary Bishop's Term
2964 coding and maintain compatibility with Gary Bishop's Term
2959 contributions, I've made use of classmethods for this. I think
2965 contributions, I've made use of classmethods for this. I think
2960 this introduces a dependency on python 2.2.
2966 this introduces a dependency on python 2.2.
2961
2967
2962 2004-01-13 Fernando Perez <fperez@colorado.edu>
2968 2004-01-13 Fernando Perez <fperez@colorado.edu>
2963
2969
2964 * IPython/numutils.py (exp_safe): simplified the code a bit and
2970 * IPython/numutils.py (exp_safe): simplified the code a bit and
2965 removed the need for importing the kinds module altogether.
2971 removed the need for importing the kinds module altogether.
2966
2972
2967 2004-01-06 Fernando Perez <fperez@colorado.edu>
2973 2004-01-06 Fernando Perez <fperez@colorado.edu>
2968
2974
2969 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2975 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2970 a magic function instead, after some community feedback. No
2976 a magic function instead, after some community feedback. No
2971 special syntax will exist for it, but its name is deliberately
2977 special syntax will exist for it, but its name is deliberately
2972 very short.
2978 very short.
2973
2979
2974 2003-12-20 Fernando Perez <fperez@colorado.edu>
2980 2003-12-20 Fernando Perez <fperez@colorado.edu>
2975
2981
2976 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2982 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2977 new functionality, to automagically assign the result of a shell
2983 new functionality, to automagically assign the result of a shell
2978 command to a variable. I'll solicit some community feedback on
2984 command to a variable. I'll solicit some community feedback on
2979 this before making it permanent.
2985 this before making it permanent.
2980
2986
2981 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2987 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2982 requested about callables for which inspect couldn't obtain a
2988 requested about callables for which inspect couldn't obtain a
2983 proper argspec. Thanks to a crash report sent by Etienne
2989 proper argspec. Thanks to a crash report sent by Etienne
2984 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2990 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2985
2991
2986 2003-12-09 Fernando Perez <fperez@colorado.edu>
2992 2003-12-09 Fernando Perez <fperez@colorado.edu>
2987
2993
2988 * IPython/genutils.py (page): patch for the pager to work across
2994 * IPython/genutils.py (page): patch for the pager to work across
2989 various versions of Windows. By Gary Bishop.
2995 various versions of Windows. By Gary Bishop.
2990
2996
2991 2003-12-04 Fernando Perez <fperez@colorado.edu>
2997 2003-12-04 Fernando Perez <fperez@colorado.edu>
2992
2998
2993 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2999 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2994 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3000 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2995 While I tested this and it looks ok, there may still be corner
3001 While I tested this and it looks ok, there may still be corner
2996 cases I've missed.
3002 cases I've missed.
2997
3003
2998 2003-12-01 Fernando Perez <fperez@colorado.edu>
3004 2003-12-01 Fernando Perez <fperez@colorado.edu>
2999
3005
3000 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3006 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3001 where a line like 'p,q=1,2' would fail because the automagic
3007 where a line like 'p,q=1,2' would fail because the automagic
3002 system would be triggered for @p.
3008 system would be triggered for @p.
3003
3009
3004 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3010 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3005 cleanups, code unmodified.
3011 cleanups, code unmodified.
3006
3012
3007 * IPython/genutils.py (Term): added a class for IPython to handle
3013 * IPython/genutils.py (Term): added a class for IPython to handle
3008 output. In most cases it will just be a proxy for stdout/err, but
3014 output. In most cases it will just be a proxy for stdout/err, but
3009 having this allows modifications to be made for some platforms,
3015 having this allows modifications to be made for some platforms,
3010 such as handling color escapes under Windows. All of this code
3016 such as handling color escapes under Windows. All of this code
3011 was contributed by Gary Bishop, with minor modifications by me.
3017 was contributed by Gary Bishop, with minor modifications by me.
3012 The actual changes affect many files.
3018 The actual changes affect many files.
3013
3019
3014 2003-11-30 Fernando Perez <fperez@colorado.edu>
3020 2003-11-30 Fernando Perez <fperez@colorado.edu>
3015
3021
3016 * IPython/iplib.py (file_matches): new completion code, courtesy
3022 * IPython/iplib.py (file_matches): new completion code, courtesy
3017 of Jeff Collins. This enables filename completion again under
3023 of Jeff Collins. This enables filename completion again under
3018 python 2.3, which disabled it at the C level.
3024 python 2.3, which disabled it at the C level.
3019
3025
3020 2003-11-11 Fernando Perez <fperez@colorado.edu>
3026 2003-11-11 Fernando Perez <fperez@colorado.edu>
3021
3027
3022 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3028 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3023 for Numeric.array(map(...)), but often convenient.
3029 for Numeric.array(map(...)), but often convenient.
3024
3030
3025 2003-11-05 Fernando Perez <fperez@colorado.edu>
3031 2003-11-05 Fernando Perez <fperez@colorado.edu>
3026
3032
3027 * IPython/numutils.py (frange): Changed a call from int() to
3033 * IPython/numutils.py (frange): Changed a call from int() to
3028 int(round()) to prevent a problem reported with arange() in the
3034 int(round()) to prevent a problem reported with arange() in the
3029 numpy list.
3035 numpy list.
3030
3036
3031 2003-10-06 Fernando Perez <fperez@colorado.edu>
3037 2003-10-06 Fernando Perez <fperez@colorado.edu>
3032
3038
3033 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3039 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3034 prevent crashes if sys lacks an argv attribute (it happens with
3040 prevent crashes if sys lacks an argv attribute (it happens with
3035 embedded interpreters which build a bare-bones sys module).
3041 embedded interpreters which build a bare-bones sys module).
3036 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3042 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3037
3043
3038 2003-09-24 Fernando Perez <fperez@colorado.edu>
3044 2003-09-24 Fernando Perez <fperez@colorado.edu>
3039
3045
3040 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3046 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3041 to protect against poorly written user objects where __getattr__
3047 to protect against poorly written user objects where __getattr__
3042 raises exceptions other than AttributeError. Thanks to a bug
3048 raises exceptions other than AttributeError. Thanks to a bug
3043 report by Oliver Sander <osander-AT-gmx.de>.
3049 report by Oliver Sander <osander-AT-gmx.de>.
3044
3050
3045 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3051 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3046 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3052 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3047
3053
3048 2003-09-09 Fernando Perez <fperez@colorado.edu>
3054 2003-09-09 Fernando Perez <fperez@colorado.edu>
3049
3055
3050 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3056 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3051 unpacking a list whith a callable as first element would
3057 unpacking a list whith a callable as first element would
3052 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3058 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3053 Collins.
3059 Collins.
3054
3060
3055 2003-08-25 *** Released version 0.5.0
3061 2003-08-25 *** Released version 0.5.0
3056
3062
3057 2003-08-22 Fernando Perez <fperez@colorado.edu>
3063 2003-08-22 Fernando Perez <fperez@colorado.edu>
3058
3064
3059 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3065 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3060 improperly defined user exceptions. Thanks to feedback from Mark
3066 improperly defined user exceptions. Thanks to feedback from Mark
3061 Russell <mrussell-AT-verio.net>.
3067 Russell <mrussell-AT-verio.net>.
3062
3068
3063 2003-08-20 Fernando Perez <fperez@colorado.edu>
3069 2003-08-20 Fernando Perez <fperez@colorado.edu>
3064
3070
3065 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3071 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3066 printing so that it would print multi-line string forms starting
3072 printing so that it would print multi-line string forms starting
3067 with a new line. This way the formatting is better respected for
3073 with a new line. This way the formatting is better respected for
3068 objects which work hard to make nice string forms.
3074 objects which work hard to make nice string forms.
3069
3075
3070 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3076 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3071 autocall would overtake data access for objects with both
3077 autocall would overtake data access for objects with both
3072 __getitem__ and __call__.
3078 __getitem__ and __call__.
3073
3079
3074 2003-08-19 *** Released version 0.5.0-rc1
3080 2003-08-19 *** Released version 0.5.0-rc1
3075
3081
3076 2003-08-19 Fernando Perez <fperez@colorado.edu>
3082 2003-08-19 Fernando Perez <fperez@colorado.edu>
3077
3083
3078 * IPython/deep_reload.py (load_tail): single tiny change here
3084 * IPython/deep_reload.py (load_tail): single tiny change here
3079 seems to fix the long-standing bug of dreload() failing to work
3085 seems to fix the long-standing bug of dreload() failing to work
3080 for dotted names. But this module is pretty tricky, so I may have
3086 for dotted names. But this module is pretty tricky, so I may have
3081 missed some subtlety. Needs more testing!.
3087 missed some subtlety. Needs more testing!.
3082
3088
3083 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3089 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3084 exceptions which have badly implemented __str__ methods.
3090 exceptions which have badly implemented __str__ methods.
3085 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3091 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3086 which I've been getting reports about from Python 2.3 users. I
3092 which I've been getting reports about from Python 2.3 users. I
3087 wish I had a simple test case to reproduce the problem, so I could
3093 wish I had a simple test case to reproduce the problem, so I could
3088 either write a cleaner workaround or file a bug report if
3094 either write a cleaner workaround or file a bug report if
3089 necessary.
3095 necessary.
3090
3096
3091 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3097 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3092 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3098 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3093 a bug report by Tjabo Kloppenburg.
3099 a bug report by Tjabo Kloppenburg.
3094
3100
3095 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3101 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3096 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3102 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3097 seems rather unstable. Thanks to a bug report by Tjabo
3103 seems rather unstable. Thanks to a bug report by Tjabo
3098 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3104 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3099
3105
3100 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3106 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3101 this out soon because of the critical fixes in the inner loop for
3107 this out soon because of the critical fixes in the inner loop for
3102 generators.
3108 generators.
3103
3109
3104 * IPython/Magic.py (Magic.getargspec): removed. This (and
3110 * IPython/Magic.py (Magic.getargspec): removed. This (and
3105 _get_def) have been obsoleted by OInspect for a long time, I
3111 _get_def) have been obsoleted by OInspect for a long time, I
3106 hadn't noticed that they were dead code.
3112 hadn't noticed that they were dead code.
3107 (Magic._ofind): restored _ofind functionality for a few literals
3113 (Magic._ofind): restored _ofind functionality for a few literals
3108 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3114 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3109 for things like "hello".capitalize?, since that would require a
3115 for things like "hello".capitalize?, since that would require a
3110 potentially dangerous eval() again.
3116 potentially dangerous eval() again.
3111
3117
3112 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3118 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3113 logic a bit more to clean up the escapes handling and minimize the
3119 logic a bit more to clean up the escapes handling and minimize the
3114 use of _ofind to only necessary cases. The interactive 'feel' of
3120 use of _ofind to only necessary cases. The interactive 'feel' of
3115 IPython should have improved quite a bit with the changes in
3121 IPython should have improved quite a bit with the changes in
3116 _prefilter and _ofind (besides being far safer than before).
3122 _prefilter and _ofind (besides being far safer than before).
3117
3123
3118 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3124 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3119 obscure, never reported). Edit would fail to find the object to
3125 obscure, never reported). Edit would fail to find the object to
3120 edit under some circumstances.
3126 edit under some circumstances.
3121 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3127 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3122 which were causing double-calling of generators. Those eval calls
3128 which were causing double-calling of generators. Those eval calls
3123 were _very_ dangerous, since code with side effects could be
3129 were _very_ dangerous, since code with side effects could be
3124 triggered. As they say, 'eval is evil'... These were the
3130 triggered. As they say, 'eval is evil'... These were the
3125 nastiest evals in IPython. Besides, _ofind is now far simpler,
3131 nastiest evals in IPython. Besides, _ofind is now far simpler,
3126 and it should also be quite a bit faster. Its use of inspect is
3132 and it should also be quite a bit faster. Its use of inspect is
3127 also safer, so perhaps some of the inspect-related crashes I've
3133 also safer, so perhaps some of the inspect-related crashes I've
3128 seen lately with Python 2.3 might be taken care of. That will
3134 seen lately with Python 2.3 might be taken care of. That will
3129 need more testing.
3135 need more testing.
3130
3136
3131 2003-08-17 Fernando Perez <fperez@colorado.edu>
3137 2003-08-17 Fernando Perez <fperez@colorado.edu>
3132
3138
3133 * IPython/iplib.py (InteractiveShell._prefilter): significant
3139 * IPython/iplib.py (InteractiveShell._prefilter): significant
3134 simplifications to the logic for handling user escapes. Faster
3140 simplifications to the logic for handling user escapes. Faster
3135 and simpler code.
3141 and simpler code.
3136
3142
3137 2003-08-14 Fernando Perez <fperez@colorado.edu>
3143 2003-08-14 Fernando Perez <fperez@colorado.edu>
3138
3144
3139 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3145 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3140 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3146 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3141 but it should be quite a bit faster. And the recursive version
3147 but it should be quite a bit faster. And the recursive version
3142 generated O(log N) intermediate storage for all rank>1 arrays,
3148 generated O(log N) intermediate storage for all rank>1 arrays,
3143 even if they were contiguous.
3149 even if they were contiguous.
3144 (l1norm): Added this function.
3150 (l1norm): Added this function.
3145 (norm): Added this function for arbitrary norms (including
3151 (norm): Added this function for arbitrary norms (including
3146 l-infinity). l1 and l2 are still special cases for convenience
3152 l-infinity). l1 and l2 are still special cases for convenience
3147 and speed.
3153 and speed.
3148
3154
3149 2003-08-03 Fernando Perez <fperez@colorado.edu>
3155 2003-08-03 Fernando Perez <fperez@colorado.edu>
3150
3156
3151 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3157 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3152 exceptions, which now raise PendingDeprecationWarnings in Python
3158 exceptions, which now raise PendingDeprecationWarnings in Python
3153 2.3. There were some in Magic and some in Gnuplot2.
3159 2.3. There were some in Magic and some in Gnuplot2.
3154
3160
3155 2003-06-30 Fernando Perez <fperez@colorado.edu>
3161 2003-06-30 Fernando Perez <fperez@colorado.edu>
3156
3162
3157 * IPython/genutils.py (page): modified to call curses only for
3163 * IPython/genutils.py (page): modified to call curses only for
3158 terminals where TERM=='xterm'. After problems under many other
3164 terminals where TERM=='xterm'. After problems under many other
3159 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3165 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3160
3166
3161 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3167 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3162 would be triggered when readline was absent. This was just an old
3168 would be triggered when readline was absent. This was just an old
3163 debugging statement I'd forgotten to take out.
3169 debugging statement I'd forgotten to take out.
3164
3170
3165 2003-06-20 Fernando Perez <fperez@colorado.edu>
3171 2003-06-20 Fernando Perez <fperez@colorado.edu>
3166
3172
3167 * IPython/genutils.py (clock): modified to return only user time
3173 * IPython/genutils.py (clock): modified to return only user time
3168 (not counting system time), after a discussion on scipy. While
3174 (not counting system time), after a discussion on scipy. While
3169 system time may be a useful quantity occasionally, it may much
3175 system time may be a useful quantity occasionally, it may much
3170 more easily be skewed by occasional swapping or other similar
3176 more easily be skewed by occasional swapping or other similar
3171 activity.
3177 activity.
3172
3178
3173 2003-06-05 Fernando Perez <fperez@colorado.edu>
3179 2003-06-05 Fernando Perez <fperez@colorado.edu>
3174
3180
3175 * IPython/numutils.py (identity): new function, for building
3181 * IPython/numutils.py (identity): new function, for building
3176 arbitrary rank Kronecker deltas (mostly backwards compatible with
3182 arbitrary rank Kronecker deltas (mostly backwards compatible with
3177 Numeric.identity)
3183 Numeric.identity)
3178
3184
3179 2003-06-03 Fernando Perez <fperez@colorado.edu>
3185 2003-06-03 Fernando Perez <fperez@colorado.edu>
3180
3186
3181 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3187 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3182 arguments passed to magics with spaces, to allow trailing '\' to
3188 arguments passed to magics with spaces, to allow trailing '\' to
3183 work normally (mainly for Windows users).
3189 work normally (mainly for Windows users).
3184
3190
3185 2003-05-29 Fernando Perez <fperez@colorado.edu>
3191 2003-05-29 Fernando Perez <fperez@colorado.edu>
3186
3192
3187 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3193 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3188 instead of pydoc.help. This fixes a bizarre behavior where
3194 instead of pydoc.help. This fixes a bizarre behavior where
3189 printing '%s' % locals() would trigger the help system. Now
3195 printing '%s' % locals() would trigger the help system. Now
3190 ipython behaves like normal python does.
3196 ipython behaves like normal python does.
3191
3197
3192 Note that if one does 'from pydoc import help', the bizarre
3198 Note that if one does 'from pydoc import help', the bizarre
3193 behavior returns, but this will also happen in normal python, so
3199 behavior returns, but this will also happen in normal python, so
3194 it's not an ipython bug anymore (it has to do with how pydoc.help
3200 it's not an ipython bug anymore (it has to do with how pydoc.help
3195 is implemented).
3201 is implemented).
3196
3202
3197 2003-05-22 Fernando Perez <fperez@colorado.edu>
3203 2003-05-22 Fernando Perez <fperez@colorado.edu>
3198
3204
3199 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3205 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3200 return [] instead of None when nothing matches, also match to end
3206 return [] instead of None when nothing matches, also match to end
3201 of line. Patch by Gary Bishop.
3207 of line. Patch by Gary Bishop.
3202
3208
3203 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3209 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3204 protection as before, for files passed on the command line. This
3210 protection as before, for files passed on the command line. This
3205 prevents the CrashHandler from kicking in if user files call into
3211 prevents the CrashHandler from kicking in if user files call into
3206 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3212 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3207 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3213 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3208
3214
3209 2003-05-20 *** Released version 0.4.0
3215 2003-05-20 *** Released version 0.4.0
3210
3216
3211 2003-05-20 Fernando Perez <fperez@colorado.edu>
3217 2003-05-20 Fernando Perez <fperez@colorado.edu>
3212
3218
3213 * setup.py: added support for manpages. It's a bit hackish b/c of
3219 * setup.py: added support for manpages. It's a bit hackish b/c of
3214 a bug in the way the bdist_rpm distutils target handles gzipped
3220 a bug in the way the bdist_rpm distutils target handles gzipped
3215 manpages, but it works. After a patch by Jack.
3221 manpages, but it works. After a patch by Jack.
3216
3222
3217 2003-05-19 Fernando Perez <fperez@colorado.edu>
3223 2003-05-19 Fernando Perez <fperez@colorado.edu>
3218
3224
3219 * IPython/numutils.py: added a mockup of the kinds module, since
3225 * IPython/numutils.py: added a mockup of the kinds module, since
3220 it was recently removed from Numeric. This way, numutils will
3226 it was recently removed from Numeric. This way, numutils will
3221 work for all users even if they are missing kinds.
3227 work for all users even if they are missing kinds.
3222
3228
3223 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3229 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3224 failure, which can occur with SWIG-wrapped extensions. After a
3230 failure, which can occur with SWIG-wrapped extensions. After a
3225 crash report from Prabhu.
3231 crash report from Prabhu.
3226
3232
3227 2003-05-16 Fernando Perez <fperez@colorado.edu>
3233 2003-05-16 Fernando Perez <fperez@colorado.edu>
3228
3234
3229 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3235 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3230 protect ipython from user code which may call directly
3236 protect ipython from user code which may call directly
3231 sys.excepthook (this looks like an ipython crash to the user, even
3237 sys.excepthook (this looks like an ipython crash to the user, even
3232 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3238 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3233 This is especially important to help users of WxWindows, but may
3239 This is especially important to help users of WxWindows, but may
3234 also be useful in other cases.
3240 also be useful in other cases.
3235
3241
3236 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3242 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3237 an optional tb_offset to be specified, and to preserve exception
3243 an optional tb_offset to be specified, and to preserve exception
3238 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3244 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3239
3245
3240 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3246 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3241
3247
3242 2003-05-15 Fernando Perez <fperez@colorado.edu>
3248 2003-05-15 Fernando Perez <fperez@colorado.edu>
3243
3249
3244 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3250 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3245 installing for a new user under Windows.
3251 installing for a new user under Windows.
3246
3252
3247 2003-05-12 Fernando Perez <fperez@colorado.edu>
3253 2003-05-12 Fernando Perez <fperez@colorado.edu>
3248
3254
3249 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3255 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3250 handler for Emacs comint-based lines. Currently it doesn't do
3256 handler for Emacs comint-based lines. Currently it doesn't do
3251 much (but importantly, it doesn't update the history cache). In
3257 much (but importantly, it doesn't update the history cache). In
3252 the future it may be expanded if Alex needs more functionality
3258 the future it may be expanded if Alex needs more functionality
3253 there.
3259 there.
3254
3260
3255 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3261 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3256 info to crash reports.
3262 info to crash reports.
3257
3263
3258 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3264 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3259 just like Python's -c. Also fixed crash with invalid -color
3265 just like Python's -c. Also fixed crash with invalid -color
3260 option value at startup. Thanks to Will French
3266 option value at startup. Thanks to Will French
3261 <wfrench-AT-bestweb.net> for the bug report.
3267 <wfrench-AT-bestweb.net> for the bug report.
3262
3268
3263 2003-05-09 Fernando Perez <fperez@colorado.edu>
3269 2003-05-09 Fernando Perez <fperez@colorado.edu>
3264
3270
3265 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3271 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3266 to EvalDict (it's a mapping, after all) and simplified its code
3272 to EvalDict (it's a mapping, after all) and simplified its code
3267 quite a bit, after a nice discussion on c.l.py where Gustavo
3273 quite a bit, after a nice discussion on c.l.py where Gustavo
3268 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3274 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3269
3275
3270 2003-04-30 Fernando Perez <fperez@colorado.edu>
3276 2003-04-30 Fernando Perez <fperez@colorado.edu>
3271
3277
3272 * IPython/genutils.py (timings_out): modified it to reduce its
3278 * IPython/genutils.py (timings_out): modified it to reduce its
3273 overhead in the common reps==1 case.
3279 overhead in the common reps==1 case.
3274
3280
3275 2003-04-29 Fernando Perez <fperez@colorado.edu>
3281 2003-04-29 Fernando Perez <fperez@colorado.edu>
3276
3282
3277 * IPython/genutils.py (timings_out): Modified to use the resource
3283 * IPython/genutils.py (timings_out): Modified to use the resource
3278 module, which avoids the wraparound problems of time.clock().
3284 module, which avoids the wraparound problems of time.clock().
3279
3285
3280 2003-04-17 *** Released version 0.2.15pre4
3286 2003-04-17 *** Released version 0.2.15pre4
3281
3287
3282 2003-04-17 Fernando Perez <fperez@colorado.edu>
3288 2003-04-17 Fernando Perez <fperez@colorado.edu>
3283
3289
3284 * setup.py (scriptfiles): Split windows-specific stuff over to a
3290 * setup.py (scriptfiles): Split windows-specific stuff over to a
3285 separate file, in an attempt to have a Windows GUI installer.
3291 separate file, in an attempt to have a Windows GUI installer.
3286 That didn't work, but part of the groundwork is done.
3292 That didn't work, but part of the groundwork is done.
3287
3293
3288 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3294 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3289 indent/unindent with 4 spaces. Particularly useful in combination
3295 indent/unindent with 4 spaces. Particularly useful in combination
3290 with the new auto-indent option.
3296 with the new auto-indent option.
3291
3297
3292 2003-04-16 Fernando Perez <fperez@colorado.edu>
3298 2003-04-16 Fernando Perez <fperez@colorado.edu>
3293
3299
3294 * IPython/Magic.py: various replacements of self.rc for
3300 * IPython/Magic.py: various replacements of self.rc for
3295 self.shell.rc. A lot more remains to be done to fully disentangle
3301 self.shell.rc. A lot more remains to be done to fully disentangle
3296 this class from the main Shell class.
3302 this class from the main Shell class.
3297
3303
3298 * IPython/GnuplotRuntime.py: added checks for mouse support so
3304 * IPython/GnuplotRuntime.py: added checks for mouse support so
3299 that we don't try to enable it if the current gnuplot doesn't
3305 that we don't try to enable it if the current gnuplot doesn't
3300 really support it. Also added checks so that we don't try to
3306 really support it. Also added checks so that we don't try to
3301 enable persist under Windows (where Gnuplot doesn't recognize the
3307 enable persist under Windows (where Gnuplot doesn't recognize the
3302 option).
3308 option).
3303
3309
3304 * IPython/iplib.py (InteractiveShell.interact): Added optional
3310 * IPython/iplib.py (InteractiveShell.interact): Added optional
3305 auto-indenting code, after a patch by King C. Shu
3311 auto-indenting code, after a patch by King C. Shu
3306 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3312 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3307 get along well with pasting indented code. If I ever figure out
3313 get along well with pasting indented code. If I ever figure out
3308 how to make that part go well, it will become on by default.
3314 how to make that part go well, it will become on by default.
3309
3315
3310 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3316 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3311 crash ipython if there was an unmatched '%' in the user's prompt
3317 crash ipython if there was an unmatched '%' in the user's prompt
3312 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3318 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3313
3319
3314 * IPython/iplib.py (InteractiveShell.interact): removed the
3320 * IPython/iplib.py (InteractiveShell.interact): removed the
3315 ability to ask the user whether he wants to crash or not at the
3321 ability to ask the user whether he wants to crash or not at the
3316 'last line' exception handler. Calling functions at that point
3322 'last line' exception handler. Calling functions at that point
3317 changes the stack, and the error reports would have incorrect
3323 changes the stack, and the error reports would have incorrect
3318 tracebacks.
3324 tracebacks.
3319
3325
3320 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3326 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3321 pass through a peger a pretty-printed form of any object. After a
3327 pass through a peger a pretty-printed form of any object. After a
3322 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3328 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3323
3329
3324 2003-04-14 Fernando Perez <fperez@colorado.edu>
3330 2003-04-14 Fernando Perez <fperez@colorado.edu>
3325
3331
3326 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3332 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3327 all files in ~ would be modified at first install (instead of
3333 all files in ~ would be modified at first install (instead of
3328 ~/.ipython). This could be potentially disastrous, as the
3334 ~/.ipython). This could be potentially disastrous, as the
3329 modification (make line-endings native) could damage binary files.
3335 modification (make line-endings native) could damage binary files.
3330
3336
3331 2003-04-10 Fernando Perez <fperez@colorado.edu>
3337 2003-04-10 Fernando Perez <fperez@colorado.edu>
3332
3338
3333 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3339 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3334 handle only lines which are invalid python. This now means that
3340 handle only lines which are invalid python. This now means that
3335 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3341 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3336 for the bug report.
3342 for the bug report.
3337
3343
3338 2003-04-01 Fernando Perez <fperez@colorado.edu>
3344 2003-04-01 Fernando Perez <fperez@colorado.edu>
3339
3345
3340 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3346 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3341 where failing to set sys.last_traceback would crash pdb.pm().
3347 where failing to set sys.last_traceback would crash pdb.pm().
3342 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3348 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3343 report.
3349 report.
3344
3350
3345 2003-03-25 Fernando Perez <fperez@colorado.edu>
3351 2003-03-25 Fernando Perez <fperez@colorado.edu>
3346
3352
3347 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3353 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3348 before printing it (it had a lot of spurious blank lines at the
3354 before printing it (it had a lot of spurious blank lines at the
3349 end).
3355 end).
3350
3356
3351 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3357 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3352 output would be sent 21 times! Obviously people don't use this
3358 output would be sent 21 times! Obviously people don't use this
3353 too often, or I would have heard about it.
3359 too often, or I would have heard about it.
3354
3360
3355 2003-03-24 Fernando Perez <fperez@colorado.edu>
3361 2003-03-24 Fernando Perez <fperez@colorado.edu>
3356
3362
3357 * setup.py (scriptfiles): renamed the data_files parameter from
3363 * setup.py (scriptfiles): renamed the data_files parameter from
3358 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3364 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3359 for the patch.
3365 for the patch.
3360
3366
3361 2003-03-20 Fernando Perez <fperez@colorado.edu>
3367 2003-03-20 Fernando Perez <fperez@colorado.edu>
3362
3368
3363 * IPython/genutils.py (error): added error() and fatal()
3369 * IPython/genutils.py (error): added error() and fatal()
3364 functions.
3370 functions.
3365
3371
3366 2003-03-18 *** Released version 0.2.15pre3
3372 2003-03-18 *** Released version 0.2.15pre3
3367
3373
3368 2003-03-18 Fernando Perez <fperez@colorado.edu>
3374 2003-03-18 Fernando Perez <fperez@colorado.edu>
3369
3375
3370 * setupext/install_data_ext.py
3376 * setupext/install_data_ext.py
3371 (install_data_ext.initialize_options): Class contributed by Jack
3377 (install_data_ext.initialize_options): Class contributed by Jack
3372 Moffit for fixing the old distutils hack. He is sending this to
3378 Moffit for fixing the old distutils hack. He is sending this to
3373 the distutils folks so in the future we may not need it as a
3379 the distutils folks so in the future we may not need it as a
3374 private fix.
3380 private fix.
3375
3381
3376 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3382 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3377 changes for Debian packaging. See his patch for full details.
3383 changes for Debian packaging. See his patch for full details.
3378 The old distutils hack of making the ipythonrc* files carry a
3384 The old distutils hack of making the ipythonrc* files carry a
3379 bogus .py extension is gone, at last. Examples were moved to a
3385 bogus .py extension is gone, at last. Examples were moved to a
3380 separate subdir under doc/, and the separate executable scripts
3386 separate subdir under doc/, and the separate executable scripts
3381 now live in their own directory. Overall a great cleanup. The
3387 now live in their own directory. Overall a great cleanup. The
3382 manual was updated to use the new files, and setup.py has been
3388 manual was updated to use the new files, and setup.py has been
3383 fixed for this setup.
3389 fixed for this setup.
3384
3390
3385 * IPython/PyColorize.py (Parser.usage): made non-executable and
3391 * IPython/PyColorize.py (Parser.usage): made non-executable and
3386 created a pycolor wrapper around it to be included as a script.
3392 created a pycolor wrapper around it to be included as a script.
3387
3393
3388 2003-03-12 *** Released version 0.2.15pre2
3394 2003-03-12 *** Released version 0.2.15pre2
3389
3395
3390 2003-03-12 Fernando Perez <fperez@colorado.edu>
3396 2003-03-12 Fernando Perez <fperez@colorado.edu>
3391
3397
3392 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3398 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3393 long-standing problem with garbage characters in some terminals.
3399 long-standing problem with garbage characters in some terminals.
3394 The issue was really that the \001 and \002 escapes must _only_ be
3400 The issue was really that the \001 and \002 escapes must _only_ be
3395 passed to input prompts (which call readline), but _never_ to
3401 passed to input prompts (which call readline), but _never_ to
3396 normal text to be printed on screen. I changed ColorANSI to have
3402 normal text to be printed on screen. I changed ColorANSI to have
3397 two classes: TermColors and InputTermColors, each with the
3403 two classes: TermColors and InputTermColors, each with the
3398 appropriate escapes for input prompts or normal text. The code in
3404 appropriate escapes for input prompts or normal text. The code in
3399 Prompts.py got slightly more complicated, but this very old and
3405 Prompts.py got slightly more complicated, but this very old and
3400 annoying bug is finally fixed.
3406 annoying bug is finally fixed.
3401
3407
3402 All the credit for nailing down the real origin of this problem
3408 All the credit for nailing down the real origin of this problem
3403 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3409 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3404 *Many* thanks to him for spending quite a bit of effort on this.
3410 *Many* thanks to him for spending quite a bit of effort on this.
3405
3411
3406 2003-03-05 *** Released version 0.2.15pre1
3412 2003-03-05 *** Released version 0.2.15pre1
3407
3413
3408 2003-03-03 Fernando Perez <fperez@colorado.edu>
3414 2003-03-03 Fernando Perez <fperez@colorado.edu>
3409
3415
3410 * IPython/FakeModule.py: Moved the former _FakeModule to a
3416 * IPython/FakeModule.py: Moved the former _FakeModule to a
3411 separate file, because it's also needed by Magic (to fix a similar
3417 separate file, because it's also needed by Magic (to fix a similar
3412 pickle-related issue in @run).
3418 pickle-related issue in @run).
3413
3419
3414 2003-03-02 Fernando Perez <fperez@colorado.edu>
3420 2003-03-02 Fernando Perez <fperez@colorado.edu>
3415
3421
3416 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3422 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3417 the autocall option at runtime.
3423 the autocall option at runtime.
3418 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3424 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3419 across Magic.py to start separating Magic from InteractiveShell.
3425 across Magic.py to start separating Magic from InteractiveShell.
3420 (Magic._ofind): Fixed to return proper namespace for dotted
3426 (Magic._ofind): Fixed to return proper namespace for dotted
3421 names. Before, a dotted name would always return 'not currently
3427 names. Before, a dotted name would always return 'not currently
3422 defined', because it would find the 'parent'. s.x would be found,
3428 defined', because it would find the 'parent'. s.x would be found,
3423 but since 'x' isn't defined by itself, it would get confused.
3429 but since 'x' isn't defined by itself, it would get confused.
3424 (Magic.magic_run): Fixed pickling problems reported by Ralf
3430 (Magic.magic_run): Fixed pickling problems reported by Ralf
3425 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3431 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3426 that I'd used when Mike Heeter reported similar issues at the
3432 that I'd used when Mike Heeter reported similar issues at the
3427 top-level, but now for @run. It boils down to injecting the
3433 top-level, but now for @run. It boils down to injecting the
3428 namespace where code is being executed with something that looks
3434 namespace where code is being executed with something that looks
3429 enough like a module to fool pickle.dump(). Since a pickle stores
3435 enough like a module to fool pickle.dump(). Since a pickle stores
3430 a named reference to the importing module, we need this for
3436 a named reference to the importing module, we need this for
3431 pickles to save something sensible.
3437 pickles to save something sensible.
3432
3438
3433 * IPython/ipmaker.py (make_IPython): added an autocall option.
3439 * IPython/ipmaker.py (make_IPython): added an autocall option.
3434
3440
3435 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3441 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3436 the auto-eval code. Now autocalling is an option, and the code is
3442 the auto-eval code. Now autocalling is an option, and the code is
3437 also vastly safer. There is no more eval() involved at all.
3443 also vastly safer. There is no more eval() involved at all.
3438
3444
3439 2003-03-01 Fernando Perez <fperez@colorado.edu>
3445 2003-03-01 Fernando Perez <fperez@colorado.edu>
3440
3446
3441 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3447 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3442 dict with named keys instead of a tuple.
3448 dict with named keys instead of a tuple.
3443
3449
3444 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3450 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3445
3451
3446 * setup.py (make_shortcut): Fixed message about directories
3452 * setup.py (make_shortcut): Fixed message about directories
3447 created during Windows installation (the directories were ok, just
3453 created during Windows installation (the directories were ok, just
3448 the printed message was misleading). Thanks to Chris Liechti
3454 the printed message was misleading). Thanks to Chris Liechti
3449 <cliechti-AT-gmx.net> for the heads up.
3455 <cliechti-AT-gmx.net> for the heads up.
3450
3456
3451 2003-02-21 Fernando Perez <fperez@colorado.edu>
3457 2003-02-21 Fernando Perez <fperez@colorado.edu>
3452
3458
3453 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3459 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3454 of ValueError exception when checking for auto-execution. This
3460 of ValueError exception when checking for auto-execution. This
3455 one is raised by things like Numeric arrays arr.flat when the
3461 one is raised by things like Numeric arrays arr.flat when the
3456 array is non-contiguous.
3462 array is non-contiguous.
3457
3463
3458 2003-01-31 Fernando Perez <fperez@colorado.edu>
3464 2003-01-31 Fernando Perez <fperez@colorado.edu>
3459
3465
3460 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3466 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3461 not return any value at all (even though the command would get
3467 not return any value at all (even though the command would get
3462 executed).
3468 executed).
3463 (xsys): Flush stdout right after printing the command to ensure
3469 (xsys): Flush stdout right after printing the command to ensure
3464 proper ordering of commands and command output in the total
3470 proper ordering of commands and command output in the total
3465 output.
3471 output.
3466 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3472 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3467 system/getoutput as defaults. The old ones are kept for
3473 system/getoutput as defaults. The old ones are kept for
3468 compatibility reasons, so no code which uses this library needs
3474 compatibility reasons, so no code which uses this library needs
3469 changing.
3475 changing.
3470
3476
3471 2003-01-27 *** Released version 0.2.14
3477 2003-01-27 *** Released version 0.2.14
3472
3478
3473 2003-01-25 Fernando Perez <fperez@colorado.edu>
3479 2003-01-25 Fernando Perez <fperez@colorado.edu>
3474
3480
3475 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3481 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3476 functions defined in previous edit sessions could not be re-edited
3482 functions defined in previous edit sessions could not be re-edited
3477 (because the temp files were immediately removed). Now temp files
3483 (because the temp files were immediately removed). Now temp files
3478 are removed only at IPython's exit.
3484 are removed only at IPython's exit.
3479 (Magic.magic_run): Improved @run to perform shell-like expansions
3485 (Magic.magic_run): Improved @run to perform shell-like expansions
3480 on its arguments (~users and $VARS). With this, @run becomes more
3486 on its arguments (~users and $VARS). With this, @run becomes more
3481 like a normal command-line.
3487 like a normal command-line.
3482
3488
3483 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3489 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3484 bugs related to embedding and cleaned up that code. A fairly
3490 bugs related to embedding and cleaned up that code. A fairly
3485 important one was the impossibility to access the global namespace
3491 important one was the impossibility to access the global namespace
3486 through the embedded IPython (only local variables were visible).
3492 through the embedded IPython (only local variables were visible).
3487
3493
3488 2003-01-14 Fernando Perez <fperez@colorado.edu>
3494 2003-01-14 Fernando Perez <fperez@colorado.edu>
3489
3495
3490 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3496 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3491 auto-calling to be a bit more conservative. Now it doesn't get
3497 auto-calling to be a bit more conservative. Now it doesn't get
3492 triggered if any of '!=()<>' are in the rest of the input line, to
3498 triggered if any of '!=()<>' are in the rest of the input line, to
3493 allow comparing callables. Thanks to Alex for the heads up.
3499 allow comparing callables. Thanks to Alex for the heads up.
3494
3500
3495 2003-01-07 Fernando Perez <fperez@colorado.edu>
3501 2003-01-07 Fernando Perez <fperez@colorado.edu>
3496
3502
3497 * IPython/genutils.py (page): fixed estimation of the number of
3503 * IPython/genutils.py (page): fixed estimation of the number of
3498 lines in a string to be paged to simply count newlines. This
3504 lines in a string to be paged to simply count newlines. This
3499 prevents over-guessing due to embedded escape sequences. A better
3505 prevents over-guessing due to embedded escape sequences. A better
3500 long-term solution would involve stripping out the control chars
3506 long-term solution would involve stripping out the control chars
3501 for the count, but it's potentially so expensive I just don't
3507 for the count, but it's potentially so expensive I just don't
3502 think it's worth doing.
3508 think it's worth doing.
3503
3509
3504 2002-12-19 *** Released version 0.2.14pre50
3510 2002-12-19 *** Released version 0.2.14pre50
3505
3511
3506 2002-12-19 Fernando Perez <fperez@colorado.edu>
3512 2002-12-19 Fernando Perez <fperez@colorado.edu>
3507
3513
3508 * tools/release (version): Changed release scripts to inform
3514 * tools/release (version): Changed release scripts to inform
3509 Andrea and build a NEWS file with a list of recent changes.
3515 Andrea and build a NEWS file with a list of recent changes.
3510
3516
3511 * IPython/ColorANSI.py (__all__): changed terminal detection
3517 * IPython/ColorANSI.py (__all__): changed terminal detection
3512 code. Seems to work better for xterms without breaking
3518 code. Seems to work better for xterms without breaking
3513 konsole. Will need more testing to determine if WinXP and Mac OSX
3519 konsole. Will need more testing to determine if WinXP and Mac OSX
3514 also work ok.
3520 also work ok.
3515
3521
3516 2002-12-18 *** Released version 0.2.14pre49
3522 2002-12-18 *** Released version 0.2.14pre49
3517
3523
3518 2002-12-18 Fernando Perez <fperez@colorado.edu>
3524 2002-12-18 Fernando Perez <fperez@colorado.edu>
3519
3525
3520 * Docs: added new info about Mac OSX, from Andrea.
3526 * Docs: added new info about Mac OSX, from Andrea.
3521
3527
3522 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3528 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3523 allow direct plotting of python strings whose format is the same
3529 allow direct plotting of python strings whose format is the same
3524 of gnuplot data files.
3530 of gnuplot data files.
3525
3531
3526 2002-12-16 Fernando Perez <fperez@colorado.edu>
3532 2002-12-16 Fernando Perez <fperez@colorado.edu>
3527
3533
3528 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3534 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3529 value of exit question to be acknowledged.
3535 value of exit question to be acknowledged.
3530
3536
3531 2002-12-03 Fernando Perez <fperez@colorado.edu>
3537 2002-12-03 Fernando Perez <fperez@colorado.edu>
3532
3538
3533 * IPython/ipmaker.py: removed generators, which had been added
3539 * IPython/ipmaker.py: removed generators, which had been added
3534 by mistake in an earlier debugging run. This was causing trouble
3540 by mistake in an earlier debugging run. This was causing trouble
3535 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3541 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3536 for pointing this out.
3542 for pointing this out.
3537
3543
3538 2002-11-17 Fernando Perez <fperez@colorado.edu>
3544 2002-11-17 Fernando Perez <fperez@colorado.edu>
3539
3545
3540 * Manual: updated the Gnuplot section.
3546 * Manual: updated the Gnuplot section.
3541
3547
3542 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3548 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3543 a much better split of what goes in Runtime and what goes in
3549 a much better split of what goes in Runtime and what goes in
3544 Interactive.
3550 Interactive.
3545
3551
3546 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3552 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3547 being imported from iplib.
3553 being imported from iplib.
3548
3554
3549 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3555 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3550 for command-passing. Now the global Gnuplot instance is called
3556 for command-passing. Now the global Gnuplot instance is called
3551 'gp' instead of 'g', which was really a far too fragile and
3557 'gp' instead of 'g', which was really a far too fragile and
3552 common name.
3558 common name.
3553
3559
3554 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3560 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3555 bounding boxes generated by Gnuplot for square plots.
3561 bounding boxes generated by Gnuplot for square plots.
3556
3562
3557 * IPython/genutils.py (popkey): new function added. I should
3563 * IPython/genutils.py (popkey): new function added. I should
3558 suggest this on c.l.py as a dict method, it seems useful.
3564 suggest this on c.l.py as a dict method, it seems useful.
3559
3565
3560 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3566 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3561 to transparently handle PostScript generation. MUCH better than
3567 to transparently handle PostScript generation. MUCH better than
3562 the previous plot_eps/replot_eps (which I removed now). The code
3568 the previous plot_eps/replot_eps (which I removed now). The code
3563 is also fairly clean and well documented now (including
3569 is also fairly clean and well documented now (including
3564 docstrings).
3570 docstrings).
3565
3571
3566 2002-11-13 Fernando Perez <fperez@colorado.edu>
3572 2002-11-13 Fernando Perez <fperez@colorado.edu>
3567
3573
3568 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3574 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3569 (inconsistent with options).
3575 (inconsistent with options).
3570
3576
3571 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3577 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3572 manually disabled, I don't know why. Fixed it.
3578 manually disabled, I don't know why. Fixed it.
3573 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3579 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3574 eps output.
3580 eps output.
3575
3581
3576 2002-11-12 Fernando Perez <fperez@colorado.edu>
3582 2002-11-12 Fernando Perez <fperez@colorado.edu>
3577
3583
3578 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3584 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3579 don't propagate up to caller. Fixes crash reported by François
3585 don't propagate up to caller. Fixes crash reported by François
3580 Pinard.
3586 Pinard.
3581
3587
3582 2002-11-09 Fernando Perez <fperez@colorado.edu>
3588 2002-11-09 Fernando Perez <fperez@colorado.edu>
3583
3589
3584 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3590 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3585 history file for new users.
3591 history file for new users.
3586 (make_IPython): fixed bug where initial install would leave the
3592 (make_IPython): fixed bug where initial install would leave the
3587 user running in the .ipython dir.
3593 user running in the .ipython dir.
3588 (make_IPython): fixed bug where config dir .ipython would be
3594 (make_IPython): fixed bug where config dir .ipython would be
3589 created regardless of the given -ipythondir option. Thanks to Cory
3595 created regardless of the given -ipythondir option. Thanks to Cory
3590 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3596 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3591
3597
3592 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3598 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3593 type confirmations. Will need to use it in all of IPython's code
3599 type confirmations. Will need to use it in all of IPython's code
3594 consistently.
3600 consistently.
3595
3601
3596 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3602 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3597 context to print 31 lines instead of the default 5. This will make
3603 context to print 31 lines instead of the default 5. This will make
3598 the crash reports extremely detailed in case the problem is in
3604 the crash reports extremely detailed in case the problem is in
3599 libraries I don't have access to.
3605 libraries I don't have access to.
3600
3606
3601 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3607 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3602 line of defense' code to still crash, but giving users fair
3608 line of defense' code to still crash, but giving users fair
3603 warning. I don't want internal errors to go unreported: if there's
3609 warning. I don't want internal errors to go unreported: if there's
3604 an internal problem, IPython should crash and generate a full
3610 an internal problem, IPython should crash and generate a full
3605 report.
3611 report.
3606
3612
3607 2002-11-08 Fernando Perez <fperez@colorado.edu>
3613 2002-11-08 Fernando Perez <fperez@colorado.edu>
3608
3614
3609 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3615 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3610 otherwise uncaught exceptions which can appear if people set
3616 otherwise uncaught exceptions which can appear if people set
3611 sys.stdout to something badly broken. Thanks to a crash report
3617 sys.stdout to something badly broken. Thanks to a crash report
3612 from henni-AT-mail.brainbot.com.
3618 from henni-AT-mail.brainbot.com.
3613
3619
3614 2002-11-04 Fernando Perez <fperez@colorado.edu>
3620 2002-11-04 Fernando Perez <fperez@colorado.edu>
3615
3621
3616 * IPython/iplib.py (InteractiveShell.interact): added
3622 * IPython/iplib.py (InteractiveShell.interact): added
3617 __IPYTHON__active to the builtins. It's a flag which goes on when
3623 __IPYTHON__active to the builtins. It's a flag which goes on when
3618 the interaction starts and goes off again when it stops. This
3624 the interaction starts and goes off again when it stops. This
3619 allows embedding code to detect being inside IPython. Before this
3625 allows embedding code to detect being inside IPython. Before this
3620 was done via __IPYTHON__, but that only shows that an IPython
3626 was done via __IPYTHON__, but that only shows that an IPython
3621 instance has been created.
3627 instance has been created.
3622
3628
3623 * IPython/Magic.py (Magic.magic_env): I realized that in a
3629 * IPython/Magic.py (Magic.magic_env): I realized that in a
3624 UserDict, instance.data holds the data as a normal dict. So I
3630 UserDict, instance.data holds the data as a normal dict. So I
3625 modified @env to return os.environ.data instead of rebuilding a
3631 modified @env to return os.environ.data instead of rebuilding a
3626 dict by hand.
3632 dict by hand.
3627
3633
3628 2002-11-02 Fernando Perez <fperez@colorado.edu>
3634 2002-11-02 Fernando Perez <fperez@colorado.edu>
3629
3635
3630 * IPython/genutils.py (warn): changed so that level 1 prints no
3636 * IPython/genutils.py (warn): changed so that level 1 prints no
3631 header. Level 2 is now the default (with 'WARNING' header, as
3637 header. Level 2 is now the default (with 'WARNING' header, as
3632 before). I think I tracked all places where changes were needed in
3638 before). I think I tracked all places where changes were needed in
3633 IPython, but outside code using the old level numbering may have
3639 IPython, but outside code using the old level numbering may have
3634 broken.
3640 broken.
3635
3641
3636 * IPython/iplib.py (InteractiveShell.runcode): added this to
3642 * IPython/iplib.py (InteractiveShell.runcode): added this to
3637 handle the tracebacks in SystemExit traps correctly. The previous
3643 handle the tracebacks in SystemExit traps correctly. The previous
3638 code (through interact) was printing more of the stack than
3644 code (through interact) was printing more of the stack than
3639 necessary, showing IPython internal code to the user.
3645 necessary, showing IPython internal code to the user.
3640
3646
3641 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3647 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3642 default. Now that the default at the confirmation prompt is yes,
3648 default. Now that the default at the confirmation prompt is yes,
3643 it's not so intrusive. François' argument that ipython sessions
3649 it's not so intrusive. François' argument that ipython sessions
3644 tend to be complex enough not to lose them from an accidental C-d,
3650 tend to be complex enough not to lose them from an accidental C-d,
3645 is a valid one.
3651 is a valid one.
3646
3652
3647 * IPython/iplib.py (InteractiveShell.interact): added a
3653 * IPython/iplib.py (InteractiveShell.interact): added a
3648 showtraceback() call to the SystemExit trap, and modified the exit
3654 showtraceback() call to the SystemExit trap, and modified the exit
3649 confirmation to have yes as the default.
3655 confirmation to have yes as the default.
3650
3656
3651 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3657 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3652 this file. It's been gone from the code for a long time, this was
3658 this file. It's been gone from the code for a long time, this was
3653 simply leftover junk.
3659 simply leftover junk.
3654
3660
3655 2002-11-01 Fernando Perez <fperez@colorado.edu>
3661 2002-11-01 Fernando Perez <fperez@colorado.edu>
3656
3662
3657 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3663 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3658 added. If set, IPython now traps EOF and asks for
3664 added. If set, IPython now traps EOF and asks for
3659 confirmation. After a request by François Pinard.
3665 confirmation. After a request by François Pinard.
3660
3666
3661 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3667 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3662 of @abort, and with a new (better) mechanism for handling the
3668 of @abort, and with a new (better) mechanism for handling the
3663 exceptions.
3669 exceptions.
3664
3670
3665 2002-10-27 Fernando Perez <fperez@colorado.edu>
3671 2002-10-27 Fernando Perez <fperez@colorado.edu>
3666
3672
3667 * IPython/usage.py (__doc__): updated the --help information and
3673 * IPython/usage.py (__doc__): updated the --help information and
3668 the ipythonrc file to indicate that -log generates
3674 the ipythonrc file to indicate that -log generates
3669 ./ipython.log. Also fixed the corresponding info in @logstart.
3675 ./ipython.log. Also fixed the corresponding info in @logstart.
3670 This and several other fixes in the manuals thanks to reports by
3676 This and several other fixes in the manuals thanks to reports by
3671 François Pinard <pinard-AT-iro.umontreal.ca>.
3677 François Pinard <pinard-AT-iro.umontreal.ca>.
3672
3678
3673 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3679 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3674 refer to @logstart (instead of @log, which doesn't exist).
3680 refer to @logstart (instead of @log, which doesn't exist).
3675
3681
3676 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3682 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3677 AttributeError crash. Thanks to Christopher Armstrong
3683 AttributeError crash. Thanks to Christopher Armstrong
3678 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3684 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3679 introduced recently (in 0.2.14pre37) with the fix to the eval
3685 introduced recently (in 0.2.14pre37) with the fix to the eval
3680 problem mentioned below.
3686 problem mentioned below.
3681
3687
3682 2002-10-17 Fernando Perez <fperez@colorado.edu>
3688 2002-10-17 Fernando Perez <fperez@colorado.edu>
3683
3689
3684 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3690 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3685 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3691 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3686
3692
3687 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3693 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3688 this function to fix a problem reported by Alex Schmolck. He saw
3694 this function to fix a problem reported by Alex Schmolck. He saw
3689 it with list comprehensions and generators, which were getting
3695 it with list comprehensions and generators, which were getting
3690 called twice. The real problem was an 'eval' call in testing for
3696 called twice. The real problem was an 'eval' call in testing for
3691 automagic which was evaluating the input line silently.
3697 automagic which was evaluating the input line silently.
3692
3698
3693 This is a potentially very nasty bug, if the input has side
3699 This is a potentially very nasty bug, if the input has side
3694 effects which must not be repeated. The code is much cleaner now,
3700 effects which must not be repeated. The code is much cleaner now,
3695 without any blanket 'except' left and with a regexp test for
3701 without any blanket 'except' left and with a regexp test for
3696 actual function names.
3702 actual function names.
3697
3703
3698 But an eval remains, which I'm not fully comfortable with. I just
3704 But an eval remains, which I'm not fully comfortable with. I just
3699 don't know how to find out if an expression could be a callable in
3705 don't know how to find out if an expression could be a callable in
3700 the user's namespace without doing an eval on the string. However
3706 the user's namespace without doing an eval on the string. However
3701 that string is now much more strictly checked so that no code
3707 that string is now much more strictly checked so that no code
3702 slips by, so the eval should only happen for things that can
3708 slips by, so the eval should only happen for things that can
3703 really be only function/method names.
3709 really be only function/method names.
3704
3710
3705 2002-10-15 Fernando Perez <fperez@colorado.edu>
3711 2002-10-15 Fernando Perez <fperez@colorado.edu>
3706
3712
3707 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3713 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3708 OSX information to main manual, removed README_Mac_OSX file from
3714 OSX information to main manual, removed README_Mac_OSX file from
3709 distribution. Also updated credits for recent additions.
3715 distribution. Also updated credits for recent additions.
3710
3716
3711 2002-10-10 Fernando Perez <fperez@colorado.edu>
3717 2002-10-10 Fernando Perez <fperez@colorado.edu>
3712
3718
3713 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3719 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3714 terminal-related issues. Many thanks to Andrea Riciputi
3720 terminal-related issues. Many thanks to Andrea Riciputi
3715 <andrea.riciputi-AT-libero.it> for writing it.
3721 <andrea.riciputi-AT-libero.it> for writing it.
3716
3722
3717 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3723 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3718 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3724 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3719
3725
3720 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3726 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3721 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3727 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3722 <syver-en-AT-online.no> who both submitted patches for this problem.
3728 <syver-en-AT-online.no> who both submitted patches for this problem.
3723
3729
3724 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3730 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3725 global embedding to make sure that things don't overwrite user
3731 global embedding to make sure that things don't overwrite user
3726 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3732 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3727
3733
3728 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3734 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3729 compatibility. Thanks to Hayden Callow
3735 compatibility. Thanks to Hayden Callow
3730 <h.callow-AT-elec.canterbury.ac.nz>
3736 <h.callow-AT-elec.canterbury.ac.nz>
3731
3737
3732 2002-10-04 Fernando Perez <fperez@colorado.edu>
3738 2002-10-04 Fernando Perez <fperez@colorado.edu>
3733
3739
3734 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3740 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3735 Gnuplot.File objects.
3741 Gnuplot.File objects.
3736
3742
3737 2002-07-23 Fernando Perez <fperez@colorado.edu>
3743 2002-07-23 Fernando Perez <fperez@colorado.edu>
3738
3744
3739 * IPython/genutils.py (timing): Added timings() and timing() for
3745 * IPython/genutils.py (timing): Added timings() and timing() for
3740 quick access to the most commonly needed data, the execution
3746 quick access to the most commonly needed data, the execution
3741 times. Old timing() renamed to timings_out().
3747 times. Old timing() renamed to timings_out().
3742
3748
3743 2002-07-18 Fernando Perez <fperez@colorado.edu>
3749 2002-07-18 Fernando Perez <fperez@colorado.edu>
3744
3750
3745 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3751 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3746 bug with nested instances disrupting the parent's tab completion.
3752 bug with nested instances disrupting the parent's tab completion.
3747
3753
3748 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3754 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3749 all_completions code to begin the emacs integration.
3755 all_completions code to begin the emacs integration.
3750
3756
3751 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3757 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3752 argument to allow titling individual arrays when plotting.
3758 argument to allow titling individual arrays when plotting.
3753
3759
3754 2002-07-15 Fernando Perez <fperez@colorado.edu>
3760 2002-07-15 Fernando Perez <fperez@colorado.edu>
3755
3761
3756 * setup.py (make_shortcut): changed to retrieve the value of
3762 * setup.py (make_shortcut): changed to retrieve the value of
3757 'Program Files' directory from the registry (this value changes in
3763 'Program Files' directory from the registry (this value changes in
3758 non-english versions of Windows). Thanks to Thomas Fanslau
3764 non-english versions of Windows). Thanks to Thomas Fanslau
3759 <tfanslau-AT-gmx.de> for the report.
3765 <tfanslau-AT-gmx.de> for the report.
3760
3766
3761 2002-07-10 Fernando Perez <fperez@colorado.edu>
3767 2002-07-10 Fernando Perez <fperez@colorado.edu>
3762
3768
3763 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3769 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3764 a bug in pdb, which crashes if a line with only whitespace is
3770 a bug in pdb, which crashes if a line with only whitespace is
3765 entered. Bug report submitted to sourceforge.
3771 entered. Bug report submitted to sourceforge.
3766
3772
3767 2002-07-09 Fernando Perez <fperez@colorado.edu>
3773 2002-07-09 Fernando Perez <fperez@colorado.edu>
3768
3774
3769 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3775 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3770 reporting exceptions (it's a bug in inspect.py, I just set a
3776 reporting exceptions (it's a bug in inspect.py, I just set a
3771 workaround).
3777 workaround).
3772
3778
3773 2002-07-08 Fernando Perez <fperez@colorado.edu>
3779 2002-07-08 Fernando Perez <fperez@colorado.edu>
3774
3780
3775 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3781 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3776 __IPYTHON__ in __builtins__ to show up in user_ns.
3782 __IPYTHON__ in __builtins__ to show up in user_ns.
3777
3783
3778 2002-07-03 Fernando Perez <fperez@colorado.edu>
3784 2002-07-03 Fernando Perez <fperez@colorado.edu>
3779
3785
3780 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3786 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3781 name from @gp_set_instance to @gp_set_default.
3787 name from @gp_set_instance to @gp_set_default.
3782
3788
3783 * IPython/ipmaker.py (make_IPython): default editor value set to
3789 * IPython/ipmaker.py (make_IPython): default editor value set to
3784 '0' (a string), to match the rc file. Otherwise will crash when
3790 '0' (a string), to match the rc file. Otherwise will crash when
3785 .strip() is called on it.
3791 .strip() is called on it.
3786
3792
3787
3793
3788 2002-06-28 Fernando Perez <fperez@colorado.edu>
3794 2002-06-28 Fernando Perez <fperez@colorado.edu>
3789
3795
3790 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3796 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3791 of files in current directory when a file is executed via
3797 of files in current directory when a file is executed via
3792 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3798 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3793
3799
3794 * setup.py (manfiles): fix for rpm builds, submitted by RA
3800 * setup.py (manfiles): fix for rpm builds, submitted by RA
3795 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3801 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3796
3802
3797 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3803 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3798 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3804 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3799 string!). A. Schmolck caught this one.
3805 string!). A. Schmolck caught this one.
3800
3806
3801 2002-06-27 Fernando Perez <fperez@colorado.edu>
3807 2002-06-27 Fernando Perez <fperez@colorado.edu>
3802
3808
3803 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3809 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3804 defined files at the cmd line. __name__ wasn't being set to
3810 defined files at the cmd line. __name__ wasn't being set to
3805 __main__.
3811 __main__.
3806
3812
3807 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3813 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3808 regular lists and tuples besides Numeric arrays.
3814 regular lists and tuples besides Numeric arrays.
3809
3815
3810 * IPython/Prompts.py (CachedOutput.__call__): Added output
3816 * IPython/Prompts.py (CachedOutput.__call__): Added output
3811 supression for input ending with ';'. Similar to Mathematica and
3817 supression for input ending with ';'. Similar to Mathematica and
3812 Matlab. The _* vars and Out[] list are still updated, just like
3818 Matlab. The _* vars and Out[] list are still updated, just like
3813 Mathematica behaves.
3819 Mathematica behaves.
3814
3820
3815 2002-06-25 Fernando Perez <fperez@colorado.edu>
3821 2002-06-25 Fernando Perez <fperez@colorado.edu>
3816
3822
3817 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3823 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3818 .ini extensions for profiels under Windows.
3824 .ini extensions for profiels under Windows.
3819
3825
3820 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3826 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3821 string form. Fix contributed by Alexander Schmolck
3827 string form. Fix contributed by Alexander Schmolck
3822 <a.schmolck-AT-gmx.net>
3828 <a.schmolck-AT-gmx.net>
3823
3829
3824 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3830 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3825 pre-configured Gnuplot instance.
3831 pre-configured Gnuplot instance.
3826
3832
3827 2002-06-21 Fernando Perez <fperez@colorado.edu>
3833 2002-06-21 Fernando Perez <fperez@colorado.edu>
3828
3834
3829 * IPython/numutils.py (exp_safe): new function, works around the
3835 * IPython/numutils.py (exp_safe): new function, works around the
3830 underflow problems in Numeric.
3836 underflow problems in Numeric.
3831 (log2): New fn. Safe log in base 2: returns exact integer answer
3837 (log2): New fn. Safe log in base 2: returns exact integer answer
3832 for exact integer powers of 2.
3838 for exact integer powers of 2.
3833
3839
3834 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3840 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3835 properly.
3841 properly.
3836
3842
3837 2002-06-20 Fernando Perez <fperez@colorado.edu>
3843 2002-06-20 Fernando Perez <fperez@colorado.edu>
3838
3844
3839 * IPython/genutils.py (timing): new function like
3845 * IPython/genutils.py (timing): new function like
3840 Mathematica's. Similar to time_test, but returns more info.
3846 Mathematica's. Similar to time_test, but returns more info.
3841
3847
3842 2002-06-18 Fernando Perez <fperez@colorado.edu>
3848 2002-06-18 Fernando Perez <fperez@colorado.edu>
3843
3849
3844 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3850 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3845 according to Mike Heeter's suggestions.
3851 according to Mike Heeter's suggestions.
3846
3852
3847 2002-06-16 Fernando Perez <fperez@colorado.edu>
3853 2002-06-16 Fernando Perez <fperez@colorado.edu>
3848
3854
3849 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3855 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3850 system. GnuplotMagic is gone as a user-directory option. New files
3856 system. GnuplotMagic is gone as a user-directory option. New files
3851 make it easier to use all the gnuplot stuff both from external
3857 make it easier to use all the gnuplot stuff both from external
3852 programs as well as from IPython. Had to rewrite part of
3858 programs as well as from IPython. Had to rewrite part of
3853 hardcopy() b/c of a strange bug: often the ps files simply don't
3859 hardcopy() b/c of a strange bug: often the ps files simply don't
3854 get created, and require a repeat of the command (often several
3860 get created, and require a repeat of the command (often several
3855 times).
3861 times).
3856
3862
3857 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3863 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3858 resolve output channel at call time, so that if sys.stderr has
3864 resolve output channel at call time, so that if sys.stderr has
3859 been redirected by user this gets honored.
3865 been redirected by user this gets honored.
3860
3866
3861 2002-06-13 Fernando Perez <fperez@colorado.edu>
3867 2002-06-13 Fernando Perez <fperez@colorado.edu>
3862
3868
3863 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3869 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3864 IPShell. Kept a copy with the old names to avoid breaking people's
3870 IPShell. Kept a copy with the old names to avoid breaking people's
3865 embedded code.
3871 embedded code.
3866
3872
3867 * IPython/ipython: simplified it to the bare minimum after
3873 * IPython/ipython: simplified it to the bare minimum after
3868 Holger's suggestions. Added info about how to use it in
3874 Holger's suggestions. Added info about how to use it in
3869 PYTHONSTARTUP.
3875 PYTHONSTARTUP.
3870
3876
3871 * IPython/Shell.py (IPythonShell): changed the options passing
3877 * IPython/Shell.py (IPythonShell): changed the options passing
3872 from a string with funky %s replacements to a straight list. Maybe
3878 from a string with funky %s replacements to a straight list. Maybe
3873 a bit more typing, but it follows sys.argv conventions, so there's
3879 a bit more typing, but it follows sys.argv conventions, so there's
3874 less special-casing to remember.
3880 less special-casing to remember.
3875
3881
3876 2002-06-12 Fernando Perez <fperez@colorado.edu>
3882 2002-06-12 Fernando Perez <fperez@colorado.edu>
3877
3883
3878 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3884 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3879 command. Thanks to a suggestion by Mike Heeter.
3885 command. Thanks to a suggestion by Mike Heeter.
3880 (Magic.magic_pfile): added behavior to look at filenames if given
3886 (Magic.magic_pfile): added behavior to look at filenames if given
3881 arg is not a defined object.
3887 arg is not a defined object.
3882 (Magic.magic_save): New @save function to save code snippets. Also
3888 (Magic.magic_save): New @save function to save code snippets. Also
3883 a Mike Heeter idea.
3889 a Mike Heeter idea.
3884
3890
3885 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3891 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3886 plot() and replot(). Much more convenient now, especially for
3892 plot() and replot(). Much more convenient now, especially for
3887 interactive use.
3893 interactive use.
3888
3894
3889 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3895 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3890 filenames.
3896 filenames.
3891
3897
3892 2002-06-02 Fernando Perez <fperez@colorado.edu>
3898 2002-06-02 Fernando Perez <fperez@colorado.edu>
3893
3899
3894 * IPython/Struct.py (Struct.__init__): modified to admit
3900 * IPython/Struct.py (Struct.__init__): modified to admit
3895 initialization via another struct.
3901 initialization via another struct.
3896
3902
3897 * IPython/genutils.py (SystemExec.__init__): New stateful
3903 * IPython/genutils.py (SystemExec.__init__): New stateful
3898 interface to xsys and bq. Useful for writing system scripts.
3904 interface to xsys and bq. Useful for writing system scripts.
3899
3905
3900 2002-05-30 Fernando Perez <fperez@colorado.edu>
3906 2002-05-30 Fernando Perez <fperez@colorado.edu>
3901
3907
3902 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3908 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3903 documents. This will make the user download smaller (it's getting
3909 documents. This will make the user download smaller (it's getting
3904 too big).
3910 too big).
3905
3911
3906 2002-05-29 Fernando Perez <fperez@colorado.edu>
3912 2002-05-29 Fernando Perez <fperez@colorado.edu>
3907
3913
3908 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3914 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3909 fix problems with shelve and pickle. Seems to work, but I don't
3915 fix problems with shelve and pickle. Seems to work, but I don't
3910 know if corner cases break it. Thanks to Mike Heeter
3916 know if corner cases break it. Thanks to Mike Heeter
3911 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3917 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3912
3918
3913 2002-05-24 Fernando Perez <fperez@colorado.edu>
3919 2002-05-24 Fernando Perez <fperez@colorado.edu>
3914
3920
3915 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3921 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3916 macros having broken.
3922 macros having broken.
3917
3923
3918 2002-05-21 Fernando Perez <fperez@colorado.edu>
3924 2002-05-21 Fernando Perez <fperez@colorado.edu>
3919
3925
3920 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3926 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3921 introduced logging bug: all history before logging started was
3927 introduced logging bug: all history before logging started was
3922 being written one character per line! This came from the redesign
3928 being written one character per line! This came from the redesign
3923 of the input history as a special list which slices to strings,
3929 of the input history as a special list which slices to strings,
3924 not to lists.
3930 not to lists.
3925
3931
3926 2002-05-20 Fernando Perez <fperez@colorado.edu>
3932 2002-05-20 Fernando Perez <fperez@colorado.edu>
3927
3933
3928 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3934 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3929 be an attribute of all classes in this module. The design of these
3935 be an attribute of all classes in this module. The design of these
3930 classes needs some serious overhauling.
3936 classes needs some serious overhauling.
3931
3937
3932 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3938 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3933 which was ignoring '_' in option names.
3939 which was ignoring '_' in option names.
3934
3940
3935 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3941 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3936 'Verbose_novars' to 'Context' and made it the new default. It's a
3942 'Verbose_novars' to 'Context' and made it the new default. It's a
3937 bit more readable and also safer than verbose.
3943 bit more readable and also safer than verbose.
3938
3944
3939 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3945 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3940 triple-quoted strings.
3946 triple-quoted strings.
3941
3947
3942 * IPython/OInspect.py (__all__): new module exposing the object
3948 * IPython/OInspect.py (__all__): new module exposing the object
3943 introspection facilities. Now the corresponding magics are dummy
3949 introspection facilities. Now the corresponding magics are dummy
3944 wrappers around this. Having this module will make it much easier
3950 wrappers around this. Having this module will make it much easier
3945 to put these functions into our modified pdb.
3951 to put these functions into our modified pdb.
3946 This new object inspector system uses the new colorizing module,
3952 This new object inspector system uses the new colorizing module,
3947 so source code and other things are nicely syntax highlighted.
3953 so source code and other things are nicely syntax highlighted.
3948
3954
3949 2002-05-18 Fernando Perez <fperez@colorado.edu>
3955 2002-05-18 Fernando Perez <fperez@colorado.edu>
3950
3956
3951 * IPython/ColorANSI.py: Split the coloring tools into a separate
3957 * IPython/ColorANSI.py: Split the coloring tools into a separate
3952 module so I can use them in other code easier (they were part of
3958 module so I can use them in other code easier (they were part of
3953 ultraTB).
3959 ultraTB).
3954
3960
3955 2002-05-17 Fernando Perez <fperez@colorado.edu>
3961 2002-05-17 Fernando Perez <fperez@colorado.edu>
3956
3962
3957 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3963 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3958 fixed it to set the global 'g' also to the called instance, as
3964 fixed it to set the global 'g' also to the called instance, as
3959 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3965 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3960 user's 'g' variables).
3966 user's 'g' variables).
3961
3967
3962 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3968 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3963 global variables (aliases to _ih,_oh) so that users which expect
3969 global variables (aliases to _ih,_oh) so that users which expect
3964 In[5] or Out[7] to work aren't unpleasantly surprised.
3970 In[5] or Out[7] to work aren't unpleasantly surprised.
3965 (InputList.__getslice__): new class to allow executing slices of
3971 (InputList.__getslice__): new class to allow executing slices of
3966 input history directly. Very simple class, complements the use of
3972 input history directly. Very simple class, complements the use of
3967 macros.
3973 macros.
3968
3974
3969 2002-05-16 Fernando Perez <fperez@colorado.edu>
3975 2002-05-16 Fernando Perez <fperez@colorado.edu>
3970
3976
3971 * setup.py (docdirbase): make doc directory be just doc/IPython
3977 * setup.py (docdirbase): make doc directory be just doc/IPython
3972 without version numbers, it will reduce clutter for users.
3978 without version numbers, it will reduce clutter for users.
3973
3979
3974 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3980 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3975 execfile call to prevent possible memory leak. See for details:
3981 execfile call to prevent possible memory leak. See for details:
3976 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3982 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3977
3983
3978 2002-05-15 Fernando Perez <fperez@colorado.edu>
3984 2002-05-15 Fernando Perez <fperez@colorado.edu>
3979
3985
3980 * IPython/Magic.py (Magic.magic_psource): made the object
3986 * IPython/Magic.py (Magic.magic_psource): made the object
3981 introspection names be more standard: pdoc, pdef, pfile and
3987 introspection names be more standard: pdoc, pdef, pfile and
3982 psource. They all print/page their output, and it makes
3988 psource. They all print/page their output, and it makes
3983 remembering them easier. Kept old names for compatibility as
3989 remembering them easier. Kept old names for compatibility as
3984 aliases.
3990 aliases.
3985
3991
3986 2002-05-14 Fernando Perez <fperez@colorado.edu>
3992 2002-05-14 Fernando Perez <fperez@colorado.edu>
3987
3993
3988 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3994 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3989 what the mouse problem was. The trick is to use gnuplot with temp
3995 what the mouse problem was. The trick is to use gnuplot with temp
3990 files and NOT with pipes (for data communication), because having
3996 files and NOT with pipes (for data communication), because having
3991 both pipes and the mouse on is bad news.
3997 both pipes and the mouse on is bad news.
3992
3998
3993 2002-05-13 Fernando Perez <fperez@colorado.edu>
3999 2002-05-13 Fernando Perez <fperez@colorado.edu>
3994
4000
3995 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4001 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3996 bug. Information would be reported about builtins even when
4002 bug. Information would be reported about builtins even when
3997 user-defined functions overrode them.
4003 user-defined functions overrode them.
3998
4004
3999 2002-05-11 Fernando Perez <fperez@colorado.edu>
4005 2002-05-11 Fernando Perez <fperez@colorado.edu>
4000
4006
4001 * IPython/__init__.py (__all__): removed FlexCompleter from
4007 * IPython/__init__.py (__all__): removed FlexCompleter from
4002 __all__ so that things don't fail in platforms without readline.
4008 __all__ so that things don't fail in platforms without readline.
4003
4009
4004 2002-05-10 Fernando Perez <fperez@colorado.edu>
4010 2002-05-10 Fernando Perez <fperez@colorado.edu>
4005
4011
4006 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4012 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4007 it requires Numeric, effectively making Numeric a dependency for
4013 it requires Numeric, effectively making Numeric a dependency for
4008 IPython.
4014 IPython.
4009
4015
4010 * Released 0.2.13
4016 * Released 0.2.13
4011
4017
4012 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4018 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4013 profiler interface. Now all the major options from the profiler
4019 profiler interface. Now all the major options from the profiler
4014 module are directly supported in IPython, both for single
4020 module are directly supported in IPython, both for single
4015 expressions (@prun) and for full programs (@run -p).
4021 expressions (@prun) and for full programs (@run -p).
4016
4022
4017 2002-05-09 Fernando Perez <fperez@colorado.edu>
4023 2002-05-09 Fernando Perez <fperez@colorado.edu>
4018
4024
4019 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4025 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4020 magic properly formatted for screen.
4026 magic properly formatted for screen.
4021
4027
4022 * setup.py (make_shortcut): Changed things to put pdf version in
4028 * setup.py (make_shortcut): Changed things to put pdf version in
4023 doc/ instead of doc/manual (had to change lyxport a bit).
4029 doc/ instead of doc/manual (had to change lyxport a bit).
4024
4030
4025 * IPython/Magic.py (Profile.string_stats): made profile runs go
4031 * IPython/Magic.py (Profile.string_stats): made profile runs go
4026 through pager (they are long and a pager allows searching, saving,
4032 through pager (they are long and a pager allows searching, saving,
4027 etc.)
4033 etc.)
4028
4034
4029 2002-05-08 Fernando Perez <fperez@colorado.edu>
4035 2002-05-08 Fernando Perez <fperez@colorado.edu>
4030
4036
4031 * Released 0.2.12
4037 * Released 0.2.12
4032
4038
4033 2002-05-06 Fernando Perez <fperez@colorado.edu>
4039 2002-05-06 Fernando Perez <fperez@colorado.edu>
4034
4040
4035 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4041 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4036 introduced); 'hist n1 n2' was broken.
4042 introduced); 'hist n1 n2' was broken.
4037 (Magic.magic_pdb): added optional on/off arguments to @pdb
4043 (Magic.magic_pdb): added optional on/off arguments to @pdb
4038 (Magic.magic_run): added option -i to @run, which executes code in
4044 (Magic.magic_run): added option -i to @run, which executes code in
4039 the IPython namespace instead of a clean one. Also added @irun as
4045 the IPython namespace instead of a clean one. Also added @irun as
4040 an alias to @run -i.
4046 an alias to @run -i.
4041
4047
4042 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4048 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4043 fixed (it didn't really do anything, the namespaces were wrong).
4049 fixed (it didn't really do anything, the namespaces were wrong).
4044
4050
4045 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4051 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4046
4052
4047 * IPython/__init__.py (__all__): Fixed package namespace, now
4053 * IPython/__init__.py (__all__): Fixed package namespace, now
4048 'import IPython' does give access to IPython.<all> as
4054 'import IPython' does give access to IPython.<all> as
4049 expected. Also renamed __release__ to Release.
4055 expected. Also renamed __release__ to Release.
4050
4056
4051 * IPython/Debugger.py (__license__): created new Pdb class which
4057 * IPython/Debugger.py (__license__): created new Pdb class which
4052 functions like a drop-in for the normal pdb.Pdb but does NOT
4058 functions like a drop-in for the normal pdb.Pdb but does NOT
4053 import readline by default. This way it doesn't muck up IPython's
4059 import readline by default. This way it doesn't muck up IPython's
4054 readline handling, and now tab-completion finally works in the
4060 readline handling, and now tab-completion finally works in the
4055 debugger -- sort of. It completes things globally visible, but the
4061 debugger -- sort of. It completes things globally visible, but the
4056 completer doesn't track the stack as pdb walks it. That's a bit
4062 completer doesn't track the stack as pdb walks it. That's a bit
4057 tricky, and I'll have to implement it later.
4063 tricky, and I'll have to implement it later.
4058
4064
4059 2002-05-05 Fernando Perez <fperez@colorado.edu>
4065 2002-05-05 Fernando Perez <fperez@colorado.edu>
4060
4066
4061 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4067 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4062 magic docstrings when printed via ? (explicit \'s were being
4068 magic docstrings when printed via ? (explicit \'s were being
4063 printed).
4069 printed).
4064
4070
4065 * IPython/ipmaker.py (make_IPython): fixed namespace
4071 * IPython/ipmaker.py (make_IPython): fixed namespace
4066 identification bug. Now variables loaded via logs or command-line
4072 identification bug. Now variables loaded via logs or command-line
4067 files are recognized in the interactive namespace by @who.
4073 files are recognized in the interactive namespace by @who.
4068
4074
4069 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4075 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4070 log replay system stemming from the string form of Structs.
4076 log replay system stemming from the string form of Structs.
4071
4077
4072 * IPython/Magic.py (Macro.__init__): improved macros to properly
4078 * IPython/Magic.py (Macro.__init__): improved macros to properly
4073 handle magic commands in them.
4079 handle magic commands in them.
4074 (Magic.magic_logstart): usernames are now expanded so 'logstart
4080 (Magic.magic_logstart): usernames are now expanded so 'logstart
4075 ~/mylog' now works.
4081 ~/mylog' now works.
4076
4082
4077 * IPython/iplib.py (complete): fixed bug where paths starting with
4083 * IPython/iplib.py (complete): fixed bug where paths starting with
4078 '/' would be completed as magic names.
4084 '/' would be completed as magic names.
4079
4085
4080 2002-05-04 Fernando Perez <fperez@colorado.edu>
4086 2002-05-04 Fernando Perez <fperez@colorado.edu>
4081
4087
4082 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4088 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4083 allow running full programs under the profiler's control.
4089 allow running full programs under the profiler's control.
4084
4090
4085 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4091 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4086 mode to report exceptions verbosely but without formatting
4092 mode to report exceptions verbosely but without formatting
4087 variables. This addresses the issue of ipython 'freezing' (it's
4093 variables. This addresses the issue of ipython 'freezing' (it's
4088 not frozen, but caught in an expensive formatting loop) when huge
4094 not frozen, but caught in an expensive formatting loop) when huge
4089 variables are in the context of an exception.
4095 variables are in the context of an exception.
4090 (VerboseTB.text): Added '--->' markers at line where exception was
4096 (VerboseTB.text): Added '--->' markers at line where exception was
4091 triggered. Much clearer to read, especially in NoColor modes.
4097 triggered. Much clearer to read, especially in NoColor modes.
4092
4098
4093 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4099 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4094 implemented in reverse when changing to the new parse_options().
4100 implemented in reverse when changing to the new parse_options().
4095
4101
4096 2002-05-03 Fernando Perez <fperez@colorado.edu>
4102 2002-05-03 Fernando Perez <fperez@colorado.edu>
4097
4103
4098 * IPython/Magic.py (Magic.parse_options): new function so that
4104 * IPython/Magic.py (Magic.parse_options): new function so that
4099 magics can parse options easier.
4105 magics can parse options easier.
4100 (Magic.magic_prun): new function similar to profile.run(),
4106 (Magic.magic_prun): new function similar to profile.run(),
4101 suggested by Chris Hart.
4107 suggested by Chris Hart.
4102 (Magic.magic_cd): fixed behavior so that it only changes if
4108 (Magic.magic_cd): fixed behavior so that it only changes if
4103 directory actually is in history.
4109 directory actually is in history.
4104
4110
4105 * IPython/usage.py (__doc__): added information about potential
4111 * IPython/usage.py (__doc__): added information about potential
4106 slowness of Verbose exception mode when there are huge data
4112 slowness of Verbose exception mode when there are huge data
4107 structures to be formatted (thanks to Archie Paulson).
4113 structures to be formatted (thanks to Archie Paulson).
4108
4114
4109 * IPython/ipmaker.py (make_IPython): Changed default logging
4115 * IPython/ipmaker.py (make_IPython): Changed default logging
4110 (when simply called with -log) to use curr_dir/ipython.log in
4116 (when simply called with -log) to use curr_dir/ipython.log in
4111 rotate mode. Fixed crash which was occuring with -log before
4117 rotate mode. Fixed crash which was occuring with -log before
4112 (thanks to Jim Boyle).
4118 (thanks to Jim Boyle).
4113
4119
4114 2002-05-01 Fernando Perez <fperez@colorado.edu>
4120 2002-05-01 Fernando Perez <fperez@colorado.edu>
4115
4121
4116 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4122 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4117 was nasty -- though somewhat of a corner case).
4123 was nasty -- though somewhat of a corner case).
4118
4124
4119 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4125 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4120 text (was a bug).
4126 text (was a bug).
4121
4127
4122 2002-04-30 Fernando Perez <fperez@colorado.edu>
4128 2002-04-30 Fernando Perez <fperez@colorado.edu>
4123
4129
4124 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4130 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4125 a print after ^D or ^C from the user so that the In[] prompt
4131 a print after ^D or ^C from the user so that the In[] prompt
4126 doesn't over-run the gnuplot one.
4132 doesn't over-run the gnuplot one.
4127
4133
4128 2002-04-29 Fernando Perez <fperez@colorado.edu>
4134 2002-04-29 Fernando Perez <fperez@colorado.edu>
4129
4135
4130 * Released 0.2.10
4136 * Released 0.2.10
4131
4137
4132 * IPython/__release__.py (version): get date dynamically.
4138 * IPython/__release__.py (version): get date dynamically.
4133
4139
4134 * Misc. documentation updates thanks to Arnd's comments. Also ran
4140 * Misc. documentation updates thanks to Arnd's comments. Also ran
4135 a full spellcheck on the manual (hadn't been done in a while).
4141 a full spellcheck on the manual (hadn't been done in a while).
4136
4142
4137 2002-04-27 Fernando Perez <fperez@colorado.edu>
4143 2002-04-27 Fernando Perez <fperez@colorado.edu>
4138
4144
4139 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4145 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4140 starting a log in mid-session would reset the input history list.
4146 starting a log in mid-session would reset the input history list.
4141
4147
4142 2002-04-26 Fernando Perez <fperez@colorado.edu>
4148 2002-04-26 Fernando Perez <fperez@colorado.edu>
4143
4149
4144 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4150 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4145 all files were being included in an update. Now anything in
4151 all files were being included in an update. Now anything in
4146 UserConfig that matches [A-Za-z]*.py will go (this excludes
4152 UserConfig that matches [A-Za-z]*.py will go (this excludes
4147 __init__.py)
4153 __init__.py)
4148
4154
4149 2002-04-25 Fernando Perez <fperez@colorado.edu>
4155 2002-04-25 Fernando Perez <fperez@colorado.edu>
4150
4156
4151 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4157 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4152 to __builtins__ so that any form of embedded or imported code can
4158 to __builtins__ so that any form of embedded or imported code can
4153 test for being inside IPython.
4159 test for being inside IPython.
4154
4160
4155 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4161 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4156 changed to GnuplotMagic because it's now an importable module,
4162 changed to GnuplotMagic because it's now an importable module,
4157 this makes the name follow that of the standard Gnuplot module.
4163 this makes the name follow that of the standard Gnuplot module.
4158 GnuplotMagic can now be loaded at any time in mid-session.
4164 GnuplotMagic can now be loaded at any time in mid-session.
4159
4165
4160 2002-04-24 Fernando Perez <fperez@colorado.edu>
4166 2002-04-24 Fernando Perez <fperez@colorado.edu>
4161
4167
4162 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4168 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4163 the globals (IPython has its own namespace) and the
4169 the globals (IPython has its own namespace) and the
4164 PhysicalQuantity stuff is much better anyway.
4170 PhysicalQuantity stuff is much better anyway.
4165
4171
4166 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4172 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4167 embedding example to standard user directory for
4173 embedding example to standard user directory for
4168 distribution. Also put it in the manual.
4174 distribution. Also put it in the manual.
4169
4175
4170 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4176 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4171 instance as first argument (so it doesn't rely on some obscure
4177 instance as first argument (so it doesn't rely on some obscure
4172 hidden global).
4178 hidden global).
4173
4179
4174 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4180 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4175 delimiters. While it prevents ().TAB from working, it allows
4181 delimiters. While it prevents ().TAB from working, it allows
4176 completions in open (... expressions. This is by far a more common
4182 completions in open (... expressions. This is by far a more common
4177 case.
4183 case.
4178
4184
4179 2002-04-23 Fernando Perez <fperez@colorado.edu>
4185 2002-04-23 Fernando Perez <fperez@colorado.edu>
4180
4186
4181 * IPython/Extensions/InterpreterPasteInput.py: new
4187 * IPython/Extensions/InterpreterPasteInput.py: new
4182 syntax-processing module for pasting lines with >>> or ... at the
4188 syntax-processing module for pasting lines with >>> or ... at the
4183 start.
4189 start.
4184
4190
4185 * IPython/Extensions/PhysicalQ_Interactive.py
4191 * IPython/Extensions/PhysicalQ_Interactive.py
4186 (PhysicalQuantityInteractive.__int__): fixed to work with either
4192 (PhysicalQuantityInteractive.__int__): fixed to work with either
4187 Numeric or math.
4193 Numeric or math.
4188
4194
4189 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4195 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4190 provided profiles. Now we have:
4196 provided profiles. Now we have:
4191 -math -> math module as * and cmath with its own namespace.
4197 -math -> math module as * and cmath with its own namespace.
4192 -numeric -> Numeric as *, plus gnuplot & grace
4198 -numeric -> Numeric as *, plus gnuplot & grace
4193 -physics -> same as before
4199 -physics -> same as before
4194
4200
4195 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4201 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4196 user-defined magics wouldn't be found by @magic if they were
4202 user-defined magics wouldn't be found by @magic if they were
4197 defined as class methods. Also cleaned up the namespace search
4203 defined as class methods. Also cleaned up the namespace search
4198 logic and the string building (to use %s instead of many repeated
4204 logic and the string building (to use %s instead of many repeated
4199 string adds).
4205 string adds).
4200
4206
4201 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4207 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4202 of user-defined magics to operate with class methods (cleaner, in
4208 of user-defined magics to operate with class methods (cleaner, in
4203 line with the gnuplot code).
4209 line with the gnuplot code).
4204
4210
4205 2002-04-22 Fernando Perez <fperez@colorado.edu>
4211 2002-04-22 Fernando Perez <fperez@colorado.edu>
4206
4212
4207 * setup.py: updated dependency list so that manual is updated when
4213 * setup.py: updated dependency list so that manual is updated when
4208 all included files change.
4214 all included files change.
4209
4215
4210 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4216 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4211 the delimiter removal option (the fix is ugly right now).
4217 the delimiter removal option (the fix is ugly right now).
4212
4218
4213 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4219 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4214 all of the math profile (quicker loading, no conflict between
4220 all of the math profile (quicker loading, no conflict between
4215 g-9.8 and g-gnuplot).
4221 g-9.8 and g-gnuplot).
4216
4222
4217 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4223 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4218 name of post-mortem files to IPython_crash_report.txt.
4224 name of post-mortem files to IPython_crash_report.txt.
4219
4225
4220 * Cleanup/update of the docs. Added all the new readline info and
4226 * Cleanup/update of the docs. Added all the new readline info and
4221 formatted all lists as 'real lists'.
4227 formatted all lists as 'real lists'.
4222
4228
4223 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4229 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4224 tab-completion options, since the full readline parse_and_bind is
4230 tab-completion options, since the full readline parse_and_bind is
4225 now accessible.
4231 now accessible.
4226
4232
4227 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4233 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4228 handling of readline options. Now users can specify any string to
4234 handling of readline options. Now users can specify any string to
4229 be passed to parse_and_bind(), as well as the delimiters to be
4235 be passed to parse_and_bind(), as well as the delimiters to be
4230 removed.
4236 removed.
4231 (InteractiveShell.__init__): Added __name__ to the global
4237 (InteractiveShell.__init__): Added __name__ to the global
4232 namespace so that things like Itpl which rely on its existence
4238 namespace so that things like Itpl which rely on its existence
4233 don't crash.
4239 don't crash.
4234 (InteractiveShell._prefilter): Defined the default with a _ so
4240 (InteractiveShell._prefilter): Defined the default with a _ so
4235 that prefilter() is easier to override, while the default one
4241 that prefilter() is easier to override, while the default one
4236 remains available.
4242 remains available.
4237
4243
4238 2002-04-18 Fernando Perez <fperez@colorado.edu>
4244 2002-04-18 Fernando Perez <fperez@colorado.edu>
4239
4245
4240 * Added information about pdb in the docs.
4246 * Added information about pdb in the docs.
4241
4247
4242 2002-04-17 Fernando Perez <fperez@colorado.edu>
4248 2002-04-17 Fernando Perez <fperez@colorado.edu>
4243
4249
4244 * IPython/ipmaker.py (make_IPython): added rc_override option to
4250 * IPython/ipmaker.py (make_IPython): added rc_override option to
4245 allow passing config options at creation time which may override
4251 allow passing config options at creation time which may override
4246 anything set in the config files or command line. This is
4252 anything set in the config files or command line. This is
4247 particularly useful for configuring embedded instances.
4253 particularly useful for configuring embedded instances.
4248
4254
4249 2002-04-15 Fernando Perez <fperez@colorado.edu>
4255 2002-04-15 Fernando Perez <fperez@colorado.edu>
4250
4256
4251 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4257 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4252 crash embedded instances because of the input cache falling out of
4258 crash embedded instances because of the input cache falling out of
4253 sync with the output counter.
4259 sync with the output counter.
4254
4260
4255 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4261 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4256 mode which calls pdb after an uncaught exception in IPython itself.
4262 mode which calls pdb after an uncaught exception in IPython itself.
4257
4263
4258 2002-04-14 Fernando Perez <fperez@colorado.edu>
4264 2002-04-14 Fernando Perez <fperez@colorado.edu>
4259
4265
4260 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4266 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4261 readline, fix it back after each call.
4267 readline, fix it back after each call.
4262
4268
4263 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4269 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4264 method to force all access via __call__(), which guarantees that
4270 method to force all access via __call__(), which guarantees that
4265 traceback references are properly deleted.
4271 traceback references are properly deleted.
4266
4272
4267 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4273 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4268 improve printing when pprint is in use.
4274 improve printing when pprint is in use.
4269
4275
4270 2002-04-13 Fernando Perez <fperez@colorado.edu>
4276 2002-04-13 Fernando Perez <fperez@colorado.edu>
4271
4277
4272 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4278 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4273 exceptions aren't caught anymore. If the user triggers one, he
4279 exceptions aren't caught anymore. If the user triggers one, he
4274 should know why he's doing it and it should go all the way up,
4280 should know why he's doing it and it should go all the way up,
4275 just like any other exception. So now @abort will fully kill the
4281 just like any other exception. So now @abort will fully kill the
4276 embedded interpreter and the embedding code (unless that happens
4282 embedded interpreter and the embedding code (unless that happens
4277 to catch SystemExit).
4283 to catch SystemExit).
4278
4284
4279 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4285 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4280 and a debugger() method to invoke the interactive pdb debugger
4286 and a debugger() method to invoke the interactive pdb debugger
4281 after printing exception information. Also added the corresponding
4287 after printing exception information. Also added the corresponding
4282 -pdb option and @pdb magic to control this feature, and updated
4288 -pdb option and @pdb magic to control this feature, and updated
4283 the docs. After a suggestion from Christopher Hart
4289 the docs. After a suggestion from Christopher Hart
4284 (hart-AT-caltech.edu).
4290 (hart-AT-caltech.edu).
4285
4291
4286 2002-04-12 Fernando Perez <fperez@colorado.edu>
4292 2002-04-12 Fernando Perez <fperez@colorado.edu>
4287
4293
4288 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4294 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4289 the exception handlers defined by the user (not the CrashHandler)
4295 the exception handlers defined by the user (not the CrashHandler)
4290 so that user exceptions don't trigger an ipython bug report.
4296 so that user exceptions don't trigger an ipython bug report.
4291
4297
4292 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4298 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4293 configurable (it should have always been so).
4299 configurable (it should have always been so).
4294
4300
4295 2002-03-26 Fernando Perez <fperez@colorado.edu>
4301 2002-03-26 Fernando Perez <fperez@colorado.edu>
4296
4302
4297 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4303 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4298 and there to fix embedding namespace issues. This should all be
4304 and there to fix embedding namespace issues. This should all be
4299 done in a more elegant way.
4305 done in a more elegant way.
4300
4306
4301 2002-03-25 Fernando Perez <fperez@colorado.edu>
4307 2002-03-25 Fernando Perez <fperez@colorado.edu>
4302
4308
4303 * IPython/genutils.py (get_home_dir): Try to make it work under
4309 * IPython/genutils.py (get_home_dir): Try to make it work under
4304 win9x also.
4310 win9x also.
4305
4311
4306 2002-03-20 Fernando Perez <fperez@colorado.edu>
4312 2002-03-20 Fernando Perez <fperez@colorado.edu>
4307
4313
4308 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4314 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4309 sys.displayhook untouched upon __init__.
4315 sys.displayhook untouched upon __init__.
4310
4316
4311 2002-03-19 Fernando Perez <fperez@colorado.edu>
4317 2002-03-19 Fernando Perez <fperez@colorado.edu>
4312
4318
4313 * Released 0.2.9 (for embedding bug, basically).
4319 * Released 0.2.9 (for embedding bug, basically).
4314
4320
4315 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4321 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4316 exceptions so that enclosing shell's state can be restored.
4322 exceptions so that enclosing shell's state can be restored.
4317
4323
4318 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4324 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4319 naming conventions in the .ipython/ dir.
4325 naming conventions in the .ipython/ dir.
4320
4326
4321 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4327 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4322 from delimiters list so filenames with - in them get expanded.
4328 from delimiters list so filenames with - in them get expanded.
4323
4329
4324 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4330 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4325 sys.displayhook not being properly restored after an embedded call.
4331 sys.displayhook not being properly restored after an embedded call.
4326
4332
4327 2002-03-18 Fernando Perez <fperez@colorado.edu>
4333 2002-03-18 Fernando Perez <fperez@colorado.edu>
4328
4334
4329 * Released 0.2.8
4335 * Released 0.2.8
4330
4336
4331 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4337 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4332 some files weren't being included in a -upgrade.
4338 some files weren't being included in a -upgrade.
4333 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4339 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4334 on' so that the first tab completes.
4340 on' so that the first tab completes.
4335 (InteractiveShell.handle_magic): fixed bug with spaces around
4341 (InteractiveShell.handle_magic): fixed bug with spaces around
4336 quotes breaking many magic commands.
4342 quotes breaking many magic commands.
4337
4343
4338 * setup.py: added note about ignoring the syntax error messages at
4344 * setup.py: added note about ignoring the syntax error messages at
4339 installation.
4345 installation.
4340
4346
4341 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4347 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4342 streamlining the gnuplot interface, now there's only one magic @gp.
4348 streamlining the gnuplot interface, now there's only one magic @gp.
4343
4349
4344 2002-03-17 Fernando Perez <fperez@colorado.edu>
4350 2002-03-17 Fernando Perez <fperez@colorado.edu>
4345
4351
4346 * IPython/UserConfig/magic_gnuplot.py: new name for the
4352 * IPython/UserConfig/magic_gnuplot.py: new name for the
4347 example-magic_pm.py file. Much enhanced system, now with a shell
4353 example-magic_pm.py file. Much enhanced system, now with a shell
4348 for communicating directly with gnuplot, one command at a time.
4354 for communicating directly with gnuplot, one command at a time.
4349
4355
4350 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4356 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4351 setting __name__=='__main__'.
4357 setting __name__=='__main__'.
4352
4358
4353 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4359 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4354 mini-shell for accessing gnuplot from inside ipython. Should
4360 mini-shell for accessing gnuplot from inside ipython. Should
4355 extend it later for grace access too. Inspired by Arnd's
4361 extend it later for grace access too. Inspired by Arnd's
4356 suggestion.
4362 suggestion.
4357
4363
4358 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4364 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4359 calling magic functions with () in their arguments. Thanks to Arnd
4365 calling magic functions with () in their arguments. Thanks to Arnd
4360 Baecker for pointing this to me.
4366 Baecker for pointing this to me.
4361
4367
4362 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4368 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4363 infinitely for integer or complex arrays (only worked with floats).
4369 infinitely for integer or complex arrays (only worked with floats).
4364
4370
4365 2002-03-16 Fernando Perez <fperez@colorado.edu>
4371 2002-03-16 Fernando Perez <fperez@colorado.edu>
4366
4372
4367 * setup.py: Merged setup and setup_windows into a single script
4373 * setup.py: Merged setup and setup_windows into a single script
4368 which properly handles things for windows users.
4374 which properly handles things for windows users.
4369
4375
4370 2002-03-15 Fernando Perez <fperez@colorado.edu>
4376 2002-03-15 Fernando Perez <fperez@colorado.edu>
4371
4377
4372 * Big change to the manual: now the magics are all automatically
4378 * Big change to the manual: now the magics are all automatically
4373 documented. This information is generated from their docstrings
4379 documented. This information is generated from their docstrings
4374 and put in a latex file included by the manual lyx file. This way
4380 and put in a latex file included by the manual lyx file. This way
4375 we get always up to date information for the magics. The manual
4381 we get always up to date information for the magics. The manual
4376 now also has proper version information, also auto-synced.
4382 now also has proper version information, also auto-synced.
4377
4383
4378 For this to work, an undocumented --magic_docstrings option was added.
4384 For this to work, an undocumented --magic_docstrings option was added.
4379
4385
4380 2002-03-13 Fernando Perez <fperez@colorado.edu>
4386 2002-03-13 Fernando Perez <fperez@colorado.edu>
4381
4387
4382 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4388 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4383 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4389 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4384
4390
4385 2002-03-12 Fernando Perez <fperez@colorado.edu>
4391 2002-03-12 Fernando Perez <fperez@colorado.edu>
4386
4392
4387 * IPython/ultraTB.py (TermColors): changed color escapes again to
4393 * IPython/ultraTB.py (TermColors): changed color escapes again to
4388 fix the (old, reintroduced) line-wrapping bug. Basically, if
4394 fix the (old, reintroduced) line-wrapping bug. Basically, if
4389 \001..\002 aren't given in the color escapes, lines get wrapped
4395 \001..\002 aren't given in the color escapes, lines get wrapped
4390 weirdly. But giving those screws up old xterms and emacs terms. So
4396 weirdly. But giving those screws up old xterms and emacs terms. So
4391 I added some logic for emacs terms to be ok, but I can't identify old
4397 I added some logic for emacs terms to be ok, but I can't identify old
4392 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4398 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4393
4399
4394 2002-03-10 Fernando Perez <fperez@colorado.edu>
4400 2002-03-10 Fernando Perez <fperez@colorado.edu>
4395
4401
4396 * IPython/usage.py (__doc__): Various documentation cleanups and
4402 * IPython/usage.py (__doc__): Various documentation cleanups and
4397 updates, both in usage docstrings and in the manual.
4403 updates, both in usage docstrings and in the manual.
4398
4404
4399 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4405 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4400 handling of caching. Set minimum acceptabe value for having a
4406 handling of caching. Set minimum acceptabe value for having a
4401 cache at 20 values.
4407 cache at 20 values.
4402
4408
4403 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4409 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4404 install_first_time function to a method, renamed it and added an
4410 install_first_time function to a method, renamed it and added an
4405 'upgrade' mode. Now people can update their config directory with
4411 'upgrade' mode. Now people can update their config directory with
4406 a simple command line switch (-upgrade, also new).
4412 a simple command line switch (-upgrade, also new).
4407
4413
4408 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4414 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4409 @file (convenient for automagic users under Python >= 2.2).
4415 @file (convenient for automagic users under Python >= 2.2).
4410 Removed @files (it seemed more like a plural than an abbrev. of
4416 Removed @files (it seemed more like a plural than an abbrev. of
4411 'file show').
4417 'file show').
4412
4418
4413 * IPython/iplib.py (install_first_time): Fixed crash if there were
4419 * IPython/iplib.py (install_first_time): Fixed crash if there were
4414 backup files ('~') in .ipython/ install directory.
4420 backup files ('~') in .ipython/ install directory.
4415
4421
4416 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4422 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4417 system. Things look fine, but these changes are fairly
4423 system. Things look fine, but these changes are fairly
4418 intrusive. Test them for a few days.
4424 intrusive. Test them for a few days.
4419
4425
4420 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4426 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4421 the prompts system. Now all in/out prompt strings are user
4427 the prompts system. Now all in/out prompt strings are user
4422 controllable. This is particularly useful for embedding, as one
4428 controllable. This is particularly useful for embedding, as one
4423 can tag embedded instances with particular prompts.
4429 can tag embedded instances with particular prompts.
4424
4430
4425 Also removed global use of sys.ps1/2, which now allows nested
4431 Also removed global use of sys.ps1/2, which now allows nested
4426 embeddings without any problems. Added command-line options for
4432 embeddings without any problems. Added command-line options for
4427 the prompt strings.
4433 the prompt strings.
4428
4434
4429 2002-03-08 Fernando Perez <fperez@colorado.edu>
4435 2002-03-08 Fernando Perez <fperez@colorado.edu>
4430
4436
4431 * IPython/UserConfig/example-embed-short.py (ipshell): added
4437 * IPython/UserConfig/example-embed-short.py (ipshell): added
4432 example file with the bare minimum code for embedding.
4438 example file with the bare minimum code for embedding.
4433
4439
4434 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4440 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4435 functionality for the embeddable shell to be activated/deactivated
4441 functionality for the embeddable shell to be activated/deactivated
4436 either globally or at each call.
4442 either globally or at each call.
4437
4443
4438 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4444 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4439 rewriting the prompt with '--->' for auto-inputs with proper
4445 rewriting the prompt with '--->' for auto-inputs with proper
4440 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4446 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4441 this is handled by the prompts class itself, as it should.
4447 this is handled by the prompts class itself, as it should.
4442
4448
4443 2002-03-05 Fernando Perez <fperez@colorado.edu>
4449 2002-03-05 Fernando Perez <fperez@colorado.edu>
4444
4450
4445 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4451 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4446 @logstart to avoid name clashes with the math log function.
4452 @logstart to avoid name clashes with the math log function.
4447
4453
4448 * Big updates to X/Emacs section of the manual.
4454 * Big updates to X/Emacs section of the manual.
4449
4455
4450 * Removed ipython_emacs. Milan explained to me how to pass
4456 * Removed ipython_emacs. Milan explained to me how to pass
4451 arguments to ipython through Emacs. Some day I'm going to end up
4457 arguments to ipython through Emacs. Some day I'm going to end up
4452 learning some lisp...
4458 learning some lisp...
4453
4459
4454 2002-03-04 Fernando Perez <fperez@colorado.edu>
4460 2002-03-04 Fernando Perez <fperez@colorado.edu>
4455
4461
4456 * IPython/ipython_emacs: Created script to be used as the
4462 * IPython/ipython_emacs: Created script to be used as the
4457 py-python-command Emacs variable so we can pass IPython
4463 py-python-command Emacs variable so we can pass IPython
4458 parameters. I can't figure out how to tell Emacs directly to pass
4464 parameters. I can't figure out how to tell Emacs directly to pass
4459 parameters to IPython, so a dummy shell script will do it.
4465 parameters to IPython, so a dummy shell script will do it.
4460
4466
4461 Other enhancements made for things to work better under Emacs'
4467 Other enhancements made for things to work better under Emacs'
4462 various types of terminals. Many thanks to Milan Zamazal
4468 various types of terminals. Many thanks to Milan Zamazal
4463 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4469 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4464
4470
4465 2002-03-01 Fernando Perez <fperez@colorado.edu>
4471 2002-03-01 Fernando Perez <fperez@colorado.edu>
4466
4472
4467 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4473 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4468 that loading of readline is now optional. This gives better
4474 that loading of readline is now optional. This gives better
4469 control to emacs users.
4475 control to emacs users.
4470
4476
4471 * IPython/ultraTB.py (__date__): Modified color escape sequences
4477 * IPython/ultraTB.py (__date__): Modified color escape sequences
4472 and now things work fine under xterm and in Emacs' term buffers
4478 and now things work fine under xterm and in Emacs' term buffers
4473 (though not shell ones). Well, in emacs you get colors, but all
4479 (though not shell ones). Well, in emacs you get colors, but all
4474 seem to be 'light' colors (no difference between dark and light
4480 seem to be 'light' colors (no difference between dark and light
4475 ones). But the garbage chars are gone, and also in xterms. It
4481 ones). But the garbage chars are gone, and also in xterms. It
4476 seems that now I'm using 'cleaner' ansi sequences.
4482 seems that now I'm using 'cleaner' ansi sequences.
4477
4483
4478 2002-02-21 Fernando Perez <fperez@colorado.edu>
4484 2002-02-21 Fernando Perez <fperez@colorado.edu>
4479
4485
4480 * Released 0.2.7 (mainly to publish the scoping fix).
4486 * Released 0.2.7 (mainly to publish the scoping fix).
4481
4487
4482 * IPython/Logger.py (Logger.logstate): added. A corresponding
4488 * IPython/Logger.py (Logger.logstate): added. A corresponding
4483 @logstate magic was created.
4489 @logstate magic was created.
4484
4490
4485 * IPython/Magic.py: fixed nested scoping problem under Python
4491 * IPython/Magic.py: fixed nested scoping problem under Python
4486 2.1.x (automagic wasn't working).
4492 2.1.x (automagic wasn't working).
4487
4493
4488 2002-02-20 Fernando Perez <fperez@colorado.edu>
4494 2002-02-20 Fernando Perez <fperez@colorado.edu>
4489
4495
4490 * Released 0.2.6.
4496 * Released 0.2.6.
4491
4497
4492 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4498 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4493 option so that logs can come out without any headers at all.
4499 option so that logs can come out without any headers at all.
4494
4500
4495 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4501 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4496 SciPy.
4502 SciPy.
4497
4503
4498 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4504 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4499 that embedded IPython calls don't require vars() to be explicitly
4505 that embedded IPython calls don't require vars() to be explicitly
4500 passed. Now they are extracted from the caller's frame (code
4506 passed. Now they are extracted from the caller's frame (code
4501 snatched from Eric Jones' weave). Added better documentation to
4507 snatched from Eric Jones' weave). Added better documentation to
4502 the section on embedding and the example file.
4508 the section on embedding and the example file.
4503
4509
4504 * IPython/genutils.py (page): Changed so that under emacs, it just
4510 * IPython/genutils.py (page): Changed so that under emacs, it just
4505 prints the string. You can then page up and down in the emacs
4511 prints the string. You can then page up and down in the emacs
4506 buffer itself. This is how the builtin help() works.
4512 buffer itself. This is how the builtin help() works.
4507
4513
4508 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4514 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4509 macro scoping: macros need to be executed in the user's namespace
4515 macro scoping: macros need to be executed in the user's namespace
4510 to work as if they had been typed by the user.
4516 to work as if they had been typed by the user.
4511
4517
4512 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4518 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4513 execute automatically (no need to type 'exec...'). They then
4519 execute automatically (no need to type 'exec...'). They then
4514 behave like 'true macros'. The printing system was also modified
4520 behave like 'true macros'. The printing system was also modified
4515 for this to work.
4521 for this to work.
4516
4522
4517 2002-02-19 Fernando Perez <fperez@colorado.edu>
4523 2002-02-19 Fernando Perez <fperez@colorado.edu>
4518
4524
4519 * IPython/genutils.py (page_file): new function for paging files
4525 * IPython/genutils.py (page_file): new function for paging files
4520 in an OS-independent way. Also necessary for file viewing to work
4526 in an OS-independent way. Also necessary for file viewing to work
4521 well inside Emacs buffers.
4527 well inside Emacs buffers.
4522 (page): Added checks for being in an emacs buffer.
4528 (page): Added checks for being in an emacs buffer.
4523 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4529 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4524 same bug in iplib.
4530 same bug in iplib.
4525
4531
4526 2002-02-18 Fernando Perez <fperez@colorado.edu>
4532 2002-02-18 Fernando Perez <fperez@colorado.edu>
4527
4533
4528 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4534 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4529 of readline so that IPython can work inside an Emacs buffer.
4535 of readline so that IPython can work inside an Emacs buffer.
4530
4536
4531 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4537 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4532 method signatures (they weren't really bugs, but it looks cleaner
4538 method signatures (they weren't really bugs, but it looks cleaner
4533 and keeps PyChecker happy).
4539 and keeps PyChecker happy).
4534
4540
4535 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4541 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4536 for implementing various user-defined hooks. Currently only
4542 for implementing various user-defined hooks. Currently only
4537 display is done.
4543 display is done.
4538
4544
4539 * IPython/Prompts.py (CachedOutput._display): changed display
4545 * IPython/Prompts.py (CachedOutput._display): changed display
4540 functions so that they can be dynamically changed by users easily.
4546 functions so that they can be dynamically changed by users easily.
4541
4547
4542 * IPython/Extensions/numeric_formats.py (num_display): added an
4548 * IPython/Extensions/numeric_formats.py (num_display): added an
4543 extension for printing NumPy arrays in flexible manners. It
4549 extension for printing NumPy arrays in flexible manners. It
4544 doesn't do anything yet, but all the structure is in
4550 doesn't do anything yet, but all the structure is in
4545 place. Ultimately the plan is to implement output format control
4551 place. Ultimately the plan is to implement output format control
4546 like in Octave.
4552 like in Octave.
4547
4553
4548 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4554 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4549 methods are found at run-time by all the automatic machinery.
4555 methods are found at run-time by all the automatic machinery.
4550
4556
4551 2002-02-17 Fernando Perez <fperez@colorado.edu>
4557 2002-02-17 Fernando Perez <fperez@colorado.edu>
4552
4558
4553 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4559 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4554 whole file a little.
4560 whole file a little.
4555
4561
4556 * ToDo: closed this document. Now there's a new_design.lyx
4562 * ToDo: closed this document. Now there's a new_design.lyx
4557 document for all new ideas. Added making a pdf of it for the
4563 document for all new ideas. Added making a pdf of it for the
4558 end-user distro.
4564 end-user distro.
4559
4565
4560 * IPython/Logger.py (Logger.switch_log): Created this to replace
4566 * IPython/Logger.py (Logger.switch_log): Created this to replace
4561 logon() and logoff(). It also fixes a nasty crash reported by
4567 logon() and logoff(). It also fixes a nasty crash reported by
4562 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4568 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4563
4569
4564 * IPython/iplib.py (complete): got auto-completion to work with
4570 * IPython/iplib.py (complete): got auto-completion to work with
4565 automagic (I had wanted this for a long time).
4571 automagic (I had wanted this for a long time).
4566
4572
4567 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4573 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4568 to @file, since file() is now a builtin and clashes with automagic
4574 to @file, since file() is now a builtin and clashes with automagic
4569 for @file.
4575 for @file.
4570
4576
4571 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4577 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4572 of this was previously in iplib, which had grown to more than 2000
4578 of this was previously in iplib, which had grown to more than 2000
4573 lines, way too long. No new functionality, but it makes managing
4579 lines, way too long. No new functionality, but it makes managing
4574 the code a bit easier.
4580 the code a bit easier.
4575
4581
4576 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4582 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4577 information to crash reports.
4583 information to crash reports.
4578
4584
4579 2002-02-12 Fernando Perez <fperez@colorado.edu>
4585 2002-02-12 Fernando Perez <fperez@colorado.edu>
4580
4586
4581 * Released 0.2.5.
4587 * Released 0.2.5.
4582
4588
4583 2002-02-11 Fernando Perez <fperez@colorado.edu>
4589 2002-02-11 Fernando Perez <fperez@colorado.edu>
4584
4590
4585 * Wrote a relatively complete Windows installer. It puts
4591 * Wrote a relatively complete Windows installer. It puts
4586 everything in place, creates Start Menu entries and fixes the
4592 everything in place, creates Start Menu entries and fixes the
4587 color issues. Nothing fancy, but it works.
4593 color issues. Nothing fancy, but it works.
4588
4594
4589 2002-02-10 Fernando Perez <fperez@colorado.edu>
4595 2002-02-10 Fernando Perez <fperez@colorado.edu>
4590
4596
4591 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4597 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4592 os.path.expanduser() call so that we can type @run ~/myfile.py and
4598 os.path.expanduser() call so that we can type @run ~/myfile.py and
4593 have thigs work as expected.
4599 have thigs work as expected.
4594
4600
4595 * IPython/genutils.py (page): fixed exception handling so things
4601 * IPython/genutils.py (page): fixed exception handling so things
4596 work both in Unix and Windows correctly. Quitting a pager triggers
4602 work both in Unix and Windows correctly. Quitting a pager triggers
4597 an IOError/broken pipe in Unix, and in windows not finding a pager
4603 an IOError/broken pipe in Unix, and in windows not finding a pager
4598 is also an IOError, so I had to actually look at the return value
4604 is also an IOError, so I had to actually look at the return value
4599 of the exception, not just the exception itself. Should be ok now.
4605 of the exception, not just the exception itself. Should be ok now.
4600
4606
4601 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4607 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4602 modified to allow case-insensitive color scheme changes.
4608 modified to allow case-insensitive color scheme changes.
4603
4609
4604 2002-02-09 Fernando Perez <fperez@colorado.edu>
4610 2002-02-09 Fernando Perez <fperez@colorado.edu>
4605
4611
4606 * IPython/genutils.py (native_line_ends): new function to leave
4612 * IPython/genutils.py (native_line_ends): new function to leave
4607 user config files with os-native line-endings.
4613 user config files with os-native line-endings.
4608
4614
4609 * README and manual updates.
4615 * README and manual updates.
4610
4616
4611 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4617 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4612 instead of StringType to catch Unicode strings.
4618 instead of StringType to catch Unicode strings.
4613
4619
4614 * IPython/genutils.py (filefind): fixed bug for paths with
4620 * IPython/genutils.py (filefind): fixed bug for paths with
4615 embedded spaces (very common in Windows).
4621 embedded spaces (very common in Windows).
4616
4622
4617 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4623 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4618 files under Windows, so that they get automatically associated
4624 files under Windows, so that they get automatically associated
4619 with a text editor. Windows makes it a pain to handle
4625 with a text editor. Windows makes it a pain to handle
4620 extension-less files.
4626 extension-less files.
4621
4627
4622 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4628 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4623 warning about readline only occur for Posix. In Windows there's no
4629 warning about readline only occur for Posix. In Windows there's no
4624 way to get readline, so why bother with the warning.
4630 way to get readline, so why bother with the warning.
4625
4631
4626 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4632 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4627 for __str__ instead of dir(self), since dir() changed in 2.2.
4633 for __str__ instead of dir(self), since dir() changed in 2.2.
4628
4634
4629 * Ported to Windows! Tested on XP, I suspect it should work fine
4635 * Ported to Windows! Tested on XP, I suspect it should work fine
4630 on NT/2000, but I don't think it will work on 98 et al. That
4636 on NT/2000, but I don't think it will work on 98 et al. That
4631 series of Windows is such a piece of junk anyway that I won't try
4637 series of Windows is such a piece of junk anyway that I won't try
4632 porting it there. The XP port was straightforward, showed a few
4638 porting it there. The XP port was straightforward, showed a few
4633 bugs here and there (fixed all), in particular some string
4639 bugs here and there (fixed all), in particular some string
4634 handling stuff which required considering Unicode strings (which
4640 handling stuff which required considering Unicode strings (which
4635 Windows uses). This is good, but hasn't been too tested :) No
4641 Windows uses). This is good, but hasn't been too tested :) No
4636 fancy installer yet, I'll put a note in the manual so people at
4642 fancy installer yet, I'll put a note in the manual so people at
4637 least make manually a shortcut.
4643 least make manually a shortcut.
4638
4644
4639 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4645 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4640 into a single one, "colors". This now controls both prompt and
4646 into a single one, "colors". This now controls both prompt and
4641 exception color schemes, and can be changed both at startup
4647 exception color schemes, and can be changed both at startup
4642 (either via command-line switches or via ipythonrc files) and at
4648 (either via command-line switches or via ipythonrc files) and at
4643 runtime, with @colors.
4649 runtime, with @colors.
4644 (Magic.magic_run): renamed @prun to @run and removed the old
4650 (Magic.magic_run): renamed @prun to @run and removed the old
4645 @run. The two were too similar to warrant keeping both.
4651 @run. The two were too similar to warrant keeping both.
4646
4652
4647 2002-02-03 Fernando Perez <fperez@colorado.edu>
4653 2002-02-03 Fernando Perez <fperez@colorado.edu>
4648
4654
4649 * IPython/iplib.py (install_first_time): Added comment on how to
4655 * IPython/iplib.py (install_first_time): Added comment on how to
4650 configure the color options for first-time users. Put a <return>
4656 configure the color options for first-time users. Put a <return>
4651 request at the end so that small-terminal users get a chance to
4657 request at the end so that small-terminal users get a chance to
4652 read the startup info.
4658 read the startup info.
4653
4659
4654 2002-01-23 Fernando Perez <fperez@colorado.edu>
4660 2002-01-23 Fernando Perez <fperez@colorado.edu>
4655
4661
4656 * IPython/iplib.py (CachedOutput.update): Changed output memory
4662 * IPython/iplib.py (CachedOutput.update): Changed output memory
4657 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4663 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4658 input history we still use _i. Did this b/c these variable are
4664 input history we still use _i. Did this b/c these variable are
4659 very commonly used in interactive work, so the less we need to
4665 very commonly used in interactive work, so the less we need to
4660 type the better off we are.
4666 type the better off we are.
4661 (Magic.magic_prun): updated @prun to better handle the namespaces
4667 (Magic.magic_prun): updated @prun to better handle the namespaces
4662 the file will run in, including a fix for __name__ not being set
4668 the file will run in, including a fix for __name__ not being set
4663 before.
4669 before.
4664
4670
4665 2002-01-20 Fernando Perez <fperez@colorado.edu>
4671 2002-01-20 Fernando Perez <fperez@colorado.edu>
4666
4672
4667 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4673 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4668 extra garbage for Python 2.2. Need to look more carefully into
4674 extra garbage for Python 2.2. Need to look more carefully into
4669 this later.
4675 this later.
4670
4676
4671 2002-01-19 Fernando Perez <fperez@colorado.edu>
4677 2002-01-19 Fernando Perez <fperez@colorado.edu>
4672
4678
4673 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4679 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4674 display SyntaxError exceptions properly formatted when they occur
4680 display SyntaxError exceptions properly formatted when they occur
4675 (they can be triggered by imported code).
4681 (they can be triggered by imported code).
4676
4682
4677 2002-01-18 Fernando Perez <fperez@colorado.edu>
4683 2002-01-18 Fernando Perez <fperez@colorado.edu>
4678
4684
4679 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4685 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4680 SyntaxError exceptions are reported nicely formatted, instead of
4686 SyntaxError exceptions are reported nicely formatted, instead of
4681 spitting out only offset information as before.
4687 spitting out only offset information as before.
4682 (Magic.magic_prun): Added the @prun function for executing
4688 (Magic.magic_prun): Added the @prun function for executing
4683 programs with command line args inside IPython.
4689 programs with command line args inside IPython.
4684
4690
4685 2002-01-16 Fernando Perez <fperez@colorado.edu>
4691 2002-01-16 Fernando Perez <fperez@colorado.edu>
4686
4692
4687 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4693 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4688 to *not* include the last item given in a range. This brings their
4694 to *not* include the last item given in a range. This brings their
4689 behavior in line with Python's slicing:
4695 behavior in line with Python's slicing:
4690 a[n1:n2] -> a[n1]...a[n2-1]
4696 a[n1:n2] -> a[n1]...a[n2-1]
4691 It may be a bit less convenient, but I prefer to stick to Python's
4697 It may be a bit less convenient, but I prefer to stick to Python's
4692 conventions *everywhere*, so users never have to wonder.
4698 conventions *everywhere*, so users never have to wonder.
4693 (Magic.magic_macro): Added @macro function to ease the creation of
4699 (Magic.magic_macro): Added @macro function to ease the creation of
4694 macros.
4700 macros.
4695
4701
4696 2002-01-05 Fernando Perez <fperez@colorado.edu>
4702 2002-01-05 Fernando Perez <fperez@colorado.edu>
4697
4703
4698 * Released 0.2.4.
4704 * Released 0.2.4.
4699
4705
4700 * IPython/iplib.py (Magic.magic_pdef):
4706 * IPython/iplib.py (Magic.magic_pdef):
4701 (InteractiveShell.safe_execfile): report magic lines and error
4707 (InteractiveShell.safe_execfile): report magic lines and error
4702 lines without line numbers so one can easily copy/paste them for
4708 lines without line numbers so one can easily copy/paste them for
4703 re-execution.
4709 re-execution.
4704
4710
4705 * Updated manual with recent changes.
4711 * Updated manual with recent changes.
4706
4712
4707 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4713 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4708 docstring printing when class? is called. Very handy for knowing
4714 docstring printing when class? is called. Very handy for knowing
4709 how to create class instances (as long as __init__ is well
4715 how to create class instances (as long as __init__ is well
4710 documented, of course :)
4716 documented, of course :)
4711 (Magic.magic_doc): print both class and constructor docstrings.
4717 (Magic.magic_doc): print both class and constructor docstrings.
4712 (Magic.magic_pdef): give constructor info if passed a class and
4718 (Magic.magic_pdef): give constructor info if passed a class and
4713 __call__ info for callable object instances.
4719 __call__ info for callable object instances.
4714
4720
4715 2002-01-04 Fernando Perez <fperez@colorado.edu>
4721 2002-01-04 Fernando Perez <fperez@colorado.edu>
4716
4722
4717 * Made deep_reload() off by default. It doesn't always work
4723 * Made deep_reload() off by default. It doesn't always work
4718 exactly as intended, so it's probably safer to have it off. It's
4724 exactly as intended, so it's probably safer to have it off. It's
4719 still available as dreload() anyway, so nothing is lost.
4725 still available as dreload() anyway, so nothing is lost.
4720
4726
4721 2002-01-02 Fernando Perez <fperez@colorado.edu>
4727 2002-01-02 Fernando Perez <fperez@colorado.edu>
4722
4728
4723 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4729 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4724 so I wanted an updated release).
4730 so I wanted an updated release).
4725
4731
4726 2001-12-27 Fernando Perez <fperez@colorado.edu>
4732 2001-12-27 Fernando Perez <fperez@colorado.edu>
4727
4733
4728 * IPython/iplib.py (InteractiveShell.interact): Added the original
4734 * IPython/iplib.py (InteractiveShell.interact): Added the original
4729 code from 'code.py' for this module in order to change the
4735 code from 'code.py' for this module in order to change the
4730 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4736 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4731 the history cache would break when the user hit Ctrl-C, and
4737 the history cache would break when the user hit Ctrl-C, and
4732 interact() offers no way to add any hooks to it.
4738 interact() offers no way to add any hooks to it.
4733
4739
4734 2001-12-23 Fernando Perez <fperez@colorado.edu>
4740 2001-12-23 Fernando Perez <fperez@colorado.edu>
4735
4741
4736 * setup.py: added check for 'MANIFEST' before trying to remove
4742 * setup.py: added check for 'MANIFEST' before trying to remove
4737 it. Thanks to Sean Reifschneider.
4743 it. Thanks to Sean Reifschneider.
4738
4744
4739 2001-12-22 Fernando Perez <fperez@colorado.edu>
4745 2001-12-22 Fernando Perez <fperez@colorado.edu>
4740
4746
4741 * Released 0.2.2.
4747 * Released 0.2.2.
4742
4748
4743 * Finished (reasonably) writing the manual. Later will add the
4749 * Finished (reasonably) writing the manual. Later will add the
4744 python-standard navigation stylesheets, but for the time being
4750 python-standard navigation stylesheets, but for the time being
4745 it's fairly complete. Distribution will include html and pdf
4751 it's fairly complete. Distribution will include html and pdf
4746 versions.
4752 versions.
4747
4753
4748 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4754 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4749 (MayaVi author).
4755 (MayaVi author).
4750
4756
4751 2001-12-21 Fernando Perez <fperez@colorado.edu>
4757 2001-12-21 Fernando Perez <fperez@colorado.edu>
4752
4758
4753 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4759 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4754 good public release, I think (with the manual and the distutils
4760 good public release, I think (with the manual and the distutils
4755 installer). The manual can use some work, but that can go
4761 installer). The manual can use some work, but that can go
4756 slowly. Otherwise I think it's quite nice for end users. Next
4762 slowly. Otherwise I think it's quite nice for end users. Next
4757 summer, rewrite the guts of it...
4763 summer, rewrite the guts of it...
4758
4764
4759 * Changed format of ipythonrc files to use whitespace as the
4765 * Changed format of ipythonrc files to use whitespace as the
4760 separator instead of an explicit '='. Cleaner.
4766 separator instead of an explicit '='. Cleaner.
4761
4767
4762 2001-12-20 Fernando Perez <fperez@colorado.edu>
4768 2001-12-20 Fernando Perez <fperez@colorado.edu>
4763
4769
4764 * Started a manual in LyX. For now it's just a quick merge of the
4770 * Started a manual in LyX. For now it's just a quick merge of the
4765 various internal docstrings and READMEs. Later it may grow into a
4771 various internal docstrings and READMEs. Later it may grow into a
4766 nice, full-blown manual.
4772 nice, full-blown manual.
4767
4773
4768 * Set up a distutils based installer. Installation should now be
4774 * Set up a distutils based installer. Installation should now be
4769 trivially simple for end-users.
4775 trivially simple for end-users.
4770
4776
4771 2001-12-11 Fernando Perez <fperez@colorado.edu>
4777 2001-12-11 Fernando Perez <fperez@colorado.edu>
4772
4778
4773 * Released 0.2.0. First public release, announced it at
4779 * Released 0.2.0. First public release, announced it at
4774 comp.lang.python. From now on, just bugfixes...
4780 comp.lang.python. From now on, just bugfixes...
4775
4781
4776 * Went through all the files, set copyright/license notices and
4782 * Went through all the files, set copyright/license notices and
4777 cleaned up things. Ready for release.
4783 cleaned up things. Ready for release.
4778
4784
4779 2001-12-10 Fernando Perez <fperez@colorado.edu>
4785 2001-12-10 Fernando Perez <fperez@colorado.edu>
4780
4786
4781 * Changed the first-time installer not to use tarfiles. It's more
4787 * Changed the first-time installer not to use tarfiles. It's more
4782 robust now and less unix-dependent. Also makes it easier for
4788 robust now and less unix-dependent. Also makes it easier for
4783 people to later upgrade versions.
4789 people to later upgrade versions.
4784
4790
4785 * Changed @exit to @abort to reflect the fact that it's pretty
4791 * Changed @exit to @abort to reflect the fact that it's pretty
4786 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4792 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4787 becomes significant only when IPyhton is embedded: in that case,
4793 becomes significant only when IPyhton is embedded: in that case,
4788 C-D closes IPython only, but @abort kills the enclosing program
4794 C-D closes IPython only, but @abort kills the enclosing program
4789 too (unless it had called IPython inside a try catching
4795 too (unless it had called IPython inside a try catching
4790 SystemExit).
4796 SystemExit).
4791
4797
4792 * Created Shell module which exposes the actuall IPython Shell
4798 * Created Shell module which exposes the actuall IPython Shell
4793 classes, currently the normal and the embeddable one. This at
4799 classes, currently the normal and the embeddable one. This at
4794 least offers a stable interface we won't need to change when
4800 least offers a stable interface we won't need to change when
4795 (later) the internals are rewritten. That rewrite will be confined
4801 (later) the internals are rewritten. That rewrite will be confined
4796 to iplib and ipmaker, but the Shell interface should remain as is.
4802 to iplib and ipmaker, but the Shell interface should remain as is.
4797
4803
4798 * Added embed module which offers an embeddable IPShell object,
4804 * Added embed module which offers an embeddable IPShell object,
4799 useful to fire up IPython *inside* a running program. Great for
4805 useful to fire up IPython *inside* a running program. Great for
4800 debugging or dynamical data analysis.
4806 debugging or dynamical data analysis.
4801
4807
4802 2001-12-08 Fernando Perez <fperez@colorado.edu>
4808 2001-12-08 Fernando Perez <fperez@colorado.edu>
4803
4809
4804 * Fixed small bug preventing seeing info from methods of defined
4810 * Fixed small bug preventing seeing info from methods of defined
4805 objects (incorrect namespace in _ofind()).
4811 objects (incorrect namespace in _ofind()).
4806
4812
4807 * Documentation cleanup. Moved the main usage docstrings to a
4813 * Documentation cleanup. Moved the main usage docstrings to a
4808 separate file, usage.py (cleaner to maintain, and hopefully in the
4814 separate file, usage.py (cleaner to maintain, and hopefully in the
4809 future some perlpod-like way of producing interactive, man and
4815 future some perlpod-like way of producing interactive, man and
4810 html docs out of it will be found).
4816 html docs out of it will be found).
4811
4817
4812 * Added @profile to see your profile at any time.
4818 * Added @profile to see your profile at any time.
4813
4819
4814 * Added @p as an alias for 'print'. It's especially convenient if
4820 * Added @p as an alias for 'print'. It's especially convenient if
4815 using automagic ('p x' prints x).
4821 using automagic ('p x' prints x).
4816
4822
4817 * Small cleanups and fixes after a pychecker run.
4823 * Small cleanups and fixes after a pychecker run.
4818
4824
4819 * Changed the @cd command to handle @cd - and @cd -<n> for
4825 * Changed the @cd command to handle @cd - and @cd -<n> for
4820 visiting any directory in _dh.
4826 visiting any directory in _dh.
4821
4827
4822 * Introduced _dh, a history of visited directories. @dhist prints
4828 * Introduced _dh, a history of visited directories. @dhist prints
4823 it out with numbers.
4829 it out with numbers.
4824
4830
4825 2001-12-07 Fernando Perez <fperez@colorado.edu>
4831 2001-12-07 Fernando Perez <fperez@colorado.edu>
4826
4832
4827 * Released 0.1.22
4833 * Released 0.1.22
4828
4834
4829 * Made initialization a bit more robust against invalid color
4835 * Made initialization a bit more robust against invalid color
4830 options in user input (exit, not traceback-crash).
4836 options in user input (exit, not traceback-crash).
4831
4837
4832 * Changed the bug crash reporter to write the report only in the
4838 * Changed the bug crash reporter to write the report only in the
4833 user's .ipython directory. That way IPython won't litter people's
4839 user's .ipython directory. That way IPython won't litter people's
4834 hard disks with crash files all over the place. Also print on
4840 hard disks with crash files all over the place. Also print on
4835 screen the necessary mail command.
4841 screen the necessary mail command.
4836
4842
4837 * With the new ultraTB, implemented LightBG color scheme for light
4843 * With the new ultraTB, implemented LightBG color scheme for light
4838 background terminals. A lot of people like white backgrounds, so I
4844 background terminals. A lot of people like white backgrounds, so I
4839 guess we should at least give them something readable.
4845 guess we should at least give them something readable.
4840
4846
4841 2001-12-06 Fernando Perez <fperez@colorado.edu>
4847 2001-12-06 Fernando Perez <fperez@colorado.edu>
4842
4848
4843 * Modified the structure of ultraTB. Now there's a proper class
4849 * Modified the structure of ultraTB. Now there's a proper class
4844 for tables of color schemes which allow adding schemes easily and
4850 for tables of color schemes which allow adding schemes easily and
4845 switching the active scheme without creating a new instance every
4851 switching the active scheme without creating a new instance every
4846 time (which was ridiculous). The syntax for creating new schemes
4852 time (which was ridiculous). The syntax for creating new schemes
4847 is also cleaner. I think ultraTB is finally done, with a clean
4853 is also cleaner. I think ultraTB is finally done, with a clean
4848 class structure. Names are also much cleaner (now there's proper
4854 class structure. Names are also much cleaner (now there's proper
4849 color tables, no need for every variable to also have 'color' in
4855 color tables, no need for every variable to also have 'color' in
4850 its name).
4856 its name).
4851
4857
4852 * Broke down genutils into separate files. Now genutils only
4858 * Broke down genutils into separate files. Now genutils only
4853 contains utility functions, and classes have been moved to their
4859 contains utility functions, and classes have been moved to their
4854 own files (they had enough independent functionality to warrant
4860 own files (they had enough independent functionality to warrant
4855 it): ConfigLoader, OutputTrap, Struct.
4861 it): ConfigLoader, OutputTrap, Struct.
4856
4862
4857 2001-12-05 Fernando Perez <fperez@colorado.edu>
4863 2001-12-05 Fernando Perez <fperez@colorado.edu>
4858
4864
4859 * IPython turns 21! Released version 0.1.21, as a candidate for
4865 * IPython turns 21! Released version 0.1.21, as a candidate for
4860 public consumption. If all goes well, release in a few days.
4866 public consumption. If all goes well, release in a few days.
4861
4867
4862 * Fixed path bug (files in Extensions/ directory wouldn't be found
4868 * Fixed path bug (files in Extensions/ directory wouldn't be found
4863 unless IPython/ was explicitly in sys.path).
4869 unless IPython/ was explicitly in sys.path).
4864
4870
4865 * Extended the FlexCompleter class as MagicCompleter to allow
4871 * Extended the FlexCompleter class as MagicCompleter to allow
4866 completion of @-starting lines.
4872 completion of @-starting lines.
4867
4873
4868 * Created __release__.py file as a central repository for release
4874 * Created __release__.py file as a central repository for release
4869 info that other files can read from.
4875 info that other files can read from.
4870
4876
4871 * Fixed small bug in logging: when logging was turned on in
4877 * Fixed small bug in logging: when logging was turned on in
4872 mid-session, old lines with special meanings (!@?) were being
4878 mid-session, old lines with special meanings (!@?) were being
4873 logged without the prepended comment, which is necessary since
4879 logged without the prepended comment, which is necessary since
4874 they are not truly valid python syntax. This should make session
4880 they are not truly valid python syntax. This should make session
4875 restores produce less errors.
4881 restores produce less errors.
4876
4882
4877 * The namespace cleanup forced me to make a FlexCompleter class
4883 * The namespace cleanup forced me to make a FlexCompleter class
4878 which is nothing but a ripoff of rlcompleter, but with selectable
4884 which is nothing but a ripoff of rlcompleter, but with selectable
4879 namespace (rlcompleter only works in __main__.__dict__). I'll try
4885 namespace (rlcompleter only works in __main__.__dict__). I'll try
4880 to submit a note to the authors to see if this change can be
4886 to submit a note to the authors to see if this change can be
4881 incorporated in future rlcompleter releases (Dec.6: done)
4887 incorporated in future rlcompleter releases (Dec.6: done)
4882
4888
4883 * More fixes to namespace handling. It was a mess! Now all
4889 * More fixes to namespace handling. It was a mess! Now all
4884 explicit references to __main__.__dict__ are gone (except when
4890 explicit references to __main__.__dict__ are gone (except when
4885 really needed) and everything is handled through the namespace
4891 really needed) and everything is handled through the namespace
4886 dicts in the IPython instance. We seem to be getting somewhere
4892 dicts in the IPython instance. We seem to be getting somewhere
4887 with this, finally...
4893 with this, finally...
4888
4894
4889 * Small documentation updates.
4895 * Small documentation updates.
4890
4896
4891 * Created the Extensions directory under IPython (with an
4897 * Created the Extensions directory under IPython (with an
4892 __init__.py). Put the PhysicalQ stuff there. This directory should
4898 __init__.py). Put the PhysicalQ stuff there. This directory should
4893 be used for all special-purpose extensions.
4899 be used for all special-purpose extensions.
4894
4900
4895 * File renaming:
4901 * File renaming:
4896 ipythonlib --> ipmaker
4902 ipythonlib --> ipmaker
4897 ipplib --> iplib
4903 ipplib --> iplib
4898 This makes a bit more sense in terms of what these files actually do.
4904 This makes a bit more sense in terms of what these files actually do.
4899
4905
4900 * Moved all the classes and functions in ipythonlib to ipplib, so
4906 * Moved all the classes and functions in ipythonlib to ipplib, so
4901 now ipythonlib only has make_IPython(). This will ease up its
4907 now ipythonlib only has make_IPython(). This will ease up its
4902 splitting in smaller functional chunks later.
4908 splitting in smaller functional chunks later.
4903
4909
4904 * Cleaned up (done, I think) output of @whos. Better column
4910 * Cleaned up (done, I think) output of @whos. Better column
4905 formatting, and now shows str(var) for as much as it can, which is
4911 formatting, and now shows str(var) for as much as it can, which is
4906 typically what one gets with a 'print var'.
4912 typically what one gets with a 'print var'.
4907
4913
4908 2001-12-04 Fernando Perez <fperez@colorado.edu>
4914 2001-12-04 Fernando Perez <fperez@colorado.edu>
4909
4915
4910 * Fixed namespace problems. Now builtin/IPyhton/user names get
4916 * Fixed namespace problems. Now builtin/IPyhton/user names get
4911 properly reported in their namespace. Internal namespace handling
4917 properly reported in their namespace. Internal namespace handling
4912 is finally getting decent (not perfect yet, but much better than
4918 is finally getting decent (not perfect yet, but much better than
4913 the ad-hoc mess we had).
4919 the ad-hoc mess we had).
4914
4920
4915 * Removed -exit option. If people just want to run a python
4921 * Removed -exit option. If people just want to run a python
4916 script, that's what the normal interpreter is for. Less
4922 script, that's what the normal interpreter is for. Less
4917 unnecessary options, less chances for bugs.
4923 unnecessary options, less chances for bugs.
4918
4924
4919 * Added a crash handler which generates a complete post-mortem if
4925 * Added a crash handler which generates a complete post-mortem if
4920 IPython crashes. This will help a lot in tracking bugs down the
4926 IPython crashes. This will help a lot in tracking bugs down the
4921 road.
4927 road.
4922
4928
4923 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4929 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4924 which were boud to functions being reassigned would bypass the
4930 which were boud to functions being reassigned would bypass the
4925 logger, breaking the sync of _il with the prompt counter. This
4931 logger, breaking the sync of _il with the prompt counter. This
4926 would then crash IPython later when a new line was logged.
4932 would then crash IPython later when a new line was logged.
4927
4933
4928 2001-12-02 Fernando Perez <fperez@colorado.edu>
4934 2001-12-02 Fernando Perez <fperez@colorado.edu>
4929
4935
4930 * Made IPython a package. This means people don't have to clutter
4936 * Made IPython a package. This means people don't have to clutter
4931 their sys.path with yet another directory. Changed the INSTALL
4937 their sys.path with yet another directory. Changed the INSTALL
4932 file accordingly.
4938 file accordingly.
4933
4939
4934 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4940 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4935 sorts its output (so @who shows it sorted) and @whos formats the
4941 sorts its output (so @who shows it sorted) and @whos formats the
4936 table according to the width of the first column. Nicer, easier to
4942 table according to the width of the first column. Nicer, easier to
4937 read. Todo: write a generic table_format() which takes a list of
4943 read. Todo: write a generic table_format() which takes a list of
4938 lists and prints it nicely formatted, with optional row/column
4944 lists and prints it nicely formatted, with optional row/column
4939 separators and proper padding and justification.
4945 separators and proper padding and justification.
4940
4946
4941 * Released 0.1.20
4947 * Released 0.1.20
4942
4948
4943 * Fixed bug in @log which would reverse the inputcache list (a
4949 * Fixed bug in @log which would reverse the inputcache list (a
4944 copy operation was missing).
4950 copy operation was missing).
4945
4951
4946 * Code cleanup. @config was changed to use page(). Better, since
4952 * Code cleanup. @config was changed to use page(). Better, since
4947 its output is always quite long.
4953 its output is always quite long.
4948
4954
4949 * Itpl is back as a dependency. I was having too many problems
4955 * Itpl is back as a dependency. I was having too many problems
4950 getting the parametric aliases to work reliably, and it's just
4956 getting the parametric aliases to work reliably, and it's just
4951 easier to code weird string operations with it than playing %()s
4957 easier to code weird string operations with it than playing %()s
4952 games. It's only ~6k, so I don't think it's too big a deal.
4958 games. It's only ~6k, so I don't think it's too big a deal.
4953
4959
4954 * Found (and fixed) a very nasty bug with history. !lines weren't
4960 * Found (and fixed) a very nasty bug with history. !lines weren't
4955 getting cached, and the out of sync caches would crash
4961 getting cached, and the out of sync caches would crash
4956 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4962 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4957 division of labor a bit better. Bug fixed, cleaner structure.
4963 division of labor a bit better. Bug fixed, cleaner structure.
4958
4964
4959 2001-12-01 Fernando Perez <fperez@colorado.edu>
4965 2001-12-01 Fernando Perez <fperez@colorado.edu>
4960
4966
4961 * Released 0.1.19
4967 * Released 0.1.19
4962
4968
4963 * Added option -n to @hist to prevent line number printing. Much
4969 * Added option -n to @hist to prevent line number printing. Much
4964 easier to copy/paste code this way.
4970 easier to copy/paste code this way.
4965
4971
4966 * Created global _il to hold the input list. Allows easy
4972 * Created global _il to hold the input list. Allows easy
4967 re-execution of blocks of code by slicing it (inspired by Janko's
4973 re-execution of blocks of code by slicing it (inspired by Janko's
4968 comment on 'macros').
4974 comment on 'macros').
4969
4975
4970 * Small fixes and doc updates.
4976 * Small fixes and doc updates.
4971
4977
4972 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4978 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4973 much too fragile with automagic. Handles properly multi-line
4979 much too fragile with automagic. Handles properly multi-line
4974 statements and takes parameters.
4980 statements and takes parameters.
4975
4981
4976 2001-11-30 Fernando Perez <fperez@colorado.edu>
4982 2001-11-30 Fernando Perez <fperez@colorado.edu>
4977
4983
4978 * Version 0.1.18 released.
4984 * Version 0.1.18 released.
4979
4985
4980 * Fixed nasty namespace bug in initial module imports.
4986 * Fixed nasty namespace bug in initial module imports.
4981
4987
4982 * Added copyright/license notes to all code files (except
4988 * Added copyright/license notes to all code files (except
4983 DPyGetOpt). For the time being, LGPL. That could change.
4989 DPyGetOpt). For the time being, LGPL. That could change.
4984
4990
4985 * Rewrote a much nicer README, updated INSTALL, cleaned up
4991 * Rewrote a much nicer README, updated INSTALL, cleaned up
4986 ipythonrc-* samples.
4992 ipythonrc-* samples.
4987
4993
4988 * Overall code/documentation cleanup. Basically ready for
4994 * Overall code/documentation cleanup. Basically ready for
4989 release. Only remaining thing: licence decision (LGPL?).
4995 release. Only remaining thing: licence decision (LGPL?).
4990
4996
4991 * Converted load_config to a class, ConfigLoader. Now recursion
4997 * Converted load_config to a class, ConfigLoader. Now recursion
4992 control is better organized. Doesn't include the same file twice.
4998 control is better organized. Doesn't include the same file twice.
4993
4999
4994 2001-11-29 Fernando Perez <fperez@colorado.edu>
5000 2001-11-29 Fernando Perez <fperez@colorado.edu>
4995
5001
4996 * Got input history working. Changed output history variables from
5002 * Got input history working. Changed output history variables from
4997 _p to _o so that _i is for input and _o for output. Just cleaner
5003 _p to _o so that _i is for input and _o for output. Just cleaner
4998 convention.
5004 convention.
4999
5005
5000 * Implemented parametric aliases. This pretty much allows the
5006 * Implemented parametric aliases. This pretty much allows the
5001 alias system to offer full-blown shell convenience, I think.
5007 alias system to offer full-blown shell convenience, I think.
5002
5008
5003 * Version 0.1.17 released, 0.1.18 opened.
5009 * Version 0.1.17 released, 0.1.18 opened.
5004
5010
5005 * dot_ipython/ipythonrc (alias): added documentation.
5011 * dot_ipython/ipythonrc (alias): added documentation.
5006 (xcolor): Fixed small bug (xcolors -> xcolor)
5012 (xcolor): Fixed small bug (xcolors -> xcolor)
5007
5013
5008 * Changed the alias system. Now alias is a magic command to define
5014 * Changed the alias system. Now alias is a magic command to define
5009 aliases just like the shell. Rationale: the builtin magics should
5015 aliases just like the shell. Rationale: the builtin magics should
5010 be there for things deeply connected to IPython's
5016 be there for things deeply connected to IPython's
5011 architecture. And this is a much lighter system for what I think
5017 architecture. And this is a much lighter system for what I think
5012 is the really important feature: allowing users to define quickly
5018 is the really important feature: allowing users to define quickly
5013 magics that will do shell things for them, so they can customize
5019 magics that will do shell things for them, so they can customize
5014 IPython easily to match their work habits. If someone is really
5020 IPython easily to match their work habits. If someone is really
5015 desperate to have another name for a builtin alias, they can
5021 desperate to have another name for a builtin alias, they can
5016 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5022 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5017 works.
5023 works.
5018
5024
5019 2001-11-28 Fernando Perez <fperez@colorado.edu>
5025 2001-11-28 Fernando Perez <fperez@colorado.edu>
5020
5026
5021 * Changed @file so that it opens the source file at the proper
5027 * Changed @file so that it opens the source file at the proper
5022 line. Since it uses less, if your EDITOR environment is
5028 line. Since it uses less, if your EDITOR environment is
5023 configured, typing v will immediately open your editor of choice
5029 configured, typing v will immediately open your editor of choice
5024 right at the line where the object is defined. Not as quick as
5030 right at the line where the object is defined. Not as quick as
5025 having a direct @edit command, but for all intents and purposes it
5031 having a direct @edit command, but for all intents and purposes it
5026 works. And I don't have to worry about writing @edit to deal with
5032 works. And I don't have to worry about writing @edit to deal with
5027 all the editors, less does that.
5033 all the editors, less does that.
5028
5034
5029 * Version 0.1.16 released, 0.1.17 opened.
5035 * Version 0.1.16 released, 0.1.17 opened.
5030
5036
5031 * Fixed some nasty bugs in the page/page_dumb combo that could
5037 * Fixed some nasty bugs in the page/page_dumb combo that could
5032 crash IPython.
5038 crash IPython.
5033
5039
5034 2001-11-27 Fernando Perez <fperez@colorado.edu>
5040 2001-11-27 Fernando Perez <fperez@colorado.edu>
5035
5041
5036 * Version 0.1.15 released, 0.1.16 opened.
5042 * Version 0.1.15 released, 0.1.16 opened.
5037
5043
5038 * Finally got ? and ?? to work for undefined things: now it's
5044 * Finally got ? and ?? to work for undefined things: now it's
5039 possible to type {}.get? and get information about the get method
5045 possible to type {}.get? and get information about the get method
5040 of dicts, or os.path? even if only os is defined (so technically
5046 of dicts, or os.path? even if only os is defined (so technically
5041 os.path isn't). Works at any level. For example, after import os,
5047 os.path isn't). Works at any level. For example, after import os,
5042 os?, os.path?, os.path.abspath? all work. This is great, took some
5048 os?, os.path?, os.path.abspath? all work. This is great, took some
5043 work in _ofind.
5049 work in _ofind.
5044
5050
5045 * Fixed more bugs with logging. The sanest way to do it was to add
5051 * Fixed more bugs with logging. The sanest way to do it was to add
5046 to @log a 'mode' parameter. Killed two in one shot (this mode
5052 to @log a 'mode' parameter. Killed two in one shot (this mode
5047 option was a request of Janko's). I think it's finally clean
5053 option was a request of Janko's). I think it's finally clean
5048 (famous last words).
5054 (famous last words).
5049
5055
5050 * Added a page_dumb() pager which does a decent job of paging on
5056 * Added a page_dumb() pager which does a decent job of paging on
5051 screen, if better things (like less) aren't available. One less
5057 screen, if better things (like less) aren't available. One less
5052 unix dependency (someday maybe somebody will port this to
5058 unix dependency (someday maybe somebody will port this to
5053 windows).
5059 windows).
5054
5060
5055 * Fixed problem in magic_log: would lock of logging out if log
5061 * Fixed problem in magic_log: would lock of logging out if log
5056 creation failed (because it would still think it had succeeded).
5062 creation failed (because it would still think it had succeeded).
5057
5063
5058 * Improved the page() function using curses to auto-detect screen
5064 * Improved the page() function using curses to auto-detect screen
5059 size. Now it can make a much better decision on whether to print
5065 size. Now it can make a much better decision on whether to print
5060 or page a string. Option screen_length was modified: a value 0
5066 or page a string. Option screen_length was modified: a value 0
5061 means auto-detect, and that's the default now.
5067 means auto-detect, and that's the default now.
5062
5068
5063 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5069 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5064 go out. I'll test it for a few days, then talk to Janko about
5070 go out. I'll test it for a few days, then talk to Janko about
5065 licences and announce it.
5071 licences and announce it.
5066
5072
5067 * Fixed the length of the auto-generated ---> prompt which appears
5073 * Fixed the length of the auto-generated ---> prompt which appears
5068 for auto-parens and auto-quotes. Getting this right isn't trivial,
5074 for auto-parens and auto-quotes. Getting this right isn't trivial,
5069 with all the color escapes, different prompt types and optional
5075 with all the color escapes, different prompt types and optional
5070 separators. But it seems to be working in all the combinations.
5076 separators. But it seems to be working in all the combinations.
5071
5077
5072 2001-11-26 Fernando Perez <fperez@colorado.edu>
5078 2001-11-26 Fernando Perez <fperez@colorado.edu>
5073
5079
5074 * Wrote a regexp filter to get option types from the option names
5080 * Wrote a regexp filter to get option types from the option names
5075 string. This eliminates the need to manually keep two duplicate
5081 string. This eliminates the need to manually keep two duplicate
5076 lists.
5082 lists.
5077
5083
5078 * Removed the unneeded check_option_names. Now options are handled
5084 * Removed the unneeded check_option_names. Now options are handled
5079 in a much saner manner and it's easy to visually check that things
5085 in a much saner manner and it's easy to visually check that things
5080 are ok.
5086 are ok.
5081
5087
5082 * Updated version numbers on all files I modified to carry a
5088 * Updated version numbers on all files I modified to carry a
5083 notice so Janko and Nathan have clear version markers.
5089 notice so Janko and Nathan have clear version markers.
5084
5090
5085 * Updated docstring for ultraTB with my changes. I should send
5091 * Updated docstring for ultraTB with my changes. I should send
5086 this to Nathan.
5092 this to Nathan.
5087
5093
5088 * Lots of small fixes. Ran everything through pychecker again.
5094 * Lots of small fixes. Ran everything through pychecker again.
5089
5095
5090 * Made loading of deep_reload an cmd line option. If it's not too
5096 * Made loading of deep_reload an cmd line option. If it's not too
5091 kosher, now people can just disable it. With -nodeep_reload it's
5097 kosher, now people can just disable it. With -nodeep_reload it's
5092 still available as dreload(), it just won't overwrite reload().
5098 still available as dreload(), it just won't overwrite reload().
5093
5099
5094 * Moved many options to the no| form (-opt and -noopt
5100 * Moved many options to the no| form (-opt and -noopt
5095 accepted). Cleaner.
5101 accepted). Cleaner.
5096
5102
5097 * Changed magic_log so that if called with no parameters, it uses
5103 * Changed magic_log so that if called with no parameters, it uses
5098 'rotate' mode. That way auto-generated logs aren't automatically
5104 'rotate' mode. That way auto-generated logs aren't automatically
5099 over-written. For normal logs, now a backup is made if it exists
5105 over-written. For normal logs, now a backup is made if it exists
5100 (only 1 level of backups). A new 'backup' mode was added to the
5106 (only 1 level of backups). A new 'backup' mode was added to the
5101 Logger class to support this. This was a request by Janko.
5107 Logger class to support this. This was a request by Janko.
5102
5108
5103 * Added @logoff/@logon to stop/restart an active log.
5109 * Added @logoff/@logon to stop/restart an active log.
5104
5110
5105 * Fixed a lot of bugs in log saving/replay. It was pretty
5111 * Fixed a lot of bugs in log saving/replay. It was pretty
5106 broken. Now special lines (!@,/) appear properly in the command
5112 broken. Now special lines (!@,/) appear properly in the command
5107 history after a log replay.
5113 history after a log replay.
5108
5114
5109 * Tried and failed to implement full session saving via pickle. My
5115 * Tried and failed to implement full session saving via pickle. My
5110 idea was to pickle __main__.__dict__, but modules can't be
5116 idea was to pickle __main__.__dict__, but modules can't be
5111 pickled. This would be a better alternative to replaying logs, but
5117 pickled. This would be a better alternative to replaying logs, but
5112 seems quite tricky to get to work. Changed -session to be called
5118 seems quite tricky to get to work. Changed -session to be called
5113 -logplay, which more accurately reflects what it does. And if we
5119 -logplay, which more accurately reflects what it does. And if we
5114 ever get real session saving working, -session is now available.
5120 ever get real session saving working, -session is now available.
5115
5121
5116 * Implemented color schemes for prompts also. As for tracebacks,
5122 * Implemented color schemes for prompts also. As for tracebacks,
5117 currently only NoColor and Linux are supported. But now the
5123 currently only NoColor and Linux are supported. But now the
5118 infrastructure is in place, based on a generic ColorScheme
5124 infrastructure is in place, based on a generic ColorScheme
5119 class. So writing and activating new schemes both for the prompts
5125 class. So writing and activating new schemes both for the prompts
5120 and the tracebacks should be straightforward.
5126 and the tracebacks should be straightforward.
5121
5127
5122 * Version 0.1.13 released, 0.1.14 opened.
5128 * Version 0.1.13 released, 0.1.14 opened.
5123
5129
5124 * Changed handling of options for output cache. Now counter is
5130 * Changed handling of options for output cache. Now counter is
5125 hardwired starting at 1 and one specifies the maximum number of
5131 hardwired starting at 1 and one specifies the maximum number of
5126 entries *in the outcache* (not the max prompt counter). This is
5132 entries *in the outcache* (not the max prompt counter). This is
5127 much better, since many statements won't increase the cache
5133 much better, since many statements won't increase the cache
5128 count. It also eliminated some confusing options, now there's only
5134 count. It also eliminated some confusing options, now there's only
5129 one: cache_size.
5135 one: cache_size.
5130
5136
5131 * Added 'alias' magic function and magic_alias option in the
5137 * Added 'alias' magic function and magic_alias option in the
5132 ipythonrc file. Now the user can easily define whatever names he
5138 ipythonrc file. Now the user can easily define whatever names he
5133 wants for the magic functions without having to play weird
5139 wants for the magic functions without having to play weird
5134 namespace games. This gives IPython a real shell-like feel.
5140 namespace games. This gives IPython a real shell-like feel.
5135
5141
5136 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5142 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5137 @ or not).
5143 @ or not).
5138
5144
5139 This was one of the last remaining 'visible' bugs (that I know
5145 This was one of the last remaining 'visible' bugs (that I know
5140 of). I think if I can clean up the session loading so it works
5146 of). I think if I can clean up the session loading so it works
5141 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5147 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5142 about licensing).
5148 about licensing).
5143
5149
5144 2001-11-25 Fernando Perez <fperez@colorado.edu>
5150 2001-11-25 Fernando Perez <fperez@colorado.edu>
5145
5151
5146 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5152 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5147 there's a cleaner distinction between what ? and ?? show.
5153 there's a cleaner distinction between what ? and ?? show.
5148
5154
5149 * Added screen_length option. Now the user can define his own
5155 * Added screen_length option. Now the user can define his own
5150 screen size for page() operations.
5156 screen size for page() operations.
5151
5157
5152 * Implemented magic shell-like functions with automatic code
5158 * Implemented magic shell-like functions with automatic code
5153 generation. Now adding another function is just a matter of adding
5159 generation. Now adding another function is just a matter of adding
5154 an entry to a dict, and the function is dynamically generated at
5160 an entry to a dict, and the function is dynamically generated at
5155 run-time. Python has some really cool features!
5161 run-time. Python has some really cool features!
5156
5162
5157 * Renamed many options to cleanup conventions a little. Now all
5163 * Renamed many options to cleanup conventions a little. Now all
5158 are lowercase, and only underscores where needed. Also in the code
5164 are lowercase, and only underscores where needed. Also in the code
5159 option name tables are clearer.
5165 option name tables are clearer.
5160
5166
5161 * Changed prompts a little. Now input is 'In [n]:' instead of
5167 * Changed prompts a little. Now input is 'In [n]:' instead of
5162 'In[n]:='. This allows it the numbers to be aligned with the
5168 'In[n]:='. This allows it the numbers to be aligned with the
5163 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5169 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5164 Python (it was a Mathematica thing). The '...' continuation prompt
5170 Python (it was a Mathematica thing). The '...' continuation prompt
5165 was also changed a little to align better.
5171 was also changed a little to align better.
5166
5172
5167 * Fixed bug when flushing output cache. Not all _p<n> variables
5173 * Fixed bug when flushing output cache. Not all _p<n> variables
5168 exist, so their deletion needs to be wrapped in a try:
5174 exist, so their deletion needs to be wrapped in a try:
5169
5175
5170 * Figured out how to properly use inspect.formatargspec() (it
5176 * Figured out how to properly use inspect.formatargspec() (it
5171 requires the args preceded by *). So I removed all the code from
5177 requires the args preceded by *). So I removed all the code from
5172 _get_pdef in Magic, which was just replicating that.
5178 _get_pdef in Magic, which was just replicating that.
5173
5179
5174 * Added test to prefilter to allow redefining magic function names
5180 * Added test to prefilter to allow redefining magic function names
5175 as variables. This is ok, since the @ form is always available,
5181 as variables. This is ok, since the @ form is always available,
5176 but whe should allow the user to define a variable called 'ls' if
5182 but whe should allow the user to define a variable called 'ls' if
5177 he needs it.
5183 he needs it.
5178
5184
5179 * Moved the ToDo information from README into a separate ToDo.
5185 * Moved the ToDo information from README into a separate ToDo.
5180
5186
5181 * General code cleanup and small bugfixes. I think it's close to a
5187 * General code cleanup and small bugfixes. I think it's close to a
5182 state where it can be released, obviously with a big 'beta'
5188 state where it can be released, obviously with a big 'beta'
5183 warning on it.
5189 warning on it.
5184
5190
5185 * Got the magic function split to work. Now all magics are defined
5191 * Got the magic function split to work. Now all magics are defined
5186 in a separate class. It just organizes things a bit, and now
5192 in a separate class. It just organizes things a bit, and now
5187 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5193 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5188 was too long).
5194 was too long).
5189
5195
5190 * Changed @clear to @reset to avoid potential confusions with
5196 * Changed @clear to @reset to avoid potential confusions with
5191 the shell command clear. Also renamed @cl to @clear, which does
5197 the shell command clear. Also renamed @cl to @clear, which does
5192 exactly what people expect it to from their shell experience.
5198 exactly what people expect it to from their shell experience.
5193
5199
5194 Added a check to the @reset command (since it's so
5200 Added a check to the @reset command (since it's so
5195 destructive, it's probably a good idea to ask for confirmation).
5201 destructive, it's probably a good idea to ask for confirmation).
5196 But now reset only works for full namespace resetting. Since the
5202 But now reset only works for full namespace resetting. Since the
5197 del keyword is already there for deleting a few specific
5203 del keyword is already there for deleting a few specific
5198 variables, I don't see the point of having a redundant magic
5204 variables, I don't see the point of having a redundant magic
5199 function for the same task.
5205 function for the same task.
5200
5206
5201 2001-11-24 Fernando Perez <fperez@colorado.edu>
5207 2001-11-24 Fernando Perez <fperez@colorado.edu>
5202
5208
5203 * Updated the builtin docs (esp. the ? ones).
5209 * Updated the builtin docs (esp. the ? ones).
5204
5210
5205 * Ran all the code through pychecker. Not terribly impressed with
5211 * Ran all the code through pychecker. Not terribly impressed with
5206 it: lots of spurious warnings and didn't really find anything of
5212 it: lots of spurious warnings and didn't really find anything of
5207 substance (just a few modules being imported and not used).
5213 substance (just a few modules being imported and not used).
5208
5214
5209 * Implemented the new ultraTB functionality into IPython. New
5215 * Implemented the new ultraTB functionality into IPython. New
5210 option: xcolors. This chooses color scheme. xmode now only selects
5216 option: xcolors. This chooses color scheme. xmode now only selects
5211 between Plain and Verbose. Better orthogonality.
5217 between Plain and Verbose. Better orthogonality.
5212
5218
5213 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5219 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5214 mode and color scheme for the exception handlers. Now it's
5220 mode and color scheme for the exception handlers. Now it's
5215 possible to have the verbose traceback with no coloring.
5221 possible to have the verbose traceback with no coloring.
5216
5222
5217 2001-11-23 Fernando Perez <fperez@colorado.edu>
5223 2001-11-23 Fernando Perez <fperez@colorado.edu>
5218
5224
5219 * Version 0.1.12 released, 0.1.13 opened.
5225 * Version 0.1.12 released, 0.1.13 opened.
5220
5226
5221 * Removed option to set auto-quote and auto-paren escapes by
5227 * Removed option to set auto-quote and auto-paren escapes by
5222 user. The chances of breaking valid syntax are just too high. If
5228 user. The chances of breaking valid syntax are just too high. If
5223 someone *really* wants, they can always dig into the code.
5229 someone *really* wants, they can always dig into the code.
5224
5230
5225 * Made prompt separators configurable.
5231 * Made prompt separators configurable.
5226
5232
5227 2001-11-22 Fernando Perez <fperez@colorado.edu>
5233 2001-11-22 Fernando Perez <fperez@colorado.edu>
5228
5234
5229 * Small bugfixes in many places.
5235 * Small bugfixes in many places.
5230
5236
5231 * Removed the MyCompleter class from ipplib. It seemed redundant
5237 * Removed the MyCompleter class from ipplib. It seemed redundant
5232 with the C-p,C-n history search functionality. Less code to
5238 with the C-p,C-n history search functionality. Less code to
5233 maintain.
5239 maintain.
5234
5240
5235 * Moved all the original ipython.py code into ipythonlib.py. Right
5241 * Moved all the original ipython.py code into ipythonlib.py. Right
5236 now it's just one big dump into a function called make_IPython, so
5242 now it's just one big dump into a function called make_IPython, so
5237 no real modularity has been gained. But at least it makes the
5243 no real modularity has been gained. But at least it makes the
5238 wrapper script tiny, and since ipythonlib is a module, it gets
5244 wrapper script tiny, and since ipythonlib is a module, it gets
5239 compiled and startup is much faster.
5245 compiled and startup is much faster.
5240
5246
5241 This is a reasobably 'deep' change, so we should test it for a
5247 This is a reasobably 'deep' change, so we should test it for a
5242 while without messing too much more with the code.
5248 while without messing too much more with the code.
5243
5249
5244 2001-11-21 Fernando Perez <fperez@colorado.edu>
5250 2001-11-21 Fernando Perez <fperez@colorado.edu>
5245
5251
5246 * Version 0.1.11 released, 0.1.12 opened for further work.
5252 * Version 0.1.11 released, 0.1.12 opened for further work.
5247
5253
5248 * Removed dependency on Itpl. It was only needed in one place. It
5254 * Removed dependency on Itpl. It was only needed in one place. It
5249 would be nice if this became part of python, though. It makes life
5255 would be nice if this became part of python, though. It makes life
5250 *a lot* easier in some cases.
5256 *a lot* easier in some cases.
5251
5257
5252 * Simplified the prefilter code a bit. Now all handlers are
5258 * Simplified the prefilter code a bit. Now all handlers are
5253 expected to explicitly return a value (at least a blank string).
5259 expected to explicitly return a value (at least a blank string).
5254
5260
5255 * Heavy edits in ipplib. Removed the help system altogether. Now
5261 * Heavy edits in ipplib. Removed the help system altogether. Now
5256 obj?/?? is used for inspecting objects, a magic @doc prints
5262 obj?/?? is used for inspecting objects, a magic @doc prints
5257 docstrings, and full-blown Python help is accessed via the 'help'
5263 docstrings, and full-blown Python help is accessed via the 'help'
5258 keyword. This cleans up a lot of code (less to maintain) and does
5264 keyword. This cleans up a lot of code (less to maintain) and does
5259 the job. Since 'help' is now a standard Python component, might as
5265 the job. Since 'help' is now a standard Python component, might as
5260 well use it and remove duplicate functionality.
5266 well use it and remove duplicate functionality.
5261
5267
5262 Also removed the option to use ipplib as a standalone program. By
5268 Also removed the option to use ipplib as a standalone program. By
5263 now it's too dependent on other parts of IPython to function alone.
5269 now it's too dependent on other parts of IPython to function alone.
5264
5270
5265 * Fixed bug in genutils.pager. It would crash if the pager was
5271 * Fixed bug in genutils.pager. It would crash if the pager was
5266 exited immediately after opening (broken pipe).
5272 exited immediately after opening (broken pipe).
5267
5273
5268 * Trimmed down the VerboseTB reporting a little. The header is
5274 * Trimmed down the VerboseTB reporting a little. The header is
5269 much shorter now and the repeated exception arguments at the end
5275 much shorter now and the repeated exception arguments at the end
5270 have been removed. For interactive use the old header seemed a bit
5276 have been removed. For interactive use the old header seemed a bit
5271 excessive.
5277 excessive.
5272
5278
5273 * Fixed small bug in output of @whos for variables with multi-word
5279 * Fixed small bug in output of @whos for variables with multi-word
5274 types (only first word was displayed).
5280 types (only first word was displayed).
5275
5281
5276 2001-11-17 Fernando Perez <fperez@colorado.edu>
5282 2001-11-17 Fernando Perez <fperez@colorado.edu>
5277
5283
5278 * Version 0.1.10 released, 0.1.11 opened for further work.
5284 * Version 0.1.10 released, 0.1.11 opened for further work.
5279
5285
5280 * Modified dirs and friends. dirs now *returns* the stack (not
5286 * Modified dirs and friends. dirs now *returns* the stack (not
5281 prints), so one can manipulate it as a variable. Convenient to
5287 prints), so one can manipulate it as a variable. Convenient to
5282 travel along many directories.
5288 travel along many directories.
5283
5289
5284 * Fixed bug in magic_pdef: would only work with functions with
5290 * Fixed bug in magic_pdef: would only work with functions with
5285 arguments with default values.
5291 arguments with default values.
5286
5292
5287 2001-11-14 Fernando Perez <fperez@colorado.edu>
5293 2001-11-14 Fernando Perez <fperez@colorado.edu>
5288
5294
5289 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5295 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5290 example with IPython. Various other minor fixes and cleanups.
5296 example with IPython. Various other minor fixes and cleanups.
5291
5297
5292 * Version 0.1.9 released, 0.1.10 opened for further work.
5298 * Version 0.1.9 released, 0.1.10 opened for further work.
5293
5299
5294 * Added sys.path to the list of directories searched in the
5300 * Added sys.path to the list of directories searched in the
5295 execfile= option. It used to be the current directory and the
5301 execfile= option. It used to be the current directory and the
5296 user's IPYTHONDIR only.
5302 user's IPYTHONDIR only.
5297
5303
5298 2001-11-13 Fernando Perez <fperez@colorado.edu>
5304 2001-11-13 Fernando Perez <fperez@colorado.edu>
5299
5305
5300 * Reinstated the raw_input/prefilter separation that Janko had
5306 * Reinstated the raw_input/prefilter separation that Janko had
5301 initially. This gives a more convenient setup for extending the
5307 initially. This gives a more convenient setup for extending the
5302 pre-processor from the outside: raw_input always gets a string,
5308 pre-processor from the outside: raw_input always gets a string,
5303 and prefilter has to process it. We can then redefine prefilter
5309 and prefilter has to process it. We can then redefine prefilter
5304 from the outside and implement extensions for special
5310 from the outside and implement extensions for special
5305 purposes.
5311 purposes.
5306
5312
5307 Today I got one for inputting PhysicalQuantity objects
5313 Today I got one for inputting PhysicalQuantity objects
5308 (from Scientific) without needing any function calls at
5314 (from Scientific) without needing any function calls at
5309 all. Extremely convenient, and it's all done as a user-level
5315 all. Extremely convenient, and it's all done as a user-level
5310 extension (no IPython code was touched). Now instead of:
5316 extension (no IPython code was touched). Now instead of:
5311 a = PhysicalQuantity(4.2,'m/s**2')
5317 a = PhysicalQuantity(4.2,'m/s**2')
5312 one can simply say
5318 one can simply say
5313 a = 4.2 m/s**2
5319 a = 4.2 m/s**2
5314 or even
5320 or even
5315 a = 4.2 m/s^2
5321 a = 4.2 m/s^2
5316
5322
5317 I use this, but it's also a proof of concept: IPython really is
5323 I use this, but it's also a proof of concept: IPython really is
5318 fully user-extensible, even at the level of the parsing of the
5324 fully user-extensible, even at the level of the parsing of the
5319 command line. It's not trivial, but it's perfectly doable.
5325 command line. It's not trivial, but it's perfectly doable.
5320
5326
5321 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5327 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5322 the problem of modules being loaded in the inverse order in which
5328 the problem of modules being loaded in the inverse order in which
5323 they were defined in
5329 they were defined in
5324
5330
5325 * Version 0.1.8 released, 0.1.9 opened for further work.
5331 * Version 0.1.8 released, 0.1.9 opened for further work.
5326
5332
5327 * Added magics pdef, source and file. They respectively show the
5333 * Added magics pdef, source and file. They respectively show the
5328 definition line ('prototype' in C), source code and full python
5334 definition line ('prototype' in C), source code and full python
5329 file for any callable object. The object inspector oinfo uses
5335 file for any callable object. The object inspector oinfo uses
5330 these to show the same information.
5336 these to show the same information.
5331
5337
5332 * Version 0.1.7 released, 0.1.8 opened for further work.
5338 * Version 0.1.7 released, 0.1.8 opened for further work.
5333
5339
5334 * Separated all the magic functions into a class called Magic. The
5340 * Separated all the magic functions into a class called Magic. The
5335 InteractiveShell class was becoming too big for Xemacs to handle
5341 InteractiveShell class was becoming too big for Xemacs to handle
5336 (de-indenting a line would lock it up for 10 seconds while it
5342 (de-indenting a line would lock it up for 10 seconds while it
5337 backtracked on the whole class!)
5343 backtracked on the whole class!)
5338
5344
5339 FIXME: didn't work. It can be done, but right now namespaces are
5345 FIXME: didn't work. It can be done, but right now namespaces are
5340 all messed up. Do it later (reverted it for now, so at least
5346 all messed up. Do it later (reverted it for now, so at least
5341 everything works as before).
5347 everything works as before).
5342
5348
5343 * Got the object introspection system (magic_oinfo) working! I
5349 * Got the object introspection system (magic_oinfo) working! I
5344 think this is pretty much ready for release to Janko, so he can
5350 think this is pretty much ready for release to Janko, so he can
5345 test it for a while and then announce it. Pretty much 100% of what
5351 test it for a while and then announce it. Pretty much 100% of what
5346 I wanted for the 'phase 1' release is ready. Happy, tired.
5352 I wanted for the 'phase 1' release is ready. Happy, tired.
5347
5353
5348 2001-11-12 Fernando Perez <fperez@colorado.edu>
5354 2001-11-12 Fernando Perez <fperez@colorado.edu>
5349
5355
5350 * Version 0.1.6 released, 0.1.7 opened for further work.
5356 * Version 0.1.6 released, 0.1.7 opened for further work.
5351
5357
5352 * Fixed bug in printing: it used to test for truth before
5358 * Fixed bug in printing: it used to test for truth before
5353 printing, so 0 wouldn't print. Now checks for None.
5359 printing, so 0 wouldn't print. Now checks for None.
5354
5360
5355 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5361 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5356 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5362 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5357 reaches by hand into the outputcache. Think of a better way to do
5363 reaches by hand into the outputcache. Think of a better way to do
5358 this later.
5364 this later.
5359
5365
5360 * Various small fixes thanks to Nathan's comments.
5366 * Various small fixes thanks to Nathan's comments.
5361
5367
5362 * Changed magic_pprint to magic_Pprint. This way it doesn't
5368 * Changed magic_pprint to magic_Pprint. This way it doesn't
5363 collide with pprint() and the name is consistent with the command
5369 collide with pprint() and the name is consistent with the command
5364 line option.
5370 line option.
5365
5371
5366 * Changed prompt counter behavior to be fully like
5372 * Changed prompt counter behavior to be fully like
5367 Mathematica's. That is, even input that doesn't return a result
5373 Mathematica's. That is, even input that doesn't return a result
5368 raises the prompt counter. The old behavior was kind of confusing
5374 raises the prompt counter. The old behavior was kind of confusing
5369 (getting the same prompt number several times if the operation
5375 (getting the same prompt number several times if the operation
5370 didn't return a result).
5376 didn't return a result).
5371
5377
5372 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5378 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5373
5379
5374 * Fixed -Classic mode (wasn't working anymore).
5380 * Fixed -Classic mode (wasn't working anymore).
5375
5381
5376 * Added colored prompts using Nathan's new code. Colors are
5382 * Added colored prompts using Nathan's new code. Colors are
5377 currently hardwired, they can be user-configurable. For
5383 currently hardwired, they can be user-configurable. For
5378 developers, they can be chosen in file ipythonlib.py, at the
5384 developers, they can be chosen in file ipythonlib.py, at the
5379 beginning of the CachedOutput class def.
5385 beginning of the CachedOutput class def.
5380
5386
5381 2001-11-11 Fernando Perez <fperez@colorado.edu>
5387 2001-11-11 Fernando Perez <fperez@colorado.edu>
5382
5388
5383 * Version 0.1.5 released, 0.1.6 opened for further work.
5389 * Version 0.1.5 released, 0.1.6 opened for further work.
5384
5390
5385 * Changed magic_env to *return* the environment as a dict (not to
5391 * Changed magic_env to *return* the environment as a dict (not to
5386 print it). This way it prints, but it can also be processed.
5392 print it). This way it prints, but it can also be processed.
5387
5393
5388 * Added Verbose exception reporting to interactive
5394 * Added Verbose exception reporting to interactive
5389 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5395 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5390 traceback. Had to make some changes to the ultraTB file. This is
5396 traceback. Had to make some changes to the ultraTB file. This is
5391 probably the last 'big' thing in my mental todo list. This ties
5397 probably the last 'big' thing in my mental todo list. This ties
5392 in with the next entry:
5398 in with the next entry:
5393
5399
5394 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5400 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5395 has to specify is Plain, Color or Verbose for all exception
5401 has to specify is Plain, Color or Verbose for all exception
5396 handling.
5402 handling.
5397
5403
5398 * Removed ShellServices option. All this can really be done via
5404 * Removed ShellServices option. All this can really be done via
5399 the magic system. It's easier to extend, cleaner and has automatic
5405 the magic system. It's easier to extend, cleaner and has automatic
5400 namespace protection and documentation.
5406 namespace protection and documentation.
5401
5407
5402 2001-11-09 Fernando Perez <fperez@colorado.edu>
5408 2001-11-09 Fernando Perez <fperez@colorado.edu>
5403
5409
5404 * Fixed bug in output cache flushing (missing parameter to
5410 * Fixed bug in output cache flushing (missing parameter to
5405 __init__). Other small bugs fixed (found using pychecker).
5411 __init__). Other small bugs fixed (found using pychecker).
5406
5412
5407 * Version 0.1.4 opened for bugfixing.
5413 * Version 0.1.4 opened for bugfixing.
5408
5414
5409 2001-11-07 Fernando Perez <fperez@colorado.edu>
5415 2001-11-07 Fernando Perez <fperez@colorado.edu>
5410
5416
5411 * Version 0.1.3 released, mainly because of the raw_input bug.
5417 * Version 0.1.3 released, mainly because of the raw_input bug.
5412
5418
5413 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5419 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5414 and when testing for whether things were callable, a call could
5420 and when testing for whether things were callable, a call could
5415 actually be made to certain functions. They would get called again
5421 actually be made to certain functions. They would get called again
5416 once 'really' executed, with a resulting double call. A disaster
5422 once 'really' executed, with a resulting double call. A disaster
5417 in many cases (list.reverse() would never work!).
5423 in many cases (list.reverse() would never work!).
5418
5424
5419 * Removed prefilter() function, moved its code to raw_input (which
5425 * Removed prefilter() function, moved its code to raw_input (which
5420 after all was just a near-empty caller for prefilter). This saves
5426 after all was just a near-empty caller for prefilter). This saves
5421 a function call on every prompt, and simplifies the class a tiny bit.
5427 a function call on every prompt, and simplifies the class a tiny bit.
5422
5428
5423 * Fix _ip to __ip name in magic example file.
5429 * Fix _ip to __ip name in magic example file.
5424
5430
5425 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5431 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5426 work with non-gnu versions of tar.
5432 work with non-gnu versions of tar.
5427
5433
5428 2001-11-06 Fernando Perez <fperez@colorado.edu>
5434 2001-11-06 Fernando Perez <fperez@colorado.edu>
5429
5435
5430 * Version 0.1.2. Just to keep track of the recent changes.
5436 * Version 0.1.2. Just to keep track of the recent changes.
5431
5437
5432 * Fixed nasty bug in output prompt routine. It used to check 'if
5438 * Fixed nasty bug in output prompt routine. It used to check 'if
5433 arg != None...'. Problem is, this fails if arg implements a
5439 arg != None...'. Problem is, this fails if arg implements a
5434 special comparison (__cmp__) which disallows comparing to
5440 special comparison (__cmp__) which disallows comparing to
5435 None. Found it when trying to use the PhysicalQuantity module from
5441 None. Found it when trying to use the PhysicalQuantity module from
5436 ScientificPython.
5442 ScientificPython.
5437
5443
5438 2001-11-05 Fernando Perez <fperez@colorado.edu>
5444 2001-11-05 Fernando Perez <fperez@colorado.edu>
5439
5445
5440 * Also added dirs. Now the pushd/popd/dirs family functions
5446 * Also added dirs. Now the pushd/popd/dirs family functions
5441 basically like the shell, with the added convenience of going home
5447 basically like the shell, with the added convenience of going home
5442 when called with no args.
5448 when called with no args.
5443
5449
5444 * pushd/popd slightly modified to mimic shell behavior more
5450 * pushd/popd slightly modified to mimic shell behavior more
5445 closely.
5451 closely.
5446
5452
5447 * Added env,pushd,popd from ShellServices as magic functions. I
5453 * Added env,pushd,popd from ShellServices as magic functions. I
5448 think the cleanest will be to port all desired functions from
5454 think the cleanest will be to port all desired functions from
5449 ShellServices as magics and remove ShellServices altogether. This
5455 ShellServices as magics and remove ShellServices altogether. This
5450 will provide a single, clean way of adding functionality
5456 will provide a single, clean way of adding functionality
5451 (shell-type or otherwise) to IP.
5457 (shell-type or otherwise) to IP.
5452
5458
5453 2001-11-04 Fernando Perez <fperez@colorado.edu>
5459 2001-11-04 Fernando Perez <fperez@colorado.edu>
5454
5460
5455 * Added .ipython/ directory to sys.path. This way users can keep
5461 * Added .ipython/ directory to sys.path. This way users can keep
5456 customizations there and access them via import.
5462 customizations there and access them via import.
5457
5463
5458 2001-11-03 Fernando Perez <fperez@colorado.edu>
5464 2001-11-03 Fernando Perez <fperez@colorado.edu>
5459
5465
5460 * Opened version 0.1.1 for new changes.
5466 * Opened version 0.1.1 for new changes.
5461
5467
5462 * Changed version number to 0.1.0: first 'public' release, sent to
5468 * Changed version number to 0.1.0: first 'public' release, sent to
5463 Nathan and Janko.
5469 Nathan and Janko.
5464
5470
5465 * Lots of small fixes and tweaks.
5471 * Lots of small fixes and tweaks.
5466
5472
5467 * Minor changes to whos format. Now strings are shown, snipped if
5473 * Minor changes to whos format. Now strings are shown, snipped if
5468 too long.
5474 too long.
5469
5475
5470 * Changed ShellServices to work on __main__ so they show up in @who
5476 * Changed ShellServices to work on __main__ so they show up in @who
5471
5477
5472 * Help also works with ? at the end of a line:
5478 * Help also works with ? at the end of a line:
5473 ?sin and sin?
5479 ?sin and sin?
5474 both produce the same effect. This is nice, as often I use the
5480 both produce the same effect. This is nice, as often I use the
5475 tab-complete to find the name of a method, but I used to then have
5481 tab-complete to find the name of a method, but I used to then have
5476 to go to the beginning of the line to put a ? if I wanted more
5482 to go to the beginning of the line to put a ? if I wanted more
5477 info. Now I can just add the ? and hit return. Convenient.
5483 info. Now I can just add the ? and hit return. Convenient.
5478
5484
5479 2001-11-02 Fernando Perez <fperez@colorado.edu>
5485 2001-11-02 Fernando Perez <fperez@colorado.edu>
5480
5486
5481 * Python version check (>=2.1) added.
5487 * Python version check (>=2.1) added.
5482
5488
5483 * Added LazyPython documentation. At this point the docs are quite
5489 * Added LazyPython documentation. At this point the docs are quite
5484 a mess. A cleanup is in order.
5490 a mess. A cleanup is in order.
5485
5491
5486 * Auto-installer created. For some bizarre reason, the zipfiles
5492 * Auto-installer created. For some bizarre reason, the zipfiles
5487 module isn't working on my system. So I made a tar version
5493 module isn't working on my system. So I made a tar version
5488 (hopefully the command line options in various systems won't kill
5494 (hopefully the command line options in various systems won't kill
5489 me).
5495 me).
5490
5496
5491 * Fixes to Struct in genutils. Now all dictionary-like methods are
5497 * Fixes to Struct in genutils. Now all dictionary-like methods are
5492 protected (reasonably).
5498 protected (reasonably).
5493
5499
5494 * Added pager function to genutils and changed ? to print usage
5500 * Added pager function to genutils and changed ? to print usage
5495 note through it (it was too long).
5501 note through it (it was too long).
5496
5502
5497 * Added the LazyPython functionality. Works great! I changed the
5503 * Added the LazyPython functionality. Works great! I changed the
5498 auto-quote escape to ';', it's on home row and next to '. But
5504 auto-quote escape to ';', it's on home row and next to '. But
5499 both auto-quote and auto-paren (still /) escapes are command-line
5505 both auto-quote and auto-paren (still /) escapes are command-line
5500 parameters.
5506 parameters.
5501
5507
5502
5508
5503 2001-11-01 Fernando Perez <fperez@colorado.edu>
5509 2001-11-01 Fernando Perez <fperez@colorado.edu>
5504
5510
5505 * Version changed to 0.0.7. Fairly large change: configuration now
5511 * Version changed to 0.0.7. Fairly large change: configuration now
5506 is all stored in a directory, by default .ipython. There, all
5512 is all stored in a directory, by default .ipython. There, all
5507 config files have normal looking names (not .names)
5513 config files have normal looking names (not .names)
5508
5514
5509 * Version 0.0.6 Released first to Lucas and Archie as a test
5515 * Version 0.0.6 Released first to Lucas and Archie as a test
5510 run. Since it's the first 'semi-public' release, change version to
5516 run. Since it's the first 'semi-public' release, change version to
5511 > 0.0.6 for any changes now.
5517 > 0.0.6 for any changes now.
5512
5518
5513 * Stuff I had put in the ipplib.py changelog:
5519 * Stuff I had put in the ipplib.py changelog:
5514
5520
5515 Changes to InteractiveShell:
5521 Changes to InteractiveShell:
5516
5522
5517 - Made the usage message a parameter.
5523 - Made the usage message a parameter.
5518
5524
5519 - Require the name of the shell variable to be given. It's a bit
5525 - Require the name of the shell variable to be given. It's a bit
5520 of a hack, but allows the name 'shell' not to be hardwire in the
5526 of a hack, but allows the name 'shell' not to be hardwire in the
5521 magic (@) handler, which is problematic b/c it requires
5527 magic (@) handler, which is problematic b/c it requires
5522 polluting the global namespace with 'shell'. This in turn is
5528 polluting the global namespace with 'shell'. This in turn is
5523 fragile: if a user redefines a variable called shell, things
5529 fragile: if a user redefines a variable called shell, things
5524 break.
5530 break.
5525
5531
5526 - magic @: all functions available through @ need to be defined
5532 - magic @: all functions available through @ need to be defined
5527 as magic_<name>, even though they can be called simply as
5533 as magic_<name>, even though they can be called simply as
5528 @<name>. This allows the special command @magic to gather
5534 @<name>. This allows the special command @magic to gather
5529 information automatically about all existing magic functions,
5535 information automatically about all existing magic functions,
5530 even if they are run-time user extensions, by parsing the shell
5536 even if they are run-time user extensions, by parsing the shell
5531 instance __dict__ looking for special magic_ names.
5537 instance __dict__ looking for special magic_ names.
5532
5538
5533 - mainloop: added *two* local namespace parameters. This allows
5539 - mainloop: added *two* local namespace parameters. This allows
5534 the class to differentiate between parameters which were there
5540 the class to differentiate between parameters which were there
5535 before and after command line initialization was processed. This
5541 before and after command line initialization was processed. This
5536 way, later @who can show things loaded at startup by the
5542 way, later @who can show things loaded at startup by the
5537 user. This trick was necessary to make session saving/reloading
5543 user. This trick was necessary to make session saving/reloading
5538 really work: ideally after saving/exiting/reloading a session,
5544 really work: ideally after saving/exiting/reloading a session,
5539 *everythin* should look the same, including the output of @who. I
5545 *everythin* should look the same, including the output of @who. I
5540 was only able to make this work with this double namespace
5546 was only able to make this work with this double namespace
5541 trick.
5547 trick.
5542
5548
5543 - added a header to the logfile which allows (almost) full
5549 - added a header to the logfile which allows (almost) full
5544 session restoring.
5550 session restoring.
5545
5551
5546 - prepend lines beginning with @ or !, with a and log
5552 - prepend lines beginning with @ or !, with a and log
5547 them. Why? !lines: may be useful to know what you did @lines:
5553 them. Why? !lines: may be useful to know what you did @lines:
5548 they may affect session state. So when restoring a session, at
5554 they may affect session state. So when restoring a session, at
5549 least inform the user of their presence. I couldn't quite get
5555 least inform the user of their presence. I couldn't quite get
5550 them to properly re-execute, but at least the user is warned.
5556 them to properly re-execute, but at least the user is warned.
5551
5557
5552 * Started ChangeLog.
5558 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now