##// END OF EJS Templates
Add a class _CommandInput that implements the basic functionality of...
walter.doerwald -
Show More
@@ -1,1395 +1,1516 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):
450 keymap = {
451 curses.KEY_LEFT: "left",
452 curses.KEY_RIGHT: "right",
453 curses.KEY_HOME: "home",
454 curses.KEY_END: "end",
455 # FIXME: What's happening here?
456 8: "backspace",
457 127: "backspace",
458 curses.KEY_BACKSPACE: "backspace",
459 curses.KEY_DC: "delete",
460 ord("x"): "delete",
461 ord("\n"): "execute",
462 ord("\r"): "execute",
463 curses.KEY_UP: "up",
464 curses.KEY_DOWN: "down",
465 # CTRL-X
466 0x18: "exit",
467 }
468
469 def __init__(self, prompt):
470 self.prompt = prompt
471 self.history = []
472 self.maxhistory = 100
473 self.input = ""
474 self.curx = 0
475 self.cury = -1 # blank line
476
477 def start(self):
478 self.input = ""
479 self.curx = 0
480 self.cury = -1 # blank line
481
482 def handlekey(self, browser, key):
483 cmdname = self.keymap.get(key, None)
484 if cmdname is not None:
485 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
486 if cmdfunc is not None:
487 return cmdfunc(browser)
488 curses.beep()
489 elif key != -1:
490 try:
491 char = chr(key)
492 except ValueError:
493 curses.beep()
494 else:
495 return self.handlechar(browser, char)
496
497 def handlechar(self, browser, char):
498 self.input = self.input[:self.curx] + char + self.input[self.curx:]
499 self.curx += 1
500 return True
501
502 def dohistory(self):
503 self.history.insert(0, self.input)
504 del self.history[:-self.maxhistory]
505
506 def cmd_backspace(self, browser):
507 if self.curx:
508 self.input = self.input[:self.curx-1] + self.input[self.curx:]
509 self.curx -= 1
510 return True
511 else:
512 curses.beep()
513
514 def cmd_delete(self, browser):
515 if self.curx<len(self.input):
516 self.input = self.input[:self.curx] + self.input[self.curx+1:]
517 return True
518 else:
519 curses.beep()
520
521 def cmd_left(self, browser):
522 if self.curx:
523 self.curx -= 1
524 return True
525 else:
526 curses.beep()
527
528 def cmd_right(self, browser):
529 if self.curx < len(self.input):
530 self.curx += 1
531 return True
532 else:
533 curses.beep()
534
535 def cmd_home(self, browser):
536 if self.curx:
537 self.curx = 0
538 return True
539 else:
540 curses.beep()
541
542 def cmd_end(self, browser):
543 if self.curx < len(self.input):
544 self.curx = len(self.input)
545 return True
546 else:
547 curses.beep()
548
549 def cmd_up(self, browser):
550 if self.cury < len(self.history)-1:
551 self.cury += 1
552 self.input = self.history[self.cury]
553 self.curx = len(self.input)
554 return True
555 else:
556 curses.beep()
557
558 def cmd_down(self, browser):
559 if self.cury >= 0:
560 self.cury -= 1
561 if self.cury>=0:
562 self.input = self.history[self.cury]
563 else:
564 self.input = ""
565 self.curx = len(self.input)
566 return True
567 else:
568 curses.beep()
569
570 def cmd_exit(self, browser):
571 browser.mode = "default"
572 return True
573
574 def cmd_execute(self, browser):
575 raise NotImplementedError
576
577
578 class _CommandGoto(_CommandInput):
579 def __init__(self):
580 _CommandInput.__init__(self, "goto object #")
581
582 def handlechar(self, browser, char):
583 # Only accept digits
584 if not "0" <= char <= "9":
585 curses.beep()
586 else:
587 return _CommandInput.handlechar(self, browser, char)
588
589 def cmd_execute(self, browser):
590 level = browser.levels[-1]
591 if self.input:
592 self.dohistory()
593 level.moveto(level.curx, int(self.input))
594 browser.mode = "default"
595 return True
596
597
598 class _CommandFind(_CommandInput):
599 def __init__(self):
600 _CommandInput.__init__(self, "find expression")
601
602 def cmd_execute(self, browser):
603 level = browser.levels[-1]
604 if self.input:
605 self.dohistory()
606 while True:
607 cury = level.cury
608 level.moveto(level.curx, cury+1)
609 if cury == level.cury:
610 curses.beep()
611 break # hit end
612 item = level.items[level.cury].item
613 try:
614 globals = ipipe.getglobals(None)
615 if eval(self.input, globals, ipipe.AttrNamespace(item)):
616 break # found something
617 except (KeyboardInterrupt, SystemExit):
618 raise
619 except Exception, exc:
620 browser.report(exc)
621 curses.beep()
622 break # break on error
623 browser.mode = "default"
624 return True
625
626
627 class _CommandFindBackwards(_CommandInput):
628 def __init__(self):
629 _CommandInput.__init__(self, "find backwards expression")
630
631 def cmd_execute(self, browser):
632 level = browser.levels[-1]
633 if self.input:
634 self.dohistory()
635 while level.cury:
636 level.moveto(level.curx, level.cury-1)
637 item = level.items[level.cury].item
638 try:
639 globals = ipipe.getglobals(None)
640 if eval(self.input, globals, ipipe.AttrNamespace(item)):
641 break # found something
642 except (KeyboardInterrupt, SystemExit):
643 raise
644 except Exception, exc:
645 browser.report(exc)
646 curses.beep()
647 break # break on error
648 else:
649 curses.beep()
650 browser.mode = "default"
651 return True
652
653
449 class ibrowse(ipipe.Display):
654 class ibrowse(ipipe.Display):
450 # Show this many lines from the previous screen when paging horizontally
655 # Show this many lines from the previous screen when paging horizontally
451 pageoverlapx = 1
656 pageoverlapx = 1
452
657
453 # Show this many lines from the previous screen when paging vertically
658 # Show this many lines from the previous screen when paging vertically
454 pageoverlapy = 1
659 pageoverlapy = 1
455
660
456 # 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
457 # away from the left or right screen edge
662 # away from the left or right screen edge
458 scrollborderx = 10
663 scrollborderx = 10
459
664
460 # 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
461 # away from the top or bottom screen edge
666 # away from the top or bottom screen edge
462 scrollbordery = 5
667 scrollbordery = 5
463
668
464 # Accelerate by this factor when scrolling horizontally
669 # Accelerate by this factor when scrolling horizontally
465 acceleratex = 1.05
670 acceleratex = 1.05
466
671
467 # Accelerate by this factor when scrolling vertically
672 # Accelerate by this factor when scrolling vertically
468 acceleratey = 1.05
673 acceleratey = 1.05
469
674
470 # The maximum horizontal scroll speed
675 # The maximum horizontal scroll speed
471 # (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)
472 maxspeedx = 0.5
677 maxspeedx = 0.5
473
678
474 # The maximum vertical scroll speed
679 # The maximum vertical scroll speed
475 # (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)
476 maxspeedy = 0.5
681 maxspeedy = 0.5
477
682
478 # The maximum number of header lines for browser level
683 # The maximum number of header lines for browser level
479 # if the nesting is deeper, only the innermost levels are displayed
684 # if the nesting is deeper, only the innermost levels are displayed
480 maxheaders = 5
685 maxheaders = 5
481
686
482 # The approximate maximum length of a column entry
687 # The approximate maximum length of a column entry
483 maxattrlength = 200
688 maxattrlength = 200
484
689
485 # Styles for various parts of the GUI
690 # Styles for various parts of the GUI
486 style_objheadertext = astyle.Style.fromstr("white:black:bold|reverse")
691 style_objheadertext = astyle.Style.fromstr("white:black:bold|reverse")
487 style_objheadernumber = astyle.Style.fromstr("white:blue:bold|reverse")
692 style_objheadernumber = astyle.Style.fromstr("white:blue:bold|reverse")
488 style_objheaderobject = astyle.Style.fromstr("white:black:reverse")
693 style_objheaderobject = astyle.Style.fromstr("white:black:reverse")
489 style_colheader = astyle.Style.fromstr("blue:white:reverse")
694 style_colheader = astyle.Style.fromstr("blue:white:reverse")
490 style_colheaderhere = astyle.Style.fromstr("green:black:bold|reverse")
695 style_colheaderhere = astyle.Style.fromstr("green:black:bold|reverse")
491 style_colheadersep = astyle.Style.fromstr("blue:black:reverse")
696 style_colheadersep = astyle.Style.fromstr("blue:black:reverse")
492 style_number = astyle.Style.fromstr("blue:white:reverse")
697 style_number = astyle.Style.fromstr("blue:white:reverse")
493 style_numberhere = astyle.Style.fromstr("green:black:bold|reverse")
698 style_numberhere = astyle.Style.fromstr("green:black:bold|reverse")
494 style_sep = astyle.Style.fromstr("blue:black")
699 style_sep = astyle.Style.fromstr("blue:black")
495 style_data = astyle.Style.fromstr("white:black")
700 style_data = astyle.Style.fromstr("white:black")
496 style_datapad = astyle.Style.fromstr("blue:black:bold")
701 style_datapad = astyle.Style.fromstr("blue:black:bold")
497 style_footer = astyle.Style.fromstr("black:white")
702 style_footer = astyle.Style.fromstr("black:white")
498 style_report = astyle.Style.fromstr("white:black")
703 style_report = astyle.Style.fromstr("white:black")
499
704
500 # Column separator in header
705 # Column separator in header
501 headersepchar = "|"
706 headersepchar = "|"
502
707
503 # Character for padding data cell entries
708 # Character for padding data cell entries
504 datapadchar = "."
709 datapadchar = "."
505
710
506 # Column separator in data area
711 # Column separator in data area
507 datasepchar = "|"
712 datasepchar = "|"
508
713
509 # 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)
510 nodatachar = "-"
715 nodatachar = "-"
511
716
512 # Prompts for modes that require keyboard input
717 # Prompts for modes that require keyboard input
513 prompts = {
718 prompts = {
514 "goto": "goto object #: ",
719 "goto": _CommandGoto(),
515 "find": "find expression: ",
720 "find": _CommandFind(),
516 "findbackwards": "find backwards expression: "
721 "findbackwards": _CommandFindBackwards()
517 }
722 }
518
723
519 # Maps curses key codes to "function" names
724 # Maps curses key codes to "function" names
520 keymap = {
725 keymap = {
521 ord("q"): "quit",
726 ord("q"): "quit",
522 curses.KEY_UP: "up",
727 curses.KEY_UP: "up",
523 curses.KEY_DOWN: "down",
728 curses.KEY_DOWN: "down",
524 curses.KEY_PPAGE: "pageup",
729 curses.KEY_PPAGE: "pageup",
525 curses.KEY_NPAGE: "pagedown",
730 curses.KEY_NPAGE: "pagedown",
526 curses.KEY_LEFT: "left",
731 curses.KEY_LEFT: "left",
527 curses.KEY_RIGHT: "right",
732 curses.KEY_RIGHT: "right",
528 curses.KEY_HOME: "home",
733 curses.KEY_HOME: "home",
529 curses.KEY_END: "end",
734 curses.KEY_END: "end",
530 ord("<"): "prevattr",
735 ord("<"): "prevattr",
531 0x1b: "prevattr", # SHIFT-TAB
736 0x1b: "prevattr", # SHIFT-TAB
532 ord(">"): "nextattr",
737 ord(">"): "nextattr",
533 ord("\t"):"nextattr", # TAB
738 ord("\t"):"nextattr", # TAB
534 ord("p"): "pick",
739 ord("p"): "pick",
535 ord("P"): "pickattr",
740 ord("P"): "pickattr",
536 ord("C"): "pickallattrs",
741 ord("C"): "pickallattrs",
537 ord("m"): "pickmarked",
742 ord("m"): "pickmarked",
538 ord("M"): "pickmarkedattr",
743 ord("M"): "pickmarkedattr",
539 ord("\n"): "enterdefault",
744 ord("\n"): "enterdefault",
745 ord("\r"): "enterdefault",
540 # FIXME: What's happening here?
746 # FIXME: What's happening here?
541 8: "leave",
747 8: "leave",
542 127: "leave",
748 127: "leave",
543 curses.KEY_BACKSPACE: "leave",
749 curses.KEY_BACKSPACE: "leave",
544 ord("x"): "leave",
750 ord("x"): "leave",
545 ord("h"): "help",
751 ord("h"): "help",
546 ord("e"): "enter",
752 ord("e"): "enter",
547 ord("E"): "enterattr",
753 ord("E"): "enterattr",
548 ord("d"): "detail",
754 ord("d"): "detail",
549 ord("D"): "detailattr",
755 ord("D"): "detailattr",
550 ord(" "): "tooglemark",
756 ord(" "): "tooglemark",
551 ord("r"): "markrange",
757 ord("r"): "markrange",
552 ord("v"): "sortattrasc",
758 ord("v"): "sortattrasc",
553 ord("V"): "sortattrdesc",
759 ord("V"): "sortattrdesc",
554 ord("g"): "goto",
760 ord("g"): "goto",
555 ord("f"): "find",
761 ord("f"): "find",
556 ord("b"): "findbackwards",
762 ord("b"): "findbackwards",
557 }
763 }
558
764
559 def __init__(self, *attrs):
765 def __init__(self, *attrs):
560 """
766 """
561 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
562 of attributes that will be displayed in the browser, otherwise
768 of attributes that will be displayed in the browser, otherwise
563 these will be determined by the objects on screen.
769 these will be determined by the objects on screen.
564 """
770 """
565 self.attrs = attrs
771 self.attrs = attrs
566
772
567 # Stack of browser levels
773 # Stack of browser levels
568 self.levels = []
774 self.levels = []
569 # how many colums to scroll (Changes when accelerating)
775 # how many colums to scroll (Changes when accelerating)
570 self.stepx = 1.
776 self.stepx = 1.
571
777
572 # how many rows to scroll (Changes when accelerating)
778 # how many rows to scroll (Changes when accelerating)
573 self.stepy = 1.
779 self.stepy = 1.
574
780
575 # 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``
576 # 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
577 # multiple beeps).
783 # multiple beeps).
578 self._dobeep = True
784 self._dobeep = True
579
785
580 # Cache for registered ``curses`` colors and styles.
786 # Cache for registered ``curses`` colors and styles.
581 self._styles = {}
787 self._styles = {}
582 self._colors = {}
788 self._colors = {}
583 self._maxcolor = 1
789 self._maxcolor = 1
584
790
585 # 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
586 # we have, but with an upper bound)
792 # we have, but with an upper bound)
587 self._headerlines = 1
793 self._headerlines = 1
588
794
589 # Index of first header line
795 # Index of first header line
590 self._firstheaderline = 0
796 self._firstheaderline = 0
591
797
592 # curses window
798 # curses window
593 self.scr = None
799 self.scr = None
594 # report in the footer line (error, executed command etc.)
800 # report in the footer line (error, executed command etc.)
595 self._report = None
801 self._report = None
596
802
597 # value to be returned to the caller (set by commands)
803 # value to be returned to the caller (set by commands)
598 self.returnvalue = None
804 self.returnvalue = None
599
805
600 # The mode the browser is in
806 # The mode the browser is in
601 # e.g. normal browsing or entering an argument for a command
807 # e.g. normal browsing or entering an argument for a command
602 self.mode = "default"
808 self.mode = "default"
603
809
604 # The partially entered row number for the goto command
810 # The partially entered row number for the goto command
605 self.goto = ""
811 self.goto = ""
606
812
607 def nextstepx(self, step):
813 def nextstepx(self, step):
608 """
814 """
609 Accelerate horizontally.
815 Accelerate horizontally.
610 """
816 """
611 return max(1., min(step*self.acceleratex,
817 return max(1., min(step*self.acceleratex,
612 self.maxspeedx*self.levels[-1].mainsizex))
818 self.maxspeedx*self.levels[-1].mainsizex))
613
819
614 def nextstepy(self, step):
820 def nextstepy(self, step):
615 """
821 """
616 Accelerate vertically.
822 Accelerate vertically.
617 """
823 """
618 return max(1., min(step*self.acceleratey,
824 return max(1., min(step*self.acceleratey,
619 self.maxspeedy*self.levels[-1].mainsizey))
825 self.maxspeedy*self.levels[-1].mainsizey))
620
826
621 def getstyle(self, style):
827 def getstyle(self, style):
622 """
828 """
623 Register the ``style`` with ``curses`` or get it from the cache,
829 Register the ``style`` with ``curses`` or get it from the cache,
624 if it has been registered before.
830 if it has been registered before.
625 """
831 """
626 try:
832 try:
627 return self._styles[style.fg, style.bg, style.attrs]
833 return self._styles[style.fg, style.bg, style.attrs]
628 except KeyError:
834 except KeyError:
629 attrs = 0
835 attrs = 0
630 for b in astyle.A2CURSES:
836 for b in astyle.A2CURSES:
631 if style.attrs & b:
837 if style.attrs & b:
632 attrs |= astyle.A2CURSES[b]
838 attrs |= astyle.A2CURSES[b]
633 try:
839 try:
634 color = self._colors[style.fg, style.bg]
840 color = self._colors[style.fg, style.bg]
635 except KeyError:
841 except KeyError:
636 curses.init_pair(
842 curses.init_pair(
637 self._maxcolor,
843 self._maxcolor,
638 astyle.COLOR2CURSES[style.fg],
844 astyle.COLOR2CURSES[style.fg],
639 astyle.COLOR2CURSES[style.bg]
845 astyle.COLOR2CURSES[style.bg]
640 )
846 )
641 color = curses.color_pair(self._maxcolor)
847 color = curses.color_pair(self._maxcolor)
642 self._colors[style.fg, style.bg] = color
848 self._colors[style.fg, style.bg] = color
643 self._maxcolor += 1
849 self._maxcolor += 1
644 c = color | attrs
850 c = color | attrs
645 self._styles[style.fg, style.bg, style.attrs] = c
851 self._styles[style.fg, style.bg, style.attrs] = c
646 return c
852 return c
647
853
648 def addstr(self, y, x, begx, endx, text, style):
854 def addstr(self, y, x, begx, endx, text, style):
649 """
855 """
650 A version of ``curses.addstr()`` that can handle ``x`` coordinates
856 A version of ``curses.addstr()`` that can handle ``x`` coordinates
651 that are outside the screen.
857 that are outside the screen.
652 """
858 """
653 text2 = text[max(0, begx-x):max(0, endx-x)]
859 text2 = text[max(0, begx-x):max(0, endx-x)]
654 if text2:
860 if text2:
655 self.scr.addstr(y, max(x, begx), text2, self.getstyle(style))
861 self.scr.addstr(y, max(x, begx), text2, self.getstyle(style))
656 return len(text)
862 return len(text)
657
863
658 def addchr(self, y, x, begx, endx, c, l, style):
864 def addchr(self, y, x, begx, endx, c, l, style):
659 x0 = max(x, begx)
865 x0 = max(x, begx)
660 x1 = min(x+l, endx)
866 x1 = min(x+l, endx)
661 if x1>x0:
867 if x1>x0:
662 self.scr.addstr(y, x0, c*(x1-x0), self.getstyle(style))
868 self.scr.addstr(y, x0, c*(x1-x0), self.getstyle(style))
663 return l
869 return l
664
870
665 def _calcheaderlines(self, levels):
871 def _calcheaderlines(self, levels):
666 # 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
667 # ``levels`` browser levels
873 # ``levels`` browser levels
668 if levels is None:
874 if levels is None:
669 levels = len(self.levels)
875 levels = len(self.levels)
670 self._headerlines = min(self.maxheaders, levels)
876 self._headerlines = min(self.maxheaders, levels)
671 self._firstheaderline = levels-self._headerlines
877 self._firstheaderline = levels-self._headerlines
672
878
673 def getstylehere(self, style):
879 def getstylehere(self, style):
674 """
880 """
675 Return a style for displaying the original style ``style``
881 Return a style for displaying the original style ``style``
676 in the row the cursor is on.
882 in the row the cursor is on.
677 """
883 """
678 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)
679
885
680 def report(self, msg):
886 def report(self, msg):
681 """
887 """
682 Store the message ``msg`` for display below the footer line. This
888 Store the message ``msg`` for display below the footer line. This
683 will be displayed as soon as the screen is redrawn.
889 will be displayed as soon as the screen is redrawn.
684 """
890 """
685 self._report = msg
891 self._report = msg
686
892
687 def enter(self, item, mode, *attrs):
893 def enter(self, item, mode, *attrs):
688 """
894 """
689 Enter the object ``item`` in the mode ``mode``. If ``attrs`` is
895 Enter the object ``item`` in the mode ``mode``. If ``attrs`` is
690 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.
691 """
897 """
692 try:
898 try:
693 iterator = ipipe.xiter(item, mode)
899 iterator = ipipe.xiter(item, mode)
694 except (KeyboardInterrupt, SystemExit):
900 except (KeyboardInterrupt, SystemExit):
695 raise
901 raise
696 except Exception, exc:
902 except Exception, exc:
697 curses.beep()
903 curses.beep()
698 self.report(exc)
904 self.report(exc)
699 else:
905 else:
700 self._calcheaderlines(len(self.levels)+1)
906 self._calcheaderlines(len(self.levels)+1)
701 level = _BrowserLevel(
907 level = _BrowserLevel(
702 self,
908 self,
703 item,
909 item,
704 iterator,
910 iterator,
705 self.scrsizey-1-self._headerlines-2,
911 self.scrsizey-1-self._headerlines-2,
706 *attrs
912 *attrs
707 )
913 )
708 self.levels.append(level)
914 self.levels.append(level)
709
915
710 def startkeyboardinput(self, mode):
916 def startkeyboardinput(self, mode):
711 """
917 """
712 Enter mode ``mode``, which requires keyboard input.
918 Enter mode ``mode``, which requires keyboard input.
713 """
919 """
714 self.mode = mode
920 self.mode = mode
715 self.keyboardinput = ""
921 self.prompts[mode].start()
716 self.cursorpos = 0
717
718 def executekeyboardinput(self, mode):
719 exe = getattr(self, "exe_%s" % mode, None)
720 if exe is not None:
721 exe()
722 self.mode = "default"
723
922
724 def keylabel(self, keycode):
923 def keylabel(self, keycode):
725 """
924 """
726 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
727 help screen and in reports about unassigned keys).
926 help screen and in reports about unassigned keys).
728 """
927 """
729 if keycode <= 0xff:
928 if keycode <= 0xff:
730 specialsnames = {
929 specialsnames = {
731 ord("\n"): "RETURN",
930 ord("\n"): "RETURN",
732 ord(" "): "SPACE",
931 ord(" "): "SPACE",
733 ord("\t"): "TAB",
932 ord("\t"): "TAB",
734 ord("\x7f"): "DELETE",
933 ord("\x7f"): "DELETE",
735 ord("\x08"): "BACKSPACE",
934 ord("\x08"): "BACKSPACE",
736 }
935 }
737 if keycode in specialsnames:
936 if keycode in specialsnames:
738 return specialsnames[keycode]
937 return specialsnames[keycode]
739 return repr(chr(keycode))
938 return repr(chr(keycode))
740 for name in dir(curses):
939 for name in dir(curses):
741 if name.startswith("KEY_") and getattr(curses, name) == keycode:
940 if name.startswith("KEY_") and getattr(curses, name) == keycode:
742 return name
941 return name
743 return str(keycode)
942 return str(keycode)
744
943
745 def beep(self, force=False):
944 def beep(self, force=False):
746 if force or self._dobeep:
945 if force or self._dobeep:
747 curses.beep()
946 curses.beep()
748 # 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)
749 self._dobeep = False
948 self._dobeep = False
750
949
751 def cmd_quit(self):
950 def cmd_quit(self):
752 self.returnvalue = None
951 self.returnvalue = None
753 return True
952 return True
754
953
755 def cmd_up(self):
954 def cmd_up(self):
756 level = self.levels[-1]
955 level = self.levels[-1]
757 self.report("up")
956 self.report("up")
758 level.moveto(level.curx, level.cury-self.stepy)
957 level.moveto(level.curx, level.cury-self.stepy)
759
958
760 def cmd_down(self):
959 def cmd_down(self):
761 level = self.levels[-1]
960 level = self.levels[-1]
762 self.report("down")
961 self.report("down")
763 level.moveto(level.curx, level.cury+self.stepy)
962 level.moveto(level.curx, level.cury+self.stepy)
764
963
765 def cmd_pageup(self):
964 def cmd_pageup(self):
766 level = self.levels[-1]
965 level = self.levels[-1]
767 self.report("page up")
966 self.report("page up")
768 level.moveto(level.curx, level.cury-level.mainsizey+self.pageoverlapy)
967 level.moveto(level.curx, level.cury-level.mainsizey+self.pageoverlapy)
769
968
770 def cmd_pagedown(self):
969 def cmd_pagedown(self):
771 level = self.levels[-1]
970 level = self.levels[-1]
772 self.report("page down")
971 self.report("page down")
773 level.moveto(level.curx, level.cury+level.mainsizey-self.pageoverlapy)
972 level.moveto(level.curx, level.cury+level.mainsizey-self.pageoverlapy)
774
973
775 def cmd_left(self):
974 def cmd_left(self):
776 level = self.levels[-1]
975 level = self.levels[-1]
777 self.report("left")
976 self.report("left")
778 level.moveto(level.curx-self.stepx, level.cury)
977 level.moveto(level.curx-self.stepx, level.cury)
779
978
780 def cmd_right(self):
979 def cmd_right(self):
781 level = self.levels[-1]
980 level = self.levels[-1]
782 self.report("right")
981 self.report("right")
783 level.moveto(level.curx+self.stepx, level.cury)
982 level.moveto(level.curx+self.stepx, level.cury)
784
983
785 def cmd_home(self):
984 def cmd_home(self):
786 level = self.levels[-1]
985 level = self.levels[-1]
787 self.report("home")
986 self.report("home")
788 level.moveto(0, level.cury)
987 level.moveto(0, level.cury)
789
988
790 def cmd_end(self):
989 def cmd_end(self):
791 level = self.levels[-1]
990 level = self.levels[-1]
792 self.report("end")
991 self.report("end")
793 level.moveto(level.datasizex+level.mainsizey-self.pageoverlapx, level.cury)
992 level.moveto(level.datasizex+level.mainsizey-self.pageoverlapx, level.cury)
794
993
795 def cmd_prevattr(self):
994 def cmd_prevattr(self):
796 level = self.levels[-1]
995 level = self.levels[-1]
797 if level.displayattr[0] is None or level.displayattr[0] == 0:
996 if level.displayattr[0] is None or level.displayattr[0] == 0:
798 self.beep()
997 self.beep()
799 else:
998 else:
800 self.report("prevattr")
999 self.report("prevattr")
801 pos = 0
1000 pos = 0
802 for (i, attrname) in enumerate(level.displayattrs):
1001 for (i, attrname) in enumerate(level.displayattrs):
803 if i == level.displayattr[0]-1:
1002 if i == level.displayattr[0]-1:
804 break
1003 break
805 pos += level.colwidths[attrname] + 1
1004 pos += level.colwidths[attrname] + 1
806 level.moveto(pos, level.cury)
1005 level.moveto(pos, level.cury)
807
1006
808 def cmd_nextattr(self):
1007 def cmd_nextattr(self):
809 level = self.levels[-1]
1008 level = self.levels[-1]
810 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:
811 self.beep()
1010 self.beep()
812 else:
1011 else:
813 self.report("nextattr")
1012 self.report("nextattr")
814 pos = 0
1013 pos = 0
815 for (i, attrname) in enumerate(level.displayattrs):
1014 for (i, attrname) in enumerate(level.displayattrs):
816 if i == level.displayattr[0]+1:
1015 if i == level.displayattr[0]+1:
817 break
1016 break
818 pos += level.colwidths[attrname] + 1
1017 pos += level.colwidths[attrname] + 1
819 level.moveto(pos, level.cury)
1018 level.moveto(pos, level.cury)
820
1019
821 def cmd_pick(self):
1020 def cmd_pick(self):
822 level = self.levels[-1]
1021 level = self.levels[-1]
823 self.returnvalue = level.items[level.cury].item
1022 self.returnvalue = level.items[level.cury].item
824 return True
1023 return True
825
1024
826 def cmd_pickattr(self):
1025 def cmd_pickattr(self):
827 level = self.levels[-1]
1026 level = self.levels[-1]
828 attrname = level.displayattr[1]
1027 attrname = level.displayattr[1]
829 if attrname is ipipe.noitem:
1028 if attrname is ipipe.noitem:
830 curses.beep()
1029 curses.beep()
831 self.report(AttributeError(ipipe._attrname(attrname)))
1030 self.report(AttributeError(ipipe._attrname(attrname)))
832 return
1031 return
833 attr = ipipe._getattr(level.items[level.cury].item, attrname)
1032 attr = ipipe._getattr(level.items[level.cury].item, attrname)
834 if attr is ipipe.noitem:
1033 if attr is ipipe.noitem:
835 curses.beep()
1034 curses.beep()
836 self.report(AttributeError(ipipe._attrname(attrname)))
1035 self.report(AttributeError(ipipe._attrname(attrname)))
837 else:
1036 else:
838 self.returnvalue = attr
1037 self.returnvalue = attr
839 return True
1038 return True
840
1039
841 def cmd_pickallattrs(self):
1040 def cmd_pickallattrs(self):
842 level = self.levels[-1]
1041 level = self.levels[-1]
843 attrname = level.displayattr[1]
1042 attrname = level.displayattr[1]
844 if attrname is ipipe.noitem:
1043 if attrname is ipipe.noitem:
845 curses.beep()
1044 curses.beep()
846 self.report(AttributeError(ipipe._attrname(attrname)))
1045 self.report(AttributeError(ipipe._attrname(attrname)))
847 return
1046 return
848 result = []
1047 result = []
849 for cache in level.items:
1048 for cache in level.items:
850 attr = ipipe._getattr(cache.item, attrname)
1049 attr = ipipe._getattr(cache.item, attrname)
851 if attr is not ipipe.noitem:
1050 if attr is not ipipe.noitem:
852 result.append(attr)
1051 result.append(attr)
853 self.returnvalue = result
1052 self.returnvalue = result
854 return True
1053 return True
855
1054
856 def cmd_pickmarked(self):
1055 def cmd_pickmarked(self):
857 level = self.levels[-1]
1056 level = self.levels[-1]
858 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]
859 return True
1058 return True
860
1059
861 def cmd_pickmarkedattr(self):
1060 def cmd_pickmarkedattr(self):
862 level = self.levels[-1]
1061 level = self.levels[-1]
863 attrname = level.displayattr[1]
1062 attrname = level.displayattr[1]
864 if attrname is ipipe.noitem:
1063 if attrname is ipipe.noitem:
865 curses.beep()
1064 curses.beep()
866 self.report(AttributeError(ipipe._attrname(attrname)))
1065 self.report(AttributeError(ipipe._attrname(attrname)))
867 return
1066 return
868 result = []
1067 result = []
869 for cache in level.items:
1068 for cache in level.items:
870 if cache.marked:
1069 if cache.marked:
871 attr = ipipe._getattr(cache.item, attrname)
1070 attr = ipipe._getattr(cache.item, attrname)
872 if attr is not ipipe.noitem:
1071 if attr is not ipipe.noitem:
873 result.append(attr)
1072 result.append(attr)
874 self.returnvalue = result
1073 self.returnvalue = result
875 return True
1074 return True
876
1075
877 def cmd_markrange(self):
1076 def cmd_markrange(self):
878 level = self.levels[-1]
1077 level = self.levels[-1]
879 self.report("markrange")
1078 self.report("markrange")
880 start = None
1079 start = None
881 if level.items:
1080 if level.items:
882 for i in xrange(level.cury, -1, -1):
1081 for i in xrange(level.cury, -1, -1):
883 if level.items[i].marked:
1082 if level.items[i].marked:
884 start = i
1083 start = i
885 break
1084 break
886 if start is None:
1085 if start is None:
887 self.report(CommandError("no mark before cursor"))
1086 self.report(CommandError("no mark before cursor"))
888 curses.beep()
1087 curses.beep()
889 else:
1088 else:
890 for i in xrange(start, level.cury+1):
1089 for i in xrange(start, level.cury+1):
891 cache = level.items[i]
1090 cache = level.items[i]
892 if not cache.marked:
1091 if not cache.marked:
893 cache.marked = True
1092 cache.marked = True
894 level.marked += 1
1093 level.marked += 1
895
1094
896 def cmd_enterdefault(self):
1095 def cmd_enterdefault(self):
897 level = self.levels[-1]
1096 level = self.levels[-1]
898 try:
1097 try:
899 item = level.items[level.cury].item
1098 item = level.items[level.cury].item
900 except IndexError:
1099 except IndexError:
901 self.report(CommandError("No object"))
1100 self.report(CommandError("No object"))
902 curses.beep()
1101 curses.beep()
903 else:
1102 else:
904 self.report("entering object (default mode)...")
1103 self.report("entering object (default mode)...")
905 self.enter(item, "default")
1104 self.enter(item, "default")
906
1105
907 def cmd_leave(self):
1106 def cmd_leave(self):
908 self.report("leave")
1107 self.report("leave")
909 if len(self.levels) > 1:
1108 if len(self.levels) > 1:
910 self._calcheaderlines(len(self.levels)-1)
1109 self._calcheaderlines(len(self.levels)-1)
911 self.levels.pop(-1)
1110 self.levels.pop(-1)
912 else:
1111 else:
913 self.report(CommandError("This is the last level"))
1112 self.report(CommandError("This is the last level"))
914 curses.beep()
1113 curses.beep()
915
1114
916 def cmd_enter(self):
1115 def cmd_enter(self):
917 level = self.levels[-1]
1116 level = self.levels[-1]
918 try:
1117 try:
919 item = level.items[level.cury].item
1118 item = level.items[level.cury].item
920 except IndexError:
1119 except IndexError:
921 self.report(CommandError("No object"))
1120 self.report(CommandError("No object"))
922 curses.beep()
1121 curses.beep()
923 else:
1122 else:
924 self.report("entering object...")
1123 self.report("entering object...")
925 self.enter(item, None)
1124 self.enter(item, None)
926
1125
927 def cmd_enterattr(self):
1126 def cmd_enterattr(self):
928 level = self.levels[-1]
1127 level = self.levels[-1]
929 attrname = level.displayattr[1]
1128 attrname = level.displayattr[1]
930 if attrname is ipipe.noitem:
1129 if attrname is ipipe.noitem:
931 curses.beep()
1130 curses.beep()
932 self.report(AttributeError(ipipe._attrname(attrname)))
1131 self.report(AttributeError(ipipe._attrname(attrname)))
933 return
1132 return
934 try:
1133 try:
935 item = level.items[level.cury].item
1134 item = level.items[level.cury].item
936 except IndexError:
1135 except IndexError:
937 self.report(CommandError("No object"))
1136 self.report(CommandError("No object"))
938 curses.beep()
1137 curses.beep()
939 else:
1138 else:
940 attr = ipipe._getattr(item, attrname)
1139 attr = ipipe._getattr(item, attrname)
941 if attr is ipipe.noitem:
1140 if attr is ipipe.noitem:
942 self.report(AttributeError(ipipe._attrname(attrname)))
1141 self.report(AttributeError(ipipe._attrname(attrname)))
943 else:
1142 else:
944 self.report("entering object attribute %s..." % ipipe._attrname(attrname))
1143 self.report("entering object attribute %s..." % ipipe._attrname(attrname))
945 self.enter(attr, None)
1144 self.enter(attr, None)
946
1145
947 def cmd_detail(self):
1146 def cmd_detail(self):
948 level = self.levels[-1]
1147 level = self.levels[-1]
949 try:
1148 try:
950 item = level.items[level.cury].item
1149 item = level.items[level.cury].item
951 except IndexError:
1150 except IndexError:
952 self.report(CommandError("No object"))
1151 self.report(CommandError("No object"))
953 curses.beep()
1152 curses.beep()
954 else:
1153 else:
955 self.report("entering detail view for object...")
1154 self.report("entering detail view for object...")
956 self.enter(item, "detail")
1155 self.enter(item, "detail")
957
1156
958 def cmd_detailattr(self):
1157 def cmd_detailattr(self):
959 level = self.levels[-1]
1158 level = self.levels[-1]
960 attrname = level.displayattr[1]
1159 attrname = level.displayattr[1]
961 if attrname is ipipe.noitem:
1160 if attrname is ipipe.noitem:
962 curses.beep()
1161 curses.beep()
963 self.report(AttributeError(ipipe._attrname(attrname)))
1162 self.report(AttributeError(ipipe._attrname(attrname)))
964 return
1163 return
965 try:
1164 try:
966 item = level.items[level.cury].item
1165 item = level.items[level.cury].item
967 except IndexError:
1166 except IndexError:
968 self.report(CommandError("No object"))
1167 self.report(CommandError("No object"))
969 curses.beep()
1168 curses.beep()
970 else:
1169 else:
971 attr = ipipe._getattr(item, attrname)
1170 attr = ipipe._getattr(item, attrname)
972 if attr is ipipe.noitem:
1171 if attr is ipipe.noitem:
973 self.report(AttributeError(ipipe._attrname(attrname)))
1172 self.report(AttributeError(ipipe._attrname(attrname)))
974 else:
1173 else:
975 self.report("entering detail view for attribute...")
1174 self.report("entering detail view for attribute...")
976 self.enter(attr, "detail")
1175 self.enter(attr, "detail")
977
1176
978 def cmd_tooglemark(self):
1177 def cmd_tooglemark(self):
979 level = self.levels[-1]
1178 level = self.levels[-1]
980 self.report("toggle mark")
1179 self.report("toggle mark")
981 try:
1180 try:
982 item = level.items[level.cury]
1181 item = level.items[level.cury]
983 except IndexError: # no items?
1182 except IndexError: # no items?
984 pass
1183 pass
985 else:
1184 else:
986 if item.marked:
1185 if item.marked:
987 item.marked = False
1186 item.marked = False
988 level.marked -= 1
1187 level.marked -= 1
989 else:
1188 else:
990 item.marked = True
1189 item.marked = True
991 level.marked += 1
1190 level.marked += 1
992
1191
993 def cmd_sortattrasc(self):
1192 def cmd_sortattrasc(self):
994 level = self.levels[-1]
1193 level = self.levels[-1]
995 attrname = level.displayattr[1]
1194 attrname = level.displayattr[1]
996 if attrname is ipipe.noitem:
1195 if attrname is ipipe.noitem:
997 curses.beep()
1196 curses.beep()
998 self.report(AttributeError(ipipe._attrname(attrname)))
1197 self.report(AttributeError(ipipe._attrname(attrname)))
999 return
1198 return
1000 self.report("sort by %s (ascending)" % ipipe._attrname(attrname))
1199 self.report("sort by %s (ascending)" % ipipe._attrname(attrname))
1001 def key(item):
1200 def key(item):
1002 try:
1201 try:
1003 return ipipe._getattr(item, attrname, None)
1202 return ipipe._getattr(item, attrname, None)
1004 except (KeyboardInterrupt, SystemExit):
1203 except (KeyboardInterrupt, SystemExit):
1005 raise
1204 raise
1006 except Exception:
1205 except Exception:
1007 return None
1206 return None
1008 level.sort(key)
1207 level.sort(key)
1009
1208
1010 def cmd_sortattrdesc(self):
1209 def cmd_sortattrdesc(self):
1011 level = self.levels[-1]
1210 level = self.levels[-1]
1012 attrname = level.displayattr[1]
1211 attrname = level.displayattr[1]
1013 if attrname is ipipe.noitem:
1212 if attrname is ipipe.noitem:
1014 curses.beep()
1213 curses.beep()
1015 self.report(AttributeError(ipipe._attrname(attrname)))
1214 self.report(AttributeError(ipipe._attrname(attrname)))
1016 return
1215 return
1017 self.report("sort by %s (descending)" % ipipe._attrname(attrname))
1216 self.report("sort by %s (descending)" % ipipe._attrname(attrname))
1018 def key(item):
1217 def key(item):
1019 try:
1218 try:
1020 return ipipe._getattr(item, attrname, None)
1219 return ipipe._getattr(item, attrname, None)
1021 except (KeyboardInterrupt, SystemExit):
1220 except (KeyboardInterrupt, SystemExit):
1022 raise
1221 raise
1023 except Exception:
1222 except Exception:
1024 return None
1223 return None
1025 level.sort(key, reverse=True)
1224 level.sort(key, reverse=True)
1026
1225
1027 def cmd_goto(self):
1226 def cmd_goto(self):
1028 self.startkeyboardinput("goto")
1227 self.startkeyboardinput("goto")
1029
1228
1030 def exe_goto(self):
1031 level = self.levels[-1]
1032 if self.keyboardinput:
1033 level.moveto(level.curx, int(self.keyboardinput))
1034
1035 def cmd_find(self):
1229 def cmd_find(self):
1036 self.startkeyboardinput("find")
1230 self.startkeyboardinput("find")
1037
1231
1038 def exe_find(self):
1039 level = self.levels[-1]
1040 if self.keyboardinput:
1041 while True:
1042 cury = level.cury
1043 level.moveto(level.curx, cury+1)
1044 if cury == level.cury:
1045 curses.beep()
1046 break
1047 item = level.items[level.cury].item
1048 try:
1049 globals = ipipe.getglobals(None)
1050 if eval(self.keyboardinput, globals, ipipe.AttrNamespace(item)):
1051 break
1052 except (KeyboardInterrupt, SystemExit):
1053 raise
1054 except Exception, exc:
1055 self.report(exc)
1056 curses.beep()
1057 break # break on error
1058
1059 def cmd_findbackwards(self):
1232 def cmd_findbackwards(self):
1060 self.startkeyboardinput("findbackwards")
1233 self.startkeyboardinput("findbackwards")
1061
1234
1062 def exe_findbackwards(self):
1063 level = self.levels[-1]
1064 if self.keyboardinput:
1065 while level.cury:
1066 level.moveto(level.curx, level.cury-1)
1067 item = level.items[level.cury].item
1068 try:
1069 globals = ipipe.getglobals(None)
1070 if eval(self.keyboardinput, globals, ipipe.AttrNamespace(item)):
1071 break
1072 except (KeyboardInterrupt, SystemExit):
1073 raise
1074 except Exception, exc:
1075 self.report(exc)
1076 curses.beep()
1077 break # break on error
1078 else:
1079 curses.beep()
1080
1081 def cmd_help(self):
1235 def cmd_help(self):
1082 """
1236 """
1083 The help command
1237 The help command
1084 """
1238 """
1085 for level in self.levels:
1239 for level in self.levels:
1086 if isinstance(level.input, _BrowserHelp):
1240 if isinstance(level.input, _BrowserHelp):
1087 curses.beep()
1241 curses.beep()
1088 self.report(CommandError("help already active"))
1242 self.report(CommandError("help already active"))
1089 return
1243 return
1090
1244
1091 self.enter(_BrowserHelp(self), "default")
1245 self.enter(_BrowserHelp(self), "default")
1092
1246
1093 def _dodisplay(self, scr):
1247 def _dodisplay(self, scr):
1094 """
1248 """
1095 This method is the workhorse of the browser. It handles screen
1249 This method is the workhorse of the browser. It handles screen
1096 drawing and the keyboard.
1250 drawing and the keyboard.
1097 """
1251 """
1098 self.scr = scr
1252 self.scr = scr
1099 curses.halfdelay(1)
1253 curses.halfdelay(1)
1100 footery = 2
1254 footery = 2
1101
1255
1102 keys = []
1256 keys = []
1103 for (key, cmd) in self.keymap.iteritems():
1257 for (key, cmd) in self.keymap.iteritems():
1104 if cmd == "quit":
1258 if cmd == "quit":
1105 keys.append("%s=%s" % (self.keylabel(key), cmd))
1259 keys.append("%s=%s" % (self.keylabel(key), cmd))
1106 for (key, cmd) in self.keymap.iteritems():
1260 for (key, cmd) in self.keymap.iteritems():
1107 if cmd == "help":
1261 if cmd == "help":
1108 keys.append("%s=%s" % (self.keylabel(key), cmd))
1262 keys.append("%s=%s" % (self.keylabel(key), cmd))
1109 helpmsg = " | %s" % " ".join(keys)
1263 helpmsg = " | %s" % " ".join(keys)
1110
1264
1111 scr.clear()
1265 scr.clear()
1112 msg = "Fetching first batch of objects..."
1266 msg = "Fetching first batch of objects..."
1113 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1267 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1114 scr.addstr(self.scrsizey//2, (self.scrsizex-len(msg))//2, msg)
1268 scr.addstr(self.scrsizey//2, (self.scrsizex-len(msg))//2, msg)
1115 scr.refresh()
1269 scr.refresh()
1116
1270
1117 lastc = -1
1271 lastc = -1
1118
1272
1119 self.levels = []
1273 self.levels = []
1120 # enter the first level
1274 # enter the first level
1121 self.enter(self.input, ipipe.xiter(self.input, "default"), *self.attrs)
1275 self.enter(self.input, ipipe.xiter(self.input, "default"), *self.attrs)
1122
1276
1123 self._calcheaderlines(None)
1277 self._calcheaderlines(None)
1124
1278
1125 while True:
1279 while True:
1126 level = self.levels[-1]
1280 level = self.levels[-1]
1127 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1281 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1128 level.mainsizey = self.scrsizey-1-self._headerlines-footery
1282 level.mainsizey = self.scrsizey-1-self._headerlines-footery
1129
1283
1130 # Paint object header
1284 # Paint object header
1131 for i in xrange(self._firstheaderline, self._firstheaderline+self._headerlines):
1285 for i in xrange(self._firstheaderline, self._firstheaderline+self._headerlines):
1132 lv = self.levels[i]
1286 lv = self.levels[i]
1133 posx = 0
1287 posx = 0
1134 posy = i-self._firstheaderline
1288 posy = i-self._firstheaderline
1135 endx = self.scrsizex
1289 endx = self.scrsizex
1136 if i: # not the first level
1290 if i: # not the first level
1137 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))
1138 if not self.levels[i-1].exhausted:
1292 if not self.levels[i-1].exhausted:
1139 msg += "+"
1293 msg += "+"
1140 msg += ") "
1294 msg += ") "
1141 endx -= len(msg)+1
1295 endx -= len(msg)+1
1142 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)
1143 for (style, text) in lv.header:
1297 for (style, text) in lv.header:
1144 posx += self.addstr(posy, posx, 0, endx, text, self.style_objheaderobject)
1298 posx += self.addstr(posy, posx, 0, endx, text, self.style_objheaderobject)
1145 if posx >= endx:
1299 if posx >= endx:
1146 break
1300 break
1147 if i:
1301 if i:
1148 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)
1149 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)
1150
1304
1151 if not level.items:
1305 if not level.items:
1152 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)
1153 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)
1154 scr.clrtobot()
1308 scr.clrtobot()
1155 else:
1309 else:
1156 # Paint column headers
1310 # Paint column headers
1157 scr.move(self._headerlines, 0)
1311 scr.move(self._headerlines, 0)
1158 scr.addstr(" %*s " % (level.numbersizex, "#"), self.getstyle(self.style_colheader))
1312 scr.addstr(" %*s " % (level.numbersizex, "#"), self.getstyle(self.style_colheader))
1159 scr.addstr(self.headersepchar, self.getstyle(self.style_colheadersep))
1313 scr.addstr(self.headersepchar, self.getstyle(self.style_colheadersep))
1160 begx = level.numbersizex+3
1314 begx = level.numbersizex+3
1161 posx = begx-level.datastartx
1315 posx = begx-level.datastartx
1162 for attrname in level.displayattrs:
1316 for attrname in level.displayattrs:
1163 strattrname = ipipe._attrname(attrname)
1317 strattrname = ipipe._attrname(attrname)
1164 cwidth = level.colwidths[attrname]
1318 cwidth = level.colwidths[attrname]
1165 header = strattrname.ljust(cwidth)
1319 header = strattrname.ljust(cwidth)
1166 if attrname == level.displayattr[1]:
1320 if attrname == level.displayattr[1]:
1167 style = self.style_colheaderhere
1321 style = self.style_colheaderhere
1168 else:
1322 else:
1169 style = self.style_colheader
1323 style = self.style_colheader
1170 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, header, style)
1324 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, header, style)
1171 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)
1172 if posx >= self.scrsizex:
1326 if posx >= self.scrsizex:
1173 break
1327 break
1174 else:
1328 else:
1175 scr.addstr(" "*(self.scrsizex-posx), self.getstyle(self.style_colheader))
1329 scr.addstr(" "*(self.scrsizex-posx), self.getstyle(self.style_colheader))
1176
1330
1177 # Paint rows
1331 # Paint rows
1178 posy = self._headerlines+1+level.datastarty
1332 posy = self._headerlines+1+level.datastarty
1179 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))):
1180 cache = level.items[i]
1334 cache = level.items[i]
1181 if i == level.cury:
1335 if i == level.cury:
1182 style = self.style_numberhere
1336 style = self.style_numberhere
1183 else:
1337 else:
1184 style = self.style_number
1338 style = self.style_number
1185
1339
1186 posy = self._headerlines+1+i-level.datastarty
1340 posy = self._headerlines+1+i-level.datastarty
1187 posx = begx-level.datastartx
1341 posx = begx-level.datastartx
1188
1342
1189 scr.move(posy, 0)
1343 scr.move(posy, 0)
1190 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))
1191 scr.addstr(self.headersepchar, self.getstyle(self.style_sep))
1345 scr.addstr(self.headersepchar, self.getstyle(self.style_sep))
1192
1346
1193 for attrname in level.displayattrs:
1347 for attrname in level.displayattrs:
1194 cwidth = level.colwidths[attrname]
1348 cwidth = level.colwidths[attrname]
1195 try:
1349 try:
1196 (align, length, parts) = level.displayrows[i-level.datastarty][attrname]
1350 (align, length, parts) = level.displayrows[i-level.datastarty][attrname]
1197 except KeyError:
1351 except KeyError:
1198 align = 2
1352 align = 2
1199 style = astyle.style_nodata
1353 style = astyle.style_nodata
1200 padstyle = self.style_datapad
1354 padstyle = self.style_datapad
1201 sepstyle = self.style_sep
1355 sepstyle = self.style_sep
1202 if i == level.cury:
1356 if i == level.cury:
1203 padstyle = self.getstylehere(padstyle)
1357 padstyle = self.getstylehere(padstyle)
1204 sepstyle = self.getstylehere(sepstyle)
1358 sepstyle = self.getstylehere(sepstyle)
1205 if align == 2:
1359 if align == 2:
1206 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)
1207 else:
1361 else:
1208 if align == 1:
1362 if align == 1:
1209 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)
1210 elif align == 0:
1364 elif align == 0:
1211 pad1 = (cwidth-length)//2
1365 pad1 = (cwidth-length)//2
1212 pad2 = cwidth-length-len(pad1)
1366 pad2 = cwidth-length-len(pad1)
1213 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)
1214 for (style, text) in parts:
1368 for (style, text) in parts:
1215 if i == level.cury:
1369 if i == level.cury:
1216 style = self.getstylehere(style)
1370 style = self.getstylehere(style)
1217 posx += self.addstr(posy, posx, begx, self.scrsizex, text, style)
1371 posx += self.addstr(posy, posx, begx, self.scrsizex, text, style)
1218 if posx >= self.scrsizex:
1372 if posx >= self.scrsizex:
1219 break
1373 break
1220 if align == -1:
1374 if align == -1:
1221 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)
1222 elif align == 0:
1376 elif align == 0:
1223 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)
1224 posx += self.addstr(posy, posx, begx, self.scrsizex, self.datasepchar, sepstyle)
1378 posx += self.addstr(posy, posx, begx, self.scrsizex, self.datasepchar, sepstyle)
1225 else:
1379 else:
1226 scr.clrtoeol()
1380 scr.clrtoeol()
1227
1381
1228 # Add blank row headers for the rest of the screen
1382 # Add blank row headers for the rest of the screen
1229 for posy in xrange(posy+1, self.scrsizey-2):
1383 for posy in xrange(posy+1, self.scrsizey-2):
1230 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))
1231 scr.clrtoeol()
1385 scr.clrtoeol()
1232
1386
1233 posy = self.scrsizey-footery
1387 posy = self.scrsizey-footery
1234 # Display footer
1388 # Display footer
1235 scr.addstr(posy, 0, " "*self.scrsizex, self.getstyle(self.style_footer))
1389 scr.addstr(posy, 0, " "*self.scrsizex, self.getstyle(self.style_footer))
1236
1390
1237 if level.exhausted:
1391 if level.exhausted:
1238 flag = ""
1392 flag = ""
1239 else:
1393 else:
1240 flag = "+"
1394 flag = "+"
1241
1395
1242 endx = self.scrsizex-len(helpmsg)-1
1396 endx = self.scrsizex-len(helpmsg)-1
1243 scr.addstr(posy, endx, helpmsg, self.getstyle(self.style_footer))
1397 scr.addstr(posy, endx, helpmsg, self.getstyle(self.style_footer))
1244
1398
1245 posx = 0
1399 posx = 0
1246 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)
1247 posx += self.addstr(posy, posx, 0, endx, msg, self.style_footer)
1401 posx += self.addstr(posy, posx, 0, endx, msg, self.style_footer)
1248 try:
1402 try:
1249 item = level.items[level.cury].item
1403 item = level.items[level.cury].item
1250 except IndexError: # empty
1404 except IndexError: # empty
1251 pass
1405 pass
1252 else:
1406 else:
1253 for (nostyle, text) in ipipe.xrepr(item, "footer"):
1407 for (nostyle, text) in ipipe.xrepr(item, "footer"):
1254 if not isinstance(nostyle, int):
1408 if not isinstance(nostyle, int):
1255 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1409 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1256 if posx >= endx:
1410 if posx >= endx:
1257 break
1411 break
1258
1412
1259 attrstyle = [(astyle.style_default, "no attribute")]
1413 attrstyle = [(astyle.style_default, "no attribute")]
1260 attrname = level.displayattr[1]
1414 attrname = level.displayattr[1]
1261 if attrname is not ipipe.noitem and attrname is not None:
1415 if attrname is not ipipe.noitem and attrname is not None:
1262 posx += self.addstr(posy, posx, 0, endx, " | ", self.style_footer)
1416 posx += self.addstr(posy, posx, 0, endx, " | ", self.style_footer)
1263 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)
1264 posx += self.addstr(posy, posx, 0, endx, ": ", self.style_footer)
1418 posx += self.addstr(posy, posx, 0, endx, ": ", self.style_footer)
1265 try:
1419 try:
1266 attr = ipipe._getattr(item, attrname)
1420 attr = ipipe._getattr(item, attrname)
1267 except (SystemExit, KeyboardInterrupt):
1421 except (SystemExit, KeyboardInterrupt):
1268 raise
1422 raise
1269 except Exception, exc:
1423 except Exception, exc:
1270 attr = exc
1424 attr = exc
1271 if attr is not ipipe.noitem:
1425 if attr is not ipipe.noitem:
1272 attrstyle = ipipe.xrepr(attr, "footer")
1426 attrstyle = ipipe.xrepr(attr, "footer")
1273 for (nostyle, text) in attrstyle:
1427 for (nostyle, text) in attrstyle:
1274 if not isinstance(nostyle, int):
1428 if not isinstance(nostyle, int):
1275 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1429 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1276 if posx >= endx:
1430 if posx >= endx:
1277 break
1431 break
1278
1432
1279 try:
1433 try:
1280 # Display input prompt
1434 # Display input prompt
1281 if self.mode in self.prompts:
1435 if self.mode in self.prompts:
1436 history = self.prompts[self.mode]
1282 scr.addstr(self.scrsizey-1, 0,
1437 scr.addstr(self.scrsizey-1, 0,
1283 self.prompts[self.mode] + self.keyboardinput,
1438 history.prompt + ": " + history.input,
1284 self.getstyle(astyle.style_default))
1439 self.getstyle(astyle.style_default))
1285 # Display report
1440 # Display report
1286 else:
1441 else:
1287 if self._report is not None:
1442 if self._report is not None:
1288 if isinstance(self._report, Exception):
1443 if isinstance(self._report, Exception):
1289 style = self.getstyle(astyle.style_error)
1444 style = self.getstyle(astyle.style_error)
1290 if self._report.__class__.__module__ == "exceptions":
1445 if self._report.__class__.__module__ == "exceptions":
1291 msg = "%s: %s" % \
1446 msg = "%s: %s" % \
1292 (self._report.__class__.__name__, self._report)
1447 (self._report.__class__.__name__, self._report)
1293 else:
1448 else:
1294 msg = "%s.%s: %s" % \
1449 msg = "%s.%s: %s" % \
1295 (self._report.__class__.__module__,
1450 (self._report.__class__.__module__,
1296 self._report.__class__.__name__, self._report)
1451 self._report.__class__.__name__, self._report)
1297 else:
1452 else:
1298 style = self.getstyle(self.style_report)
1453 style = self.getstyle(self.style_report)
1299 msg = self._report
1454 msg = self._report
1300 scr.addstr(self.scrsizey-1, 0, msg[:self.scrsizex], style)
1455 scr.addstr(self.scrsizey-1, 0, msg[:self.scrsizex], style)
1301 self._report = None
1456 self._report = None
1302 else:
1457 else:
1303 scr.move(self.scrsizey-1, 0)
1458 scr.move(self.scrsizey-1, 0)
1304 except curses.error:
1459 except curses.error:
1305 # Protect against error from writing to the last line
1460 # Protect against error from writing to the last line
1306 pass
1461 pass
1307 scr.clrtoeol()
1462 scr.clrtoeol()
1308
1463
1309 # Position cursor
1464 # Position cursor
1310 if self.mode in self.prompts:
1465 if self.mode in self.prompts:
1311 scr.move(self.scrsizey-1, len(self.prompts[self.mode])+self.cursorpos)
1466 history = self.prompts[self.mode]
1467 scr.move(self.scrsizey-1, len(history.prompt)+2+history.curx)
1312 else:
1468 else:
1313 scr.move(
1469 scr.move(
1314 1+self._headerlines+level.cury-level.datastarty,
1470 1+self._headerlines+level.cury-level.datastarty,
1315 level.numbersizex+3+level.curx-level.datastartx
1471 level.numbersizex+3+level.curx-level.datastartx
1316 )
1472 )
1317 scr.refresh()
1473 scr.refresh()
1318
1474
1319 # Check keyboard
1475 # Check keyboard
1320 while True:
1476 while True:
1321 c = scr.getch()
1477 c = scr.getch()
1322 if self.mode in self.prompts:
1478 if self.mode in self.prompts:
1323 if c in (8, 127, curses.KEY_BACKSPACE):
1479 if self.prompts[self.mode].handlekey(self, c):
1324 if self.cursorpos:
1480 break # Redisplay
1325 self.keyboardinput = self.keyboardinput[:self.cursorpos-1] + self.keyboardinput[self.cursorpos:]
1326 self.cursorpos -= 1
1327 break
1328 else:
1329 curses.beep()
1330 elif c == curses.KEY_LEFT:
1331 if self.cursorpos:
1332 self.cursorpos -= 1
1333 break
1334 else:
1335 curses.beep()
1336 elif c == curses.KEY_RIGHT:
1337 if self.cursorpos < len(self.keyboardinput):
1338 self.cursorpos += 1
1339 break
1340 else:
1341 curses.beep()
1342 elif c in (curses.KEY_UP, curses.KEY_DOWN): # cancel
1343 self.mode = "default"
1344 break
1345 elif c == ord("\n"):
1346 self.executekeyboardinput(self.mode)
1347 break
1348 elif c != -1:
1349 try:
1350 c = chr(c)
1351 except ValueError:
1352 curses.beep()
1353 else:
1354 if (self.mode == "goto" and not "0" <= c <= "9"):
1355 curses.beep()
1356 else:
1357 self.keyboardinput = self.keyboardinput[:self.cursorpos] + c + self.keyboardinput[self.cursorpos:]
1358 self.cursorpos += 1
1359 break # Redisplay
1360 else:
1481 else:
1361 # if no key is pressed slow down and beep again
1482 # if no key is pressed slow down and beep again
1362 if c == -1:
1483 if c == -1:
1363 self.stepx = 1.
1484 self.stepx = 1.
1364 self.stepy = 1.
1485 self.stepy = 1.
1365 self._dobeep = True
1486 self._dobeep = True
1366 else:
1487 else:
1367 # if a different key was pressed slow down and beep too
1488 # if a different key was pressed slow down and beep too
1368 if c != lastc:
1489 if c != lastc:
1369 lastc = c
1490 lastc = c
1370 self.stepx = 1.
1491 self.stepx = 1.
1371 self.stepy = 1.
1492 self.stepy = 1.
1372 self._dobeep = True
1493 self._dobeep = True
1373 cmdname = self.keymap.get(c, None)
1494 cmdname = self.keymap.get(c, None)
1374 if cmdname is None:
1495 if cmdname is None:
1375 self.report(
1496 self.report(
1376 UnassignedKeyError("Unassigned key %s" %
1497 UnassignedKeyError("Unassigned key %s" %
1377 self.keylabel(c)))
1498 self.keylabel(c)))
1378 else:
1499 else:
1379 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
1500 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
1380 if cmdfunc is None:
1501 if cmdfunc is None:
1381 self.report(
1502 self.report(
1382 UnknownCommandError("Unknown command %r" %
1503 UnknownCommandError("Unknown command %r" %
1383 (cmdname,)))
1504 (cmdname,)))
1384 elif cmdfunc():
1505 elif cmdfunc():
1385 returnvalue = self.returnvalue
1506 returnvalue = self.returnvalue
1386 self.returnvalue = None
1507 self.returnvalue = None
1387 return returnvalue
1508 return returnvalue
1388 self.stepx = self.nextstepx(self.stepx)
1509 self.stepx = self.nextstepx(self.stepx)
1389 self.stepy = self.nextstepy(self.stepy)
1510 self.stepy = self.nextstepy(self.stepy)
1390 curses.flushinp() # get rid of type ahead
1511 curses.flushinp() # get rid of type ahead
1391 break # Redisplay
1512 break # Redisplay
1392 self.scr = None
1513 self.scr = None
1393
1514
1394 def display(self):
1515 def display(self):
1395 return curses.wrapper(self._dodisplay)
1516 return curses.wrapper(self._dodisplay)
@@ -1,5543 +1,5552 b''
1 2006-06-10 Walter Doerwald <walter@livinglogic.de>
2
3 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
4 implements the basic functionality of browser commands that require
5 input. Reimplement the goto, find and findbackwards commands as
6 subclasses of _CommandInput. Add an input history and keymaps to those
7 commands. Add "\r" as a keyboard shortcut for the enterdefault and
8 execute commands.
9
1 2006-06-07 Ville Vainio <vivainio@gmail.com>
10 2006-06-07 Ville Vainio <vivainio@gmail.com>
2
11
3 * iplib.py: ipython mybatch.ipy exits ipython immediately after
12 * iplib.py: ipython mybatch.ipy exits ipython immediately after
4 running the batch files instead of leaving the session open.
13 running the batch files instead of leaving the session open.
5
14
6 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
15 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
7
16
8 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
17 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
9 the original fix was incomplete. Patch submitted by W. Maier.
18 the original fix was incomplete. Patch submitted by W. Maier.
10
19
11 2006-06-07 Ville Vainio <vivainio@gmail.com>
20 2006-06-07 Ville Vainio <vivainio@gmail.com>
12
21
13 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
22 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
14 Confirmation prompts can be supressed by 'quiet' option.
23 Confirmation prompts can be supressed by 'quiet' option.
15 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
24 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
16
25
17 2006-06-06 *** Released version 0.7.2
26 2006-06-06 *** Released version 0.7.2
18
27
19 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
28 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
20
29
21 * IPython/Release.py (version): Made 0.7.2 final for release.
30 * IPython/Release.py (version): Made 0.7.2 final for release.
22 Repo tagged and release cut.
31 Repo tagged and release cut.
23
32
24 2006-06-05 Ville Vainio <vivainio@gmail.com>
33 2006-06-05 Ville Vainio <vivainio@gmail.com>
25
34
26 * Magic.py (magic_rehashx): Honor no_alias list earlier in
35 * Magic.py (magic_rehashx): Honor no_alias list earlier in
27 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
36 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
28
37
29 * upgrade_dir.py: try import 'path' module a bit harder
38 * upgrade_dir.py: try import 'path' module a bit harder
30 (for %upgrade)
39 (for %upgrade)
31
40
32 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
41 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
33
42
34 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
43 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
35 instead of looping 20 times.
44 instead of looping 20 times.
36
45
37 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
46 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
38 correctly at initialization time. Bug reported by Krishna Mohan
47 correctly at initialization time. Bug reported by Krishna Mohan
39 Gundu <gkmohan-AT-gmail.com> on the user list.
48 Gundu <gkmohan-AT-gmail.com> on the user list.
40
49
41 * IPython/Release.py (version): Mark 0.7.2 version to start
50 * IPython/Release.py (version): Mark 0.7.2 version to start
42 testing for release on 06/06.
51 testing for release on 06/06.
43
52
44 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
53 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
45
54
46 * scripts/irunner: thin script interface so users don't have to
55 * scripts/irunner: thin script interface so users don't have to
47 find the module and call it as an executable, since modules rarely
56 find the module and call it as an executable, since modules rarely
48 live in people's PATH.
57 live in people's PATH.
49
58
50 * IPython/irunner.py (InteractiveRunner.__init__): added
59 * IPython/irunner.py (InteractiveRunner.__init__): added
51 delaybeforesend attribute to control delays with newer versions of
60 delaybeforesend attribute to control delays with newer versions of
52 pexpect. Thanks to detailed help from pexpect's author, Noah
61 pexpect. Thanks to detailed help from pexpect's author, Noah
53 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
62 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
54 correctly (it works in NoColor mode).
63 correctly (it works in NoColor mode).
55
64
56 * IPython/iplib.py (handle_normal): fix nasty crash reported on
65 * IPython/iplib.py (handle_normal): fix nasty crash reported on
57 SAGE list, from improper log() calls.
66 SAGE list, from improper log() calls.
58
67
59 2006-05-31 Ville Vainio <vivainio@gmail.com>
68 2006-05-31 Ville Vainio <vivainio@gmail.com>
60
69
61 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
70 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
62 with args in parens to work correctly with dirs that have spaces.
71 with args in parens to work correctly with dirs that have spaces.
63
72
64 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
73 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
65
74
66 * IPython/Logger.py (Logger.logstart): add option to log raw input
75 * IPython/Logger.py (Logger.logstart): add option to log raw input
67 instead of the processed one. A -r flag was added to the
76 instead of the processed one. A -r flag was added to the
68 %logstart magic used for controlling logging.
77 %logstart magic used for controlling logging.
69
78
70 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
79 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
71
80
72 * IPython/iplib.py (InteractiveShell.__init__): add check for the
81 * IPython/iplib.py (InteractiveShell.__init__): add check for the
73 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
82 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
74 recognize the option. After a bug report by Will Maier. This
83 recognize the option. After a bug report by Will Maier. This
75 closes #64 (will do it after confirmation from W. Maier).
84 closes #64 (will do it after confirmation from W. Maier).
76
85
77 * IPython/irunner.py: New module to run scripts as if manually
86 * IPython/irunner.py: New module to run scripts as if manually
78 typed into an interactive environment, based on pexpect. After a
87 typed into an interactive environment, based on pexpect. After a
79 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
88 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
80 ipython-user list. Simple unittests in the tests/ directory.
89 ipython-user list. Simple unittests in the tests/ directory.
81
90
82 * tools/release: add Will Maier, OpenBSD port maintainer, to
91 * tools/release: add Will Maier, OpenBSD port maintainer, to
83 recepients list. We are now officially part of the OpenBSD ports:
92 recepients list. We are now officially part of the OpenBSD ports:
84 http://www.openbsd.org/ports.html ! Many thanks to Will for the
93 http://www.openbsd.org/ports.html ! Many thanks to Will for the
85 work.
94 work.
86
95
87 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
96 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
88
97
89 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
98 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
90 so that it doesn't break tkinter apps.
99 so that it doesn't break tkinter apps.
91
100
92 * IPython/iplib.py (_prefilter): fix bug where aliases would
101 * IPython/iplib.py (_prefilter): fix bug where aliases would
93 shadow variables when autocall was fully off. Reported by SAGE
102 shadow variables when autocall was fully off. Reported by SAGE
94 author William Stein.
103 author William Stein.
95
104
96 * IPython/OInspect.py (Inspector.__init__): add a flag to control
105 * IPython/OInspect.py (Inspector.__init__): add a flag to control
97 at what detail level strings are computed when foo? is requested.
106 at what detail level strings are computed when foo? is requested.
98 This allows users to ask for example that the string form of an
107 This allows users to ask for example that the string form of an
99 object is only computed when foo?? is called, or even never, by
108 object is only computed when foo?? is called, or even never, by
100 setting the object_info_string_level >= 2 in the configuration
109 setting the object_info_string_level >= 2 in the configuration
101 file. This new option has been added and documented. After a
110 file. This new option has been added and documented. After a
102 request by SAGE to be able to control the printing of very large
111 request by SAGE to be able to control the printing of very large
103 objects more easily.
112 objects more easily.
104
113
105 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
114 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
106
115
107 * IPython/ipmaker.py (make_IPython): remove the ipython call path
116 * IPython/ipmaker.py (make_IPython): remove the ipython call path
108 from sys.argv, to be 100% consistent with how Python itself works
117 from sys.argv, to be 100% consistent with how Python itself works
109 (as seen for example with python -i file.py). After a bug report
118 (as seen for example with python -i file.py). After a bug report
110 by Jeffrey Collins.
119 by Jeffrey Collins.
111
120
112 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
121 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
113 nasty bug which was preventing custom namespaces with -pylab,
122 nasty bug which was preventing custom namespaces with -pylab,
114 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
123 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
115 compatibility (long gone from mpl).
124 compatibility (long gone from mpl).
116
125
117 * IPython/ipapi.py (make_session): name change: create->make. We
126 * IPython/ipapi.py (make_session): name change: create->make. We
118 use make in other places (ipmaker,...), it's shorter and easier to
127 use make in other places (ipmaker,...), it's shorter and easier to
119 type and say, etc. I'm trying to clean things before 0.7.2 so
128 type and say, etc. I'm trying to clean things before 0.7.2 so
120 that I can keep things stable wrt to ipapi in the chainsaw branch.
129 that I can keep things stable wrt to ipapi in the chainsaw branch.
121
130
122 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
131 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
123 python-mode recognizes our debugger mode. Add support for
132 python-mode recognizes our debugger mode. Add support for
124 autoindent inside (X)emacs. After a patch sent in by Jin Liu
133 autoindent inside (X)emacs. After a patch sent in by Jin Liu
125 <m.liu.jin-AT-gmail.com> originally written by
134 <m.liu.jin-AT-gmail.com> originally written by
126 doxgen-AT-newsmth.net (with minor modifications for xemacs
135 doxgen-AT-newsmth.net (with minor modifications for xemacs
127 compatibility)
136 compatibility)
128
137
129 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
138 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
130 tracebacks when walking the stack so that the stack tracking system
139 tracebacks when walking the stack so that the stack tracking system
131 in emacs' python-mode can identify the frames correctly.
140 in emacs' python-mode can identify the frames correctly.
132
141
133 * IPython/ipmaker.py (make_IPython): make the internal (and
142 * IPython/ipmaker.py (make_IPython): make the internal (and
134 default config) autoedit_syntax value false by default. Too many
143 default config) autoedit_syntax value false by default. Too many
135 users have complained to me (both on and off-list) about problems
144 users have complained to me (both on and off-list) about problems
136 with this option being on by default, so I'm making it default to
145 with this option being on by default, so I'm making it default to
137 off. It can still be enabled by anyone via the usual mechanisms.
146 off. It can still be enabled by anyone via the usual mechanisms.
138
147
139 * IPython/completer.py (Completer.attr_matches): add support for
148 * IPython/completer.py (Completer.attr_matches): add support for
140 PyCrust-style _getAttributeNames magic method. Patch contributed
149 PyCrust-style _getAttributeNames magic method. Patch contributed
141 by <mscott-AT-goldenspud.com>. Closes #50.
150 by <mscott-AT-goldenspud.com>. Closes #50.
142
151
143 * IPython/iplib.py (InteractiveShell.__init__): remove the
152 * IPython/iplib.py (InteractiveShell.__init__): remove the
144 deletion of exit/quit from __builtin__, which can break
153 deletion of exit/quit from __builtin__, which can break
145 third-party tools like the Zope debugging console. The
154 third-party tools like the Zope debugging console. The
146 %exit/%quit magics remain. In general, it's probably a good idea
155 %exit/%quit magics remain. In general, it's probably a good idea
147 not to delete anything from __builtin__, since we never know what
156 not to delete anything from __builtin__, since we never know what
148 that will break. In any case, python now (for 2.5) will support
157 that will break. In any case, python now (for 2.5) will support
149 'real' exit/quit, so this issue is moot. Closes #55.
158 'real' exit/quit, so this issue is moot. Closes #55.
150
159
151 * IPython/genutils.py (with_obj): rename the 'with' function to
160 * IPython/genutils.py (with_obj): rename the 'with' function to
152 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
161 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
153 becomes a language keyword. Closes #53.
162 becomes a language keyword. Closes #53.
154
163
155 * IPython/FakeModule.py (FakeModule.__init__): add a proper
164 * IPython/FakeModule.py (FakeModule.__init__): add a proper
156 __file__ attribute to this so it fools more things into thinking
165 __file__ attribute to this so it fools more things into thinking
157 it is a real module. Closes #59.
166 it is a real module. Closes #59.
158
167
159 * IPython/Magic.py (magic_edit): add -n option to open the editor
168 * IPython/Magic.py (magic_edit): add -n option to open the editor
160 at a specific line number. After a patch by Stefan van der Walt.
169 at a specific line number. After a patch by Stefan van der Walt.
161
170
162 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
171 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
163
172
164 * IPython/iplib.py (edit_syntax_error): fix crash when for some
173 * IPython/iplib.py (edit_syntax_error): fix crash when for some
165 reason the file could not be opened. After automatic crash
174 reason the file could not be opened. After automatic crash
166 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
175 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
167 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
176 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
168 (_should_recompile): Don't fire editor if using %bg, since there
177 (_should_recompile): Don't fire editor if using %bg, since there
169 is no file in the first place. From the same report as above.
178 is no file in the first place. From the same report as above.
170 (raw_input): protect against faulty third-party prefilters. After
179 (raw_input): protect against faulty third-party prefilters. After
171 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
180 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
172 while running under SAGE.
181 while running under SAGE.
173
182
174 2006-05-23 Ville Vainio <vivainio@gmail.com>
183 2006-05-23 Ville Vainio <vivainio@gmail.com>
175
184
176 * ipapi.py: Stripped down ip.to_user_ns() to work only as
185 * ipapi.py: Stripped down ip.to_user_ns() to work only as
177 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
186 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
178 now returns None (again), unless dummy is specifically allowed by
187 now returns None (again), unless dummy is specifically allowed by
179 ipapi.get(allow_dummy=True).
188 ipapi.get(allow_dummy=True).
180
189
181 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
190 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
182
191
183 * IPython: remove all 2.2-compatibility objects and hacks from
192 * IPython: remove all 2.2-compatibility objects and hacks from
184 everywhere, since we only support 2.3 at this point. Docs
193 everywhere, since we only support 2.3 at this point. Docs
185 updated.
194 updated.
186
195
187 * IPython/ipapi.py (IPApi.__init__): Clean up of all getters.
196 * IPython/ipapi.py (IPApi.__init__): Clean up of all getters.
188 Anything requiring extra validation can be turned into a Python
197 Anything requiring extra validation can be turned into a Python
189 property in the future. I used a property for the db one b/c
198 property in the future. I used a property for the db one b/c
190 there was a nasty circularity problem with the initialization
199 there was a nasty circularity problem with the initialization
191 order, which right now I don't have time to clean up.
200 order, which right now I don't have time to clean up.
192
201
193 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
202 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
194 another locking bug reported by Jorgen. I'm not 100% sure though,
203 another locking bug reported by Jorgen. I'm not 100% sure though,
195 so more testing is needed...
204 so more testing is needed...
196
205
197 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
206 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
198
207
199 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
208 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
200 local variables from any routine in user code (typically executed
209 local variables from any routine in user code (typically executed
201 with %run) directly into the interactive namespace. Very useful
210 with %run) directly into the interactive namespace. Very useful
202 when doing complex debugging.
211 when doing complex debugging.
203 (IPythonNotRunning): Changed the default None object to a dummy
212 (IPythonNotRunning): Changed the default None object to a dummy
204 whose attributes can be queried as well as called without
213 whose attributes can be queried as well as called without
205 exploding, to ease writing code which works transparently both in
214 exploding, to ease writing code which works transparently both in
206 and out of ipython and uses some of this API.
215 and out of ipython and uses some of this API.
207
216
208 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
217 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
209
218
210 * IPython/hooks.py (result_display): Fix the fact that our display
219 * IPython/hooks.py (result_display): Fix the fact that our display
211 hook was using str() instead of repr(), as the default python
220 hook was using str() instead of repr(), as the default python
212 console does. This had gone unnoticed b/c it only happened if
221 console does. This had gone unnoticed b/c it only happened if
213 %Pprint was off, but the inconsistency was there.
222 %Pprint was off, but the inconsistency was there.
214
223
215 2006-05-15 Ville Vainio <vivainio@gmail.com>
224 2006-05-15 Ville Vainio <vivainio@gmail.com>
216
225
217 * Oinspect.py: Only show docstring for nonexisting/binary files
226 * Oinspect.py: Only show docstring for nonexisting/binary files
218 when doing object??, closing ticket #62
227 when doing object??, closing ticket #62
219
228
220 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
229 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
221
230
222 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
231 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
223 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
232 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
224 was being released in a routine which hadn't checked if it had
233 was being released in a routine which hadn't checked if it had
225 been the one to acquire it.
234 been the one to acquire it.
226
235
227 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
236 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
228
237
229 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
238 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
230
239
231 2006-04-11 Ville Vainio <vivainio@gmail.com>
240 2006-04-11 Ville Vainio <vivainio@gmail.com>
232
241
233 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
242 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
234 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
243 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
235 prefilters, allowing stuff like magics and aliases in the file.
244 prefilters, allowing stuff like magics and aliases in the file.
236
245
237 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
246 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
238 added. Supported now are "%clear in" and "%clear out" (clear input and
247 added. Supported now are "%clear in" and "%clear out" (clear input and
239 output history, respectively). Also fixed CachedOutput.flush to
248 output history, respectively). Also fixed CachedOutput.flush to
240 properly flush the output cache.
249 properly flush the output cache.
241
250
242 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
251 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
243 half-success (and fail explicitly).
252 half-success (and fail explicitly).
244
253
245 2006-03-28 Ville Vainio <vivainio@gmail.com>
254 2006-03-28 Ville Vainio <vivainio@gmail.com>
246
255
247 * iplib.py: Fix quoting of aliases so that only argless ones
256 * iplib.py: Fix quoting of aliases so that only argless ones
248 are quoted
257 are quoted
249
258
250 2006-03-28 Ville Vainio <vivainio@gmail.com>
259 2006-03-28 Ville Vainio <vivainio@gmail.com>
251
260
252 * iplib.py: Quote aliases with spaces in the name.
261 * iplib.py: Quote aliases with spaces in the name.
253 "c:\program files\blah\bin" is now legal alias target.
262 "c:\program files\blah\bin" is now legal alias target.
254
263
255 * ext_rehashdir.py: Space no longer allowed as arg
264 * ext_rehashdir.py: Space no longer allowed as arg
256 separator, since space is legal in path names.
265 separator, since space is legal in path names.
257
266
258 2006-03-16 Ville Vainio <vivainio@gmail.com>
267 2006-03-16 Ville Vainio <vivainio@gmail.com>
259
268
260 * upgrade_dir.py: Take path.py from Extensions, correcting
269 * upgrade_dir.py: Take path.py from Extensions, correcting
261 %upgrade magic
270 %upgrade magic
262
271
263 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
272 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
264
273
265 * hooks.py: Only enclose editor binary in quotes if legal and
274 * hooks.py: Only enclose editor binary in quotes if legal and
266 necessary (space in the name, and is an existing file). Fixes a bug
275 necessary (space in the name, and is an existing file). Fixes a bug
267 reported by Zachary Pincus.
276 reported by Zachary Pincus.
268
277
269 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
278 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
270
279
271 * Manual: thanks to a tip on proper color handling for Emacs, by
280 * Manual: thanks to a tip on proper color handling for Emacs, by
272 Eric J Haywiser <ejh1-AT-MIT.EDU>.
281 Eric J Haywiser <ejh1-AT-MIT.EDU>.
273
282
274 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
283 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
275 by applying the provided patch. Thanks to Liu Jin
284 by applying the provided patch. Thanks to Liu Jin
276 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
285 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
277 XEmacs/Linux, I'm trusting the submitter that it actually helps
286 XEmacs/Linux, I'm trusting the submitter that it actually helps
278 under win32/GNU Emacs. Will revisit if any problems are reported.
287 under win32/GNU Emacs. Will revisit if any problems are reported.
279
288
280 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
289 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
281
290
282 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
291 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
283 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
292 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
284
293
285 2006-03-12 Ville Vainio <vivainio@gmail.com>
294 2006-03-12 Ville Vainio <vivainio@gmail.com>
286
295
287 * Magic.py (magic_timeit): Added %timeit magic, contributed by
296 * Magic.py (magic_timeit): Added %timeit magic, contributed by
288 Torsten Marek.
297 Torsten Marek.
289
298
290 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
299 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
291
300
292 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
301 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
293 line ranges works again.
302 line ranges works again.
294
303
295 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
304 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
296
305
297 * IPython/iplib.py (showtraceback): add back sys.last_traceback
306 * IPython/iplib.py (showtraceback): add back sys.last_traceback
298 and friends, after a discussion with Zach Pincus on ipython-user.
307 and friends, after a discussion with Zach Pincus on ipython-user.
299 I'm not 100% sure, but after thinking aobut it quite a bit, it may
308 I'm not 100% sure, but after thinking aobut it quite a bit, it may
300 be OK. Testing with the multithreaded shells didn't reveal any
309 be OK. Testing with the multithreaded shells didn't reveal any
301 problems, but let's keep an eye out.
310 problems, but let's keep an eye out.
302
311
303 In the process, I fixed a few things which were calling
312 In the process, I fixed a few things which were calling
304 self.InteractiveTB() directly (like safe_execfile), which is a
313 self.InteractiveTB() directly (like safe_execfile), which is a
305 mistake: ALL exception reporting should be done by calling
314 mistake: ALL exception reporting should be done by calling
306 self.showtraceback(), which handles state and tab-completion and
315 self.showtraceback(), which handles state and tab-completion and
307 more.
316 more.
308
317
309 2006-03-01 Ville Vainio <vivainio@gmail.com>
318 2006-03-01 Ville Vainio <vivainio@gmail.com>
310
319
311 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
320 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
312 To use, do "from ipipe import *".
321 To use, do "from ipipe import *".
313
322
314 2006-02-24 Ville Vainio <vivainio@gmail.com>
323 2006-02-24 Ville Vainio <vivainio@gmail.com>
315
324
316 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
325 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
317 "cleanly" and safely than the older upgrade mechanism.
326 "cleanly" and safely than the older upgrade mechanism.
318
327
319 2006-02-21 Ville Vainio <vivainio@gmail.com>
328 2006-02-21 Ville Vainio <vivainio@gmail.com>
320
329
321 * Magic.py: %save works again.
330 * Magic.py: %save works again.
322
331
323 2006-02-15 Ville Vainio <vivainio@gmail.com>
332 2006-02-15 Ville Vainio <vivainio@gmail.com>
324
333
325 * Magic.py: %Pprint works again
334 * Magic.py: %Pprint works again
326
335
327 * Extensions/ipy_sane_defaults.py: Provide everything provided
336 * Extensions/ipy_sane_defaults.py: Provide everything provided
328 in default ipythonrc, to make it possible to have a completely empty
337 in default ipythonrc, to make it possible to have a completely empty
329 ipythonrc (and thus completely rc-file free configuration)
338 ipythonrc (and thus completely rc-file free configuration)
330
339
331
340
332 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
341 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
333
342
334 * IPython/hooks.py (editor): quote the call to the editor command,
343 * IPython/hooks.py (editor): quote the call to the editor command,
335 to allow commands with spaces in them. Problem noted by watching
344 to allow commands with spaces in them. Problem noted by watching
336 Ian Oswald's video about textpad under win32 at
345 Ian Oswald's video about textpad under win32 at
337 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
346 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
338
347
339 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
348 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
340 describing magics (we haven't used @ for a loong time).
349 describing magics (we haven't used @ for a loong time).
341
350
342 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
351 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
343 contributed by marienz to close
352 contributed by marienz to close
344 http://www.scipy.net/roundup/ipython/issue53.
353 http://www.scipy.net/roundup/ipython/issue53.
345
354
346 2006-02-10 Ville Vainio <vivainio@gmail.com>
355 2006-02-10 Ville Vainio <vivainio@gmail.com>
347
356
348 * genutils.py: getoutput now works in win32 too
357 * genutils.py: getoutput now works in win32 too
349
358
350 * completer.py: alias and magic completion only invoked
359 * completer.py: alias and magic completion only invoked
351 at the first "item" in the line, to avoid "cd %store"
360 at the first "item" in the line, to avoid "cd %store"
352 nonsense.
361 nonsense.
353
362
354 2006-02-09 Ville Vainio <vivainio@gmail.com>
363 2006-02-09 Ville Vainio <vivainio@gmail.com>
355
364
356 * test/*: Added a unit testing framework (finally).
365 * test/*: Added a unit testing framework (finally).
357 '%run runtests.py' to run test_*.
366 '%run runtests.py' to run test_*.
358
367
359 * ipapi.py: Exposed runlines and set_custom_exc
368 * ipapi.py: Exposed runlines and set_custom_exc
360
369
361 2006-02-07 Ville Vainio <vivainio@gmail.com>
370 2006-02-07 Ville Vainio <vivainio@gmail.com>
362
371
363 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
372 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
364 instead use "f(1 2)" as before.
373 instead use "f(1 2)" as before.
365
374
366 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
375 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
367
376
368 * IPython/demo.py (IPythonDemo): Add new classes to the demo
377 * IPython/demo.py (IPythonDemo): Add new classes to the demo
369 facilities, for demos processed by the IPython input filter
378 facilities, for demos processed by the IPython input filter
370 (IPythonDemo), and for running a script one-line-at-a-time as a
379 (IPythonDemo), and for running a script one-line-at-a-time as a
371 demo, both for pure Python (LineDemo) and for IPython-processed
380 demo, both for pure Python (LineDemo) and for IPython-processed
372 input (IPythonLineDemo). After a request by Dave Kohel, from the
381 input (IPythonLineDemo). After a request by Dave Kohel, from the
373 SAGE team.
382 SAGE team.
374 (Demo.edit): added and edit() method to the demo objects, to edit
383 (Demo.edit): added and edit() method to the demo objects, to edit
375 the in-memory copy of the last executed block.
384 the in-memory copy of the last executed block.
376
385
377 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
386 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
378 processing to %edit, %macro and %save. These commands can now be
387 processing to %edit, %macro and %save. These commands can now be
379 invoked on the unprocessed input as it was typed by the user
388 invoked on the unprocessed input as it was typed by the user
380 (without any prefilters applied). After requests by the SAGE team
389 (without any prefilters applied). After requests by the SAGE team
381 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
390 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
382
391
383 2006-02-01 Ville Vainio <vivainio@gmail.com>
392 2006-02-01 Ville Vainio <vivainio@gmail.com>
384
393
385 * setup.py, eggsetup.py: easy_install ipython==dev works
394 * setup.py, eggsetup.py: easy_install ipython==dev works
386 correctly now (on Linux)
395 correctly now (on Linux)
387
396
388 * ipy_user_conf,ipmaker: user config changes, removed spurious
397 * ipy_user_conf,ipmaker: user config changes, removed spurious
389 warnings
398 warnings
390
399
391 * iplib: if rc.banner is string, use it as is.
400 * iplib: if rc.banner is string, use it as is.
392
401
393 * Magic: %pycat accepts a string argument and pages it's contents.
402 * Magic: %pycat accepts a string argument and pages it's contents.
394
403
395
404
396 2006-01-30 Ville Vainio <vivainio@gmail.com>
405 2006-01-30 Ville Vainio <vivainio@gmail.com>
397
406
398 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
407 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
399 Now %store and bookmarks work through PickleShare, meaning that
408 Now %store and bookmarks work through PickleShare, meaning that
400 concurrent access is possible and all ipython sessions see the
409 concurrent access is possible and all ipython sessions see the
401 same database situation all the time, instead of snapshot of
410 same database situation all the time, instead of snapshot of
402 the situation when the session was started. Hence, %bookmark
411 the situation when the session was started. Hence, %bookmark
403 results are immediately accessible from othes sessions. The database
412 results are immediately accessible from othes sessions. The database
404 is also available for use by user extensions. See:
413 is also available for use by user extensions. See:
405 http://www.python.org/pypi/pickleshare
414 http://www.python.org/pypi/pickleshare
406
415
407 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
416 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
408
417
409 * aliases can now be %store'd
418 * aliases can now be %store'd
410
419
411 * path.py move to Extensions so that pickleshare does not need
420 * path.py move to Extensions so that pickleshare does not need
412 IPython-specific import. Extensions added to pythonpath right
421 IPython-specific import. Extensions added to pythonpath right
413 at __init__.
422 at __init__.
414
423
415 * iplib.py: ipalias deprecated/redundant; aliases are converted and
424 * iplib.py: ipalias deprecated/redundant; aliases are converted and
416 called with _ip.system and the pre-transformed command string.
425 called with _ip.system and the pre-transformed command string.
417
426
418 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
427 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
419
428
420 * IPython/iplib.py (interact): Fix that we were not catching
429 * IPython/iplib.py (interact): Fix that we were not catching
421 KeyboardInterrupt exceptions properly. I'm not quite sure why the
430 KeyboardInterrupt exceptions properly. I'm not quite sure why the
422 logic here had to change, but it's fixed now.
431 logic here had to change, but it's fixed now.
423
432
424 2006-01-29 Ville Vainio <vivainio@gmail.com>
433 2006-01-29 Ville Vainio <vivainio@gmail.com>
425
434
426 * iplib.py: Try to import pyreadline on Windows.
435 * iplib.py: Try to import pyreadline on Windows.
427
436
428 2006-01-27 Ville Vainio <vivainio@gmail.com>
437 2006-01-27 Ville Vainio <vivainio@gmail.com>
429
438
430 * iplib.py: Expose ipapi as _ip in builtin namespace.
439 * iplib.py: Expose ipapi as _ip in builtin namespace.
431 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
440 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
432 and ip_set_hook (-> _ip.set_hook) redundant. % and !
441 and ip_set_hook (-> _ip.set_hook) redundant. % and !
433 syntax now produce _ip.* variant of the commands.
442 syntax now produce _ip.* variant of the commands.
434
443
435 * "_ip.options().autoedit_syntax = 2" automatically throws
444 * "_ip.options().autoedit_syntax = 2" automatically throws
436 user to editor for syntax error correction without prompting.
445 user to editor for syntax error correction without prompting.
437
446
438 2006-01-27 Ville Vainio <vivainio@gmail.com>
447 2006-01-27 Ville Vainio <vivainio@gmail.com>
439
448
440 * ipmaker.py: Give "realistic" sys.argv for scripts (without
449 * ipmaker.py: Give "realistic" sys.argv for scripts (without
441 'ipython' at argv[0]) executed through command line.
450 'ipython' at argv[0]) executed through command line.
442 NOTE: this DEPRECATES calling ipython with multiple scripts
451 NOTE: this DEPRECATES calling ipython with multiple scripts
443 ("ipython a.py b.py c.py")
452 ("ipython a.py b.py c.py")
444
453
445 * iplib.py, hooks.py: Added configurable input prefilter,
454 * iplib.py, hooks.py: Added configurable input prefilter,
446 named 'input_prefilter'. See ext_rescapture.py for example
455 named 'input_prefilter'. See ext_rescapture.py for example
447 usage.
456 usage.
448
457
449 * ext_rescapture.py, Magic.py: Better system command output capture
458 * ext_rescapture.py, Magic.py: Better system command output capture
450 through 'var = !ls' (deprecates user-visible %sc). Same notation
459 through 'var = !ls' (deprecates user-visible %sc). Same notation
451 applies for magics, 'var = %alias' assigns alias list to var.
460 applies for magics, 'var = %alias' assigns alias list to var.
452
461
453 * ipapi.py: added meta() for accessing extension-usable data store.
462 * ipapi.py: added meta() for accessing extension-usable data store.
454
463
455 * iplib.py: added InteractiveShell.getapi(). New magics should be
464 * iplib.py: added InteractiveShell.getapi(). New magics should be
456 written doing self.getapi() instead of using the shell directly.
465 written doing self.getapi() instead of using the shell directly.
457
466
458 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
467 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
459 %store foo >> ~/myfoo.txt to store variables to files (in clean
468 %store foo >> ~/myfoo.txt to store variables to files (in clean
460 textual form, not a restorable pickle).
469 textual form, not a restorable pickle).
461
470
462 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
471 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
463
472
464 * usage.py, Magic.py: added %quickref
473 * usage.py, Magic.py: added %quickref
465
474
466 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
475 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
467
476
468 * GetoptErrors when invoking magics etc. with wrong args
477 * GetoptErrors when invoking magics etc. with wrong args
469 are now more helpful:
478 are now more helpful:
470 GetoptError: option -l not recognized (allowed: "qb" )
479 GetoptError: option -l not recognized (allowed: "qb" )
471
480
472 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
481 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
473
482
474 * IPython/demo.py (Demo.show): Flush stdout after each block, so
483 * IPython/demo.py (Demo.show): Flush stdout after each block, so
475 computationally intensive blocks don't appear to stall the demo.
484 computationally intensive blocks don't appear to stall the demo.
476
485
477 2006-01-24 Ville Vainio <vivainio@gmail.com>
486 2006-01-24 Ville Vainio <vivainio@gmail.com>
478
487
479 * iplib.py, hooks.py: 'result_display' hook can return a non-None
488 * iplib.py, hooks.py: 'result_display' hook can return a non-None
480 value to manipulate resulting history entry.
489 value to manipulate resulting history entry.
481
490
482 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
491 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
483 to instance methods of IPApi class, to make extending an embedded
492 to instance methods of IPApi class, to make extending an embedded
484 IPython feasible. See ext_rehashdir.py for example usage.
493 IPython feasible. See ext_rehashdir.py for example usage.
485
494
486 * Merged 1071-1076 from banches/0.7.1
495 * Merged 1071-1076 from banches/0.7.1
487
496
488
497
489 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
498 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
490
499
491 * tools/release (daystamp): Fix build tools to use the new
500 * tools/release (daystamp): Fix build tools to use the new
492 eggsetup.py script to build lightweight eggs.
501 eggsetup.py script to build lightweight eggs.
493
502
494 * Applied changesets 1062 and 1064 before 0.7.1 release.
503 * Applied changesets 1062 and 1064 before 0.7.1 release.
495
504
496 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
505 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
497 see the raw input history (without conversions like %ls ->
506 see the raw input history (without conversions like %ls ->
498 ipmagic("ls")). After a request from W. Stein, SAGE
507 ipmagic("ls")). After a request from W. Stein, SAGE
499 (http://modular.ucsd.edu/sage) developer. This information is
508 (http://modular.ucsd.edu/sage) developer. This information is
500 stored in the input_hist_raw attribute of the IPython instance, so
509 stored in the input_hist_raw attribute of the IPython instance, so
501 developers can access it if needed (it's an InputList instance).
510 developers can access it if needed (it's an InputList instance).
502
511
503 * Versionstring = 0.7.2.svn
512 * Versionstring = 0.7.2.svn
504
513
505 * eggsetup.py: A separate script for constructing eggs, creates
514 * eggsetup.py: A separate script for constructing eggs, creates
506 proper launch scripts even on Windows (an .exe file in
515 proper launch scripts even on Windows (an .exe file in
507 \python24\scripts).
516 \python24\scripts).
508
517
509 * ipapi.py: launch_new_instance, launch entry point needed for the
518 * ipapi.py: launch_new_instance, launch entry point needed for the
510 egg.
519 egg.
511
520
512 2006-01-23 Ville Vainio <vivainio@gmail.com>
521 2006-01-23 Ville Vainio <vivainio@gmail.com>
513
522
514 * Added %cpaste magic for pasting python code
523 * Added %cpaste magic for pasting python code
515
524
516 2006-01-22 Ville Vainio <vivainio@gmail.com>
525 2006-01-22 Ville Vainio <vivainio@gmail.com>
517
526
518 * Merge from branches/0.7.1 into trunk, revs 1052-1057
527 * Merge from branches/0.7.1 into trunk, revs 1052-1057
519
528
520 * Versionstring = 0.7.2.svn
529 * Versionstring = 0.7.2.svn
521
530
522 * eggsetup.py: A separate script for constructing eggs, creates
531 * eggsetup.py: A separate script for constructing eggs, creates
523 proper launch scripts even on Windows (an .exe file in
532 proper launch scripts even on Windows (an .exe file in
524 \python24\scripts).
533 \python24\scripts).
525
534
526 * ipapi.py: launch_new_instance, launch entry point needed for the
535 * ipapi.py: launch_new_instance, launch entry point needed for the
527 egg.
536 egg.
528
537
529 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
538 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
530
539
531 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
540 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
532 %pfile foo would print the file for foo even if it was a binary.
541 %pfile foo would print the file for foo even if it was a binary.
533 Now, extensions '.so' and '.dll' are skipped.
542 Now, extensions '.so' and '.dll' are skipped.
534
543
535 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
544 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
536 bug, where macros would fail in all threaded modes. I'm not 100%
545 bug, where macros would fail in all threaded modes. I'm not 100%
537 sure, so I'm going to put out an rc instead of making a release
546 sure, so I'm going to put out an rc instead of making a release
538 today, and wait for feedback for at least a few days.
547 today, and wait for feedback for at least a few days.
539
548
540 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
549 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
541 it...) the handling of pasting external code with autoindent on.
550 it...) the handling of pasting external code with autoindent on.
542 To get out of a multiline input, the rule will appear for most
551 To get out of a multiline input, the rule will appear for most
543 users unchanged: two blank lines or change the indent level
552 users unchanged: two blank lines or change the indent level
544 proposed by IPython. But there is a twist now: you can
553 proposed by IPython. But there is a twist now: you can
545 add/subtract only *one or two spaces*. If you add/subtract three
554 add/subtract only *one or two spaces*. If you add/subtract three
546 or more (unless you completely delete the line), IPython will
555 or more (unless you completely delete the line), IPython will
547 accept that line, and you'll need to enter a second one of pure
556 accept that line, and you'll need to enter a second one of pure
548 whitespace. I know it sounds complicated, but I can't find a
557 whitespace. I know it sounds complicated, but I can't find a
549 different solution that covers all the cases, with the right
558 different solution that covers all the cases, with the right
550 heuristics. Hopefully in actual use, nobody will really notice
559 heuristics. Hopefully in actual use, nobody will really notice
551 all these strange rules and things will 'just work'.
560 all these strange rules and things will 'just work'.
552
561
553 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
562 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
554
563
555 * IPython/iplib.py (interact): catch exceptions which can be
564 * IPython/iplib.py (interact): catch exceptions which can be
556 triggered asynchronously by signal handlers. Thanks to an
565 triggered asynchronously by signal handlers. Thanks to an
557 automatic crash report, submitted by Colin Kingsley
566 automatic crash report, submitted by Colin Kingsley
558 <tercel-AT-gentoo.org>.
567 <tercel-AT-gentoo.org>.
559
568
560 2006-01-20 Ville Vainio <vivainio@gmail.com>
569 2006-01-20 Ville Vainio <vivainio@gmail.com>
561
570
562 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
571 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
563 (%rehashdir, very useful, try it out) of how to extend ipython
572 (%rehashdir, very useful, try it out) of how to extend ipython
564 with new magics. Also added Extensions dir to pythonpath to make
573 with new magics. Also added Extensions dir to pythonpath to make
565 importing extensions easy.
574 importing extensions easy.
566
575
567 * %store now complains when trying to store interactively declared
576 * %store now complains when trying to store interactively declared
568 classes / instances of those classes.
577 classes / instances of those classes.
569
578
570 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
579 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
571 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
580 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
572 if they exist, and ipy_user_conf.py with some defaults is created for
581 if they exist, and ipy_user_conf.py with some defaults is created for
573 the user.
582 the user.
574
583
575 * Startup rehashing done by the config file, not InterpreterExec.
584 * Startup rehashing done by the config file, not InterpreterExec.
576 This means system commands are available even without selecting the
585 This means system commands are available even without selecting the
577 pysh profile. It's the sensible default after all.
586 pysh profile. It's the sensible default after all.
578
587
579 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
588 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
580
589
581 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
590 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
582 multiline code with autoindent on working. But I am really not
591 multiline code with autoindent on working. But I am really not
583 sure, so this needs more testing. Will commit a debug-enabled
592 sure, so this needs more testing. Will commit a debug-enabled
584 version for now, while I test it some more, so that Ville and
593 version for now, while I test it some more, so that Ville and
585 others may also catch any problems. Also made
594 others may also catch any problems. Also made
586 self.indent_current_str() a method, to ensure that there's no
595 self.indent_current_str() a method, to ensure that there's no
587 chance of the indent space count and the corresponding string
596 chance of the indent space count and the corresponding string
588 falling out of sync. All code needing the string should just call
597 falling out of sync. All code needing the string should just call
589 the method.
598 the method.
590
599
591 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
600 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
592
601
593 * IPython/Magic.py (magic_edit): fix check for when users don't
602 * IPython/Magic.py (magic_edit): fix check for when users don't
594 save their output files, the try/except was in the wrong section.
603 save their output files, the try/except was in the wrong section.
595
604
596 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
605 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
597
606
598 * IPython/Magic.py (magic_run): fix __file__ global missing from
607 * IPython/Magic.py (magic_run): fix __file__ global missing from
599 script's namespace when executed via %run. After a report by
608 script's namespace when executed via %run. After a report by
600 Vivian.
609 Vivian.
601
610
602 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
611 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
603 when using python 2.4. The parent constructor changed in 2.4, and
612 when using python 2.4. The parent constructor changed in 2.4, and
604 we need to track it directly (we can't call it, as it messes up
613 we need to track it directly (we can't call it, as it messes up
605 readline and tab-completion inside our pdb would stop working).
614 readline and tab-completion inside our pdb would stop working).
606 After a bug report by R. Bernstein <rocky-AT-panix.com>.
615 After a bug report by R. Bernstein <rocky-AT-panix.com>.
607
616
608 2006-01-16 Ville Vainio <vivainio@gmail.com>
617 2006-01-16 Ville Vainio <vivainio@gmail.com>
609
618
610 * Ipython/magic.py:Reverted back to old %edit functionality
619 * Ipython/magic.py:Reverted back to old %edit functionality
611 that returns file contents on exit.
620 that returns file contents on exit.
612
621
613 * IPython/path.py: Added Jason Orendorff's "path" module to
622 * IPython/path.py: Added Jason Orendorff's "path" module to
614 IPython tree, http://www.jorendorff.com/articles/python/path/.
623 IPython tree, http://www.jorendorff.com/articles/python/path/.
615 You can get path objects conveniently through %sc, and !!, e.g.:
624 You can get path objects conveniently through %sc, and !!, e.g.:
616 sc files=ls
625 sc files=ls
617 for p in files.paths: # or files.p
626 for p in files.paths: # or files.p
618 print p,p.mtime
627 print p,p.mtime
619
628
620 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
629 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
621 now work again without considering the exclusion regexp -
630 now work again without considering the exclusion regexp -
622 hence, things like ',foo my/path' turn to 'foo("my/path")'
631 hence, things like ',foo my/path' turn to 'foo("my/path")'
623 instead of syntax error.
632 instead of syntax error.
624
633
625
634
626 2006-01-14 Ville Vainio <vivainio@gmail.com>
635 2006-01-14 Ville Vainio <vivainio@gmail.com>
627
636
628 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
637 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
629 ipapi decorators for python 2.4 users, options() provides access to rc
638 ipapi decorators for python 2.4 users, options() provides access to rc
630 data.
639 data.
631
640
632 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
641 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
633 as path separators (even on Linux ;-). Space character after
642 as path separators (even on Linux ;-). Space character after
634 backslash (as yielded by tab completer) is still space;
643 backslash (as yielded by tab completer) is still space;
635 "%cd long\ name" works as expected.
644 "%cd long\ name" works as expected.
636
645
637 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
646 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
638 as "chain of command", with priority. API stays the same,
647 as "chain of command", with priority. API stays the same,
639 TryNext exception raised by a hook function signals that
648 TryNext exception raised by a hook function signals that
640 current hook failed and next hook should try handling it, as
649 current hook failed and next hook should try handling it, as
641 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
650 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
642 requested configurable display hook, which is now implemented.
651 requested configurable display hook, which is now implemented.
643
652
644 2006-01-13 Ville Vainio <vivainio@gmail.com>
653 2006-01-13 Ville Vainio <vivainio@gmail.com>
645
654
646 * IPython/platutils*.py: platform specific utility functions,
655 * IPython/platutils*.py: platform specific utility functions,
647 so far only set_term_title is implemented (change terminal
656 so far only set_term_title is implemented (change terminal
648 label in windowing systems). %cd now changes the title to
657 label in windowing systems). %cd now changes the title to
649 current dir.
658 current dir.
650
659
651 * IPython/Release.py: Added myself to "authors" list,
660 * IPython/Release.py: Added myself to "authors" list,
652 had to create new files.
661 had to create new files.
653
662
654 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
663 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
655 shell escape; not a known bug but had potential to be one in the
664 shell escape; not a known bug but had potential to be one in the
656 future.
665 future.
657
666
658 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
667 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
659 extension API for IPython! See the module for usage example. Fix
668 extension API for IPython! See the module for usage example. Fix
660 OInspect for docstring-less magic functions.
669 OInspect for docstring-less magic functions.
661
670
662
671
663 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
672 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
664
673
665 * IPython/iplib.py (raw_input): temporarily deactivate all
674 * IPython/iplib.py (raw_input): temporarily deactivate all
666 attempts at allowing pasting of code with autoindent on. It
675 attempts at allowing pasting of code with autoindent on. It
667 introduced bugs (reported by Prabhu) and I can't seem to find a
676 introduced bugs (reported by Prabhu) and I can't seem to find a
668 robust combination which works in all cases. Will have to revisit
677 robust combination which works in all cases. Will have to revisit
669 later.
678 later.
670
679
671 * IPython/genutils.py: remove isspace() function. We've dropped
680 * IPython/genutils.py: remove isspace() function. We've dropped
672 2.2 compatibility, so it's OK to use the string method.
681 2.2 compatibility, so it's OK to use the string method.
673
682
674 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
683 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
675
684
676 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
685 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
677 matching what NOT to autocall on, to include all python binary
686 matching what NOT to autocall on, to include all python binary
678 operators (including things like 'and', 'or', 'is' and 'in').
687 operators (including things like 'and', 'or', 'is' and 'in').
679 Prompted by a bug report on 'foo & bar', but I realized we had
688 Prompted by a bug report on 'foo & bar', but I realized we had
680 many more potential bug cases with other operators. The regexp is
689 many more potential bug cases with other operators. The regexp is
681 self.re_exclude_auto, it's fairly commented.
690 self.re_exclude_auto, it's fairly commented.
682
691
683 2006-01-12 Ville Vainio <vivainio@gmail.com>
692 2006-01-12 Ville Vainio <vivainio@gmail.com>
684
693
685 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
694 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
686 Prettified and hardened string/backslash quoting with ipsystem(),
695 Prettified and hardened string/backslash quoting with ipsystem(),
687 ipalias() and ipmagic(). Now even \ characters are passed to
696 ipalias() and ipmagic(). Now even \ characters are passed to
688 %magics, !shell escapes and aliases exactly as they are in the
697 %magics, !shell escapes and aliases exactly as they are in the
689 ipython command line. Should improve backslash experience,
698 ipython command line. Should improve backslash experience,
690 particularly in Windows (path delimiter for some commands that
699 particularly in Windows (path delimiter for some commands that
691 won't understand '/'), but Unix benefits as well (regexps). %cd
700 won't understand '/'), but Unix benefits as well (regexps). %cd
692 magic still doesn't support backslash path delimiters, though. Also
701 magic still doesn't support backslash path delimiters, though. Also
693 deleted all pretense of supporting multiline command strings in
702 deleted all pretense of supporting multiline command strings in
694 !system or %magic commands. Thanks to Jerry McRae for suggestions.
703 !system or %magic commands. Thanks to Jerry McRae for suggestions.
695
704
696 * doc/build_doc_instructions.txt added. Documentation on how to
705 * doc/build_doc_instructions.txt added. Documentation on how to
697 use doc/update_manual.py, added yesterday. Both files contributed
706 use doc/update_manual.py, added yesterday. Both files contributed
698 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
707 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
699 doc/*.sh for deprecation at a later date.
708 doc/*.sh for deprecation at a later date.
700
709
701 * /ipython.py Added ipython.py to root directory for
710 * /ipython.py Added ipython.py to root directory for
702 zero-installation (tar xzvf ipython.tgz; cd ipython; python
711 zero-installation (tar xzvf ipython.tgz; cd ipython; python
703 ipython.py) and development convenience (no need to kee doing
712 ipython.py) and development convenience (no need to kee doing
704 "setup.py install" between changes).
713 "setup.py install" between changes).
705
714
706 * Made ! and !! shell escapes work (again) in multiline expressions:
715 * Made ! and !! shell escapes work (again) in multiline expressions:
707 if 1:
716 if 1:
708 !ls
717 !ls
709 !!ls
718 !!ls
710
719
711 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
720 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
712
721
713 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
722 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
714 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
723 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
715 module in case-insensitive installation. Was causing crashes
724 module in case-insensitive installation. Was causing crashes
716 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
725 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
717
726
718 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
727 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
719 <marienz-AT-gentoo.org>, closes
728 <marienz-AT-gentoo.org>, closes
720 http://www.scipy.net/roundup/ipython/issue51.
729 http://www.scipy.net/roundup/ipython/issue51.
721
730
722 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
731 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
723
732
724 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
733 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
725 problem of excessive CPU usage under *nix and keyboard lag under
734 problem of excessive CPU usage under *nix and keyboard lag under
726 win32.
735 win32.
727
736
728 2006-01-10 *** Released version 0.7.0
737 2006-01-10 *** Released version 0.7.0
729
738
730 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
739 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
731
740
732 * IPython/Release.py (revision): tag version number to 0.7.0,
741 * IPython/Release.py (revision): tag version number to 0.7.0,
733 ready for release.
742 ready for release.
734
743
735 * IPython/Magic.py (magic_edit): Add print statement to %edit so
744 * IPython/Magic.py (magic_edit): Add print statement to %edit so
736 it informs the user of the name of the temp. file used. This can
745 it informs the user of the name of the temp. file used. This can
737 help if you decide later to reuse that same file, so you know
746 help if you decide later to reuse that same file, so you know
738 where to copy the info from.
747 where to copy the info from.
739
748
740 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
749 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
741
750
742 * setup_bdist_egg.py: little script to build an egg. Added
751 * setup_bdist_egg.py: little script to build an egg. Added
743 support in the release tools as well.
752 support in the release tools as well.
744
753
745 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
754 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
746
755
747 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
756 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
748 version selection (new -wxversion command line and ipythonrc
757 version selection (new -wxversion command line and ipythonrc
749 parameter). Patch contributed by Arnd Baecker
758 parameter). Patch contributed by Arnd Baecker
750 <arnd.baecker-AT-web.de>.
759 <arnd.baecker-AT-web.de>.
751
760
752 * IPython/iplib.py (embed_mainloop): fix tab-completion in
761 * IPython/iplib.py (embed_mainloop): fix tab-completion in
753 embedded instances, for variables defined at the interactive
762 embedded instances, for variables defined at the interactive
754 prompt of the embedded ipython. Reported by Arnd.
763 prompt of the embedded ipython. Reported by Arnd.
755
764
756 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
765 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
757 it can be used as a (stateful) toggle, or with a direct parameter.
766 it can be used as a (stateful) toggle, or with a direct parameter.
758
767
759 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
768 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
760 could be triggered in certain cases and cause the traceback
769 could be triggered in certain cases and cause the traceback
761 printer not to work.
770 printer not to work.
762
771
763 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
772 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
764
773
765 * IPython/iplib.py (_should_recompile): Small fix, closes
774 * IPython/iplib.py (_should_recompile): Small fix, closes
766 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
775 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
767
776
768 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
777 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
769
778
770 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
779 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
771 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
780 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
772 Moad for help with tracking it down.
781 Moad for help with tracking it down.
773
782
774 * IPython/iplib.py (handle_auto): fix autocall handling for
783 * IPython/iplib.py (handle_auto): fix autocall handling for
775 objects which support BOTH __getitem__ and __call__ (so that f [x]
784 objects which support BOTH __getitem__ and __call__ (so that f [x]
776 is left alone, instead of becoming f([x]) automatically).
785 is left alone, instead of becoming f([x]) automatically).
777
786
778 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
787 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
779 Ville's patch.
788 Ville's patch.
780
789
781 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
790 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
782
791
783 * IPython/iplib.py (handle_auto): changed autocall semantics to
792 * IPython/iplib.py (handle_auto): changed autocall semantics to
784 include 'smart' mode, where the autocall transformation is NOT
793 include 'smart' mode, where the autocall transformation is NOT
785 applied if there are no arguments on the line. This allows you to
794 applied if there are no arguments on the line. This allows you to
786 just type 'foo' if foo is a callable to see its internal form,
795 just type 'foo' if foo is a callable to see its internal form,
787 instead of having it called with no arguments (typically a
796 instead of having it called with no arguments (typically a
788 mistake). The old 'full' autocall still exists: for that, you
797 mistake). The old 'full' autocall still exists: for that, you
789 need to set the 'autocall' parameter to 2 in your ipythonrc file.
798 need to set the 'autocall' parameter to 2 in your ipythonrc file.
790
799
791 * IPython/completer.py (Completer.attr_matches): add
800 * IPython/completer.py (Completer.attr_matches): add
792 tab-completion support for Enthoughts' traits. After a report by
801 tab-completion support for Enthoughts' traits. After a report by
793 Arnd and a patch by Prabhu.
802 Arnd and a patch by Prabhu.
794
803
795 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
804 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
796
805
797 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
806 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
798 Schmolck's patch to fix inspect.getinnerframes().
807 Schmolck's patch to fix inspect.getinnerframes().
799
808
800 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
809 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
801 for embedded instances, regarding handling of namespaces and items
810 for embedded instances, regarding handling of namespaces and items
802 added to the __builtin__ one. Multiple embedded instances and
811 added to the __builtin__ one. Multiple embedded instances and
803 recursive embeddings should work better now (though I'm not sure
812 recursive embeddings should work better now (though I'm not sure
804 I've got all the corner cases fixed, that code is a bit of a brain
813 I've got all the corner cases fixed, that code is a bit of a brain
805 twister).
814 twister).
806
815
807 * IPython/Magic.py (magic_edit): added support to edit in-memory
816 * IPython/Magic.py (magic_edit): added support to edit in-memory
808 macros (automatically creates the necessary temp files). %edit
817 macros (automatically creates the necessary temp files). %edit
809 also doesn't return the file contents anymore, it's just noise.
818 also doesn't return the file contents anymore, it's just noise.
810
819
811 * IPython/completer.py (Completer.attr_matches): revert change to
820 * IPython/completer.py (Completer.attr_matches): revert change to
812 complete only on attributes listed in __all__. I realized it
821 complete only on attributes listed in __all__. I realized it
813 cripples the tab-completion system as a tool for exploring the
822 cripples the tab-completion system as a tool for exploring the
814 internals of unknown libraries (it renders any non-__all__
823 internals of unknown libraries (it renders any non-__all__
815 attribute off-limits). I got bit by this when trying to see
824 attribute off-limits). I got bit by this when trying to see
816 something inside the dis module.
825 something inside the dis module.
817
826
818 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
827 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
819
828
820 * IPython/iplib.py (InteractiveShell.__init__): add .meta
829 * IPython/iplib.py (InteractiveShell.__init__): add .meta
821 namespace for users and extension writers to hold data in. This
830 namespace for users and extension writers to hold data in. This
822 follows the discussion in
831 follows the discussion in
823 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
832 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
824
833
825 * IPython/completer.py (IPCompleter.complete): small patch to help
834 * IPython/completer.py (IPCompleter.complete): small patch to help
826 tab-completion under Emacs, after a suggestion by John Barnard
835 tab-completion under Emacs, after a suggestion by John Barnard
827 <barnarj-AT-ccf.org>.
836 <barnarj-AT-ccf.org>.
828
837
829 * IPython/Magic.py (Magic.extract_input_slices): added support for
838 * IPython/Magic.py (Magic.extract_input_slices): added support for
830 the slice notation in magics to use N-M to represent numbers N...M
839 the slice notation in magics to use N-M to represent numbers N...M
831 (closed endpoints). This is used by %macro and %save.
840 (closed endpoints). This is used by %macro and %save.
832
841
833 * IPython/completer.py (Completer.attr_matches): for modules which
842 * IPython/completer.py (Completer.attr_matches): for modules which
834 define __all__, complete only on those. After a patch by Jeffrey
843 define __all__, complete only on those. After a patch by Jeffrey
835 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
844 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
836 speed up this routine.
845 speed up this routine.
837
846
838 * IPython/Logger.py (Logger.log): fix a history handling bug. I
847 * IPython/Logger.py (Logger.log): fix a history handling bug. I
839 don't know if this is the end of it, but the behavior now is
848 don't know if this is the end of it, but the behavior now is
840 certainly much more correct. Note that coupled with macros,
849 certainly much more correct. Note that coupled with macros,
841 slightly surprising (at first) behavior may occur: a macro will in
850 slightly surprising (at first) behavior may occur: a macro will in
842 general expand to multiple lines of input, so upon exiting, the
851 general expand to multiple lines of input, so upon exiting, the
843 in/out counters will both be bumped by the corresponding amount
852 in/out counters will both be bumped by the corresponding amount
844 (as if the macro's contents had been typed interactively). Typing
853 (as if the macro's contents had been typed interactively). Typing
845 %hist will reveal the intermediate (silently processed) lines.
854 %hist will reveal the intermediate (silently processed) lines.
846
855
847 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
856 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
848 pickle to fail (%run was overwriting __main__ and not restoring
857 pickle to fail (%run was overwriting __main__ and not restoring
849 it, but pickle relies on __main__ to operate).
858 it, but pickle relies on __main__ to operate).
850
859
851 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
860 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
852 using properties, but forgot to make the main InteractiveShell
861 using properties, but forgot to make the main InteractiveShell
853 class a new-style class. Properties fail silently, and
862 class a new-style class. Properties fail silently, and
854 misteriously, with old-style class (getters work, but
863 misteriously, with old-style class (getters work, but
855 setters don't do anything).
864 setters don't do anything).
856
865
857 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
866 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
858
867
859 * IPython/Magic.py (magic_history): fix history reporting bug (I
868 * IPython/Magic.py (magic_history): fix history reporting bug (I
860 know some nasties are still there, I just can't seem to find a
869 know some nasties are still there, I just can't seem to find a
861 reproducible test case to track them down; the input history is
870 reproducible test case to track them down; the input history is
862 falling out of sync...)
871 falling out of sync...)
863
872
864 * IPython/iplib.py (handle_shell_escape): fix bug where both
873 * IPython/iplib.py (handle_shell_escape): fix bug where both
865 aliases and system accesses where broken for indented code (such
874 aliases and system accesses where broken for indented code (such
866 as loops).
875 as loops).
867
876
868 * IPython/genutils.py (shell): fix small but critical bug for
877 * IPython/genutils.py (shell): fix small but critical bug for
869 win32 system access.
878 win32 system access.
870
879
871 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
880 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
872
881
873 * IPython/iplib.py (showtraceback): remove use of the
882 * IPython/iplib.py (showtraceback): remove use of the
874 sys.last_{type/value/traceback} structures, which are non
883 sys.last_{type/value/traceback} structures, which are non
875 thread-safe.
884 thread-safe.
876 (_prefilter): change control flow to ensure that we NEVER
885 (_prefilter): change control flow to ensure that we NEVER
877 introspect objects when autocall is off. This will guarantee that
886 introspect objects when autocall is off. This will guarantee that
878 having an input line of the form 'x.y', where access to attribute
887 having an input line of the form 'x.y', where access to attribute
879 'y' has side effects, doesn't trigger the side effect TWICE. It
888 'y' has side effects, doesn't trigger the side effect TWICE. It
880 is important to note that, with autocall on, these side effects
889 is important to note that, with autocall on, these side effects
881 can still happen.
890 can still happen.
882 (ipsystem): new builtin, to complete the ip{magic/alias/system}
891 (ipsystem): new builtin, to complete the ip{magic/alias/system}
883 trio. IPython offers these three kinds of special calls which are
892 trio. IPython offers these three kinds of special calls which are
884 not python code, and it's a good thing to have their call method
893 not python code, and it's a good thing to have their call method
885 be accessible as pure python functions (not just special syntax at
894 be accessible as pure python functions (not just special syntax at
886 the command line). It gives us a better internal implementation
895 the command line). It gives us a better internal implementation
887 structure, as well as exposing these for user scripting more
896 structure, as well as exposing these for user scripting more
888 cleanly.
897 cleanly.
889
898
890 * IPython/macro.py (Macro.__init__): moved macros to a standalone
899 * IPython/macro.py (Macro.__init__): moved macros to a standalone
891 file. Now that they'll be more likely to be used with the
900 file. Now that they'll be more likely to be used with the
892 persistance system (%store), I want to make sure their module path
901 persistance system (%store), I want to make sure their module path
893 doesn't change in the future, so that we don't break things for
902 doesn't change in the future, so that we don't break things for
894 users' persisted data.
903 users' persisted data.
895
904
896 * IPython/iplib.py (autoindent_update): move indentation
905 * IPython/iplib.py (autoindent_update): move indentation
897 management into the _text_ processing loop, not the keyboard
906 management into the _text_ processing loop, not the keyboard
898 interactive one. This is necessary to correctly process non-typed
907 interactive one. This is necessary to correctly process non-typed
899 multiline input (such as macros).
908 multiline input (such as macros).
900
909
901 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
910 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
902 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
911 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
903 which was producing problems in the resulting manual.
912 which was producing problems in the resulting manual.
904 (magic_whos): improve reporting of instances (show their class,
913 (magic_whos): improve reporting of instances (show their class,
905 instead of simply printing 'instance' which isn't terribly
914 instead of simply printing 'instance' which isn't terribly
906 informative).
915 informative).
907
916
908 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
917 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
909 (minor mods) to support network shares under win32.
918 (minor mods) to support network shares under win32.
910
919
911 * IPython/winconsole.py (get_console_size): add new winconsole
920 * IPython/winconsole.py (get_console_size): add new winconsole
912 module and fixes to page_dumb() to improve its behavior under
921 module and fixes to page_dumb() to improve its behavior under
913 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
922 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
914
923
915 * IPython/Magic.py (Macro): simplified Macro class to just
924 * IPython/Magic.py (Macro): simplified Macro class to just
916 subclass list. We've had only 2.2 compatibility for a very long
925 subclass list. We've had only 2.2 compatibility for a very long
917 time, yet I was still avoiding subclassing the builtin types. No
926 time, yet I was still avoiding subclassing the builtin types. No
918 more (I'm also starting to use properties, though I won't shift to
927 more (I'm also starting to use properties, though I won't shift to
919 2.3-specific features quite yet).
928 2.3-specific features quite yet).
920 (magic_store): added Ville's patch for lightweight variable
929 (magic_store): added Ville's patch for lightweight variable
921 persistence, after a request on the user list by Matt Wilkie
930 persistence, after a request on the user list by Matt Wilkie
922 <maphew-AT-gmail.com>. The new %store magic's docstring has full
931 <maphew-AT-gmail.com>. The new %store magic's docstring has full
923 details.
932 details.
924
933
925 * IPython/iplib.py (InteractiveShell.post_config_initialization):
934 * IPython/iplib.py (InteractiveShell.post_config_initialization):
926 changed the default logfile name from 'ipython.log' to
935 changed the default logfile name from 'ipython.log' to
927 'ipython_log.py'. These logs are real python files, and now that
936 'ipython_log.py'. These logs are real python files, and now that
928 we have much better multiline support, people are more likely to
937 we have much better multiline support, people are more likely to
929 want to use them as such. Might as well name them correctly.
938 want to use them as such. Might as well name them correctly.
930
939
931 * IPython/Magic.py: substantial cleanup. While we can't stop
940 * IPython/Magic.py: substantial cleanup. While we can't stop
932 using magics as mixins, due to the existing customizations 'out
941 using magics as mixins, due to the existing customizations 'out
933 there' which rely on the mixin naming conventions, at least I
942 there' which rely on the mixin naming conventions, at least I
934 cleaned out all cross-class name usage. So once we are OK with
943 cleaned out all cross-class name usage. So once we are OK with
935 breaking compatibility, the two systems can be separated.
944 breaking compatibility, the two systems can be separated.
936
945
937 * IPython/Logger.py: major cleanup. This one is NOT a mixin
946 * IPython/Logger.py: major cleanup. This one is NOT a mixin
938 anymore, and the class is a fair bit less hideous as well. New
947 anymore, and the class is a fair bit less hideous as well. New
939 features were also introduced: timestamping of input, and logging
948 features were also introduced: timestamping of input, and logging
940 of output results. These are user-visible with the -t and -o
949 of output results. These are user-visible with the -t and -o
941 options to %logstart. Closes
950 options to %logstart. Closes
942 http://www.scipy.net/roundup/ipython/issue11 and a request by
951 http://www.scipy.net/roundup/ipython/issue11 and a request by
943 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
952 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
944
953
945 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
954 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
946
955
947 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
956 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
948 better hadnle backslashes in paths. See the thread 'More Windows
957 better hadnle backslashes in paths. See the thread 'More Windows
949 questions part 2 - \/ characters revisited' on the iypthon user
958 questions part 2 - \/ characters revisited' on the iypthon user
950 list:
959 list:
951 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
960 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
952
961
953 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
962 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
954
963
955 (InteractiveShell.__init__): change threaded shells to not use the
964 (InteractiveShell.__init__): change threaded shells to not use the
956 ipython crash handler. This was causing more problems than not,
965 ipython crash handler. This was causing more problems than not,
957 as exceptions in the main thread (GUI code, typically) would
966 as exceptions in the main thread (GUI code, typically) would
958 always show up as a 'crash', when they really weren't.
967 always show up as a 'crash', when they really weren't.
959
968
960 The colors and exception mode commands (%colors/%xmode) have been
969 The colors and exception mode commands (%colors/%xmode) have been
961 synchronized to also take this into account, so users can get
970 synchronized to also take this into account, so users can get
962 verbose exceptions for their threaded code as well. I also added
971 verbose exceptions for their threaded code as well. I also added
963 support for activating pdb inside this exception handler as well,
972 support for activating pdb inside this exception handler as well,
964 so now GUI authors can use IPython's enhanced pdb at runtime.
973 so now GUI authors can use IPython's enhanced pdb at runtime.
965
974
966 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
975 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
967 true by default, and add it to the shipped ipythonrc file. Since
976 true by default, and add it to the shipped ipythonrc file. Since
968 this asks the user before proceeding, I think it's OK to make it
977 this asks the user before proceeding, I think it's OK to make it
969 true by default.
978 true by default.
970
979
971 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
980 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
972 of the previous special-casing of input in the eval loop. I think
981 of the previous special-casing of input in the eval loop. I think
973 this is cleaner, as they really are commands and shouldn't have
982 this is cleaner, as they really are commands and shouldn't have
974 a special role in the middle of the core code.
983 a special role in the middle of the core code.
975
984
976 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
985 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
977
986
978 * IPython/iplib.py (edit_syntax_error): added support for
987 * IPython/iplib.py (edit_syntax_error): added support for
979 automatically reopening the editor if the file had a syntax error
988 automatically reopening the editor if the file had a syntax error
980 in it. Thanks to scottt who provided the patch at:
989 in it. Thanks to scottt who provided the patch at:
981 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
990 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
982 version committed).
991 version committed).
983
992
984 * IPython/iplib.py (handle_normal): add suport for multi-line
993 * IPython/iplib.py (handle_normal): add suport for multi-line
985 input with emtpy lines. This fixes
994 input with emtpy lines. This fixes
986 http://www.scipy.net/roundup/ipython/issue43 and a similar
995 http://www.scipy.net/roundup/ipython/issue43 and a similar
987 discussion on the user list.
996 discussion on the user list.
988
997
989 WARNING: a behavior change is necessarily introduced to support
998 WARNING: a behavior change is necessarily introduced to support
990 blank lines: now a single blank line with whitespace does NOT
999 blank lines: now a single blank line with whitespace does NOT
991 break the input loop, which means that when autoindent is on, by
1000 break the input loop, which means that when autoindent is on, by
992 default hitting return on the next (indented) line does NOT exit.
1001 default hitting return on the next (indented) line does NOT exit.
993
1002
994 Instead, to exit a multiline input you can either have:
1003 Instead, to exit a multiline input you can either have:
995
1004
996 - TWO whitespace lines (just hit return again), or
1005 - TWO whitespace lines (just hit return again), or
997 - a single whitespace line of a different length than provided
1006 - a single whitespace line of a different length than provided
998 by the autoindent (add or remove a space).
1007 by the autoindent (add or remove a space).
999
1008
1000 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1009 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1001 module to better organize all readline-related functionality.
1010 module to better organize all readline-related functionality.
1002 I've deleted FlexCompleter and put all completion clases here.
1011 I've deleted FlexCompleter and put all completion clases here.
1003
1012
1004 * IPython/iplib.py (raw_input): improve indentation management.
1013 * IPython/iplib.py (raw_input): improve indentation management.
1005 It is now possible to paste indented code with autoindent on, and
1014 It is now possible to paste indented code with autoindent on, and
1006 the code is interpreted correctly (though it still looks bad on
1015 the code is interpreted correctly (though it still looks bad on
1007 screen, due to the line-oriented nature of ipython).
1016 screen, due to the line-oriented nature of ipython).
1008 (MagicCompleter.complete): change behavior so that a TAB key on an
1017 (MagicCompleter.complete): change behavior so that a TAB key on an
1009 otherwise empty line actually inserts a tab, instead of completing
1018 otherwise empty line actually inserts a tab, instead of completing
1010 on the entire global namespace. This makes it easier to use the
1019 on the entire global namespace. This makes it easier to use the
1011 TAB key for indentation. After a request by Hans Meine
1020 TAB key for indentation. After a request by Hans Meine
1012 <hans_meine-AT-gmx.net>
1021 <hans_meine-AT-gmx.net>
1013 (_prefilter): add support so that typing plain 'exit' or 'quit'
1022 (_prefilter): add support so that typing plain 'exit' or 'quit'
1014 does a sensible thing. Originally I tried to deviate as little as
1023 does a sensible thing. Originally I tried to deviate as little as
1015 possible from the default python behavior, but even that one may
1024 possible from the default python behavior, but even that one may
1016 change in this direction (thread on python-dev to that effect).
1025 change in this direction (thread on python-dev to that effect).
1017 Regardless, ipython should do the right thing even if CPython's
1026 Regardless, ipython should do the right thing even if CPython's
1018 '>>>' prompt doesn't.
1027 '>>>' prompt doesn't.
1019 (InteractiveShell): removed subclassing code.InteractiveConsole
1028 (InteractiveShell): removed subclassing code.InteractiveConsole
1020 class. By now we'd overridden just about all of its methods: I've
1029 class. By now we'd overridden just about all of its methods: I've
1021 copied the remaining two over, and now ipython is a standalone
1030 copied the remaining two over, and now ipython is a standalone
1022 class. This will provide a clearer picture for the chainsaw
1031 class. This will provide a clearer picture for the chainsaw
1023 branch refactoring.
1032 branch refactoring.
1024
1033
1025 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1034 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1026
1035
1027 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1036 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1028 failures for objects which break when dir() is called on them.
1037 failures for objects which break when dir() is called on them.
1029
1038
1030 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1039 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1031 distinct local and global namespaces in the completer API. This
1040 distinct local and global namespaces in the completer API. This
1032 change allows us top properly handle completion with distinct
1041 change allows us top properly handle completion with distinct
1033 scopes, including in embedded instances (this had never really
1042 scopes, including in embedded instances (this had never really
1034 worked correctly).
1043 worked correctly).
1035
1044
1036 Note: this introduces a change in the constructor for
1045 Note: this introduces a change in the constructor for
1037 MagicCompleter, as a new global_namespace parameter is now the
1046 MagicCompleter, as a new global_namespace parameter is now the
1038 second argument (the others were bumped one position).
1047 second argument (the others were bumped one position).
1039
1048
1040 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1049 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1041
1050
1042 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1051 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1043 embedded instances (which can be done now thanks to Vivian's
1052 embedded instances (which can be done now thanks to Vivian's
1044 frame-handling fixes for pdb).
1053 frame-handling fixes for pdb).
1045 (InteractiveShell.__init__): Fix namespace handling problem in
1054 (InteractiveShell.__init__): Fix namespace handling problem in
1046 embedded instances. We were overwriting __main__ unconditionally,
1055 embedded instances. We were overwriting __main__ unconditionally,
1047 and this should only be done for 'full' (non-embedded) IPython;
1056 and this should only be done for 'full' (non-embedded) IPython;
1048 embedded instances must respect the caller's __main__. Thanks to
1057 embedded instances must respect the caller's __main__. Thanks to
1049 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1058 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1050
1059
1051 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1060 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1052
1061
1053 * setup.py: added download_url to setup(). This registers the
1062 * setup.py: added download_url to setup(). This registers the
1054 download address at PyPI, which is not only useful to humans
1063 download address at PyPI, which is not only useful to humans
1055 browsing the site, but is also picked up by setuptools (the Eggs
1064 browsing the site, but is also picked up by setuptools (the Eggs
1056 machinery). Thanks to Ville and R. Kern for the info/discussion
1065 machinery). Thanks to Ville and R. Kern for the info/discussion
1057 on this.
1066 on this.
1058
1067
1059 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1068 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1060
1069
1061 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1070 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1062 This brings a lot of nice functionality to the pdb mode, which now
1071 This brings a lot of nice functionality to the pdb mode, which now
1063 has tab-completion, syntax highlighting, and better stack handling
1072 has tab-completion, syntax highlighting, and better stack handling
1064 than before. Many thanks to Vivian De Smedt
1073 than before. Many thanks to Vivian De Smedt
1065 <vivian-AT-vdesmedt.com> for the original patches.
1074 <vivian-AT-vdesmedt.com> for the original patches.
1066
1075
1067 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1076 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1068
1077
1069 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1078 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1070 sequence to consistently accept the banner argument. The
1079 sequence to consistently accept the banner argument. The
1071 inconsistency was tripping SAGE, thanks to Gary Zablackis
1080 inconsistency was tripping SAGE, thanks to Gary Zablackis
1072 <gzabl-AT-yahoo.com> for the report.
1081 <gzabl-AT-yahoo.com> for the report.
1073
1082
1074 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1083 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1075
1084
1076 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1085 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1077 Fix bug where a naked 'alias' call in the ipythonrc file would
1086 Fix bug where a naked 'alias' call in the ipythonrc file would
1078 cause a crash. Bug reported by Jorgen Stenarson.
1087 cause a crash. Bug reported by Jorgen Stenarson.
1079
1088
1080 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1089 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1081
1090
1082 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1091 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1083 startup time.
1092 startup time.
1084
1093
1085 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1094 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1086 instances had introduced a bug with globals in normal code. Now
1095 instances had introduced a bug with globals in normal code. Now
1087 it's working in all cases.
1096 it's working in all cases.
1088
1097
1089 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1098 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1090 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1099 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1091 has been introduced to set the default case sensitivity of the
1100 has been introduced to set the default case sensitivity of the
1092 searches. Users can still select either mode at runtime on a
1101 searches. Users can still select either mode at runtime on a
1093 per-search basis.
1102 per-search basis.
1094
1103
1095 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1104 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1096
1105
1097 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1106 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1098 attributes in wildcard searches for subclasses. Modified version
1107 attributes in wildcard searches for subclasses. Modified version
1099 of a patch by Jorgen.
1108 of a patch by Jorgen.
1100
1109
1101 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1110 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1102
1111
1103 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1112 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1104 embedded instances. I added a user_global_ns attribute to the
1113 embedded instances. I added a user_global_ns attribute to the
1105 InteractiveShell class to handle this.
1114 InteractiveShell class to handle this.
1106
1115
1107 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1116 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1108
1117
1109 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1118 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1110 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1119 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1111 (reported under win32, but may happen also in other platforms).
1120 (reported under win32, but may happen also in other platforms).
1112 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1121 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1113
1122
1114 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1123 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1115
1124
1116 * IPython/Magic.py (magic_psearch): new support for wildcard
1125 * IPython/Magic.py (magic_psearch): new support for wildcard
1117 patterns. Now, typing ?a*b will list all names which begin with a
1126 patterns. Now, typing ?a*b will list all names which begin with a
1118 and end in b, for example. The %psearch magic has full
1127 and end in b, for example. The %psearch magic has full
1119 docstrings. Many thanks to JΓΆrgen Stenarson
1128 docstrings. Many thanks to JΓΆrgen Stenarson
1120 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1129 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1121 implementing this functionality.
1130 implementing this functionality.
1122
1131
1123 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1132 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1124
1133
1125 * Manual: fixed long-standing annoyance of double-dashes (as in
1134 * Manual: fixed long-standing annoyance of double-dashes (as in
1126 --prefix=~, for example) being stripped in the HTML version. This
1135 --prefix=~, for example) being stripped in the HTML version. This
1127 is a latex2html bug, but a workaround was provided. Many thanks
1136 is a latex2html bug, but a workaround was provided. Many thanks
1128 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1137 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1129 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1138 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1130 rolling. This seemingly small issue had tripped a number of users
1139 rolling. This seemingly small issue had tripped a number of users
1131 when first installing, so I'm glad to see it gone.
1140 when first installing, so I'm glad to see it gone.
1132
1141
1133 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1142 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1134
1143
1135 * IPython/Extensions/numeric_formats.py: fix missing import,
1144 * IPython/Extensions/numeric_formats.py: fix missing import,
1136 reported by Stephen Walton.
1145 reported by Stephen Walton.
1137
1146
1138 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1147 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1139
1148
1140 * IPython/demo.py: finish demo module, fully documented now.
1149 * IPython/demo.py: finish demo module, fully documented now.
1141
1150
1142 * IPython/genutils.py (file_read): simple little utility to read a
1151 * IPython/genutils.py (file_read): simple little utility to read a
1143 file and ensure it's closed afterwards.
1152 file and ensure it's closed afterwards.
1144
1153
1145 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1154 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1146
1155
1147 * IPython/demo.py (Demo.__init__): added support for individually
1156 * IPython/demo.py (Demo.__init__): added support for individually
1148 tagging blocks for automatic execution.
1157 tagging blocks for automatic execution.
1149
1158
1150 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1159 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1151 syntax-highlighted python sources, requested by John.
1160 syntax-highlighted python sources, requested by John.
1152
1161
1153 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1162 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1154
1163
1155 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1164 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1156 finishing.
1165 finishing.
1157
1166
1158 * IPython/genutils.py (shlex_split): moved from Magic to here,
1167 * IPython/genutils.py (shlex_split): moved from Magic to here,
1159 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1168 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1160
1169
1161 * IPython/demo.py (Demo.__init__): added support for silent
1170 * IPython/demo.py (Demo.__init__): added support for silent
1162 blocks, improved marks as regexps, docstrings written.
1171 blocks, improved marks as regexps, docstrings written.
1163 (Demo.__init__): better docstring, added support for sys.argv.
1172 (Demo.__init__): better docstring, added support for sys.argv.
1164
1173
1165 * IPython/genutils.py (marquee): little utility used by the demo
1174 * IPython/genutils.py (marquee): little utility used by the demo
1166 code, handy in general.
1175 code, handy in general.
1167
1176
1168 * IPython/demo.py (Demo.__init__): new class for interactive
1177 * IPython/demo.py (Demo.__init__): new class for interactive
1169 demos. Not documented yet, I just wrote it in a hurry for
1178 demos. Not documented yet, I just wrote it in a hurry for
1170 scipy'05. Will docstring later.
1179 scipy'05. Will docstring later.
1171
1180
1172 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1181 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1173
1182
1174 * IPython/Shell.py (sigint_handler): Drastic simplification which
1183 * IPython/Shell.py (sigint_handler): Drastic simplification which
1175 also seems to make Ctrl-C work correctly across threads! This is
1184 also seems to make Ctrl-C work correctly across threads! This is
1176 so simple, that I can't beleive I'd missed it before. Needs more
1185 so simple, that I can't beleive I'd missed it before. Needs more
1177 testing, though.
1186 testing, though.
1178 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1187 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1179 like this before...
1188 like this before...
1180
1189
1181 * IPython/genutils.py (get_home_dir): add protection against
1190 * IPython/genutils.py (get_home_dir): add protection against
1182 non-dirs in win32 registry.
1191 non-dirs in win32 registry.
1183
1192
1184 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1193 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1185 bug where dict was mutated while iterating (pysh crash).
1194 bug where dict was mutated while iterating (pysh crash).
1186
1195
1187 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1196 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1188
1197
1189 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1198 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1190 spurious newlines added by this routine. After a report by
1199 spurious newlines added by this routine. After a report by
1191 F. Mantegazza.
1200 F. Mantegazza.
1192
1201
1193 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1202 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1194
1203
1195 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1204 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1196 calls. These were a leftover from the GTK 1.x days, and can cause
1205 calls. These were a leftover from the GTK 1.x days, and can cause
1197 problems in certain cases (after a report by John Hunter).
1206 problems in certain cases (after a report by John Hunter).
1198
1207
1199 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1208 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1200 os.getcwd() fails at init time. Thanks to patch from David Remahl
1209 os.getcwd() fails at init time. Thanks to patch from David Remahl
1201 <chmod007-AT-mac.com>.
1210 <chmod007-AT-mac.com>.
1202 (InteractiveShell.__init__): prevent certain special magics from
1211 (InteractiveShell.__init__): prevent certain special magics from
1203 being shadowed by aliases. Closes
1212 being shadowed by aliases. Closes
1204 http://www.scipy.net/roundup/ipython/issue41.
1213 http://www.scipy.net/roundup/ipython/issue41.
1205
1214
1206 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1215 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1207
1216
1208 * IPython/iplib.py (InteractiveShell.complete): Added new
1217 * IPython/iplib.py (InteractiveShell.complete): Added new
1209 top-level completion method to expose the completion mechanism
1218 top-level completion method to expose the completion mechanism
1210 beyond readline-based environments.
1219 beyond readline-based environments.
1211
1220
1212 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1221 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1213
1222
1214 * tools/ipsvnc (svnversion): fix svnversion capture.
1223 * tools/ipsvnc (svnversion): fix svnversion capture.
1215
1224
1216 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1225 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1217 attribute to self, which was missing. Before, it was set by a
1226 attribute to self, which was missing. Before, it was set by a
1218 routine which in certain cases wasn't being called, so the
1227 routine which in certain cases wasn't being called, so the
1219 instance could end up missing the attribute. This caused a crash.
1228 instance could end up missing the attribute. This caused a crash.
1220 Closes http://www.scipy.net/roundup/ipython/issue40.
1229 Closes http://www.scipy.net/roundup/ipython/issue40.
1221
1230
1222 2005-08-16 Fernando Perez <fperez@colorado.edu>
1231 2005-08-16 Fernando Perez <fperez@colorado.edu>
1223
1232
1224 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1233 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1225 contains non-string attribute. Closes
1234 contains non-string attribute. Closes
1226 http://www.scipy.net/roundup/ipython/issue38.
1235 http://www.scipy.net/roundup/ipython/issue38.
1227
1236
1228 2005-08-14 Fernando Perez <fperez@colorado.edu>
1237 2005-08-14 Fernando Perez <fperez@colorado.edu>
1229
1238
1230 * tools/ipsvnc: Minor improvements, to add changeset info.
1239 * tools/ipsvnc: Minor improvements, to add changeset info.
1231
1240
1232 2005-08-12 Fernando Perez <fperez@colorado.edu>
1241 2005-08-12 Fernando Perez <fperez@colorado.edu>
1233
1242
1234 * IPython/iplib.py (runsource): remove self.code_to_run_src
1243 * IPython/iplib.py (runsource): remove self.code_to_run_src
1235 attribute. I realized this is nothing more than
1244 attribute. I realized this is nothing more than
1236 '\n'.join(self.buffer), and having the same data in two different
1245 '\n'.join(self.buffer), and having the same data in two different
1237 places is just asking for synchronization bugs. This may impact
1246 places is just asking for synchronization bugs. This may impact
1238 people who have custom exception handlers, so I need to warn
1247 people who have custom exception handlers, so I need to warn
1239 ipython-dev about it (F. Mantegazza may use them).
1248 ipython-dev about it (F. Mantegazza may use them).
1240
1249
1241 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1250 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1242
1251
1243 * IPython/genutils.py: fix 2.2 compatibility (generators)
1252 * IPython/genutils.py: fix 2.2 compatibility (generators)
1244
1253
1245 2005-07-18 Fernando Perez <fperez@colorado.edu>
1254 2005-07-18 Fernando Perez <fperez@colorado.edu>
1246
1255
1247 * IPython/genutils.py (get_home_dir): fix to help users with
1256 * IPython/genutils.py (get_home_dir): fix to help users with
1248 invalid $HOME under win32.
1257 invalid $HOME under win32.
1249
1258
1250 2005-07-17 Fernando Perez <fperez@colorado.edu>
1259 2005-07-17 Fernando Perez <fperez@colorado.edu>
1251
1260
1252 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1261 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1253 some old hacks and clean up a bit other routines; code should be
1262 some old hacks and clean up a bit other routines; code should be
1254 simpler and a bit faster.
1263 simpler and a bit faster.
1255
1264
1256 * IPython/iplib.py (interact): removed some last-resort attempts
1265 * IPython/iplib.py (interact): removed some last-resort attempts
1257 to survive broken stdout/stderr. That code was only making it
1266 to survive broken stdout/stderr. That code was only making it
1258 harder to abstract out the i/o (necessary for gui integration),
1267 harder to abstract out the i/o (necessary for gui integration),
1259 and the crashes it could prevent were extremely rare in practice
1268 and the crashes it could prevent were extremely rare in practice
1260 (besides being fully user-induced in a pretty violent manner).
1269 (besides being fully user-induced in a pretty violent manner).
1261
1270
1262 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1271 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1263 Nothing major yet, but the code is simpler to read; this should
1272 Nothing major yet, but the code is simpler to read; this should
1264 make it easier to do more serious modifications in the future.
1273 make it easier to do more serious modifications in the future.
1265
1274
1266 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1275 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1267 which broke in .15 (thanks to a report by Ville).
1276 which broke in .15 (thanks to a report by Ville).
1268
1277
1269 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1278 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1270 be quite correct, I know next to nothing about unicode). This
1279 be quite correct, I know next to nothing about unicode). This
1271 will allow unicode strings to be used in prompts, amongst other
1280 will allow unicode strings to be used in prompts, amongst other
1272 cases. It also will prevent ipython from crashing when unicode
1281 cases. It also will prevent ipython from crashing when unicode
1273 shows up unexpectedly in many places. If ascii encoding fails, we
1282 shows up unexpectedly in many places. If ascii encoding fails, we
1274 assume utf_8. Currently the encoding is not a user-visible
1283 assume utf_8. Currently the encoding is not a user-visible
1275 setting, though it could be made so if there is demand for it.
1284 setting, though it could be made so if there is demand for it.
1276
1285
1277 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1286 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1278
1287
1279 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1288 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1280
1289
1281 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1290 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1282
1291
1283 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1292 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1284 code can work transparently for 2.2/2.3.
1293 code can work transparently for 2.2/2.3.
1285
1294
1286 2005-07-16 Fernando Perez <fperez@colorado.edu>
1295 2005-07-16 Fernando Perez <fperez@colorado.edu>
1287
1296
1288 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1297 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1289 out of the color scheme table used for coloring exception
1298 out of the color scheme table used for coloring exception
1290 tracebacks. This allows user code to add new schemes at runtime.
1299 tracebacks. This allows user code to add new schemes at runtime.
1291 This is a minimally modified version of the patch at
1300 This is a minimally modified version of the patch at
1292 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1301 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1293 for the contribution.
1302 for the contribution.
1294
1303
1295 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1304 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1296 slightly modified version of the patch in
1305 slightly modified version of the patch in
1297 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1306 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1298 to remove the previous try/except solution (which was costlier).
1307 to remove the previous try/except solution (which was costlier).
1299 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1308 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1300
1309
1301 2005-06-08 Fernando Perez <fperez@colorado.edu>
1310 2005-06-08 Fernando Perez <fperez@colorado.edu>
1302
1311
1303 * IPython/iplib.py (write/write_err): Add methods to abstract all
1312 * IPython/iplib.py (write/write_err): Add methods to abstract all
1304 I/O a bit more.
1313 I/O a bit more.
1305
1314
1306 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1315 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1307 warning, reported by Aric Hagberg, fix by JD Hunter.
1316 warning, reported by Aric Hagberg, fix by JD Hunter.
1308
1317
1309 2005-06-02 *** Released version 0.6.15
1318 2005-06-02 *** Released version 0.6.15
1310
1319
1311 2005-06-01 Fernando Perez <fperez@colorado.edu>
1320 2005-06-01 Fernando Perez <fperez@colorado.edu>
1312
1321
1313 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1322 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1314 tab-completion of filenames within open-quoted strings. Note that
1323 tab-completion of filenames within open-quoted strings. Note that
1315 this requires that in ~/.ipython/ipythonrc, users change the
1324 this requires that in ~/.ipython/ipythonrc, users change the
1316 readline delimiters configuration to read:
1325 readline delimiters configuration to read:
1317
1326
1318 readline_remove_delims -/~
1327 readline_remove_delims -/~
1319
1328
1320
1329
1321 2005-05-31 *** Released version 0.6.14
1330 2005-05-31 *** Released version 0.6.14
1322
1331
1323 2005-05-29 Fernando Perez <fperez@colorado.edu>
1332 2005-05-29 Fernando Perez <fperez@colorado.edu>
1324
1333
1325 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1334 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1326 with files not on the filesystem. Reported by Eliyahu Sandler
1335 with files not on the filesystem. Reported by Eliyahu Sandler
1327 <eli@gondolin.net>
1336 <eli@gondolin.net>
1328
1337
1329 2005-05-22 Fernando Perez <fperez@colorado.edu>
1338 2005-05-22 Fernando Perez <fperez@colorado.edu>
1330
1339
1331 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1340 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1332 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1341 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1333
1342
1334 2005-05-19 Fernando Perez <fperez@colorado.edu>
1343 2005-05-19 Fernando Perez <fperez@colorado.edu>
1335
1344
1336 * IPython/iplib.py (safe_execfile): close a file which could be
1345 * IPython/iplib.py (safe_execfile): close a file which could be
1337 left open (causing problems in win32, which locks open files).
1346 left open (causing problems in win32, which locks open files).
1338 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1347 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1339
1348
1340 2005-05-18 Fernando Perez <fperez@colorado.edu>
1349 2005-05-18 Fernando Perez <fperez@colorado.edu>
1341
1350
1342 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1351 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1343 keyword arguments correctly to safe_execfile().
1352 keyword arguments correctly to safe_execfile().
1344
1353
1345 2005-05-13 Fernando Perez <fperez@colorado.edu>
1354 2005-05-13 Fernando Perez <fperez@colorado.edu>
1346
1355
1347 * ipython.1: Added info about Qt to manpage, and threads warning
1356 * ipython.1: Added info about Qt to manpage, and threads warning
1348 to usage page (invoked with --help).
1357 to usage page (invoked with --help).
1349
1358
1350 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1359 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1351 new matcher (it goes at the end of the priority list) to do
1360 new matcher (it goes at the end of the priority list) to do
1352 tab-completion on named function arguments. Submitted by George
1361 tab-completion on named function arguments. Submitted by George
1353 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1362 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1354 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1363 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1355 for more details.
1364 for more details.
1356
1365
1357 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1366 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1358 SystemExit exceptions in the script being run. Thanks to a report
1367 SystemExit exceptions in the script being run. Thanks to a report
1359 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1368 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1360 producing very annoying behavior when running unit tests.
1369 producing very annoying behavior when running unit tests.
1361
1370
1362 2005-05-12 Fernando Perez <fperez@colorado.edu>
1371 2005-05-12 Fernando Perez <fperez@colorado.edu>
1363
1372
1364 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1373 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1365 which I'd broken (again) due to a changed regexp. In the process,
1374 which I'd broken (again) due to a changed regexp. In the process,
1366 added ';' as an escape to auto-quote the whole line without
1375 added ';' as an escape to auto-quote the whole line without
1367 splitting its arguments. Thanks to a report by Jerry McRae
1376 splitting its arguments. Thanks to a report by Jerry McRae
1368 <qrs0xyc02-AT-sneakemail.com>.
1377 <qrs0xyc02-AT-sneakemail.com>.
1369
1378
1370 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1379 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1371 possible crashes caused by a TokenError. Reported by Ed Schofield
1380 possible crashes caused by a TokenError. Reported by Ed Schofield
1372 <schofield-AT-ftw.at>.
1381 <schofield-AT-ftw.at>.
1373
1382
1374 2005-05-06 Fernando Perez <fperez@colorado.edu>
1383 2005-05-06 Fernando Perez <fperez@colorado.edu>
1375
1384
1376 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1385 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1377
1386
1378 2005-04-29 Fernando Perez <fperez@colorado.edu>
1387 2005-04-29 Fernando Perez <fperez@colorado.edu>
1379
1388
1380 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1389 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1381 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1390 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1382 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1391 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1383 which provides support for Qt interactive usage (similar to the
1392 which provides support for Qt interactive usage (similar to the
1384 existing one for WX and GTK). This had been often requested.
1393 existing one for WX and GTK). This had been often requested.
1385
1394
1386 2005-04-14 *** Released version 0.6.13
1395 2005-04-14 *** Released version 0.6.13
1387
1396
1388 2005-04-08 Fernando Perez <fperez@colorado.edu>
1397 2005-04-08 Fernando Perez <fperez@colorado.edu>
1389
1398
1390 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1399 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1391 from _ofind, which gets called on almost every input line. Now,
1400 from _ofind, which gets called on almost every input line. Now,
1392 we only try to get docstrings if they are actually going to be
1401 we only try to get docstrings if they are actually going to be
1393 used (the overhead of fetching unnecessary docstrings can be
1402 used (the overhead of fetching unnecessary docstrings can be
1394 noticeable for certain objects, such as Pyro proxies).
1403 noticeable for certain objects, such as Pyro proxies).
1395
1404
1396 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1405 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1397 for completers. For some reason I had been passing them the state
1406 for completers. For some reason I had been passing them the state
1398 variable, which completers never actually need, and was in
1407 variable, which completers never actually need, and was in
1399 conflict with the rlcompleter API. Custom completers ONLY need to
1408 conflict with the rlcompleter API. Custom completers ONLY need to
1400 take the text parameter.
1409 take the text parameter.
1401
1410
1402 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1411 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1403 work correctly in pysh. I've also moved all the logic which used
1412 work correctly in pysh. I've also moved all the logic which used
1404 to be in pysh.py here, which will prevent problems with future
1413 to be in pysh.py here, which will prevent problems with future
1405 upgrades. However, this time I must warn users to update their
1414 upgrades. However, this time I must warn users to update their
1406 pysh profile to include the line
1415 pysh profile to include the line
1407
1416
1408 import_all IPython.Extensions.InterpreterExec
1417 import_all IPython.Extensions.InterpreterExec
1409
1418
1410 because otherwise things won't work for them. They MUST also
1419 because otherwise things won't work for them. They MUST also
1411 delete pysh.py and the line
1420 delete pysh.py and the line
1412
1421
1413 execfile pysh.py
1422 execfile pysh.py
1414
1423
1415 from their ipythonrc-pysh.
1424 from their ipythonrc-pysh.
1416
1425
1417 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1426 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1418 robust in the face of objects whose dir() returns non-strings
1427 robust in the face of objects whose dir() returns non-strings
1419 (which it shouldn't, but some broken libs like ITK do). Thanks to
1428 (which it shouldn't, but some broken libs like ITK do). Thanks to
1420 a patch by John Hunter (implemented differently, though). Also
1429 a patch by John Hunter (implemented differently, though). Also
1421 minor improvements by using .extend instead of + on lists.
1430 minor improvements by using .extend instead of + on lists.
1422
1431
1423 * pysh.py:
1432 * pysh.py:
1424
1433
1425 2005-04-06 Fernando Perez <fperez@colorado.edu>
1434 2005-04-06 Fernando Perez <fperez@colorado.edu>
1426
1435
1427 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1436 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1428 by default, so that all users benefit from it. Those who don't
1437 by default, so that all users benefit from it. Those who don't
1429 want it can still turn it off.
1438 want it can still turn it off.
1430
1439
1431 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1440 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1432 config file, I'd forgotten about this, so users were getting it
1441 config file, I'd forgotten about this, so users were getting it
1433 off by default.
1442 off by default.
1434
1443
1435 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1444 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1436 consistency. Now magics can be called in multiline statements,
1445 consistency. Now magics can be called in multiline statements,
1437 and python variables can be expanded in magic calls via $var.
1446 and python variables can be expanded in magic calls via $var.
1438 This makes the magic system behave just like aliases or !system
1447 This makes the magic system behave just like aliases or !system
1439 calls.
1448 calls.
1440
1449
1441 2005-03-28 Fernando Perez <fperez@colorado.edu>
1450 2005-03-28 Fernando Perez <fperez@colorado.edu>
1442
1451
1443 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1452 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1444 expensive string additions for building command. Add support for
1453 expensive string additions for building command. Add support for
1445 trailing ';' when autocall is used.
1454 trailing ';' when autocall is used.
1446
1455
1447 2005-03-26 Fernando Perez <fperez@colorado.edu>
1456 2005-03-26 Fernando Perez <fperez@colorado.edu>
1448
1457
1449 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1458 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1450 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1459 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1451 ipython.el robust against prompts with any number of spaces
1460 ipython.el robust against prompts with any number of spaces
1452 (including 0) after the ':' character.
1461 (including 0) after the ':' character.
1453
1462
1454 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1463 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1455 continuation prompt, which misled users to think the line was
1464 continuation prompt, which misled users to think the line was
1456 already indented. Closes debian Bug#300847, reported to me by
1465 already indented. Closes debian Bug#300847, reported to me by
1457 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1466 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1458
1467
1459 2005-03-23 Fernando Perez <fperez@colorado.edu>
1468 2005-03-23 Fernando Perez <fperez@colorado.edu>
1460
1469
1461 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1470 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1462 properly aligned if they have embedded newlines.
1471 properly aligned if they have embedded newlines.
1463
1472
1464 * IPython/iplib.py (runlines): Add a public method to expose
1473 * IPython/iplib.py (runlines): Add a public method to expose
1465 IPython's code execution machinery, so that users can run strings
1474 IPython's code execution machinery, so that users can run strings
1466 as if they had been typed at the prompt interactively.
1475 as if they had been typed at the prompt interactively.
1467 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1476 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1468 methods which can call the system shell, but with python variable
1477 methods which can call the system shell, but with python variable
1469 expansion. The three such methods are: __IPYTHON__.system,
1478 expansion. The three such methods are: __IPYTHON__.system,
1470 .getoutput and .getoutputerror. These need to be documented in a
1479 .getoutput and .getoutputerror. These need to be documented in a
1471 'public API' section (to be written) of the manual.
1480 'public API' section (to be written) of the manual.
1472
1481
1473 2005-03-20 Fernando Perez <fperez@colorado.edu>
1482 2005-03-20 Fernando Perez <fperez@colorado.edu>
1474
1483
1475 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1484 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1476 for custom exception handling. This is quite powerful, and it
1485 for custom exception handling. This is quite powerful, and it
1477 allows for user-installable exception handlers which can trap
1486 allows for user-installable exception handlers which can trap
1478 custom exceptions at runtime and treat them separately from
1487 custom exceptions at runtime and treat them separately from
1479 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1488 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1480 Mantegazza <mantegazza-AT-ill.fr>.
1489 Mantegazza <mantegazza-AT-ill.fr>.
1481 (InteractiveShell.set_custom_completer): public API function to
1490 (InteractiveShell.set_custom_completer): public API function to
1482 add new completers at runtime.
1491 add new completers at runtime.
1483
1492
1484 2005-03-19 Fernando Perez <fperez@colorado.edu>
1493 2005-03-19 Fernando Perez <fperez@colorado.edu>
1485
1494
1486 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1495 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1487 allow objects which provide their docstrings via non-standard
1496 allow objects which provide their docstrings via non-standard
1488 mechanisms (like Pyro proxies) to still be inspected by ipython's
1497 mechanisms (like Pyro proxies) to still be inspected by ipython's
1489 ? system.
1498 ? system.
1490
1499
1491 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1500 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1492 automatic capture system. I tried quite hard to make it work
1501 automatic capture system. I tried quite hard to make it work
1493 reliably, and simply failed. I tried many combinations with the
1502 reliably, and simply failed. I tried many combinations with the
1494 subprocess module, but eventually nothing worked in all needed
1503 subprocess module, but eventually nothing worked in all needed
1495 cases (not blocking stdin for the child, duplicating stdout
1504 cases (not blocking stdin for the child, duplicating stdout
1496 without blocking, etc). The new %sc/%sx still do capture to these
1505 without blocking, etc). The new %sc/%sx still do capture to these
1497 magical list/string objects which make shell use much more
1506 magical list/string objects which make shell use much more
1498 conveninent, so not all is lost.
1507 conveninent, so not all is lost.
1499
1508
1500 XXX - FIX MANUAL for the change above!
1509 XXX - FIX MANUAL for the change above!
1501
1510
1502 (runsource): I copied code.py's runsource() into ipython to modify
1511 (runsource): I copied code.py's runsource() into ipython to modify
1503 it a bit. Now the code object and source to be executed are
1512 it a bit. Now the code object and source to be executed are
1504 stored in ipython. This makes this info accessible to third-party
1513 stored in ipython. This makes this info accessible to third-party
1505 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1514 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1506 Mantegazza <mantegazza-AT-ill.fr>.
1515 Mantegazza <mantegazza-AT-ill.fr>.
1507
1516
1508 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1517 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1509 history-search via readline (like C-p/C-n). I'd wanted this for a
1518 history-search via readline (like C-p/C-n). I'd wanted this for a
1510 long time, but only recently found out how to do it. For users
1519 long time, but only recently found out how to do it. For users
1511 who already have their ipythonrc files made and want this, just
1520 who already have their ipythonrc files made and want this, just
1512 add:
1521 add:
1513
1522
1514 readline_parse_and_bind "\e[A": history-search-backward
1523 readline_parse_and_bind "\e[A": history-search-backward
1515 readline_parse_and_bind "\e[B": history-search-forward
1524 readline_parse_and_bind "\e[B": history-search-forward
1516
1525
1517 2005-03-18 Fernando Perez <fperez@colorado.edu>
1526 2005-03-18 Fernando Perez <fperez@colorado.edu>
1518
1527
1519 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1528 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1520 LSString and SList classes which allow transparent conversions
1529 LSString and SList classes which allow transparent conversions
1521 between list mode and whitespace-separated string.
1530 between list mode and whitespace-separated string.
1522 (magic_r): Fix recursion problem in %r.
1531 (magic_r): Fix recursion problem in %r.
1523
1532
1524 * IPython/genutils.py (LSString): New class to be used for
1533 * IPython/genutils.py (LSString): New class to be used for
1525 automatic storage of the results of all alias/system calls in _o
1534 automatic storage of the results of all alias/system calls in _o
1526 and _e (stdout/err). These provide a .l/.list attribute which
1535 and _e (stdout/err). These provide a .l/.list attribute which
1527 does automatic splitting on newlines. This means that for most
1536 does automatic splitting on newlines. This means that for most
1528 uses, you'll never need to do capturing of output with %sc/%sx
1537 uses, you'll never need to do capturing of output with %sc/%sx
1529 anymore, since ipython keeps this always done for you. Note that
1538 anymore, since ipython keeps this always done for you. Note that
1530 only the LAST results are stored, the _o/e variables are
1539 only the LAST results are stored, the _o/e variables are
1531 overwritten on each call. If you need to save their contents
1540 overwritten on each call. If you need to save their contents
1532 further, simply bind them to any other name.
1541 further, simply bind them to any other name.
1533
1542
1534 2005-03-17 Fernando Perez <fperez@colorado.edu>
1543 2005-03-17 Fernando Perez <fperez@colorado.edu>
1535
1544
1536 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1545 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1537 prompt namespace handling.
1546 prompt namespace handling.
1538
1547
1539 2005-03-16 Fernando Perez <fperez@colorado.edu>
1548 2005-03-16 Fernando Perez <fperez@colorado.edu>
1540
1549
1541 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1550 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1542 classic prompts to be '>>> ' (final space was missing, and it
1551 classic prompts to be '>>> ' (final space was missing, and it
1543 trips the emacs python mode).
1552 trips the emacs python mode).
1544 (BasePrompt.__str__): Added safe support for dynamic prompt
1553 (BasePrompt.__str__): Added safe support for dynamic prompt
1545 strings. Now you can set your prompt string to be '$x', and the
1554 strings. Now you can set your prompt string to be '$x', and the
1546 value of x will be printed from your interactive namespace. The
1555 value of x will be printed from your interactive namespace. The
1547 interpolation syntax includes the full Itpl support, so
1556 interpolation syntax includes the full Itpl support, so
1548 ${foo()+x+bar()} is a valid prompt string now, and the function
1557 ${foo()+x+bar()} is a valid prompt string now, and the function
1549 calls will be made at runtime.
1558 calls will be made at runtime.
1550
1559
1551 2005-03-15 Fernando Perez <fperez@colorado.edu>
1560 2005-03-15 Fernando Perez <fperez@colorado.edu>
1552
1561
1553 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1562 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1554 avoid name clashes in pylab. %hist still works, it just forwards
1563 avoid name clashes in pylab. %hist still works, it just forwards
1555 the call to %history.
1564 the call to %history.
1556
1565
1557 2005-03-02 *** Released version 0.6.12
1566 2005-03-02 *** Released version 0.6.12
1558
1567
1559 2005-03-02 Fernando Perez <fperez@colorado.edu>
1568 2005-03-02 Fernando Perez <fperez@colorado.edu>
1560
1569
1561 * IPython/iplib.py (handle_magic): log magic calls properly as
1570 * IPython/iplib.py (handle_magic): log magic calls properly as
1562 ipmagic() function calls.
1571 ipmagic() function calls.
1563
1572
1564 * IPython/Magic.py (magic_time): Improved %time to support
1573 * IPython/Magic.py (magic_time): Improved %time to support
1565 statements and provide wall-clock as well as CPU time.
1574 statements and provide wall-clock as well as CPU time.
1566
1575
1567 2005-02-27 Fernando Perez <fperez@colorado.edu>
1576 2005-02-27 Fernando Perez <fperez@colorado.edu>
1568
1577
1569 * IPython/hooks.py: New hooks module, to expose user-modifiable
1578 * IPython/hooks.py: New hooks module, to expose user-modifiable
1570 IPython functionality in a clean manner. For now only the editor
1579 IPython functionality in a clean manner. For now only the editor
1571 hook is actually written, and other thigns which I intend to turn
1580 hook is actually written, and other thigns which I intend to turn
1572 into proper hooks aren't yet there. The display and prefilter
1581 into proper hooks aren't yet there. The display and prefilter
1573 stuff, for example, should be hooks. But at least now the
1582 stuff, for example, should be hooks. But at least now the
1574 framework is in place, and the rest can be moved here with more
1583 framework is in place, and the rest can be moved here with more
1575 time later. IPython had had a .hooks variable for a long time for
1584 time later. IPython had had a .hooks variable for a long time for
1576 this purpose, but I'd never actually used it for anything.
1585 this purpose, but I'd never actually used it for anything.
1577
1586
1578 2005-02-26 Fernando Perez <fperez@colorado.edu>
1587 2005-02-26 Fernando Perez <fperez@colorado.edu>
1579
1588
1580 * IPython/ipmaker.py (make_IPython): make the default ipython
1589 * IPython/ipmaker.py (make_IPython): make the default ipython
1581 directory be called _ipython under win32, to follow more the
1590 directory be called _ipython under win32, to follow more the
1582 naming peculiarities of that platform (where buggy software like
1591 naming peculiarities of that platform (where buggy software like
1583 Visual Sourcesafe breaks with .named directories). Reported by
1592 Visual Sourcesafe breaks with .named directories). Reported by
1584 Ville Vainio.
1593 Ville Vainio.
1585
1594
1586 2005-02-23 Fernando Perez <fperez@colorado.edu>
1595 2005-02-23 Fernando Perez <fperez@colorado.edu>
1587
1596
1588 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1597 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1589 auto_aliases for win32 which were causing problems. Users can
1598 auto_aliases for win32 which were causing problems. Users can
1590 define the ones they personally like.
1599 define the ones they personally like.
1591
1600
1592 2005-02-21 Fernando Perez <fperez@colorado.edu>
1601 2005-02-21 Fernando Perez <fperez@colorado.edu>
1593
1602
1594 * IPython/Magic.py (magic_time): new magic to time execution of
1603 * IPython/Magic.py (magic_time): new magic to time execution of
1595 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1604 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1596
1605
1597 2005-02-19 Fernando Perez <fperez@colorado.edu>
1606 2005-02-19 Fernando Perez <fperez@colorado.edu>
1598
1607
1599 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1608 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1600 into keys (for prompts, for example).
1609 into keys (for prompts, for example).
1601
1610
1602 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1611 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1603 prompts in case users want them. This introduces a small behavior
1612 prompts in case users want them. This introduces a small behavior
1604 change: ipython does not automatically add a space to all prompts
1613 change: ipython does not automatically add a space to all prompts
1605 anymore. To get the old prompts with a space, users should add it
1614 anymore. To get the old prompts with a space, users should add it
1606 manually to their ipythonrc file, so for example prompt_in1 should
1615 manually to their ipythonrc file, so for example prompt_in1 should
1607 now read 'In [\#]: ' instead of 'In [\#]:'.
1616 now read 'In [\#]: ' instead of 'In [\#]:'.
1608 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1617 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1609 file) to control left-padding of secondary prompts.
1618 file) to control left-padding of secondary prompts.
1610
1619
1611 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1620 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1612 the profiler can't be imported. Fix for Debian, which removed
1621 the profiler can't be imported. Fix for Debian, which removed
1613 profile.py because of License issues. I applied a slightly
1622 profile.py because of License issues. I applied a slightly
1614 modified version of the original Debian patch at
1623 modified version of the original Debian patch at
1615 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1624 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1616
1625
1617 2005-02-17 Fernando Perez <fperez@colorado.edu>
1626 2005-02-17 Fernando Perez <fperez@colorado.edu>
1618
1627
1619 * IPython/genutils.py (native_line_ends): Fix bug which would
1628 * IPython/genutils.py (native_line_ends): Fix bug which would
1620 cause improper line-ends under win32 b/c I was not opening files
1629 cause improper line-ends under win32 b/c I was not opening files
1621 in binary mode. Bug report and fix thanks to Ville.
1630 in binary mode. Bug report and fix thanks to Ville.
1622
1631
1623 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1632 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1624 trying to catch spurious foo[1] autocalls. My fix actually broke
1633 trying to catch spurious foo[1] autocalls. My fix actually broke
1625 ',/' autoquote/call with explicit escape (bad regexp).
1634 ',/' autoquote/call with explicit escape (bad regexp).
1626
1635
1627 2005-02-15 *** Released version 0.6.11
1636 2005-02-15 *** Released version 0.6.11
1628
1637
1629 2005-02-14 Fernando Perez <fperez@colorado.edu>
1638 2005-02-14 Fernando Perez <fperez@colorado.edu>
1630
1639
1631 * IPython/background_jobs.py: New background job management
1640 * IPython/background_jobs.py: New background job management
1632 subsystem. This is implemented via a new set of classes, and
1641 subsystem. This is implemented via a new set of classes, and
1633 IPython now provides a builtin 'jobs' object for background job
1642 IPython now provides a builtin 'jobs' object for background job
1634 execution. A convenience %bg magic serves as a lightweight
1643 execution. A convenience %bg magic serves as a lightweight
1635 frontend for starting the more common type of calls. This was
1644 frontend for starting the more common type of calls. This was
1636 inspired by discussions with B. Granger and the BackgroundCommand
1645 inspired by discussions with B. Granger and the BackgroundCommand
1637 class described in the book Python Scripting for Computational
1646 class described in the book Python Scripting for Computational
1638 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1647 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1639 (although ultimately no code from this text was used, as IPython's
1648 (although ultimately no code from this text was used, as IPython's
1640 system is a separate implementation).
1649 system is a separate implementation).
1641
1650
1642 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1651 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1643 to control the completion of single/double underscore names
1652 to control the completion of single/double underscore names
1644 separately. As documented in the example ipytonrc file, the
1653 separately. As documented in the example ipytonrc file, the
1645 readline_omit__names variable can now be set to 2, to omit even
1654 readline_omit__names variable can now be set to 2, to omit even
1646 single underscore names. Thanks to a patch by Brian Wong
1655 single underscore names. Thanks to a patch by Brian Wong
1647 <BrianWong-AT-AirgoNetworks.Com>.
1656 <BrianWong-AT-AirgoNetworks.Com>.
1648 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1657 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1649 be autocalled as foo([1]) if foo were callable. A problem for
1658 be autocalled as foo([1]) if foo were callable. A problem for
1650 things which are both callable and implement __getitem__.
1659 things which are both callable and implement __getitem__.
1651 (init_readline): Fix autoindentation for win32. Thanks to a patch
1660 (init_readline): Fix autoindentation for win32. Thanks to a patch
1652 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1661 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1653
1662
1654 2005-02-12 Fernando Perez <fperez@colorado.edu>
1663 2005-02-12 Fernando Perez <fperez@colorado.edu>
1655
1664
1656 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1665 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1657 which I had written long ago to sort out user error messages which
1666 which I had written long ago to sort out user error messages which
1658 may occur during startup. This seemed like a good idea initially,
1667 may occur during startup. This seemed like a good idea initially,
1659 but it has proven a disaster in retrospect. I don't want to
1668 but it has proven a disaster in retrospect. I don't want to
1660 change much code for now, so my fix is to set the internal 'debug'
1669 change much code for now, so my fix is to set the internal 'debug'
1661 flag to true everywhere, whose only job was precisely to control
1670 flag to true everywhere, whose only job was precisely to control
1662 this subsystem. This closes issue 28 (as well as avoiding all
1671 this subsystem. This closes issue 28 (as well as avoiding all
1663 sorts of strange hangups which occur from time to time).
1672 sorts of strange hangups which occur from time to time).
1664
1673
1665 2005-02-07 Fernando Perez <fperez@colorado.edu>
1674 2005-02-07 Fernando Perez <fperez@colorado.edu>
1666
1675
1667 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1676 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1668 previous call produced a syntax error.
1677 previous call produced a syntax error.
1669
1678
1670 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1679 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1671 classes without constructor.
1680 classes without constructor.
1672
1681
1673 2005-02-06 Fernando Perez <fperez@colorado.edu>
1682 2005-02-06 Fernando Perez <fperez@colorado.edu>
1674
1683
1675 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1684 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1676 completions with the results of each matcher, so we return results
1685 completions with the results of each matcher, so we return results
1677 to the user from all namespaces. This breaks with ipython
1686 to the user from all namespaces. This breaks with ipython
1678 tradition, but I think it's a nicer behavior. Now you get all
1687 tradition, but I think it's a nicer behavior. Now you get all
1679 possible completions listed, from all possible namespaces (python,
1688 possible completions listed, from all possible namespaces (python,
1680 filesystem, magics...) After a request by John Hunter
1689 filesystem, magics...) After a request by John Hunter
1681 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1690 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1682
1691
1683 2005-02-05 Fernando Perez <fperez@colorado.edu>
1692 2005-02-05 Fernando Perez <fperez@colorado.edu>
1684
1693
1685 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1694 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1686 the call had quote characters in it (the quotes were stripped).
1695 the call had quote characters in it (the quotes were stripped).
1687
1696
1688 2005-01-31 Fernando Perez <fperez@colorado.edu>
1697 2005-01-31 Fernando Perez <fperez@colorado.edu>
1689
1698
1690 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1699 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1691 Itpl.itpl() to make the code more robust against psyco
1700 Itpl.itpl() to make the code more robust against psyco
1692 optimizations.
1701 optimizations.
1693
1702
1694 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1703 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1695 of causing an exception. Quicker, cleaner.
1704 of causing an exception. Quicker, cleaner.
1696
1705
1697 2005-01-28 Fernando Perez <fperez@colorado.edu>
1706 2005-01-28 Fernando Perez <fperez@colorado.edu>
1698
1707
1699 * scripts/ipython_win_post_install.py (install): hardcode
1708 * scripts/ipython_win_post_install.py (install): hardcode
1700 sys.prefix+'python.exe' as the executable path. It turns out that
1709 sys.prefix+'python.exe' as the executable path. It turns out that
1701 during the post-installation run, sys.executable resolves to the
1710 during the post-installation run, sys.executable resolves to the
1702 name of the binary installer! I should report this as a distutils
1711 name of the binary installer! I should report this as a distutils
1703 bug, I think. I updated the .10 release with this tiny fix, to
1712 bug, I think. I updated the .10 release with this tiny fix, to
1704 avoid annoying the lists further.
1713 avoid annoying the lists further.
1705
1714
1706 2005-01-27 *** Released version 0.6.10
1715 2005-01-27 *** Released version 0.6.10
1707
1716
1708 2005-01-27 Fernando Perez <fperez@colorado.edu>
1717 2005-01-27 Fernando Perez <fperez@colorado.edu>
1709
1718
1710 * IPython/numutils.py (norm): Added 'inf' as optional name for
1719 * IPython/numutils.py (norm): Added 'inf' as optional name for
1711 L-infinity norm, included references to mathworld.com for vector
1720 L-infinity norm, included references to mathworld.com for vector
1712 norm definitions.
1721 norm definitions.
1713 (amin/amax): added amin/amax for array min/max. Similar to what
1722 (amin/amax): added amin/amax for array min/max. Similar to what
1714 pylab ships with after the recent reorganization of names.
1723 pylab ships with after the recent reorganization of names.
1715 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1724 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1716
1725
1717 * ipython.el: committed Alex's recent fixes and improvements.
1726 * ipython.el: committed Alex's recent fixes and improvements.
1718 Tested with python-mode from CVS, and it looks excellent. Since
1727 Tested with python-mode from CVS, and it looks excellent. Since
1719 python-mode hasn't released anything in a while, I'm temporarily
1728 python-mode hasn't released anything in a while, I'm temporarily
1720 putting a copy of today's CVS (v 4.70) of python-mode in:
1729 putting a copy of today's CVS (v 4.70) of python-mode in:
1721 http://ipython.scipy.org/tmp/python-mode.el
1730 http://ipython.scipy.org/tmp/python-mode.el
1722
1731
1723 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1732 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1724 sys.executable for the executable name, instead of assuming it's
1733 sys.executable for the executable name, instead of assuming it's
1725 called 'python.exe' (the post-installer would have produced broken
1734 called 'python.exe' (the post-installer would have produced broken
1726 setups on systems with a differently named python binary).
1735 setups on systems with a differently named python binary).
1727
1736
1728 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1737 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1729 references to os.linesep, to make the code more
1738 references to os.linesep, to make the code more
1730 platform-independent. This is also part of the win32 coloring
1739 platform-independent. This is also part of the win32 coloring
1731 fixes.
1740 fixes.
1732
1741
1733 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1742 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1734 lines, which actually cause coloring bugs because the length of
1743 lines, which actually cause coloring bugs because the length of
1735 the line is very difficult to correctly compute with embedded
1744 the line is very difficult to correctly compute with embedded
1736 escapes. This was the source of all the coloring problems under
1745 escapes. This was the source of all the coloring problems under
1737 Win32. I think that _finally_, Win32 users have a properly
1746 Win32. I think that _finally_, Win32 users have a properly
1738 working ipython in all respects. This would never have happened
1747 working ipython in all respects. This would never have happened
1739 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1748 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1740
1749
1741 2005-01-26 *** Released version 0.6.9
1750 2005-01-26 *** Released version 0.6.9
1742
1751
1743 2005-01-25 Fernando Perez <fperez@colorado.edu>
1752 2005-01-25 Fernando Perez <fperez@colorado.edu>
1744
1753
1745 * setup.py: finally, we have a true Windows installer, thanks to
1754 * setup.py: finally, we have a true Windows installer, thanks to
1746 the excellent work of Viktor Ransmayr
1755 the excellent work of Viktor Ransmayr
1747 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1756 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1748 Windows users. The setup routine is quite a bit cleaner thanks to
1757 Windows users. The setup routine is quite a bit cleaner thanks to
1749 this, and the post-install script uses the proper functions to
1758 this, and the post-install script uses the proper functions to
1750 allow a clean de-installation using the standard Windows Control
1759 allow a clean de-installation using the standard Windows Control
1751 Panel.
1760 Panel.
1752
1761
1753 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1762 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1754 environment variable under all OSes (including win32) if
1763 environment variable under all OSes (including win32) if
1755 available. This will give consistency to win32 users who have set
1764 available. This will give consistency to win32 users who have set
1756 this variable for any reason. If os.environ['HOME'] fails, the
1765 this variable for any reason. If os.environ['HOME'] fails, the
1757 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1766 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1758
1767
1759 2005-01-24 Fernando Perez <fperez@colorado.edu>
1768 2005-01-24 Fernando Perez <fperez@colorado.edu>
1760
1769
1761 * IPython/numutils.py (empty_like): add empty_like(), similar to
1770 * IPython/numutils.py (empty_like): add empty_like(), similar to
1762 zeros_like() but taking advantage of the new empty() Numeric routine.
1771 zeros_like() but taking advantage of the new empty() Numeric routine.
1763
1772
1764 2005-01-23 *** Released version 0.6.8
1773 2005-01-23 *** Released version 0.6.8
1765
1774
1766 2005-01-22 Fernando Perez <fperez@colorado.edu>
1775 2005-01-22 Fernando Perez <fperez@colorado.edu>
1767
1776
1768 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1777 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1769 automatic show() calls. After discussing things with JDH, it
1778 automatic show() calls. After discussing things with JDH, it
1770 turns out there are too many corner cases where this can go wrong.
1779 turns out there are too many corner cases where this can go wrong.
1771 It's best not to try to be 'too smart', and simply have ipython
1780 It's best not to try to be 'too smart', and simply have ipython
1772 reproduce as much as possible the default behavior of a normal
1781 reproduce as much as possible the default behavior of a normal
1773 python shell.
1782 python shell.
1774
1783
1775 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1784 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1776 line-splitting regexp and _prefilter() to avoid calling getattr()
1785 line-splitting regexp and _prefilter() to avoid calling getattr()
1777 on assignments. This closes
1786 on assignments. This closes
1778 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1787 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1779 readline uses getattr(), so a simple <TAB> keypress is still
1788 readline uses getattr(), so a simple <TAB> keypress is still
1780 enough to trigger getattr() calls on an object.
1789 enough to trigger getattr() calls on an object.
1781
1790
1782 2005-01-21 Fernando Perez <fperez@colorado.edu>
1791 2005-01-21 Fernando Perez <fperez@colorado.edu>
1783
1792
1784 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1793 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1785 docstring under pylab so it doesn't mask the original.
1794 docstring under pylab so it doesn't mask the original.
1786
1795
1787 2005-01-21 *** Released version 0.6.7
1796 2005-01-21 *** Released version 0.6.7
1788
1797
1789 2005-01-21 Fernando Perez <fperez@colorado.edu>
1798 2005-01-21 Fernando Perez <fperez@colorado.edu>
1790
1799
1791 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1800 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1792 signal handling for win32 users in multithreaded mode.
1801 signal handling for win32 users in multithreaded mode.
1793
1802
1794 2005-01-17 Fernando Perez <fperez@colorado.edu>
1803 2005-01-17 Fernando Perez <fperez@colorado.edu>
1795
1804
1796 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1805 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1797 instances with no __init__. After a crash report by Norbert Nemec
1806 instances with no __init__. After a crash report by Norbert Nemec
1798 <Norbert-AT-nemec-online.de>.
1807 <Norbert-AT-nemec-online.de>.
1799
1808
1800 2005-01-14 Fernando Perez <fperez@colorado.edu>
1809 2005-01-14 Fernando Perez <fperez@colorado.edu>
1801
1810
1802 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1811 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1803 names for verbose exceptions, when multiple dotted names and the
1812 names for verbose exceptions, when multiple dotted names and the
1804 'parent' object were present on the same line.
1813 'parent' object were present on the same line.
1805
1814
1806 2005-01-11 Fernando Perez <fperez@colorado.edu>
1815 2005-01-11 Fernando Perez <fperez@colorado.edu>
1807
1816
1808 * IPython/genutils.py (flag_calls): new utility to trap and flag
1817 * IPython/genutils.py (flag_calls): new utility to trap and flag
1809 calls in functions. I need it to clean up matplotlib support.
1818 calls in functions. I need it to clean up matplotlib support.
1810 Also removed some deprecated code in genutils.
1819 Also removed some deprecated code in genutils.
1811
1820
1812 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1821 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1813 that matplotlib scripts called with %run, which don't call show()
1822 that matplotlib scripts called with %run, which don't call show()
1814 themselves, still have their plotting windows open.
1823 themselves, still have their plotting windows open.
1815
1824
1816 2005-01-05 Fernando Perez <fperez@colorado.edu>
1825 2005-01-05 Fernando Perez <fperez@colorado.edu>
1817
1826
1818 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1827 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1819 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1828 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1820
1829
1821 2004-12-19 Fernando Perez <fperez@colorado.edu>
1830 2004-12-19 Fernando Perez <fperez@colorado.edu>
1822
1831
1823 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1832 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1824 parent_runcode, which was an eyesore. The same result can be
1833 parent_runcode, which was an eyesore. The same result can be
1825 obtained with Python's regular superclass mechanisms.
1834 obtained with Python's regular superclass mechanisms.
1826
1835
1827 2004-12-17 Fernando Perez <fperez@colorado.edu>
1836 2004-12-17 Fernando Perez <fperez@colorado.edu>
1828
1837
1829 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1838 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1830 reported by Prabhu.
1839 reported by Prabhu.
1831 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1840 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1832 sys.stderr) instead of explicitly calling sys.stderr. This helps
1841 sys.stderr) instead of explicitly calling sys.stderr. This helps
1833 maintain our I/O abstractions clean, for future GUI embeddings.
1842 maintain our I/O abstractions clean, for future GUI embeddings.
1834
1843
1835 * IPython/genutils.py (info): added new utility for sys.stderr
1844 * IPython/genutils.py (info): added new utility for sys.stderr
1836 unified info message handling (thin wrapper around warn()).
1845 unified info message handling (thin wrapper around warn()).
1837
1846
1838 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1847 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1839 composite (dotted) names on verbose exceptions.
1848 composite (dotted) names on verbose exceptions.
1840 (VerboseTB.nullrepr): harden against another kind of errors which
1849 (VerboseTB.nullrepr): harden against another kind of errors which
1841 Python's inspect module can trigger, and which were crashing
1850 Python's inspect module can trigger, and which were crashing
1842 IPython. Thanks to a report by Marco Lombardi
1851 IPython. Thanks to a report by Marco Lombardi
1843 <mlombard-AT-ma010192.hq.eso.org>.
1852 <mlombard-AT-ma010192.hq.eso.org>.
1844
1853
1845 2004-12-13 *** Released version 0.6.6
1854 2004-12-13 *** Released version 0.6.6
1846
1855
1847 2004-12-12 Fernando Perez <fperez@colorado.edu>
1856 2004-12-12 Fernando Perez <fperez@colorado.edu>
1848
1857
1849 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1858 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1850 generated by pygtk upon initialization if it was built without
1859 generated by pygtk upon initialization if it was built without
1851 threads (for matplotlib users). After a crash reported by
1860 threads (for matplotlib users). After a crash reported by
1852 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1861 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1853
1862
1854 * IPython/ipmaker.py (make_IPython): fix small bug in the
1863 * IPython/ipmaker.py (make_IPython): fix small bug in the
1855 import_some parameter for multiple imports.
1864 import_some parameter for multiple imports.
1856
1865
1857 * IPython/iplib.py (ipmagic): simplified the interface of
1866 * IPython/iplib.py (ipmagic): simplified the interface of
1858 ipmagic() to take a single string argument, just as it would be
1867 ipmagic() to take a single string argument, just as it would be
1859 typed at the IPython cmd line.
1868 typed at the IPython cmd line.
1860 (ipalias): Added new ipalias() with an interface identical to
1869 (ipalias): Added new ipalias() with an interface identical to
1861 ipmagic(). This completes exposing a pure python interface to the
1870 ipmagic(). This completes exposing a pure python interface to the
1862 alias and magic system, which can be used in loops or more complex
1871 alias and magic system, which can be used in loops or more complex
1863 code where IPython's automatic line mangling is not active.
1872 code where IPython's automatic line mangling is not active.
1864
1873
1865 * IPython/genutils.py (timing): changed interface of timing to
1874 * IPython/genutils.py (timing): changed interface of timing to
1866 simply run code once, which is the most common case. timings()
1875 simply run code once, which is the most common case. timings()
1867 remains unchanged, for the cases where you want multiple runs.
1876 remains unchanged, for the cases where you want multiple runs.
1868
1877
1869 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1878 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1870 bug where Python2.2 crashes with exec'ing code which does not end
1879 bug where Python2.2 crashes with exec'ing code which does not end
1871 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1880 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1872 before.
1881 before.
1873
1882
1874 2004-12-10 Fernando Perez <fperez@colorado.edu>
1883 2004-12-10 Fernando Perez <fperez@colorado.edu>
1875
1884
1876 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1885 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1877 -t to -T, to accomodate the new -t flag in %run (the %run and
1886 -t to -T, to accomodate the new -t flag in %run (the %run and
1878 %prun options are kind of intermixed, and it's not easy to change
1887 %prun options are kind of intermixed, and it's not easy to change
1879 this with the limitations of python's getopt).
1888 this with the limitations of python's getopt).
1880
1889
1881 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1890 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1882 the execution of scripts. It's not as fine-tuned as timeit.py,
1891 the execution of scripts. It's not as fine-tuned as timeit.py,
1883 but it works from inside ipython (and under 2.2, which lacks
1892 but it works from inside ipython (and under 2.2, which lacks
1884 timeit.py). Optionally a number of runs > 1 can be given for
1893 timeit.py). Optionally a number of runs > 1 can be given for
1885 timing very short-running code.
1894 timing very short-running code.
1886
1895
1887 * IPython/genutils.py (uniq_stable): new routine which returns a
1896 * IPython/genutils.py (uniq_stable): new routine which returns a
1888 list of unique elements in any iterable, but in stable order of
1897 list of unique elements in any iterable, but in stable order of
1889 appearance. I needed this for the ultraTB fixes, and it's a handy
1898 appearance. I needed this for the ultraTB fixes, and it's a handy
1890 utility.
1899 utility.
1891
1900
1892 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1901 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1893 dotted names in Verbose exceptions. This had been broken since
1902 dotted names in Verbose exceptions. This had been broken since
1894 the very start, now x.y will properly be printed in a Verbose
1903 the very start, now x.y will properly be printed in a Verbose
1895 traceback, instead of x being shown and y appearing always as an
1904 traceback, instead of x being shown and y appearing always as an
1896 'undefined global'. Getting this to work was a bit tricky,
1905 'undefined global'. Getting this to work was a bit tricky,
1897 because by default python tokenizers are stateless. Saved by
1906 because by default python tokenizers are stateless. Saved by
1898 python's ability to easily add a bit of state to an arbitrary
1907 python's ability to easily add a bit of state to an arbitrary
1899 function (without needing to build a full-blown callable object).
1908 function (without needing to build a full-blown callable object).
1900
1909
1901 Also big cleanup of this code, which had horrendous runtime
1910 Also big cleanup of this code, which had horrendous runtime
1902 lookups of zillions of attributes for colorization. Moved all
1911 lookups of zillions of attributes for colorization. Moved all
1903 this code into a few templates, which make it cleaner and quicker.
1912 this code into a few templates, which make it cleaner and quicker.
1904
1913
1905 Printout quality was also improved for Verbose exceptions: one
1914 Printout quality was also improved for Verbose exceptions: one
1906 variable per line, and memory addresses are printed (this can be
1915 variable per line, and memory addresses are printed (this can be
1907 quite handy in nasty debugging situations, which is what Verbose
1916 quite handy in nasty debugging situations, which is what Verbose
1908 is for).
1917 is for).
1909
1918
1910 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1919 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1911 the command line as scripts to be loaded by embedded instances.
1920 the command line as scripts to be loaded by embedded instances.
1912 Doing so has the potential for an infinite recursion if there are
1921 Doing so has the potential for an infinite recursion if there are
1913 exceptions thrown in the process. This fixes a strange crash
1922 exceptions thrown in the process. This fixes a strange crash
1914 reported by Philippe MULLER <muller-AT-irit.fr>.
1923 reported by Philippe MULLER <muller-AT-irit.fr>.
1915
1924
1916 2004-12-09 Fernando Perez <fperez@colorado.edu>
1925 2004-12-09 Fernando Perez <fperez@colorado.edu>
1917
1926
1918 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1927 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1919 to reflect new names in matplotlib, which now expose the
1928 to reflect new names in matplotlib, which now expose the
1920 matlab-compatible interface via a pylab module instead of the
1929 matlab-compatible interface via a pylab module instead of the
1921 'matlab' name. The new code is backwards compatible, so users of
1930 'matlab' name. The new code is backwards compatible, so users of
1922 all matplotlib versions are OK. Patch by J. Hunter.
1931 all matplotlib versions are OK. Patch by J. Hunter.
1923
1932
1924 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1933 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1925 of __init__ docstrings for instances (class docstrings are already
1934 of __init__ docstrings for instances (class docstrings are already
1926 automatically printed). Instances with customized docstrings
1935 automatically printed). Instances with customized docstrings
1927 (indep. of the class) are also recognized and all 3 separate
1936 (indep. of the class) are also recognized and all 3 separate
1928 docstrings are printed (instance, class, constructor). After some
1937 docstrings are printed (instance, class, constructor). After some
1929 comments/suggestions by J. Hunter.
1938 comments/suggestions by J. Hunter.
1930
1939
1931 2004-12-05 Fernando Perez <fperez@colorado.edu>
1940 2004-12-05 Fernando Perez <fperez@colorado.edu>
1932
1941
1933 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1942 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1934 warnings when tab-completion fails and triggers an exception.
1943 warnings when tab-completion fails and triggers an exception.
1935
1944
1936 2004-12-03 Fernando Perez <fperez@colorado.edu>
1945 2004-12-03 Fernando Perez <fperez@colorado.edu>
1937
1946
1938 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1947 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1939 be triggered when using 'run -p'. An incorrect option flag was
1948 be triggered when using 'run -p'. An incorrect option flag was
1940 being set ('d' instead of 'D').
1949 being set ('d' instead of 'D').
1941 (manpage): fix missing escaped \- sign.
1950 (manpage): fix missing escaped \- sign.
1942
1951
1943 2004-11-30 *** Released version 0.6.5
1952 2004-11-30 *** Released version 0.6.5
1944
1953
1945 2004-11-30 Fernando Perez <fperez@colorado.edu>
1954 2004-11-30 Fernando Perez <fperez@colorado.edu>
1946
1955
1947 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1956 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1948 setting with -d option.
1957 setting with -d option.
1949
1958
1950 * setup.py (docfiles): Fix problem where the doc glob I was using
1959 * setup.py (docfiles): Fix problem where the doc glob I was using
1951 was COMPLETELY BROKEN. It was giving the right files by pure
1960 was COMPLETELY BROKEN. It was giving the right files by pure
1952 accident, but failed once I tried to include ipython.el. Note:
1961 accident, but failed once I tried to include ipython.el. Note:
1953 glob() does NOT allow you to do exclusion on multiple endings!
1962 glob() does NOT allow you to do exclusion on multiple endings!
1954
1963
1955 2004-11-29 Fernando Perez <fperez@colorado.edu>
1964 2004-11-29 Fernando Perez <fperez@colorado.edu>
1956
1965
1957 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1966 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1958 the manpage as the source. Better formatting & consistency.
1967 the manpage as the source. Better formatting & consistency.
1959
1968
1960 * IPython/Magic.py (magic_run): Added new -d option, to run
1969 * IPython/Magic.py (magic_run): Added new -d option, to run
1961 scripts under the control of the python pdb debugger. Note that
1970 scripts under the control of the python pdb debugger. Note that
1962 this required changing the %prun option -d to -D, to avoid a clash
1971 this required changing the %prun option -d to -D, to avoid a clash
1963 (since %run must pass options to %prun, and getopt is too dumb to
1972 (since %run must pass options to %prun, and getopt is too dumb to
1964 handle options with string values with embedded spaces). Thanks
1973 handle options with string values with embedded spaces). Thanks
1965 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1974 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1966 (magic_who_ls): added type matching to %who and %whos, so that one
1975 (magic_who_ls): added type matching to %who and %whos, so that one
1967 can filter their output to only include variables of certain
1976 can filter their output to only include variables of certain
1968 types. Another suggestion by Matthew.
1977 types. Another suggestion by Matthew.
1969 (magic_whos): Added memory summaries in kb and Mb for arrays.
1978 (magic_whos): Added memory summaries in kb and Mb for arrays.
1970 (magic_who): Improve formatting (break lines every 9 vars).
1979 (magic_who): Improve formatting (break lines every 9 vars).
1971
1980
1972 2004-11-28 Fernando Perez <fperez@colorado.edu>
1981 2004-11-28 Fernando Perez <fperez@colorado.edu>
1973
1982
1974 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1983 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1975 cache when empty lines were present.
1984 cache when empty lines were present.
1976
1985
1977 2004-11-24 Fernando Perez <fperez@colorado.edu>
1986 2004-11-24 Fernando Perez <fperez@colorado.edu>
1978
1987
1979 * IPython/usage.py (__doc__): document the re-activated threading
1988 * IPython/usage.py (__doc__): document the re-activated threading
1980 options for WX and GTK.
1989 options for WX and GTK.
1981
1990
1982 2004-11-23 Fernando Perez <fperez@colorado.edu>
1991 2004-11-23 Fernando Perez <fperez@colorado.edu>
1983
1992
1984 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1993 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1985 the -wthread and -gthread options, along with a new -tk one to try
1994 the -wthread and -gthread options, along with a new -tk one to try
1986 and coordinate Tk threading with wx/gtk. The tk support is very
1995 and coordinate Tk threading with wx/gtk. The tk support is very
1987 platform dependent, since it seems to require Tcl and Tk to be
1996 platform dependent, since it seems to require Tcl and Tk to be
1988 built with threads (Fedora1/2 appears NOT to have it, but in
1997 built with threads (Fedora1/2 appears NOT to have it, but in
1989 Prabhu's Debian boxes it works OK). But even with some Tk
1998 Prabhu's Debian boxes it works OK). But even with some Tk
1990 limitations, this is a great improvement.
1999 limitations, this is a great improvement.
1991
2000
1992 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2001 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1993 info in user prompts. Patch by Prabhu.
2002 info in user prompts. Patch by Prabhu.
1994
2003
1995 2004-11-18 Fernando Perez <fperez@colorado.edu>
2004 2004-11-18 Fernando Perez <fperez@colorado.edu>
1996
2005
1997 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2006 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1998 EOFErrors and bail, to avoid infinite loops if a non-terminating
2007 EOFErrors and bail, to avoid infinite loops if a non-terminating
1999 file is fed into ipython. Patch submitted in issue 19 by user,
2008 file is fed into ipython. Patch submitted in issue 19 by user,
2000 many thanks.
2009 many thanks.
2001
2010
2002 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2011 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2003 autoquote/parens in continuation prompts, which can cause lots of
2012 autoquote/parens in continuation prompts, which can cause lots of
2004 problems. Closes roundup issue 20.
2013 problems. Closes roundup issue 20.
2005
2014
2006 2004-11-17 Fernando Perez <fperez@colorado.edu>
2015 2004-11-17 Fernando Perez <fperez@colorado.edu>
2007
2016
2008 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2017 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2009 reported as debian bug #280505. I'm not sure my local changelog
2018 reported as debian bug #280505. I'm not sure my local changelog
2010 entry has the proper debian format (Jack?).
2019 entry has the proper debian format (Jack?).
2011
2020
2012 2004-11-08 *** Released version 0.6.4
2021 2004-11-08 *** Released version 0.6.4
2013
2022
2014 2004-11-08 Fernando Perez <fperez@colorado.edu>
2023 2004-11-08 Fernando Perez <fperez@colorado.edu>
2015
2024
2016 * IPython/iplib.py (init_readline): Fix exit message for Windows
2025 * IPython/iplib.py (init_readline): Fix exit message for Windows
2017 when readline is active. Thanks to a report by Eric Jones
2026 when readline is active. Thanks to a report by Eric Jones
2018 <eric-AT-enthought.com>.
2027 <eric-AT-enthought.com>.
2019
2028
2020 2004-11-07 Fernando Perez <fperez@colorado.edu>
2029 2004-11-07 Fernando Perez <fperez@colorado.edu>
2021
2030
2022 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2031 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2023 sometimes seen by win2k/cygwin users.
2032 sometimes seen by win2k/cygwin users.
2024
2033
2025 2004-11-06 Fernando Perez <fperez@colorado.edu>
2034 2004-11-06 Fernando Perez <fperez@colorado.edu>
2026
2035
2027 * IPython/iplib.py (interact): Change the handling of %Exit from
2036 * IPython/iplib.py (interact): Change the handling of %Exit from
2028 trying to propagate a SystemExit to an internal ipython flag.
2037 trying to propagate a SystemExit to an internal ipython flag.
2029 This is less elegant than using Python's exception mechanism, but
2038 This is less elegant than using Python's exception mechanism, but
2030 I can't get that to work reliably with threads, so under -pylab
2039 I can't get that to work reliably with threads, so under -pylab
2031 %Exit was hanging IPython. Cross-thread exception handling is
2040 %Exit was hanging IPython. Cross-thread exception handling is
2032 really a bitch. Thaks to a bug report by Stephen Walton
2041 really a bitch. Thaks to a bug report by Stephen Walton
2033 <stephen.walton-AT-csun.edu>.
2042 <stephen.walton-AT-csun.edu>.
2034
2043
2035 2004-11-04 Fernando Perez <fperez@colorado.edu>
2044 2004-11-04 Fernando Perez <fperez@colorado.edu>
2036
2045
2037 * IPython/iplib.py (raw_input_original): store a pointer to the
2046 * IPython/iplib.py (raw_input_original): store a pointer to the
2038 true raw_input to harden against code which can modify it
2047 true raw_input to harden against code which can modify it
2039 (wx.py.PyShell does this and would otherwise crash ipython).
2048 (wx.py.PyShell does this and would otherwise crash ipython).
2040 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2049 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2041
2050
2042 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2051 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2043 Ctrl-C problem, which does not mess up the input line.
2052 Ctrl-C problem, which does not mess up the input line.
2044
2053
2045 2004-11-03 Fernando Perez <fperez@colorado.edu>
2054 2004-11-03 Fernando Perez <fperez@colorado.edu>
2046
2055
2047 * IPython/Release.py: Changed licensing to BSD, in all files.
2056 * IPython/Release.py: Changed licensing to BSD, in all files.
2048 (name): lowercase name for tarball/RPM release.
2057 (name): lowercase name for tarball/RPM release.
2049
2058
2050 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2059 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2051 use throughout ipython.
2060 use throughout ipython.
2052
2061
2053 * IPython/Magic.py (Magic._ofind): Switch to using the new
2062 * IPython/Magic.py (Magic._ofind): Switch to using the new
2054 OInspect.getdoc() function.
2063 OInspect.getdoc() function.
2055
2064
2056 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2065 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2057 of the line currently being canceled via Ctrl-C. It's extremely
2066 of the line currently being canceled via Ctrl-C. It's extremely
2058 ugly, but I don't know how to do it better (the problem is one of
2067 ugly, but I don't know how to do it better (the problem is one of
2059 handling cross-thread exceptions).
2068 handling cross-thread exceptions).
2060
2069
2061 2004-10-28 Fernando Perez <fperez@colorado.edu>
2070 2004-10-28 Fernando Perez <fperez@colorado.edu>
2062
2071
2063 * IPython/Shell.py (signal_handler): add signal handlers to trap
2072 * IPython/Shell.py (signal_handler): add signal handlers to trap
2064 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2073 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2065 report by Francesc Alted.
2074 report by Francesc Alted.
2066
2075
2067 2004-10-21 Fernando Perez <fperez@colorado.edu>
2076 2004-10-21 Fernando Perez <fperez@colorado.edu>
2068
2077
2069 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2078 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2070 to % for pysh syntax extensions.
2079 to % for pysh syntax extensions.
2071
2080
2072 2004-10-09 Fernando Perez <fperez@colorado.edu>
2081 2004-10-09 Fernando Perez <fperez@colorado.edu>
2073
2082
2074 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2083 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2075 arrays to print a more useful summary, without calling str(arr).
2084 arrays to print a more useful summary, without calling str(arr).
2076 This avoids the problem of extremely lengthy computations which
2085 This avoids the problem of extremely lengthy computations which
2077 occur if arr is large, and appear to the user as a system lockup
2086 occur if arr is large, and appear to the user as a system lockup
2078 with 100% cpu activity. After a suggestion by Kristian Sandberg
2087 with 100% cpu activity. After a suggestion by Kristian Sandberg
2079 <Kristian.Sandberg@colorado.edu>.
2088 <Kristian.Sandberg@colorado.edu>.
2080 (Magic.__init__): fix bug in global magic escapes not being
2089 (Magic.__init__): fix bug in global magic escapes not being
2081 correctly set.
2090 correctly set.
2082
2091
2083 2004-10-08 Fernando Perez <fperez@colorado.edu>
2092 2004-10-08 Fernando Perez <fperez@colorado.edu>
2084
2093
2085 * IPython/Magic.py (__license__): change to absolute imports of
2094 * IPython/Magic.py (__license__): change to absolute imports of
2086 ipython's own internal packages, to start adapting to the absolute
2095 ipython's own internal packages, to start adapting to the absolute
2087 import requirement of PEP-328.
2096 import requirement of PEP-328.
2088
2097
2089 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2098 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2090 files, and standardize author/license marks through the Release
2099 files, and standardize author/license marks through the Release
2091 module instead of having per/file stuff (except for files with
2100 module instead of having per/file stuff (except for files with
2092 particular licenses, like the MIT/PSF-licensed codes).
2101 particular licenses, like the MIT/PSF-licensed codes).
2093
2102
2094 * IPython/Debugger.py: remove dead code for python 2.1
2103 * IPython/Debugger.py: remove dead code for python 2.1
2095
2104
2096 2004-10-04 Fernando Perez <fperez@colorado.edu>
2105 2004-10-04 Fernando Perez <fperez@colorado.edu>
2097
2106
2098 * IPython/iplib.py (ipmagic): New function for accessing magics
2107 * IPython/iplib.py (ipmagic): New function for accessing magics
2099 via a normal python function call.
2108 via a normal python function call.
2100
2109
2101 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2110 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2102 from '@' to '%', to accomodate the new @decorator syntax of python
2111 from '@' to '%', to accomodate the new @decorator syntax of python
2103 2.4.
2112 2.4.
2104
2113
2105 2004-09-29 Fernando Perez <fperez@colorado.edu>
2114 2004-09-29 Fernando Perez <fperez@colorado.edu>
2106
2115
2107 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2116 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2108 matplotlib.use to prevent running scripts which try to switch
2117 matplotlib.use to prevent running scripts which try to switch
2109 interactive backends from within ipython. This will just crash
2118 interactive backends from within ipython. This will just crash
2110 the python interpreter, so we can't allow it (but a detailed error
2119 the python interpreter, so we can't allow it (but a detailed error
2111 is given to the user).
2120 is given to the user).
2112
2121
2113 2004-09-28 Fernando Perez <fperez@colorado.edu>
2122 2004-09-28 Fernando Perez <fperez@colorado.edu>
2114
2123
2115 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2124 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2116 matplotlib-related fixes so that using @run with non-matplotlib
2125 matplotlib-related fixes so that using @run with non-matplotlib
2117 scripts doesn't pop up spurious plot windows. This requires
2126 scripts doesn't pop up spurious plot windows. This requires
2118 matplotlib >= 0.63, where I had to make some changes as well.
2127 matplotlib >= 0.63, where I had to make some changes as well.
2119
2128
2120 * IPython/ipmaker.py (make_IPython): update version requirement to
2129 * IPython/ipmaker.py (make_IPython): update version requirement to
2121 python 2.2.
2130 python 2.2.
2122
2131
2123 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2132 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2124 banner arg for embedded customization.
2133 banner arg for embedded customization.
2125
2134
2126 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2135 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2127 explicit uses of __IP as the IPython's instance name. Now things
2136 explicit uses of __IP as the IPython's instance name. Now things
2128 are properly handled via the shell.name value. The actual code
2137 are properly handled via the shell.name value. The actual code
2129 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2138 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2130 is much better than before. I'll clean things completely when the
2139 is much better than before. I'll clean things completely when the
2131 magic stuff gets a real overhaul.
2140 magic stuff gets a real overhaul.
2132
2141
2133 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2142 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2134 minor changes to debian dir.
2143 minor changes to debian dir.
2135
2144
2136 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2145 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2137 pointer to the shell itself in the interactive namespace even when
2146 pointer to the shell itself in the interactive namespace even when
2138 a user-supplied dict is provided. This is needed for embedding
2147 a user-supplied dict is provided. This is needed for embedding
2139 purposes (found by tests with Michel Sanner).
2148 purposes (found by tests with Michel Sanner).
2140
2149
2141 2004-09-27 Fernando Perez <fperez@colorado.edu>
2150 2004-09-27 Fernando Perez <fperez@colorado.edu>
2142
2151
2143 * IPython/UserConfig/ipythonrc: remove []{} from
2152 * IPython/UserConfig/ipythonrc: remove []{} from
2144 readline_remove_delims, so that things like [modname.<TAB> do
2153 readline_remove_delims, so that things like [modname.<TAB> do
2145 proper completion. This disables [].TAB, but that's a less common
2154 proper completion. This disables [].TAB, but that's a less common
2146 case than module names in list comprehensions, for example.
2155 case than module names in list comprehensions, for example.
2147 Thanks to a report by Andrea Riciputi.
2156 Thanks to a report by Andrea Riciputi.
2148
2157
2149 2004-09-09 Fernando Perez <fperez@colorado.edu>
2158 2004-09-09 Fernando Perez <fperez@colorado.edu>
2150
2159
2151 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2160 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2152 blocking problems in win32 and osx. Fix by John.
2161 blocking problems in win32 and osx. Fix by John.
2153
2162
2154 2004-09-08 Fernando Perez <fperez@colorado.edu>
2163 2004-09-08 Fernando Perez <fperez@colorado.edu>
2155
2164
2156 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2165 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2157 for Win32 and OSX. Fix by John Hunter.
2166 for Win32 and OSX. Fix by John Hunter.
2158
2167
2159 2004-08-30 *** Released version 0.6.3
2168 2004-08-30 *** Released version 0.6.3
2160
2169
2161 2004-08-30 Fernando Perez <fperez@colorado.edu>
2170 2004-08-30 Fernando Perez <fperez@colorado.edu>
2162
2171
2163 * setup.py (isfile): Add manpages to list of dependent files to be
2172 * setup.py (isfile): Add manpages to list of dependent files to be
2164 updated.
2173 updated.
2165
2174
2166 2004-08-27 Fernando Perez <fperez@colorado.edu>
2175 2004-08-27 Fernando Perez <fperez@colorado.edu>
2167
2176
2168 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2177 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2169 for now. They don't really work with standalone WX/GTK code
2178 for now. They don't really work with standalone WX/GTK code
2170 (though matplotlib IS working fine with both of those backends).
2179 (though matplotlib IS working fine with both of those backends).
2171 This will neeed much more testing. I disabled most things with
2180 This will neeed much more testing. I disabled most things with
2172 comments, so turning it back on later should be pretty easy.
2181 comments, so turning it back on later should be pretty easy.
2173
2182
2174 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2183 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2175 autocalling of expressions like r'foo', by modifying the line
2184 autocalling of expressions like r'foo', by modifying the line
2176 split regexp. Closes
2185 split regexp. Closes
2177 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2186 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2178 Riley <ipythonbugs-AT-sabi.net>.
2187 Riley <ipythonbugs-AT-sabi.net>.
2179 (InteractiveShell.mainloop): honor --nobanner with banner
2188 (InteractiveShell.mainloop): honor --nobanner with banner
2180 extensions.
2189 extensions.
2181
2190
2182 * IPython/Shell.py: Significant refactoring of all classes, so
2191 * IPython/Shell.py: Significant refactoring of all classes, so
2183 that we can really support ALL matplotlib backends and threading
2192 that we can really support ALL matplotlib backends and threading
2184 models (John spotted a bug with Tk which required this). Now we
2193 models (John spotted a bug with Tk which required this). Now we
2185 should support single-threaded, WX-threads and GTK-threads, both
2194 should support single-threaded, WX-threads and GTK-threads, both
2186 for generic code and for matplotlib.
2195 for generic code and for matplotlib.
2187
2196
2188 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2197 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2189 -pylab, to simplify things for users. Will also remove the pylab
2198 -pylab, to simplify things for users. Will also remove the pylab
2190 profile, since now all of matplotlib configuration is directly
2199 profile, since now all of matplotlib configuration is directly
2191 handled here. This also reduces startup time.
2200 handled here. This also reduces startup time.
2192
2201
2193 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2202 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2194 shell wasn't being correctly called. Also in IPShellWX.
2203 shell wasn't being correctly called. Also in IPShellWX.
2195
2204
2196 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2205 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2197 fine-tune banner.
2206 fine-tune banner.
2198
2207
2199 * IPython/numutils.py (spike): Deprecate these spike functions,
2208 * IPython/numutils.py (spike): Deprecate these spike functions,
2200 delete (long deprecated) gnuplot_exec handler.
2209 delete (long deprecated) gnuplot_exec handler.
2201
2210
2202 2004-08-26 Fernando Perez <fperez@colorado.edu>
2211 2004-08-26 Fernando Perez <fperez@colorado.edu>
2203
2212
2204 * ipython.1: Update for threading options, plus some others which
2213 * ipython.1: Update for threading options, plus some others which
2205 were missing.
2214 were missing.
2206
2215
2207 * IPython/ipmaker.py (__call__): Added -wthread option for
2216 * IPython/ipmaker.py (__call__): Added -wthread option for
2208 wxpython thread handling. Make sure threading options are only
2217 wxpython thread handling. Make sure threading options are only
2209 valid at the command line.
2218 valid at the command line.
2210
2219
2211 * scripts/ipython: moved shell selection into a factory function
2220 * scripts/ipython: moved shell selection into a factory function
2212 in Shell.py, to keep the starter script to a minimum.
2221 in Shell.py, to keep the starter script to a minimum.
2213
2222
2214 2004-08-25 Fernando Perez <fperez@colorado.edu>
2223 2004-08-25 Fernando Perez <fperez@colorado.edu>
2215
2224
2216 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2225 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2217 John. Along with some recent changes he made to matplotlib, the
2226 John. Along with some recent changes he made to matplotlib, the
2218 next versions of both systems should work very well together.
2227 next versions of both systems should work very well together.
2219
2228
2220 2004-08-24 Fernando Perez <fperez@colorado.edu>
2229 2004-08-24 Fernando Perez <fperez@colorado.edu>
2221
2230
2222 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2231 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2223 tried to switch the profiling to using hotshot, but I'm getting
2232 tried to switch the profiling to using hotshot, but I'm getting
2224 strange errors from prof.runctx() there. I may be misreading the
2233 strange errors from prof.runctx() there. I may be misreading the
2225 docs, but it looks weird. For now the profiling code will
2234 docs, but it looks weird. For now the profiling code will
2226 continue to use the standard profiler.
2235 continue to use the standard profiler.
2227
2236
2228 2004-08-23 Fernando Perez <fperez@colorado.edu>
2237 2004-08-23 Fernando Perez <fperez@colorado.edu>
2229
2238
2230 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2239 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2231 threaded shell, by John Hunter. It's not quite ready yet, but
2240 threaded shell, by John Hunter. It's not quite ready yet, but
2232 close.
2241 close.
2233
2242
2234 2004-08-22 Fernando Perez <fperez@colorado.edu>
2243 2004-08-22 Fernando Perez <fperez@colorado.edu>
2235
2244
2236 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2245 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2237 in Magic and ultraTB.
2246 in Magic and ultraTB.
2238
2247
2239 * ipython.1: document threading options in manpage.
2248 * ipython.1: document threading options in manpage.
2240
2249
2241 * scripts/ipython: Changed name of -thread option to -gthread,
2250 * scripts/ipython: Changed name of -thread option to -gthread,
2242 since this is GTK specific. I want to leave the door open for a
2251 since this is GTK specific. I want to leave the door open for a
2243 -wthread option for WX, which will most likely be necessary. This
2252 -wthread option for WX, which will most likely be necessary. This
2244 change affects usage and ipmaker as well.
2253 change affects usage and ipmaker as well.
2245
2254
2246 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2255 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2247 handle the matplotlib shell issues. Code by John Hunter
2256 handle the matplotlib shell issues. Code by John Hunter
2248 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2257 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2249 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2258 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2250 broken (and disabled for end users) for now, but it puts the
2259 broken (and disabled for end users) for now, but it puts the
2251 infrastructure in place.
2260 infrastructure in place.
2252
2261
2253 2004-08-21 Fernando Perez <fperez@colorado.edu>
2262 2004-08-21 Fernando Perez <fperez@colorado.edu>
2254
2263
2255 * ipythonrc-pylab: Add matplotlib support.
2264 * ipythonrc-pylab: Add matplotlib support.
2256
2265
2257 * matplotlib_config.py: new files for matplotlib support, part of
2266 * matplotlib_config.py: new files for matplotlib support, part of
2258 the pylab profile.
2267 the pylab profile.
2259
2268
2260 * IPython/usage.py (__doc__): documented the threading options.
2269 * IPython/usage.py (__doc__): documented the threading options.
2261
2270
2262 2004-08-20 Fernando Perez <fperez@colorado.edu>
2271 2004-08-20 Fernando Perez <fperez@colorado.edu>
2263
2272
2264 * ipython: Modified the main calling routine to handle the -thread
2273 * ipython: Modified the main calling routine to handle the -thread
2265 and -mpthread options. This needs to be done as a top-level hack,
2274 and -mpthread options. This needs to be done as a top-level hack,
2266 because it determines which class to instantiate for IPython
2275 because it determines which class to instantiate for IPython
2267 itself.
2276 itself.
2268
2277
2269 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2278 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2270 classes to support multithreaded GTK operation without blocking,
2279 classes to support multithreaded GTK operation without blocking,
2271 and matplotlib with all backends. This is a lot of still very
2280 and matplotlib with all backends. This is a lot of still very
2272 experimental code, and threads are tricky. So it may still have a
2281 experimental code, and threads are tricky. So it may still have a
2273 few rough edges... This code owes a lot to
2282 few rough edges... This code owes a lot to
2274 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2283 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2275 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2284 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2276 to John Hunter for all the matplotlib work.
2285 to John Hunter for all the matplotlib work.
2277
2286
2278 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2287 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2279 options for gtk thread and matplotlib support.
2288 options for gtk thread and matplotlib support.
2280
2289
2281 2004-08-16 Fernando Perez <fperez@colorado.edu>
2290 2004-08-16 Fernando Perez <fperez@colorado.edu>
2282
2291
2283 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2292 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2284 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2293 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2285 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2294 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2286
2295
2287 2004-08-11 Fernando Perez <fperez@colorado.edu>
2296 2004-08-11 Fernando Perez <fperez@colorado.edu>
2288
2297
2289 * setup.py (isfile): Fix build so documentation gets updated for
2298 * setup.py (isfile): Fix build so documentation gets updated for
2290 rpms (it was only done for .tgz builds).
2299 rpms (it was only done for .tgz builds).
2291
2300
2292 2004-08-10 Fernando Perez <fperez@colorado.edu>
2301 2004-08-10 Fernando Perez <fperez@colorado.edu>
2293
2302
2294 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2303 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2295
2304
2296 * iplib.py : Silence syntax error exceptions in tab-completion.
2305 * iplib.py : Silence syntax error exceptions in tab-completion.
2297
2306
2298 2004-08-05 Fernando Perez <fperez@colorado.edu>
2307 2004-08-05 Fernando Perez <fperez@colorado.edu>
2299
2308
2300 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2309 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2301 'color off' mark for continuation prompts. This was causing long
2310 'color off' mark for continuation prompts. This was causing long
2302 continuation lines to mis-wrap.
2311 continuation lines to mis-wrap.
2303
2312
2304 2004-08-01 Fernando Perez <fperez@colorado.edu>
2313 2004-08-01 Fernando Perez <fperez@colorado.edu>
2305
2314
2306 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2315 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2307 for building ipython to be a parameter. All this is necessary
2316 for building ipython to be a parameter. All this is necessary
2308 right now to have a multithreaded version, but this insane
2317 right now to have a multithreaded version, but this insane
2309 non-design will be cleaned up soon. For now, it's a hack that
2318 non-design will be cleaned up soon. For now, it's a hack that
2310 works.
2319 works.
2311
2320
2312 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2321 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2313 args in various places. No bugs so far, but it's a dangerous
2322 args in various places. No bugs so far, but it's a dangerous
2314 practice.
2323 practice.
2315
2324
2316 2004-07-31 Fernando Perez <fperez@colorado.edu>
2325 2004-07-31 Fernando Perez <fperez@colorado.edu>
2317
2326
2318 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2327 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2319 fix completion of files with dots in their names under most
2328 fix completion of files with dots in their names under most
2320 profiles (pysh was OK because the completion order is different).
2329 profiles (pysh was OK because the completion order is different).
2321
2330
2322 2004-07-27 Fernando Perez <fperez@colorado.edu>
2331 2004-07-27 Fernando Perez <fperez@colorado.edu>
2323
2332
2324 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2333 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2325 keywords manually, b/c the one in keyword.py was removed in python
2334 keywords manually, b/c the one in keyword.py was removed in python
2326 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2335 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2327 This is NOT a bug under python 2.3 and earlier.
2336 This is NOT a bug under python 2.3 and earlier.
2328
2337
2329 2004-07-26 Fernando Perez <fperez@colorado.edu>
2338 2004-07-26 Fernando Perez <fperez@colorado.edu>
2330
2339
2331 * IPython/ultraTB.py (VerboseTB.text): Add another
2340 * IPython/ultraTB.py (VerboseTB.text): Add another
2332 linecache.checkcache() call to try to prevent inspect.py from
2341 linecache.checkcache() call to try to prevent inspect.py from
2333 crashing under python 2.3. I think this fixes
2342 crashing under python 2.3. I think this fixes
2334 http://www.scipy.net/roundup/ipython/issue17.
2343 http://www.scipy.net/roundup/ipython/issue17.
2335
2344
2336 2004-07-26 *** Released version 0.6.2
2345 2004-07-26 *** Released version 0.6.2
2337
2346
2338 2004-07-26 Fernando Perez <fperez@colorado.edu>
2347 2004-07-26 Fernando Perez <fperez@colorado.edu>
2339
2348
2340 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2349 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2341 fail for any number.
2350 fail for any number.
2342 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2351 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2343 empty bookmarks.
2352 empty bookmarks.
2344
2353
2345 2004-07-26 *** Released version 0.6.1
2354 2004-07-26 *** Released version 0.6.1
2346
2355
2347 2004-07-26 Fernando Perez <fperez@colorado.edu>
2356 2004-07-26 Fernando Perez <fperez@colorado.edu>
2348
2357
2349 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2358 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2350
2359
2351 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2360 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2352 escaping '()[]{}' in filenames.
2361 escaping '()[]{}' in filenames.
2353
2362
2354 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2363 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2355 Python 2.2 users who lack a proper shlex.split.
2364 Python 2.2 users who lack a proper shlex.split.
2356
2365
2357 2004-07-19 Fernando Perez <fperez@colorado.edu>
2366 2004-07-19 Fernando Perez <fperez@colorado.edu>
2358
2367
2359 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2368 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2360 for reading readline's init file. I follow the normal chain:
2369 for reading readline's init file. I follow the normal chain:
2361 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2370 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2362 report by Mike Heeter. This closes
2371 report by Mike Heeter. This closes
2363 http://www.scipy.net/roundup/ipython/issue16.
2372 http://www.scipy.net/roundup/ipython/issue16.
2364
2373
2365 2004-07-18 Fernando Perez <fperez@colorado.edu>
2374 2004-07-18 Fernando Perez <fperez@colorado.edu>
2366
2375
2367 * IPython/iplib.py (__init__): Add better handling of '\' under
2376 * IPython/iplib.py (__init__): Add better handling of '\' under
2368 Win32 for filenames. After a patch by Ville.
2377 Win32 for filenames. After a patch by Ville.
2369
2378
2370 2004-07-17 Fernando Perez <fperez@colorado.edu>
2379 2004-07-17 Fernando Perez <fperez@colorado.edu>
2371
2380
2372 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2381 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2373 autocalling would be triggered for 'foo is bar' if foo is
2382 autocalling would be triggered for 'foo is bar' if foo is
2374 callable. I also cleaned up the autocall detection code to use a
2383 callable. I also cleaned up the autocall detection code to use a
2375 regexp, which is faster. Bug reported by Alexander Schmolck.
2384 regexp, which is faster. Bug reported by Alexander Schmolck.
2376
2385
2377 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2386 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2378 '?' in them would confuse the help system. Reported by Alex
2387 '?' in them would confuse the help system. Reported by Alex
2379 Schmolck.
2388 Schmolck.
2380
2389
2381 2004-07-16 Fernando Perez <fperez@colorado.edu>
2390 2004-07-16 Fernando Perez <fperez@colorado.edu>
2382
2391
2383 * IPython/GnuplotInteractive.py (__all__): added plot2.
2392 * IPython/GnuplotInteractive.py (__all__): added plot2.
2384
2393
2385 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2394 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2386 plotting dictionaries, lists or tuples of 1d arrays.
2395 plotting dictionaries, lists or tuples of 1d arrays.
2387
2396
2388 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2397 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2389 optimizations.
2398 optimizations.
2390
2399
2391 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2400 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2392 the information which was there from Janko's original IPP code:
2401 the information which was there from Janko's original IPP code:
2393
2402
2394 03.05.99 20:53 porto.ifm.uni-kiel.de
2403 03.05.99 20:53 porto.ifm.uni-kiel.de
2395 --Started changelog.
2404 --Started changelog.
2396 --make clear do what it say it does
2405 --make clear do what it say it does
2397 --added pretty output of lines from inputcache
2406 --added pretty output of lines from inputcache
2398 --Made Logger a mixin class, simplifies handling of switches
2407 --Made Logger a mixin class, simplifies handling of switches
2399 --Added own completer class. .string<TAB> expands to last history
2408 --Added own completer class. .string<TAB> expands to last history
2400 line which starts with string. The new expansion is also present
2409 line which starts with string. The new expansion is also present
2401 with Ctrl-r from the readline library. But this shows, who this
2410 with Ctrl-r from the readline library. But this shows, who this
2402 can be done for other cases.
2411 can be done for other cases.
2403 --Added convention that all shell functions should accept a
2412 --Added convention that all shell functions should accept a
2404 parameter_string This opens the door for different behaviour for
2413 parameter_string This opens the door for different behaviour for
2405 each function. @cd is a good example of this.
2414 each function. @cd is a good example of this.
2406
2415
2407 04.05.99 12:12 porto.ifm.uni-kiel.de
2416 04.05.99 12:12 porto.ifm.uni-kiel.de
2408 --added logfile rotation
2417 --added logfile rotation
2409 --added new mainloop method which freezes first the namespace
2418 --added new mainloop method which freezes first the namespace
2410
2419
2411 07.05.99 21:24 porto.ifm.uni-kiel.de
2420 07.05.99 21:24 porto.ifm.uni-kiel.de
2412 --added the docreader classes. Now there is a help system.
2421 --added the docreader classes. Now there is a help system.
2413 -This is only a first try. Currently it's not easy to put new
2422 -This is only a first try. Currently it's not easy to put new
2414 stuff in the indices. But this is the way to go. Info would be
2423 stuff in the indices. But this is the way to go. Info would be
2415 better, but HTML is every where and not everybody has an info
2424 better, but HTML is every where and not everybody has an info
2416 system installed and it's not so easy to change html-docs to info.
2425 system installed and it's not so easy to change html-docs to info.
2417 --added global logfile option
2426 --added global logfile option
2418 --there is now a hook for object inspection method pinfo needs to
2427 --there is now a hook for object inspection method pinfo needs to
2419 be provided for this. Can be reached by two '??'.
2428 be provided for this. Can be reached by two '??'.
2420
2429
2421 08.05.99 20:51 porto.ifm.uni-kiel.de
2430 08.05.99 20:51 porto.ifm.uni-kiel.de
2422 --added a README
2431 --added a README
2423 --bug in rc file. Something has changed so functions in the rc
2432 --bug in rc file. Something has changed so functions in the rc
2424 file need to reference the shell and not self. Not clear if it's a
2433 file need to reference the shell and not self. Not clear if it's a
2425 bug or feature.
2434 bug or feature.
2426 --changed rc file for new behavior
2435 --changed rc file for new behavior
2427
2436
2428 2004-07-15 Fernando Perez <fperez@colorado.edu>
2437 2004-07-15 Fernando Perez <fperez@colorado.edu>
2429
2438
2430 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2439 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2431 cache was falling out of sync in bizarre manners when multi-line
2440 cache was falling out of sync in bizarre manners when multi-line
2432 input was present. Minor optimizations and cleanup.
2441 input was present. Minor optimizations and cleanup.
2433
2442
2434 (Logger): Remove old Changelog info for cleanup. This is the
2443 (Logger): Remove old Changelog info for cleanup. This is the
2435 information which was there from Janko's original code:
2444 information which was there from Janko's original code:
2436
2445
2437 Changes to Logger: - made the default log filename a parameter
2446 Changes to Logger: - made the default log filename a parameter
2438
2447
2439 - put a check for lines beginning with !@? in log(). Needed
2448 - put a check for lines beginning with !@? in log(). Needed
2440 (even if the handlers properly log their lines) for mid-session
2449 (even if the handlers properly log their lines) for mid-session
2441 logging activation to work properly. Without this, lines logged
2450 logging activation to work properly. Without this, lines logged
2442 in mid session, which get read from the cache, would end up
2451 in mid session, which get read from the cache, would end up
2443 'bare' (with !@? in the open) in the log. Now they are caught
2452 'bare' (with !@? in the open) in the log. Now they are caught
2444 and prepended with a #.
2453 and prepended with a #.
2445
2454
2446 * IPython/iplib.py (InteractiveShell.init_readline): added check
2455 * IPython/iplib.py (InteractiveShell.init_readline): added check
2447 in case MagicCompleter fails to be defined, so we don't crash.
2456 in case MagicCompleter fails to be defined, so we don't crash.
2448
2457
2449 2004-07-13 Fernando Perez <fperez@colorado.edu>
2458 2004-07-13 Fernando Perez <fperez@colorado.edu>
2450
2459
2451 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2460 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2452 of EPS if the requested filename ends in '.eps'.
2461 of EPS if the requested filename ends in '.eps'.
2453
2462
2454 2004-07-04 Fernando Perez <fperez@colorado.edu>
2463 2004-07-04 Fernando Perez <fperez@colorado.edu>
2455
2464
2456 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2465 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2457 escaping of quotes when calling the shell.
2466 escaping of quotes when calling the shell.
2458
2467
2459 2004-07-02 Fernando Perez <fperez@colorado.edu>
2468 2004-07-02 Fernando Perez <fperez@colorado.edu>
2460
2469
2461 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2470 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2462 gettext not working because we were clobbering '_'. Fixes
2471 gettext not working because we were clobbering '_'. Fixes
2463 http://www.scipy.net/roundup/ipython/issue6.
2472 http://www.scipy.net/roundup/ipython/issue6.
2464
2473
2465 2004-07-01 Fernando Perez <fperez@colorado.edu>
2474 2004-07-01 Fernando Perez <fperez@colorado.edu>
2466
2475
2467 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2476 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2468 into @cd. Patch by Ville.
2477 into @cd. Patch by Ville.
2469
2478
2470 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2479 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2471 new function to store things after ipmaker runs. Patch by Ville.
2480 new function to store things after ipmaker runs. Patch by Ville.
2472 Eventually this will go away once ipmaker is removed and the class
2481 Eventually this will go away once ipmaker is removed and the class
2473 gets cleaned up, but for now it's ok. Key functionality here is
2482 gets cleaned up, but for now it's ok. Key functionality here is
2474 the addition of the persistent storage mechanism, a dict for
2483 the addition of the persistent storage mechanism, a dict for
2475 keeping data across sessions (for now just bookmarks, but more can
2484 keeping data across sessions (for now just bookmarks, but more can
2476 be implemented later).
2485 be implemented later).
2477
2486
2478 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2487 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2479 persistent across sections. Patch by Ville, I modified it
2488 persistent across sections. Patch by Ville, I modified it
2480 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2489 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2481 added a '-l' option to list all bookmarks.
2490 added a '-l' option to list all bookmarks.
2482
2491
2483 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2492 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2484 center for cleanup. Registered with atexit.register(). I moved
2493 center for cleanup. Registered with atexit.register(). I moved
2485 here the old exit_cleanup(). After a patch by Ville.
2494 here the old exit_cleanup(). After a patch by Ville.
2486
2495
2487 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2496 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2488 characters in the hacked shlex_split for python 2.2.
2497 characters in the hacked shlex_split for python 2.2.
2489
2498
2490 * IPython/iplib.py (file_matches): more fixes to filenames with
2499 * IPython/iplib.py (file_matches): more fixes to filenames with
2491 whitespace in them. It's not perfect, but limitations in python's
2500 whitespace in them. It's not perfect, but limitations in python's
2492 readline make it impossible to go further.
2501 readline make it impossible to go further.
2493
2502
2494 2004-06-29 Fernando Perez <fperez@colorado.edu>
2503 2004-06-29 Fernando Perez <fperez@colorado.edu>
2495
2504
2496 * IPython/iplib.py (file_matches): escape whitespace correctly in
2505 * IPython/iplib.py (file_matches): escape whitespace correctly in
2497 filename completions. Bug reported by Ville.
2506 filename completions. Bug reported by Ville.
2498
2507
2499 2004-06-28 Fernando Perez <fperez@colorado.edu>
2508 2004-06-28 Fernando Perez <fperez@colorado.edu>
2500
2509
2501 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2510 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2502 the history file will be called 'history-PROFNAME' (or just
2511 the history file will be called 'history-PROFNAME' (or just
2503 'history' if no profile is loaded). I was getting annoyed at
2512 'history' if no profile is loaded). I was getting annoyed at
2504 getting my Numerical work history clobbered by pysh sessions.
2513 getting my Numerical work history clobbered by pysh sessions.
2505
2514
2506 * IPython/iplib.py (InteractiveShell.__init__): Internal
2515 * IPython/iplib.py (InteractiveShell.__init__): Internal
2507 getoutputerror() function so that we can honor the system_verbose
2516 getoutputerror() function so that we can honor the system_verbose
2508 flag for _all_ system calls. I also added escaping of #
2517 flag for _all_ system calls. I also added escaping of #
2509 characters here to avoid confusing Itpl.
2518 characters here to avoid confusing Itpl.
2510
2519
2511 * IPython/Magic.py (shlex_split): removed call to shell in
2520 * IPython/Magic.py (shlex_split): removed call to shell in
2512 parse_options and replaced it with shlex.split(). The annoying
2521 parse_options and replaced it with shlex.split(). The annoying
2513 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2522 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2514 to backport it from 2.3, with several frail hacks (the shlex
2523 to backport it from 2.3, with several frail hacks (the shlex
2515 module is rather limited in 2.2). Thanks to a suggestion by Ville
2524 module is rather limited in 2.2). Thanks to a suggestion by Ville
2516 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2525 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2517 problem.
2526 problem.
2518
2527
2519 (Magic.magic_system_verbose): new toggle to print the actual
2528 (Magic.magic_system_verbose): new toggle to print the actual
2520 system calls made by ipython. Mainly for debugging purposes.
2529 system calls made by ipython. Mainly for debugging purposes.
2521
2530
2522 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2531 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2523 doesn't support persistence. Reported (and fix suggested) by
2532 doesn't support persistence. Reported (and fix suggested) by
2524 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2533 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2525
2534
2526 2004-06-26 Fernando Perez <fperez@colorado.edu>
2535 2004-06-26 Fernando Perez <fperez@colorado.edu>
2527
2536
2528 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2537 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2529 continue prompts.
2538 continue prompts.
2530
2539
2531 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2540 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2532 function (basically a big docstring) and a few more things here to
2541 function (basically a big docstring) and a few more things here to
2533 speedup startup. pysh.py is now very lightweight. We want because
2542 speedup startup. pysh.py is now very lightweight. We want because
2534 it gets execfile'd, while InterpreterExec gets imported, so
2543 it gets execfile'd, while InterpreterExec gets imported, so
2535 byte-compilation saves time.
2544 byte-compilation saves time.
2536
2545
2537 2004-06-25 Fernando Perez <fperez@colorado.edu>
2546 2004-06-25 Fernando Perez <fperez@colorado.edu>
2538
2547
2539 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2548 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2540 -NUM', which was recently broken.
2549 -NUM', which was recently broken.
2541
2550
2542 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2551 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2543 in multi-line input (but not !!, which doesn't make sense there).
2552 in multi-line input (but not !!, which doesn't make sense there).
2544
2553
2545 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2554 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2546 It's just too useful, and people can turn it off in the less
2555 It's just too useful, and people can turn it off in the less
2547 common cases where it's a problem.
2556 common cases where it's a problem.
2548
2557
2549 2004-06-24 Fernando Perez <fperez@colorado.edu>
2558 2004-06-24 Fernando Perez <fperez@colorado.edu>
2550
2559
2551 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2560 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2552 special syntaxes (like alias calling) is now allied in multi-line
2561 special syntaxes (like alias calling) is now allied in multi-line
2553 input. This is still _very_ experimental, but it's necessary for
2562 input. This is still _very_ experimental, but it's necessary for
2554 efficient shell usage combining python looping syntax with system
2563 efficient shell usage combining python looping syntax with system
2555 calls. For now it's restricted to aliases, I don't think it
2564 calls. For now it's restricted to aliases, I don't think it
2556 really even makes sense to have this for magics.
2565 really even makes sense to have this for magics.
2557
2566
2558 2004-06-23 Fernando Perez <fperez@colorado.edu>
2567 2004-06-23 Fernando Perez <fperez@colorado.edu>
2559
2568
2560 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2569 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2561 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2570 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2562
2571
2563 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2572 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2564 extensions under Windows (after code sent by Gary Bishop). The
2573 extensions under Windows (after code sent by Gary Bishop). The
2565 extensions considered 'executable' are stored in IPython's rc
2574 extensions considered 'executable' are stored in IPython's rc
2566 structure as win_exec_ext.
2575 structure as win_exec_ext.
2567
2576
2568 * IPython/genutils.py (shell): new function, like system() but
2577 * IPython/genutils.py (shell): new function, like system() but
2569 without return value. Very useful for interactive shell work.
2578 without return value. Very useful for interactive shell work.
2570
2579
2571 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2580 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2572 delete aliases.
2581 delete aliases.
2573
2582
2574 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2583 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2575 sure that the alias table doesn't contain python keywords.
2584 sure that the alias table doesn't contain python keywords.
2576
2585
2577 2004-06-21 Fernando Perez <fperez@colorado.edu>
2586 2004-06-21 Fernando Perez <fperez@colorado.edu>
2578
2587
2579 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2588 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2580 non-existent items are found in $PATH. Reported by Thorsten.
2589 non-existent items are found in $PATH. Reported by Thorsten.
2581
2590
2582 2004-06-20 Fernando Perez <fperez@colorado.edu>
2591 2004-06-20 Fernando Perez <fperez@colorado.edu>
2583
2592
2584 * IPython/iplib.py (complete): modified the completer so that the
2593 * IPython/iplib.py (complete): modified the completer so that the
2585 order of priorities can be easily changed at runtime.
2594 order of priorities can be easily changed at runtime.
2586
2595
2587 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2596 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2588 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2597 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2589
2598
2590 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2599 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2591 expand Python variables prepended with $ in all system calls. The
2600 expand Python variables prepended with $ in all system calls. The
2592 same was done to InteractiveShell.handle_shell_escape. Now all
2601 same was done to InteractiveShell.handle_shell_escape. Now all
2593 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2602 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2594 expansion of python variables and expressions according to the
2603 expansion of python variables and expressions according to the
2595 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2604 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2596
2605
2597 Though PEP-215 has been rejected, a similar (but simpler) one
2606 Though PEP-215 has been rejected, a similar (but simpler) one
2598 seems like it will go into Python 2.4, PEP-292 -
2607 seems like it will go into Python 2.4, PEP-292 -
2599 http://www.python.org/peps/pep-0292.html.
2608 http://www.python.org/peps/pep-0292.html.
2600
2609
2601 I'll keep the full syntax of PEP-215, since IPython has since the
2610 I'll keep the full syntax of PEP-215, since IPython has since the
2602 start used Ka-Ping Yee's reference implementation discussed there
2611 start used Ka-Ping Yee's reference implementation discussed there
2603 (Itpl), and I actually like the powerful semantics it offers.
2612 (Itpl), and I actually like the powerful semantics it offers.
2604
2613
2605 In order to access normal shell variables, the $ has to be escaped
2614 In order to access normal shell variables, the $ has to be escaped
2606 via an extra $. For example:
2615 via an extra $. For example:
2607
2616
2608 In [7]: PATH='a python variable'
2617 In [7]: PATH='a python variable'
2609
2618
2610 In [8]: !echo $PATH
2619 In [8]: !echo $PATH
2611 a python variable
2620 a python variable
2612
2621
2613 In [9]: !echo $$PATH
2622 In [9]: !echo $$PATH
2614 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2623 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2615
2624
2616 (Magic.parse_options): escape $ so the shell doesn't evaluate
2625 (Magic.parse_options): escape $ so the shell doesn't evaluate
2617 things prematurely.
2626 things prematurely.
2618
2627
2619 * IPython/iplib.py (InteractiveShell.call_alias): added the
2628 * IPython/iplib.py (InteractiveShell.call_alias): added the
2620 ability for aliases to expand python variables via $.
2629 ability for aliases to expand python variables via $.
2621
2630
2622 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2631 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2623 system, now there's a @rehash/@rehashx pair of magics. These work
2632 system, now there's a @rehash/@rehashx pair of magics. These work
2624 like the csh rehash command, and can be invoked at any time. They
2633 like the csh rehash command, and can be invoked at any time. They
2625 build a table of aliases to everything in the user's $PATH
2634 build a table of aliases to everything in the user's $PATH
2626 (@rehash uses everything, @rehashx is slower but only adds
2635 (@rehash uses everything, @rehashx is slower but only adds
2627 executable files). With this, the pysh.py-based shell profile can
2636 executable files). With this, the pysh.py-based shell profile can
2628 now simply call rehash upon startup, and full access to all
2637 now simply call rehash upon startup, and full access to all
2629 programs in the user's path is obtained.
2638 programs in the user's path is obtained.
2630
2639
2631 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2640 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2632 functionality is now fully in place. I removed the old dynamic
2641 functionality is now fully in place. I removed the old dynamic
2633 code generation based approach, in favor of a much lighter one
2642 code generation based approach, in favor of a much lighter one
2634 based on a simple dict. The advantage is that this allows me to
2643 based on a simple dict. The advantage is that this allows me to
2635 now have thousands of aliases with negligible cost (unthinkable
2644 now have thousands of aliases with negligible cost (unthinkable
2636 with the old system).
2645 with the old system).
2637
2646
2638 2004-06-19 Fernando Perez <fperez@colorado.edu>
2647 2004-06-19 Fernando Perez <fperez@colorado.edu>
2639
2648
2640 * IPython/iplib.py (__init__): extended MagicCompleter class to
2649 * IPython/iplib.py (__init__): extended MagicCompleter class to
2641 also complete (last in priority) on user aliases.
2650 also complete (last in priority) on user aliases.
2642
2651
2643 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2652 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2644 call to eval.
2653 call to eval.
2645 (ItplNS.__init__): Added a new class which functions like Itpl,
2654 (ItplNS.__init__): Added a new class which functions like Itpl,
2646 but allows configuring the namespace for the evaluation to occur
2655 but allows configuring the namespace for the evaluation to occur
2647 in.
2656 in.
2648
2657
2649 2004-06-18 Fernando Perez <fperez@colorado.edu>
2658 2004-06-18 Fernando Perez <fperez@colorado.edu>
2650
2659
2651 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2660 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2652 better message when 'exit' or 'quit' are typed (a common newbie
2661 better message when 'exit' or 'quit' are typed (a common newbie
2653 confusion).
2662 confusion).
2654
2663
2655 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2664 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2656 check for Windows users.
2665 check for Windows users.
2657
2666
2658 * IPython/iplib.py (InteractiveShell.user_setup): removed
2667 * IPython/iplib.py (InteractiveShell.user_setup): removed
2659 disabling of colors for Windows. I'll test at runtime and issue a
2668 disabling of colors for Windows. I'll test at runtime and issue a
2660 warning if Gary's readline isn't found, as to nudge users to
2669 warning if Gary's readline isn't found, as to nudge users to
2661 download it.
2670 download it.
2662
2671
2663 2004-06-16 Fernando Perez <fperez@colorado.edu>
2672 2004-06-16 Fernando Perez <fperez@colorado.edu>
2664
2673
2665 * IPython/genutils.py (Stream.__init__): changed to print errors
2674 * IPython/genutils.py (Stream.__init__): changed to print errors
2666 to sys.stderr. I had a circular dependency here. Now it's
2675 to sys.stderr. I had a circular dependency here. Now it's
2667 possible to run ipython as IDLE's shell (consider this pre-alpha,
2676 possible to run ipython as IDLE's shell (consider this pre-alpha,
2668 since true stdout things end up in the starting terminal instead
2677 since true stdout things end up in the starting terminal instead
2669 of IDLE's out).
2678 of IDLE's out).
2670
2679
2671 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2680 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2672 users who haven't # updated their prompt_in2 definitions. Remove
2681 users who haven't # updated their prompt_in2 definitions. Remove
2673 eventually.
2682 eventually.
2674 (multiple_replace): added credit to original ASPN recipe.
2683 (multiple_replace): added credit to original ASPN recipe.
2675
2684
2676 2004-06-15 Fernando Perez <fperez@colorado.edu>
2685 2004-06-15 Fernando Perez <fperez@colorado.edu>
2677
2686
2678 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2687 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2679 list of auto-defined aliases.
2688 list of auto-defined aliases.
2680
2689
2681 2004-06-13 Fernando Perez <fperez@colorado.edu>
2690 2004-06-13 Fernando Perez <fperez@colorado.edu>
2682
2691
2683 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2692 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2684 install was really requested (so setup.py can be used for other
2693 install was really requested (so setup.py can be used for other
2685 things under Windows).
2694 things under Windows).
2686
2695
2687 2004-06-10 Fernando Perez <fperez@colorado.edu>
2696 2004-06-10 Fernando Perez <fperez@colorado.edu>
2688
2697
2689 * IPython/Logger.py (Logger.create_log): Manually remove any old
2698 * IPython/Logger.py (Logger.create_log): Manually remove any old
2690 backup, since os.remove may fail under Windows. Fixes bug
2699 backup, since os.remove may fail under Windows. Fixes bug
2691 reported by Thorsten.
2700 reported by Thorsten.
2692
2701
2693 2004-06-09 Fernando Perez <fperez@colorado.edu>
2702 2004-06-09 Fernando Perez <fperez@colorado.edu>
2694
2703
2695 * examples/example-embed.py: fixed all references to %n (replaced
2704 * examples/example-embed.py: fixed all references to %n (replaced
2696 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2705 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2697 for all examples and the manual as well.
2706 for all examples and the manual as well.
2698
2707
2699 2004-06-08 Fernando Perez <fperez@colorado.edu>
2708 2004-06-08 Fernando Perez <fperez@colorado.edu>
2700
2709
2701 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2710 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2702 alignment and color management. All 3 prompt subsystems now
2711 alignment and color management. All 3 prompt subsystems now
2703 inherit from BasePrompt.
2712 inherit from BasePrompt.
2704
2713
2705 * tools/release: updates for windows installer build and tag rpms
2714 * tools/release: updates for windows installer build and tag rpms
2706 with python version (since paths are fixed).
2715 with python version (since paths are fixed).
2707
2716
2708 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2717 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2709 which will become eventually obsolete. Also fixed the default
2718 which will become eventually obsolete. Also fixed the default
2710 prompt_in2 to use \D, so at least new users start with the correct
2719 prompt_in2 to use \D, so at least new users start with the correct
2711 defaults.
2720 defaults.
2712 WARNING: Users with existing ipythonrc files will need to apply
2721 WARNING: Users with existing ipythonrc files will need to apply
2713 this fix manually!
2722 this fix manually!
2714
2723
2715 * setup.py: make windows installer (.exe). This is finally the
2724 * setup.py: make windows installer (.exe). This is finally the
2716 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2725 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2717 which I hadn't included because it required Python 2.3 (or recent
2726 which I hadn't included because it required Python 2.3 (or recent
2718 distutils).
2727 distutils).
2719
2728
2720 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2729 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2721 usage of new '\D' escape.
2730 usage of new '\D' escape.
2722
2731
2723 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2732 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2724 lacks os.getuid())
2733 lacks os.getuid())
2725 (CachedOutput.set_colors): Added the ability to turn coloring
2734 (CachedOutput.set_colors): Added the ability to turn coloring
2726 on/off with @colors even for manually defined prompt colors. It
2735 on/off with @colors even for manually defined prompt colors. It
2727 uses a nasty global, but it works safely and via the generic color
2736 uses a nasty global, but it works safely and via the generic color
2728 handling mechanism.
2737 handling mechanism.
2729 (Prompt2.__init__): Introduced new escape '\D' for continuation
2738 (Prompt2.__init__): Introduced new escape '\D' for continuation
2730 prompts. It represents the counter ('\#') as dots.
2739 prompts. It represents the counter ('\#') as dots.
2731 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2740 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2732 need to update their ipythonrc files and replace '%n' with '\D' in
2741 need to update their ipythonrc files and replace '%n' with '\D' in
2733 their prompt_in2 settings everywhere. Sorry, but there's
2742 their prompt_in2 settings everywhere. Sorry, but there's
2734 otherwise no clean way to get all prompts to properly align. The
2743 otherwise no clean way to get all prompts to properly align. The
2735 ipythonrc shipped with IPython has been updated.
2744 ipythonrc shipped with IPython has been updated.
2736
2745
2737 2004-06-07 Fernando Perez <fperez@colorado.edu>
2746 2004-06-07 Fernando Perez <fperez@colorado.edu>
2738
2747
2739 * setup.py (isfile): Pass local_icons option to latex2html, so the
2748 * setup.py (isfile): Pass local_icons option to latex2html, so the
2740 resulting HTML file is self-contained. Thanks to
2749 resulting HTML file is self-contained. Thanks to
2741 dryice-AT-liu.com.cn for the tip.
2750 dryice-AT-liu.com.cn for the tip.
2742
2751
2743 * pysh.py: I created a new profile 'shell', which implements a
2752 * pysh.py: I created a new profile 'shell', which implements a
2744 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2753 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2745 system shell, nor will it become one anytime soon. It's mainly
2754 system shell, nor will it become one anytime soon. It's mainly
2746 meant to illustrate the use of the new flexible bash-like prompts.
2755 meant to illustrate the use of the new flexible bash-like prompts.
2747 I guess it could be used by hardy souls for true shell management,
2756 I guess it could be used by hardy souls for true shell management,
2748 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2757 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2749 profile. This uses the InterpreterExec extension provided by
2758 profile. This uses the InterpreterExec extension provided by
2750 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2759 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2751
2760
2752 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2761 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2753 auto-align itself with the length of the previous input prompt
2762 auto-align itself with the length of the previous input prompt
2754 (taking into account the invisible color escapes).
2763 (taking into account the invisible color escapes).
2755 (CachedOutput.__init__): Large restructuring of this class. Now
2764 (CachedOutput.__init__): Large restructuring of this class. Now
2756 all three prompts (primary1, primary2, output) are proper objects,
2765 all three prompts (primary1, primary2, output) are proper objects,
2757 managed by the 'parent' CachedOutput class. The code is still a
2766 managed by the 'parent' CachedOutput class. The code is still a
2758 bit hackish (all prompts share state via a pointer to the cache),
2767 bit hackish (all prompts share state via a pointer to the cache),
2759 but it's overall far cleaner than before.
2768 but it's overall far cleaner than before.
2760
2769
2761 * IPython/genutils.py (getoutputerror): modified to add verbose,
2770 * IPython/genutils.py (getoutputerror): modified to add verbose,
2762 debug and header options. This makes the interface of all getout*
2771 debug and header options. This makes the interface of all getout*
2763 functions uniform.
2772 functions uniform.
2764 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2773 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2765
2774
2766 * IPython/Magic.py (Magic.default_option): added a function to
2775 * IPython/Magic.py (Magic.default_option): added a function to
2767 allow registering default options for any magic command. This
2776 allow registering default options for any magic command. This
2768 makes it easy to have profiles which customize the magics globally
2777 makes it easy to have profiles which customize the magics globally
2769 for a certain use. The values set through this function are
2778 for a certain use. The values set through this function are
2770 picked up by the parse_options() method, which all magics should
2779 picked up by the parse_options() method, which all magics should
2771 use to parse their options.
2780 use to parse their options.
2772
2781
2773 * IPython/genutils.py (warn): modified the warnings framework to
2782 * IPython/genutils.py (warn): modified the warnings framework to
2774 use the Term I/O class. I'm trying to slowly unify all of
2783 use the Term I/O class. I'm trying to slowly unify all of
2775 IPython's I/O operations to pass through Term.
2784 IPython's I/O operations to pass through Term.
2776
2785
2777 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2786 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2778 the secondary prompt to correctly match the length of the primary
2787 the secondary prompt to correctly match the length of the primary
2779 one for any prompt. Now multi-line code will properly line up
2788 one for any prompt. Now multi-line code will properly line up
2780 even for path dependent prompts, such as the new ones available
2789 even for path dependent prompts, such as the new ones available
2781 via the prompt_specials.
2790 via the prompt_specials.
2782
2791
2783 2004-06-06 Fernando Perez <fperez@colorado.edu>
2792 2004-06-06 Fernando Perez <fperez@colorado.edu>
2784
2793
2785 * IPython/Prompts.py (prompt_specials): Added the ability to have
2794 * IPython/Prompts.py (prompt_specials): Added the ability to have
2786 bash-like special sequences in the prompts, which get
2795 bash-like special sequences in the prompts, which get
2787 automatically expanded. Things like hostname, current working
2796 automatically expanded. Things like hostname, current working
2788 directory and username are implemented already, but it's easy to
2797 directory and username are implemented already, but it's easy to
2789 add more in the future. Thanks to a patch by W.J. van der Laan
2798 add more in the future. Thanks to a patch by W.J. van der Laan
2790 <gnufnork-AT-hetdigitalegat.nl>
2799 <gnufnork-AT-hetdigitalegat.nl>
2791 (prompt_specials): Added color support for prompt strings, so
2800 (prompt_specials): Added color support for prompt strings, so
2792 users can define arbitrary color setups for their prompts.
2801 users can define arbitrary color setups for their prompts.
2793
2802
2794 2004-06-05 Fernando Perez <fperez@colorado.edu>
2803 2004-06-05 Fernando Perez <fperez@colorado.edu>
2795
2804
2796 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2805 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2797 code to load Gary Bishop's readline and configure it
2806 code to load Gary Bishop's readline and configure it
2798 automatically. Thanks to Gary for help on this.
2807 automatically. Thanks to Gary for help on this.
2799
2808
2800 2004-06-01 Fernando Perez <fperez@colorado.edu>
2809 2004-06-01 Fernando Perez <fperez@colorado.edu>
2801
2810
2802 * IPython/Logger.py (Logger.create_log): fix bug for logging
2811 * IPython/Logger.py (Logger.create_log): fix bug for logging
2803 with no filename (previous fix was incomplete).
2812 with no filename (previous fix was incomplete).
2804
2813
2805 2004-05-25 Fernando Perez <fperez@colorado.edu>
2814 2004-05-25 Fernando Perez <fperez@colorado.edu>
2806
2815
2807 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2816 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2808 parens would get passed to the shell.
2817 parens would get passed to the shell.
2809
2818
2810 2004-05-20 Fernando Perez <fperez@colorado.edu>
2819 2004-05-20 Fernando Perez <fperez@colorado.edu>
2811
2820
2812 * IPython/Magic.py (Magic.magic_prun): changed default profile
2821 * IPython/Magic.py (Magic.magic_prun): changed default profile
2813 sort order to 'time' (the more common profiling need).
2822 sort order to 'time' (the more common profiling need).
2814
2823
2815 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2824 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2816 so that source code shown is guaranteed in sync with the file on
2825 so that source code shown is guaranteed in sync with the file on
2817 disk (also changed in psource). Similar fix to the one for
2826 disk (also changed in psource). Similar fix to the one for
2818 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2827 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2819 <yann.ledu-AT-noos.fr>.
2828 <yann.ledu-AT-noos.fr>.
2820
2829
2821 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2830 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2822 with a single option would not be correctly parsed. Closes
2831 with a single option would not be correctly parsed. Closes
2823 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2832 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2824 introduced in 0.6.0 (on 2004-05-06).
2833 introduced in 0.6.0 (on 2004-05-06).
2825
2834
2826 2004-05-13 *** Released version 0.6.0
2835 2004-05-13 *** Released version 0.6.0
2827
2836
2828 2004-05-13 Fernando Perez <fperez@colorado.edu>
2837 2004-05-13 Fernando Perez <fperez@colorado.edu>
2829
2838
2830 * debian/: Added debian/ directory to CVS, so that debian support
2839 * debian/: Added debian/ directory to CVS, so that debian support
2831 is publicly accessible. The debian package is maintained by Jack
2840 is publicly accessible. The debian package is maintained by Jack
2832 Moffit <jack-AT-xiph.org>.
2841 Moffit <jack-AT-xiph.org>.
2833
2842
2834 * Documentation: included the notes about an ipython-based system
2843 * Documentation: included the notes about an ipython-based system
2835 shell (the hypothetical 'pysh') into the new_design.pdf document,
2844 shell (the hypothetical 'pysh') into the new_design.pdf document,
2836 so that these ideas get distributed to users along with the
2845 so that these ideas get distributed to users along with the
2837 official documentation.
2846 official documentation.
2838
2847
2839 2004-05-10 Fernando Perez <fperez@colorado.edu>
2848 2004-05-10 Fernando Perez <fperez@colorado.edu>
2840
2849
2841 * IPython/Logger.py (Logger.create_log): fix recently introduced
2850 * IPython/Logger.py (Logger.create_log): fix recently introduced
2842 bug (misindented line) where logstart would fail when not given an
2851 bug (misindented line) where logstart would fail when not given an
2843 explicit filename.
2852 explicit filename.
2844
2853
2845 2004-05-09 Fernando Perez <fperez@colorado.edu>
2854 2004-05-09 Fernando Perez <fperez@colorado.edu>
2846
2855
2847 * IPython/Magic.py (Magic.parse_options): skip system call when
2856 * IPython/Magic.py (Magic.parse_options): skip system call when
2848 there are no options to look for. Faster, cleaner for the common
2857 there are no options to look for. Faster, cleaner for the common
2849 case.
2858 case.
2850
2859
2851 * Documentation: many updates to the manual: describing Windows
2860 * Documentation: many updates to the manual: describing Windows
2852 support better, Gnuplot updates, credits, misc small stuff. Also
2861 support better, Gnuplot updates, credits, misc small stuff. Also
2853 updated the new_design doc a bit.
2862 updated the new_design doc a bit.
2854
2863
2855 2004-05-06 *** Released version 0.6.0.rc1
2864 2004-05-06 *** Released version 0.6.0.rc1
2856
2865
2857 2004-05-06 Fernando Perez <fperez@colorado.edu>
2866 2004-05-06 Fernando Perez <fperez@colorado.edu>
2858
2867
2859 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2868 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2860 operations to use the vastly more efficient list/''.join() method.
2869 operations to use the vastly more efficient list/''.join() method.
2861 (FormattedTB.text): Fix
2870 (FormattedTB.text): Fix
2862 http://www.scipy.net/roundup/ipython/issue12 - exception source
2871 http://www.scipy.net/roundup/ipython/issue12 - exception source
2863 extract not updated after reload. Thanks to Mike Salib
2872 extract not updated after reload. Thanks to Mike Salib
2864 <msalib-AT-mit.edu> for pinning the source of the problem.
2873 <msalib-AT-mit.edu> for pinning the source of the problem.
2865 Fortunately, the solution works inside ipython and doesn't require
2874 Fortunately, the solution works inside ipython and doesn't require
2866 any changes to python proper.
2875 any changes to python proper.
2867
2876
2868 * IPython/Magic.py (Magic.parse_options): Improved to process the
2877 * IPython/Magic.py (Magic.parse_options): Improved to process the
2869 argument list as a true shell would (by actually using the
2878 argument list as a true shell would (by actually using the
2870 underlying system shell). This way, all @magics automatically get
2879 underlying system shell). This way, all @magics automatically get
2871 shell expansion for variables. Thanks to a comment by Alex
2880 shell expansion for variables. Thanks to a comment by Alex
2872 Schmolck.
2881 Schmolck.
2873
2882
2874 2004-04-04 Fernando Perez <fperez@colorado.edu>
2883 2004-04-04 Fernando Perez <fperez@colorado.edu>
2875
2884
2876 * IPython/iplib.py (InteractiveShell.interact): Added a special
2885 * IPython/iplib.py (InteractiveShell.interact): Added a special
2877 trap for a debugger quit exception, which is basically impossible
2886 trap for a debugger quit exception, which is basically impossible
2878 to handle by normal mechanisms, given what pdb does to the stack.
2887 to handle by normal mechanisms, given what pdb does to the stack.
2879 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2888 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2880
2889
2881 2004-04-03 Fernando Perez <fperez@colorado.edu>
2890 2004-04-03 Fernando Perez <fperez@colorado.edu>
2882
2891
2883 * IPython/genutils.py (Term): Standardized the names of the Term
2892 * IPython/genutils.py (Term): Standardized the names of the Term
2884 class streams to cin/cout/cerr, following C++ naming conventions
2893 class streams to cin/cout/cerr, following C++ naming conventions
2885 (I can't use in/out/err because 'in' is not a valid attribute
2894 (I can't use in/out/err because 'in' is not a valid attribute
2886 name).
2895 name).
2887
2896
2888 * IPython/iplib.py (InteractiveShell.interact): don't increment
2897 * IPython/iplib.py (InteractiveShell.interact): don't increment
2889 the prompt if there's no user input. By Daniel 'Dang' Griffith
2898 the prompt if there's no user input. By Daniel 'Dang' Griffith
2890 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2899 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2891 Francois Pinard.
2900 Francois Pinard.
2892
2901
2893 2004-04-02 Fernando Perez <fperez@colorado.edu>
2902 2004-04-02 Fernando Perez <fperez@colorado.edu>
2894
2903
2895 * IPython/genutils.py (Stream.__init__): Modified to survive at
2904 * IPython/genutils.py (Stream.__init__): Modified to survive at
2896 least importing in contexts where stdin/out/err aren't true file
2905 least importing in contexts where stdin/out/err aren't true file
2897 objects, such as PyCrust (they lack fileno() and mode). However,
2906 objects, such as PyCrust (they lack fileno() and mode). However,
2898 the recovery facilities which rely on these things existing will
2907 the recovery facilities which rely on these things existing will
2899 not work.
2908 not work.
2900
2909
2901 2004-04-01 Fernando Perez <fperez@colorado.edu>
2910 2004-04-01 Fernando Perez <fperez@colorado.edu>
2902
2911
2903 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2912 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2904 use the new getoutputerror() function, so it properly
2913 use the new getoutputerror() function, so it properly
2905 distinguishes stdout/err.
2914 distinguishes stdout/err.
2906
2915
2907 * IPython/genutils.py (getoutputerror): added a function to
2916 * IPython/genutils.py (getoutputerror): added a function to
2908 capture separately the standard output and error of a command.
2917 capture separately the standard output and error of a command.
2909 After a comment from dang on the mailing lists. This code is
2918 After a comment from dang on the mailing lists. This code is
2910 basically a modified version of commands.getstatusoutput(), from
2919 basically a modified version of commands.getstatusoutput(), from
2911 the standard library.
2920 the standard library.
2912
2921
2913 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2922 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2914 '!!' as a special syntax (shorthand) to access @sx.
2923 '!!' as a special syntax (shorthand) to access @sx.
2915
2924
2916 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2925 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2917 command and return its output as a list split on '\n'.
2926 command and return its output as a list split on '\n'.
2918
2927
2919 2004-03-31 Fernando Perez <fperez@colorado.edu>
2928 2004-03-31 Fernando Perez <fperez@colorado.edu>
2920
2929
2921 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2930 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2922 method to dictionaries used as FakeModule instances if they lack
2931 method to dictionaries used as FakeModule instances if they lack
2923 it. At least pydoc in python2.3 breaks for runtime-defined
2932 it. At least pydoc in python2.3 breaks for runtime-defined
2924 functions without this hack. At some point I need to _really_
2933 functions without this hack. At some point I need to _really_
2925 understand what FakeModule is doing, because it's a gross hack.
2934 understand what FakeModule is doing, because it's a gross hack.
2926 But it solves Arnd's problem for now...
2935 But it solves Arnd's problem for now...
2927
2936
2928 2004-02-27 Fernando Perez <fperez@colorado.edu>
2937 2004-02-27 Fernando Perez <fperez@colorado.edu>
2929
2938
2930 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2939 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2931 mode would behave erratically. Also increased the number of
2940 mode would behave erratically. Also increased the number of
2932 possible logs in rotate mod to 999. Thanks to Rod Holland
2941 possible logs in rotate mod to 999. Thanks to Rod Holland
2933 <rhh@StructureLABS.com> for the report and fixes.
2942 <rhh@StructureLABS.com> for the report and fixes.
2934
2943
2935 2004-02-26 Fernando Perez <fperez@colorado.edu>
2944 2004-02-26 Fernando Perez <fperez@colorado.edu>
2936
2945
2937 * IPython/genutils.py (page): Check that the curses module really
2946 * IPython/genutils.py (page): Check that the curses module really
2938 has the initscr attribute before trying to use it. For some
2947 has the initscr attribute before trying to use it. For some
2939 reason, the Solaris curses module is missing this. I think this
2948 reason, the Solaris curses module is missing this. I think this
2940 should be considered a Solaris python bug, but I'm not sure.
2949 should be considered a Solaris python bug, but I'm not sure.
2941
2950
2942 2004-01-17 Fernando Perez <fperez@colorado.edu>
2951 2004-01-17 Fernando Perez <fperez@colorado.edu>
2943
2952
2944 * IPython/genutils.py (Stream.__init__): Changes to try to make
2953 * IPython/genutils.py (Stream.__init__): Changes to try to make
2945 ipython robust against stdin/out/err being closed by the user.
2954 ipython robust against stdin/out/err being closed by the user.
2946 This is 'user error' (and blocks a normal python session, at least
2955 This is 'user error' (and blocks a normal python session, at least
2947 the stdout case). However, Ipython should be able to survive such
2956 the stdout case). However, Ipython should be able to survive such
2948 instances of abuse as gracefully as possible. To simplify the
2957 instances of abuse as gracefully as possible. To simplify the
2949 coding and maintain compatibility with Gary Bishop's Term
2958 coding and maintain compatibility with Gary Bishop's Term
2950 contributions, I've made use of classmethods for this. I think
2959 contributions, I've made use of classmethods for this. I think
2951 this introduces a dependency on python 2.2.
2960 this introduces a dependency on python 2.2.
2952
2961
2953 2004-01-13 Fernando Perez <fperez@colorado.edu>
2962 2004-01-13 Fernando Perez <fperez@colorado.edu>
2954
2963
2955 * IPython/numutils.py (exp_safe): simplified the code a bit and
2964 * IPython/numutils.py (exp_safe): simplified the code a bit and
2956 removed the need for importing the kinds module altogether.
2965 removed the need for importing the kinds module altogether.
2957
2966
2958 2004-01-06 Fernando Perez <fperez@colorado.edu>
2967 2004-01-06 Fernando Perez <fperez@colorado.edu>
2959
2968
2960 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2969 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2961 a magic function instead, after some community feedback. No
2970 a magic function instead, after some community feedback. No
2962 special syntax will exist for it, but its name is deliberately
2971 special syntax will exist for it, but its name is deliberately
2963 very short.
2972 very short.
2964
2973
2965 2003-12-20 Fernando Perez <fperez@colorado.edu>
2974 2003-12-20 Fernando Perez <fperez@colorado.edu>
2966
2975
2967 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2976 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2968 new functionality, to automagically assign the result of a shell
2977 new functionality, to automagically assign the result of a shell
2969 command to a variable. I'll solicit some community feedback on
2978 command to a variable. I'll solicit some community feedback on
2970 this before making it permanent.
2979 this before making it permanent.
2971
2980
2972 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2981 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2973 requested about callables for which inspect couldn't obtain a
2982 requested about callables for which inspect couldn't obtain a
2974 proper argspec. Thanks to a crash report sent by Etienne
2983 proper argspec. Thanks to a crash report sent by Etienne
2975 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2984 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2976
2985
2977 2003-12-09 Fernando Perez <fperez@colorado.edu>
2986 2003-12-09 Fernando Perez <fperez@colorado.edu>
2978
2987
2979 * IPython/genutils.py (page): patch for the pager to work across
2988 * IPython/genutils.py (page): patch for the pager to work across
2980 various versions of Windows. By Gary Bishop.
2989 various versions of Windows. By Gary Bishop.
2981
2990
2982 2003-12-04 Fernando Perez <fperez@colorado.edu>
2991 2003-12-04 Fernando Perez <fperez@colorado.edu>
2983
2992
2984 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2993 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2985 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2994 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2986 While I tested this and it looks ok, there may still be corner
2995 While I tested this and it looks ok, there may still be corner
2987 cases I've missed.
2996 cases I've missed.
2988
2997
2989 2003-12-01 Fernando Perez <fperez@colorado.edu>
2998 2003-12-01 Fernando Perez <fperez@colorado.edu>
2990
2999
2991 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3000 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2992 where a line like 'p,q=1,2' would fail because the automagic
3001 where a line like 'p,q=1,2' would fail because the automagic
2993 system would be triggered for @p.
3002 system would be triggered for @p.
2994
3003
2995 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3004 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2996 cleanups, code unmodified.
3005 cleanups, code unmodified.
2997
3006
2998 * IPython/genutils.py (Term): added a class for IPython to handle
3007 * IPython/genutils.py (Term): added a class for IPython to handle
2999 output. In most cases it will just be a proxy for stdout/err, but
3008 output. In most cases it will just be a proxy for stdout/err, but
3000 having this allows modifications to be made for some platforms,
3009 having this allows modifications to be made for some platforms,
3001 such as handling color escapes under Windows. All of this code
3010 such as handling color escapes under Windows. All of this code
3002 was contributed by Gary Bishop, with minor modifications by me.
3011 was contributed by Gary Bishop, with minor modifications by me.
3003 The actual changes affect many files.
3012 The actual changes affect many files.
3004
3013
3005 2003-11-30 Fernando Perez <fperez@colorado.edu>
3014 2003-11-30 Fernando Perez <fperez@colorado.edu>
3006
3015
3007 * IPython/iplib.py (file_matches): new completion code, courtesy
3016 * IPython/iplib.py (file_matches): new completion code, courtesy
3008 of Jeff Collins. This enables filename completion again under
3017 of Jeff Collins. This enables filename completion again under
3009 python 2.3, which disabled it at the C level.
3018 python 2.3, which disabled it at the C level.
3010
3019
3011 2003-11-11 Fernando Perez <fperez@colorado.edu>
3020 2003-11-11 Fernando Perez <fperez@colorado.edu>
3012
3021
3013 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3022 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3014 for Numeric.array(map(...)), but often convenient.
3023 for Numeric.array(map(...)), but often convenient.
3015
3024
3016 2003-11-05 Fernando Perez <fperez@colorado.edu>
3025 2003-11-05 Fernando Perez <fperez@colorado.edu>
3017
3026
3018 * IPython/numutils.py (frange): Changed a call from int() to
3027 * IPython/numutils.py (frange): Changed a call from int() to
3019 int(round()) to prevent a problem reported with arange() in the
3028 int(round()) to prevent a problem reported with arange() in the
3020 numpy list.
3029 numpy list.
3021
3030
3022 2003-10-06 Fernando Perez <fperez@colorado.edu>
3031 2003-10-06 Fernando Perez <fperez@colorado.edu>
3023
3032
3024 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3033 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3025 prevent crashes if sys lacks an argv attribute (it happens with
3034 prevent crashes if sys lacks an argv attribute (it happens with
3026 embedded interpreters which build a bare-bones sys module).
3035 embedded interpreters which build a bare-bones sys module).
3027 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3036 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3028
3037
3029 2003-09-24 Fernando Perez <fperez@colorado.edu>
3038 2003-09-24 Fernando Perez <fperez@colorado.edu>
3030
3039
3031 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3040 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3032 to protect against poorly written user objects where __getattr__
3041 to protect against poorly written user objects where __getattr__
3033 raises exceptions other than AttributeError. Thanks to a bug
3042 raises exceptions other than AttributeError. Thanks to a bug
3034 report by Oliver Sander <osander-AT-gmx.de>.
3043 report by Oliver Sander <osander-AT-gmx.de>.
3035
3044
3036 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3045 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3037 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3046 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3038
3047
3039 2003-09-09 Fernando Perez <fperez@colorado.edu>
3048 2003-09-09 Fernando Perez <fperez@colorado.edu>
3040
3049
3041 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3050 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3042 unpacking a list whith a callable as first element would
3051 unpacking a list whith a callable as first element would
3043 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3052 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3044 Collins.
3053 Collins.
3045
3054
3046 2003-08-25 *** Released version 0.5.0
3055 2003-08-25 *** Released version 0.5.0
3047
3056
3048 2003-08-22 Fernando Perez <fperez@colorado.edu>
3057 2003-08-22 Fernando Perez <fperez@colorado.edu>
3049
3058
3050 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3059 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3051 improperly defined user exceptions. Thanks to feedback from Mark
3060 improperly defined user exceptions. Thanks to feedback from Mark
3052 Russell <mrussell-AT-verio.net>.
3061 Russell <mrussell-AT-verio.net>.
3053
3062
3054 2003-08-20 Fernando Perez <fperez@colorado.edu>
3063 2003-08-20 Fernando Perez <fperez@colorado.edu>
3055
3064
3056 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3065 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3057 printing so that it would print multi-line string forms starting
3066 printing so that it would print multi-line string forms starting
3058 with a new line. This way the formatting is better respected for
3067 with a new line. This way the formatting is better respected for
3059 objects which work hard to make nice string forms.
3068 objects which work hard to make nice string forms.
3060
3069
3061 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3070 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3062 autocall would overtake data access for objects with both
3071 autocall would overtake data access for objects with both
3063 __getitem__ and __call__.
3072 __getitem__ and __call__.
3064
3073
3065 2003-08-19 *** Released version 0.5.0-rc1
3074 2003-08-19 *** Released version 0.5.0-rc1
3066
3075
3067 2003-08-19 Fernando Perez <fperez@colorado.edu>
3076 2003-08-19 Fernando Perez <fperez@colorado.edu>
3068
3077
3069 * IPython/deep_reload.py (load_tail): single tiny change here
3078 * IPython/deep_reload.py (load_tail): single tiny change here
3070 seems to fix the long-standing bug of dreload() failing to work
3079 seems to fix the long-standing bug of dreload() failing to work
3071 for dotted names. But this module is pretty tricky, so I may have
3080 for dotted names. But this module is pretty tricky, so I may have
3072 missed some subtlety. Needs more testing!.
3081 missed some subtlety. Needs more testing!.
3073
3082
3074 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3083 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3075 exceptions which have badly implemented __str__ methods.
3084 exceptions which have badly implemented __str__ methods.
3076 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3085 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3077 which I've been getting reports about from Python 2.3 users. I
3086 which I've been getting reports about from Python 2.3 users. I
3078 wish I had a simple test case to reproduce the problem, so I could
3087 wish I had a simple test case to reproduce the problem, so I could
3079 either write a cleaner workaround or file a bug report if
3088 either write a cleaner workaround or file a bug report if
3080 necessary.
3089 necessary.
3081
3090
3082 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3091 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3083 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3092 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3084 a bug report by Tjabo Kloppenburg.
3093 a bug report by Tjabo Kloppenburg.
3085
3094
3086 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3095 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3087 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3096 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3088 seems rather unstable. Thanks to a bug report by Tjabo
3097 seems rather unstable. Thanks to a bug report by Tjabo
3089 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3098 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3090
3099
3091 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3100 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3092 this out soon because of the critical fixes in the inner loop for
3101 this out soon because of the critical fixes in the inner loop for
3093 generators.
3102 generators.
3094
3103
3095 * IPython/Magic.py (Magic.getargspec): removed. This (and
3104 * IPython/Magic.py (Magic.getargspec): removed. This (and
3096 _get_def) have been obsoleted by OInspect for a long time, I
3105 _get_def) have been obsoleted by OInspect for a long time, I
3097 hadn't noticed that they were dead code.
3106 hadn't noticed that they were dead code.
3098 (Magic._ofind): restored _ofind functionality for a few literals
3107 (Magic._ofind): restored _ofind functionality for a few literals
3099 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3108 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3100 for things like "hello".capitalize?, since that would require a
3109 for things like "hello".capitalize?, since that would require a
3101 potentially dangerous eval() again.
3110 potentially dangerous eval() again.
3102
3111
3103 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3112 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3104 logic a bit more to clean up the escapes handling and minimize the
3113 logic a bit more to clean up the escapes handling and minimize the
3105 use of _ofind to only necessary cases. The interactive 'feel' of
3114 use of _ofind to only necessary cases. The interactive 'feel' of
3106 IPython should have improved quite a bit with the changes in
3115 IPython should have improved quite a bit with the changes in
3107 _prefilter and _ofind (besides being far safer than before).
3116 _prefilter and _ofind (besides being far safer than before).
3108
3117
3109 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3118 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3110 obscure, never reported). Edit would fail to find the object to
3119 obscure, never reported). Edit would fail to find the object to
3111 edit under some circumstances.
3120 edit under some circumstances.
3112 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3121 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3113 which were causing double-calling of generators. Those eval calls
3122 which were causing double-calling of generators. Those eval calls
3114 were _very_ dangerous, since code with side effects could be
3123 were _very_ dangerous, since code with side effects could be
3115 triggered. As they say, 'eval is evil'... These were the
3124 triggered. As they say, 'eval is evil'... These were the
3116 nastiest evals in IPython. Besides, _ofind is now far simpler,
3125 nastiest evals in IPython. Besides, _ofind is now far simpler,
3117 and it should also be quite a bit faster. Its use of inspect is
3126 and it should also be quite a bit faster. Its use of inspect is
3118 also safer, so perhaps some of the inspect-related crashes I've
3127 also safer, so perhaps some of the inspect-related crashes I've
3119 seen lately with Python 2.3 might be taken care of. That will
3128 seen lately with Python 2.3 might be taken care of. That will
3120 need more testing.
3129 need more testing.
3121
3130
3122 2003-08-17 Fernando Perez <fperez@colorado.edu>
3131 2003-08-17 Fernando Perez <fperez@colorado.edu>
3123
3132
3124 * IPython/iplib.py (InteractiveShell._prefilter): significant
3133 * IPython/iplib.py (InteractiveShell._prefilter): significant
3125 simplifications to the logic for handling user escapes. Faster
3134 simplifications to the logic for handling user escapes. Faster
3126 and simpler code.
3135 and simpler code.
3127
3136
3128 2003-08-14 Fernando Perez <fperez@colorado.edu>
3137 2003-08-14 Fernando Perez <fperez@colorado.edu>
3129
3138
3130 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3139 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3131 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3140 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3132 but it should be quite a bit faster. And the recursive version
3141 but it should be quite a bit faster. And the recursive version
3133 generated O(log N) intermediate storage for all rank>1 arrays,
3142 generated O(log N) intermediate storage for all rank>1 arrays,
3134 even if they were contiguous.
3143 even if they were contiguous.
3135 (l1norm): Added this function.
3144 (l1norm): Added this function.
3136 (norm): Added this function for arbitrary norms (including
3145 (norm): Added this function for arbitrary norms (including
3137 l-infinity). l1 and l2 are still special cases for convenience
3146 l-infinity). l1 and l2 are still special cases for convenience
3138 and speed.
3147 and speed.
3139
3148
3140 2003-08-03 Fernando Perez <fperez@colorado.edu>
3149 2003-08-03 Fernando Perez <fperez@colorado.edu>
3141
3150
3142 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3151 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3143 exceptions, which now raise PendingDeprecationWarnings in Python
3152 exceptions, which now raise PendingDeprecationWarnings in Python
3144 2.3. There were some in Magic and some in Gnuplot2.
3153 2.3. There were some in Magic and some in Gnuplot2.
3145
3154
3146 2003-06-30 Fernando Perez <fperez@colorado.edu>
3155 2003-06-30 Fernando Perez <fperez@colorado.edu>
3147
3156
3148 * IPython/genutils.py (page): modified to call curses only for
3157 * IPython/genutils.py (page): modified to call curses only for
3149 terminals where TERM=='xterm'. After problems under many other
3158 terminals where TERM=='xterm'. After problems under many other
3150 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3159 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3151
3160
3152 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3161 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3153 would be triggered when readline was absent. This was just an old
3162 would be triggered when readline was absent. This was just an old
3154 debugging statement I'd forgotten to take out.
3163 debugging statement I'd forgotten to take out.
3155
3164
3156 2003-06-20 Fernando Perez <fperez@colorado.edu>
3165 2003-06-20 Fernando Perez <fperez@colorado.edu>
3157
3166
3158 * IPython/genutils.py (clock): modified to return only user time
3167 * IPython/genutils.py (clock): modified to return only user time
3159 (not counting system time), after a discussion on scipy. While
3168 (not counting system time), after a discussion on scipy. While
3160 system time may be a useful quantity occasionally, it may much
3169 system time may be a useful quantity occasionally, it may much
3161 more easily be skewed by occasional swapping or other similar
3170 more easily be skewed by occasional swapping or other similar
3162 activity.
3171 activity.
3163
3172
3164 2003-06-05 Fernando Perez <fperez@colorado.edu>
3173 2003-06-05 Fernando Perez <fperez@colorado.edu>
3165
3174
3166 * IPython/numutils.py (identity): new function, for building
3175 * IPython/numutils.py (identity): new function, for building
3167 arbitrary rank Kronecker deltas (mostly backwards compatible with
3176 arbitrary rank Kronecker deltas (mostly backwards compatible with
3168 Numeric.identity)
3177 Numeric.identity)
3169
3178
3170 2003-06-03 Fernando Perez <fperez@colorado.edu>
3179 2003-06-03 Fernando Perez <fperez@colorado.edu>
3171
3180
3172 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3181 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3173 arguments passed to magics with spaces, to allow trailing '\' to
3182 arguments passed to magics with spaces, to allow trailing '\' to
3174 work normally (mainly for Windows users).
3183 work normally (mainly for Windows users).
3175
3184
3176 2003-05-29 Fernando Perez <fperez@colorado.edu>
3185 2003-05-29 Fernando Perez <fperez@colorado.edu>
3177
3186
3178 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3187 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3179 instead of pydoc.help. This fixes a bizarre behavior where
3188 instead of pydoc.help. This fixes a bizarre behavior where
3180 printing '%s' % locals() would trigger the help system. Now
3189 printing '%s' % locals() would trigger the help system. Now
3181 ipython behaves like normal python does.
3190 ipython behaves like normal python does.
3182
3191
3183 Note that if one does 'from pydoc import help', the bizarre
3192 Note that if one does 'from pydoc import help', the bizarre
3184 behavior returns, but this will also happen in normal python, so
3193 behavior returns, but this will also happen in normal python, so
3185 it's not an ipython bug anymore (it has to do with how pydoc.help
3194 it's not an ipython bug anymore (it has to do with how pydoc.help
3186 is implemented).
3195 is implemented).
3187
3196
3188 2003-05-22 Fernando Perez <fperez@colorado.edu>
3197 2003-05-22 Fernando Perez <fperez@colorado.edu>
3189
3198
3190 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3199 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3191 return [] instead of None when nothing matches, also match to end
3200 return [] instead of None when nothing matches, also match to end
3192 of line. Patch by Gary Bishop.
3201 of line. Patch by Gary Bishop.
3193
3202
3194 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3203 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3195 protection as before, for files passed on the command line. This
3204 protection as before, for files passed on the command line. This
3196 prevents the CrashHandler from kicking in if user files call into
3205 prevents the CrashHandler from kicking in if user files call into
3197 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3206 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3198 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3207 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3199
3208
3200 2003-05-20 *** Released version 0.4.0
3209 2003-05-20 *** Released version 0.4.0
3201
3210
3202 2003-05-20 Fernando Perez <fperez@colorado.edu>
3211 2003-05-20 Fernando Perez <fperez@colorado.edu>
3203
3212
3204 * setup.py: added support for manpages. It's a bit hackish b/c of
3213 * setup.py: added support for manpages. It's a bit hackish b/c of
3205 a bug in the way the bdist_rpm distutils target handles gzipped
3214 a bug in the way the bdist_rpm distutils target handles gzipped
3206 manpages, but it works. After a patch by Jack.
3215 manpages, but it works. After a patch by Jack.
3207
3216
3208 2003-05-19 Fernando Perez <fperez@colorado.edu>
3217 2003-05-19 Fernando Perez <fperez@colorado.edu>
3209
3218
3210 * IPython/numutils.py: added a mockup of the kinds module, since
3219 * IPython/numutils.py: added a mockup of the kinds module, since
3211 it was recently removed from Numeric. This way, numutils will
3220 it was recently removed from Numeric. This way, numutils will
3212 work for all users even if they are missing kinds.
3221 work for all users even if they are missing kinds.
3213
3222
3214 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3223 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3215 failure, which can occur with SWIG-wrapped extensions. After a
3224 failure, which can occur with SWIG-wrapped extensions. After a
3216 crash report from Prabhu.
3225 crash report from Prabhu.
3217
3226
3218 2003-05-16 Fernando Perez <fperez@colorado.edu>
3227 2003-05-16 Fernando Perez <fperez@colorado.edu>
3219
3228
3220 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3229 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3221 protect ipython from user code which may call directly
3230 protect ipython from user code which may call directly
3222 sys.excepthook (this looks like an ipython crash to the user, even
3231 sys.excepthook (this looks like an ipython crash to the user, even
3223 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3232 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3224 This is especially important to help users of WxWindows, but may
3233 This is especially important to help users of WxWindows, but may
3225 also be useful in other cases.
3234 also be useful in other cases.
3226
3235
3227 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3236 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3228 an optional tb_offset to be specified, and to preserve exception
3237 an optional tb_offset to be specified, and to preserve exception
3229 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3238 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3230
3239
3231 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3240 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3232
3241
3233 2003-05-15 Fernando Perez <fperez@colorado.edu>
3242 2003-05-15 Fernando Perez <fperez@colorado.edu>
3234
3243
3235 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3244 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3236 installing for a new user under Windows.
3245 installing for a new user under Windows.
3237
3246
3238 2003-05-12 Fernando Perez <fperez@colorado.edu>
3247 2003-05-12 Fernando Perez <fperez@colorado.edu>
3239
3248
3240 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3249 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3241 handler for Emacs comint-based lines. Currently it doesn't do
3250 handler for Emacs comint-based lines. Currently it doesn't do
3242 much (but importantly, it doesn't update the history cache). In
3251 much (but importantly, it doesn't update the history cache). In
3243 the future it may be expanded if Alex needs more functionality
3252 the future it may be expanded if Alex needs more functionality
3244 there.
3253 there.
3245
3254
3246 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3255 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3247 info to crash reports.
3256 info to crash reports.
3248
3257
3249 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3258 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3250 just like Python's -c. Also fixed crash with invalid -color
3259 just like Python's -c. Also fixed crash with invalid -color
3251 option value at startup. Thanks to Will French
3260 option value at startup. Thanks to Will French
3252 <wfrench-AT-bestweb.net> for the bug report.
3261 <wfrench-AT-bestweb.net> for the bug report.
3253
3262
3254 2003-05-09 Fernando Perez <fperez@colorado.edu>
3263 2003-05-09 Fernando Perez <fperez@colorado.edu>
3255
3264
3256 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3265 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3257 to EvalDict (it's a mapping, after all) and simplified its code
3266 to EvalDict (it's a mapping, after all) and simplified its code
3258 quite a bit, after a nice discussion on c.l.py where Gustavo
3267 quite a bit, after a nice discussion on c.l.py where Gustavo
3259 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3268 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3260
3269
3261 2003-04-30 Fernando Perez <fperez@colorado.edu>
3270 2003-04-30 Fernando Perez <fperez@colorado.edu>
3262
3271
3263 * IPython/genutils.py (timings_out): modified it to reduce its
3272 * IPython/genutils.py (timings_out): modified it to reduce its
3264 overhead in the common reps==1 case.
3273 overhead in the common reps==1 case.
3265
3274
3266 2003-04-29 Fernando Perez <fperez@colorado.edu>
3275 2003-04-29 Fernando Perez <fperez@colorado.edu>
3267
3276
3268 * IPython/genutils.py (timings_out): Modified to use the resource
3277 * IPython/genutils.py (timings_out): Modified to use the resource
3269 module, which avoids the wraparound problems of time.clock().
3278 module, which avoids the wraparound problems of time.clock().
3270
3279
3271 2003-04-17 *** Released version 0.2.15pre4
3280 2003-04-17 *** Released version 0.2.15pre4
3272
3281
3273 2003-04-17 Fernando Perez <fperez@colorado.edu>
3282 2003-04-17 Fernando Perez <fperez@colorado.edu>
3274
3283
3275 * setup.py (scriptfiles): Split windows-specific stuff over to a
3284 * setup.py (scriptfiles): Split windows-specific stuff over to a
3276 separate file, in an attempt to have a Windows GUI installer.
3285 separate file, in an attempt to have a Windows GUI installer.
3277 That didn't work, but part of the groundwork is done.
3286 That didn't work, but part of the groundwork is done.
3278
3287
3279 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3288 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3280 indent/unindent with 4 spaces. Particularly useful in combination
3289 indent/unindent with 4 spaces. Particularly useful in combination
3281 with the new auto-indent option.
3290 with the new auto-indent option.
3282
3291
3283 2003-04-16 Fernando Perez <fperez@colorado.edu>
3292 2003-04-16 Fernando Perez <fperez@colorado.edu>
3284
3293
3285 * IPython/Magic.py: various replacements of self.rc for
3294 * IPython/Magic.py: various replacements of self.rc for
3286 self.shell.rc. A lot more remains to be done to fully disentangle
3295 self.shell.rc. A lot more remains to be done to fully disentangle
3287 this class from the main Shell class.
3296 this class from the main Shell class.
3288
3297
3289 * IPython/GnuplotRuntime.py: added checks for mouse support so
3298 * IPython/GnuplotRuntime.py: added checks for mouse support so
3290 that we don't try to enable it if the current gnuplot doesn't
3299 that we don't try to enable it if the current gnuplot doesn't
3291 really support it. Also added checks so that we don't try to
3300 really support it. Also added checks so that we don't try to
3292 enable persist under Windows (where Gnuplot doesn't recognize the
3301 enable persist under Windows (where Gnuplot doesn't recognize the
3293 option).
3302 option).
3294
3303
3295 * IPython/iplib.py (InteractiveShell.interact): Added optional
3304 * IPython/iplib.py (InteractiveShell.interact): Added optional
3296 auto-indenting code, after a patch by King C. Shu
3305 auto-indenting code, after a patch by King C. Shu
3297 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3306 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3298 get along well with pasting indented code. If I ever figure out
3307 get along well with pasting indented code. If I ever figure out
3299 how to make that part go well, it will become on by default.
3308 how to make that part go well, it will become on by default.
3300
3309
3301 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3310 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3302 crash ipython if there was an unmatched '%' in the user's prompt
3311 crash ipython if there was an unmatched '%' in the user's prompt
3303 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3312 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3304
3313
3305 * IPython/iplib.py (InteractiveShell.interact): removed the
3314 * IPython/iplib.py (InteractiveShell.interact): removed the
3306 ability to ask the user whether he wants to crash or not at the
3315 ability to ask the user whether he wants to crash or not at the
3307 'last line' exception handler. Calling functions at that point
3316 'last line' exception handler. Calling functions at that point
3308 changes the stack, and the error reports would have incorrect
3317 changes the stack, and the error reports would have incorrect
3309 tracebacks.
3318 tracebacks.
3310
3319
3311 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3320 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3312 pass through a peger a pretty-printed form of any object. After a
3321 pass through a peger a pretty-printed form of any object. After a
3313 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3322 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3314
3323
3315 2003-04-14 Fernando Perez <fperez@colorado.edu>
3324 2003-04-14 Fernando Perez <fperez@colorado.edu>
3316
3325
3317 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3326 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3318 all files in ~ would be modified at first install (instead of
3327 all files in ~ would be modified at first install (instead of
3319 ~/.ipython). This could be potentially disastrous, as the
3328 ~/.ipython). This could be potentially disastrous, as the
3320 modification (make line-endings native) could damage binary files.
3329 modification (make line-endings native) could damage binary files.
3321
3330
3322 2003-04-10 Fernando Perez <fperez@colorado.edu>
3331 2003-04-10 Fernando Perez <fperez@colorado.edu>
3323
3332
3324 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3333 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3325 handle only lines which are invalid python. This now means that
3334 handle only lines which are invalid python. This now means that
3326 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3335 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3327 for the bug report.
3336 for the bug report.
3328
3337
3329 2003-04-01 Fernando Perez <fperez@colorado.edu>
3338 2003-04-01 Fernando Perez <fperez@colorado.edu>
3330
3339
3331 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3340 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3332 where failing to set sys.last_traceback would crash pdb.pm().
3341 where failing to set sys.last_traceback would crash pdb.pm().
3333 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3342 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3334 report.
3343 report.
3335
3344
3336 2003-03-25 Fernando Perez <fperez@colorado.edu>
3345 2003-03-25 Fernando Perez <fperez@colorado.edu>
3337
3346
3338 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3347 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3339 before printing it (it had a lot of spurious blank lines at the
3348 before printing it (it had a lot of spurious blank lines at the
3340 end).
3349 end).
3341
3350
3342 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3351 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3343 output would be sent 21 times! Obviously people don't use this
3352 output would be sent 21 times! Obviously people don't use this
3344 too often, or I would have heard about it.
3353 too often, or I would have heard about it.
3345
3354
3346 2003-03-24 Fernando Perez <fperez@colorado.edu>
3355 2003-03-24 Fernando Perez <fperez@colorado.edu>
3347
3356
3348 * setup.py (scriptfiles): renamed the data_files parameter from
3357 * setup.py (scriptfiles): renamed the data_files parameter from
3349 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3358 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3350 for the patch.
3359 for the patch.
3351
3360
3352 2003-03-20 Fernando Perez <fperez@colorado.edu>
3361 2003-03-20 Fernando Perez <fperez@colorado.edu>
3353
3362
3354 * IPython/genutils.py (error): added error() and fatal()
3363 * IPython/genutils.py (error): added error() and fatal()
3355 functions.
3364 functions.
3356
3365
3357 2003-03-18 *** Released version 0.2.15pre3
3366 2003-03-18 *** Released version 0.2.15pre3
3358
3367
3359 2003-03-18 Fernando Perez <fperez@colorado.edu>
3368 2003-03-18 Fernando Perez <fperez@colorado.edu>
3360
3369
3361 * setupext/install_data_ext.py
3370 * setupext/install_data_ext.py
3362 (install_data_ext.initialize_options): Class contributed by Jack
3371 (install_data_ext.initialize_options): Class contributed by Jack
3363 Moffit for fixing the old distutils hack. He is sending this to
3372 Moffit for fixing the old distutils hack. He is sending this to
3364 the distutils folks so in the future we may not need it as a
3373 the distutils folks so in the future we may not need it as a
3365 private fix.
3374 private fix.
3366
3375
3367 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3376 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3368 changes for Debian packaging. See his patch for full details.
3377 changes for Debian packaging. See his patch for full details.
3369 The old distutils hack of making the ipythonrc* files carry a
3378 The old distutils hack of making the ipythonrc* files carry a
3370 bogus .py extension is gone, at last. Examples were moved to a
3379 bogus .py extension is gone, at last. Examples were moved to a
3371 separate subdir under doc/, and the separate executable scripts
3380 separate subdir under doc/, and the separate executable scripts
3372 now live in their own directory. Overall a great cleanup. The
3381 now live in their own directory. Overall a great cleanup. The
3373 manual was updated to use the new files, and setup.py has been
3382 manual was updated to use the new files, and setup.py has been
3374 fixed for this setup.
3383 fixed for this setup.
3375
3384
3376 * IPython/PyColorize.py (Parser.usage): made non-executable and
3385 * IPython/PyColorize.py (Parser.usage): made non-executable and
3377 created a pycolor wrapper around it to be included as a script.
3386 created a pycolor wrapper around it to be included as a script.
3378
3387
3379 2003-03-12 *** Released version 0.2.15pre2
3388 2003-03-12 *** Released version 0.2.15pre2
3380
3389
3381 2003-03-12 Fernando Perez <fperez@colorado.edu>
3390 2003-03-12 Fernando Perez <fperez@colorado.edu>
3382
3391
3383 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3392 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3384 long-standing problem with garbage characters in some terminals.
3393 long-standing problem with garbage characters in some terminals.
3385 The issue was really that the \001 and \002 escapes must _only_ be
3394 The issue was really that the \001 and \002 escapes must _only_ be
3386 passed to input prompts (which call readline), but _never_ to
3395 passed to input prompts (which call readline), but _never_ to
3387 normal text to be printed on screen. I changed ColorANSI to have
3396 normal text to be printed on screen. I changed ColorANSI to have
3388 two classes: TermColors and InputTermColors, each with the
3397 two classes: TermColors and InputTermColors, each with the
3389 appropriate escapes for input prompts or normal text. The code in
3398 appropriate escapes for input prompts or normal text. The code in
3390 Prompts.py got slightly more complicated, but this very old and
3399 Prompts.py got slightly more complicated, but this very old and
3391 annoying bug is finally fixed.
3400 annoying bug is finally fixed.
3392
3401
3393 All the credit for nailing down the real origin of this problem
3402 All the credit for nailing down the real origin of this problem
3394 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3403 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3395 *Many* thanks to him for spending quite a bit of effort on this.
3404 *Many* thanks to him for spending quite a bit of effort on this.
3396
3405
3397 2003-03-05 *** Released version 0.2.15pre1
3406 2003-03-05 *** Released version 0.2.15pre1
3398
3407
3399 2003-03-03 Fernando Perez <fperez@colorado.edu>
3408 2003-03-03 Fernando Perez <fperez@colorado.edu>
3400
3409
3401 * IPython/FakeModule.py: Moved the former _FakeModule to a
3410 * IPython/FakeModule.py: Moved the former _FakeModule to a
3402 separate file, because it's also needed by Magic (to fix a similar
3411 separate file, because it's also needed by Magic (to fix a similar
3403 pickle-related issue in @run).
3412 pickle-related issue in @run).
3404
3413
3405 2003-03-02 Fernando Perez <fperez@colorado.edu>
3414 2003-03-02 Fernando Perez <fperez@colorado.edu>
3406
3415
3407 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3416 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3408 the autocall option at runtime.
3417 the autocall option at runtime.
3409 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3418 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3410 across Magic.py to start separating Magic from InteractiveShell.
3419 across Magic.py to start separating Magic from InteractiveShell.
3411 (Magic._ofind): Fixed to return proper namespace for dotted
3420 (Magic._ofind): Fixed to return proper namespace for dotted
3412 names. Before, a dotted name would always return 'not currently
3421 names. Before, a dotted name would always return 'not currently
3413 defined', because it would find the 'parent'. s.x would be found,
3422 defined', because it would find the 'parent'. s.x would be found,
3414 but since 'x' isn't defined by itself, it would get confused.
3423 but since 'x' isn't defined by itself, it would get confused.
3415 (Magic.magic_run): Fixed pickling problems reported by Ralf
3424 (Magic.magic_run): Fixed pickling problems reported by Ralf
3416 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3425 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3417 that I'd used when Mike Heeter reported similar issues at the
3426 that I'd used when Mike Heeter reported similar issues at the
3418 top-level, but now for @run. It boils down to injecting the
3427 top-level, but now for @run. It boils down to injecting the
3419 namespace where code is being executed with something that looks
3428 namespace where code is being executed with something that looks
3420 enough like a module to fool pickle.dump(). Since a pickle stores
3429 enough like a module to fool pickle.dump(). Since a pickle stores
3421 a named reference to the importing module, we need this for
3430 a named reference to the importing module, we need this for
3422 pickles to save something sensible.
3431 pickles to save something sensible.
3423
3432
3424 * IPython/ipmaker.py (make_IPython): added an autocall option.
3433 * IPython/ipmaker.py (make_IPython): added an autocall option.
3425
3434
3426 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3435 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3427 the auto-eval code. Now autocalling is an option, and the code is
3436 the auto-eval code. Now autocalling is an option, and the code is
3428 also vastly safer. There is no more eval() involved at all.
3437 also vastly safer. There is no more eval() involved at all.
3429
3438
3430 2003-03-01 Fernando Perez <fperez@colorado.edu>
3439 2003-03-01 Fernando Perez <fperez@colorado.edu>
3431
3440
3432 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3441 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3433 dict with named keys instead of a tuple.
3442 dict with named keys instead of a tuple.
3434
3443
3435 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3444 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3436
3445
3437 * setup.py (make_shortcut): Fixed message about directories
3446 * setup.py (make_shortcut): Fixed message about directories
3438 created during Windows installation (the directories were ok, just
3447 created during Windows installation (the directories were ok, just
3439 the printed message was misleading). Thanks to Chris Liechti
3448 the printed message was misleading). Thanks to Chris Liechti
3440 <cliechti-AT-gmx.net> for the heads up.
3449 <cliechti-AT-gmx.net> for the heads up.
3441
3450
3442 2003-02-21 Fernando Perez <fperez@colorado.edu>
3451 2003-02-21 Fernando Perez <fperez@colorado.edu>
3443
3452
3444 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3453 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3445 of ValueError exception when checking for auto-execution. This
3454 of ValueError exception when checking for auto-execution. This
3446 one is raised by things like Numeric arrays arr.flat when the
3455 one is raised by things like Numeric arrays arr.flat when the
3447 array is non-contiguous.
3456 array is non-contiguous.
3448
3457
3449 2003-01-31 Fernando Perez <fperez@colorado.edu>
3458 2003-01-31 Fernando Perez <fperez@colorado.edu>
3450
3459
3451 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3460 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3452 not return any value at all (even though the command would get
3461 not return any value at all (even though the command would get
3453 executed).
3462 executed).
3454 (xsys): Flush stdout right after printing the command to ensure
3463 (xsys): Flush stdout right after printing the command to ensure
3455 proper ordering of commands and command output in the total
3464 proper ordering of commands and command output in the total
3456 output.
3465 output.
3457 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3466 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3458 system/getoutput as defaults. The old ones are kept for
3467 system/getoutput as defaults. The old ones are kept for
3459 compatibility reasons, so no code which uses this library needs
3468 compatibility reasons, so no code which uses this library needs
3460 changing.
3469 changing.
3461
3470
3462 2003-01-27 *** Released version 0.2.14
3471 2003-01-27 *** Released version 0.2.14
3463
3472
3464 2003-01-25 Fernando Perez <fperez@colorado.edu>
3473 2003-01-25 Fernando Perez <fperez@colorado.edu>
3465
3474
3466 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3475 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3467 functions defined in previous edit sessions could not be re-edited
3476 functions defined in previous edit sessions could not be re-edited
3468 (because the temp files were immediately removed). Now temp files
3477 (because the temp files were immediately removed). Now temp files
3469 are removed only at IPython's exit.
3478 are removed only at IPython's exit.
3470 (Magic.magic_run): Improved @run to perform shell-like expansions
3479 (Magic.magic_run): Improved @run to perform shell-like expansions
3471 on its arguments (~users and $VARS). With this, @run becomes more
3480 on its arguments (~users and $VARS). With this, @run becomes more
3472 like a normal command-line.
3481 like a normal command-line.
3473
3482
3474 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3483 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3475 bugs related to embedding and cleaned up that code. A fairly
3484 bugs related to embedding and cleaned up that code. A fairly
3476 important one was the impossibility to access the global namespace
3485 important one was the impossibility to access the global namespace
3477 through the embedded IPython (only local variables were visible).
3486 through the embedded IPython (only local variables were visible).
3478
3487
3479 2003-01-14 Fernando Perez <fperez@colorado.edu>
3488 2003-01-14 Fernando Perez <fperez@colorado.edu>
3480
3489
3481 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3490 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3482 auto-calling to be a bit more conservative. Now it doesn't get
3491 auto-calling to be a bit more conservative. Now it doesn't get
3483 triggered if any of '!=()<>' are in the rest of the input line, to
3492 triggered if any of '!=()<>' are in the rest of the input line, to
3484 allow comparing callables. Thanks to Alex for the heads up.
3493 allow comparing callables. Thanks to Alex for the heads up.
3485
3494
3486 2003-01-07 Fernando Perez <fperez@colorado.edu>
3495 2003-01-07 Fernando Perez <fperez@colorado.edu>
3487
3496
3488 * IPython/genutils.py (page): fixed estimation of the number of
3497 * IPython/genutils.py (page): fixed estimation of the number of
3489 lines in a string to be paged to simply count newlines. This
3498 lines in a string to be paged to simply count newlines. This
3490 prevents over-guessing due to embedded escape sequences. A better
3499 prevents over-guessing due to embedded escape sequences. A better
3491 long-term solution would involve stripping out the control chars
3500 long-term solution would involve stripping out the control chars
3492 for the count, but it's potentially so expensive I just don't
3501 for the count, but it's potentially so expensive I just don't
3493 think it's worth doing.
3502 think it's worth doing.
3494
3503
3495 2002-12-19 *** Released version 0.2.14pre50
3504 2002-12-19 *** Released version 0.2.14pre50
3496
3505
3497 2002-12-19 Fernando Perez <fperez@colorado.edu>
3506 2002-12-19 Fernando Perez <fperez@colorado.edu>
3498
3507
3499 * tools/release (version): Changed release scripts to inform
3508 * tools/release (version): Changed release scripts to inform
3500 Andrea and build a NEWS file with a list of recent changes.
3509 Andrea and build a NEWS file with a list of recent changes.
3501
3510
3502 * IPython/ColorANSI.py (__all__): changed terminal detection
3511 * IPython/ColorANSI.py (__all__): changed terminal detection
3503 code. Seems to work better for xterms without breaking
3512 code. Seems to work better for xterms without breaking
3504 konsole. Will need more testing to determine if WinXP and Mac OSX
3513 konsole. Will need more testing to determine if WinXP and Mac OSX
3505 also work ok.
3514 also work ok.
3506
3515
3507 2002-12-18 *** Released version 0.2.14pre49
3516 2002-12-18 *** Released version 0.2.14pre49
3508
3517
3509 2002-12-18 Fernando Perez <fperez@colorado.edu>
3518 2002-12-18 Fernando Perez <fperez@colorado.edu>
3510
3519
3511 * Docs: added new info about Mac OSX, from Andrea.
3520 * Docs: added new info about Mac OSX, from Andrea.
3512
3521
3513 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3522 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3514 allow direct plotting of python strings whose format is the same
3523 allow direct plotting of python strings whose format is the same
3515 of gnuplot data files.
3524 of gnuplot data files.
3516
3525
3517 2002-12-16 Fernando Perez <fperez@colorado.edu>
3526 2002-12-16 Fernando Perez <fperez@colorado.edu>
3518
3527
3519 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3528 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3520 value of exit question to be acknowledged.
3529 value of exit question to be acknowledged.
3521
3530
3522 2002-12-03 Fernando Perez <fperez@colorado.edu>
3531 2002-12-03 Fernando Perez <fperez@colorado.edu>
3523
3532
3524 * IPython/ipmaker.py: removed generators, which had been added
3533 * IPython/ipmaker.py: removed generators, which had been added
3525 by mistake in an earlier debugging run. This was causing trouble
3534 by mistake in an earlier debugging run. This was causing trouble
3526 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3535 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3527 for pointing this out.
3536 for pointing this out.
3528
3537
3529 2002-11-17 Fernando Perez <fperez@colorado.edu>
3538 2002-11-17 Fernando Perez <fperez@colorado.edu>
3530
3539
3531 * Manual: updated the Gnuplot section.
3540 * Manual: updated the Gnuplot section.
3532
3541
3533 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3542 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3534 a much better split of what goes in Runtime and what goes in
3543 a much better split of what goes in Runtime and what goes in
3535 Interactive.
3544 Interactive.
3536
3545
3537 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3546 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3538 being imported from iplib.
3547 being imported from iplib.
3539
3548
3540 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3549 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3541 for command-passing. Now the global Gnuplot instance is called
3550 for command-passing. Now the global Gnuplot instance is called
3542 'gp' instead of 'g', which was really a far too fragile and
3551 'gp' instead of 'g', which was really a far too fragile and
3543 common name.
3552 common name.
3544
3553
3545 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3554 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3546 bounding boxes generated by Gnuplot for square plots.
3555 bounding boxes generated by Gnuplot for square plots.
3547
3556
3548 * IPython/genutils.py (popkey): new function added. I should
3557 * IPython/genutils.py (popkey): new function added. I should
3549 suggest this on c.l.py as a dict method, it seems useful.
3558 suggest this on c.l.py as a dict method, it seems useful.
3550
3559
3551 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3560 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3552 to transparently handle PostScript generation. MUCH better than
3561 to transparently handle PostScript generation. MUCH better than
3553 the previous plot_eps/replot_eps (which I removed now). The code
3562 the previous plot_eps/replot_eps (which I removed now). The code
3554 is also fairly clean and well documented now (including
3563 is also fairly clean and well documented now (including
3555 docstrings).
3564 docstrings).
3556
3565
3557 2002-11-13 Fernando Perez <fperez@colorado.edu>
3566 2002-11-13 Fernando Perez <fperez@colorado.edu>
3558
3567
3559 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3568 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3560 (inconsistent with options).
3569 (inconsistent with options).
3561
3570
3562 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3571 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3563 manually disabled, I don't know why. Fixed it.
3572 manually disabled, I don't know why. Fixed it.
3564 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3573 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3565 eps output.
3574 eps output.
3566
3575
3567 2002-11-12 Fernando Perez <fperez@colorado.edu>
3576 2002-11-12 Fernando Perez <fperez@colorado.edu>
3568
3577
3569 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3578 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3570 don't propagate up to caller. Fixes crash reported by François
3579 don't propagate up to caller. Fixes crash reported by François
3571 Pinard.
3580 Pinard.
3572
3581
3573 2002-11-09 Fernando Perez <fperez@colorado.edu>
3582 2002-11-09 Fernando Perez <fperez@colorado.edu>
3574
3583
3575 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3584 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3576 history file for new users.
3585 history file for new users.
3577 (make_IPython): fixed bug where initial install would leave the
3586 (make_IPython): fixed bug where initial install would leave the
3578 user running in the .ipython dir.
3587 user running in the .ipython dir.
3579 (make_IPython): fixed bug where config dir .ipython would be
3588 (make_IPython): fixed bug where config dir .ipython would be
3580 created regardless of the given -ipythondir option. Thanks to Cory
3589 created regardless of the given -ipythondir option. Thanks to Cory
3581 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3590 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3582
3591
3583 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3592 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3584 type confirmations. Will need to use it in all of IPython's code
3593 type confirmations. Will need to use it in all of IPython's code
3585 consistently.
3594 consistently.
3586
3595
3587 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3596 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3588 context to print 31 lines instead of the default 5. This will make
3597 context to print 31 lines instead of the default 5. This will make
3589 the crash reports extremely detailed in case the problem is in
3598 the crash reports extremely detailed in case the problem is in
3590 libraries I don't have access to.
3599 libraries I don't have access to.
3591
3600
3592 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3601 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3593 line of defense' code to still crash, but giving users fair
3602 line of defense' code to still crash, but giving users fair
3594 warning. I don't want internal errors to go unreported: if there's
3603 warning. I don't want internal errors to go unreported: if there's
3595 an internal problem, IPython should crash and generate a full
3604 an internal problem, IPython should crash and generate a full
3596 report.
3605 report.
3597
3606
3598 2002-11-08 Fernando Perez <fperez@colorado.edu>
3607 2002-11-08 Fernando Perez <fperez@colorado.edu>
3599
3608
3600 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3609 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3601 otherwise uncaught exceptions which can appear if people set
3610 otherwise uncaught exceptions which can appear if people set
3602 sys.stdout to something badly broken. Thanks to a crash report
3611 sys.stdout to something badly broken. Thanks to a crash report
3603 from henni-AT-mail.brainbot.com.
3612 from henni-AT-mail.brainbot.com.
3604
3613
3605 2002-11-04 Fernando Perez <fperez@colorado.edu>
3614 2002-11-04 Fernando Perez <fperez@colorado.edu>
3606
3615
3607 * IPython/iplib.py (InteractiveShell.interact): added
3616 * IPython/iplib.py (InteractiveShell.interact): added
3608 __IPYTHON__active to the builtins. It's a flag which goes on when
3617 __IPYTHON__active to the builtins. It's a flag which goes on when
3609 the interaction starts and goes off again when it stops. This
3618 the interaction starts and goes off again when it stops. This
3610 allows embedding code to detect being inside IPython. Before this
3619 allows embedding code to detect being inside IPython. Before this
3611 was done via __IPYTHON__, but that only shows that an IPython
3620 was done via __IPYTHON__, but that only shows that an IPython
3612 instance has been created.
3621 instance has been created.
3613
3622
3614 * IPython/Magic.py (Magic.magic_env): I realized that in a
3623 * IPython/Magic.py (Magic.magic_env): I realized that in a
3615 UserDict, instance.data holds the data as a normal dict. So I
3624 UserDict, instance.data holds the data as a normal dict. So I
3616 modified @env to return os.environ.data instead of rebuilding a
3625 modified @env to return os.environ.data instead of rebuilding a
3617 dict by hand.
3626 dict by hand.
3618
3627
3619 2002-11-02 Fernando Perez <fperez@colorado.edu>
3628 2002-11-02 Fernando Perez <fperez@colorado.edu>
3620
3629
3621 * IPython/genutils.py (warn): changed so that level 1 prints no
3630 * IPython/genutils.py (warn): changed so that level 1 prints no
3622 header. Level 2 is now the default (with 'WARNING' header, as
3631 header. Level 2 is now the default (with 'WARNING' header, as
3623 before). I think I tracked all places where changes were needed in
3632 before). I think I tracked all places where changes were needed in
3624 IPython, but outside code using the old level numbering may have
3633 IPython, but outside code using the old level numbering may have
3625 broken.
3634 broken.
3626
3635
3627 * IPython/iplib.py (InteractiveShell.runcode): added this to
3636 * IPython/iplib.py (InteractiveShell.runcode): added this to
3628 handle the tracebacks in SystemExit traps correctly. The previous
3637 handle the tracebacks in SystemExit traps correctly. The previous
3629 code (through interact) was printing more of the stack than
3638 code (through interact) was printing more of the stack than
3630 necessary, showing IPython internal code to the user.
3639 necessary, showing IPython internal code to the user.
3631
3640
3632 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3641 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3633 default. Now that the default at the confirmation prompt is yes,
3642 default. Now that the default at the confirmation prompt is yes,
3634 it's not so intrusive. François' argument that ipython sessions
3643 it's not so intrusive. François' argument that ipython sessions
3635 tend to be complex enough not to lose them from an accidental C-d,
3644 tend to be complex enough not to lose them from an accidental C-d,
3636 is a valid one.
3645 is a valid one.
3637
3646
3638 * IPython/iplib.py (InteractiveShell.interact): added a
3647 * IPython/iplib.py (InteractiveShell.interact): added a
3639 showtraceback() call to the SystemExit trap, and modified the exit
3648 showtraceback() call to the SystemExit trap, and modified the exit
3640 confirmation to have yes as the default.
3649 confirmation to have yes as the default.
3641
3650
3642 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3651 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3643 this file. It's been gone from the code for a long time, this was
3652 this file. It's been gone from the code for a long time, this was
3644 simply leftover junk.
3653 simply leftover junk.
3645
3654
3646 2002-11-01 Fernando Perez <fperez@colorado.edu>
3655 2002-11-01 Fernando Perez <fperez@colorado.edu>
3647
3656
3648 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3657 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3649 added. If set, IPython now traps EOF and asks for
3658 added. If set, IPython now traps EOF and asks for
3650 confirmation. After a request by François Pinard.
3659 confirmation. After a request by François Pinard.
3651
3660
3652 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3661 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3653 of @abort, and with a new (better) mechanism for handling the
3662 of @abort, and with a new (better) mechanism for handling the
3654 exceptions.
3663 exceptions.
3655
3664
3656 2002-10-27 Fernando Perez <fperez@colorado.edu>
3665 2002-10-27 Fernando Perez <fperez@colorado.edu>
3657
3666
3658 * IPython/usage.py (__doc__): updated the --help information and
3667 * IPython/usage.py (__doc__): updated the --help information and
3659 the ipythonrc file to indicate that -log generates
3668 the ipythonrc file to indicate that -log generates
3660 ./ipython.log. Also fixed the corresponding info in @logstart.
3669 ./ipython.log. Also fixed the corresponding info in @logstart.
3661 This and several other fixes in the manuals thanks to reports by
3670 This and several other fixes in the manuals thanks to reports by
3662 François Pinard <pinard-AT-iro.umontreal.ca>.
3671 François Pinard <pinard-AT-iro.umontreal.ca>.
3663
3672
3664 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3673 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3665 refer to @logstart (instead of @log, which doesn't exist).
3674 refer to @logstart (instead of @log, which doesn't exist).
3666
3675
3667 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3676 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3668 AttributeError crash. Thanks to Christopher Armstrong
3677 AttributeError crash. Thanks to Christopher Armstrong
3669 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3678 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3670 introduced recently (in 0.2.14pre37) with the fix to the eval
3679 introduced recently (in 0.2.14pre37) with the fix to the eval
3671 problem mentioned below.
3680 problem mentioned below.
3672
3681
3673 2002-10-17 Fernando Perez <fperez@colorado.edu>
3682 2002-10-17 Fernando Perez <fperez@colorado.edu>
3674
3683
3675 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3684 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3676 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3685 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3677
3686
3678 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3687 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3679 this function to fix a problem reported by Alex Schmolck. He saw
3688 this function to fix a problem reported by Alex Schmolck. He saw
3680 it with list comprehensions and generators, which were getting
3689 it with list comprehensions and generators, which were getting
3681 called twice. The real problem was an 'eval' call in testing for
3690 called twice. The real problem was an 'eval' call in testing for
3682 automagic which was evaluating the input line silently.
3691 automagic which was evaluating the input line silently.
3683
3692
3684 This is a potentially very nasty bug, if the input has side
3693 This is a potentially very nasty bug, if the input has side
3685 effects which must not be repeated. The code is much cleaner now,
3694 effects which must not be repeated. The code is much cleaner now,
3686 without any blanket 'except' left and with a regexp test for
3695 without any blanket 'except' left and with a regexp test for
3687 actual function names.
3696 actual function names.
3688
3697
3689 But an eval remains, which I'm not fully comfortable with. I just
3698 But an eval remains, which I'm not fully comfortable with. I just
3690 don't know how to find out if an expression could be a callable in
3699 don't know how to find out if an expression could be a callable in
3691 the user's namespace without doing an eval on the string. However
3700 the user's namespace without doing an eval on the string. However
3692 that string is now much more strictly checked so that no code
3701 that string is now much more strictly checked so that no code
3693 slips by, so the eval should only happen for things that can
3702 slips by, so the eval should only happen for things that can
3694 really be only function/method names.
3703 really be only function/method names.
3695
3704
3696 2002-10-15 Fernando Perez <fperez@colorado.edu>
3705 2002-10-15 Fernando Perez <fperez@colorado.edu>
3697
3706
3698 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3707 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3699 OSX information to main manual, removed README_Mac_OSX file from
3708 OSX information to main manual, removed README_Mac_OSX file from
3700 distribution. Also updated credits for recent additions.
3709 distribution. Also updated credits for recent additions.
3701
3710
3702 2002-10-10 Fernando Perez <fperez@colorado.edu>
3711 2002-10-10 Fernando Perez <fperez@colorado.edu>
3703
3712
3704 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3713 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3705 terminal-related issues. Many thanks to Andrea Riciputi
3714 terminal-related issues. Many thanks to Andrea Riciputi
3706 <andrea.riciputi-AT-libero.it> for writing it.
3715 <andrea.riciputi-AT-libero.it> for writing it.
3707
3716
3708 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3717 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3709 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3718 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3710
3719
3711 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3720 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3712 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3721 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3713 <syver-en-AT-online.no> who both submitted patches for this problem.
3722 <syver-en-AT-online.no> who both submitted patches for this problem.
3714
3723
3715 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3724 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3716 global embedding to make sure that things don't overwrite user
3725 global embedding to make sure that things don't overwrite user
3717 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3726 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3718
3727
3719 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3728 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3720 compatibility. Thanks to Hayden Callow
3729 compatibility. Thanks to Hayden Callow
3721 <h.callow-AT-elec.canterbury.ac.nz>
3730 <h.callow-AT-elec.canterbury.ac.nz>
3722
3731
3723 2002-10-04 Fernando Perez <fperez@colorado.edu>
3732 2002-10-04 Fernando Perez <fperez@colorado.edu>
3724
3733
3725 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3734 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3726 Gnuplot.File objects.
3735 Gnuplot.File objects.
3727
3736
3728 2002-07-23 Fernando Perez <fperez@colorado.edu>
3737 2002-07-23 Fernando Perez <fperez@colorado.edu>
3729
3738
3730 * IPython/genutils.py (timing): Added timings() and timing() for
3739 * IPython/genutils.py (timing): Added timings() and timing() for
3731 quick access to the most commonly needed data, the execution
3740 quick access to the most commonly needed data, the execution
3732 times. Old timing() renamed to timings_out().
3741 times. Old timing() renamed to timings_out().
3733
3742
3734 2002-07-18 Fernando Perez <fperez@colorado.edu>
3743 2002-07-18 Fernando Perez <fperez@colorado.edu>
3735
3744
3736 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3745 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3737 bug with nested instances disrupting the parent's tab completion.
3746 bug with nested instances disrupting the parent's tab completion.
3738
3747
3739 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3748 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3740 all_completions code to begin the emacs integration.
3749 all_completions code to begin the emacs integration.
3741
3750
3742 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3751 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3743 argument to allow titling individual arrays when plotting.
3752 argument to allow titling individual arrays when plotting.
3744
3753
3745 2002-07-15 Fernando Perez <fperez@colorado.edu>
3754 2002-07-15 Fernando Perez <fperez@colorado.edu>
3746
3755
3747 * setup.py (make_shortcut): changed to retrieve the value of
3756 * setup.py (make_shortcut): changed to retrieve the value of
3748 'Program Files' directory from the registry (this value changes in
3757 'Program Files' directory from the registry (this value changes in
3749 non-english versions of Windows). Thanks to Thomas Fanslau
3758 non-english versions of Windows). Thanks to Thomas Fanslau
3750 <tfanslau-AT-gmx.de> for the report.
3759 <tfanslau-AT-gmx.de> for the report.
3751
3760
3752 2002-07-10 Fernando Perez <fperez@colorado.edu>
3761 2002-07-10 Fernando Perez <fperez@colorado.edu>
3753
3762
3754 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3763 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3755 a bug in pdb, which crashes if a line with only whitespace is
3764 a bug in pdb, which crashes if a line with only whitespace is
3756 entered. Bug report submitted to sourceforge.
3765 entered. Bug report submitted to sourceforge.
3757
3766
3758 2002-07-09 Fernando Perez <fperez@colorado.edu>
3767 2002-07-09 Fernando Perez <fperez@colorado.edu>
3759
3768
3760 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3769 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3761 reporting exceptions (it's a bug in inspect.py, I just set a
3770 reporting exceptions (it's a bug in inspect.py, I just set a
3762 workaround).
3771 workaround).
3763
3772
3764 2002-07-08 Fernando Perez <fperez@colorado.edu>
3773 2002-07-08 Fernando Perez <fperez@colorado.edu>
3765
3774
3766 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3775 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3767 __IPYTHON__ in __builtins__ to show up in user_ns.
3776 __IPYTHON__ in __builtins__ to show up in user_ns.
3768
3777
3769 2002-07-03 Fernando Perez <fperez@colorado.edu>
3778 2002-07-03 Fernando Perez <fperez@colorado.edu>
3770
3779
3771 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3780 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3772 name from @gp_set_instance to @gp_set_default.
3781 name from @gp_set_instance to @gp_set_default.
3773
3782
3774 * IPython/ipmaker.py (make_IPython): default editor value set to
3783 * IPython/ipmaker.py (make_IPython): default editor value set to
3775 '0' (a string), to match the rc file. Otherwise will crash when
3784 '0' (a string), to match the rc file. Otherwise will crash when
3776 .strip() is called on it.
3785 .strip() is called on it.
3777
3786
3778
3787
3779 2002-06-28 Fernando Perez <fperez@colorado.edu>
3788 2002-06-28 Fernando Perez <fperez@colorado.edu>
3780
3789
3781 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3790 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3782 of files in current directory when a file is executed via
3791 of files in current directory when a file is executed via
3783 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3792 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3784
3793
3785 * setup.py (manfiles): fix for rpm builds, submitted by RA
3794 * setup.py (manfiles): fix for rpm builds, submitted by RA
3786 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3795 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3787
3796
3788 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3797 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3789 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3798 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3790 string!). A. Schmolck caught this one.
3799 string!). A. Schmolck caught this one.
3791
3800
3792 2002-06-27 Fernando Perez <fperez@colorado.edu>
3801 2002-06-27 Fernando Perez <fperez@colorado.edu>
3793
3802
3794 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3803 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3795 defined files at the cmd line. __name__ wasn't being set to
3804 defined files at the cmd line. __name__ wasn't being set to
3796 __main__.
3805 __main__.
3797
3806
3798 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3807 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3799 regular lists and tuples besides Numeric arrays.
3808 regular lists and tuples besides Numeric arrays.
3800
3809
3801 * IPython/Prompts.py (CachedOutput.__call__): Added output
3810 * IPython/Prompts.py (CachedOutput.__call__): Added output
3802 supression for input ending with ';'. Similar to Mathematica and
3811 supression for input ending with ';'. Similar to Mathematica and
3803 Matlab. The _* vars and Out[] list are still updated, just like
3812 Matlab. The _* vars and Out[] list are still updated, just like
3804 Mathematica behaves.
3813 Mathematica behaves.
3805
3814
3806 2002-06-25 Fernando Perez <fperez@colorado.edu>
3815 2002-06-25 Fernando Perez <fperez@colorado.edu>
3807
3816
3808 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3817 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3809 .ini extensions for profiels under Windows.
3818 .ini extensions for profiels under Windows.
3810
3819
3811 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3820 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3812 string form. Fix contributed by Alexander Schmolck
3821 string form. Fix contributed by Alexander Schmolck
3813 <a.schmolck-AT-gmx.net>
3822 <a.schmolck-AT-gmx.net>
3814
3823
3815 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3824 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3816 pre-configured Gnuplot instance.
3825 pre-configured Gnuplot instance.
3817
3826
3818 2002-06-21 Fernando Perez <fperez@colorado.edu>
3827 2002-06-21 Fernando Perez <fperez@colorado.edu>
3819
3828
3820 * IPython/numutils.py (exp_safe): new function, works around the
3829 * IPython/numutils.py (exp_safe): new function, works around the
3821 underflow problems in Numeric.
3830 underflow problems in Numeric.
3822 (log2): New fn. Safe log in base 2: returns exact integer answer
3831 (log2): New fn. Safe log in base 2: returns exact integer answer
3823 for exact integer powers of 2.
3832 for exact integer powers of 2.
3824
3833
3825 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3834 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3826 properly.
3835 properly.
3827
3836
3828 2002-06-20 Fernando Perez <fperez@colorado.edu>
3837 2002-06-20 Fernando Perez <fperez@colorado.edu>
3829
3838
3830 * IPython/genutils.py (timing): new function like
3839 * IPython/genutils.py (timing): new function like
3831 Mathematica's. Similar to time_test, but returns more info.
3840 Mathematica's. Similar to time_test, but returns more info.
3832
3841
3833 2002-06-18 Fernando Perez <fperez@colorado.edu>
3842 2002-06-18 Fernando Perez <fperez@colorado.edu>
3834
3843
3835 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3844 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3836 according to Mike Heeter's suggestions.
3845 according to Mike Heeter's suggestions.
3837
3846
3838 2002-06-16 Fernando Perez <fperez@colorado.edu>
3847 2002-06-16 Fernando Perez <fperez@colorado.edu>
3839
3848
3840 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3849 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3841 system. GnuplotMagic is gone as a user-directory option. New files
3850 system. GnuplotMagic is gone as a user-directory option. New files
3842 make it easier to use all the gnuplot stuff both from external
3851 make it easier to use all the gnuplot stuff both from external
3843 programs as well as from IPython. Had to rewrite part of
3852 programs as well as from IPython. Had to rewrite part of
3844 hardcopy() b/c of a strange bug: often the ps files simply don't
3853 hardcopy() b/c of a strange bug: often the ps files simply don't
3845 get created, and require a repeat of the command (often several
3854 get created, and require a repeat of the command (often several
3846 times).
3855 times).
3847
3856
3848 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3857 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3849 resolve output channel at call time, so that if sys.stderr has
3858 resolve output channel at call time, so that if sys.stderr has
3850 been redirected by user this gets honored.
3859 been redirected by user this gets honored.
3851
3860
3852 2002-06-13 Fernando Perez <fperez@colorado.edu>
3861 2002-06-13 Fernando Perez <fperez@colorado.edu>
3853
3862
3854 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3863 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3855 IPShell. Kept a copy with the old names to avoid breaking people's
3864 IPShell. Kept a copy with the old names to avoid breaking people's
3856 embedded code.
3865 embedded code.
3857
3866
3858 * IPython/ipython: simplified it to the bare minimum after
3867 * IPython/ipython: simplified it to the bare minimum after
3859 Holger's suggestions. Added info about how to use it in
3868 Holger's suggestions. Added info about how to use it in
3860 PYTHONSTARTUP.
3869 PYTHONSTARTUP.
3861
3870
3862 * IPython/Shell.py (IPythonShell): changed the options passing
3871 * IPython/Shell.py (IPythonShell): changed the options passing
3863 from a string with funky %s replacements to a straight list. Maybe
3872 from a string with funky %s replacements to a straight list. Maybe
3864 a bit more typing, but it follows sys.argv conventions, so there's
3873 a bit more typing, but it follows sys.argv conventions, so there's
3865 less special-casing to remember.
3874 less special-casing to remember.
3866
3875
3867 2002-06-12 Fernando Perez <fperez@colorado.edu>
3876 2002-06-12 Fernando Perez <fperez@colorado.edu>
3868
3877
3869 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3878 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3870 command. Thanks to a suggestion by Mike Heeter.
3879 command. Thanks to a suggestion by Mike Heeter.
3871 (Magic.magic_pfile): added behavior to look at filenames if given
3880 (Magic.magic_pfile): added behavior to look at filenames if given
3872 arg is not a defined object.
3881 arg is not a defined object.
3873 (Magic.magic_save): New @save function to save code snippets. Also
3882 (Magic.magic_save): New @save function to save code snippets. Also
3874 a Mike Heeter idea.
3883 a Mike Heeter idea.
3875
3884
3876 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3885 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3877 plot() and replot(). Much more convenient now, especially for
3886 plot() and replot(). Much more convenient now, especially for
3878 interactive use.
3887 interactive use.
3879
3888
3880 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3889 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3881 filenames.
3890 filenames.
3882
3891
3883 2002-06-02 Fernando Perez <fperez@colorado.edu>
3892 2002-06-02 Fernando Perez <fperez@colorado.edu>
3884
3893
3885 * IPython/Struct.py (Struct.__init__): modified to admit
3894 * IPython/Struct.py (Struct.__init__): modified to admit
3886 initialization via another struct.
3895 initialization via another struct.
3887
3896
3888 * IPython/genutils.py (SystemExec.__init__): New stateful
3897 * IPython/genutils.py (SystemExec.__init__): New stateful
3889 interface to xsys and bq. Useful for writing system scripts.
3898 interface to xsys and bq. Useful for writing system scripts.
3890
3899
3891 2002-05-30 Fernando Perez <fperez@colorado.edu>
3900 2002-05-30 Fernando Perez <fperez@colorado.edu>
3892
3901
3893 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3902 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3894 documents. This will make the user download smaller (it's getting
3903 documents. This will make the user download smaller (it's getting
3895 too big).
3904 too big).
3896
3905
3897 2002-05-29 Fernando Perez <fperez@colorado.edu>
3906 2002-05-29 Fernando Perez <fperez@colorado.edu>
3898
3907
3899 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3908 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3900 fix problems with shelve and pickle. Seems to work, but I don't
3909 fix problems with shelve and pickle. Seems to work, but I don't
3901 know if corner cases break it. Thanks to Mike Heeter
3910 know if corner cases break it. Thanks to Mike Heeter
3902 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3911 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3903
3912
3904 2002-05-24 Fernando Perez <fperez@colorado.edu>
3913 2002-05-24 Fernando Perez <fperez@colorado.edu>
3905
3914
3906 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3915 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3907 macros having broken.
3916 macros having broken.
3908
3917
3909 2002-05-21 Fernando Perez <fperez@colorado.edu>
3918 2002-05-21 Fernando Perez <fperez@colorado.edu>
3910
3919
3911 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3920 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3912 introduced logging bug: all history before logging started was
3921 introduced logging bug: all history before logging started was
3913 being written one character per line! This came from the redesign
3922 being written one character per line! This came from the redesign
3914 of the input history as a special list which slices to strings,
3923 of the input history as a special list which slices to strings,
3915 not to lists.
3924 not to lists.
3916
3925
3917 2002-05-20 Fernando Perez <fperez@colorado.edu>
3926 2002-05-20 Fernando Perez <fperez@colorado.edu>
3918
3927
3919 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3928 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3920 be an attribute of all classes in this module. The design of these
3929 be an attribute of all classes in this module. The design of these
3921 classes needs some serious overhauling.
3930 classes needs some serious overhauling.
3922
3931
3923 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3932 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3924 which was ignoring '_' in option names.
3933 which was ignoring '_' in option names.
3925
3934
3926 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3935 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3927 'Verbose_novars' to 'Context' and made it the new default. It's a
3936 'Verbose_novars' to 'Context' and made it the new default. It's a
3928 bit more readable and also safer than verbose.
3937 bit more readable and also safer than verbose.
3929
3938
3930 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3939 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3931 triple-quoted strings.
3940 triple-quoted strings.
3932
3941
3933 * IPython/OInspect.py (__all__): new module exposing the object
3942 * IPython/OInspect.py (__all__): new module exposing the object
3934 introspection facilities. Now the corresponding magics are dummy
3943 introspection facilities. Now the corresponding magics are dummy
3935 wrappers around this. Having this module will make it much easier
3944 wrappers around this. Having this module will make it much easier
3936 to put these functions into our modified pdb.
3945 to put these functions into our modified pdb.
3937 This new object inspector system uses the new colorizing module,
3946 This new object inspector system uses the new colorizing module,
3938 so source code and other things are nicely syntax highlighted.
3947 so source code and other things are nicely syntax highlighted.
3939
3948
3940 2002-05-18 Fernando Perez <fperez@colorado.edu>
3949 2002-05-18 Fernando Perez <fperez@colorado.edu>
3941
3950
3942 * IPython/ColorANSI.py: Split the coloring tools into a separate
3951 * IPython/ColorANSI.py: Split the coloring tools into a separate
3943 module so I can use them in other code easier (they were part of
3952 module so I can use them in other code easier (they were part of
3944 ultraTB).
3953 ultraTB).
3945
3954
3946 2002-05-17 Fernando Perez <fperez@colorado.edu>
3955 2002-05-17 Fernando Perez <fperez@colorado.edu>
3947
3956
3948 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3957 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3949 fixed it to set the global 'g' also to the called instance, as
3958 fixed it to set the global 'g' also to the called instance, as
3950 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3959 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3951 user's 'g' variables).
3960 user's 'g' variables).
3952
3961
3953 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3962 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3954 global variables (aliases to _ih,_oh) so that users which expect
3963 global variables (aliases to _ih,_oh) so that users which expect
3955 In[5] or Out[7] to work aren't unpleasantly surprised.
3964 In[5] or Out[7] to work aren't unpleasantly surprised.
3956 (InputList.__getslice__): new class to allow executing slices of
3965 (InputList.__getslice__): new class to allow executing slices of
3957 input history directly. Very simple class, complements the use of
3966 input history directly. Very simple class, complements the use of
3958 macros.
3967 macros.
3959
3968
3960 2002-05-16 Fernando Perez <fperez@colorado.edu>
3969 2002-05-16 Fernando Perez <fperez@colorado.edu>
3961
3970
3962 * setup.py (docdirbase): make doc directory be just doc/IPython
3971 * setup.py (docdirbase): make doc directory be just doc/IPython
3963 without version numbers, it will reduce clutter for users.
3972 without version numbers, it will reduce clutter for users.
3964
3973
3965 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3974 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3966 execfile call to prevent possible memory leak. See for details:
3975 execfile call to prevent possible memory leak. See for details:
3967 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3976 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3968
3977
3969 2002-05-15 Fernando Perez <fperez@colorado.edu>
3978 2002-05-15 Fernando Perez <fperez@colorado.edu>
3970
3979
3971 * IPython/Magic.py (Magic.magic_psource): made the object
3980 * IPython/Magic.py (Magic.magic_psource): made the object
3972 introspection names be more standard: pdoc, pdef, pfile and
3981 introspection names be more standard: pdoc, pdef, pfile and
3973 psource. They all print/page their output, and it makes
3982 psource. They all print/page their output, and it makes
3974 remembering them easier. Kept old names for compatibility as
3983 remembering them easier. Kept old names for compatibility as
3975 aliases.
3984 aliases.
3976
3985
3977 2002-05-14 Fernando Perez <fperez@colorado.edu>
3986 2002-05-14 Fernando Perez <fperez@colorado.edu>
3978
3987
3979 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3988 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3980 what the mouse problem was. The trick is to use gnuplot with temp
3989 what the mouse problem was. The trick is to use gnuplot with temp
3981 files and NOT with pipes (for data communication), because having
3990 files and NOT with pipes (for data communication), because having
3982 both pipes and the mouse on is bad news.
3991 both pipes and the mouse on is bad news.
3983
3992
3984 2002-05-13 Fernando Perez <fperez@colorado.edu>
3993 2002-05-13 Fernando Perez <fperez@colorado.edu>
3985
3994
3986 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3995 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3987 bug. Information would be reported about builtins even when
3996 bug. Information would be reported about builtins even when
3988 user-defined functions overrode them.
3997 user-defined functions overrode them.
3989
3998
3990 2002-05-11 Fernando Perez <fperez@colorado.edu>
3999 2002-05-11 Fernando Perez <fperez@colorado.edu>
3991
4000
3992 * IPython/__init__.py (__all__): removed FlexCompleter from
4001 * IPython/__init__.py (__all__): removed FlexCompleter from
3993 __all__ so that things don't fail in platforms without readline.
4002 __all__ so that things don't fail in platforms without readline.
3994
4003
3995 2002-05-10 Fernando Perez <fperez@colorado.edu>
4004 2002-05-10 Fernando Perez <fperez@colorado.edu>
3996
4005
3997 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4006 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3998 it requires Numeric, effectively making Numeric a dependency for
4007 it requires Numeric, effectively making Numeric a dependency for
3999 IPython.
4008 IPython.
4000
4009
4001 * Released 0.2.13
4010 * Released 0.2.13
4002
4011
4003 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4012 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4004 profiler interface. Now all the major options from the profiler
4013 profiler interface. Now all the major options from the profiler
4005 module are directly supported in IPython, both for single
4014 module are directly supported in IPython, both for single
4006 expressions (@prun) and for full programs (@run -p).
4015 expressions (@prun) and for full programs (@run -p).
4007
4016
4008 2002-05-09 Fernando Perez <fperez@colorado.edu>
4017 2002-05-09 Fernando Perez <fperez@colorado.edu>
4009
4018
4010 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4019 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4011 magic properly formatted for screen.
4020 magic properly formatted for screen.
4012
4021
4013 * setup.py (make_shortcut): Changed things to put pdf version in
4022 * setup.py (make_shortcut): Changed things to put pdf version in
4014 doc/ instead of doc/manual (had to change lyxport a bit).
4023 doc/ instead of doc/manual (had to change lyxport a bit).
4015
4024
4016 * IPython/Magic.py (Profile.string_stats): made profile runs go
4025 * IPython/Magic.py (Profile.string_stats): made profile runs go
4017 through pager (they are long and a pager allows searching, saving,
4026 through pager (they are long and a pager allows searching, saving,
4018 etc.)
4027 etc.)
4019
4028
4020 2002-05-08 Fernando Perez <fperez@colorado.edu>
4029 2002-05-08 Fernando Perez <fperez@colorado.edu>
4021
4030
4022 * Released 0.2.12
4031 * Released 0.2.12
4023
4032
4024 2002-05-06 Fernando Perez <fperez@colorado.edu>
4033 2002-05-06 Fernando Perez <fperez@colorado.edu>
4025
4034
4026 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4035 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4027 introduced); 'hist n1 n2' was broken.
4036 introduced); 'hist n1 n2' was broken.
4028 (Magic.magic_pdb): added optional on/off arguments to @pdb
4037 (Magic.magic_pdb): added optional on/off arguments to @pdb
4029 (Magic.magic_run): added option -i to @run, which executes code in
4038 (Magic.magic_run): added option -i to @run, which executes code in
4030 the IPython namespace instead of a clean one. Also added @irun as
4039 the IPython namespace instead of a clean one. Also added @irun as
4031 an alias to @run -i.
4040 an alias to @run -i.
4032
4041
4033 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4042 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4034 fixed (it didn't really do anything, the namespaces were wrong).
4043 fixed (it didn't really do anything, the namespaces were wrong).
4035
4044
4036 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4045 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4037
4046
4038 * IPython/__init__.py (__all__): Fixed package namespace, now
4047 * IPython/__init__.py (__all__): Fixed package namespace, now
4039 'import IPython' does give access to IPython.<all> as
4048 'import IPython' does give access to IPython.<all> as
4040 expected. Also renamed __release__ to Release.
4049 expected. Also renamed __release__ to Release.
4041
4050
4042 * IPython/Debugger.py (__license__): created new Pdb class which
4051 * IPython/Debugger.py (__license__): created new Pdb class which
4043 functions like a drop-in for the normal pdb.Pdb but does NOT
4052 functions like a drop-in for the normal pdb.Pdb but does NOT
4044 import readline by default. This way it doesn't muck up IPython's
4053 import readline by default. This way it doesn't muck up IPython's
4045 readline handling, and now tab-completion finally works in the
4054 readline handling, and now tab-completion finally works in the
4046 debugger -- sort of. It completes things globally visible, but the
4055 debugger -- sort of. It completes things globally visible, but the
4047 completer doesn't track the stack as pdb walks it. That's a bit
4056 completer doesn't track the stack as pdb walks it. That's a bit
4048 tricky, and I'll have to implement it later.
4057 tricky, and I'll have to implement it later.
4049
4058
4050 2002-05-05 Fernando Perez <fperez@colorado.edu>
4059 2002-05-05 Fernando Perez <fperez@colorado.edu>
4051
4060
4052 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4061 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4053 magic docstrings when printed via ? (explicit \'s were being
4062 magic docstrings when printed via ? (explicit \'s were being
4054 printed).
4063 printed).
4055
4064
4056 * IPython/ipmaker.py (make_IPython): fixed namespace
4065 * IPython/ipmaker.py (make_IPython): fixed namespace
4057 identification bug. Now variables loaded via logs or command-line
4066 identification bug. Now variables loaded via logs or command-line
4058 files are recognized in the interactive namespace by @who.
4067 files are recognized in the interactive namespace by @who.
4059
4068
4060 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4069 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4061 log replay system stemming from the string form of Structs.
4070 log replay system stemming from the string form of Structs.
4062
4071
4063 * IPython/Magic.py (Macro.__init__): improved macros to properly
4072 * IPython/Magic.py (Macro.__init__): improved macros to properly
4064 handle magic commands in them.
4073 handle magic commands in them.
4065 (Magic.magic_logstart): usernames are now expanded so 'logstart
4074 (Magic.magic_logstart): usernames are now expanded so 'logstart
4066 ~/mylog' now works.
4075 ~/mylog' now works.
4067
4076
4068 * IPython/iplib.py (complete): fixed bug where paths starting with
4077 * IPython/iplib.py (complete): fixed bug where paths starting with
4069 '/' would be completed as magic names.
4078 '/' would be completed as magic names.
4070
4079
4071 2002-05-04 Fernando Perez <fperez@colorado.edu>
4080 2002-05-04 Fernando Perez <fperez@colorado.edu>
4072
4081
4073 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4082 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4074 allow running full programs under the profiler's control.
4083 allow running full programs under the profiler's control.
4075
4084
4076 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4085 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4077 mode to report exceptions verbosely but without formatting
4086 mode to report exceptions verbosely but without formatting
4078 variables. This addresses the issue of ipython 'freezing' (it's
4087 variables. This addresses the issue of ipython 'freezing' (it's
4079 not frozen, but caught in an expensive formatting loop) when huge
4088 not frozen, but caught in an expensive formatting loop) when huge
4080 variables are in the context of an exception.
4089 variables are in the context of an exception.
4081 (VerboseTB.text): Added '--->' markers at line where exception was
4090 (VerboseTB.text): Added '--->' markers at line where exception was
4082 triggered. Much clearer to read, especially in NoColor modes.
4091 triggered. Much clearer to read, especially in NoColor modes.
4083
4092
4084 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4093 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4085 implemented in reverse when changing to the new parse_options().
4094 implemented in reverse when changing to the new parse_options().
4086
4095
4087 2002-05-03 Fernando Perez <fperez@colorado.edu>
4096 2002-05-03 Fernando Perez <fperez@colorado.edu>
4088
4097
4089 * IPython/Magic.py (Magic.parse_options): new function so that
4098 * IPython/Magic.py (Magic.parse_options): new function so that
4090 magics can parse options easier.
4099 magics can parse options easier.
4091 (Magic.magic_prun): new function similar to profile.run(),
4100 (Magic.magic_prun): new function similar to profile.run(),
4092 suggested by Chris Hart.
4101 suggested by Chris Hart.
4093 (Magic.magic_cd): fixed behavior so that it only changes if
4102 (Magic.magic_cd): fixed behavior so that it only changes if
4094 directory actually is in history.
4103 directory actually is in history.
4095
4104
4096 * IPython/usage.py (__doc__): added information about potential
4105 * IPython/usage.py (__doc__): added information about potential
4097 slowness of Verbose exception mode when there are huge data
4106 slowness of Verbose exception mode when there are huge data
4098 structures to be formatted (thanks to Archie Paulson).
4107 structures to be formatted (thanks to Archie Paulson).
4099
4108
4100 * IPython/ipmaker.py (make_IPython): Changed default logging
4109 * IPython/ipmaker.py (make_IPython): Changed default logging
4101 (when simply called with -log) to use curr_dir/ipython.log in
4110 (when simply called with -log) to use curr_dir/ipython.log in
4102 rotate mode. Fixed crash which was occuring with -log before
4111 rotate mode. Fixed crash which was occuring with -log before
4103 (thanks to Jim Boyle).
4112 (thanks to Jim Boyle).
4104
4113
4105 2002-05-01 Fernando Perez <fperez@colorado.edu>
4114 2002-05-01 Fernando Perez <fperez@colorado.edu>
4106
4115
4107 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4116 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4108 was nasty -- though somewhat of a corner case).
4117 was nasty -- though somewhat of a corner case).
4109
4118
4110 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4119 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4111 text (was a bug).
4120 text (was a bug).
4112
4121
4113 2002-04-30 Fernando Perez <fperez@colorado.edu>
4122 2002-04-30 Fernando Perez <fperez@colorado.edu>
4114
4123
4115 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4124 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4116 a print after ^D or ^C from the user so that the In[] prompt
4125 a print after ^D or ^C from the user so that the In[] prompt
4117 doesn't over-run the gnuplot one.
4126 doesn't over-run the gnuplot one.
4118
4127
4119 2002-04-29 Fernando Perez <fperez@colorado.edu>
4128 2002-04-29 Fernando Perez <fperez@colorado.edu>
4120
4129
4121 * Released 0.2.10
4130 * Released 0.2.10
4122
4131
4123 * IPython/__release__.py (version): get date dynamically.
4132 * IPython/__release__.py (version): get date dynamically.
4124
4133
4125 * Misc. documentation updates thanks to Arnd's comments. Also ran
4134 * Misc. documentation updates thanks to Arnd's comments. Also ran
4126 a full spellcheck on the manual (hadn't been done in a while).
4135 a full spellcheck on the manual (hadn't been done in a while).
4127
4136
4128 2002-04-27 Fernando Perez <fperez@colorado.edu>
4137 2002-04-27 Fernando Perez <fperez@colorado.edu>
4129
4138
4130 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4139 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4131 starting a log in mid-session would reset the input history list.
4140 starting a log in mid-session would reset the input history list.
4132
4141
4133 2002-04-26 Fernando Perez <fperez@colorado.edu>
4142 2002-04-26 Fernando Perez <fperez@colorado.edu>
4134
4143
4135 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4144 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4136 all files were being included in an update. Now anything in
4145 all files were being included in an update. Now anything in
4137 UserConfig that matches [A-Za-z]*.py will go (this excludes
4146 UserConfig that matches [A-Za-z]*.py will go (this excludes
4138 __init__.py)
4147 __init__.py)
4139
4148
4140 2002-04-25 Fernando Perez <fperez@colorado.edu>
4149 2002-04-25 Fernando Perez <fperez@colorado.edu>
4141
4150
4142 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4151 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4143 to __builtins__ so that any form of embedded or imported code can
4152 to __builtins__ so that any form of embedded or imported code can
4144 test for being inside IPython.
4153 test for being inside IPython.
4145
4154
4146 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4155 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4147 changed to GnuplotMagic because it's now an importable module,
4156 changed to GnuplotMagic because it's now an importable module,
4148 this makes the name follow that of the standard Gnuplot module.
4157 this makes the name follow that of the standard Gnuplot module.
4149 GnuplotMagic can now be loaded at any time in mid-session.
4158 GnuplotMagic can now be loaded at any time in mid-session.
4150
4159
4151 2002-04-24 Fernando Perez <fperez@colorado.edu>
4160 2002-04-24 Fernando Perez <fperez@colorado.edu>
4152
4161
4153 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4162 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4154 the globals (IPython has its own namespace) and the
4163 the globals (IPython has its own namespace) and the
4155 PhysicalQuantity stuff is much better anyway.
4164 PhysicalQuantity stuff is much better anyway.
4156
4165
4157 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4166 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4158 embedding example to standard user directory for
4167 embedding example to standard user directory for
4159 distribution. Also put it in the manual.
4168 distribution. Also put it in the manual.
4160
4169
4161 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4170 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4162 instance as first argument (so it doesn't rely on some obscure
4171 instance as first argument (so it doesn't rely on some obscure
4163 hidden global).
4172 hidden global).
4164
4173
4165 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4174 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4166 delimiters. While it prevents ().TAB from working, it allows
4175 delimiters. While it prevents ().TAB from working, it allows
4167 completions in open (... expressions. This is by far a more common
4176 completions in open (... expressions. This is by far a more common
4168 case.
4177 case.
4169
4178
4170 2002-04-23 Fernando Perez <fperez@colorado.edu>
4179 2002-04-23 Fernando Perez <fperez@colorado.edu>
4171
4180
4172 * IPython/Extensions/InterpreterPasteInput.py: new
4181 * IPython/Extensions/InterpreterPasteInput.py: new
4173 syntax-processing module for pasting lines with >>> or ... at the
4182 syntax-processing module for pasting lines with >>> or ... at the
4174 start.
4183 start.
4175
4184
4176 * IPython/Extensions/PhysicalQ_Interactive.py
4185 * IPython/Extensions/PhysicalQ_Interactive.py
4177 (PhysicalQuantityInteractive.__int__): fixed to work with either
4186 (PhysicalQuantityInteractive.__int__): fixed to work with either
4178 Numeric or math.
4187 Numeric or math.
4179
4188
4180 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4189 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4181 provided profiles. Now we have:
4190 provided profiles. Now we have:
4182 -math -> math module as * and cmath with its own namespace.
4191 -math -> math module as * and cmath with its own namespace.
4183 -numeric -> Numeric as *, plus gnuplot & grace
4192 -numeric -> Numeric as *, plus gnuplot & grace
4184 -physics -> same as before
4193 -physics -> same as before
4185
4194
4186 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4195 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4187 user-defined magics wouldn't be found by @magic if they were
4196 user-defined magics wouldn't be found by @magic if they were
4188 defined as class methods. Also cleaned up the namespace search
4197 defined as class methods. Also cleaned up the namespace search
4189 logic and the string building (to use %s instead of many repeated
4198 logic and the string building (to use %s instead of many repeated
4190 string adds).
4199 string adds).
4191
4200
4192 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4201 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4193 of user-defined magics to operate with class methods (cleaner, in
4202 of user-defined magics to operate with class methods (cleaner, in
4194 line with the gnuplot code).
4203 line with the gnuplot code).
4195
4204
4196 2002-04-22 Fernando Perez <fperez@colorado.edu>
4205 2002-04-22 Fernando Perez <fperez@colorado.edu>
4197
4206
4198 * setup.py: updated dependency list so that manual is updated when
4207 * setup.py: updated dependency list so that manual is updated when
4199 all included files change.
4208 all included files change.
4200
4209
4201 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4210 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4202 the delimiter removal option (the fix is ugly right now).
4211 the delimiter removal option (the fix is ugly right now).
4203
4212
4204 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4213 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4205 all of the math profile (quicker loading, no conflict between
4214 all of the math profile (quicker loading, no conflict between
4206 g-9.8 and g-gnuplot).
4215 g-9.8 and g-gnuplot).
4207
4216
4208 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4217 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4209 name of post-mortem files to IPython_crash_report.txt.
4218 name of post-mortem files to IPython_crash_report.txt.
4210
4219
4211 * Cleanup/update of the docs. Added all the new readline info and
4220 * Cleanup/update of the docs. Added all the new readline info and
4212 formatted all lists as 'real lists'.
4221 formatted all lists as 'real lists'.
4213
4222
4214 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4223 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4215 tab-completion options, since the full readline parse_and_bind is
4224 tab-completion options, since the full readline parse_and_bind is
4216 now accessible.
4225 now accessible.
4217
4226
4218 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4227 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4219 handling of readline options. Now users can specify any string to
4228 handling of readline options. Now users can specify any string to
4220 be passed to parse_and_bind(), as well as the delimiters to be
4229 be passed to parse_and_bind(), as well as the delimiters to be
4221 removed.
4230 removed.
4222 (InteractiveShell.__init__): Added __name__ to the global
4231 (InteractiveShell.__init__): Added __name__ to the global
4223 namespace so that things like Itpl which rely on its existence
4232 namespace so that things like Itpl which rely on its existence
4224 don't crash.
4233 don't crash.
4225 (InteractiveShell._prefilter): Defined the default with a _ so
4234 (InteractiveShell._prefilter): Defined the default with a _ so
4226 that prefilter() is easier to override, while the default one
4235 that prefilter() is easier to override, while the default one
4227 remains available.
4236 remains available.
4228
4237
4229 2002-04-18 Fernando Perez <fperez@colorado.edu>
4238 2002-04-18 Fernando Perez <fperez@colorado.edu>
4230
4239
4231 * Added information about pdb in the docs.
4240 * Added information about pdb in the docs.
4232
4241
4233 2002-04-17 Fernando Perez <fperez@colorado.edu>
4242 2002-04-17 Fernando Perez <fperez@colorado.edu>
4234
4243
4235 * IPython/ipmaker.py (make_IPython): added rc_override option to
4244 * IPython/ipmaker.py (make_IPython): added rc_override option to
4236 allow passing config options at creation time which may override
4245 allow passing config options at creation time which may override
4237 anything set in the config files or command line. This is
4246 anything set in the config files or command line. This is
4238 particularly useful for configuring embedded instances.
4247 particularly useful for configuring embedded instances.
4239
4248
4240 2002-04-15 Fernando Perez <fperez@colorado.edu>
4249 2002-04-15 Fernando Perez <fperez@colorado.edu>
4241
4250
4242 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4251 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4243 crash embedded instances because of the input cache falling out of
4252 crash embedded instances because of the input cache falling out of
4244 sync with the output counter.
4253 sync with the output counter.
4245
4254
4246 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4255 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4247 mode which calls pdb after an uncaught exception in IPython itself.
4256 mode which calls pdb after an uncaught exception in IPython itself.
4248
4257
4249 2002-04-14 Fernando Perez <fperez@colorado.edu>
4258 2002-04-14 Fernando Perez <fperez@colorado.edu>
4250
4259
4251 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4260 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4252 readline, fix it back after each call.
4261 readline, fix it back after each call.
4253
4262
4254 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4263 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4255 method to force all access via __call__(), which guarantees that
4264 method to force all access via __call__(), which guarantees that
4256 traceback references are properly deleted.
4265 traceback references are properly deleted.
4257
4266
4258 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4267 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4259 improve printing when pprint is in use.
4268 improve printing when pprint is in use.
4260
4269
4261 2002-04-13 Fernando Perez <fperez@colorado.edu>
4270 2002-04-13 Fernando Perez <fperez@colorado.edu>
4262
4271
4263 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4272 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4264 exceptions aren't caught anymore. If the user triggers one, he
4273 exceptions aren't caught anymore. If the user triggers one, he
4265 should know why he's doing it and it should go all the way up,
4274 should know why he's doing it and it should go all the way up,
4266 just like any other exception. So now @abort will fully kill the
4275 just like any other exception. So now @abort will fully kill the
4267 embedded interpreter and the embedding code (unless that happens
4276 embedded interpreter and the embedding code (unless that happens
4268 to catch SystemExit).
4277 to catch SystemExit).
4269
4278
4270 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4279 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4271 and a debugger() method to invoke the interactive pdb debugger
4280 and a debugger() method to invoke the interactive pdb debugger
4272 after printing exception information. Also added the corresponding
4281 after printing exception information. Also added the corresponding
4273 -pdb option and @pdb magic to control this feature, and updated
4282 -pdb option and @pdb magic to control this feature, and updated
4274 the docs. After a suggestion from Christopher Hart
4283 the docs. After a suggestion from Christopher Hart
4275 (hart-AT-caltech.edu).
4284 (hart-AT-caltech.edu).
4276
4285
4277 2002-04-12 Fernando Perez <fperez@colorado.edu>
4286 2002-04-12 Fernando Perez <fperez@colorado.edu>
4278
4287
4279 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4288 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4280 the exception handlers defined by the user (not the CrashHandler)
4289 the exception handlers defined by the user (not the CrashHandler)
4281 so that user exceptions don't trigger an ipython bug report.
4290 so that user exceptions don't trigger an ipython bug report.
4282
4291
4283 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4292 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4284 configurable (it should have always been so).
4293 configurable (it should have always been so).
4285
4294
4286 2002-03-26 Fernando Perez <fperez@colorado.edu>
4295 2002-03-26 Fernando Perez <fperez@colorado.edu>
4287
4296
4288 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4297 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4289 and there to fix embedding namespace issues. This should all be
4298 and there to fix embedding namespace issues. This should all be
4290 done in a more elegant way.
4299 done in a more elegant way.
4291
4300
4292 2002-03-25 Fernando Perez <fperez@colorado.edu>
4301 2002-03-25 Fernando Perez <fperez@colorado.edu>
4293
4302
4294 * IPython/genutils.py (get_home_dir): Try to make it work under
4303 * IPython/genutils.py (get_home_dir): Try to make it work under
4295 win9x also.
4304 win9x also.
4296
4305
4297 2002-03-20 Fernando Perez <fperez@colorado.edu>
4306 2002-03-20 Fernando Perez <fperez@colorado.edu>
4298
4307
4299 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4308 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4300 sys.displayhook untouched upon __init__.
4309 sys.displayhook untouched upon __init__.
4301
4310
4302 2002-03-19 Fernando Perez <fperez@colorado.edu>
4311 2002-03-19 Fernando Perez <fperez@colorado.edu>
4303
4312
4304 * Released 0.2.9 (for embedding bug, basically).
4313 * Released 0.2.9 (for embedding bug, basically).
4305
4314
4306 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4315 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4307 exceptions so that enclosing shell's state can be restored.
4316 exceptions so that enclosing shell's state can be restored.
4308
4317
4309 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4318 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4310 naming conventions in the .ipython/ dir.
4319 naming conventions in the .ipython/ dir.
4311
4320
4312 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4321 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4313 from delimiters list so filenames with - in them get expanded.
4322 from delimiters list so filenames with - in them get expanded.
4314
4323
4315 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4324 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4316 sys.displayhook not being properly restored after an embedded call.
4325 sys.displayhook not being properly restored after an embedded call.
4317
4326
4318 2002-03-18 Fernando Perez <fperez@colorado.edu>
4327 2002-03-18 Fernando Perez <fperez@colorado.edu>
4319
4328
4320 * Released 0.2.8
4329 * Released 0.2.8
4321
4330
4322 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4331 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4323 some files weren't being included in a -upgrade.
4332 some files weren't being included in a -upgrade.
4324 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4333 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4325 on' so that the first tab completes.
4334 on' so that the first tab completes.
4326 (InteractiveShell.handle_magic): fixed bug with spaces around
4335 (InteractiveShell.handle_magic): fixed bug with spaces around
4327 quotes breaking many magic commands.
4336 quotes breaking many magic commands.
4328
4337
4329 * setup.py: added note about ignoring the syntax error messages at
4338 * setup.py: added note about ignoring the syntax error messages at
4330 installation.
4339 installation.
4331
4340
4332 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4341 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4333 streamlining the gnuplot interface, now there's only one magic @gp.
4342 streamlining the gnuplot interface, now there's only one magic @gp.
4334
4343
4335 2002-03-17 Fernando Perez <fperez@colorado.edu>
4344 2002-03-17 Fernando Perez <fperez@colorado.edu>
4336
4345
4337 * IPython/UserConfig/magic_gnuplot.py: new name for the
4346 * IPython/UserConfig/magic_gnuplot.py: new name for the
4338 example-magic_pm.py file. Much enhanced system, now with a shell
4347 example-magic_pm.py file. Much enhanced system, now with a shell
4339 for communicating directly with gnuplot, one command at a time.
4348 for communicating directly with gnuplot, one command at a time.
4340
4349
4341 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4350 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4342 setting __name__=='__main__'.
4351 setting __name__=='__main__'.
4343
4352
4344 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4353 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4345 mini-shell for accessing gnuplot from inside ipython. Should
4354 mini-shell for accessing gnuplot from inside ipython. Should
4346 extend it later for grace access too. Inspired by Arnd's
4355 extend it later for grace access too. Inspired by Arnd's
4347 suggestion.
4356 suggestion.
4348
4357
4349 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4358 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4350 calling magic functions with () in their arguments. Thanks to Arnd
4359 calling magic functions with () in their arguments. Thanks to Arnd
4351 Baecker for pointing this to me.
4360 Baecker for pointing this to me.
4352
4361
4353 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4362 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4354 infinitely for integer or complex arrays (only worked with floats).
4363 infinitely for integer or complex arrays (only worked with floats).
4355
4364
4356 2002-03-16 Fernando Perez <fperez@colorado.edu>
4365 2002-03-16 Fernando Perez <fperez@colorado.edu>
4357
4366
4358 * setup.py: Merged setup and setup_windows into a single script
4367 * setup.py: Merged setup and setup_windows into a single script
4359 which properly handles things for windows users.
4368 which properly handles things for windows users.
4360
4369
4361 2002-03-15 Fernando Perez <fperez@colorado.edu>
4370 2002-03-15 Fernando Perez <fperez@colorado.edu>
4362
4371
4363 * Big change to the manual: now the magics are all automatically
4372 * Big change to the manual: now the magics are all automatically
4364 documented. This information is generated from their docstrings
4373 documented. This information is generated from their docstrings
4365 and put in a latex file included by the manual lyx file. This way
4374 and put in a latex file included by the manual lyx file. This way
4366 we get always up to date information for the magics. The manual
4375 we get always up to date information for the magics. The manual
4367 now also has proper version information, also auto-synced.
4376 now also has proper version information, also auto-synced.
4368
4377
4369 For this to work, an undocumented --magic_docstrings option was added.
4378 For this to work, an undocumented --magic_docstrings option was added.
4370
4379
4371 2002-03-13 Fernando Perez <fperez@colorado.edu>
4380 2002-03-13 Fernando Perez <fperez@colorado.edu>
4372
4381
4373 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4382 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4374 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4383 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4375
4384
4376 2002-03-12 Fernando Perez <fperez@colorado.edu>
4385 2002-03-12 Fernando Perez <fperez@colorado.edu>
4377
4386
4378 * IPython/ultraTB.py (TermColors): changed color escapes again to
4387 * IPython/ultraTB.py (TermColors): changed color escapes again to
4379 fix the (old, reintroduced) line-wrapping bug. Basically, if
4388 fix the (old, reintroduced) line-wrapping bug. Basically, if
4380 \001..\002 aren't given in the color escapes, lines get wrapped
4389 \001..\002 aren't given in the color escapes, lines get wrapped
4381 weirdly. But giving those screws up old xterms and emacs terms. So
4390 weirdly. But giving those screws up old xterms and emacs terms. So
4382 I added some logic for emacs terms to be ok, but I can't identify old
4391 I added some logic for emacs terms to be ok, but I can't identify old
4383 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4392 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4384
4393
4385 2002-03-10 Fernando Perez <fperez@colorado.edu>
4394 2002-03-10 Fernando Perez <fperez@colorado.edu>
4386
4395
4387 * IPython/usage.py (__doc__): Various documentation cleanups and
4396 * IPython/usage.py (__doc__): Various documentation cleanups and
4388 updates, both in usage docstrings and in the manual.
4397 updates, both in usage docstrings and in the manual.
4389
4398
4390 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4399 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4391 handling of caching. Set minimum acceptabe value for having a
4400 handling of caching. Set minimum acceptabe value for having a
4392 cache at 20 values.
4401 cache at 20 values.
4393
4402
4394 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4403 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4395 install_first_time function to a method, renamed it and added an
4404 install_first_time function to a method, renamed it and added an
4396 'upgrade' mode. Now people can update their config directory with
4405 'upgrade' mode. Now people can update their config directory with
4397 a simple command line switch (-upgrade, also new).
4406 a simple command line switch (-upgrade, also new).
4398
4407
4399 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4408 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4400 @file (convenient for automagic users under Python >= 2.2).
4409 @file (convenient for automagic users under Python >= 2.2).
4401 Removed @files (it seemed more like a plural than an abbrev. of
4410 Removed @files (it seemed more like a plural than an abbrev. of
4402 'file show').
4411 'file show').
4403
4412
4404 * IPython/iplib.py (install_first_time): Fixed crash if there were
4413 * IPython/iplib.py (install_first_time): Fixed crash if there were
4405 backup files ('~') in .ipython/ install directory.
4414 backup files ('~') in .ipython/ install directory.
4406
4415
4407 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4416 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4408 system. Things look fine, but these changes are fairly
4417 system. Things look fine, but these changes are fairly
4409 intrusive. Test them for a few days.
4418 intrusive. Test them for a few days.
4410
4419
4411 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4420 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4412 the prompts system. Now all in/out prompt strings are user
4421 the prompts system. Now all in/out prompt strings are user
4413 controllable. This is particularly useful for embedding, as one
4422 controllable. This is particularly useful for embedding, as one
4414 can tag embedded instances with particular prompts.
4423 can tag embedded instances with particular prompts.
4415
4424
4416 Also removed global use of sys.ps1/2, which now allows nested
4425 Also removed global use of sys.ps1/2, which now allows nested
4417 embeddings without any problems. Added command-line options for
4426 embeddings without any problems. Added command-line options for
4418 the prompt strings.
4427 the prompt strings.
4419
4428
4420 2002-03-08 Fernando Perez <fperez@colorado.edu>
4429 2002-03-08 Fernando Perez <fperez@colorado.edu>
4421
4430
4422 * IPython/UserConfig/example-embed-short.py (ipshell): added
4431 * IPython/UserConfig/example-embed-short.py (ipshell): added
4423 example file with the bare minimum code for embedding.
4432 example file with the bare minimum code for embedding.
4424
4433
4425 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4434 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4426 functionality for the embeddable shell to be activated/deactivated
4435 functionality for the embeddable shell to be activated/deactivated
4427 either globally or at each call.
4436 either globally or at each call.
4428
4437
4429 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4438 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4430 rewriting the prompt with '--->' for auto-inputs with proper
4439 rewriting the prompt with '--->' for auto-inputs with proper
4431 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4440 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4432 this is handled by the prompts class itself, as it should.
4441 this is handled by the prompts class itself, as it should.
4433
4442
4434 2002-03-05 Fernando Perez <fperez@colorado.edu>
4443 2002-03-05 Fernando Perez <fperez@colorado.edu>
4435
4444
4436 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4445 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4437 @logstart to avoid name clashes with the math log function.
4446 @logstart to avoid name clashes with the math log function.
4438
4447
4439 * Big updates to X/Emacs section of the manual.
4448 * Big updates to X/Emacs section of the manual.
4440
4449
4441 * Removed ipython_emacs. Milan explained to me how to pass
4450 * Removed ipython_emacs. Milan explained to me how to pass
4442 arguments to ipython through Emacs. Some day I'm going to end up
4451 arguments to ipython through Emacs. Some day I'm going to end up
4443 learning some lisp...
4452 learning some lisp...
4444
4453
4445 2002-03-04 Fernando Perez <fperez@colorado.edu>
4454 2002-03-04 Fernando Perez <fperez@colorado.edu>
4446
4455
4447 * IPython/ipython_emacs: Created script to be used as the
4456 * IPython/ipython_emacs: Created script to be used as the
4448 py-python-command Emacs variable so we can pass IPython
4457 py-python-command Emacs variable so we can pass IPython
4449 parameters. I can't figure out how to tell Emacs directly to pass
4458 parameters. I can't figure out how to tell Emacs directly to pass
4450 parameters to IPython, so a dummy shell script will do it.
4459 parameters to IPython, so a dummy shell script will do it.
4451
4460
4452 Other enhancements made for things to work better under Emacs'
4461 Other enhancements made for things to work better under Emacs'
4453 various types of terminals. Many thanks to Milan Zamazal
4462 various types of terminals. Many thanks to Milan Zamazal
4454 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4463 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4455
4464
4456 2002-03-01 Fernando Perez <fperez@colorado.edu>
4465 2002-03-01 Fernando Perez <fperez@colorado.edu>
4457
4466
4458 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4467 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4459 that loading of readline is now optional. This gives better
4468 that loading of readline is now optional. This gives better
4460 control to emacs users.
4469 control to emacs users.
4461
4470
4462 * IPython/ultraTB.py (__date__): Modified color escape sequences
4471 * IPython/ultraTB.py (__date__): Modified color escape sequences
4463 and now things work fine under xterm and in Emacs' term buffers
4472 and now things work fine under xterm and in Emacs' term buffers
4464 (though not shell ones). Well, in emacs you get colors, but all
4473 (though not shell ones). Well, in emacs you get colors, but all
4465 seem to be 'light' colors (no difference between dark and light
4474 seem to be 'light' colors (no difference between dark and light
4466 ones). But the garbage chars are gone, and also in xterms. It
4475 ones). But the garbage chars are gone, and also in xterms. It
4467 seems that now I'm using 'cleaner' ansi sequences.
4476 seems that now I'm using 'cleaner' ansi sequences.
4468
4477
4469 2002-02-21 Fernando Perez <fperez@colorado.edu>
4478 2002-02-21 Fernando Perez <fperez@colorado.edu>
4470
4479
4471 * Released 0.2.7 (mainly to publish the scoping fix).
4480 * Released 0.2.7 (mainly to publish the scoping fix).
4472
4481
4473 * IPython/Logger.py (Logger.logstate): added. A corresponding
4482 * IPython/Logger.py (Logger.logstate): added. A corresponding
4474 @logstate magic was created.
4483 @logstate magic was created.
4475
4484
4476 * IPython/Magic.py: fixed nested scoping problem under Python
4485 * IPython/Magic.py: fixed nested scoping problem under Python
4477 2.1.x (automagic wasn't working).
4486 2.1.x (automagic wasn't working).
4478
4487
4479 2002-02-20 Fernando Perez <fperez@colorado.edu>
4488 2002-02-20 Fernando Perez <fperez@colorado.edu>
4480
4489
4481 * Released 0.2.6.
4490 * Released 0.2.6.
4482
4491
4483 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4492 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4484 option so that logs can come out without any headers at all.
4493 option so that logs can come out without any headers at all.
4485
4494
4486 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4495 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4487 SciPy.
4496 SciPy.
4488
4497
4489 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4498 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4490 that embedded IPython calls don't require vars() to be explicitly
4499 that embedded IPython calls don't require vars() to be explicitly
4491 passed. Now they are extracted from the caller's frame (code
4500 passed. Now they are extracted from the caller's frame (code
4492 snatched from Eric Jones' weave). Added better documentation to
4501 snatched from Eric Jones' weave). Added better documentation to
4493 the section on embedding and the example file.
4502 the section on embedding and the example file.
4494
4503
4495 * IPython/genutils.py (page): Changed so that under emacs, it just
4504 * IPython/genutils.py (page): Changed so that under emacs, it just
4496 prints the string. You can then page up and down in the emacs
4505 prints the string. You can then page up and down in the emacs
4497 buffer itself. This is how the builtin help() works.
4506 buffer itself. This is how the builtin help() works.
4498
4507
4499 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4508 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4500 macro scoping: macros need to be executed in the user's namespace
4509 macro scoping: macros need to be executed in the user's namespace
4501 to work as if they had been typed by the user.
4510 to work as if they had been typed by the user.
4502
4511
4503 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4512 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4504 execute automatically (no need to type 'exec...'). They then
4513 execute automatically (no need to type 'exec...'). They then
4505 behave like 'true macros'. The printing system was also modified
4514 behave like 'true macros'. The printing system was also modified
4506 for this to work.
4515 for this to work.
4507
4516
4508 2002-02-19 Fernando Perez <fperez@colorado.edu>
4517 2002-02-19 Fernando Perez <fperez@colorado.edu>
4509
4518
4510 * IPython/genutils.py (page_file): new function for paging files
4519 * IPython/genutils.py (page_file): new function for paging files
4511 in an OS-independent way. Also necessary for file viewing to work
4520 in an OS-independent way. Also necessary for file viewing to work
4512 well inside Emacs buffers.
4521 well inside Emacs buffers.
4513 (page): Added checks for being in an emacs buffer.
4522 (page): Added checks for being in an emacs buffer.
4514 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4523 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4515 same bug in iplib.
4524 same bug in iplib.
4516
4525
4517 2002-02-18 Fernando Perez <fperez@colorado.edu>
4526 2002-02-18 Fernando Perez <fperez@colorado.edu>
4518
4527
4519 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4528 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4520 of readline so that IPython can work inside an Emacs buffer.
4529 of readline so that IPython can work inside an Emacs buffer.
4521
4530
4522 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4531 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4523 method signatures (they weren't really bugs, but it looks cleaner
4532 method signatures (they weren't really bugs, but it looks cleaner
4524 and keeps PyChecker happy).
4533 and keeps PyChecker happy).
4525
4534
4526 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4535 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4527 for implementing various user-defined hooks. Currently only
4536 for implementing various user-defined hooks. Currently only
4528 display is done.
4537 display is done.
4529
4538
4530 * IPython/Prompts.py (CachedOutput._display): changed display
4539 * IPython/Prompts.py (CachedOutput._display): changed display
4531 functions so that they can be dynamically changed by users easily.
4540 functions so that they can be dynamically changed by users easily.
4532
4541
4533 * IPython/Extensions/numeric_formats.py (num_display): added an
4542 * IPython/Extensions/numeric_formats.py (num_display): added an
4534 extension for printing NumPy arrays in flexible manners. It
4543 extension for printing NumPy arrays in flexible manners. It
4535 doesn't do anything yet, but all the structure is in
4544 doesn't do anything yet, but all the structure is in
4536 place. Ultimately the plan is to implement output format control
4545 place. Ultimately the plan is to implement output format control
4537 like in Octave.
4546 like in Octave.
4538
4547
4539 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4548 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4540 methods are found at run-time by all the automatic machinery.
4549 methods are found at run-time by all the automatic machinery.
4541
4550
4542 2002-02-17 Fernando Perez <fperez@colorado.edu>
4551 2002-02-17 Fernando Perez <fperez@colorado.edu>
4543
4552
4544 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4553 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4545 whole file a little.
4554 whole file a little.
4546
4555
4547 * ToDo: closed this document. Now there's a new_design.lyx
4556 * ToDo: closed this document. Now there's a new_design.lyx
4548 document for all new ideas. Added making a pdf of it for the
4557 document for all new ideas. Added making a pdf of it for the
4549 end-user distro.
4558 end-user distro.
4550
4559
4551 * IPython/Logger.py (Logger.switch_log): Created this to replace
4560 * IPython/Logger.py (Logger.switch_log): Created this to replace
4552 logon() and logoff(). It also fixes a nasty crash reported by
4561 logon() and logoff(). It also fixes a nasty crash reported by
4553 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4562 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4554
4563
4555 * IPython/iplib.py (complete): got auto-completion to work with
4564 * IPython/iplib.py (complete): got auto-completion to work with
4556 automagic (I had wanted this for a long time).
4565 automagic (I had wanted this for a long time).
4557
4566
4558 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4567 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4559 to @file, since file() is now a builtin and clashes with automagic
4568 to @file, since file() is now a builtin and clashes with automagic
4560 for @file.
4569 for @file.
4561
4570
4562 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4571 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4563 of this was previously in iplib, which had grown to more than 2000
4572 of this was previously in iplib, which had grown to more than 2000
4564 lines, way too long. No new functionality, but it makes managing
4573 lines, way too long. No new functionality, but it makes managing
4565 the code a bit easier.
4574 the code a bit easier.
4566
4575
4567 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4576 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4568 information to crash reports.
4577 information to crash reports.
4569
4578
4570 2002-02-12 Fernando Perez <fperez@colorado.edu>
4579 2002-02-12 Fernando Perez <fperez@colorado.edu>
4571
4580
4572 * Released 0.2.5.
4581 * Released 0.2.5.
4573
4582
4574 2002-02-11 Fernando Perez <fperez@colorado.edu>
4583 2002-02-11 Fernando Perez <fperez@colorado.edu>
4575
4584
4576 * Wrote a relatively complete Windows installer. It puts
4585 * Wrote a relatively complete Windows installer. It puts
4577 everything in place, creates Start Menu entries and fixes the
4586 everything in place, creates Start Menu entries and fixes the
4578 color issues. Nothing fancy, but it works.
4587 color issues. Nothing fancy, but it works.
4579
4588
4580 2002-02-10 Fernando Perez <fperez@colorado.edu>
4589 2002-02-10 Fernando Perez <fperez@colorado.edu>
4581
4590
4582 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4591 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4583 os.path.expanduser() call so that we can type @run ~/myfile.py and
4592 os.path.expanduser() call so that we can type @run ~/myfile.py and
4584 have thigs work as expected.
4593 have thigs work as expected.
4585
4594
4586 * IPython/genutils.py (page): fixed exception handling so things
4595 * IPython/genutils.py (page): fixed exception handling so things
4587 work both in Unix and Windows correctly. Quitting a pager triggers
4596 work both in Unix and Windows correctly. Quitting a pager triggers
4588 an IOError/broken pipe in Unix, and in windows not finding a pager
4597 an IOError/broken pipe in Unix, and in windows not finding a pager
4589 is also an IOError, so I had to actually look at the return value
4598 is also an IOError, so I had to actually look at the return value
4590 of the exception, not just the exception itself. Should be ok now.
4599 of the exception, not just the exception itself. Should be ok now.
4591
4600
4592 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4601 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4593 modified to allow case-insensitive color scheme changes.
4602 modified to allow case-insensitive color scheme changes.
4594
4603
4595 2002-02-09 Fernando Perez <fperez@colorado.edu>
4604 2002-02-09 Fernando Perez <fperez@colorado.edu>
4596
4605
4597 * IPython/genutils.py (native_line_ends): new function to leave
4606 * IPython/genutils.py (native_line_ends): new function to leave
4598 user config files with os-native line-endings.
4607 user config files with os-native line-endings.
4599
4608
4600 * README and manual updates.
4609 * README and manual updates.
4601
4610
4602 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4611 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4603 instead of StringType to catch Unicode strings.
4612 instead of StringType to catch Unicode strings.
4604
4613
4605 * IPython/genutils.py (filefind): fixed bug for paths with
4614 * IPython/genutils.py (filefind): fixed bug for paths with
4606 embedded spaces (very common in Windows).
4615 embedded spaces (very common in Windows).
4607
4616
4608 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4617 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4609 files under Windows, so that they get automatically associated
4618 files under Windows, so that they get automatically associated
4610 with a text editor. Windows makes it a pain to handle
4619 with a text editor. Windows makes it a pain to handle
4611 extension-less files.
4620 extension-less files.
4612
4621
4613 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4622 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4614 warning about readline only occur for Posix. In Windows there's no
4623 warning about readline only occur for Posix. In Windows there's no
4615 way to get readline, so why bother with the warning.
4624 way to get readline, so why bother with the warning.
4616
4625
4617 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4626 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4618 for __str__ instead of dir(self), since dir() changed in 2.2.
4627 for __str__ instead of dir(self), since dir() changed in 2.2.
4619
4628
4620 * Ported to Windows! Tested on XP, I suspect it should work fine
4629 * Ported to Windows! Tested on XP, I suspect it should work fine
4621 on NT/2000, but I don't think it will work on 98 et al. That
4630 on NT/2000, but I don't think it will work on 98 et al. That
4622 series of Windows is such a piece of junk anyway that I won't try
4631 series of Windows is such a piece of junk anyway that I won't try
4623 porting it there. The XP port was straightforward, showed a few
4632 porting it there. The XP port was straightforward, showed a few
4624 bugs here and there (fixed all), in particular some string
4633 bugs here and there (fixed all), in particular some string
4625 handling stuff which required considering Unicode strings (which
4634 handling stuff which required considering Unicode strings (which
4626 Windows uses). This is good, but hasn't been too tested :) No
4635 Windows uses). This is good, but hasn't been too tested :) No
4627 fancy installer yet, I'll put a note in the manual so people at
4636 fancy installer yet, I'll put a note in the manual so people at
4628 least make manually a shortcut.
4637 least make manually a shortcut.
4629
4638
4630 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4639 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4631 into a single one, "colors". This now controls both prompt and
4640 into a single one, "colors". This now controls both prompt and
4632 exception color schemes, and can be changed both at startup
4641 exception color schemes, and can be changed both at startup
4633 (either via command-line switches or via ipythonrc files) and at
4642 (either via command-line switches or via ipythonrc files) and at
4634 runtime, with @colors.
4643 runtime, with @colors.
4635 (Magic.magic_run): renamed @prun to @run and removed the old
4644 (Magic.magic_run): renamed @prun to @run and removed the old
4636 @run. The two were too similar to warrant keeping both.
4645 @run. The two were too similar to warrant keeping both.
4637
4646
4638 2002-02-03 Fernando Perez <fperez@colorado.edu>
4647 2002-02-03 Fernando Perez <fperez@colorado.edu>
4639
4648
4640 * IPython/iplib.py (install_first_time): Added comment on how to
4649 * IPython/iplib.py (install_first_time): Added comment on how to
4641 configure the color options for first-time users. Put a <return>
4650 configure the color options for first-time users. Put a <return>
4642 request at the end so that small-terminal users get a chance to
4651 request at the end so that small-terminal users get a chance to
4643 read the startup info.
4652 read the startup info.
4644
4653
4645 2002-01-23 Fernando Perez <fperez@colorado.edu>
4654 2002-01-23 Fernando Perez <fperez@colorado.edu>
4646
4655
4647 * IPython/iplib.py (CachedOutput.update): Changed output memory
4656 * IPython/iplib.py (CachedOutput.update): Changed output memory
4648 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4657 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4649 input history we still use _i. Did this b/c these variable are
4658 input history we still use _i. Did this b/c these variable are
4650 very commonly used in interactive work, so the less we need to
4659 very commonly used in interactive work, so the less we need to
4651 type the better off we are.
4660 type the better off we are.
4652 (Magic.magic_prun): updated @prun to better handle the namespaces
4661 (Magic.magic_prun): updated @prun to better handle the namespaces
4653 the file will run in, including a fix for __name__ not being set
4662 the file will run in, including a fix for __name__ not being set
4654 before.
4663 before.
4655
4664
4656 2002-01-20 Fernando Perez <fperez@colorado.edu>
4665 2002-01-20 Fernando Perez <fperez@colorado.edu>
4657
4666
4658 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4667 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4659 extra garbage for Python 2.2. Need to look more carefully into
4668 extra garbage for Python 2.2. Need to look more carefully into
4660 this later.
4669 this later.
4661
4670
4662 2002-01-19 Fernando Perez <fperez@colorado.edu>
4671 2002-01-19 Fernando Perez <fperez@colorado.edu>
4663
4672
4664 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4673 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4665 display SyntaxError exceptions properly formatted when they occur
4674 display SyntaxError exceptions properly formatted when they occur
4666 (they can be triggered by imported code).
4675 (they can be triggered by imported code).
4667
4676
4668 2002-01-18 Fernando Perez <fperez@colorado.edu>
4677 2002-01-18 Fernando Perez <fperez@colorado.edu>
4669
4678
4670 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4679 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4671 SyntaxError exceptions are reported nicely formatted, instead of
4680 SyntaxError exceptions are reported nicely formatted, instead of
4672 spitting out only offset information as before.
4681 spitting out only offset information as before.
4673 (Magic.magic_prun): Added the @prun function for executing
4682 (Magic.magic_prun): Added the @prun function for executing
4674 programs with command line args inside IPython.
4683 programs with command line args inside IPython.
4675
4684
4676 2002-01-16 Fernando Perez <fperez@colorado.edu>
4685 2002-01-16 Fernando Perez <fperez@colorado.edu>
4677
4686
4678 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4687 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4679 to *not* include the last item given in a range. This brings their
4688 to *not* include the last item given in a range. This brings their
4680 behavior in line with Python's slicing:
4689 behavior in line with Python's slicing:
4681 a[n1:n2] -> a[n1]...a[n2-1]
4690 a[n1:n2] -> a[n1]...a[n2-1]
4682 It may be a bit less convenient, but I prefer to stick to Python's
4691 It may be a bit less convenient, but I prefer to stick to Python's
4683 conventions *everywhere*, so users never have to wonder.
4692 conventions *everywhere*, so users never have to wonder.
4684 (Magic.magic_macro): Added @macro function to ease the creation of
4693 (Magic.magic_macro): Added @macro function to ease the creation of
4685 macros.
4694 macros.
4686
4695
4687 2002-01-05 Fernando Perez <fperez@colorado.edu>
4696 2002-01-05 Fernando Perez <fperez@colorado.edu>
4688
4697
4689 * Released 0.2.4.
4698 * Released 0.2.4.
4690
4699
4691 * IPython/iplib.py (Magic.magic_pdef):
4700 * IPython/iplib.py (Magic.magic_pdef):
4692 (InteractiveShell.safe_execfile): report magic lines and error
4701 (InteractiveShell.safe_execfile): report magic lines and error
4693 lines without line numbers so one can easily copy/paste them for
4702 lines without line numbers so one can easily copy/paste them for
4694 re-execution.
4703 re-execution.
4695
4704
4696 * Updated manual with recent changes.
4705 * Updated manual with recent changes.
4697
4706
4698 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4707 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4699 docstring printing when class? is called. Very handy for knowing
4708 docstring printing when class? is called. Very handy for knowing
4700 how to create class instances (as long as __init__ is well
4709 how to create class instances (as long as __init__ is well
4701 documented, of course :)
4710 documented, of course :)
4702 (Magic.magic_doc): print both class and constructor docstrings.
4711 (Magic.magic_doc): print both class and constructor docstrings.
4703 (Magic.magic_pdef): give constructor info if passed a class and
4712 (Magic.magic_pdef): give constructor info if passed a class and
4704 __call__ info for callable object instances.
4713 __call__ info for callable object instances.
4705
4714
4706 2002-01-04 Fernando Perez <fperez@colorado.edu>
4715 2002-01-04 Fernando Perez <fperez@colorado.edu>
4707
4716
4708 * Made deep_reload() off by default. It doesn't always work
4717 * Made deep_reload() off by default. It doesn't always work
4709 exactly as intended, so it's probably safer to have it off. It's
4718 exactly as intended, so it's probably safer to have it off. It's
4710 still available as dreload() anyway, so nothing is lost.
4719 still available as dreload() anyway, so nothing is lost.
4711
4720
4712 2002-01-02 Fernando Perez <fperez@colorado.edu>
4721 2002-01-02 Fernando Perez <fperez@colorado.edu>
4713
4722
4714 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4723 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4715 so I wanted an updated release).
4724 so I wanted an updated release).
4716
4725
4717 2001-12-27 Fernando Perez <fperez@colorado.edu>
4726 2001-12-27 Fernando Perez <fperez@colorado.edu>
4718
4727
4719 * IPython/iplib.py (InteractiveShell.interact): Added the original
4728 * IPython/iplib.py (InteractiveShell.interact): Added the original
4720 code from 'code.py' for this module in order to change the
4729 code from 'code.py' for this module in order to change the
4721 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4730 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4722 the history cache would break when the user hit Ctrl-C, and
4731 the history cache would break when the user hit Ctrl-C, and
4723 interact() offers no way to add any hooks to it.
4732 interact() offers no way to add any hooks to it.
4724
4733
4725 2001-12-23 Fernando Perez <fperez@colorado.edu>
4734 2001-12-23 Fernando Perez <fperez@colorado.edu>
4726
4735
4727 * setup.py: added check for 'MANIFEST' before trying to remove
4736 * setup.py: added check for 'MANIFEST' before trying to remove
4728 it. Thanks to Sean Reifschneider.
4737 it. Thanks to Sean Reifschneider.
4729
4738
4730 2001-12-22 Fernando Perez <fperez@colorado.edu>
4739 2001-12-22 Fernando Perez <fperez@colorado.edu>
4731
4740
4732 * Released 0.2.2.
4741 * Released 0.2.2.
4733
4742
4734 * Finished (reasonably) writing the manual. Later will add the
4743 * Finished (reasonably) writing the manual. Later will add the
4735 python-standard navigation stylesheets, but for the time being
4744 python-standard navigation stylesheets, but for the time being
4736 it's fairly complete. Distribution will include html and pdf
4745 it's fairly complete. Distribution will include html and pdf
4737 versions.
4746 versions.
4738
4747
4739 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4748 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4740 (MayaVi author).
4749 (MayaVi author).
4741
4750
4742 2001-12-21 Fernando Perez <fperez@colorado.edu>
4751 2001-12-21 Fernando Perez <fperez@colorado.edu>
4743
4752
4744 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4753 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4745 good public release, I think (with the manual and the distutils
4754 good public release, I think (with the manual and the distutils
4746 installer). The manual can use some work, but that can go
4755 installer). The manual can use some work, but that can go
4747 slowly. Otherwise I think it's quite nice for end users. Next
4756 slowly. Otherwise I think it's quite nice for end users. Next
4748 summer, rewrite the guts of it...
4757 summer, rewrite the guts of it...
4749
4758
4750 * Changed format of ipythonrc files to use whitespace as the
4759 * Changed format of ipythonrc files to use whitespace as the
4751 separator instead of an explicit '='. Cleaner.
4760 separator instead of an explicit '='. Cleaner.
4752
4761
4753 2001-12-20 Fernando Perez <fperez@colorado.edu>
4762 2001-12-20 Fernando Perez <fperez@colorado.edu>
4754
4763
4755 * Started a manual in LyX. For now it's just a quick merge of the
4764 * Started a manual in LyX. For now it's just a quick merge of the
4756 various internal docstrings and READMEs. Later it may grow into a
4765 various internal docstrings and READMEs. Later it may grow into a
4757 nice, full-blown manual.
4766 nice, full-blown manual.
4758
4767
4759 * Set up a distutils based installer. Installation should now be
4768 * Set up a distutils based installer. Installation should now be
4760 trivially simple for end-users.
4769 trivially simple for end-users.
4761
4770
4762 2001-12-11 Fernando Perez <fperez@colorado.edu>
4771 2001-12-11 Fernando Perez <fperez@colorado.edu>
4763
4772
4764 * Released 0.2.0. First public release, announced it at
4773 * Released 0.2.0. First public release, announced it at
4765 comp.lang.python. From now on, just bugfixes...
4774 comp.lang.python. From now on, just bugfixes...
4766
4775
4767 * Went through all the files, set copyright/license notices and
4776 * Went through all the files, set copyright/license notices and
4768 cleaned up things. Ready for release.
4777 cleaned up things. Ready for release.
4769
4778
4770 2001-12-10 Fernando Perez <fperez@colorado.edu>
4779 2001-12-10 Fernando Perez <fperez@colorado.edu>
4771
4780
4772 * Changed the first-time installer not to use tarfiles. It's more
4781 * Changed the first-time installer not to use tarfiles. It's more
4773 robust now and less unix-dependent. Also makes it easier for
4782 robust now and less unix-dependent. Also makes it easier for
4774 people to later upgrade versions.
4783 people to later upgrade versions.
4775
4784
4776 * Changed @exit to @abort to reflect the fact that it's pretty
4785 * Changed @exit to @abort to reflect the fact that it's pretty
4777 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4786 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4778 becomes significant only when IPyhton is embedded: in that case,
4787 becomes significant only when IPyhton is embedded: in that case,
4779 C-D closes IPython only, but @abort kills the enclosing program
4788 C-D closes IPython only, but @abort kills the enclosing program
4780 too (unless it had called IPython inside a try catching
4789 too (unless it had called IPython inside a try catching
4781 SystemExit).
4790 SystemExit).
4782
4791
4783 * Created Shell module which exposes the actuall IPython Shell
4792 * Created Shell module which exposes the actuall IPython Shell
4784 classes, currently the normal and the embeddable one. This at
4793 classes, currently the normal and the embeddable one. This at
4785 least offers a stable interface we won't need to change when
4794 least offers a stable interface we won't need to change when
4786 (later) the internals are rewritten. That rewrite will be confined
4795 (later) the internals are rewritten. That rewrite will be confined
4787 to iplib and ipmaker, but the Shell interface should remain as is.
4796 to iplib and ipmaker, but the Shell interface should remain as is.
4788
4797
4789 * Added embed module which offers an embeddable IPShell object,
4798 * Added embed module which offers an embeddable IPShell object,
4790 useful to fire up IPython *inside* a running program. Great for
4799 useful to fire up IPython *inside* a running program. Great for
4791 debugging or dynamical data analysis.
4800 debugging or dynamical data analysis.
4792
4801
4793 2001-12-08 Fernando Perez <fperez@colorado.edu>
4802 2001-12-08 Fernando Perez <fperez@colorado.edu>
4794
4803
4795 * Fixed small bug preventing seeing info from methods of defined
4804 * Fixed small bug preventing seeing info from methods of defined
4796 objects (incorrect namespace in _ofind()).
4805 objects (incorrect namespace in _ofind()).
4797
4806
4798 * Documentation cleanup. Moved the main usage docstrings to a
4807 * Documentation cleanup. Moved the main usage docstrings to a
4799 separate file, usage.py (cleaner to maintain, and hopefully in the
4808 separate file, usage.py (cleaner to maintain, and hopefully in the
4800 future some perlpod-like way of producing interactive, man and
4809 future some perlpod-like way of producing interactive, man and
4801 html docs out of it will be found).
4810 html docs out of it will be found).
4802
4811
4803 * Added @profile to see your profile at any time.
4812 * Added @profile to see your profile at any time.
4804
4813
4805 * Added @p as an alias for 'print'. It's especially convenient if
4814 * Added @p as an alias for 'print'. It's especially convenient if
4806 using automagic ('p x' prints x).
4815 using automagic ('p x' prints x).
4807
4816
4808 * Small cleanups and fixes after a pychecker run.
4817 * Small cleanups and fixes after a pychecker run.
4809
4818
4810 * Changed the @cd command to handle @cd - and @cd -<n> for
4819 * Changed the @cd command to handle @cd - and @cd -<n> for
4811 visiting any directory in _dh.
4820 visiting any directory in _dh.
4812
4821
4813 * Introduced _dh, a history of visited directories. @dhist prints
4822 * Introduced _dh, a history of visited directories. @dhist prints
4814 it out with numbers.
4823 it out with numbers.
4815
4824
4816 2001-12-07 Fernando Perez <fperez@colorado.edu>
4825 2001-12-07 Fernando Perez <fperez@colorado.edu>
4817
4826
4818 * Released 0.1.22
4827 * Released 0.1.22
4819
4828
4820 * Made initialization a bit more robust against invalid color
4829 * Made initialization a bit more robust against invalid color
4821 options in user input (exit, not traceback-crash).
4830 options in user input (exit, not traceback-crash).
4822
4831
4823 * Changed the bug crash reporter to write the report only in the
4832 * Changed the bug crash reporter to write the report only in the
4824 user's .ipython directory. That way IPython won't litter people's
4833 user's .ipython directory. That way IPython won't litter people's
4825 hard disks with crash files all over the place. Also print on
4834 hard disks with crash files all over the place. Also print on
4826 screen the necessary mail command.
4835 screen the necessary mail command.
4827
4836
4828 * With the new ultraTB, implemented LightBG color scheme for light
4837 * With the new ultraTB, implemented LightBG color scheme for light
4829 background terminals. A lot of people like white backgrounds, so I
4838 background terminals. A lot of people like white backgrounds, so I
4830 guess we should at least give them something readable.
4839 guess we should at least give them something readable.
4831
4840
4832 2001-12-06 Fernando Perez <fperez@colorado.edu>
4841 2001-12-06 Fernando Perez <fperez@colorado.edu>
4833
4842
4834 * Modified the structure of ultraTB. Now there's a proper class
4843 * Modified the structure of ultraTB. Now there's a proper class
4835 for tables of color schemes which allow adding schemes easily and
4844 for tables of color schemes which allow adding schemes easily and
4836 switching the active scheme without creating a new instance every
4845 switching the active scheme without creating a new instance every
4837 time (which was ridiculous). The syntax for creating new schemes
4846 time (which was ridiculous). The syntax for creating new schemes
4838 is also cleaner. I think ultraTB is finally done, with a clean
4847 is also cleaner. I think ultraTB is finally done, with a clean
4839 class structure. Names are also much cleaner (now there's proper
4848 class structure. Names are also much cleaner (now there's proper
4840 color tables, no need for every variable to also have 'color' in
4849 color tables, no need for every variable to also have 'color' in
4841 its name).
4850 its name).
4842
4851
4843 * Broke down genutils into separate files. Now genutils only
4852 * Broke down genutils into separate files. Now genutils only
4844 contains utility functions, and classes have been moved to their
4853 contains utility functions, and classes have been moved to their
4845 own files (they had enough independent functionality to warrant
4854 own files (they had enough independent functionality to warrant
4846 it): ConfigLoader, OutputTrap, Struct.
4855 it): ConfigLoader, OutputTrap, Struct.
4847
4856
4848 2001-12-05 Fernando Perez <fperez@colorado.edu>
4857 2001-12-05 Fernando Perez <fperez@colorado.edu>
4849
4858
4850 * IPython turns 21! Released version 0.1.21, as a candidate for
4859 * IPython turns 21! Released version 0.1.21, as a candidate for
4851 public consumption. If all goes well, release in a few days.
4860 public consumption. If all goes well, release in a few days.
4852
4861
4853 * Fixed path bug (files in Extensions/ directory wouldn't be found
4862 * Fixed path bug (files in Extensions/ directory wouldn't be found
4854 unless IPython/ was explicitly in sys.path).
4863 unless IPython/ was explicitly in sys.path).
4855
4864
4856 * Extended the FlexCompleter class as MagicCompleter to allow
4865 * Extended the FlexCompleter class as MagicCompleter to allow
4857 completion of @-starting lines.
4866 completion of @-starting lines.
4858
4867
4859 * Created __release__.py file as a central repository for release
4868 * Created __release__.py file as a central repository for release
4860 info that other files can read from.
4869 info that other files can read from.
4861
4870
4862 * Fixed small bug in logging: when logging was turned on in
4871 * Fixed small bug in logging: when logging was turned on in
4863 mid-session, old lines with special meanings (!@?) were being
4872 mid-session, old lines with special meanings (!@?) were being
4864 logged without the prepended comment, which is necessary since
4873 logged without the prepended comment, which is necessary since
4865 they are not truly valid python syntax. This should make session
4874 they are not truly valid python syntax. This should make session
4866 restores produce less errors.
4875 restores produce less errors.
4867
4876
4868 * The namespace cleanup forced me to make a FlexCompleter class
4877 * The namespace cleanup forced me to make a FlexCompleter class
4869 which is nothing but a ripoff of rlcompleter, but with selectable
4878 which is nothing but a ripoff of rlcompleter, but with selectable
4870 namespace (rlcompleter only works in __main__.__dict__). I'll try
4879 namespace (rlcompleter only works in __main__.__dict__). I'll try
4871 to submit a note to the authors to see if this change can be
4880 to submit a note to the authors to see if this change can be
4872 incorporated in future rlcompleter releases (Dec.6: done)
4881 incorporated in future rlcompleter releases (Dec.6: done)
4873
4882
4874 * More fixes to namespace handling. It was a mess! Now all
4883 * More fixes to namespace handling. It was a mess! Now all
4875 explicit references to __main__.__dict__ are gone (except when
4884 explicit references to __main__.__dict__ are gone (except when
4876 really needed) and everything is handled through the namespace
4885 really needed) and everything is handled through the namespace
4877 dicts in the IPython instance. We seem to be getting somewhere
4886 dicts in the IPython instance. We seem to be getting somewhere
4878 with this, finally...
4887 with this, finally...
4879
4888
4880 * Small documentation updates.
4889 * Small documentation updates.
4881
4890
4882 * Created the Extensions directory under IPython (with an
4891 * Created the Extensions directory under IPython (with an
4883 __init__.py). Put the PhysicalQ stuff there. This directory should
4892 __init__.py). Put the PhysicalQ stuff there. This directory should
4884 be used for all special-purpose extensions.
4893 be used for all special-purpose extensions.
4885
4894
4886 * File renaming:
4895 * File renaming:
4887 ipythonlib --> ipmaker
4896 ipythonlib --> ipmaker
4888 ipplib --> iplib
4897 ipplib --> iplib
4889 This makes a bit more sense in terms of what these files actually do.
4898 This makes a bit more sense in terms of what these files actually do.
4890
4899
4891 * Moved all the classes and functions in ipythonlib to ipplib, so
4900 * Moved all the classes and functions in ipythonlib to ipplib, so
4892 now ipythonlib only has make_IPython(). This will ease up its
4901 now ipythonlib only has make_IPython(). This will ease up its
4893 splitting in smaller functional chunks later.
4902 splitting in smaller functional chunks later.
4894
4903
4895 * Cleaned up (done, I think) output of @whos. Better column
4904 * Cleaned up (done, I think) output of @whos. Better column
4896 formatting, and now shows str(var) for as much as it can, which is
4905 formatting, and now shows str(var) for as much as it can, which is
4897 typically what one gets with a 'print var'.
4906 typically what one gets with a 'print var'.
4898
4907
4899 2001-12-04 Fernando Perez <fperez@colorado.edu>
4908 2001-12-04 Fernando Perez <fperez@colorado.edu>
4900
4909
4901 * Fixed namespace problems. Now builtin/IPyhton/user names get
4910 * Fixed namespace problems. Now builtin/IPyhton/user names get
4902 properly reported in their namespace. Internal namespace handling
4911 properly reported in their namespace. Internal namespace handling
4903 is finally getting decent (not perfect yet, but much better than
4912 is finally getting decent (not perfect yet, but much better than
4904 the ad-hoc mess we had).
4913 the ad-hoc mess we had).
4905
4914
4906 * Removed -exit option. If people just want to run a python
4915 * Removed -exit option. If people just want to run a python
4907 script, that's what the normal interpreter is for. Less
4916 script, that's what the normal interpreter is for. Less
4908 unnecessary options, less chances for bugs.
4917 unnecessary options, less chances for bugs.
4909
4918
4910 * Added a crash handler which generates a complete post-mortem if
4919 * Added a crash handler which generates a complete post-mortem if
4911 IPython crashes. This will help a lot in tracking bugs down the
4920 IPython crashes. This will help a lot in tracking bugs down the
4912 road.
4921 road.
4913
4922
4914 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4923 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4915 which were boud to functions being reassigned would bypass the
4924 which were boud to functions being reassigned would bypass the
4916 logger, breaking the sync of _il with the prompt counter. This
4925 logger, breaking the sync of _il with the prompt counter. This
4917 would then crash IPython later when a new line was logged.
4926 would then crash IPython later when a new line was logged.
4918
4927
4919 2001-12-02 Fernando Perez <fperez@colorado.edu>
4928 2001-12-02 Fernando Perez <fperez@colorado.edu>
4920
4929
4921 * Made IPython a package. This means people don't have to clutter
4930 * Made IPython a package. This means people don't have to clutter
4922 their sys.path with yet another directory. Changed the INSTALL
4931 their sys.path with yet another directory. Changed the INSTALL
4923 file accordingly.
4932 file accordingly.
4924
4933
4925 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4934 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4926 sorts its output (so @who shows it sorted) and @whos formats the
4935 sorts its output (so @who shows it sorted) and @whos formats the
4927 table according to the width of the first column. Nicer, easier to
4936 table according to the width of the first column. Nicer, easier to
4928 read. Todo: write a generic table_format() which takes a list of
4937 read. Todo: write a generic table_format() which takes a list of
4929 lists and prints it nicely formatted, with optional row/column
4938 lists and prints it nicely formatted, with optional row/column
4930 separators and proper padding and justification.
4939 separators and proper padding and justification.
4931
4940
4932 * Released 0.1.20
4941 * Released 0.1.20
4933
4942
4934 * Fixed bug in @log which would reverse the inputcache list (a
4943 * Fixed bug in @log which would reverse the inputcache list (a
4935 copy operation was missing).
4944 copy operation was missing).
4936
4945
4937 * Code cleanup. @config was changed to use page(). Better, since
4946 * Code cleanup. @config was changed to use page(). Better, since
4938 its output is always quite long.
4947 its output is always quite long.
4939
4948
4940 * Itpl is back as a dependency. I was having too many problems
4949 * Itpl is back as a dependency. I was having too many problems
4941 getting the parametric aliases to work reliably, and it's just
4950 getting the parametric aliases to work reliably, and it's just
4942 easier to code weird string operations with it than playing %()s
4951 easier to code weird string operations with it than playing %()s
4943 games. It's only ~6k, so I don't think it's too big a deal.
4952 games. It's only ~6k, so I don't think it's too big a deal.
4944
4953
4945 * Found (and fixed) a very nasty bug with history. !lines weren't
4954 * Found (and fixed) a very nasty bug with history. !lines weren't
4946 getting cached, and the out of sync caches would crash
4955 getting cached, and the out of sync caches would crash
4947 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4956 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4948 division of labor a bit better. Bug fixed, cleaner structure.
4957 division of labor a bit better. Bug fixed, cleaner structure.
4949
4958
4950 2001-12-01 Fernando Perez <fperez@colorado.edu>
4959 2001-12-01 Fernando Perez <fperez@colorado.edu>
4951
4960
4952 * Released 0.1.19
4961 * Released 0.1.19
4953
4962
4954 * Added option -n to @hist to prevent line number printing. Much
4963 * Added option -n to @hist to prevent line number printing. Much
4955 easier to copy/paste code this way.
4964 easier to copy/paste code this way.
4956
4965
4957 * Created global _il to hold the input list. Allows easy
4966 * Created global _il to hold the input list. Allows easy
4958 re-execution of blocks of code by slicing it (inspired by Janko's
4967 re-execution of blocks of code by slicing it (inspired by Janko's
4959 comment on 'macros').
4968 comment on 'macros').
4960
4969
4961 * Small fixes and doc updates.
4970 * Small fixes and doc updates.
4962
4971
4963 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4972 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4964 much too fragile with automagic. Handles properly multi-line
4973 much too fragile with automagic. Handles properly multi-line
4965 statements and takes parameters.
4974 statements and takes parameters.
4966
4975
4967 2001-11-30 Fernando Perez <fperez@colorado.edu>
4976 2001-11-30 Fernando Perez <fperez@colorado.edu>
4968
4977
4969 * Version 0.1.18 released.
4978 * Version 0.1.18 released.
4970
4979
4971 * Fixed nasty namespace bug in initial module imports.
4980 * Fixed nasty namespace bug in initial module imports.
4972
4981
4973 * Added copyright/license notes to all code files (except
4982 * Added copyright/license notes to all code files (except
4974 DPyGetOpt). For the time being, LGPL. That could change.
4983 DPyGetOpt). For the time being, LGPL. That could change.
4975
4984
4976 * Rewrote a much nicer README, updated INSTALL, cleaned up
4985 * Rewrote a much nicer README, updated INSTALL, cleaned up
4977 ipythonrc-* samples.
4986 ipythonrc-* samples.
4978
4987
4979 * Overall code/documentation cleanup. Basically ready for
4988 * Overall code/documentation cleanup. Basically ready for
4980 release. Only remaining thing: licence decision (LGPL?).
4989 release. Only remaining thing: licence decision (LGPL?).
4981
4990
4982 * Converted load_config to a class, ConfigLoader. Now recursion
4991 * Converted load_config to a class, ConfigLoader. Now recursion
4983 control is better organized. Doesn't include the same file twice.
4992 control is better organized. Doesn't include the same file twice.
4984
4993
4985 2001-11-29 Fernando Perez <fperez@colorado.edu>
4994 2001-11-29 Fernando Perez <fperez@colorado.edu>
4986
4995
4987 * Got input history working. Changed output history variables from
4996 * Got input history working. Changed output history variables from
4988 _p to _o so that _i is for input and _o for output. Just cleaner
4997 _p to _o so that _i is for input and _o for output. Just cleaner
4989 convention.
4998 convention.
4990
4999
4991 * Implemented parametric aliases. This pretty much allows the
5000 * Implemented parametric aliases. This pretty much allows the
4992 alias system to offer full-blown shell convenience, I think.
5001 alias system to offer full-blown shell convenience, I think.
4993
5002
4994 * Version 0.1.17 released, 0.1.18 opened.
5003 * Version 0.1.17 released, 0.1.18 opened.
4995
5004
4996 * dot_ipython/ipythonrc (alias): added documentation.
5005 * dot_ipython/ipythonrc (alias): added documentation.
4997 (xcolor): Fixed small bug (xcolors -> xcolor)
5006 (xcolor): Fixed small bug (xcolors -> xcolor)
4998
5007
4999 * Changed the alias system. Now alias is a magic command to define
5008 * Changed the alias system. Now alias is a magic command to define
5000 aliases just like the shell. Rationale: the builtin magics should
5009 aliases just like the shell. Rationale: the builtin magics should
5001 be there for things deeply connected to IPython's
5010 be there for things deeply connected to IPython's
5002 architecture. And this is a much lighter system for what I think
5011 architecture. And this is a much lighter system for what I think
5003 is the really important feature: allowing users to define quickly
5012 is the really important feature: allowing users to define quickly
5004 magics that will do shell things for them, so they can customize
5013 magics that will do shell things for them, so they can customize
5005 IPython easily to match their work habits. If someone is really
5014 IPython easily to match their work habits. If someone is really
5006 desperate to have another name for a builtin alias, they can
5015 desperate to have another name for a builtin alias, they can
5007 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5016 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5008 works.
5017 works.
5009
5018
5010 2001-11-28 Fernando Perez <fperez@colorado.edu>
5019 2001-11-28 Fernando Perez <fperez@colorado.edu>
5011
5020
5012 * Changed @file so that it opens the source file at the proper
5021 * Changed @file so that it opens the source file at the proper
5013 line. Since it uses less, if your EDITOR environment is
5022 line. Since it uses less, if your EDITOR environment is
5014 configured, typing v will immediately open your editor of choice
5023 configured, typing v will immediately open your editor of choice
5015 right at the line where the object is defined. Not as quick as
5024 right at the line where the object is defined. Not as quick as
5016 having a direct @edit command, but for all intents and purposes it
5025 having a direct @edit command, but for all intents and purposes it
5017 works. And I don't have to worry about writing @edit to deal with
5026 works. And I don't have to worry about writing @edit to deal with
5018 all the editors, less does that.
5027 all the editors, less does that.
5019
5028
5020 * Version 0.1.16 released, 0.1.17 opened.
5029 * Version 0.1.16 released, 0.1.17 opened.
5021
5030
5022 * Fixed some nasty bugs in the page/page_dumb combo that could
5031 * Fixed some nasty bugs in the page/page_dumb combo that could
5023 crash IPython.
5032 crash IPython.
5024
5033
5025 2001-11-27 Fernando Perez <fperez@colorado.edu>
5034 2001-11-27 Fernando Perez <fperez@colorado.edu>
5026
5035
5027 * Version 0.1.15 released, 0.1.16 opened.
5036 * Version 0.1.15 released, 0.1.16 opened.
5028
5037
5029 * Finally got ? and ?? to work for undefined things: now it's
5038 * Finally got ? and ?? to work for undefined things: now it's
5030 possible to type {}.get? and get information about the get method
5039 possible to type {}.get? and get information about the get method
5031 of dicts, or os.path? even if only os is defined (so technically
5040 of dicts, or os.path? even if only os is defined (so technically
5032 os.path isn't). Works at any level. For example, after import os,
5041 os.path isn't). Works at any level. For example, after import os,
5033 os?, os.path?, os.path.abspath? all work. This is great, took some
5042 os?, os.path?, os.path.abspath? all work. This is great, took some
5034 work in _ofind.
5043 work in _ofind.
5035
5044
5036 * Fixed more bugs with logging. The sanest way to do it was to add
5045 * Fixed more bugs with logging. The sanest way to do it was to add
5037 to @log a 'mode' parameter. Killed two in one shot (this mode
5046 to @log a 'mode' parameter. Killed two in one shot (this mode
5038 option was a request of Janko's). I think it's finally clean
5047 option was a request of Janko's). I think it's finally clean
5039 (famous last words).
5048 (famous last words).
5040
5049
5041 * Added a page_dumb() pager which does a decent job of paging on
5050 * Added a page_dumb() pager which does a decent job of paging on
5042 screen, if better things (like less) aren't available. One less
5051 screen, if better things (like less) aren't available. One less
5043 unix dependency (someday maybe somebody will port this to
5052 unix dependency (someday maybe somebody will port this to
5044 windows).
5053 windows).
5045
5054
5046 * Fixed problem in magic_log: would lock of logging out if log
5055 * Fixed problem in magic_log: would lock of logging out if log
5047 creation failed (because it would still think it had succeeded).
5056 creation failed (because it would still think it had succeeded).
5048
5057
5049 * Improved the page() function using curses to auto-detect screen
5058 * Improved the page() function using curses to auto-detect screen
5050 size. Now it can make a much better decision on whether to print
5059 size. Now it can make a much better decision on whether to print
5051 or page a string. Option screen_length was modified: a value 0
5060 or page a string. Option screen_length was modified: a value 0
5052 means auto-detect, and that's the default now.
5061 means auto-detect, and that's the default now.
5053
5062
5054 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5063 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5055 go out. I'll test it for a few days, then talk to Janko about
5064 go out. I'll test it for a few days, then talk to Janko about
5056 licences and announce it.
5065 licences and announce it.
5057
5066
5058 * Fixed the length of the auto-generated ---> prompt which appears
5067 * Fixed the length of the auto-generated ---> prompt which appears
5059 for auto-parens and auto-quotes. Getting this right isn't trivial,
5068 for auto-parens and auto-quotes. Getting this right isn't trivial,
5060 with all the color escapes, different prompt types and optional
5069 with all the color escapes, different prompt types and optional
5061 separators. But it seems to be working in all the combinations.
5070 separators. But it seems to be working in all the combinations.
5062
5071
5063 2001-11-26 Fernando Perez <fperez@colorado.edu>
5072 2001-11-26 Fernando Perez <fperez@colorado.edu>
5064
5073
5065 * Wrote a regexp filter to get option types from the option names
5074 * Wrote a regexp filter to get option types from the option names
5066 string. This eliminates the need to manually keep two duplicate
5075 string. This eliminates the need to manually keep two duplicate
5067 lists.
5076 lists.
5068
5077
5069 * Removed the unneeded check_option_names. Now options are handled
5078 * Removed the unneeded check_option_names. Now options are handled
5070 in a much saner manner and it's easy to visually check that things
5079 in a much saner manner and it's easy to visually check that things
5071 are ok.
5080 are ok.
5072
5081
5073 * Updated version numbers on all files I modified to carry a
5082 * Updated version numbers on all files I modified to carry a
5074 notice so Janko and Nathan have clear version markers.
5083 notice so Janko and Nathan have clear version markers.
5075
5084
5076 * Updated docstring for ultraTB with my changes. I should send
5085 * Updated docstring for ultraTB with my changes. I should send
5077 this to Nathan.
5086 this to Nathan.
5078
5087
5079 * Lots of small fixes. Ran everything through pychecker again.
5088 * Lots of small fixes. Ran everything through pychecker again.
5080
5089
5081 * Made loading of deep_reload an cmd line option. If it's not too
5090 * Made loading of deep_reload an cmd line option. If it's not too
5082 kosher, now people can just disable it. With -nodeep_reload it's
5091 kosher, now people can just disable it. With -nodeep_reload it's
5083 still available as dreload(), it just won't overwrite reload().
5092 still available as dreload(), it just won't overwrite reload().
5084
5093
5085 * Moved many options to the no| form (-opt and -noopt
5094 * Moved many options to the no| form (-opt and -noopt
5086 accepted). Cleaner.
5095 accepted). Cleaner.
5087
5096
5088 * Changed magic_log so that if called with no parameters, it uses
5097 * Changed magic_log so that if called with no parameters, it uses
5089 'rotate' mode. That way auto-generated logs aren't automatically
5098 'rotate' mode. That way auto-generated logs aren't automatically
5090 over-written. For normal logs, now a backup is made if it exists
5099 over-written. For normal logs, now a backup is made if it exists
5091 (only 1 level of backups). A new 'backup' mode was added to the
5100 (only 1 level of backups). A new 'backup' mode was added to the
5092 Logger class to support this. This was a request by Janko.
5101 Logger class to support this. This was a request by Janko.
5093
5102
5094 * Added @logoff/@logon to stop/restart an active log.
5103 * Added @logoff/@logon to stop/restart an active log.
5095
5104
5096 * Fixed a lot of bugs in log saving/replay. It was pretty
5105 * Fixed a lot of bugs in log saving/replay. It was pretty
5097 broken. Now special lines (!@,/) appear properly in the command
5106 broken. Now special lines (!@,/) appear properly in the command
5098 history after a log replay.
5107 history after a log replay.
5099
5108
5100 * Tried and failed to implement full session saving via pickle. My
5109 * Tried and failed to implement full session saving via pickle. My
5101 idea was to pickle __main__.__dict__, but modules can't be
5110 idea was to pickle __main__.__dict__, but modules can't be
5102 pickled. This would be a better alternative to replaying logs, but
5111 pickled. This would be a better alternative to replaying logs, but
5103 seems quite tricky to get to work. Changed -session to be called
5112 seems quite tricky to get to work. Changed -session to be called
5104 -logplay, which more accurately reflects what it does. And if we
5113 -logplay, which more accurately reflects what it does. And if we
5105 ever get real session saving working, -session is now available.
5114 ever get real session saving working, -session is now available.
5106
5115
5107 * Implemented color schemes for prompts also. As for tracebacks,
5116 * Implemented color schemes for prompts also. As for tracebacks,
5108 currently only NoColor and Linux are supported. But now the
5117 currently only NoColor and Linux are supported. But now the
5109 infrastructure is in place, based on a generic ColorScheme
5118 infrastructure is in place, based on a generic ColorScheme
5110 class. So writing and activating new schemes both for the prompts
5119 class. So writing and activating new schemes both for the prompts
5111 and the tracebacks should be straightforward.
5120 and the tracebacks should be straightforward.
5112
5121
5113 * Version 0.1.13 released, 0.1.14 opened.
5122 * Version 0.1.13 released, 0.1.14 opened.
5114
5123
5115 * Changed handling of options for output cache. Now counter is
5124 * Changed handling of options for output cache. Now counter is
5116 hardwired starting at 1 and one specifies the maximum number of
5125 hardwired starting at 1 and one specifies the maximum number of
5117 entries *in the outcache* (not the max prompt counter). This is
5126 entries *in the outcache* (not the max prompt counter). This is
5118 much better, since many statements won't increase the cache
5127 much better, since many statements won't increase the cache
5119 count. It also eliminated some confusing options, now there's only
5128 count. It also eliminated some confusing options, now there's only
5120 one: cache_size.
5129 one: cache_size.
5121
5130
5122 * Added 'alias' magic function and magic_alias option in the
5131 * Added 'alias' magic function and magic_alias option in the
5123 ipythonrc file. Now the user can easily define whatever names he
5132 ipythonrc file. Now the user can easily define whatever names he
5124 wants for the magic functions without having to play weird
5133 wants for the magic functions without having to play weird
5125 namespace games. This gives IPython a real shell-like feel.
5134 namespace games. This gives IPython a real shell-like feel.
5126
5135
5127 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5136 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5128 @ or not).
5137 @ or not).
5129
5138
5130 This was one of the last remaining 'visible' bugs (that I know
5139 This was one of the last remaining 'visible' bugs (that I know
5131 of). I think if I can clean up the session loading so it works
5140 of). I think if I can clean up the session loading so it works
5132 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5141 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5133 about licensing).
5142 about licensing).
5134
5143
5135 2001-11-25 Fernando Perez <fperez@colorado.edu>
5144 2001-11-25 Fernando Perez <fperez@colorado.edu>
5136
5145
5137 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5146 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5138 there's a cleaner distinction between what ? and ?? show.
5147 there's a cleaner distinction between what ? and ?? show.
5139
5148
5140 * Added screen_length option. Now the user can define his own
5149 * Added screen_length option. Now the user can define his own
5141 screen size for page() operations.
5150 screen size for page() operations.
5142
5151
5143 * Implemented magic shell-like functions with automatic code
5152 * Implemented magic shell-like functions with automatic code
5144 generation. Now adding another function is just a matter of adding
5153 generation. Now adding another function is just a matter of adding
5145 an entry to a dict, and the function is dynamically generated at
5154 an entry to a dict, and the function is dynamically generated at
5146 run-time. Python has some really cool features!
5155 run-time. Python has some really cool features!
5147
5156
5148 * Renamed many options to cleanup conventions a little. Now all
5157 * Renamed many options to cleanup conventions a little. Now all
5149 are lowercase, and only underscores where needed. Also in the code
5158 are lowercase, and only underscores where needed. Also in the code
5150 option name tables are clearer.
5159 option name tables are clearer.
5151
5160
5152 * Changed prompts a little. Now input is 'In [n]:' instead of
5161 * Changed prompts a little. Now input is 'In [n]:' instead of
5153 'In[n]:='. This allows it the numbers to be aligned with the
5162 'In[n]:='. This allows it the numbers to be aligned with the
5154 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5163 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5155 Python (it was a Mathematica thing). The '...' continuation prompt
5164 Python (it was a Mathematica thing). The '...' continuation prompt
5156 was also changed a little to align better.
5165 was also changed a little to align better.
5157
5166
5158 * Fixed bug when flushing output cache. Not all _p<n> variables
5167 * Fixed bug when flushing output cache. Not all _p<n> variables
5159 exist, so their deletion needs to be wrapped in a try:
5168 exist, so their deletion needs to be wrapped in a try:
5160
5169
5161 * Figured out how to properly use inspect.formatargspec() (it
5170 * Figured out how to properly use inspect.formatargspec() (it
5162 requires the args preceded by *). So I removed all the code from
5171 requires the args preceded by *). So I removed all the code from
5163 _get_pdef in Magic, which was just replicating that.
5172 _get_pdef in Magic, which was just replicating that.
5164
5173
5165 * Added test to prefilter to allow redefining magic function names
5174 * Added test to prefilter to allow redefining magic function names
5166 as variables. This is ok, since the @ form is always available,
5175 as variables. This is ok, since the @ form is always available,
5167 but whe should allow the user to define a variable called 'ls' if
5176 but whe should allow the user to define a variable called 'ls' if
5168 he needs it.
5177 he needs it.
5169
5178
5170 * Moved the ToDo information from README into a separate ToDo.
5179 * Moved the ToDo information from README into a separate ToDo.
5171
5180
5172 * General code cleanup and small bugfixes. I think it's close to a
5181 * General code cleanup and small bugfixes. I think it's close to a
5173 state where it can be released, obviously with a big 'beta'
5182 state where it can be released, obviously with a big 'beta'
5174 warning on it.
5183 warning on it.
5175
5184
5176 * Got the magic function split to work. Now all magics are defined
5185 * Got the magic function split to work. Now all magics are defined
5177 in a separate class. It just organizes things a bit, and now
5186 in a separate class. It just organizes things a bit, and now
5178 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5187 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5179 was too long).
5188 was too long).
5180
5189
5181 * Changed @clear to @reset to avoid potential confusions with
5190 * Changed @clear to @reset to avoid potential confusions with
5182 the shell command clear. Also renamed @cl to @clear, which does
5191 the shell command clear. Also renamed @cl to @clear, which does
5183 exactly what people expect it to from their shell experience.
5192 exactly what people expect it to from their shell experience.
5184
5193
5185 Added a check to the @reset command (since it's so
5194 Added a check to the @reset command (since it's so
5186 destructive, it's probably a good idea to ask for confirmation).
5195 destructive, it's probably a good idea to ask for confirmation).
5187 But now reset only works for full namespace resetting. Since the
5196 But now reset only works for full namespace resetting. Since the
5188 del keyword is already there for deleting a few specific
5197 del keyword is already there for deleting a few specific
5189 variables, I don't see the point of having a redundant magic
5198 variables, I don't see the point of having a redundant magic
5190 function for the same task.
5199 function for the same task.
5191
5200
5192 2001-11-24 Fernando Perez <fperez@colorado.edu>
5201 2001-11-24 Fernando Perez <fperez@colorado.edu>
5193
5202
5194 * Updated the builtin docs (esp. the ? ones).
5203 * Updated the builtin docs (esp. the ? ones).
5195
5204
5196 * Ran all the code through pychecker. Not terribly impressed with
5205 * Ran all the code through pychecker. Not terribly impressed with
5197 it: lots of spurious warnings and didn't really find anything of
5206 it: lots of spurious warnings and didn't really find anything of
5198 substance (just a few modules being imported and not used).
5207 substance (just a few modules being imported and not used).
5199
5208
5200 * Implemented the new ultraTB functionality into IPython. New
5209 * Implemented the new ultraTB functionality into IPython. New
5201 option: xcolors. This chooses color scheme. xmode now only selects
5210 option: xcolors. This chooses color scheme. xmode now only selects
5202 between Plain and Verbose. Better orthogonality.
5211 between Plain and Verbose. Better orthogonality.
5203
5212
5204 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5213 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5205 mode and color scheme for the exception handlers. Now it's
5214 mode and color scheme for the exception handlers. Now it's
5206 possible to have the verbose traceback with no coloring.
5215 possible to have the verbose traceback with no coloring.
5207
5216
5208 2001-11-23 Fernando Perez <fperez@colorado.edu>
5217 2001-11-23 Fernando Perez <fperez@colorado.edu>
5209
5218
5210 * Version 0.1.12 released, 0.1.13 opened.
5219 * Version 0.1.12 released, 0.1.13 opened.
5211
5220
5212 * Removed option to set auto-quote and auto-paren escapes by
5221 * Removed option to set auto-quote and auto-paren escapes by
5213 user. The chances of breaking valid syntax are just too high. If
5222 user. The chances of breaking valid syntax are just too high. If
5214 someone *really* wants, they can always dig into the code.
5223 someone *really* wants, they can always dig into the code.
5215
5224
5216 * Made prompt separators configurable.
5225 * Made prompt separators configurable.
5217
5226
5218 2001-11-22 Fernando Perez <fperez@colorado.edu>
5227 2001-11-22 Fernando Perez <fperez@colorado.edu>
5219
5228
5220 * Small bugfixes in many places.
5229 * Small bugfixes in many places.
5221
5230
5222 * Removed the MyCompleter class from ipplib. It seemed redundant
5231 * Removed the MyCompleter class from ipplib. It seemed redundant
5223 with the C-p,C-n history search functionality. Less code to
5232 with the C-p,C-n history search functionality. Less code to
5224 maintain.
5233 maintain.
5225
5234
5226 * Moved all the original ipython.py code into ipythonlib.py. Right
5235 * Moved all the original ipython.py code into ipythonlib.py. Right
5227 now it's just one big dump into a function called make_IPython, so
5236 now it's just one big dump into a function called make_IPython, so
5228 no real modularity has been gained. But at least it makes the
5237 no real modularity has been gained. But at least it makes the
5229 wrapper script tiny, and since ipythonlib is a module, it gets
5238 wrapper script tiny, and since ipythonlib is a module, it gets
5230 compiled and startup is much faster.
5239 compiled and startup is much faster.
5231
5240
5232 This is a reasobably 'deep' change, so we should test it for a
5241 This is a reasobably 'deep' change, so we should test it for a
5233 while without messing too much more with the code.
5242 while without messing too much more with the code.
5234
5243
5235 2001-11-21 Fernando Perez <fperez@colorado.edu>
5244 2001-11-21 Fernando Perez <fperez@colorado.edu>
5236
5245
5237 * Version 0.1.11 released, 0.1.12 opened for further work.
5246 * Version 0.1.11 released, 0.1.12 opened for further work.
5238
5247
5239 * Removed dependency on Itpl. It was only needed in one place. It
5248 * Removed dependency on Itpl. It was only needed in one place. It
5240 would be nice if this became part of python, though. It makes life
5249 would be nice if this became part of python, though. It makes life
5241 *a lot* easier in some cases.
5250 *a lot* easier in some cases.
5242
5251
5243 * Simplified the prefilter code a bit. Now all handlers are
5252 * Simplified the prefilter code a bit. Now all handlers are
5244 expected to explicitly return a value (at least a blank string).
5253 expected to explicitly return a value (at least a blank string).
5245
5254
5246 * Heavy edits in ipplib. Removed the help system altogether. Now
5255 * Heavy edits in ipplib. Removed the help system altogether. Now
5247 obj?/?? is used for inspecting objects, a magic @doc prints
5256 obj?/?? is used for inspecting objects, a magic @doc prints
5248 docstrings, and full-blown Python help is accessed via the 'help'
5257 docstrings, and full-blown Python help is accessed via the 'help'
5249 keyword. This cleans up a lot of code (less to maintain) and does
5258 keyword. This cleans up a lot of code (less to maintain) and does
5250 the job. Since 'help' is now a standard Python component, might as
5259 the job. Since 'help' is now a standard Python component, might as
5251 well use it and remove duplicate functionality.
5260 well use it and remove duplicate functionality.
5252
5261
5253 Also removed the option to use ipplib as a standalone program. By
5262 Also removed the option to use ipplib as a standalone program. By
5254 now it's too dependent on other parts of IPython to function alone.
5263 now it's too dependent on other parts of IPython to function alone.
5255
5264
5256 * Fixed bug in genutils.pager. It would crash if the pager was
5265 * Fixed bug in genutils.pager. It would crash if the pager was
5257 exited immediately after opening (broken pipe).
5266 exited immediately after opening (broken pipe).
5258
5267
5259 * Trimmed down the VerboseTB reporting a little. The header is
5268 * Trimmed down the VerboseTB reporting a little. The header is
5260 much shorter now and the repeated exception arguments at the end
5269 much shorter now and the repeated exception arguments at the end
5261 have been removed. For interactive use the old header seemed a bit
5270 have been removed. For interactive use the old header seemed a bit
5262 excessive.
5271 excessive.
5263
5272
5264 * Fixed small bug in output of @whos for variables with multi-word
5273 * Fixed small bug in output of @whos for variables with multi-word
5265 types (only first word was displayed).
5274 types (only first word was displayed).
5266
5275
5267 2001-11-17 Fernando Perez <fperez@colorado.edu>
5276 2001-11-17 Fernando Perez <fperez@colorado.edu>
5268
5277
5269 * Version 0.1.10 released, 0.1.11 opened for further work.
5278 * Version 0.1.10 released, 0.1.11 opened for further work.
5270
5279
5271 * Modified dirs and friends. dirs now *returns* the stack (not
5280 * Modified dirs and friends. dirs now *returns* the stack (not
5272 prints), so one can manipulate it as a variable. Convenient to
5281 prints), so one can manipulate it as a variable. Convenient to
5273 travel along many directories.
5282 travel along many directories.
5274
5283
5275 * Fixed bug in magic_pdef: would only work with functions with
5284 * Fixed bug in magic_pdef: would only work with functions with
5276 arguments with default values.
5285 arguments with default values.
5277
5286
5278 2001-11-14 Fernando Perez <fperez@colorado.edu>
5287 2001-11-14 Fernando Perez <fperez@colorado.edu>
5279
5288
5280 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5289 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5281 example with IPython. Various other minor fixes and cleanups.
5290 example with IPython. Various other minor fixes and cleanups.
5282
5291
5283 * Version 0.1.9 released, 0.1.10 opened for further work.
5292 * Version 0.1.9 released, 0.1.10 opened for further work.
5284
5293
5285 * Added sys.path to the list of directories searched in the
5294 * Added sys.path to the list of directories searched in the
5286 execfile= option. It used to be the current directory and the
5295 execfile= option. It used to be the current directory and the
5287 user's IPYTHONDIR only.
5296 user's IPYTHONDIR only.
5288
5297
5289 2001-11-13 Fernando Perez <fperez@colorado.edu>
5298 2001-11-13 Fernando Perez <fperez@colorado.edu>
5290
5299
5291 * Reinstated the raw_input/prefilter separation that Janko had
5300 * Reinstated the raw_input/prefilter separation that Janko had
5292 initially. This gives a more convenient setup for extending the
5301 initially. This gives a more convenient setup for extending the
5293 pre-processor from the outside: raw_input always gets a string,
5302 pre-processor from the outside: raw_input always gets a string,
5294 and prefilter has to process it. We can then redefine prefilter
5303 and prefilter has to process it. We can then redefine prefilter
5295 from the outside and implement extensions for special
5304 from the outside and implement extensions for special
5296 purposes.
5305 purposes.
5297
5306
5298 Today I got one for inputting PhysicalQuantity objects
5307 Today I got one for inputting PhysicalQuantity objects
5299 (from Scientific) without needing any function calls at
5308 (from Scientific) without needing any function calls at
5300 all. Extremely convenient, and it's all done as a user-level
5309 all. Extremely convenient, and it's all done as a user-level
5301 extension (no IPython code was touched). Now instead of:
5310 extension (no IPython code was touched). Now instead of:
5302 a = PhysicalQuantity(4.2,'m/s**2')
5311 a = PhysicalQuantity(4.2,'m/s**2')
5303 one can simply say
5312 one can simply say
5304 a = 4.2 m/s**2
5313 a = 4.2 m/s**2
5305 or even
5314 or even
5306 a = 4.2 m/s^2
5315 a = 4.2 m/s^2
5307
5316
5308 I use this, but it's also a proof of concept: IPython really is
5317 I use this, but it's also a proof of concept: IPython really is
5309 fully user-extensible, even at the level of the parsing of the
5318 fully user-extensible, even at the level of the parsing of the
5310 command line. It's not trivial, but it's perfectly doable.
5319 command line. It's not trivial, but it's perfectly doable.
5311
5320
5312 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5321 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5313 the problem of modules being loaded in the inverse order in which
5322 the problem of modules being loaded in the inverse order in which
5314 they were defined in
5323 they were defined in
5315
5324
5316 * Version 0.1.8 released, 0.1.9 opened for further work.
5325 * Version 0.1.8 released, 0.1.9 opened for further work.
5317
5326
5318 * Added magics pdef, source and file. They respectively show the
5327 * Added magics pdef, source and file. They respectively show the
5319 definition line ('prototype' in C), source code and full python
5328 definition line ('prototype' in C), source code and full python
5320 file for any callable object. The object inspector oinfo uses
5329 file for any callable object. The object inspector oinfo uses
5321 these to show the same information.
5330 these to show the same information.
5322
5331
5323 * Version 0.1.7 released, 0.1.8 opened for further work.
5332 * Version 0.1.7 released, 0.1.8 opened for further work.
5324
5333
5325 * Separated all the magic functions into a class called Magic. The
5334 * Separated all the magic functions into a class called Magic. The
5326 InteractiveShell class was becoming too big for Xemacs to handle
5335 InteractiveShell class was becoming too big for Xemacs to handle
5327 (de-indenting a line would lock it up for 10 seconds while it
5336 (de-indenting a line would lock it up for 10 seconds while it
5328 backtracked on the whole class!)
5337 backtracked on the whole class!)
5329
5338
5330 FIXME: didn't work. It can be done, but right now namespaces are
5339 FIXME: didn't work. It can be done, but right now namespaces are
5331 all messed up. Do it later (reverted it for now, so at least
5340 all messed up. Do it later (reverted it for now, so at least
5332 everything works as before).
5341 everything works as before).
5333
5342
5334 * Got the object introspection system (magic_oinfo) working! I
5343 * Got the object introspection system (magic_oinfo) working! I
5335 think this is pretty much ready for release to Janko, so he can
5344 think this is pretty much ready for release to Janko, so he can
5336 test it for a while and then announce it. Pretty much 100% of what
5345 test it for a while and then announce it. Pretty much 100% of what
5337 I wanted for the 'phase 1' release is ready. Happy, tired.
5346 I wanted for the 'phase 1' release is ready. Happy, tired.
5338
5347
5339 2001-11-12 Fernando Perez <fperez@colorado.edu>
5348 2001-11-12 Fernando Perez <fperez@colorado.edu>
5340
5349
5341 * Version 0.1.6 released, 0.1.7 opened for further work.
5350 * Version 0.1.6 released, 0.1.7 opened for further work.
5342
5351
5343 * Fixed bug in printing: it used to test for truth before
5352 * Fixed bug in printing: it used to test for truth before
5344 printing, so 0 wouldn't print. Now checks for None.
5353 printing, so 0 wouldn't print. Now checks for None.
5345
5354
5346 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5355 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5347 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5356 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5348 reaches by hand into the outputcache. Think of a better way to do
5357 reaches by hand into the outputcache. Think of a better way to do
5349 this later.
5358 this later.
5350
5359
5351 * Various small fixes thanks to Nathan's comments.
5360 * Various small fixes thanks to Nathan's comments.
5352
5361
5353 * Changed magic_pprint to magic_Pprint. This way it doesn't
5362 * Changed magic_pprint to magic_Pprint. This way it doesn't
5354 collide with pprint() and the name is consistent with the command
5363 collide with pprint() and the name is consistent with the command
5355 line option.
5364 line option.
5356
5365
5357 * Changed prompt counter behavior to be fully like
5366 * Changed prompt counter behavior to be fully like
5358 Mathematica's. That is, even input that doesn't return a result
5367 Mathematica's. That is, even input that doesn't return a result
5359 raises the prompt counter. The old behavior was kind of confusing
5368 raises the prompt counter. The old behavior was kind of confusing
5360 (getting the same prompt number several times if the operation
5369 (getting the same prompt number several times if the operation
5361 didn't return a result).
5370 didn't return a result).
5362
5371
5363 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5372 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5364
5373
5365 * Fixed -Classic mode (wasn't working anymore).
5374 * Fixed -Classic mode (wasn't working anymore).
5366
5375
5367 * Added colored prompts using Nathan's new code. Colors are
5376 * Added colored prompts using Nathan's new code. Colors are
5368 currently hardwired, they can be user-configurable. For
5377 currently hardwired, they can be user-configurable. For
5369 developers, they can be chosen in file ipythonlib.py, at the
5378 developers, they can be chosen in file ipythonlib.py, at the
5370 beginning of the CachedOutput class def.
5379 beginning of the CachedOutput class def.
5371
5380
5372 2001-11-11 Fernando Perez <fperez@colorado.edu>
5381 2001-11-11 Fernando Perez <fperez@colorado.edu>
5373
5382
5374 * Version 0.1.5 released, 0.1.6 opened for further work.
5383 * Version 0.1.5 released, 0.1.6 opened for further work.
5375
5384
5376 * Changed magic_env to *return* the environment as a dict (not to
5385 * Changed magic_env to *return* the environment as a dict (not to
5377 print it). This way it prints, but it can also be processed.
5386 print it). This way it prints, but it can also be processed.
5378
5387
5379 * Added Verbose exception reporting to interactive
5388 * Added Verbose exception reporting to interactive
5380 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5389 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5381 traceback. Had to make some changes to the ultraTB file. This is
5390 traceback. Had to make some changes to the ultraTB file. This is
5382 probably the last 'big' thing in my mental todo list. This ties
5391 probably the last 'big' thing in my mental todo list. This ties
5383 in with the next entry:
5392 in with the next entry:
5384
5393
5385 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5394 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5386 has to specify is Plain, Color or Verbose for all exception
5395 has to specify is Plain, Color or Verbose for all exception
5387 handling.
5396 handling.
5388
5397
5389 * Removed ShellServices option. All this can really be done via
5398 * Removed ShellServices option. All this can really be done via
5390 the magic system. It's easier to extend, cleaner and has automatic
5399 the magic system. It's easier to extend, cleaner and has automatic
5391 namespace protection and documentation.
5400 namespace protection and documentation.
5392
5401
5393 2001-11-09 Fernando Perez <fperez@colorado.edu>
5402 2001-11-09 Fernando Perez <fperez@colorado.edu>
5394
5403
5395 * Fixed bug in output cache flushing (missing parameter to
5404 * Fixed bug in output cache flushing (missing parameter to
5396 __init__). Other small bugs fixed (found using pychecker).
5405 __init__). Other small bugs fixed (found using pychecker).
5397
5406
5398 * Version 0.1.4 opened for bugfixing.
5407 * Version 0.1.4 opened for bugfixing.
5399
5408
5400 2001-11-07 Fernando Perez <fperez@colorado.edu>
5409 2001-11-07 Fernando Perez <fperez@colorado.edu>
5401
5410
5402 * Version 0.1.3 released, mainly because of the raw_input bug.
5411 * Version 0.1.3 released, mainly because of the raw_input bug.
5403
5412
5404 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5413 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5405 and when testing for whether things were callable, a call could
5414 and when testing for whether things were callable, a call could
5406 actually be made to certain functions. They would get called again
5415 actually be made to certain functions. They would get called again
5407 once 'really' executed, with a resulting double call. A disaster
5416 once 'really' executed, with a resulting double call. A disaster
5408 in many cases (list.reverse() would never work!).
5417 in many cases (list.reverse() would never work!).
5409
5418
5410 * Removed prefilter() function, moved its code to raw_input (which
5419 * Removed prefilter() function, moved its code to raw_input (which
5411 after all was just a near-empty caller for prefilter). This saves
5420 after all was just a near-empty caller for prefilter). This saves
5412 a function call on every prompt, and simplifies the class a tiny bit.
5421 a function call on every prompt, and simplifies the class a tiny bit.
5413
5422
5414 * Fix _ip to __ip name in magic example file.
5423 * Fix _ip to __ip name in magic example file.
5415
5424
5416 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5425 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5417 work with non-gnu versions of tar.
5426 work with non-gnu versions of tar.
5418
5427
5419 2001-11-06 Fernando Perez <fperez@colorado.edu>
5428 2001-11-06 Fernando Perez <fperez@colorado.edu>
5420
5429
5421 * Version 0.1.2. Just to keep track of the recent changes.
5430 * Version 0.1.2. Just to keep track of the recent changes.
5422
5431
5423 * Fixed nasty bug in output prompt routine. It used to check 'if
5432 * Fixed nasty bug in output prompt routine. It used to check 'if
5424 arg != None...'. Problem is, this fails if arg implements a
5433 arg != None...'. Problem is, this fails if arg implements a
5425 special comparison (__cmp__) which disallows comparing to
5434 special comparison (__cmp__) which disallows comparing to
5426 None. Found it when trying to use the PhysicalQuantity module from
5435 None. Found it when trying to use the PhysicalQuantity module from
5427 ScientificPython.
5436 ScientificPython.
5428
5437
5429 2001-11-05 Fernando Perez <fperez@colorado.edu>
5438 2001-11-05 Fernando Perez <fperez@colorado.edu>
5430
5439
5431 * Also added dirs. Now the pushd/popd/dirs family functions
5440 * Also added dirs. Now the pushd/popd/dirs family functions
5432 basically like the shell, with the added convenience of going home
5441 basically like the shell, with the added convenience of going home
5433 when called with no args.
5442 when called with no args.
5434
5443
5435 * pushd/popd slightly modified to mimic shell behavior more
5444 * pushd/popd slightly modified to mimic shell behavior more
5436 closely.
5445 closely.
5437
5446
5438 * Added env,pushd,popd from ShellServices as magic functions. I
5447 * Added env,pushd,popd from ShellServices as magic functions. I
5439 think the cleanest will be to port all desired functions from
5448 think the cleanest will be to port all desired functions from
5440 ShellServices as magics and remove ShellServices altogether. This
5449 ShellServices as magics and remove ShellServices altogether. This
5441 will provide a single, clean way of adding functionality
5450 will provide a single, clean way of adding functionality
5442 (shell-type or otherwise) to IP.
5451 (shell-type or otherwise) to IP.
5443
5452
5444 2001-11-04 Fernando Perez <fperez@colorado.edu>
5453 2001-11-04 Fernando Perez <fperez@colorado.edu>
5445
5454
5446 * Added .ipython/ directory to sys.path. This way users can keep
5455 * Added .ipython/ directory to sys.path. This way users can keep
5447 customizations there and access them via import.
5456 customizations there and access them via import.
5448
5457
5449 2001-11-03 Fernando Perez <fperez@colorado.edu>
5458 2001-11-03 Fernando Perez <fperez@colorado.edu>
5450
5459
5451 * Opened version 0.1.1 for new changes.
5460 * Opened version 0.1.1 for new changes.
5452
5461
5453 * Changed version number to 0.1.0: first 'public' release, sent to
5462 * Changed version number to 0.1.0: first 'public' release, sent to
5454 Nathan and Janko.
5463 Nathan and Janko.
5455
5464
5456 * Lots of small fixes and tweaks.
5465 * Lots of small fixes and tweaks.
5457
5466
5458 * Minor changes to whos format. Now strings are shown, snipped if
5467 * Minor changes to whos format. Now strings are shown, snipped if
5459 too long.
5468 too long.
5460
5469
5461 * Changed ShellServices to work on __main__ so they show up in @who
5470 * Changed ShellServices to work on __main__ so they show up in @who
5462
5471
5463 * Help also works with ? at the end of a line:
5472 * Help also works with ? at the end of a line:
5464 ?sin and sin?
5473 ?sin and sin?
5465 both produce the same effect. This is nice, as often I use the
5474 both produce the same effect. This is nice, as often I use the
5466 tab-complete to find the name of a method, but I used to then have
5475 tab-complete to find the name of a method, but I used to then have
5467 to go to the beginning of the line to put a ? if I wanted more
5476 to go to the beginning of the line to put a ? if I wanted more
5468 info. Now I can just add the ? and hit return. Convenient.
5477 info. Now I can just add the ? and hit return. Convenient.
5469
5478
5470 2001-11-02 Fernando Perez <fperez@colorado.edu>
5479 2001-11-02 Fernando Perez <fperez@colorado.edu>
5471
5480
5472 * Python version check (>=2.1) added.
5481 * Python version check (>=2.1) added.
5473
5482
5474 * Added LazyPython documentation. At this point the docs are quite
5483 * Added LazyPython documentation. At this point the docs are quite
5475 a mess. A cleanup is in order.
5484 a mess. A cleanup is in order.
5476
5485
5477 * Auto-installer created. For some bizarre reason, the zipfiles
5486 * Auto-installer created. For some bizarre reason, the zipfiles
5478 module isn't working on my system. So I made a tar version
5487 module isn't working on my system. So I made a tar version
5479 (hopefully the command line options in various systems won't kill
5488 (hopefully the command line options in various systems won't kill
5480 me).
5489 me).
5481
5490
5482 * Fixes to Struct in genutils. Now all dictionary-like methods are
5491 * Fixes to Struct in genutils. Now all dictionary-like methods are
5483 protected (reasonably).
5492 protected (reasonably).
5484
5493
5485 * Added pager function to genutils and changed ? to print usage
5494 * Added pager function to genutils and changed ? to print usage
5486 note through it (it was too long).
5495 note through it (it was too long).
5487
5496
5488 * Added the LazyPython functionality. Works great! I changed the
5497 * Added the LazyPython functionality. Works great! I changed the
5489 auto-quote escape to ';', it's on home row and next to '. But
5498 auto-quote escape to ';', it's on home row and next to '. But
5490 both auto-quote and auto-paren (still /) escapes are command-line
5499 both auto-quote and auto-paren (still /) escapes are command-line
5491 parameters.
5500 parameters.
5492
5501
5493
5502
5494 2001-11-01 Fernando Perez <fperez@colorado.edu>
5503 2001-11-01 Fernando Perez <fperez@colorado.edu>
5495
5504
5496 * Version changed to 0.0.7. Fairly large change: configuration now
5505 * Version changed to 0.0.7. Fairly large change: configuration now
5497 is all stored in a directory, by default .ipython. There, all
5506 is all stored in a directory, by default .ipython. There, all
5498 config files have normal looking names (not .names)
5507 config files have normal looking names (not .names)
5499
5508
5500 * Version 0.0.6 Released first to Lucas and Archie as a test
5509 * Version 0.0.6 Released first to Lucas and Archie as a test
5501 run. Since it's the first 'semi-public' release, change version to
5510 run. Since it's the first 'semi-public' release, change version to
5502 > 0.0.6 for any changes now.
5511 > 0.0.6 for any changes now.
5503
5512
5504 * Stuff I had put in the ipplib.py changelog:
5513 * Stuff I had put in the ipplib.py changelog:
5505
5514
5506 Changes to InteractiveShell:
5515 Changes to InteractiveShell:
5507
5516
5508 - Made the usage message a parameter.
5517 - Made the usage message a parameter.
5509
5518
5510 - Require the name of the shell variable to be given. It's a bit
5519 - Require the name of the shell variable to be given. It's a bit
5511 of a hack, but allows the name 'shell' not to be hardwire in the
5520 of a hack, but allows the name 'shell' not to be hardwire in the
5512 magic (@) handler, which is problematic b/c it requires
5521 magic (@) handler, which is problematic b/c it requires
5513 polluting the global namespace with 'shell'. This in turn is
5522 polluting the global namespace with 'shell'. This in turn is
5514 fragile: if a user redefines a variable called shell, things
5523 fragile: if a user redefines a variable called shell, things
5515 break.
5524 break.
5516
5525
5517 - magic @: all functions available through @ need to be defined
5526 - magic @: all functions available through @ need to be defined
5518 as magic_<name>, even though they can be called simply as
5527 as magic_<name>, even though they can be called simply as
5519 @<name>. This allows the special command @magic to gather
5528 @<name>. This allows the special command @magic to gather
5520 information automatically about all existing magic functions,
5529 information automatically about all existing magic functions,
5521 even if they are run-time user extensions, by parsing the shell
5530 even if they are run-time user extensions, by parsing the shell
5522 instance __dict__ looking for special magic_ names.
5531 instance __dict__ looking for special magic_ names.
5523
5532
5524 - mainloop: added *two* local namespace parameters. This allows
5533 - mainloop: added *two* local namespace parameters. This allows
5525 the class to differentiate between parameters which were there
5534 the class to differentiate between parameters which were there
5526 before and after command line initialization was processed. This
5535 before and after command line initialization was processed. This
5527 way, later @who can show things loaded at startup by the
5536 way, later @who can show things loaded at startup by the
5528 user. This trick was necessary to make session saving/reloading
5537 user. This trick was necessary to make session saving/reloading
5529 really work: ideally after saving/exiting/reloading a session,
5538 really work: ideally after saving/exiting/reloading a session,
5530 *everythin* should look the same, including the output of @who. I
5539 *everythin* should look the same, including the output of @who. I
5531 was only able to make this work with this double namespace
5540 was only able to make this work with this double namespace
5532 trick.
5541 trick.
5533
5542
5534 - added a header to the logfile which allows (almost) full
5543 - added a header to the logfile which allows (almost) full
5535 session restoring.
5544 session restoring.
5536
5545
5537 - prepend lines beginning with @ or !, with a and log
5546 - prepend lines beginning with @ or !, with a and log
5538 them. Why? !lines: may be useful to know what you did @lines:
5547 them. Why? !lines: may be useful to know what you did @lines:
5539 they may affect session state. So when restoring a session, at
5548 they may affect session state. So when restoring a session, at
5540 least inform the user of their presence. I couldn't quite get
5549 least inform the user of their presence. I couldn't quite get
5541 them to properly re-execute, but at least the user is warned.
5550 them to properly re-execute, but at least the user is warned.
5542
5551
5543 * Started ChangeLog.
5552 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now